Commit b092906a662b0f7b81d1676499fe28a375057aa3

Authored by 痴货
1 parent 7873f140

【BUG】修改秒杀根据时间段开判断是否开启活动

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillactivity/SeckillActivityMapper.java
@@ -98,9 +98,10 @@ public interface SeckillActivityMapper extends BaseMapperX<SeckillActivityDO> { @@ -98,9 +98,10 @@ public interface SeckillActivityMapper extends BaseMapperX<SeckillActivityDO> {
98 * @param dateTime 指定日期 98 * @param dateTime 指定日期
99 * @return 活动列表 99 * @return 活动列表
100 */ 100 */
101 - default List<SeckillActivityDO> selectListByIdsAndDateTimeLt(Collection<Long> ids, LocalDateTime dateTime) { 101 + default List<SeckillActivityDO> selectListByIdsAndDateTimeLt(Collection<Long> ids, List<Long> confidIds, LocalDateTime dateTime) {
102 return selectList(new LambdaQueryWrapperX<SeckillActivityDO>() 102 return selectList(new LambdaQueryWrapperX<SeckillActivityDO>()
103 .in(SeckillActivityDO::getId, ids) 103 .in(SeckillActivityDO::getId, ids)
  104 + .in(SeckillActivityDO::getConfigIds,confidIds)
104 .lt(SeckillActivityDO::getStartTime, dateTime) 105 .lt(SeckillActivityDO::getStartTime, dateTime)
105 .gt(SeckillActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动 106 .gt(SeckillActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动
106 .orderByDesc(SeckillActivityDO::getCreateTime)); 107 .orderByDesc(SeckillActivityDO::getCreateTime));
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillconfig/SeckillConfigMapper.java
1 package cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillconfig; 1 package cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillconfig;
2 2
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.config.SeckillConfigPageReqVO; 7 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.config.SeckillConfigPageReqVO;
7 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillConfigDO; 8 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillConfigDO;
  9 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
8 import org.apache.ibatis.annotations.Mapper; 10 import org.apache.ibatis.annotations.Mapper;
9 11
  12 +import java.time.LocalDateTime;
  13 +import java.time.format.DateTimeFormatter;
10 import java.util.List; 14 import java.util.List;
11 15
12 @Mapper 16 @Mapper
@@ -23,4 +27,13 @@ public interface SeckillConfigMapper extends BaseMapperX&lt;SeckillConfigDO&gt; { @@ -23,4 +27,13 @@ public interface SeckillConfigMapper extends BaseMapperX&lt;SeckillConfigDO&gt; {
23 return selectList(SeckillConfigDO::getStatus, status); 27 return selectList(SeckillConfigDO::getStatus, status);
24 } 28 }
25 29
  30 + default List<SeckillConfigDO> selectListByIdsAndDateTimeLt(LocalDateTime dateTime){
  31 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
  32 + String format = formatter.format(dateTime);
  33 + return selectList(new LambdaQueryWrapper<SeckillConfigDO>()
  34 + .eq(SeckillConfigDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
  35 + .lt(SeckillConfigDO::getStartTime, format)
  36 + .gt(SeckillConfigDO::getEndTime, format));
  37 + }
  38 +
26 } 39 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java
@@ -23,6 +23,7 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillConfigDO; @@ -23,6 +23,7 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillConfigDO;
23 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillProductDO; 23 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillProductDO;
24 import cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillactivity.SeckillActivityMapper; 24 import cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillactivity.SeckillActivityMapper;
25 import cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillactivity.SeckillProductMapper; 25 import cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillactivity.SeckillProductMapper;
  26 +import cn.iocoder.yudao.module.promotion.dal.mysql.seckill.seckillconfig.SeckillConfigMapper;
26 import org.springframework.stereotype.Service; 27 import org.springframework.stereotype.Service;
27 import org.springframework.transaction.annotation.Transactional; 28 import org.springframework.transaction.annotation.Transactional;
28 import org.springframework.validation.annotation.Validated; 29 import org.springframework.validation.annotation.Validated;
@@ -33,6 +34,7 @@ import java.util.Collection; @@ -33,6 +34,7 @@ import java.util.Collection;
33 import java.util.Collections; 34 import java.util.Collections;
34 import java.util.List; 35 import java.util.List;
35 import java.util.Map; 36 import java.util.Map;
  37 +import java.util.stream.Collectors;
36 38
37 import static cn.hutool.core.collection.CollUtil.isNotEmpty; 39 import static cn.hutool.core.collection.CollUtil.isNotEmpty;
38 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 40 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -57,6 +59,8 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -57,6 +59,8 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
57 @Resource 59 @Resource
58 private SeckillProductMapper seckillProductMapper; 60 private SeckillProductMapper seckillProductMapper;
59 @Resource 61 @Resource
  62 + private SeckillConfigMapper seckillConfigMapper;
  63 + @Resource
60 private SeckillConfigService seckillConfigService; 64 private SeckillConfigService seckillConfigService;
61 @Resource 65 @Resource
62 private ProductSpuApi productSpuApi; 66 private ProductSpuApi productSpuApi;
@@ -331,9 +335,12 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -331,9 +335,12 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
331 if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) { 335 if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) {
332 return Collections.emptyList(); 336 return Collections.emptyList();
333 } 337 }
334 - // 2.查询活动详情 338 + // 2.查询当前时间属于哪个时间段
  339 + List<SeckillConfigDO> seckillConfigList= seckillConfigMapper.selectListByIdsAndDateTimeLt(dateTime);
  340 + List<Long> confidIds = seckillConfigList.stream().map(SeckillConfigDO::getId).collect(Collectors.toList());
  341 + // 3.查询活动详情
335 return seckillActivityMapper.selectListByIdsAndDateTimeLt( 342 return seckillActivityMapper.selectListByIdsAndDateTimeLt(
336 - convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime); 343 + convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), confidIds, dateTime);
337 } 344 }
338 345
339 } 346 }