Commit 85b64ab9 by huiyang.chen

满减和优化券优化分摊

parent 47abaae0
...@@ -23,5 +23,5 @@ public interface IPromotionService { ...@@ -23,5 +23,5 @@ public interface IPromotionService {
/** /**
* 优惠计算和均摊 * 优惠计算和均摊
*/ */
void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto); void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto, Boolean isApportion);
} }
...@@ -66,7 +66,7 @@ public class ActivityCalculationDiscountService { ...@@ -66,7 +66,7 @@ public class ActivityCalculationDiscountService {
private CustomerScoreService customerScoreService; private CustomerScoreService customerScoreService;
public ShoppingCartGoodsResponse updateDiscountApportion(OrderBeanRequest request, CouponPromotionDto couponPromotionDto) { public ShoppingCartGoodsResponse updateDiscountApportion(OrderBeanRequest request, CouponPromotionDto couponPromotionDto,Boolean isApportion) {
ShoppingCartGoodsResponse shoppingCartGoodsResponse = new ShoppingCartGoodsResponse(); ShoppingCartGoodsResponse shoppingCartGoodsResponse = new ShoppingCartGoodsResponse();
List<CalculationCouponDto> coupons = new ArrayList<>(); List<CalculationCouponDto> coupons = new ArrayList<>();
...@@ -87,17 +87,17 @@ public class ActivityCalculationDiscountService { ...@@ -87,17 +87,17 @@ public class ActivityCalculationDiscountService {
CalculationDiscountResultDto calculationDiscountResultDto = getCalculationResult(request, coupons); CalculationDiscountResultDto calculationDiscountResultDto = getCalculationResult(request, coupons);
// 默认计算 // 默认计算
defaultPromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto); defaultPromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto, isApportion);
// 套餐计算 // 套餐计算
setMealPromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto); setMealPromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto, isApportion);
// 优惠券计算 // 优惠券计算
couponPromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto); couponPromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto, isApportion);
// 满减 // 满减
fullPromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto); fullPromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto, isApportion);
// 限时特价 // 限时特价
timeSalePromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto); timeSalePromotionService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto, isApportion);
// 积分抵扣 // 积分抵扣
customerScoreService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto); customerScoreService.updateDiscountApportion(shoppingCartGoodsResponse, request, calculationDiscountResultDto, couponPromotionDto, activityQueryDto, isApportion);
return shoppingCartGoodsResponse; return shoppingCartGoodsResponse;
} }
......
...@@ -25,7 +25,7 @@ public class CouponPromotionService implements IPromotionService { ...@@ -25,7 +25,7 @@ public class CouponPromotionService implements IPromotionService {
@Autowired @Autowired
private CouponService couponService; private CouponService couponService;
@Override @Override
public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto) { public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto,Boolean isApportion) {
// 用户选择了查询优惠券信息 // 用户选择了查询优惠券信息
if (couponPromotionDto != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionDto.getFlg())) { if (couponPromotionDto != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionDto.getFlg())) {
// 是否存在商品券 // 是否存在商品券
......
...@@ -37,7 +37,7 @@ public class CustomerScoreService implements IPromotionService { ...@@ -37,7 +37,7 @@ public class CustomerScoreService implements IPromotionService {
private CustomScoreClient customScoreClient; private CustomScoreClient customScoreClient;
@Override @Override
public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto) { public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto,Boolean isApportion) {
if (request == null || request.getUseCustomerScore() == null || request.getUseCustomerScore() == null || request.getUseCustomerScore().equals(CustomerScoreConstant.NO_DISPLAY.getValue())) { if (request == null || request.getUseCustomerScore() == null || request.getUseCustomerScore() == null || request.getUseCustomerScore().equals(CustomerScoreConstant.NO_DISPLAY.getValue())) {
return; return;
} }
......
...@@ -33,7 +33,7 @@ import java.util.stream.Collectors; ...@@ -33,7 +33,7 @@ import java.util.stream.Collectors;
public class DefaultPromotionService implements IPromotionService { public class DefaultPromotionService implements IPromotionService {
@Override @Override
public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto) { public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto,Boolean isApportion) {
// 总原价 // 总原价
Long originalTotalAmount = 0L; Long originalTotalAmount = 0L;
// 总折扣 // 总折扣
...@@ -76,7 +76,7 @@ public class DefaultPromotionService implements IPromotionService { ...@@ -76,7 +76,7 @@ public class DefaultPromotionService implements IPromotionService {
if (Objects.equals(productBean.getProductType(), ProductTypeEnum.WEIGHT_PRODUCT.getCode())) { if (Objects.equals(productBean.getProductType(), ProductTypeEnum.WEIGHT_PRODUCT.getCode())) {
originalDiscountAmount = new BigDecimal(productBean.getPrice()+"").multiply(productBean.getWeight()).longValue() - productBean.getSettlementPrice(); originalDiscountAmount = new BigDecimal(productBean.getPrice()+"").multiply(productBean.getWeight()).longValue() - productBean.getSettlementPrice();
} }
cartGoodsDetailDtoList.add(PromotionAdapter.convertCartGoods2DetailGoods(productBean, originalDiscountAmount.intValue(), apportionGoodsList, duplicateGoodsMap)); cartGoodsDetailDtoList.add(PromotionAdapter.convertCartGoods2DetailGoods(productBean, originalDiscountAmount.intValue(), apportionGoodsList, duplicateGoodsMap,isApportion));
} }
} }
......
...@@ -382,7 +382,8 @@ public class EncircleOrderServiceImpl implements EncircleOrderService { ...@@ -382,7 +382,8 @@ public class EncircleOrderServiceImpl implements EncircleOrderService {
payIsArouseStatus = 0; payIsArouseStatus = 0;
OrderBeanRequest orderBeanRequest = orderAdapter.conventOrderBeanRequest(queryOrderByIdResponse.getData(), assortmentCustomerInfoVo,createReserveOrderVo); OrderBeanRequest orderBeanRequest = orderAdapter.conventOrderBeanRequest(queryOrderByIdResponse.getData(), assortmentCustomerInfoVo,createReserveOrderVo);
CouponPromotionDto couponPromotionDto = couponAdapter.getCouponPromotionDto(orderBeanRequest, createReserveOrderVo.getCouponCode(), createReserveOrderVo.getActivityCode(), CouponFlag.YES.getCode()); CouponPromotionDto couponPromotionDto = couponAdapter.getCouponPromotionDto(orderBeanRequest, createReserveOrderVo.getCouponCode(), createReserveOrderVo.getActivityCode(), CouponFlag.YES.getCode());
ShoppingCartGoodsResponse shoppingCartGoodsResponse = calculationDiscountService.updateDiscountApportion(orderBeanRequest, couponPromotionDto); //新增是否需要分摊计算优化金额,满减和优化券不进行优惠分摊
ShoppingCartGoodsResponse shoppingCartGoodsResponse = calculationDiscountService.updateDiscountApportion(orderBeanRequest, couponPromotionDto,false);
calculationDiscountService.updatePreviewOrderInfoVo(previewOrderInfoVo, shoppingCartGoodsResponse); calculationDiscountService.updatePreviewOrderInfoVo(previewOrderInfoVo, shoppingCartGoodsResponse);
} }
//是否唤起支付 //是否唤起支付
...@@ -445,7 +446,7 @@ public class EncircleOrderServiceImpl implements EncircleOrderService { ...@@ -445,7 +446,7 @@ public class EncircleOrderServiceImpl implements EncircleOrderService {
if (!prePayLock) { if (!prePayLock) {
OrderBeanRequest orderBeanRequest = orderAdapter.conventOrderBeanRequest(queryOrderByIdResponse.getData(), assortmentCustomerInfoVo,createReserveOrderVo); OrderBeanRequest orderBeanRequest = orderAdapter.conventOrderBeanRequest(queryOrderByIdResponse.getData(), assortmentCustomerInfoVo,createReserveOrderVo);
CouponPromotionDto couponPromotionDto = couponAdapter.getCouponPromotionDto(orderBeanRequest, createReserveOrderVo.getCouponCode(), createReserveOrderVo.getActivityCode(), CouponFlag.YES.getCode()); CouponPromotionDto couponPromotionDto = couponAdapter.getCouponPromotionDto(orderBeanRequest, createReserveOrderVo.getCouponCode(), createReserveOrderVo.getActivityCode(), CouponFlag.YES.getCode());
shoppingCartGoodsResponse = calculationDiscountService.updateDiscountApportion(orderBeanRequest, couponPromotionDto); shoppingCartGoodsResponse = calculationDiscountService.updateDiscountApportion(orderBeanRequest, couponPromotionDto,true);
} }
boolean isUpdateAccounts = CollectionUtils.isEmpty(queryOrderByIdResponse.getData().getAccountList()); boolean isUpdateAccounts = CollectionUtils.isEmpty(queryOrderByIdResponse.getData().getAccountList());
AssortmentSdkUpdateOrderProductInfoRequest request = orderAdapter.conventShoppingPromotionInfo(shoppingCartGoodsResponse, queryOrderByIdResponse, assortmentCustomerInfoVo, isUpdateAccounts,createReserveOrderVo); AssortmentSdkUpdateOrderProductInfoRequest request = orderAdapter.conventShoppingPromotionInfo(shoppingCartGoodsResponse, queryOrderByIdResponse, assortmentCustomerInfoVo, isUpdateAccounts,createReserveOrderVo);
......
...@@ -27,7 +27,7 @@ public class FullPromotionService implements IPromotionService { ...@@ -27,7 +27,7 @@ public class FullPromotionService implements IPromotionService {
private ActivityService activityService; private ActivityService activityService;
@Override @Override
public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto) { public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto,Boolean isApportion) {
this.buildActivityTip(shoppingCartGoodsResponse, calculationDiscountResult, activityQueryDto); this.buildActivityTip(shoppingCartGoodsResponse, calculationDiscountResult, activityQueryDto);
List<CalculationGoodsActivityDto> discountList = (calculationDiscountResult == null || calculationDiscountResult.getDiscounts() == null) ? new ArrayList<>() : calculationDiscountResult.getDiscounts(); List<CalculationGoodsActivityDto> discountList = (calculationDiscountResult == null || calculationDiscountResult.getDiscounts() == null) ? new ArrayList<>() : calculationDiscountResult.getDiscounts();
......
...@@ -34,7 +34,7 @@ import java.util.stream.Collectors; ...@@ -34,7 +34,7 @@ import java.util.stream.Collectors;
@Service @Service
public class SetMealPromotionService implements IPromotionService { public class SetMealPromotionService implements IPromotionService {
@Override @Override
public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto) { public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto ,Boolean isApportion) {
// 套餐商品 // 套餐商品
List<OrderBeanRequest.ProductBean> setMealProducts = request.getProductList().stream() List<OrderBeanRequest.ProductBean> setMealProducts = request.getProductList().stream()
.filter(productBean -> { .filter(productBean -> {
...@@ -69,7 +69,7 @@ public class SetMealPromotionService implements IPromotionService { ...@@ -69,7 +69,7 @@ public class SetMealPromotionService implements IPromotionService {
Long productGroupDiscountAmount = productBean.getComboProduct().stream().filter(t -> !t.getIsFixedProduct()).mapToLong(t -> t.getPrice() * t.getNumber() - t.getSettlementPrice()).sum(); Long productGroupDiscountAmount = productBean.getComboProduct().stream().filter(t -> !t.getIsFixedProduct()).mapToLong(t -> t.getPrice() * t.getNumber() - t.getSettlementPrice()).sum();
totalDiscountAmount += discountAmount - productGroupDiscountAmount; totalDiscountAmount += discountAmount - productGroupDiscountAmount;
// 设置套餐主商品 // 设置套餐主商品
ShoppingCartGoodsResponse.CartGoodsDetailDto cartGoodsDetailDto = PromotionAdapter.convertCartGoods2DetailGoods(productBean, discountAmount.intValue(), apportionGoodsList, duplicateGoodsMap); ShoppingCartGoodsResponse.CartGoodsDetailDto cartGoodsDetailDto = PromotionAdapter.convertCartGoods2DetailGoods(productBean, discountAmount.intValue(), apportionGoodsList, duplicateGoodsMap,true);
cartGoodsDetailDto.getActivityDiscountsDtos().add(getActivityDiscountsDto(discountAmount.intValue() - productGroupDiscountAmount.intValue())); cartGoodsDetailDto.getActivityDiscountsDtos().add(getActivityDiscountsDto(discountAmount.intValue() - productGroupDiscountAmount.intValue()));
long apportionAmount = cartGoodsDetailDto.getTotalDiscountAmount() - discountAmount; long apportionAmount = cartGoodsDetailDto.getTotalDiscountAmount() - discountAmount;
Long comboFixedProductTotalDiscountAmount = discountAmount - productGroupDiscountAmount + apportionAmount; Long comboFixedProductTotalDiscountAmount = discountAmount - productGroupDiscountAmount + apportionAmount;
......
...@@ -35,7 +35,7 @@ import java.util.stream.Collectors; ...@@ -35,7 +35,7 @@ import java.util.stream.Collectors;
public class TimeSalePromotionService implements IPromotionService { public class TimeSalePromotionService implements IPromotionService {
@Override @Override
public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto) { public void updateDiscountApportion(ShoppingCartGoodsResponse shoppingCartGoodsResponse, OrderBeanRequest request, CalculationDiscountResultDto calculationDiscountResult, CouponPromotionDto couponPromotionDto, ActivityQueryDto activityQueryDto,Boolean isApportion) {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts()) if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts())
|| CollectionUtils.isEmpty(shoppingCartGoodsResponse.getProducts()) || CollectionUtils.isEmpty(shoppingCartGoodsResponse.getProducts())
|| !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()))) { || !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()))) {
...@@ -58,7 +58,10 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -58,7 +58,10 @@ public class TimeSalePromotionService implements IPromotionService {
if ((goods = goodsMap.get(product.getProductId())) == null) { if ((goods = goodsMap.get(product.getProductId())) == null) {
continue; continue;
} }
CalculationGoodsActivityDto goodsDiscount = getGoodsDiscount(goods.getDiscounts(), ActivityTypeEnum.TYPE_2); CalculationGoodsActivityDto goodsDiscount =null;
if (isApportion){
goodsDiscount = getGoodsDiscount(goods.getDiscounts(), ActivityTypeEnum.TYPE_2);
}
if (goodsDiscount == null) { if (goodsDiscount == null) {
continue; continue;
} }
......
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