Commit 77f776356011b878d8d191407cb5ef22e350e8a7

Authored by owen
1 parent b1ac3a0b

优惠券:完善优惠券领取接口

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponController.java
1 package cn.iocoder.yudao.module.promotion.controller.app.coupon; 1 package cn.iocoder.yudao.module.promotion.controller.app.coupon;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.map.MapUtil;
3 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 5 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; 7 import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
6 -import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponMatchReqVO;  
7 -import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponMatchRespVO;  
8 -import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponPageReqVO;  
9 -import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponRespVO;  
10 -import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.template.AppCouponTemplatePageReqVO; 8 +import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.*;
11 import cn.iocoder.yudao.module.promotion.convert.coupon.CouponConvert; 9 import cn.iocoder.yudao.module.promotion.convert.coupon.CouponConvert;
12 import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO; 10 import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO;
  11 +import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponTemplateDO;
  12 +import cn.iocoder.yudao.module.promotion.enums.coupon.CouponTakeTypeEnum;
13 import cn.iocoder.yudao.module.promotion.service.coupon.CouponService; 13 import cn.iocoder.yudao.module.promotion.service.coupon.CouponService;
  14 +import cn.iocoder.yudao.module.promotion.service.coupon.CouponTemplateService;
14 import io.swagger.v3.oas.annotations.Operation; 15 import io.swagger.v3.oas.annotations.Operation;
  16 +import io.swagger.v3.oas.annotations.Parameter;
15 import io.swagger.v3.oas.annotations.tags.Tag; 17 import io.swagger.v3.oas.annotations.tags.Tag;
16 import org.springframework.validation.annotation.Validated; 18 import org.springframework.validation.annotation.Validated;
17 import org.springframework.web.bind.annotation.*; 19 import org.springframework.web.bind.annotation.*;
18 20
19 import javax.annotation.Resource; 21 import javax.annotation.Resource;
  22 +import javax.validation.Valid;
20 import java.util.Collections; 23 import java.util.Collections;
21 import java.util.List; 24 import java.util.List;
22 25
@@ -31,12 +34,25 @@ public class AppCouponController { @@ -31,12 +34,25 @@ public class AppCouponController {
31 34
32 @Resource 35 @Resource
33 private CouponService couponService; 36 private CouponService couponService;
  37 + @Resource
  38 + private CouponTemplateService couponTemplateService;
34 39
35 - // TODO 芋艿:待实现  
36 @PostMapping("/take") 40 @PostMapping("/take")
37 @Operation(summary = "领取优惠劵") 41 @Operation(summary = "领取优惠劵")
38 - public CommonResult<Long> takeCoupon(@RequestBody AppCouponTemplatePageReqVO pageReqVO) {  
39 - return success(1L); 42 + @Parameter(name = "templateId", description = "优惠券模板编号", required = true, example = "1024")
  43 + public CommonResult<Boolean> takeCoupon(@Valid @RequestBody AppCouponTakeReqVO reqVO) {
  44 + Long userId = getLoginUserId();
  45 + // 领取
  46 + couponService.takeCoupon(reqVO.getTemplateId(), CollUtil.newHashSet(userId), CouponTakeTypeEnum.USER);
  47 + // 检查是否可以继续领取
  48 + CouponTemplateDO couponTemplate = couponTemplateService.getCouponTemplate(reqVO.getTemplateId());
  49 + boolean canTakeAgain = true;
  50 + if (couponTemplate.getTakeLimitCount() != null && couponTemplate.getTakeLimitCount() > 0) {
  51 + Integer takeCount = MapUtil.getInt(couponService.getTakeCountMapByTemplateIds(
  52 + Collections.singleton(reqVO.getTemplateId()), userId), reqVO.getTemplateId(), 0);
  53 + canTakeAgain = takeCount < couponTemplate.getTakeLimitCount();
  54 + }
  55 + return success(canTakeAgain);
40 } 56 }
41 57
42 @GetMapping("/match-list") 58 @GetMapping("/match-list")