Commit 65c6184450de989e5705cc571c3a37259bd36315

Authored by YunaiV
1 parent cb995ba0

【代码优化】商城:优化 /promotion/activity/list-by-spu-id 的逻辑

Showing 12 changed files with 81 additions and 308 deletions
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/activity/AppActivityController.java
1 package cn.iocoder.yudao.module.promotion.controller.app.activity; 1 package cn.iocoder.yudao.module.promotion.controller.app.activity;
2 2
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.hutool.core.map.MapUtil;  
5 -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;  
6 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
7 -import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;  
8 import cn.iocoder.yudao.module.promotion.controller.app.activity.vo.AppActivityRespVO; 4 import cn.iocoder.yudao.module.promotion.controller.app.activity.vo.AppActivityRespVO;
9 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO; 5 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
10 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 6 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO;
11 -import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountActivityDO;  
12 -import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO;  
13 -import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;  
14 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityDO; 7 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityDO;
15 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum;  
16 import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; 8 import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;
17 import cn.iocoder.yudao.module.promotion.service.bargain.BargainActivityService; 9 import cn.iocoder.yudao.module.promotion.service.bargain.BargainActivityService;
18 import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService; 10 import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService;
19 -import cn.iocoder.yudao.module.promotion.service.discount.DiscountActivityService;  
20 -import cn.iocoder.yudao.module.promotion.service.reward.RewardActivityService;  
21 import cn.iocoder.yudao.module.promotion.service.seckill.SeckillActivityService; 11 import cn.iocoder.yudao.module.promotion.service.seckill.SeckillActivityService;
22 import io.swagger.v3.oas.annotations.Operation; 12 import io.swagger.v3.oas.annotations.Operation;
23 import io.swagger.v3.oas.annotations.Parameter; 13 import io.swagger.v3.oas.annotations.Parameter;
@@ -29,12 +19,10 @@ import org.springframework.web.bind.annotation.RequestMapping; @@ -29,12 +19,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
29 import org.springframework.web.bind.annotation.RequestParam; 19 import org.springframework.web.bind.annotation.RequestParam;
30 import org.springframework.web.bind.annotation.RestController; 20 import org.springframework.web.bind.annotation.RestController;
31 21
32 -import java.time.LocalDateTime;  
33 -import java.util.*;  
34 -import java.util.stream.Collectors; 22 +import java.util.ArrayList;
  23 +import java.util.List;
