diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java index 023f8d14..46aae99d 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -189,28 +190,33 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { //如果促销类型需要库存判定,则做对应处理 orderItems.forEach(orderItem -> { if (orderItem.getPromotionType() != null) { - //如果此促销有库存概念,则计入 - if (PromotionTypeEnum.haveStock(orderItem.getPromotionType())) { + String[] skuPromotions = orderItem.getPromotionType().split(","); + for (int i = 0; i < skuPromotions.length; i++) { + int currentIndex = i; + //如果此促销有库存概念,则计入 + Arrays.stream(PromotionTypeEnum.haveStockPromotion).filter(promotionTypeEnum -> promotionTypeEnum.name().equals(skuPromotions[currentIndex])) + .findFirst() + .ifPresent(promotionTypeEnum -> { + String promotionId = orderItem.getPromotionId().split(",")[currentIndex]; + String cacheKey = PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, promotionId, orderItem.getSkuId()); - PromotionTypeEnum promotionTypeEnum = PromotionTypeEnum.valueOf(orderItem.getPromotionType()); - - String cacheKey = PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId()); - - switch (promotionTypeEnum) { - case KANJIA: - cache.put(cacheKey, kanjiaActivityGoodsService.getKanjiaGoodsBySkuId(orderItem.getSkuId()).getStock()); - return; - case POINTS_GOODS: - cache.put(cacheKey, pointsGoodsService.getPointsGoodsDetailBySkuId(orderItem.getSkuId()).getActiveStock()); - return; - case SECKILL: - case PINTUAN: - cache.put(cacheKey, promotionGoodsService.getPromotionGoodsStock(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId())); - return; - default: - break; - } + switch (promotionTypeEnum) { + case KANJIA: + cache.put(cacheKey, kanjiaActivityGoodsService.getKanjiaGoodsBySkuId(orderItem.getSkuId()).getStock()); + return; + case POINTS_GOODS: + cache.put(cacheKey, pointsGoodsService.getPointsGoodsDetailBySkuId(orderItem.getSkuId()).getActiveStock()); + return; + case SECKILL: + case PINTUAN: + cache.put(cacheKey, promotionGoodsService.getPromotionGoodsStock(promotionTypeEnum, promotionId, orderItem.getSkuId())); + return; + default: + break; + } + }); } + } }); } @@ -222,7 +228,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { * @param orderSn 失败入库订单信息 */ private void errorOrder(String orderSn) { - orderService.systemCancel(orderSn, outOfStockMessage,true); + orderService.systemCancel(orderSn, outOfStockMessage, true); } @@ -236,13 +242,17 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { private void setPromotionStock(List keys, List values, OrderItem sku) { if (sku.getPromotionType() != null) { //如果此促销有库存概念,则计入 - if (!PromotionTypeEnum.haveStock(sku.getPromotionType())) { - return; + String[] skuPromotions = sku.getPromotionType().split(","); + for (int i = 0; i < skuPromotions.length; i++) { + int currentIndex = i; + Arrays.stream(PromotionTypeEnum.haveStockPromotion).filter(promotionTypeEnum -> promotionTypeEnum.name().equals(skuPromotions[currentIndex])) + .findFirst() + .ifPresent(promotionTypeEnum -> { + keys.add(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, sku.getPromotionId().split(",")[currentIndex], sku.getSkuId())); + int num = -sku.getNum(); + values.add(Integer.toString(num)); + }); } - PromotionTypeEnum promotionTypeEnum = PromotionTypeEnum.valueOf(sku.getPromotionType()); - keys.add(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, sku.getPromotionId(), sku.getSkuId())); - int i = -sku.getNum(); - values.add(Integer.toString(i)); } } @@ -277,41 +287,51 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { goodsSku.setId(orderItem.getSkuId()); goodsSku.setGoodsId(orderItem.getGoodsId()); //如果有促销信息 - if (null != orderItem.getPromotionType() && null != orderItem.getPromotionId() && PromotionTypeEnum.haveStock(orderItem.getPromotionType())) { + if (null != orderItem.getPromotionType() && null != orderItem.getPromotionId()) { //如果促销有库存信息 - PromotionTypeEnum promotionTypeEnum = PromotionTypeEnum.valueOf(orderItem.getPromotionType()); + String[] skuPromotions = orderItem.getPromotionType().split(","); + for (int i = 0; i < skuPromotions.length; i++) { + int currentIndex = i; + Arrays.stream(PromotionTypeEnum.haveStockPromotion).filter(promotionTypeEnum -> promotionTypeEnum.name().equals(skuPromotions[currentIndex])) + .findFirst() + .ifPresent(promotionTypeEnum -> { + //修改砍价商品库存 + String promotionId = orderItem.getPromotionId().split(",")[currentIndex]; - //修改砍价商品库存 - if (promotionTypeEnum.equals(PromotionTypeEnum.KANJIA)) { - KanjiaActivity kanjiaActivity = kanjiaActivityService.getById(orderItem.getPromotionId()); - KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO = kanjiaActivityGoodsService.getKanjiaGoodsDetail(kanjiaActivity.getKanjiaActivityGoodsId()); + //修改砍价商品库存 + if (promotionTypeEnum.equals(PromotionTypeEnum.KANJIA)) { + KanjiaActivity kanjiaActivity = kanjiaActivityService.getById(promotionId); + KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO = kanjiaActivityGoodsService.getKanjiaGoodsDetail(kanjiaActivity.getKanjiaActivityGoodsId()); - Integer stock = Integer.parseInt(cache.get(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId())).toString()); - kanjiaActivityGoodsDTO.setStock(stock); + Integer stock = Integer.parseInt(cache.get(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, promotionId, orderItem.getSkuId())).toString()); + kanjiaActivityGoodsDTO.setStock(stock); - kanjiaActivityGoodsService.updateById(kanjiaActivityGoodsDTO); - //修改积分商品库存 - } else if (promotionTypeEnum.equals(PromotionTypeEnum.POINTS_GOODS)) { - PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsDetail(orderItem.getPromotionId()); - Integer stock = Integer.parseInt(cache.get(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId())).toString()); - pointsGoodsVO.setActiveStock(stock); - pointsGoodsService.updateById(pointsGoodsVO); - } else { - PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); - searchParams.setPromotionType(promotionTypeEnum.name()); - searchParams.setPromotionId(orderItem.getPromotionId()); - searchParams.setSkuId(orderItem.getSkuId()); - PromotionGoods pGoods = promotionGoodsService.getPromotionsGoods(searchParams); - //记录需要更新的促销库存信息 - promotionKey.add( - PromotionGoodsService.getPromotionGoodsStockCacheKey( - promotionTypeEnum, - orderItem.getPromotionId(), orderItem.getSkuId()) - ); - if (pGoods != null) { - promotionGoods.add(pGoods); - } + kanjiaActivityGoodsService.updateById(kanjiaActivityGoodsDTO); + //修改积分商品库存 + } else if (promotionTypeEnum.equals(PromotionTypeEnum.POINTS_GOODS)) { + PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsDetail(promotionId); + Integer stock = Integer.parseInt(cache.get(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, promotionId, orderItem.getSkuId())).toString()); + pointsGoodsVO.setActiveStock(stock); + pointsGoodsService.updateById(pointsGoodsVO); + } else { + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionType(promotionTypeEnum.name()); + searchParams.setPromotionId(promotionId); + searchParams.setSkuId(orderItem.getSkuId()); + PromotionGoods pGoods = promotionGoodsService.getPromotionsGoods(searchParams); + //记录需要更新的促销库存信息 + promotionKey.add( + PromotionGoodsService.getPromotionGoodsStockCacheKey( + promotionTypeEnum, + promotionId, orderItem.getSkuId()) + ); + if (pGoods != null) { + promotionGoods.add(pGoods); + } + } + }); } + } goodsSkus.add(goodsSku); } diff --git a/framework/src/main/java/cn/lili/common/enums/PromotionTypeEnum.java b/framework/src/main/java/cn/lili/common/enums/PromotionTypeEnum.java index 44dfa687..cb9b1dbf 100644 --- a/framework/src/main/java/cn/lili/common/enums/PromotionTypeEnum.java +++ b/framework/src/main/java/cn/lili/common/enums/PromotionTypeEnum.java @@ -23,7 +23,7 @@ public enum PromotionTypeEnum { /** * 有促销库存的活动类型 */ - static final PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL, KANJIA, POINTS_GOODS}; + public static final PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL, KANJIA, POINTS_GOODS}; private final String description; diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java index 9e30d21d..7c5ce6e7 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java @@ -132,7 +132,7 @@ public class GoodsSearchParams extends PageVO { queryWrapper.le("quantity", leQuantity); } if (geQuantity != null) { - queryWrapper.ge("quantity", geQuantity); + queryWrapper.gt("quantity", geQuantity); } if (recommend != null) { queryWrapper.le("recommend", recommend); @@ -145,6 +145,7 @@ public class GoodsSearchParams extends PageVO { } if(alertQuantity != null && alertQuantity){ queryWrapper.apply("quantity <= alert_quantity"); + queryWrapper.ge("alert_quantity", 0); } queryWrapper.in(CollUtil.isNotEmpty(ids), "id", ids); diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index ca07a252..0f6cefe3 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -328,7 +328,11 @@ public class GoodsSkuServiceImpl extends ServiceImpl i } } - goodsSkuDetail.getGoodsGalleryList().addAll(goodsVO.getGoodsGalleryList()); + if (goodsSkuDetail.getGoodsGalleryList() == null || goodsSkuDetail.getGoodsGalleryList().isEmpty()) { + goodsSkuDetail.setGoodsGalleryList(goodsVO.getGoodsGalleryList()); + } else { + goodsSkuDetail.getGoodsGalleryList().addAll(goodsVO.getGoodsGalleryList()); + } map.put("data", goodsSkuDetail); //获取分类 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 728b3e74..22e44ce0 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 @@ -399,6 +399,8 @@ public class SeckillApplyServiceImpl extends ServiceImpl { */ long todayUpperNum(); + /** + * 预警库存数 + * @return + */ long alertQuantityNum(); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java index b6afc59b..2192cf81 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java @@ -68,6 +68,7 @@ public class GoodsStatisticsServiceImpl extends ServiceImpl