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

This commit is contained in:
YunaiV 2024-09-10 12:46:49 +08:00
parent b094c35eaa
commit 9c5c40fe90
3 changed files with 5 additions and 3 deletions

View File

@ -16,7 +16,7 @@ public interface RewardActivityApi {
* 获得当前时间内开启的满减送活动 * 获得当前时间内开启的满减送活动
* *
* @param status 状态 * @param status 状态
* @param dateTime 时间 * @param dateTime 当前时间即筛选 <= dateTime 的满减送活动
* @return 满减送活动列表 * @return 满减送活动列表
*/ */
List<RewardActivityMatchRespDTO> getRewardActivityListByStatusAndNow(Integer status, LocalDateTime dateTime); List<RewardActivityMatchRespDTO> getRewardActivityListByStatusAndNow(Integer status, LocalDateTime dateTime);

View File

@ -28,8 +28,8 @@ public interface RewardActivityMapper extends BaseMapperX<RewardActivityDO> {
default List<RewardActivityDO> selectListByStatusAndDateTimeLt(Integer status, LocalDateTime dateTime) { default List<RewardActivityDO> selectListByStatusAndDateTimeLt(Integer status, LocalDateTime dateTime) {
return selectList(new LambdaQueryWrapperX<RewardActivityDO>() return selectList(new LambdaQueryWrapperX<RewardActivityDO>()
.eq(RewardActivityDO::getStatus, status) .eq(RewardActivityDO::getStatus, status)
.lt(RewardActivityDO::getStartTime, dateTime) // 开始时间 < 指定时间dateTime < 结束时间也就是说获取指定时间段的活动
.gt(RewardActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间也就是说获取指定时间段的活动 .lt(RewardActivityDO::getStartTime, dateTime).gt(RewardActivityDO::getEndTime, dateTime)
.orderByAsc(RewardActivityDO::getStartTime) .orderByAsc(RewardActivityDO::getStartTime)
); );
} }

View File

@ -121,6 +121,8 @@ public class RewardActivityServiceImpl implements RewardActivityService {
list.removeIf(activity -> id.equals(activity.getId())); list.removeIf(activity -> id.equals(activity.getId()));
} }
// TODO @puhui999这个可能要完整对标有赞的校验完全不允许重叠
// 例如说rewardActivity 是全部活动结果有个 db 里的 activity 是某个分类它也是冲突的也就是说当前时间段内有且仅有只能有一个活动
for (RewardActivityDO item : list) { for (RewardActivityDO item : list) {
// 1.1 校验满减送活动时间是否冲突如果时段不冲突那么不同的时间段内则可以存在相同的商品范围 // 1.1 校验满减送活动时间是否冲突如果时段不冲突那么不同的时间段内则可以存在相同的商品范围
if (!LocalDateTimeUtil.isOverlap(item.getStartTime(), item.getEndTime(), if (!LocalDateTimeUtil.isOverlap(item.getStartTime(), item.getEndTime(),