35 24
36 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 25 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
37 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;  
38 26
39 @Tag(name = "用户 APP - 营销活动") // 用于提供跨多个活动的 HTTP 接口 27 @Tag(name = "用户 APP - 营销活动") // 用于提供跨多个活动的 HTTP 接口
40 @RestController 28 @RestController
@@ -48,125 +36,31 @@ public class AppActivityController { @@ -48,125 +36,31 @@ public class AppActivityController {
48 private SeckillActivityService seckillActivityService; 36 private SeckillActivityService seckillActivityService;
49 @Resource 37 @Resource
50 private BargainActivityService bargainActivityService; 38 private BargainActivityService bargainActivityService;
51 - @Resource  
52 - private DiscountActivityService discountActivityService;  
53 - @Resource  
54 - private RewardActivityService rewardActivityService;  
55 -  
56 - @Resource  
57 - private ProductSpuApi productSpuApi;  
58 39
59 @GetMapping("/list-by-spu-id") 40 @GetMapping("/list-by-spu-id")
60 - @Operation(summary = "获得单个商品,近期参与的每个活动") 41 + @Operation(summary = "获得单个商品,进行中的拼团、秒杀、砍价活动信息", description = "每种活动,只返回一个")
61 @Parameter(name = "spuId", description = "商品编号", required = true) 42 @Parameter(name = "spuId", description = "商品编号", required = true)
62 public CommonResult<List<AppActivityRespVO>> getActivityListBySpuId(@RequestParam("spuId") Long spuId) { 43 public CommonResult<List<AppActivityRespVO>> getActivityListBySpuId(@RequestParam("spuId") Long spuId) {
63 - // 每种活动,只返回一个  
64 - return success(getAppActivityList(Collections.singletonList(spuId)));  
65 - }  
66 -  
67 - @GetMapping("/list-by-spu-ids")  
68 - @Operation(summary = "获得多个商品,近期参与的每个活动")  
69 - @Parameter(name = "spuIds", description = "商品编号数组", required = true)  
70 - public CommonResult<Map<Long, List<AppActivityRespVO>>> getActivityListBySpuIds(@RequestParam("spuIds") List<Long> spuIds) {  
71 - if (CollUtil.isEmpty(spuIds)) {  
72 - return success(MapUtil.empty());  
73 - }  
74 - // 每种活动,只返回一个;key 为 SPU 编号  
75 - return success(convertMultiMap(getAppActivityList(spuIds), AppActivityRespVO::getSpuId));  
76 - }  
77 -  
78 - private List<AppActivityRespVO> getAppActivityList(Collection<Long> spuIds) {  
79 - if (CollUtil.isEmpty(spuIds)) {  
80 - return new ArrayList<>();  
81 - }  
82 - // 获取开启的且开始的且没有结束的活动  
83 - List<AppActivityRespVO> activityList = new ArrayList<>();  
84 - LocalDateTime now = LocalDateTime.now(); 44 + List<AppActivityRespVO> activityVOList = new ArrayList<>();
85 // 1. 拼团活动 45 // 1. 拼团活动
86 - getCombinationActivities(spuIds, now, activityList);  
87 - // 2. 秒杀活动  
88 - getSeckillActivities(spuIds, now, activityList);  
89 - // 3. 砍价活动  
90 - getBargainActivities(spuIds, now, activityList);  
91 - // 4. 限时折扣活动  
92 - getDiscountActivities(spuIds, now, activityList);  
93 - // 5. 满减送活动  
94 - getRewardActivityList(spuIds, now, activityList);  
95 - return activityList;  
96 - }  
97 -  
98 - private void getCombinationActivities(Collection<Long> spuIds, LocalDateTime now, List<AppActivityRespVO> activityList) {  
99 - List<CombinationActivityDO> combinationActivities = combinationActivityService.getCombinationActivityBySpuIdsAndStatusAndDateTimeLt(  
100 - spuIds, CommonStatusEnum.ENABLE.getStatus(), now);  
101 - if (CollUtil.isEmpty(combinationActivities)) {  
102 - return;  
103 - }  
104 -  
105 - combinationActivities.forEach(item -> {  
106 - activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.COMBINATION_ACTIVITY.getType(),  
107 - item.getName(), item.getSpuId(), item.getStartTime(), item.getEndTime()));  
108 - });  
109 - }  
110 -  
111 - private void getSeckillActivities(Collection<Long> spuIds, LocalDateTime now, List<AppActivityRespVO> activityList) {  
112 - List<SeckillActivityDO> seckillActivities = seckillActivityService.getSeckillActivityBySpuIdsAndStatusAndDateTimeLt(  
113 - spuIds, CommonStatusEnum.ENABLE.getStatus(), now);  
114 - if (CollUtil.isEmpty(seckillActivities)) {  
115 - return;  
116 - }  
117 -  
118 - seckillActivities.forEach(item -> {  
119 - activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.SECKILL_ACTIVITY.getType(),  
120 - item.getName(), item.getSpuId(), item.getStartTime(), item.getEndTime()));  
121 - });  
122 - }  
123 -  
124 - private void getBargainActivities(Collection<Long> spuIds, LocalDateTime now, List<AppActivityRespVO> activityList) {  
125 - List<BargainActivityDO> bargainActivities = bargainActivityService.getBargainActivityBySpuIdsAndStatusAndDateTimeLt(  
126 - spuIds, CommonStatusEnum.ENABLE.getStatus(), now);  
127 - if (CollUtil.isNotEmpty(bargainActivities)) {  
128 - return;  
129 - }  
130 -  
131 - bargainActivities.forEach(item -> {  
132 - activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.BARGAIN_ACTIVITY.getType(),  
133 - item.getName(), item.getSpuId(), item.getStartTime(), item.getEndTime()));  
134 - });  
135 - }  
136 -  
137 - private void getDiscountActivities(Collection<Long> spuIds, LocalDateTime now, List<AppActivityRespVO> activityList) {  
138 - List<DiscountActivityDO> discountActivities = discountActivityService.getDiscountActivityBySpuIdsAndStatusAndDateTimeLt(  
139 - spuIds, CommonStatusEnum.ENABLE.getStatus(), now);  
140 - if (CollUtil.isEmpty(discountActivities)) {  
141 - return; 46 + CombinationActivityDO combinationActivity = combinationActivityService.getMatchCombinationActivityBySpuId(spuId);
  47 + if (combinationActivity != null) {
  48 + activityVOList.add(new AppActivityRespVO(combinationActivity.getId(), PromotionTypeEnum.COMBINATION_ACTIVITY.getType(),
  49 + combinationActivity.getName(), combinationActivity.getSpuId(), combinationActivity.getStartTime(), combinationActivity.getEndTime()));
142 } 50 }
143 -  
144 - List<DiscountProductDO> products = discountActivityService.getDiscountProductsByActivityId(  
145 - convertSet(discountActivities, DiscountActivityDO::getId));  
146 - Map<Long, Long> productMap = convertMap(products, DiscountProductDO::getActivityId, DiscountProductDO::getSpuId);  
147 - discountActivities.forEach(item -> activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.DISCOUNT_ACTIVITY.getType(),  
148 - item.getName(), productMap.get(item.getId()), item.getStartTime(), item.getEndTime())));  
149 - }  
150 -  
151 - private void getRewardActivityList(Collection<Long> spuIds, LocalDateTime now, List<AppActivityRespVO> activityList) {  
152 - List<RewardActivityDO> rewardActivities = rewardActivityService.getRewardActivityBySpuIdsAndStatusAndDateTimeLt(  
153 - spuIds, CommonStatusEnum.ENABLE.getStatus(), now);  
154 - if (CollUtil.isEmpty(rewardActivities)) {  
155 - return; 51 + // 2. 秒杀活动
  52 + SeckillActivityDO seckillActivity = seckillActivityService.getMatchSeckillActivityBySpuId(spuId);
  53 + if (seckillActivity != null) {
  54 + activityVOList.add(new AppActivityRespVO(seckillActivity.getId(), PromotionTypeEnum.SECKILL_ACTIVITY.getType(),
  55 + seckillActivity.getName(), seckillActivity.getSpuId(), seckillActivity.getStartTime(), seckillActivity.getEndTime()));
156 } 56 }
157 -  
158 - Map<Long, Optional<RewardActivityDO>> spuIdAndActivityMap = spuIds.stream().collect(Collectors.toMap(spuId -> spuId, spuId -> rewardActivities.stream()  
159 - .filter(activity -> PromotionProductScopeEnum.isAll(activity.getProductScope())  
160 - || PromotionProductScopeEnum.isSpu(activity.getProductScope()) // 商品范围  
161 - && CollUtil.contains(activity.getProductScopeValues(), spuId)  
162 - || PromotionProductScopeEnum.isCategory(activity.getProductScope()) // 分类范围  
163 - && CollUtil.contains(activity.getProductScopeValues(), productSpuApi.getSpu(spuId).getCategoryId()))  
164 - .max(Comparator.comparing(RewardActivityDO::getCreateTime))));  
165 - for (Long supId : spuIdAndActivityMap.keySet()) {  
166 - spuIdAndActivityMap.get(supId).ifPresent(rewardActivity -> activityList.add(  
167 - new AppActivityRespVO(rewardActivity.getId(), PromotionTypeEnum.REWARD_ACTIVITY.getType(),  
168 - rewardActivity.getName(), supId, rewardActivity.getStartTime(), rewardActivity.getEndTime()))); 57 + // 3. 砍价活动
  58 + BargainActivityDO bargainActivity = bargainActivityService.getMatchBargainActivityBySpuId(spuId);
  59 + if (bargainActivity != null) {
  60 + activityVOList.add(new AppActivityRespVO(bargainActivity.getId(), PromotionTypeEnum.BARGAIN_ACTIVITY.getType(),
  61 + bargainActivity.getName(), bargainActivity.getSpuId(), bargainActivity.getStartTime(), bargainActivity.getEndTime()));
169 } 62 }
  63 + return success(activityVOList);
170 } 64 }
171 65
172 } 66 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java
@@ -6,14 +6,11 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -6,14 +6,11 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
6 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
7 import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityPageReqVO; 7 import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityPageReqVO;
8 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO; 8 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
9 -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;  
10 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 9 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
11 import org.apache.ibatis.annotations.Mapper; 10 import org.apache.ibatis.annotations.Mapper;
12 11
13 import java.time.LocalDateTime; 12 import java.time.LocalDateTime;
14 -import java.util.Collection;  
15 import java.util.List; 13 import java.util.List;
16 -import java.util.Map;  
17 14
18 /** 15 /**
19 * 砍价活动 Mapper 16 * 砍价活动 Mapper
@@ -86,35 +83,13 @@ public interface BargainActivityMapper extends BaseMapperX&lt;BargainActivityDO&gt; { @@ -86,35 +83,13 @@ public interface BargainActivityMapper extends BaseMapperX&lt;BargainActivityDO&gt; {
86 .last("LIMIT " + count)); 83 .last("LIMIT " + count));
87 } 84 }
88 85
89 - /**  
90 - * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号  
91 - *  
92 - * @param spuIds spu 编号  
93 - * @param status 状态  
94 - * @return 包含 spuId 和 activityId 的 map 对象列表  
95 - */  
96 - default List<Map<String, Object>> selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(Collection<Long> spuIds, Integer status) {  
97 - return selectMaps(new QueryWrapper<BargainActivityDO>()  
98 - .select("spu_id AS spuId, MAX(DISTINCT(id)) AS activityId") // 时间越大 id 也越大 直接用 id  
99 - .in("spu_id", spuIds)  
100 - .eq("status", status)  
101 - .groupBy("spu_id"));  
102 - }  
103 -  
104 - /**  
105 - * 获取指定活动编号的活动列表且  
106 - * 开始时间和结束时间小于给定时间 dateTime 的活动列表  
107 - *  
108 - * @param ids 活动编号  
109 - * @param dateTime 指定日期  
110 - * @return 活动列表  
111 - */  
112 - default List<BargainActivityDO> selectListByIdsAndDateTimeLt(Collection<Long> ids, LocalDateTime dateTime) {  
113 - return selectList(new LambdaQueryWrapperX<BargainActivityDO>()  
114 - .in(BargainActivityDO::getId, ids)  
115 - .lt(BargainActivityDO::getStartTime, dateTime)  
116 - .gt(BargainActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动  
117 - .orderByDesc(BargainActivityDO::getCreateTime)); 86 + default BargainActivityDO selectBySpuIdAndStatusAndNow(Long spuId, Integer status) {
  87 + LocalDateTime now = LocalDateTime.now();
  88 + return selectOne(new LambdaQueryWrapperX<BargainActivityDO>()
  89 + .eq(BargainActivityDO::getSpuId, spuId)
  90 + .eq(BargainActivityDO::getStatus, status)
  91 + .lt(BargainActivityDO::getStartTime, now)
  92 + .gt(BargainActivityDO::getEndTime, now)); // 开始时间 < now < 结束时间,也就是说获取指定时间段的活动
118 } 93 }
119 94
120 } 95 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java
@@ -6,14 +6,10 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -6,14 +6,10 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
6 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
7 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO; 7 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO;
8 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 8 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO;
9 -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;  
10 import org.apache.ibatis.annotations.Mapper; 9 import org.apache.ibatis.annotations.Mapper;
11 -import org.apache.ibatis.annotations.Param;  
12 10
13 import java.time.LocalDateTime; 11 import java.time.LocalDateTime;
14 -import java.util.Collection;  
15 import java.util.List; 12 import java.util.List;
16 -import java.util.Map;  
17 13
18 /** 14 /**
19 * 拼团活动 Mapper 15 * 拼团活动 Mapper
@@ -39,40 +35,13 @@ public interface CombinationActivityMapper extends BaseMapperX&lt;CombinationActivi @@ -39,40 +35,13 @@ public interface CombinationActivityMapper extends BaseMapperX&lt;CombinationActivi
39 .eq(CombinationActivityDO::getStatus, status)); 35 .eq(CombinationActivityDO::getStatus, status));
40 } 36 }
41 37
42 - default List<CombinationActivityDO> selectListByStatus(Integer status, Integer count) {  
43 - return selectList(new LambdaQueryWrapperX<CombinationActivityDO>() 38 + default CombinationActivityDO selectBySpuIdAndStatusAndNow(Long spuId, Integer status) {
  39 + LocalDateTime now = LocalDateTime.now();
  40 + return selectOne(new LambdaQueryWrapperX<CombinationActivityDO>()
  41 + .eq(CombinationActivityDO::getSpuId, spuId)
44 .eq(CombinationActivityDO::getStatus, status) 42 .eq(CombinationActivityDO::getStatus, status)
45 - .last("LIMIT " + count)); 43 + .lt(CombinationActivityDO::getStartTime, now)
  44 + .gt(CombinationActivityDO::getEndTime, now)); // 开始时间 < now < 结束时间,也就是说获取指定时间段的活动
46 } 45 }
47 46
48 - /**  
49 - * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号  
50 - * @param spuIds spu 编号  
51 - * @param status 状态  
52 - * @return 包含 spuId 和 activityId 的 map 对象列表  
53 - */  
54 - default List<Map<String, Object>> selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(@Param("spuIds") Collection<Long> spuIds, @Param("status") Integer status) {  
55 - return selectMaps(new QueryWrapper<CombinationActivityDO>()  
56 - .select("spu_id AS spuId, MAX(DISTINCT(id)) AS activityId") // 时间越大 id 也越大 直接用 id  
57 - .in("spu_id", spuIds)  
58 - .eq("status", status)  
59 - .groupBy("spu_id"));  
60 - }  
61 -  
62 - /**  
63 - * 获取指定活动编号的活动列表且  
64 - * 开始时间和结束时间小于给定时间 dateTime 的活动列表  
65 - *  
66 - * @param ids 活动编号  
67 - * @param dateTime 指定日期  
68 - * @return 活动列表  
69 - */  
70 - default List<CombinationActivityDO> selectListByIdsAndDateTimeLt(Collection<Long> ids, LocalDateTime dateTime) {  
71 - return selectList(new LambdaQueryWrapperX<CombinationActivityDO>()  
72 - .in(CombinationActivityDO::getId, ids)  
73 - .lt(CombinationActivityDO::getStartTime, dateTime)  
74 - .gt(CombinationActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动  
75 - .orderByDesc(CombinationActivityDO::getCreateTime));  
76 - }  
77 -  
78 -} 47 +}
79 \ No newline at end of file 48 \ No newline at end of file
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillactivity/SeckillActivityMapper.java
@@ -8,15 +8,11 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -8,15 +8,11 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
8 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO; 8 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO;
9 import cn.iocoder.yudao.module.promotion.controller.app.seckill.vo.activity.AppSeckillActivityPageReqVO; 9 import cn.iocoder.yudao.module.promotion.controller.app.seckill.vo.activity.AppSeckillActivityPageReqVO;
10 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityDO; 10 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityDO;
11 -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;  
12 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 11 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
13 import org.apache.ibatis.annotations.Mapper; 12 import org.apache.ibatis.annotations.Mapper;
14 -import org.apache.ibatis.annotations.Param;  
15 13
16 import java.time.LocalDateTime; 14 import java.time.LocalDateTime;
17 -import java.util.Collection;  
18 import java.util.List; 15 import java.util.List;
19 -import java.util.Map;  
20 16
21 /** 17 /**
22 * 秒杀活动 Mapper 18 * 秒杀活动 Mapper
@@ -77,35 +73,13 @@ public interface SeckillActivityMapper extends BaseMapperX&lt;SeckillActivityDO&gt; { @@ -77,35 +73,13 @@ public interface SeckillActivityMapper extends BaseMapperX&lt;SeckillActivityDO&gt; {
77 .apply(ObjectUtil.isNotNull(pageReqVO.getConfigId()), "FIND_IN_SET(" + pageReqVO.getConfigId() + ",config_ids) > 0")); 73 .apply(ObjectUtil.isNotNull(pageReqVO.getConfigId()), "FIND_IN_SET(" + pageReqVO.getConfigId() + ",config_ids) > 0"));
78 } 74 }
79 75
80 - /**  
81 - * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号  
82 - *  
83 - * @param spuIds spu 编号  
84 - * @param status 状态  
85 - * @return 包含 spuId 和 activityId 的 map 对象列表  
86 - */  
87 - default List<Map<String, Object>> selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(@Param("spuIds") Collection<Long> spuIds, @Param("status") Integer status) {  
88 - return selectMaps(new QueryWrapper<SeckillActivityDO>()  
89 - .select("spu_id AS spuId, MAX(DISTINCT(id)) AS activityId") // 时间越大 id 也越大 直接用 id  
90 - .in("spu_id", spuIds)  
91 - .eq("status", status)  
92 - .groupBy("spu_id"));  
93 - }  
94 -  
95 - /**  
96 - * 获取指定活动编号的活动列表且  
97 - * 开始时间和结束时间小于给定时间 dateTime 的活动列表  
98 - *  
99 - * @param ids 活动编号  
100 - * @param dateTime 指定日期  
101 - * @return 活动列表  
102 - */  
103 - default List<SeckillActivityDO> selectListByIdsAndDateTimeLt(Collection<Long> ids, LocalDateTime dateTime) {  
104 - return selectList(new LambdaQueryWrapperX<SeckillActivityDO>()  
105 - .in(SeckillActivityDO::getId, ids)  
106 - .lt(SeckillActivityDO::getStartTime, dateTime)  
107 - .gt(SeckillActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动  
108 - .orderByDesc(SeckillActivityDO::getCreateTime)); 76 + default SeckillActivityDO selectBySpuIdAndStatusAndNow(Long spuId, Integer status) {
  77 + LocalDateTime now = LocalDateTime.now();
  78 + return selectOne(new LambdaQueryWrapperX<SeckillActivityDO>()
  79 + .eq(SeckillActivityDO::getSpuId, spuId)
  80 + .eq(SeckillActivityDO::getStatus, status)
  81 + .lt(SeckillActivityDO::getStartTime, now)
  82 + .gt(SeckillActivityDO::getEndTime, now)); // 开始时间 < now < 结束时间,也就是说获取指定时间段的活动
109 } 83 }
110 84
111 } 85 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java
@@ -6,10 +6,8 @@ import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.Ba @@ -6,10 +6,8 @@ import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.Ba
6 import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityPageReqVO; 6 import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityPageReqVO;
7 import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityUpdateReqVO; 7 import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityUpdateReqVO;
8 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO; 8 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
9 -  
10 import jakarta.validation.Valid; 9 import jakarta.validation.Valid;
11 -import java.time.LocalDateTime;  
12 -import java.util.Collection; 10 +
13 import java.util.List; 11 import java.util.List;
14 import java.util.Set; 12 import java.util.Set;
15 13
@@ -108,13 +106,11 @@ public interface BargainActivityService { @@ -108,13 +106,11 @@ public interface BargainActivityService {
108 List<BargainActivityDO> getBargainActivityListByCount(Integer count); 106 List<BargainActivityDO> getBargainActivityListByCount(Integer count);
109 107
110 /** 108 /**
111 - * 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录 109 + * 获得 SPU 进行中的砍价活动
112 * 110 *
113 - * @param spuIds spu 编号  
114 - * @param status 状态  
115 - * @param dateTime 日期时间  
116 - * @return 砍价活动列表 111 + * @param spuId SPU 编号数组
  112 + * @return 砍价活动
117 */ 113 */
118 - List<BargainActivityDO> getBargainActivityBySpuIdsAndStatusAndDateTimeLt(Collection<Long> spuIds, Integer status, LocalDateTime dateTime); 114 + BargainActivityDO getMatchBargainActivityBySpuId(Long spuId);
119 115
120 } 116 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java
1 package cn.iocoder.yudao.module.promotion.service.bargain; 1 package cn.iocoder.yudao.module.promotion.service.bargain;
2 2
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.hutool.core.map.MapUtil;  
5 import cn.hutool.core.util.ObjectUtil; 3 import cn.hutool.core.util.ObjectUtil;
6 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
7 import cn.iocoder.yudao.framework.common.pojo.PageParam; 5 import cn.iocoder.yudao.framework.common.pojo.PageParam;
@@ -15,17 +13,17 @@ import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.Ba @@ -15,17 +13,17 @@ import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.Ba
15 import cn.iocoder.yudao.module.promotion.convert.bargain.BargainActivityConvert; 13 import cn.iocoder.yudao.module.promotion.convert.bargain.BargainActivityConvert;
16 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO; 14 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
17 import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainActivityMapper; 15 import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainActivityMapper;
  16 +import jakarta.annotation.Resource;
18 import org.springframework.stereotype.Service; 17 import org.springframework.stereotype.Service;
19 import org.springframework.transaction.annotation.Transactional; 18 import org.springframework.transaction.annotation.Transactional;
20 import org.springframework.validation.annotation.Validated; 19 import org.springframework.validation.annotation.Validated;
21 20
22 -import jakarta.annotation.Resource;  
23 import java.time.LocalDateTime; 21 import java.time.LocalDateTime;
24 -import java.util.*; 22 +import java.util.List;
  23 +import java.util.Set;
25 24
26 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 25 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
27 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.anyMatch; 26 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.anyMatch;
28 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;  
29 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS; 27 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS;
30 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; 28 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
31 29
@@ -194,15 +192,8 @@ public class BargainActivityServiceImpl implements BargainActivityService { @@ -194,15 +192,8 @@ public class BargainActivityServiceImpl implements BargainActivityService {
194 } 192 }
195 193
196 @Override 194 @Override
197 - public List<BargainActivityDO> getBargainActivityBySpuIdsAndStatusAndDateTimeLt(Collection<Long> spuIds, Integer status, LocalDateTime dateTime) {  
198 - // 1. 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号  
199 - List<Map<String, Object>> spuIdAndActivityIdMaps = bargainActivityMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status);  
200 - if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) {  
201 - return Collections.emptyList();  
202 - }  
203 - // 2. 查询活动详情  
204 - return bargainActivityMapper.selectListByIdsAndDateTimeLt(  
205 - convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime); 195 + public BargainActivityDO getMatchBargainActivityBySpuId(Long spuId) {
  196 + return bargainActivityMapper.selectBySpuIdAndStatusAndNow(spuId, CommonStatusEnum.ENABLE.getStatus());
206 } 197 }
207 198
208 } 199 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java
@@ -7,9 +7,8 @@ import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activit @@ -7,9 +7,8 @@ import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activit
7 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO; 7 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO;
8 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 8 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO;
9 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO; 9 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO;
10 -  
11 import jakarta.validation.Valid; 10 import jakarta.validation.Valid;
12 -import java.time.LocalDateTime; 11 +
13 import java.util.Collection; 12 import java.util.Collection;
14 import java.util.Collections; 13 import java.util.Collections;
15 import java.util.List; 14 import java.util.List;
@@ -109,22 +108,20 @@ public interface CombinationActivityService { @@ -109,22 +108,20 @@ public interface CombinationActivityService {
109 PageResult<CombinationActivityDO> getCombinationActivityPage(PageParam pageParam); 108 PageResult<CombinationActivityDO> getCombinationActivityPage(PageParam pageParam);
110 109
111 /** 110 /**
112 - * 获取指定活动、指定 sku 编号的商品 111 + * 获取指定活动、指定 SKU 编号的商品
113 * 112 *
114 * @param activityId 活动编号 113 * @param activityId 活动编号
115 - * @param skuId sku 编号 114 + * @param skuId SKU 编号
116 * @return 活动商品信息 115 * @return 活动商品信息
117 */ 116 */
118 CombinationProductDO selectByActivityIdAndSkuId(Long activityId, Long skuId); 117 CombinationProductDO selectByActivityIdAndSkuId(Long activityId, Long skuId);
119 118
120 /** 119 /**
121 - * 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录 120 + * 获得 SPU 进行中的拼团活动
122 * 121 *
123 - * @param spuIds spu 编号  
124 - * @param status 状态  
125 - * @param dateTime 日期时间  
126 - * @return 拼团活动列表 122 + * @param spuId SPU 编号数组
  123 + * @return 拼团活动
127 */ 124 */
128 - List<CombinationActivityDO> getCombinationActivityBySpuIdsAndStatusAndDateTimeLt(Collection<Long> spuIds, Integer status, LocalDateTime dateTime); 125 + CombinationActivityDO getMatchCombinationActivityBySpuId(Long spuId);
129 126
130 } 127 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java
1 package cn.iocoder.yudao.module.promotion.service.combination; 1 package cn.iocoder.yudao.module.promotion.service.combination;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 -import cn.hutool.core.map.MapUtil;  
5 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
6 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
7 import cn.iocoder.yudao.framework.common.pojo.PageParam; 6 import cn.iocoder.yudao.framework.common.pojo.PageParam;
@@ -20,19 +19,18 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationA @@ -20,19 +19,18 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationA
20 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO; 19 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO;
21 import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationActivityMapper; 20 import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationActivityMapper;
22 import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationProductMapper; 21 import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationProductMapper;
  22 +import jakarta.annotation.Resource;
23 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
24 import org.springframework.transaction.annotation.Transactional; 24 import org.springframework.transaction.annotation.Transactional;
25 import org.springframework.validation.annotation.Validated; 25 import org.springframework.validation.annotation.Validated;
26 26
27 -import jakarta.annotation.Resource;  
28 -import java.time.LocalDateTime;  
29 import java.util.Collection; 27 import java.util.Collection;
30 -import java.util.Collections;  
31 import java.util.List; 28 import java.util.List;
32 import java.util.Map; 29 import java.util.Map;
33 30
34 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 31 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
35 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; 32 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
  33 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList;
36 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS; 34 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS;
37 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS; 35 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
38 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; 36 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
@@ -178,7 +176,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic @@ -178,7 +176,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic
178 combinationProductMapper.updateBatch(diffList.get(1)); 176 combinationProductMapper.updateBatch(diffList.get(1));
179 } 177 }
180 if (CollUtil.isNotEmpty(diffList.get(2))) { 178 if (CollUtil.isNotEmpty(diffList.get(2))) {
181 - combinationProductMapper.deleteBatchIds(CollectionUtils.convertList(diffList.get(2), CombinationProductDO::getId)); 179 + combinationProductMapper.deleteByIds(CollectionUtils.convertList(diffList.get(2), CombinationProductDO::getId));
182 } 180 }
183 } 181 }
184 182
@@ -238,15 +236,8 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic @@ -238,15 +236,8 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic
238 } 236 }
239 237
240 @Override 238 @Override
241 - public List<CombinationActivityDO> getCombinationActivityBySpuIdsAndStatusAndDateTimeLt(Collection<Long> spuIds, Integer status, LocalDateTime dateTime) {  
242 - // 1.查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号  
243 - List<Map<String, Object>> spuIdAndActivityIdMaps = combinationActivityMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status);  
244 - if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) {  
245 - return Collections.emptyList();  
246 - }  
247 - // 2.查询活动详情  
248 - return combinationActivityMapper.selectListByIdsAndDateTimeLt(  
249 - convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime); 239 + public CombinationActivityDO getMatchCombinationActivityBySpuId(Long spuId) {
  240 + return combinationActivityMapper.selectBySpuIdAndStatusAndNow(spuId, CommonStatusEnum.ENABLE.getStatus());
250 } 241 }
251 242
252 } 243 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityService.java
@@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountActivit @@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountActivit
8 import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO; 8 import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO;
9 import jakarta.validation.Valid; 9 import jakarta.validation.Valid;
10 10
11 -import java.time.LocalDateTime;  
12 import java.util.Collection; 11 import java.util.Collection;
13 import java.util.List; 12 import java.util.List;
14 13
@@ -91,14 +90,11 @@ public interface DiscountActivityService { @@ -91,14 +90,11 @@ public interface DiscountActivityService {
91 List<DiscountProductDO> getDiscountProductsByActivityId(Collection<Long> activityIds); 90 List<DiscountProductDO> getDiscountProductsByActivityId(Collection<Long> activityIds);
92 91
93 /** 92 /**
94 - * 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录 93 + * 获取指定 SPU 编号最近参加的活动,每个 spuId 只返回一条记录
95 * 94 *
96 - * @param spuIds spu 编号  
97 - * @param status 状态  
98 - * @param dateTime 当前日期时间 95 + * @param spuIds SPU 编号数组
99 * @return 折扣活动列表 96 * @return 折扣活动列表
100 */ 97 */
101 - List<DiscountActivityDO> getDiscountActivityBySpuIdsAndStatusAndDateTimeLt(  
102 - Collection<Long> spuIds, Integer status, LocalDateTime dateTime); 98 + List<DiscountActivityDO> getDiscountActivityListBySpuIds(Collection<Long> spuIds);
103 99
104 } 100 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImpl.java
@@ -189,16 +189,17 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { @@ -189,16 +189,17 @@ public class DiscountActivityServiceImpl implements DiscountActivityService {
189 } 189 }
190 190
191 @Override 191 @Override
192 - public List<DiscountActivityDO> getDiscountActivityBySpuIdsAndStatusAndDateTimeLt(Collection<Long> spuIds, Integer status, LocalDateTime dateTime) { 192 + public List<DiscountActivityDO> getDiscountActivityListBySpuIds(Collection<Long> spuIds) {
193 // 1. 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 193 // 1. 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号
194 - List<Map<String, Object>> spuIdAndActivityIdMaps = discountProductMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status); 194 + List<Map<String, Object>> spuIdAndActivityIdMaps = discountProductMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(
  195 + spuIds, CommonStatusEnum.ENABLE.getStatus());
195 if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) { 196 if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) {
196 return Collections.emptyList(); 197 return Collections.emptyList();
197 } 198 }
198 199
199 // 2. 查询活动详情 200 // 2. 查询活动详情
200 return discountActivityMapper.selectListByIdsAndDateTimeLt( 201 return discountActivityMapper.selectListByIdsAndDateTimeLt(
201 - convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime); 202 + convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), LocalDateTime.now());
202 } 203 }
203 204
204 } 205 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java
@@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityD @@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityD
10 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillProductDO; 10 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillProductDO;
11 import jakarta.validation.Valid; 11 import jakarta.validation.Valid;
12 12
13 -import java.time.LocalDateTime;  
14 import java.util.Collection; 13 import java.util.Collection;
15 import java.util.List; 14 import java.util.List;
16 15
@@ -130,14 +129,12 @@ public interface SeckillActivityService { @@ -130,14 +129,12 @@ public interface SeckillActivityService {
130 SeckillValidateJoinRespDTO validateJoinSeckill(Long activityId, Long skuId, Integer count); 129 SeckillValidateJoinRespDTO validateJoinSeckill(Long activityId, Long skuId, Integer count);
131 130
132 /** 131 /**
133 - * 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录 132 + * 获得 SPU 进行中的秒杀活动
134 * 133 *
135 - * @param spuIds spu 编号  
136 - * @param status 状态  
137 - * @param dateTime 日期时间  
138 - * @return 秒杀活动列表 134 + * @param spuId SPU 编号数组
  135 + * @return 秒杀活动
139 */ 136 */
140 - List<SeckillActivityDO> getSeckillActivityBySpuIdsAndStatusAndDateTimeLt(Collection<Long> spuIds, Integer status, LocalDateTime dateTime); 137 + SeckillActivityDO getMatchSeckillActivityBySpuId(Long spuId);
141 138
142 /** 139 /**
143 * 获得拼团活动列表 140 * 获得拼团活动列表
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java
1 package cn.iocoder.yudao.module.promotion.service.seckill; 1 package cn.iocoder.yudao.module.promotion.service.seckill;
2 2
3 -import cn.hutool.core.collection.CollUtil;  
4 import cn.hutool.core.collection.CollectionUtil; 3 import cn.hutool.core.collection.CollectionUtil;
5 -import cn.hutool.core.map.MapUtil;  
6 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
7 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
@@ -30,7 +28,6 @@ import org.springframework.validation.annotation.Validated; @@ -30,7 +28,6 @@ import org.springframework.validation.annotation.Validated;
30 28
31 import java.time.LocalDateTime; 29 import java.time.LocalDateTime;
32 import java.util.Collection; 30 import java.util.Collection;
33 -import java.util.Collections;  
34 import java.util.List; 31 import java.util.List;
35 import java.util.Map; 32 import java.util.Map;
36 33
@@ -56,8 +53,10 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -56,8 +53,10 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
56 private SeckillActivityMapper seckillActivityMapper; 53 private SeckillActivityMapper seckillActivityMapper;
57 @Resource 54 @Resource
58 private SeckillProductMapper seckillProductMapper; 55 private SeckillProductMapper seckillProductMapper;
  56 +
59 @Resource 57 @Resource
60 private SeckillConfigService seckillConfigService; 58 private SeckillConfigService seckillConfigService;
  59 +
61 @Resource 60 @Resource
62 private ProductSpuApi productSpuApi; 61 private ProductSpuApi productSpuApi;
63 @Resource 62 @Resource
@@ -219,7 +218,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -219,7 +218,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
219 seckillProductMapper.updateBatch(diffList.get(1)); 218 seckillProductMapper.updateBatch(diffList.get(1));
220 } 219 }
221 if (isNotEmpty(diffList.get(2))) { 220 if (isNotEmpty(diffList.get(2))) {
222 - seckillProductMapper.deleteBatchIds(convertList(diffList.get(2), SeckillProductDO::getId)); 221 + seckillProductMapper.deleteByIds(convertList(diffList.get(2), SeckillProductDO::getId));
223 } 222 }
224 } 223 }
225 224
@@ -249,7 +248,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -249,7 +248,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
249 seckillActivityMapper.deleteById(id); 248 seckillActivityMapper.deleteById(id);
250 // 删除活动商品 249 // 删除活动商品
251 List<SeckillProductDO> products = seckillProductMapper.selectListByActivityId(id); 250 List<SeckillProductDO> products = seckillProductMapper.selectListByActivityId(id);
252 - seckillProductMapper.deleteBatchIds(convertSet(products, SeckillProductDO::getId)); 251 + seckillProductMapper.deleteByIds(convertSet(products, SeckillProductDO::getId));
253 } 252 }
254 253
255 private SeckillActivityDO validateSeckillActivityExists(Long id) { 254 private SeckillActivityDO validateSeckillActivityExists(Long id) {
@@ -325,20 +324,13 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -325,20 +324,13 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
325 } 324 }
326 325
327 @Override 326 @Override
328 - public List<SeckillActivityDO> getSeckillActivityBySpuIdsAndStatusAndDateTimeLt(Collection<Long> spuIds, Integer status, LocalDateTime dateTime) {  
329 - // 1.查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号  
330 - List<Map<String, Object>> spuIdAndActivityIdMaps = seckillActivityMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status);  
331 - if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) {  
332 - return Collections.emptyList();  
333 - }  
334 - // 2.查询活动详情  
335 - return seckillActivityMapper.selectListByIdsAndDateTimeLt(  
336 - convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime); 327 + public SeckillActivityDO getMatchSeckillActivityBySpuId(Long spuId) {
  328 + return seckillActivityMapper.selectBySpuIdAndStatusAndNow(spuId, CommonStatusEnum.ENABLE.getStatus());
337 } 329 }
338 330
339 @Override 331 @Override
340 public List<SeckillActivityDO> getSeckillActivityListByIds(Collection<Long> ids) { 332 public List<SeckillActivityDO> getSeckillActivityListByIds(Collection<Long> ids) {
341 - return List.of(); 333 + return seckillActivityMapper.selectBatchIds(ids);
342 } 334 }
343 335
344 } 336 }