From e6106ecb8863ebd2b601eb52dc52b9e206018b61 Mon Sep 17 00:00:00 2001 From: irving Date: Mon, 6 Oct 2025 23:52:20 -0400 Subject: [PATCH] feat(coupon): add enum ClaimConditionType and whitelist support\n\n- Add CouponClaimConditionType enum (ALL/FILTER/WHITELIST)\n- Schema: add custom_whitelist JSON column (Flyway V2)\n- Entity/VO: add customWhitelist; claimConditionType now 0/1/2\n- Service: enforce whitelist when claimConditionType=2\n- Controller: validate whitelist when creating coupon\n- Fix imports per formatting --- .../controller/PlayCouponInfoController.java | 6 ++- .../module/entity/PlayCouponInfoEntity.java | 8 +++- .../enums/CouponClaimConditionType.java | 25 +++++++++++ .../shop/module/vo/PlayCouponInfoAddVo.java | 9 +++- .../module/vo/PlayCouponInfoReturnVo.java | 8 +++- .../impl/PlayCouponInfoServiceImpl.java | 45 +++++++++++-------- .../controller/WxCouponController.java | 2 - .../db/migration/V2__add_coupon_whitelist.sql | 5 +++ 8 files changed, 81 insertions(+), 27 deletions(-) create mode 100644 play-admin/src/main/java/com/starry/admin/modules/shop/module/enums/CouponClaimConditionType.java create mode 100644 play-admin/src/main/resources/db/migration/V2__add_coupon_whitelist.sql diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponInfoController.java index 0ce05bc..4cc61f4 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponInfoController.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponInfoController.java @@ -18,12 +18,10 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; - import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import javax.annotation.Resource; - import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -146,6 +144,10 @@ public class PlayCouponInfoController { } entity.setDiscountContent(discountContent); entity.setCouponOnLineState("1"); + // 领取白名单校验:当为2时必须配置白名单 + if ("2".equals(vo.getClaimConditionType()) && (vo.getCustomWhitelist() == null || vo.getCustomWhitelist().isEmpty())) { + throw new CustomException("领取条件为白名单时,必须设置领取白名单"); + } boolean success = playCouponInfoService.create(entity); if (success) { return R.ok(); diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponInfoEntity.java index f22e149..5d0ed94 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponInfoEntity.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponInfoEntity.java @@ -118,10 +118,16 @@ public class PlayCouponInfoEntity extends BaseEntity { private Integer clerkObtainedMaxQuantity; /** - * 领取条件类型(0:所有人可领取,1:指定条件领取) + * 领取条件类型:0=所有人可领取;1=按条件领取;2=仅白名单可领取。 */ private String claimConditionType; + /** + * 领取白名单(claimConditionType=2 生效)。JSON存储用户ID列表。 + */ + @TableField(typeHandler = StringTypeHandler.class) + private List customWhitelist; + /** * 顾客等级选择状态(0:未选择,1:选择) */ diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/enums/CouponClaimConditionType.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/enums/CouponClaimConditionType.java new file mode 100644 index 0000000..299646b --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/enums/CouponClaimConditionType.java @@ -0,0 +1,25 @@ +package com.starry.admin.modules.shop.module.enums; + +/** + * 优惠券领取条件类型 + */ +public enum CouponClaimConditionType { + ALL("0"), + FILTER("1"), + WHITELIST("2"); + + private final String code; + + CouponClaimConditionType(String code) { + this.code = code; + } + + public String code() { return code; } + + public static CouponClaimConditionType of(String code) { + for (CouponClaimConditionType t : values()) { + if (t.code.equals(code)) return t; + } + return ALL; + } +} diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoAddVo.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoAddVo.java index 972dbd4..34f474c 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoAddVo.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoAddVo.java @@ -120,12 +120,17 @@ public class PlayCouponInfoAddVo { private Integer clerkObtainedMaxQuantity; /** - * 领取条件类型(0:所有人可领取,1:指定条件领取) + * 领取条件类型:0=所有人;1=按条件;2=白名单。 */ @NotNull(message = "领取条件类型不能为空") - @Pattern(regexp = "[0|1]", message = "店员范围只能为0或者1") + @Pattern(regexp = "^(0|1|2)$", message = "领取条件类型只能为0或1或2") private String claimConditionType; + /** + * 领取白名单(claimConditionType=2 时校验):用户ID列表 + */ + private List customWhitelist; + /** * 顾客等级选择状态(0:未选择,1:选择) */ diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoReturnVo.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoReturnVo.java index 8e00e02..18bb1d1 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoReturnVo.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoReturnVo.java @@ -109,10 +109,16 @@ public class PlayCouponInfoReturnVo { private Integer clerkObtainedMaxQuantity; /** - * 领取条件类型(0:所有人可领取,1:指定条件领取) + * 领取条件类型:0=所有人;1=按条件;2=白名单。 */ private String claimConditionType; + /** + * 领取白名单(claimConditionType=2 生效) + */ + @TableField(typeHandler = StringTypeHandler.class) + private List customWhitelist; + /** * 顾客等级选择状态(0:未选择,1:选择) */ diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponInfoServiceImpl.java index c7a3911..9dbbb9d 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponInfoServiceImpl.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponInfoServiceImpl.java @@ -10,6 +10,7 @@ import com.starry.admin.common.exception.CustomException; import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity; import com.starry.admin.modules.shop.mapper.PlayCouponInfoMapper; import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; +import com.starry.admin.modules.shop.module.enums.CouponClaimConditionType; import com.starry.admin.modules.shop.module.vo.PlayCouponInfoQueryVo; import com.starry.admin.modules.shop.module.vo.PlayCouponInfoReturnVo; import com.starry.admin.modules.shop.service.IPlayCouponInfoService; @@ -84,26 +85,32 @@ public class PlayCouponInfoServiceImpl extends ServiceImpl