Commit 65c6184450de989e5705cc571c3a37259bd36315
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<BargainActivityDO> { | @@ -86,35 +83,13 @@ public interface BargainActivityMapper extends BaseMapperX<BargainActivityDO> { | ||
| 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<CombinationActivi | @@ -39,40 +35,13 @@ public interface CombinationActivityMapper extends BaseMapperX<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<SeckillActivityDO> { | @@ -77,35 +73,13 @@ public interface SeckillActivityMapper extends BaseMapperX<SeckillActivityDO> { | ||
| 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 | } |