From 787617f50429cada1947935d7f96a8728b6e0041 Mon Sep 17 00:00:00 2001 From: paulGao Date: Wed, 22 Dec 2021 16:50:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=93=E7=AE=97=E6=97=B6?= =?UTF-8?q?=E4=BF=83=E9=94=80=E4=B8=BA=E7=A9=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/cart/entity/vo/CartSkuVO.java | 8 ++ .../cart/render/impl/CheckDataRender.java | 18 +++-- .../cart/render/impl/CommissionRender.java | 4 +- .../cart/render/impl/FullDiscountRender.java | 2 +- .../cart/render/impl/SkuPromotionRender.java | 24 +++--- .../order/cart/service/CartServiceImpl.java | 81 ++++++++++--------- .../modules/order/order/entity/dos/Order.java | 2 +- 7 files changed, 76 insertions(+), 63 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java index d9a6f3e0..cd986b28 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java @@ -10,6 +10,7 @@ import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -122,4 +123,11 @@ public class CartSkuVO extends CartBase implements Serializable { this.promotionMap = promotionMap; } } + + public Map getPromotionMap() { + if (this.promotionMap == null) { + return new HashMap<>(); + } + return promotionMap; + } } 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 64e28e4e..4f8ca2a5 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 @@ -172,18 +172,20 @@ public class CheckDataRender implements CartRenderStep { } } //判断拼团商品的限购数量 - 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(); - Integer limitNum = pintuan.getLimitNum(); - for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { - if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { - throw new ServiceException(ResultCode.PINTUAN_LIMIT_NUM_ERROR); + 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(); + Integer limitNum = pintuan.getLimitNum(); + for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException(ResultCode.PINTUAN_LIMIT_NUM_ERROR); + } } } } //积分商品,判断用户积分是否满足 - } else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) { + } else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS) && tradeDTO.getSkuList().get(0).getPromotionMap() != null && !tradeDTO.getSkuList().get(0).getPromotionMap().isEmpty()) { //获取积分商品VO Optional> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst(); if (pointsPromotions.isPresent()) { 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 5183c7d4..bcd389ef 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 @@ -69,7 +69,7 @@ public class CommissionRender implements CartRenderStep { } //如果积分订单 积分订单,单独操作订单结算金额和商家结算字段 - if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) { + 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(); @@ -77,7 +77,7 @@ public class CommissionRender implements CartRenderStep { } } //如果砍价订单 计算金额,单独操作订单结算金额和商家结算字段 - else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { + 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(); 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 35bfb885..1ef8b5bf 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 @@ -48,7 +48,7 @@ public class FullDiscountRender implements CartRenderStep { //循环店铺购物车 for (CartVO cart : cartList) { List fullDiscountSkuList = cart.getSkuList().stream() - .filter(i -> i.getPromotionMap().keySet().stream().anyMatch(j -> j.contains(PromotionTypeEnum.FULL_DISCOUNT.name()))) + .filter(i -> i.getPromotionMap() != null && !i.getPromotionMap().isEmpty() && i.getPromotionMap().keySet().stream().anyMatch(j -> j.contains(PromotionTypeEnum.FULL_DISCOUNT.name()))) .collect(Collectors.toList()); if (!fullDiscountSkuList.isEmpty()) { 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 2251aedf..40ba5db4 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 @@ -9,7 +9,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.dto.BasePromotions; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.vos.PromotionSkuVO; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; @@ -122,18 +121,19 @@ public class SkuPromotionRender implements CartRenderStep { for (CartVO cartVO : tradeDTO.getCartList()) { //循环sku for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) { - //赋予商品促销信息 - for (Map.Entry entry : cartSkuVO.getPromotionMap().entrySet()) { - // 忽略拼团活动 - if (entry.getKey().contains(PromotionTypeEnum.PINTUAN.name())) { - continue; + if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) { + //赋予商品促销信息 + for (Map.Entry entry : cartSkuVO.getPromotionMap().entrySet()) { + // 忽略拼团活动 + if (entry.getKey().contains(PromotionTypeEnum.PINTUAN.name())) { + continue; + } +// BasePromotions basePromotions = (BasePromotions) entry.getValue(); +// PromotionSkuVO promotionSkuVO = new PromotionSkuVO(entry.getKey().split("-")[0], basePromotions.getId()); + cartSkuVO.setSubTotal(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); + cartSkuVO.getPriceDetailDTO().setGoodsPrice(cartSkuVO.getSubTotal()); +// cartSkuVO.getPriceDetailDTO().getJoinPromotion().add(promotionSkuVO); } - BasePromotions basePromotions = (BasePromotions) entry.getValue(); - PromotionSkuVO promotionSkuVO = new PromotionSkuVO(entry.getKey().split("-")[0], basePromotions.getId()); - cartSkuVO.setSubTotal(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); - cartSkuVO.getPriceDetailDTO().setGoodsPrice(cartSkuVO.getSubTotal()); - - cartSkuVO.getPriceDetailDTO().getJoinPromotion().add(promotionSkuVO); } } } 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 bc75c9f9..cb406aa7 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 @@ -367,7 +367,7 @@ public class CartServiceImpl implements CartService { List esGoodsList = esGoodsSearchService.getEsGoodsBySkuIds(ids); for (EsGoodsIndex esGoodsIndex : esGoodsList) { - if (esGoodsIndex != null && esGoodsIndex.getPromotionMap() != null) { + if (esGoodsIndex != null && esGoodsIndex.getPromotionMap() != null && !esGoodsIndex.getPromotionMap().isEmpty()) { List couponIds = esGoodsIndex.getPromotionMap().keySet().stream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList()); if (!couponIds.isEmpty()) { List currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice); @@ -614,12 +614,14 @@ public class CartServiceImpl implements CartService { continue; } //有促销金额则用促销金额,否则用商品原价 - if (cartSkuVO.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.PINTUAN.name()) || i.contains(PromotionTypeEnum.SECKILL.name()))) { - cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); - skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); - } else { - cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); - skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); + if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) { + if (cartSkuVO.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.PINTUAN.name()) || i.contains(PromotionTypeEnum.SECKILL.name()))) { + cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); + skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); + } else { + cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); + skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); + } } } @@ -702,15 +704,17 @@ public class CartServiceImpl implements CartService { private void checkPintuan(CartSkuVO cartSkuVO) { //拼团活动,需要对限购数量进行判定 //获取拼团信息 - Optional> pintuanPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); - if (pintuanPromotions.isPresent()) { - Pintuan pintuan = (Pintuan) pintuanPromotions.get().getValue(); - //写入拼团信息 - cartSkuVO.setPintuanId(pintuan.getId()); - //检测拼团限购数量 - Integer limitNum = pintuan.getLimitNum(); - if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { - throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); + 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(); + //写入拼团信息 + cartSkuVO.setPintuanId(pintuan.getId()); + //检测拼团限购数量 + Integer limitNum = pintuan.getLimitNum(); + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); + } } } } @@ -721,33 +725,32 @@ public class CartServiceImpl implements CartService { * @param cartSkuVO 购物车信息 */ private void checkKanjia(CartSkuVO cartSkuVO) { + 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(); + //查找当前会员的砍价商品活动 + KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); + kanjiaActivitySearchParams.setKanjiaActivityGoodsId(kanjiaActivityGoods.getId()); + kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); + kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); + KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams); - Optional> kanjiaPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst(); - if (kanjiaPromotions.isPresent()) { - KanjiaActivityGoods kanjiaActivityGoods = (KanjiaActivityGoods) kanjiaPromotions.get().getValue(); - //查找当前会员的砍价商品活动 - KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); - kanjiaActivitySearchParams.setKanjiaActivityGoodsId(kanjiaActivityGoods.getId()); - kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); - kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); - KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams); - - //校验砍价活动是否满足条件 - //判断发起砍价活动 - if (kanjiaActivity == null) { - throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR); - //判断砍价活动是否已满足条件 - } else if (!KanJiaStatusEnum.SUCCESS.name().equals(kanjiaActivity.getStatus())) { + //校验砍价活动是否满足条件 + //判断发起砍价活动 + if (kanjiaActivity == null) { + throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR); + //判断砍价活动是否已满足条件 + } else if (!KanJiaStatusEnum.SUCCESS.name().equals(kanjiaActivity.getStatus())) { + cartSkuVO.setKanjiaId(kanjiaActivity.getId()); + cartSkuVO.setPurchasePrice(0D); + throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR); + } + //砍价商品默认一件货物 cartSkuVO.setKanjiaId(kanjiaActivity.getId()); - cartSkuVO.setPurchasePrice(0D); - throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR); + cartSkuVO.setNum(1); } - //砍价商品默认一件货物 - cartSkuVO.setKanjiaId(kanjiaActivity.getId()); - cartSkuVO.setNum(1); } - - } /** diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index 22d0e877..816cd62d 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -272,7 +272,7 @@ public class Order extends BaseEntity { this.setOrderPromotionType(tradeDTO.getCartTypeEnum().name()); //判断是否为拼团订单,如果为拼团订单获取拼团ID,判断是否为主订单 - if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.PINTUAN.name())) { + if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.PINTUAN.name()) && cartVO.getCheckedSkuList().get(0).getPromotionMap() != null && !cartVO.getCheckedSkuList().get(0).getPromotionMap().isEmpty()) { Optional pintuanPromotions = cartVO.getCheckedSkuList().get(0).getPromotionMap().keySet().stream().filter(i -> i.contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); pintuanPromotions.ifPresent(s -> promotionId = s.split("-")[1]); }