Commit 9805f9f512705fd514b2971a1ae96b0985be639c

Authored by YunaiV
1 parent 5f7505d4

【功能修复】商城:指定发卷、新人卷,支持无限发放的兜底

yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTakeTypeEnum.java
... ... @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
5 5 import lombok.Getter;
6 6  
7 7 import java.util.Arrays;
  8 +import java.util.Objects;
8 9  
9 10 /**
10 11 * 优惠劵领取方式
... ... @@ -20,12 +21,12 @@ public enum CouponTakeTypeEnum implements IntArrayValuable {
20 21 REGISTER(3, "新人券"), // 注册时自动领取
21 22 ;
22 23  
23   - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CouponTakeTypeEnum::getValue).toArray();
  24 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CouponTakeTypeEnum::getType).toArray();
24 25  
25 26 /**
26 27 * 值
27 28 */
28   - private final Integer value;
  29 + private final Integer type;
29 30 /**
30 31 * 名字
31 32 */
... ... @@ -35,4 +36,9 @@ public enum CouponTakeTypeEnum implements IntArrayValuable {
35 36 public int[] array() {
36 37 return ARRAYS;
37 38 }
  39 +
  40 + public static boolean isUser(Integer type) {
  41 + return Objects.equals(USER.getType(), type);
  42 + }
  43 +
38 44 }
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponTemplateController.java
... ... @@ -73,7 +73,7 @@ public class AppCouponTemplateController {
73 73 // 1.1 处理查询条件:商品范围编号
74 74 Long productScopeValue = getProductScopeValue(productScope, spuId);
75 75 // 1.2 处理查询条件:领取方式 = 直接领取
76   - List<Integer> canTakeTypes = singletonList(CouponTakeTypeEnum.USER.getValue());
  76 + List<Integer> canTakeTypes = singletonList(CouponTakeTypeEnum.USER.getType());
77 77  
78 78 // 2. 查询
79 79 List<CouponTemplateDO> list = couponTemplateService.getCouponTemplateList(canTakeTypes, productScope,
... ... @@ -105,7 +105,7 @@ public class AppCouponTemplateController {
105 105 // 1.1 处理查询条件:商品范围编号
106 106 Long productScopeValue = getProductScopeValue(pageReqVO.getProductScope(), pageReqVO.getSpuId());
107 107 // 1.2 处理查询条件:领取方式 = 直接领取
108   - List<Integer> canTakeTypes = singletonList(CouponTakeTypeEnum.USER.getValue());
  108 + List<Integer> canTakeTypes = singletonList(CouponTakeTypeEnum.USER.getType());
109 109  
110 110 // 2. 分页查询
111 111 PageResult<CouponTemplateDO> pageResult = couponTemplateService.getCouponTemplatePage(
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java
... ... @@ -284,8 +284,9 @@ public class CouponServiceImpl implements CouponService {
284 284 if (couponTemplate == null) {
285 285 throw exception(COUPON_TEMPLATE_NOT_EXISTS);
286 286 }
287   - // 校验剩余数量
288   - if (couponTemplate.getTakeCount() + userIds.size() > couponTemplate.getTotalCount()) {
  287 + // 校验剩余数量(仅在 CouponTakeTypeEnum.USER 用户领取时)
  288 + if (CouponTakeTypeEnum.isUser(couponTemplate.getTakeCount())
  289 + && couponTemplate.getTakeCount() + userIds.size() > couponTemplate.getTotalCount()) {
289 290 throw exception(COUPON_TEMPLATE_NOT_ENOUGH);
290 291 }
291 292 // 校验"固定日期"的有效期类型是否过期
... ... @@ -295,7 +296,7 @@ public class CouponServiceImpl implements CouponService {
295 296 }
296 297 }
297 298 // 校验领取方式
298   - if (ObjectUtil.notEqual(couponTemplate.getTakeType(), takeType.getValue())) {
  299 + if (ObjectUtil.notEqual(couponTemplate.getTakeType(), takeType.getType())) {
299 300 throw exception(COUPON_TEMPLATE_CANNOT_TAKE);
300 301 }
301 302 }
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java
... ... @@ -57,8 +57,10 @@ public class CouponTemplateServiceImpl implements CouponTemplateService {
57 57 public void updateCouponTemplate(CouponTemplateUpdateReqVO updateReqVO) {
58 58 // 校验存在
59 59 CouponTemplateDO couponTemplate = validateCouponTemplateExists(updateReqVO.getId());
60   - // 校验发放数量不能过小
61   - if (updateReqVO.getTotalCount() < couponTemplate.getTakeCount()) {
  60 + // 校验发放数量不能过小(仅在 CouponTakeTypeEnum.USER 用户领取时)
  61 + if (CouponTakeTypeEnum.isUser(couponTemplate.getTakeType())
  62 + && updateReqVO.getTotalCount() > 0 // 大于 0 的原因,是因为 -1 不限制
  63 + && updateReqVO.getTotalCount() < couponTemplate.getTakeCount()) {
62 64 throw exception(COUPON_TEMPLATE_TOTAL_COUNT_TOO_SMALL, couponTemplate.getTakeCount());
63 65 }
64 66 // 校验商品范围
... ... @@ -118,7 +120,7 @@ public class CouponTemplateServiceImpl implements CouponTemplateService {
118 120  
119 121 @Override
120 122 public List<CouponTemplateDO> getCouponTemplateListByTakeType(CouponTakeTypeEnum takeType) {
121   - return couponTemplateMapper.selectListByTakeType(takeType.getValue());
  123 + return couponTemplateMapper.selectListByTakeType(takeType.getType());
122 124 }
123 125  
124 126 @Override
... ...