Commit 9c5c40fe909036ebb54979705f92644d9c0d3adf

Authored by YunaiV
1 parent b094c35e

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

yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/RewardActivityApi.java
@@ -16,7 +16,7 @@ public interface RewardActivityApi { @@ -16,7 +16,7 @@ public interface RewardActivityApi {
16 * 获得当前时间内开启的满减送活动 16 * 获得当前时间内开启的满减送活动
17 * 17 *
18 * @param status 状态 18 * @param status 状态
19 - * @param dateTime 时间 19 + * @param dateTime 当前时间,即筛选 <= dateTime 的满减送活动
20 * @return 满减送活动列表 20 * @return 满减送活动列表
21 */ 21 */
22 List<RewardActivityMatchRespDTO> getRewardActivityListByStatusAndNow(Integer status, LocalDateTime dateTime); 22 List<RewardActivityMatchRespDTO> getRewardActivityListByStatusAndNow(Integer status, LocalDateTime dateTime);
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/reward/RewardActivityMapper.java
@@ -28,8 +28,8 @@ public interface RewardActivityMapper extends BaseMapperX&lt;RewardActivityDO&gt; { @@ -28,8 +28,8 @@ public interface RewardActivityMapper extends BaseMapperX&lt;RewardActivityDO&gt; {
28 default List<RewardActivityDO> selectListByStatusAndDateTimeLt(Integer status, LocalDateTime dateTime) { 28 default List<RewardActivityDO> selectListByStatusAndDateTimeLt(Integer status, LocalDateTime dateTime) {
29 return selectList(new LambdaQueryWrapperX<RewardActivityDO>() 29 return selectList(new LambdaQueryWrapperX<RewardActivityDO>()
30 .eq(RewardActivityDO::getStatus, status) 30 .eq(RewardActivityDO::getStatus, status)
31 - .lt(RewardActivityDO::getStartTime, dateTime)  
32 - .gt(RewardActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动 31 + // 开始时间 < 指定时间(dateTime) < 结束时间,也就是说获取指定时间段的活动
  32 + .lt(RewardActivityDO::getStartTime, dateTime).gt(RewardActivityDO::getEndTime, dateTime)
33 .orderByAsc(RewardActivityDO::getStartTime) 33 .orderByAsc(RewardActivityDO::getStartTime)
34 ); 34 );
35 } 35 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImpl.java
@@ -121,6 +121,8 @@ public class RewardActivityServiceImpl implements RewardActivityService { @@ -121,6 +121,8 @@ public class RewardActivityServiceImpl implements RewardActivityService {
121 list.removeIf(activity -> id.equals(activity.getId())); 121 list.removeIf(activity -> id.equals(activity.getId()));
122 } 122 }
123 123
  124 + // TODO @puhui999:这个可能要完整对标有赞的校验。完全不允许重叠。
  125 + // 例如说,rewardActivity 是全部活动,结果有个 db 里的 activity 是某个分类,它也是冲突的。也就是说,当前时间段内,有且仅有只能有一个活动!
124 for (RewardActivityDO item : list) { 126 for (RewardActivityDO item : list) {
125 // 1.1 校验满减送活动时间是否冲突,如果时段不冲突那么不同的时间段内则可以存在相同的商品范围 127 // 1.1 校验满减送活动时间是否冲突,如果时段不冲突那么不同的时间段内则可以存在相同的商品范围
126 if (!LocalDateTimeUtil.isOverlap(item.getStartTime(), item.getEndTime(), 128 if (!LocalDateTimeUtil.isOverlap(item.getStartTime(), item.getEndTime(),