Commit 5f7505d4acd68a6f2442f2ce4155256f48537269

Authored by YunaiV
1 parent 996d1ca1

【代码评审】商城:满减送的校验逻辑

yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java
... ... @@ -44,7 +44,7 @@ public interface ErrorCodeConstants {
44 44 ErrorCode REWARD_ACTIVITY_UPDATE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_006_002, "满减送活动已关闭,不能修改");
45 45 ErrorCode REWARD_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED = new ErrorCode(1_013_006_003, "满减送活动未关闭,不能删除");
46 46 ErrorCode REWARD_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_006_004, "满减送活动已关闭,不能重复关闭");
47   - ErrorCode REWARD_ACTIVITY_SCOPE_EXISTS = new ErrorCode(1_013_006_005, "与该时间段已存在的满减送活动商品范围冲突。注意商品范围 全部 > 分类 > 商品");
  47 + ErrorCode REWARD_ACTIVITY_SCOPE_EXISTS = new ErrorCode(1_013_006_005, "与该时间段已存在的满减送活动商品范围冲突");
48 48  
49 49 // ========== TODO 空着 1-013-007-000 ============
50 50  
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImpl.java
... ... @@ -117,28 +117,30 @@ public class RewardActivityServiceImpl implements RewardActivityService {
117 117 * @param rewardActivity 请求
118 118 */
119 119 private void validateRewardActivitySpuConflicts(Long id, RewardActivityBaseVO rewardActivity) {
120   - // 0. 获得开启的所有的活动
  120 + // 1. 获得开启的所有的活动
121 121 List<RewardActivityDO> list = rewardActivityMapper.selectList(RewardActivityDO::getStatus, CommonStatusEnum.ENABLE.getStatus());
122 122 if (id != null) { // 排除自己这个活动
123 123 list.removeIf(activity -> id.equals(activity.getId()));
124 124 }
125 125  
126   - // 完全不允许重叠。
  126 + // 2. 完全不允许重叠
127 127 for (RewardActivityDO item : list) {
128   - // 1.1 校验满减送活动时间是否冲突,如果时段不冲突那么不同的时间段内则可以存在相同的商品范围
  128 + // 2.1 校验满减送活动时间是否冲突,如果时段不冲突那么不同的时间段内则可以存在相同的商品范围
129 129 if (!LocalDateTimeUtil.isOverlap(item.getStartTime(), item.getEndTime(),
130 130 rewardActivity.getStartTime(), rewardActivity.getEndTime())) {
131 131 continue;
132 132 }
133   - // 1.2 校验商品范围是否重叠
  133 + // 2.2 校验商品范围是否重叠
134 134 // 情况一:如果与该时间段内商品范围为全部的活动冲突,或 rewardActivity 商品范围为全部,那么则直接校验不通过
135 135 // 例如说,rewardActivity 是全部活动,结果有个 db 里的 activity 是某个分类,它也是冲突的。也就是说,当前时间段内,有且仅有只能有一个活动!
136 136 if (PromotionProductScopeEnum.isAll(item.getProductScope()) ||
137 137 PromotionProductScopeEnum.isAll(rewardActivity.getProductScope())) {
  138 + // TODO puhui999:需要提示出来与满减送活动“xxx 活动”存在商品范围冲突;这里可能要分情况,下面需要把 activityName 传入
138 139 throw exception(REWARD_ACTIVITY_SCOPE_EXISTS);
139 140 }
140 141 // 情况二:如果与该时间段内商品范围为类别的活动冲突
141 142 if (PromotionProductScopeEnum.isCategory(item.getProductScope())) {
  143 + // TODO puhui999:前端我们有限制,只允许子分类么?可能要限制下,不然基于分类查询不到对应的商品。因为商品目前必须在子分类下
142 144 // 校验分类是否冲突
143 145 if (PromotionProductScopeEnum.isCategory(rewardActivity.getProductScope())) {
144 146 if (!intersectionDistinct(item.getProductScopeValues(), rewardActivity.getProductScopeValues()).isEmpty()) {
... ...