From d4ca3d58176c3b4ac9c30c618a2df28fd3e444cf Mon Sep 17 00:00:00 2001 From: paulGao Date: Thu, 30 Dec 2021 17:00:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A7=92=E6=9D=80=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E5=89=8D=E5=90=8E=E7=AB=AF=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/service/SeckillService.java | 8 +++ .../serviceimpl/SeckillApplyServiceImpl.java | 50 ++++++++----------- .../serviceimpl/SeckillServiceImpl.java | 45 ++++++++++++----- 3 files changed, 62 insertions(+), 41 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java index b0edb0b5..2b916e61 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java @@ -54,6 +54,14 @@ public interface SeckillService extends AbstractPromotionsService { */ void updateEsGoodsSeckill(Seckill seckill, List seckillApplies); + /** + * 删除商品索引限时抢购信息 + * + * @param seckill 限时抢购信息 + * @param skuIds 商品skuId列表 + */ + void deleteEsGoodsSeckill(Seckill seckill, List skuIds); + /** * 设置秒杀活动的每个参与活动商品的详细时间 * diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java index 108597d0..c8df9dbb 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.text.CharSequenceUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.PromotionTypeEnum; @@ -27,7 +26,6 @@ import cn.lili.modules.promotion.mapper.SeckillApplyMapper; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.service.SeckillApplyService; import cn.lili.modules.promotion.service.SeckillService; -import cn.lili.modules.promotion.tools.PromotionCacheKeys; import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -58,7 +56,7 @@ public class SeckillApplyServiceImpl extends ServiceImpl> cache; + private Cache cache; /** * 规格商品 */ @@ -78,28 +76,17 @@ public class SeckillApplyServiceImpl extends ServiceImpl getSeckillTimeline() { //秒杀活动缓存key - return getSeckillTimelineToCache(null); + return getSeckillTimelineInfo(); } @Override public List getSeckillGoods(Integer timeline) { List seckillGoodsVoS = new ArrayList<>(); - //秒杀活动缓存key - String seckillCacheKey = PromotionCacheKeys.getSeckillTimelineKey(DateUtil.format(DateUtil.beginOfDay(new DateTime()), "yyyyMMdd")); - List cacheSeckill = cache.get(seckillCacheKey); - if (cacheSeckill == null || cacheSeckill.isEmpty()) { - //如缓存中不存在,则单独获取 - List seckillTimelineToCache = getSeckillTimelineToCache(seckillCacheKey); - Optional first = seckillTimelineToCache.stream().filter(i -> i.getTimeLine().equals(timeline)).findFirst(); - if (first.isPresent()) { - seckillGoodsVoS = first.get().getSeckillGoodsList(); - } - } else { - //如缓存中存在,则取缓存中转为展示的信息 - Optional first = cacheSeckill.stream().filter(i -> i.getTimeLine().equals(timeline)).findFirst(); - if (first.isPresent()) { - seckillGoodsVoS = first.get().getSeckillGoodsList(); - } + //获取 + List seckillTimelineToCache = getSeckillTimelineInfo(); + Optional first = seckillTimelineToCache.stream().filter(i -> i.getTimeLine().equals(timeline)).findFirst(); + if (first.isPresent()) { + seckillGoodsVoS = first.get().getSeckillGoodsList(); } return seckillGoodsVoS; } @@ -191,6 +178,7 @@ public class SeckillApplyServiceImpl extends ServiceImpl().eq(SeckillApply::getSeckillId, seckillId).in(SeckillApply::getSkuId, skuIds)); this.saveBatch(originList); //保存促销活动商品信息 @@ -201,12 +189,14 @@ public class SeckillApplyServiceImpl extends ServiceImpl getSeckillTimelineToCache(String seckillCacheKey) { + private List getSeckillTimelineInfo() { List timelineList = new ArrayList<>(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); //查询当天时间段内的秒杀活动活动 @@ -321,9 +311,6 @@ public class SeckillApplyServiceImpl extends ServiceImpl map = new HashMap<>(); - // es促销key - map.put("esPromotionKey", promotionKey); - // 促销类型全路径名 - map.put("promotionsType", Seckill.class.getName()); - // 促销实体 - map.put("promotions", seckill); - //更新商品促销消息 - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_PROMOTIONS.name(); - //发送mq消息 - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(map), RocketmqSendCallbackBuilder.commonCallback()); } } + if (!seckillApplies.isEmpty()) { + log.info("更新限时抢购商品状态:{}", seckill); + String promotionKey = PromotionTypeEnum.SECKILL.name() + "-" + seckill.getId(); + Map map = new HashMap<>(); + // es促销key + map.put("esPromotionKey", promotionKey); + // 促销类型全路径名 + map.put("promotionsType", Seckill.class.getName()); + // 促销实体 + map.put("promotions", seckill); + //更新商品促销消息 + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_PROMOTIONS.name(); + //发送mq消息 + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(map), RocketmqSendCallbackBuilder.commonCallback()); + } } } + /** + * 删除商品索引限时抢购信息 + * + * @param seckill 限时抢购信息 + * @param skuIds 商品skuId列表 + */ + @Override + public void deleteEsGoodsSeckill(Seckill seckill, List skuIds) { + seckill.setScopeType(PromotionsScopeTypeEnum.PORTION_GOODS.name()); + seckill.setScopeId(ArrayUtil.join(skuIds.toArray(), ",")); + //删除商品促销消息 + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.DELETE_GOODS_INDEX_PROMOTIONS.name(); + //发送mq消息 + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(seckill), RocketmqSendCallbackBuilder.commonCallback()); + } + @Override public void setSeckillApplyTime(Seckill seckill, SeckillApply seckillApply) { //下一个时间,默认为当天结束时间