Commit 01e01e0a by 张明警

Merge remote-tracking branch 'origin/master'

parents 9b72b44a 95a5989c
...@@ -153,12 +153,16 @@ public class ShoppingCartConvertAdapter { ...@@ -153,12 +153,16 @@ public class ShoppingCartConvertAdapter {
* *
* @param apportionGoodsList 促销均摊列表 * @param apportionGoodsList 促销均摊列表
* @param cartGoodsDetailDto 当前商品行 * @param cartGoodsDetailDto 当前商品行
* @param duplicateGoodsMap 当前商品行 此map是为了促销除不尽时,拆商品行所用,例如,3份折扣10元
* key为:goodsId;value以逗号分割:0为goodsId分组对应的数量,value为已计算的折扣金额
*
*/ */
private void setTotalDiscountAndSalePrice(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods> apportionGoodsList, ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto, Map<String, String> duplicateGoodsMap) { private void setTotalDiscountAndSalePrice(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods> apportionGoodsList, ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto, Map<String, String> duplicateGoodsMap) {
Long originalPrice = cartGoodsDetailDto.getOriginalPrice(); Long originalPrice = cartGoodsDetailDto.getOriginalPrice();
Long discountPrice = 0L; Long discountPrice = 0L;
int goodsTotalQty = apportionGoodsList.stream().mapToInt(apportionGoods -> apportionGoods.getGoodsQuantity()).sum(); int goodsTotalQty = apportionGoodsList.stream().mapToInt(apportionGoods -> apportionGoods.getGoodsQuantity()).sum();
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGoods : apportionGoodsList) { for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGoods : apportionGoodsList) {
//折扣=所有折扣和*百分比(当前行商品数量/购物车总商品数量)
discountPrice += apportionGoods.getApportionDetails().stream().filter(d -> ObjectUtils.notEqual(ActivityTypeEnum.TYPE_32.getCode(), d.getActivityType()) discountPrice += apportionGoods.getApportionDetails().stream().filter(d -> ObjectUtils.notEqual(ActivityTypeEnum.TYPE_32.getCode(), d.getActivityType())
&& ObjectUtils.notEqual(ActivityTypeEnum.TYPE_104.getCode(), d.getActivityType()) && ObjectUtils.notEqual(ActivityTypeEnum.TYPE_2.getCode(), d.getActivityType()) && ObjectUtils.notEqual(ActivityTypeEnum.TYPE_104.getCode(), d.getActivityType()) && ObjectUtils.notEqual(ActivityTypeEnum.TYPE_2.getCode(), d.getActivityType())
).mapToLong(t -> t.getActivityApportionAmount() * apportionGoods.getGoodsQuantity()).sum() * cartGoodsDetailDto.getQty() / goodsTotalQty; ).mapToLong(t -> t.getActivityApportionAmount() * apportionGoods.getGoodsQuantity()).sum() * cartGoodsDetailDto.getQty() / goodsTotalQty;
...@@ -166,17 +170,20 @@ public class ShoppingCartConvertAdapter { ...@@ -166,17 +170,20 @@ public class ShoppingCartConvertAdapter {
String currentGoodsIdMap = duplicateGoodsMap.get(cartGoodsDetailDto.getSkuId()); String currentGoodsIdMap = duplicateGoodsMap.get(cartGoodsDetailDto.getSkuId());
if (currentGoodsIdMap != null) { if (currentGoodsIdMap != null) {
String[] value = currentGoodsIdMap.split(","); String[] value = currentGoodsIdMap.split(",");
//不是最后一行商品,折扣为discountPrice
if (Integer.parseInt(value[0]) > 1) { if (Integer.parseInt(value[0]) > 1) {
int totalDiscountPrice = Integer.parseInt(value[1]) + discountPrice.intValue(); int totalDiscountPrice = Integer.parseInt(value[1]) + discountPrice.intValue();
int index = Integer.parseInt(value[0]) - 1; int index = Integer.parseInt(value[0]) - 1;
duplicateGoodsMap.put(cartGoodsDetailDto.getSkuId(), String.format("%s,%s", index, totalDiscountPrice)); duplicateGoodsMap.put(cartGoodsDetailDto.getSkuId(), String.format("%s,%s", index, totalDiscountPrice));
} else { } else {
//最后一行
Long totalDiscountAmount = 0L; Long totalDiscountAmount = 0L;
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGoods : apportionGoodsList) { for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGoods : apportionGoodsList) {
totalDiscountAmount += apportionGoods.getApportionDetails().stream().filter(d -> ObjectUtils.notEqual(ActivityTypeEnum.TYPE_32.getCode(), d.getActivityType()) totalDiscountAmount += apportionGoods.getApportionDetails().stream().filter(d -> ObjectUtils.notEqual(ActivityTypeEnum.TYPE_32.getCode(), d.getActivityType())
&& ObjectUtils.notEqual(ActivityTypeEnum.TYPE_104.getCode(), d.getActivityType()) && ObjectUtils.notEqual(ActivityTypeEnum.TYPE_2.getCode(), d.getActivityType()) && ObjectUtils.notEqual(ActivityTypeEnum.TYPE_104.getCode(), d.getActivityType()) && ObjectUtils.notEqual(ActivityTypeEnum.TYPE_2.getCode(), d.getActivityType())
).mapToLong(t -> t.getActivityApportionAmount() * apportionGoods.getGoodsQuantity()).sum(); ).mapToLong(t -> t.getActivityApportionAmount() * apportionGoods.getGoodsQuantity()).sum();
} }
//折扣为:总折扣金额-已折扣金额
discountPrice = totalDiscountAmount - Integer.parseInt(value[1]); discountPrice = totalDiscountAmount - Integer.parseInt(value[1]);
} }
} }
......
...@@ -532,7 +532,7 @@ public class CouponServiceImpl implements CouponService { ...@@ -532,7 +532,7 @@ public class CouponServiceImpl implements CouponService {
// 数量 // 数量
product.setQuantity(cartGood.getQty()); product.setQuantity(cartGood.getQty());
productList.add(product); productList.add(product);
totalAmount = totalAmount + cartGood.getOriginalPrice() * cartGood.getQty(); totalAmount = totalAmount +product.getAmount() * cartGood.getQty();
} }
return totalAmount; return totalAmount;
} }
......
...@@ -113,7 +113,7 @@ public class DefaultPromotionService implements IPromotionService { ...@@ -113,7 +113,7 @@ public class DefaultPromotionService implements IPromotionService {
shoppingCartGoodsDto.setActivityDiscountsDtos(activityDiscountsDtos); shoppingCartGoodsDto.setActivityDiscountsDtos(activityDiscountsDtos);
if (null != calculationDiscountResult && ((CollectionUtils.isNotEmpty(activityDiscountsDtos) || CollectionUtils.isNotEmpty(addMoneyDiscounts)))) { if (null != calculationDiscountResult) {
//处理加价购 //处理加价购
List<SubtractStockVO> stocks = filterSendGoodsStocks(calculationDiscountResult.getStocks(), shoppingCartInfoRequestVo, addMoneyDiscounts); List<SubtractStockVO> stocks = filterSendGoodsStocks(calculationDiscountResult.getStocks(), shoppingCartInfoRequestVo, addMoneyDiscounts);
if (CollectionUtils.isNotEmpty(stocks)) { if (CollectionUtils.isNotEmpty(stocks)) {
......
...@@ -86,7 +86,12 @@ public class SetMealServiceImpl implements IPromotionService { ...@@ -86,7 +86,12 @@ public class SetMealServiceImpl implements IPromotionService {
List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtos = shoppingCartGoodsDto.getProducts(); List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtos = shoppingCartGoodsDto.getProducts();
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods> apportionGoods = calculationDiscountResult == null ? new ArrayList<>() List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods> apportionGoods = calculationDiscountResult == null ? new ArrayList<>()
: calculationDiscountResult.getApportionGoods(); : calculationDiscountResult.getApportionGoods();
// key为:goodsId;value以逗号分割:0为goodsId分组对应的数量,value为已计算的折扣金额
//此map是为了促销除不尽时,拆商品行所用,例如,3份折扣10元
Map<String, String> duplicateGoodsMap = new HashMap<>();
shoppingCartGoodsResponseVo.getProducts().stream().filter(product->ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), product.getGoodsType())).collect(Collectors.groupingBy(CartGoods::getGoodsId, Collectors.counting())).forEach((goodsId, count) -> {
duplicateGoodsMap.put(goodsId,String.format("%s,0", count));
});
// 套餐优惠明细 // 套餐优惠明细
for (CartGoods cartGoods : shoppingCartGoodsResponseVo.getProducts()) { for (CartGoods cartGoods : shoppingCartGoodsResponseVo.getProducts()) {
if (ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), cartGoods.getGoodsType())) { if (ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), cartGoods.getGoodsType())) {
...@@ -97,7 +102,7 @@ public class SetMealServiceImpl implements IPromotionService { ...@@ -97,7 +102,7 @@ public class SetMealServiceImpl implements IPromotionService {
int productGroupDiscountAmount = cartGoods.getProductGroupList().stream().mapToInt(t -> t.getFinalPrice().intValue() * t.getQty()).sum(); int productGroupDiscountAmount = cartGoods.getProductGroupList().stream().mapToInt(t -> t.getFinalPrice().intValue() * t.getQty()).sum();
totalDiscountAmount += discountAmount - productGroupDiscountAmount * cartGoods.getQty(); totalDiscountAmount += discountAmount - productGroupDiscountAmount * cartGoods.getQty();
// 添加套餐父商品 // 添加套餐父商品
ShoppingCartGoodsDto.CartGoodsDetailDto parentCartGoods = shoppingCartConvertAdapter.convertCartGoods2DetailGoods(cartGoods, apportionGoods,new HashMap<>()); ShoppingCartGoodsDto.CartGoodsDetailDto parentCartGoods = shoppingCartConvertAdapter.convertCartGoods2DetailGoods(cartGoods, apportionGoods,duplicateGoodsMap);
parentCartGoods.setTotalDiscountAmount(parentCartGoods.getTotalDiscountAmount()+ cartGoods.getOriginalAmount().intValue() - cartGoods.getAmount().intValue()); parentCartGoods.setTotalDiscountAmount(parentCartGoods.getTotalDiscountAmount()+ cartGoods.getOriginalAmount().intValue() - cartGoods.getAmount().intValue());
parentCartGoods.getActivityDiscountsDtos().add(getActivityDiscountsDto(discountAmount - productGroupDiscountAmount * cartGoods.getQty())); parentCartGoods.getActivityDiscountsDtos().add(getActivityDiscountsDto(discountAmount - productGroupDiscountAmount * cartGoods.getQty()));
// 添加套餐固定商品&可选商品: 做均摊 // 添加套餐固定商品&可选商品: 做均摊
......
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