Commit 9c5c40fe909036ebb54979705f92644d9c0d3adf
1 parent
b094c35e
【代码评审】商城:满减送的校验逻辑
Showing
3 changed files
with
5 additions
and
3 deletions
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<RewardActivityDO> { | @@ -28,8 +28,8 @@ public interface RewardActivityMapper extends BaseMapperX<RewardActivityDO> { | ||
| 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(), |