修复结算时促销为空的问题

This commit is contained in:
paulGao 2021-12-22 16:50:50 +08:00
parent 3fb4e488bb
commit 787617f504
7 changed files with 76 additions and 63 deletions

View File

@ -10,6 +10,7 @@ import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -122,4 +123,11 @@ public class CartSkuVO extends CartBase implements Serializable {
this.promotionMap = promotionMap; this.promotionMap = promotionMap;
} }
} }
public Map<String, Object> getPromotionMap() {
if (this.promotionMap == null) {
return new HashMap<>();
}
return promotionMap;
}
} }

View File

@ -172,18 +172,20 @@ public class CheckDataRender implements CartRenderStep {
} }
} }
//判断拼团商品的限购数量 //判断拼团商品的限购数量
Optional<Map.Entry<String, Object>> pintuanPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); if (tradeDTO.getSkuList().get(0).getPromotionMap() != null && !tradeDTO.getSkuList().get(0).getPromotionMap().isEmpty()) {
if (pintuanPromotions.isPresent()) { Optional<Map.Entry<String, Object>> pintuanPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst();
Pintuan pintuan = (Pintuan) pintuanPromotions.get().getValue(); if (pintuanPromotions.isPresent()) {
Integer limitNum = pintuan.getLimitNum(); Pintuan pintuan = (Pintuan) pintuanPromotions.get().getValue();
for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { Integer limitNum = pintuan.getLimitNum();
if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) {
throw new ServiceException(ResultCode.PINTUAN_LIMIT_NUM_ERROR); 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 //获取积分商品VO
Optional<Map.Entry<String, Object>> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst(); Optional<Map.Entry<String, Object>> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst();
if (pointsPromotions.isPresent()) { if (pointsPromotions.isPresent()) {

View File

@ -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<Map.Entry<String, Object>> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst(); Optional<Map.Entry<String, Object>> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst();
if (pointsPromotions.isPresent()) { if (pointsPromotions.isPresent()) {
PointsGoods pointsGoods = (PointsGoods) pointsPromotions.get().getValue(); 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<Map.Entry<String, Object>> kanjiaPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst(); Optional<Map.Entry<String, Object>> kanjiaPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst();
if (kanjiaPromotions.isPresent()) { if (kanjiaPromotions.isPresent()) {
KanjiaActivityGoods kanjiaActivityGoods = (KanjiaActivityGoods) kanjiaPromotions.get().getValue(); KanjiaActivityGoods kanjiaActivityGoods = (KanjiaActivityGoods) kanjiaPromotions.get().getValue();

View File

@ -48,7 +48,7 @@ public class FullDiscountRender implements CartRenderStep {
//循环店铺购物车 //循环店铺购物车
for (CartVO cart : cartList) { for (CartVO cart : cartList) {
List<CartSkuVO> fullDiscountSkuList = cart.getSkuList().stream() List<CartSkuVO> 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()); .collect(Collectors.toList());
if (!fullDiscountSkuList.isEmpty()) { if (!fullDiscountSkuList.isEmpty()) {

View File

@ -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.entity.vo.CartVO;
import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.cart.render.CartRenderStep;
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; 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.enums.KanJiaStatusEnum;
import cn.lili.modules.promotion.entity.vos.PromotionSkuVO; import cn.lili.modules.promotion.entity.vos.PromotionSkuVO;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams;
@ -122,18 +121,19 @@ public class SkuPromotionRender implements CartRenderStep {
for (CartVO cartVO : tradeDTO.getCartList()) { for (CartVO cartVO : tradeDTO.getCartList()) {
//循环sku //循环sku
for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) { for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) {
//赋予商品促销信息 if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) {
for (Map.Entry<String, Object> entry : cartSkuVO.getPromotionMap().entrySet()) { //赋予商品促销信息
// 忽略拼团活动 for (Map.Entry<String, Object> entry : cartSkuVO.getPromotionMap().entrySet()) {
if (entry.getKey().contains(PromotionTypeEnum.PINTUAN.name())) { // 忽略拼团活动
continue; 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);
} }
} }
} }

View File

@ -367,7 +367,7 @@ public class CartServiceImpl implements CartService {
List<EsGoodsIndex> esGoodsList = esGoodsSearchService.getEsGoodsBySkuIds(ids); List<EsGoodsIndex> esGoodsList = esGoodsSearchService.getEsGoodsBySkuIds(ids);
for (EsGoodsIndex esGoodsIndex : esGoodsList) { for (EsGoodsIndex esGoodsIndex : esGoodsList) {
if (esGoodsIndex != null && esGoodsIndex.getPromotionMap() != null) { if (esGoodsIndex != null && esGoodsIndex.getPromotionMap() != null && !esGoodsIndex.getPromotionMap().isEmpty()) {
List<String> couponIds = esGoodsIndex.getPromotionMap().keySet().stream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList()); List<String> 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()) { if (!couponIds.isEmpty()) {
List<MemberCoupon> currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice); List<MemberCoupon> currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice);
@ -614,12 +614,14 @@ public class CartServiceImpl implements CartService {
continue; continue;
} }
//有促销金额则用促销金额否则用商品原价 //有促销金额则用促销金额否则用商品原价
if (cartSkuVO.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.PINTUAN.name()) || i.contains(PromotionTypeEnum.SECKILL.name()))) { if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) {
cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); if (cartSkuVO.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.PINTUAN.name()) || i.contains(PromotionTypeEnum.SECKILL.name()))) {
skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum()));
} else { skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum()));
cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); } else {
skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); 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) { private void checkPintuan(CartSkuVO cartSkuVO) {
//拼团活动需要对限购数量进行判定 //拼团活动需要对限购数量进行判定
//获取拼团信息 //获取拼团信息
Optional<Map.Entry<String, Object>> pintuanPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) {
if (pintuanPromotions.isPresent()) { Optional<Map.Entry<String, Object>> pintuanPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst();
Pintuan pintuan = (Pintuan) pintuanPromotions.get().getValue(); if (pintuanPromotions.isPresent()) {
//写入拼团信息 Pintuan pintuan = (Pintuan) pintuanPromotions.get().getValue();
cartSkuVO.setPintuanId(pintuan.getId()); //写入拼团信息
//检测拼团限购数量 cartSkuVO.setPintuanId(pintuan.getId());
Integer limitNum = pintuan.getLimitNum(); //检测拼团限购数量
if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { Integer limitNum = pintuan.getLimitNum();
throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); 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 购物车信息 * @param cartSkuVO 购物车信息
*/ */
private void checkKanjia(CartSkuVO cartSkuVO) { private void checkKanjia(CartSkuVO cartSkuVO) {
if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) {
Optional<Map.Entry<String, Object>> 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<Map.Entry<String, Object>> kanjiaPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst(); //校验砍价活动是否满足条件
if (kanjiaPromotions.isPresent()) { //判断发起砍价活动
KanjiaActivityGoods kanjiaActivityGoods = (KanjiaActivityGoods) kanjiaPromotions.get().getValue(); if (kanjiaActivity == null) {
//查找当前会员的砍价商品活动 throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR);
KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); //判断砍价活动是否已满足条件
kanjiaActivitySearchParams.setKanjiaActivityGoodsId(kanjiaActivityGoods.getId()); } else if (!KanJiaStatusEnum.SUCCESS.name().equals(kanjiaActivity.getStatus())) {
kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); cartSkuVO.setKanjiaId(kanjiaActivity.getId());
kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); cartSkuVO.setPurchasePrice(0D);
KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams); throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR);
}
//校验砍价活动是否满足条件 //砍价商品默认一件货物
//判断发起砍价活动
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.setKanjiaId(kanjiaActivity.getId());
cartSkuVO.setPurchasePrice(0D); cartSkuVO.setNum(1);
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR);
} }
//砍价商品默认一件货物
cartSkuVO.setKanjiaId(kanjiaActivity.getId());
cartSkuVO.setNum(1);
} }
} }
/** /**

View File

@ -272,7 +272,7 @@ public class Order extends BaseEntity {
this.setOrderPromotionType(tradeDTO.getCartTypeEnum().name()); this.setOrderPromotionType(tradeDTO.getCartTypeEnum().name());
//判断是否为拼团订单如果为拼团订单获取拼团ID判断是否为主订单 //判断是否为拼团订单如果为拼团订单获取拼团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<String> pintuanPromotions = cartVO.getCheckedSkuList().get(0).getPromotionMap().keySet().stream().filter(i -> i.contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); Optional<String> pintuanPromotions = cartVO.getCheckedSkuList().get(0).getPromotionMap().keySet().stream().filter(i -> i.contains(PromotionTypeEnum.PINTUAN.name())).findFirst();
pintuanPromotions.ifPresent(s -> promotionId = s.split("-")[1]); pintuanPromotions.ifPresent(s -> promotionId = s.split("-")[1]);
} }