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 77526c48..e310faba 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 @@ -33,7 +33,10 @@ import cn.lili.modules.member.entity.dos.FootPrint; import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.service.MemberEvaluationService; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import cn.lili.modules.promotion.entity.enums.CouponGetEnum; +import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.search.entity.dos.EsGoodsAttribute; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsIndexService; @@ -104,6 +107,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl i @Autowired private EsGoodsIndexService goodsIndexService; + @Autowired + private PromotionGoodsService promotionGoodsService; + @Override public void add(List> skuList, Goods goods) { // 检查是否需要生成索引 @@ -253,9 +259,6 @@ public class GoodsSkuServiceImpl extends ServiceImpl i Map promotionMap = goodsIndex.getPromotionMap(); //设置当前商品的促销价格 - if (promotionMap != null && !promotionMap.isEmpty() && goodsIndex.getPromotionPrice() != null) { - goodsSkuDetail.setPromotionPrice(goodsIndex.getPromotionPrice()); - } if (promotionMap != null && !promotionMap.isEmpty()) { promotionMap = promotionMap.entrySet().stream().parallel().filter(i -> { JSONObject jsonObject = JSONUtil.parseObj(i.getValue()); @@ -265,11 +268,18 @@ public class GoodsSkuServiceImpl extends ServiceImpl i (jsonObject.get("endTime") == null || jsonObject.get("endTime", Date.class).getTime() >= System.currentTimeMillis()); }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - boolean containsPromotion = promotionMap.keySet().stream().anyMatch(i -> - i.contains(PromotionTypeEnum.SECKILL.name()) || i.contains(PromotionTypeEnum.PINTUAN.name())); - if (containsPromotion && goodsIndex.getPromotionPrice() != null) { - goodsSkuDetail.setPromotionFlag(true); - goodsSkuDetail.setPromotionPrice(goodsIndex.getPromotionPrice()); + Optional> containsPromotion = promotionMap.entrySet().stream().filter(i -> + i.getKey().contains(PromotionTypeEnum.SECKILL.name()) || i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); + if (containsPromotion.isPresent()) { + JSONObject jsonObject = JSONUtil.parseObj(containsPromotion.get().getValue()); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setSkuId(skuId); + searchParams.setPromotionId(jsonObject.get("id").toString()); + PromotionGoods promotionsGoods = promotionGoodsService.getPromotionsGoods(searchParams); + if (promotionsGoods != null && promotionsGoods.getPrice() != null) { + goodsSkuDetail.setPromotionFlag(true); + goodsSkuDetail.setPromotionPrice(promotionsGoods.getPrice()); + } } else { goodsSkuDetail.setPromotionFlag(false); goodsSkuDetail.setPromotionPrice(null); diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java index f217efd5..9e47a349 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java @@ -1,6 +1,8 @@ package cn.lili.modules.order.cart.render.impl; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; @@ -120,7 +122,8 @@ public class CheckDataRender implements CartRenderStep { //移除无效促销活动 if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) { cartSkuVO.setPromotionMap(cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> { - BasePromotions basePromotions = (BasePromotions) i.getValue(); + JSONObject promotionsObj = JSONUtil.parseObj(i.getValue()); + BasePromotions basePromotions = promotionsObj.toBean(BasePromotions.class); if (basePromotions.getStartTime() != null && basePromotions.getEndTime() != null) { return basePromotions.getStartTime().getTime() <= System.currentTimeMillis() && basePromotions.getEndTime().getTime() >= System.currentTimeMillis(); } @@ -189,7 +192,8 @@ public class CheckDataRender implements CartRenderStep { if (tradeDTO.getSkuList().get(0).getPromotionMap() != null && !tradeDTO.getSkuList().get(0).getPromotionMap().isEmpty()) { Optional> pintuanPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); if (pintuanPromotions.isPresent()) { - Pintuan pintuan = (Pintuan) pintuanPromotions.get().getValue(); + JSONObject promotionsObj = JSONUtil.parseObj(pintuanPromotions.get().getValue()); + Pintuan pintuan = promotionsObj.toBean(Pintuan.class); Integer limitNum = pintuan.getLimitNum(); for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { @@ -203,7 +207,8 @@ public class CheckDataRender implements CartRenderStep { //获取积分商品VO Optional> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst(); if (pointsPromotions.isPresent()) { - PointsGoods pointsGoods = (PointsGoods) pointsPromotions.get().getValue(); + JSONObject promotionsObj = JSONUtil.parseObj(pointsPromotions.get().getValue()); + PointsGoods pointsGoods = promotionsObj.toBean(PointsGoods.class); if (pointsGoods == null) { throw new ServiceException(ResultCode.POINT_GOODS_ERROR); } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java index bcd389ef..4df13428 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java @@ -1,6 +1,8 @@ package cn.lili.modules.order.cart.render.impl; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.modules.goods.service.CategoryService; import cn.lili.modules.order.cart.entity.dto.TradeDTO; @@ -72,7 +74,8 @@ public class CommissionRender implements CartRenderStep { if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS) && tradeDTO.getSkuList().get(0).getPromotionMap() != null && !tradeDTO.getSkuList().get(0).getPromotionMap().isEmpty()) { Optional> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst(); if (pointsPromotions.isPresent()) { - PointsGoods pointsGoods = (PointsGoods) pointsPromotions.get().getValue(); + JSONObject promotionsObj = JSONUtil.parseObj(pointsPromotions.get().getValue()); + PointsGoods pointsGoods = JSONUtil.toBean(promotionsObj, PointsGoods.class); priceDetailDTO.setSettlementPrice(pointsGoods.getSettlementPrice()); } } @@ -80,7 +83,8 @@ public class CommissionRender implements CartRenderStep { else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA) && tradeDTO.getSkuList().get(0).getPromotionMap() != null && !tradeDTO.getSkuList().get(0).getPromotionMap().isEmpty()) { Optional> kanjiaPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst(); if (kanjiaPromotions.isPresent()) { - KanjiaActivityGoods kanjiaActivityGoods = (KanjiaActivityGoods) kanjiaPromotions.get().getValue(); + JSONObject promotionsObj = JSONUtil.parseObj(kanjiaPromotions.get().getValue()); + KanjiaActivityGoods kanjiaActivityGoods = JSONUtil.toBean(promotionsObj, KanjiaActivityGoods.class); priceDetailDTO.setSettlementPrice(kanjiaActivityGoods.getSettlementPrice()); } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java index 1ef8b5bf..a20ec4e3 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java @@ -1,5 +1,7 @@ package cn.lili.modules.order.cart.render.impl; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.entity.dos.GoodsSku; @@ -55,7 +57,8 @@ public class FullDiscountRender implements CartRenderStep { Optional> fullDiscountOptional = fullDiscountSkuList.get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.FULL_DISCOUNT.name())).findFirst(); if (fullDiscountOptional.isPresent()) { - FullDiscount fullDiscount = (FullDiscount) fullDiscountOptional.get().getValue(); + JSONObject promotionsObj = JSONUtil.parseObj(fullDiscountOptional.get().getValue()); + FullDiscount fullDiscount = promotionsObj.toBean(FullDiscount.class); FullDiscountVO fullDiscountVO = new FullDiscountVO(fullDiscount); //如果有赠品,则将赠品信息写入 diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java index 613de67c..cfcfe37b 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java @@ -1,5 +1,7 @@ package cn.lili.modules.order.cart.render.impl; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; @@ -13,7 +15,6 @@ import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; -import cn.lili.modules.promotion.entity.dos.BasePromotions; import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.vos.PromotionSkuVO; @@ -140,8 +141,8 @@ public class SkuPromotionRender implements CartRenderStep { continue; } - BasePromotions basePromotions = (BasePromotions) entry.getValue(); - PromotionSkuVO promotionSkuVO = new PromotionSkuVO(entry.getKey().split("-")[0], basePromotions.getId()); + JSONObject promotionsObj = JSONUtil.parseObj(entry.getValue()); + PromotionSkuVO promotionSkuVO = new PromotionSkuVO(entry.getKey().split("-")[0], promotionsObj.get("id", String.class)); cartSkuVO.setSubTotal(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); cartSkuVO.getPriceDetailDTO().setGoodsPrice(cartSkuVO.getSubTotal()); diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index cd0334ea..a8fcf964 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -1,6 +1,7 @@ package cn.lili.modules.order.cart.service; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.common.enums.PromotionTypeEnum; @@ -31,10 +32,10 @@ import cn.lili.modules.order.cart.render.TradeBuilder; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.vo.ReceiptVO; import cn.lili.modules.promotion.entity.dos.KanjiaActivity; -import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; import cn.lili.modules.promotion.entity.dos.MemberCoupon; -import cn.lili.modules.promotion.entity.dos.Pintuan; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; @@ -42,6 +43,7 @@ import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; import cn.lili.modules.promotion.service.KanjiaActivityService; import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.modules.promotion.service.PointsGoodsService; +import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsIndexService; import cn.lili.modules.search.service.EsGoodsSearchService; @@ -132,6 +134,9 @@ public class CartServiceImpl implements CartService { @Autowired private MemberService memberService; + @Autowired + private PromotionGoodsService promotionGoodsService; + @Override public void add(String skuId, Integer num, String cartType, Boolean cover) { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); @@ -570,8 +575,20 @@ public class CartServiceImpl implements CartService { if (goodsIndex.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.SECKILL.name())) || (goodsIndex.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.PINTUAN.name())) && CartTypeEnum.PINTUAN.name().equals(cartType))) { - dataSku.setPromotionFlag(true); - dataSku.setPromotionPrice(goodsIndex.getPromotionPrice()); + + Optional> containsPromotion = goodsIndex.getPromotionMap().entrySet().stream().filter(i -> + i.getKey().contains(PromotionTypeEnum.SECKILL.name()) || i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); + if (containsPromotion.isPresent()) { + JSONObject promotionsObj = JSONUtil.parseObj(containsPromotion.get().getValue()); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setSkuId(dataSku.getId()); + searchParams.setPromotionId(promotionsObj.get("id").toString()); + PromotionGoods promotionsGoods = promotionGoodsService.getPromotionsGoods(searchParams); + if (promotionsGoods != null && promotionsGoods.getPrice() != null) { + dataSku.setPromotionFlag(true); + dataSku.setPromotionPrice(promotionsGoods.getPrice()); + } + } } promotionMap = goodsIndex.getPromotionMap(); } else { @@ -718,11 +735,11 @@ public class CartServiceImpl implements CartService { if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) { Optional> pintuanPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); if (pintuanPromotions.isPresent()) { - Pintuan pintuan = (Pintuan) pintuanPromotions.get().getValue(); + JSONObject promotionsObj = JSONUtil.parseObj(pintuanPromotions.get().getValue()); //写入拼团信息 - cartSkuVO.setPintuanId(pintuan.getId()); + cartSkuVO.setPintuanId(promotionsObj.get("id").toString()); //检测拼团限购数量 - Integer limitNum = pintuan.getLimitNum(); + Integer limitNum = promotionsObj.get("limitNum", Integer.class); if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); } @@ -739,10 +756,10 @@ public class CartServiceImpl implements CartService { if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) { Optional> kanjiaPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst(); if (kanjiaPromotions.isPresent()) { - KanjiaActivityGoods kanjiaActivityGoods = (KanjiaActivityGoods) kanjiaPromotions.get().getValue(); + JSONObject promotionsObj = JSONUtil.parseObj(kanjiaPromotions.get().getValue()); //查找当前会员的砍价商品活动 KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); - kanjiaActivitySearchParams.setKanjiaActivityGoodsId(kanjiaActivityGoods.getId()); + kanjiaActivitySearchParams.setKanjiaActivityGoodsId(promotionsObj.get("id", String.class)); kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams);