Commit cfe7ab6d by shuhu.hou@freemud.cn

限时特价优惠语提示fixbug

parent 809b7586
......@@ -47,7 +47,7 @@ public class TimeSalePromotionService implements IPromotionService {
String toastMsg = null;
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1));
// 存储当前享受限时特价折扣的商品数量
// 存储当前享受限时特价折扣的商品数量,key:goodsId; value:可享受数量
Map<String, Integer> numberMap = new HashMap<>();
for (CartGoods cartGoods : cartGoodsList) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods;
......@@ -58,48 +58,26 @@ public class TimeSalePromotionService implements IPromotionService {
if (goodsDiscount == null) {
continue;
}
// 设置商品原价与商品现价的初始值
cartGoods.setOriginalAmount(goods.getOriginalPrice() * cartGoods.getQty());
cartGoods.setAmount(goods.getOriginalPrice() * cartGoods.getQty() - goods.getDiscountAmount());
// 享受限时特价折扣的商品数量
Integer specialActualGoodsNumber = null;
// 商品现价
Long goodsNowPrice = null;
// 获取享受限时特价折扣的商品数量与商品现价
if (CollectionUtils.isNotEmpty(calculationDiscountResult.getApportionGoods())) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGoods = getApportionGoods(cartGoods, calculationDiscountResult.getApportionGoods(), ActivityTypeEnum.TYPE_2);
if (apportionGoods != null) {
specialActualGoodsNumber = apportionGoods.getGoodsQuantity();
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails apportionDetails = getApportionDetails(apportionGoods.getApportionDetails(), ActivityTypeEnum.TYPE_2);
if (apportionDetails != null) {
goodsNowPrice = apportionDetails.getGoodsNowPrice();
}
}
}
// 获取享受限时特价折扣的商品数量失败,重新计算=商品折扣总金额/(商品原价-商品现价)
if (specialActualGoodsNumber == null) {
specialActualGoodsNumber = (int) (goodsDiscount.getDiscount() / (goods.getOriginalPrice() - goods.getNowPrice()));
}
// 获取商品现价失败,从优惠信息中获取
if (goodsNowPrice == null) {
goodsNowPrice = goods.getNowPrice();
}
// Map中存有上次计算剩余的享受限时特价折扣的商品数量
if (numberMap.get(goods.getGoodsId()) != null) {
specialActualGoodsNumber = numberMap.get(goods.getGoodsId());
}
if (specialActualGoodsNumber >= cartGoods.getQty()) {
numberMap.put(goods.getGoodsId(), specialActualGoodsNumber - cartGoods.getQty());
specialActualGoodsNumber = cartGoods.getQty();
Long goodsNowPrice = cartGoods.getOriginalPrice() - goodsDiscount.getDiscount() / goodsDiscount.getActualGoodsNumber();
// numberMap用于暂存当前商品行可享受限时特价折扣的商品数量
if ((specialActualGoodsNumber = numberMap.get(goods.getGoodsId())) == null) {
numberMap.put(goods.getGoodsId(), specialActualGoodsNumber=goodsDiscount.getActualGoodsNumber());
}
//若可享受数量>=当前商品行的商品数量
if (specialActualGoodsNumber - cartGoods.getQty() >= 0) {
cartGoods.setAmount(goodsNowPrice * cartGoods.getQty());
} else {
numberMap.put(goods.getGoodsId(), 0);
}
cartGoods.setAmount(goodsNowPrice * specialActualGoodsNumber + goods.getOriginalPrice() * (cartGoods.getQty() - specialActualGoodsNumber));
if (StringUtils.isEmpty(toastMsg) && specialActualGoodsNumber < goods.getGoodsQuantity()) {
// 存在限时特价折扣
toastMsg = "该商品限" + specialActualGoodsNumber + "份优惠 超出按照原价计算哦";
//总价=可享受数量*优惠后单价+(当前商品行的商品数量-可享受数量)*商品原价
cartGoods.setAmount(specialActualGoodsNumber > 0 ? specialActualGoodsNumber * goodsNowPrice + (cartGoods.getQty() - specialActualGoodsNumber) * cartGoods.getOriginalPrice()
: goods.getOriginalPrice() * cartGoods.getQty());
if (StringUtils.isEmpty(toastMsg)) {
toastMsg = "该商品限" + goodsDiscount.getActualGoodsNumber() + "份优惠 超出按照原价计算哦";
}
}
numberMap.put(goods.getGoodsId(), specialActualGoodsNumber - cartGoods.getQty());
}
if (StringUtils.isNotBlank(toastMsg)) {
shoppingCartGoodsResponseVo.setToastMsg(toastMsg);
......@@ -144,7 +122,7 @@ public class TimeSalePromotionService implements IPromotionService {
activityDiscountsDto.setActivityType(ActivityTypeEnum.TYPE_2.getCode());
activityDiscountsDto.setDiscountAmount(totalDiscountAmount.intValue());
cartGoods.getActivityDiscountsDtos().add(activityDiscountsDto);
cartGoods.setTotalDiscountAmount(cartGoods.getTotalDiscountAmount()+ totalDiscountAmount.intValue());
cartGoods.setTotalDiscountAmount(cartGoods.getTotalDiscountAmount() + totalDiscountAmount.intValue());
numberMap.put(cartGoods.getSkuId(), actualGoodsNumber - cartGoods.getQty());
} else {
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