Commit 158b8fdf by 张跃

Merge branch 'featur/20210518-购物车算价bug'

parents fe6e7784 f2be7d14
...@@ -8,10 +8,13 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; ...@@ -8,10 +8,13 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum; import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.IPromotionService; import cn.freemud.service.IPromotionService;
import com.freemud.application.sdk.api.log.ApiLog;
import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
...@@ -33,6 +36,8 @@ import java.util.stream.Collectors; ...@@ -33,6 +36,8 @@ import java.util.stream.Collectors;
@Service @Service
public class TimeSalePromotionService implements IPromotionService { public class TimeSalePromotionService implements IPromotionService {
private static Logger logger = LoggerFactory.getLogger(TimeSalePromotionService.class);
@Override @Override
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, UserLoginInfoDto userLoginInfoDto, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) { public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, UserLoginInfoDto userLoginInfoDto, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts()) || !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> (ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()) || (ActivityTypeEnum.TYPE_21.getCode().equals(discount.getType())) || ActivityTypeEnum.TYPE_22.getCode().equals(discount.getType())))) { if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts()) || !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> (ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()) || (ActivityTypeEnum.TYPE_21.getCode().equals(discount.getType())) || ActivityTypeEnum.TYPE_22.getCode().equals(discount.getType())))) {
...@@ -46,7 +51,7 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -46,7 +51,7 @@ public class TimeSalePromotionService implements IPromotionService {
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream() Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1)); .collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
// 存储当前享受限时特价折扣的商品数量,key:goodsId; value:可享受数量 // 存储当前享受限时特价折扣的商品数量,key:goodsId; value:可享受数量
Map<String, Integer> numberMap = new HashMap<>(); //Map<String, Integer> numberMap = new HashMap<>();
List<Integer> discounts = Arrays.asList(ActivityTypeEnum.TYPE_2.getCode(), ActivityTypeEnum.TYPE_21.getCode(), ActivityTypeEnum.TYPE_22.getCode()); List<Integer> discounts = Arrays.asList(ActivityTypeEnum.TYPE_2.getCode(), ActivityTypeEnum.TYPE_21.getCode(), ActivityTypeEnum.TYPE_22.getCode());
String uid = ""; String uid = "";
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
...@@ -59,13 +64,13 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -59,13 +64,13 @@ public class TimeSalePromotionService implements IPromotionService {
continue; continue;
} }
// 享受限时特价折扣的商品数量 // 享受限时特价折扣的商品数量
Integer specialActualGoodsNumber = null; Integer specialActualGoodsNumber = goodsDiscount.getActualGoodsNumber();
// 商品现价 // 商品现价
Long goodsNowPrice = cartGoods.getOriginalPrice() - goodsDiscount.getDiscount() / goodsDiscount.getActualGoodsNumber(); Long goodsNowPrice = cartGoods.getOriginalPrice() - goodsDiscount.getDiscount()/goodsDiscount.getActualGoodsNumber();
// numberMap用于暂存当前商品行可享受限时特价折扣的商品数量 // numberMap用于暂存当前商品行可享受限时特价折扣的商品数量
if ((specialActualGoodsNumber = numberMap.get(goods.getGoodsId())) == null) { // if ((specialActualGoodsNumber = numberMap.get(goods.getGoodsId())) == null) {
numberMap.put(goods.getGoodsId(), specialActualGoodsNumber=goodsDiscount.getActualGoodsNumber()); // numberMap.put(goods.getGoodsId(), specialActualGoodsNumber=goodsDiscount.getActualGoodsNumber());
} // }
//若可享受数量>=当前商品行的商品数量 //若可享受数量>=当前商品行的商品数量
if (specialActualGoodsNumber - cartGoods.getQty() >= 0) { if (specialActualGoodsNumber - cartGoods.getQty() >= 0) {
cartGoods.setAmount(goodsNowPrice * cartGoods.getQty()); cartGoods.setAmount(goodsNowPrice * cartGoods.getQty());
...@@ -78,7 +83,7 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -78,7 +83,7 @@ public class TimeSalePromotionService implements IPromotionService {
uid = goods.getCartGoodsUid(); uid = goods.getCartGoodsUid();
} }
} }
numberMap.put(goods.getGoodsId(), specialActualGoodsNumber - cartGoods.getQty()); // numberMap.put(goods.getGoodsId(), specialActualGoodsNumber - cartGoods.getQty());
} }
if (StringUtils.isNotBlank(toastMsg)) { if (StringUtils.isNotBlank(toastMsg)) {
shoppingCartGoodsResponseVo.setToastMsg(toastMsg); shoppingCartGoodsResponseVo.setToastMsg(toastMsg);
...@@ -96,7 +101,7 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -96,7 +101,7 @@ public class TimeSalePromotionService implements IPromotionService {
return; return;
} }
// 商品实际享受优惠的数量: key:skuId; value:实际数量 // 商品实际享受优惠的数量: key:skuId; value:实际数量
Map<String, Integer> numberMap = new HashMap<>(); // Map<String, Integer> numberMap = new HashMap<>();
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream() Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1)); .collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
...@@ -111,21 +116,22 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -111,21 +116,22 @@ public class TimeSalePromotionService implements IPromotionService {
continue; continue;
} }
if (numberMap.get(cartGoods.getSkuId()) == null) { // if (numberMap.get(cartGoods.getSkuId()) == null) {
numberMap.put(cartGoods.getSkuId(), goods.getActualGoodsNumber()); // numberMap.put(cartGoods.getSkuId(), goods.getActualGoodsNumber());
} // }
Integer actualGoodsNumber = numberMap.get(cartGoods.getSkuId()); Integer actualGoodsNumber = goodsDiscount.getActualGoodsNumber();
logger.info("测试 goodid{},actualGoodsNumber",cartGoods.getCartGoodsUid(),actualGoodsNumber);
if (actualGoodsNumber > 0) { if (actualGoodsNumber > 0) {
Long totalDiscountAmount = cartGoods.getQty() > actualGoodsNumber ? goodsDiscount.getDiscount() * actualGoodsNumber / goodsDiscount.getActualGoodsNumber() : goodsDiscount.getDiscount() * cartGoods.getQty() / goodsDiscount.getActualGoodsNumber(); // Long totalDiscountAmount = cartGoods.getQty() > actualGoodsNumber ? goodsDiscount.getDiscount() * actualGoodsNumber / goodsDiscount.getActualGoodsNumber() : goodsDiscount.getDiscount() * cartGoods.getQty() / goodsDiscount.getActualGoodsNumber();
//Long totalDiscountAmount = cartGoods.getQty() > actualGoodsNumber ? goods.getDiscountAmount() * actualGoodsNumber / goods.getActualGoodsNumber() : goods.getDiscountAmount() * cartGoods.getQty() / goods.getActualGoodsNumber(); //Long totalDiscountAmount = cartGoods.getQty() > actualGoodsNumber ? goods.getDiscountAmount() * actualGoodsNumber / goods.getActualGoodsNumber() : goods.getDiscountAmount() * cartGoods.getQty() / goods.getActualGoodsNumber();
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto(); ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
activityDiscountsDto.setActivityCode(goodsDiscount.getActivityCode()); activityDiscountsDto.setActivityCode(goodsDiscount.getActivityCode());
activityDiscountsDto.setActivityName(goodsDiscount.getActivityName()); activityDiscountsDto.setActivityName(goodsDiscount.getActivityName());
activityDiscountsDto.setActivityType(ActivityTypeEnum.TYPE_2.getCode()); activityDiscountsDto.setActivityType(ActivityTypeEnum.TYPE_2.getCode());
activityDiscountsDto.setDiscountAmount(totalDiscountAmount.intValue()); activityDiscountsDto.setDiscountAmount(goodsDiscount.getDiscount().intValue());
cartGoods.getActivityDiscountsDtos().add(activityDiscountsDto); cartGoods.getActivityDiscountsDtos().add(activityDiscountsDto);
cartGoods.setTotalDiscountAmount(cartGoods.getTotalDiscountAmount() + totalDiscountAmount.intValue()); cartGoods.setTotalDiscountAmount(cartGoods.getTotalDiscountAmount() + goodsDiscount.getDiscount().intValue());
numberMap.put(cartGoods.getSkuId(), actualGoodsNumber - cartGoods.getQty()); // numberMap.put(cartGoods.getSkuId(), actualGoodsNumber - cartGoods.getQty());
} else { } else {
cartGoods.setTotalDiscountAmount(0); cartGoods.setTotalDiscountAmount(0);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment