Commit e44d0ca0 by huiyang.chen

fix 买三赠一开发2

parent 5e0e5b74
...@@ -6,6 +6,7 @@ public enum SaveCouponType { ...@@ -6,6 +6,7 @@ public enum SaveCouponType {
FREIGHT_COUPON(2, "运费券"), FREIGHT_COUPON(2, "运费券"),
MON_COUPON(3, "随单购月卡"), MON_COUPON(3, "随单购月卡"),
THREE_TO_ONE_COUPON(4, "买三赠一券"), THREE_TO_ONE_COUPON(4, "买三赠一券"),
THREE_TO_ONE_ACTIVITY_CODE(5, "买三赠一券虚拟活动号"),
; ;
private Integer code; private Integer code;
......
...@@ -191,11 +191,9 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -191,11 +191,9 @@ public class ShoppingCartMCoffeeServiceImpl {
setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS); setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS);
} }
if(StringUtils.isNotEmpty(threeToOneCouponCode)) { if(StringUtils.isNotEmpty(threeToOneCouponCode) && StringUtils.isNotEmpty(threeToOneActivityCode)) {
if (StringUtils.isNotEmpty(threeToOneActivityCode)){
threeToOneCouponCode = threeToOneCouponCode +"," + threeToOneActivityCode;
}
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, threeToOneCouponCode, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_COUPON.getCode()); assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, threeToOneCouponCode, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_COUPON.getCode());
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, threeToOneActivityCode, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_ACTIVITY_CODE.getCode());
} }
// 购物车数据更新(保存商品原价) // 购物车数据更新(保存商品原价)
...@@ -321,7 +319,7 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -321,7 +319,7 @@ public class ShoppingCartMCoffeeServiceImpl {
String freightCouponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode()); String freightCouponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode());
// 当couponCode不为空时,需参与价格计算 // 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,freightCouponCode,null,null,null); List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,freightCouponCode,null,null,null, null);
// 促销活动的优惠金额计算 // 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, couponCode, calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, couponCode,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null); cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null);
...@@ -395,16 +393,16 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -395,16 +393,16 @@ public class ShoppingCartMCoffeeServiceImpl {
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, freightCouponCode, shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode()); assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, freightCouponCode, shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode());
} }
if(StringUtils.isEmpty(buyThreeGiveOneCouponCode)) { if(StringUtils.isEmpty(buyThreeGiveOneCouponCode) && StringUtils.isEmpty(buyThreeGiveOneActivityCode)) {
buyThreeGiveOneCouponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_COUPON.getCode()); buyThreeGiveOneCouponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_COUPON.getCode());
buyThreeGiveOneActivityCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_ACTIVITY_CODE.getCode());
} else { } else {
if("remove".equals(buyThreeGiveOneCouponCode)) { if("remove".equals(buyThreeGiveOneCouponCode)) {
buyThreeGiveOneCouponCode = ""; buyThreeGiveOneCouponCode = "";
} buyThreeGiveOneActivityCode = "";
if (StringUtils.isNotEmpty(buyThreeGiveOneCouponCode) && StringUtils.isNotEmpty(buyThreeGiveOneActivityCode)){
buyThreeGiveOneCouponCode = buyThreeGiveOneCouponCode +"," + buyThreeGiveOneActivityCode;
} }
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, buyThreeGiveOneCouponCode, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_COUPON.getCode()); assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, buyThreeGiveOneCouponCode, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_COUPON.getCode());
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, buyThreeGiveOneActivityCode, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_ACTIVITY_CODE.getCode());
} }
if (CollectionUtils.isEmpty(couponTypeList)){ if (CollectionUtils.isEmpty(couponTypeList)){
...@@ -436,55 +434,12 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -436,55 +434,12 @@ public class ShoppingCartMCoffeeServiceImpl {
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, code, shoppingCartBaseService, SaveCouponType.MON_COUPON.getCode()); assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, code, shoppingCartBaseService, SaveCouponType.MON_COUPON.getCode());
} }
// 当couponCode不为空时,需参与价格计算 // 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,shoppingCartInfoRequestVo.getFreightCouponCode(), code, buyThreeGiveOneCouponCode, shoppingCartInfoRequestVo.getCouponTypeList()); List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,shoppingCartInfoRequestVo.getFreightCouponCode(), code, buyThreeGiveOneCouponCode , buyThreeGiveOneActivityCode, shoppingCartInfoRequestVo.getCouponTypeList());
// 促销活动的优惠金额计算 // 促销活动的优惠金额计算
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult = calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult = calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo, payCardPrice); cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo, payCardPrice);
if (CollectionUtils.isNotEmpty(calculationDiscountResult.getDiscounts())) {
// 对促销返回的数据进行拆分
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discounts = calculationDiscountResult.getDiscounts().stream().filter(discount -> ActivityTypeEnum.TYPE_35.getCode().equals(discount.getType())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(discounts) ){
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods();
if (CollectionUtils.isNotEmpty(goodsList)) {
Map<String, CartGoods> goodsCartMap = cartGoodsList.parallelStream().collect(Collectors.toMap(CartGoods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
List<CartGoods> cartGoodsListNew =new ArrayList<>();
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods: goodsList) {
CartGoods cartGoods = goodsCartMap.get(goods.getCartGoodsUid());
if (cartGoods == null ) continue;
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> collect = goods.getDiscounts().stream().filter(s ->
ActivityTypeEnum.TYPE_35.getCode().equals(s.getType())).collect(Collectors.toList());
int sum = collect.stream().mapToInt(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActualGoodsNumber).sum();
if (CollectionUtils.isNotEmpty(collect) ){
if (sum > 0 && sum < goods.getGoodsQuantity()) {
Integer qty = cartGoods.getQty();
//需要拆分
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount: collect) {
CartGoods cartGoods1 =new CartGoods();
BeanUtils.copyProperties(cartGoods,cartGoods1);
cartGoods1.setQty(goodsDiscount.getActualGoodsNumber());
cartGoodsListNew.add(cartGoods1);
qty = qty - goodsDiscount.getActualGoodsNumber();
}
cartGoods.setQty(qty);
cartGoodsListNew.add(cartGoods);
}
}else {
cartGoodsListNew.add(cartGoods);
}
}
// 重新存储最新购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsListNew, sessionId, "", shoppingCartBaseService);
}
}
}
//设置更新响应信息 //设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo); setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
...@@ -492,11 +447,12 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -492,11 +447,12 @@ public class ShoppingCartMCoffeeServiceImpl {
shoppingCartGoodsResponseVo.setCouponCode(""); shoppingCartGoodsResponseVo.setCouponCode("");
shoppingCartGoodsResponseVo.setFreightCouponCode(""); shoppingCartGoodsResponseVo.setFreightCouponCode("");
shoppingCartGoodsResponseVo.setBuyThreeGiveOneActivityCode(buyThreeGiveOneActivityCode); shoppingCartGoodsResponseVo.setBuyThreeGiveOneActivityCode(buyThreeGiveOneActivityCode);
shoppingCartGoodsResponseVo.setBuyThreeGiveOneCouponCode(buyThreeGiveOneCouponCode); shoppingCartGoodsResponseVo.setBuyThreeGiveOneCouponCode("");
shoppingCartGoodsResponseVo.setCouponTypeList(couponTypeList); shoppingCartGoodsResponseVo.setCouponTypeList(couponTypeList);
if(StringUtils.isNotEmpty(couponCode) || StringUtils.isNotEmpty(freightCouponCode)) { if(StringUtils.isNotEmpty(couponCode) || StringUtils.isNotEmpty(freightCouponCode) || StringUtils.isNotEmpty(buyThreeGiveOneCouponCode)) {
String finalCouponCode = couponCode; String finalCouponCode = couponCode;
String finalFreightCouponCode = freightCouponCode; String finalFreightCouponCode = freightCouponCode;
String finalBuyThreeGiveOneCouponCode = buyThreeGiveOneCouponCode;
if(null != calculationDiscountResult && CollectionUtils.isNotEmpty(calculationDiscountResult.getDiscounts())) { if(null != calculationDiscountResult && CollectionUtils.isNotEmpty(calculationDiscountResult.getDiscounts())) {
calculationDiscountResult.getDiscounts().stream().forEach(o -> { calculationDiscountResult.getDiscounts().stream().forEach(o -> {
if(o.getActivityCode().equals(finalCouponCode)) { if(o.getActivityCode().equals(finalCouponCode)) {
...@@ -505,6 +461,9 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -505,6 +461,9 @@ public class ShoppingCartMCoffeeServiceImpl {
if(o.getActivityCode().equals(finalFreightCouponCode)) { if(o.getActivityCode().equals(finalFreightCouponCode)) {
shoppingCartGoodsResponseVo.setFreightCouponCode(finalFreightCouponCode); shoppingCartGoodsResponseVo.setFreightCouponCode(finalFreightCouponCode);
} }
if(o.getActivityCode().equals(finalBuyThreeGiveOneCouponCode)) {
shoppingCartGoodsResponseVo.setBuyThreeGiveOneCouponCode(finalBuyThreeGiveOneCouponCode);
}
}); });
} }
} }
...@@ -514,6 +473,10 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -514,6 +473,10 @@ public class ShoppingCartMCoffeeServiceImpl {
if(ObjectUtils.notEqual(shoppingCartGoodsResponseVo.getFreightCouponCode(), freightCouponCode)) { if(ObjectUtils.notEqual(shoppingCartGoodsResponseVo.getFreightCouponCode(), freightCouponCode)) {
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, shoppingCartGoodsResponseVo.getFreightCouponCode(), shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode()); assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, shoppingCartGoodsResponseVo.getFreightCouponCode(), shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode());
} }
if(ObjectUtils.notEqual(shoppingCartGoodsResponseVo.getBuyThreeGiveOneCouponCode(), buyThreeGiveOneCouponCode)) {
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, "", shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_COUPON.getCode());
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, "", shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_ACTIVITY_CODE.getCode());
}
return ResponseUtil.success(shoppingCartGoodsResponseVo); return ResponseUtil.success(shoppingCartGoodsResponseVo);
} }
...@@ -579,7 +542,7 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -579,7 +542,7 @@ public class ShoppingCartMCoffeeServiceImpl {
payCardPrice = Long.valueOf(payCardFee); payCardPrice = Long.valueOf(payCardFee);
} }
// 当couponCode不为空时,需参与价格计算 // 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(null, null, cartGoodsList,null,buyMonthlyCard,null,null); List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(null, null, cartGoodsList,null,buyMonthlyCard,null,null, null);
// 促销活动的优惠金额计算 // 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(requestVo.getPartnerId(), requestVo.getStoreId(), requestVo.getUserId(), requestVo.getAppId(), requestVo.getOrderType(), assortmentCustomerInfoVo.isMemberPaid(), requestVo.getMenuType(), requestVo.getReceiveId(), null, calculationService.updateShoppingCartGoodsDiscount(requestVo.getPartnerId(), requestVo.getStoreId(), requestVo.getUserId(), requestVo.getAppId(), requestVo.getOrderType(), assortmentCustomerInfoVo.isMemberPaid(), requestVo.getMenuType(), requestVo.getReceiveId(), null,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,payCardPrice); cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,payCardPrice);
...@@ -743,7 +706,7 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -743,7 +706,7 @@ public class ShoppingCartMCoffeeServiceImpl {
} }
// 当couponCode不为空时,需参与价格计算 // 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,shoppingCartInfoRequestVo.getFreightCouponCode(),code,null,null); List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,shoppingCartInfoRequestVo.getFreightCouponCode(),code,null,null,null);
//加价购商品 //加价购商品
List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList = shoppingCartInfoRequestVo.getSendGoods(); List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList = shoppingCartInfoRequestVo.getSendGoods();
...@@ -814,7 +777,7 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -814,7 +777,7 @@ public class ShoppingCartMCoffeeServiceImpl {
//清空商品券商品 //清空商品券商品
clearCartCouponGoods(partnerId, toStoreId, userId, sessionId, cartGoodsList); clearCartCouponGoods(partnerId, toStoreId, userId, sessionId, cartGoodsList);
// 当couponCode不为空时,需参与价格计算 // 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,null,null,null,null); List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,null,null,null,null,null);
// 促销活动的优惠金额计算 // 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, toStoreId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null, calculationService.updateShoppingCartGoodsDiscount(partnerId, toStoreId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
...@@ -831,7 +794,7 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -831,7 +794,7 @@ public class ShoppingCartMCoffeeServiceImpl {
//清空商品券商品 //清空商品券商品
clearCartCouponGoods(partnerId, toStoreId, userId, sessionId, cartGoodsList); clearCartCouponGoods(partnerId, toStoreId, userId, sessionId, cartGoodsList);
// 当couponCode不为空时,需参与价格计算 // 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,null,null,null,null); List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,null,null,null, null,null);
// 促销活动的优惠金额计算 // 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, toStoreId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null, calculationService.updateShoppingCartGoodsDiscount(partnerId, toStoreId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
...@@ -1519,7 +1482,7 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -1519,7 +1482,7 @@ public class ShoppingCartMCoffeeServiceImpl {
} }
private List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> getCoupon(String couponCode, String activityCode, List<CartGoods> cartGoodsList,String freightCouponCode,String buyMonthlyCard, private List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> getCoupon(String couponCode, String activityCode, List<CartGoods> cartGoodsList,String freightCouponCode,String buyMonthlyCard,
String threeToOneCouponCode , List<CouponTypeVo> couponTypeList) { String threeToOneCouponCode, String buyThreeGiveOneActivityCode, List<CouponTypeVo> couponTypeList) {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>(); List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
if (StringUtils.isNotEmpty(couponCode)) { if (StringUtils.isNotEmpty(couponCode)) {
...@@ -1541,10 +1504,8 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -1541,10 +1504,8 @@ public class ShoppingCartMCoffeeServiceImpl {
} }
if (StringUtils.isNotEmpty(threeToOneCouponCode)) { if (StringUtils.isNotEmpty(threeToOneCouponCode)) {
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon coupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon(); ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon coupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
List<String> split = Arrays.asList(threeToOneCouponCode.split(",")); coupon.setCode(threeToOneCouponCode);
coupon.setCode(split.get(0)); coupon.setActivityCode(buyThreeGiveOneActivityCode);
if (split.size() > 1)
coupon.setActivityCode(split.get(1));
coupons.add(coupon); coupons.add(coupon);
} }
if (CollectionUtils.isNotEmpty(couponTypeList)) { if (CollectionUtils.isNotEmpty(couponTypeList)) {
...@@ -1791,7 +1752,7 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -1791,7 +1752,7 @@ public class ShoppingCartMCoffeeServiceImpl {
} }
} }
// 当couponCode不为空时,需参与价格计算 // 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,null,null,null ,null); List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,null,null,null, null,null);
// 促销活动的优惠金额计算 // 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null, calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
......
...@@ -114,6 +114,8 @@ public class CalculationServiceImpl { ...@@ -114,6 +114,8 @@ public class CalculationServiceImpl {
//加料 //加料
materialCalculation.updateShoppingCartGoodsApportion(calculationDiscount,cartGoodsList); materialCalculation.updateShoppingCartGoodsApportion(calculationDiscount,cartGoodsList);
//买三赠一券
couponDiscountCalculation.updateBuyThreeToOneShoppingCartGoodsDiscount(calculationDiscount,cartGoodsList,shoppingCartGoodsResponseVo);
return calculationDiscount; return calculationDiscount;
} }
......
...@@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j;
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.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -78,8 +79,7 @@ public class CouponDiscountCalculation { ...@@ -78,8 +79,7 @@ public class CouponDiscountCalculation {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts()) if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts())
|| !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> (ActivityTypeEnum.TYPE_3.getCode().equals(discount.getType()) || !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> (ActivityTypeEnum.TYPE_3.getCode().equals(discount.getType())
||(ActivityTypeEnum.TYPE_31.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_32.getCode().equals(discount.getType())) ||(ActivityTypeEnum.TYPE_31.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_32.getCode().equals(discount.getType())) ))) {
|| (ActivityTypeEnum.TYPE_35.getCode().equals(discount.getType())) ))) {
return; return;
} }
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods(); List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods();
...@@ -93,7 +93,7 @@ public class CouponDiscountCalculation { ...@@ -93,7 +93,7 @@ public class CouponDiscountCalculation {
return; return;
} }
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> couponDiscounts = discounts.stream().filter(discount -> (ActivityTypeEnum.TYPE_3.getCode().equals(discount.getType()) List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> couponDiscounts = discounts.stream().filter(discount -> (ActivityTypeEnum.TYPE_3.getCode().equals(discount.getType())
|| (ActivityTypeEnum.TYPE_31.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_32.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_35.getCode().equals(discount.getType())))).collect(Collectors.toList()); || (ActivityTypeEnum.TYPE_31.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_32.getCode().equals(discount.getType()) ))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(couponDiscounts)) { if (CollectionUtils.isEmpty(couponDiscounts)) {
return; return;
} }
...@@ -607,4 +607,60 @@ public class CouponDiscountCalculation { ...@@ -607,4 +607,60 @@ public class CouponDiscountCalculation {
return couponPromotionVO; return couponPromotionVO;
} }
/**
* 买三赠一券
* @param calculationDiscount
* @param cartGoodsList
* @param shoppingCartGoodsResponseVo
*/
public void updateBuyThreeToOneShoppingCartGoodsDiscount(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscount, List<CartGoods> cartGoodsList,
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
List<CartGoods> cartGoodsListNew =new ArrayList<>();
if (CollectionUtils.isNotEmpty(calculationDiscount.getDiscounts())) {
// 对促销返回的数据进行拆分
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discounts = calculationDiscount.getDiscounts().stream().filter(discount -> ActivityTypeEnum.TYPE_35.getCode().equals(discount.getType())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(discounts) ){
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscount.getGoods();
if (CollectionUtils.isNotEmpty(goodsList)) {
Map<String, CartGoods> goodsCartMap = cartGoodsList.parallelStream().collect(Collectors.toMap(CartGoods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods: goodsList) {
CartGoods cartGoods = goodsCartMap.get(goods.getCartGoodsUid());
if (cartGoods == null ) continue;
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> collect = goods.getDiscounts().stream().filter(s ->
ActivityTypeEnum.TYPE_35.getCode().equals(s.getType())).collect(Collectors.toList());
int sum = collect.stream().mapToInt(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActualGoodsNumber).sum();
if (CollectionUtils.isNotEmpty(collect) ){
if (sum > 0 && sum < goods.getGoodsQuantity()) {
Integer qty = cartGoods.getQty();
//需要拆分
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount: collect) {
CartGoods cartGoods1 =new CartGoods();
BeanUtils.copyProperties(cartGoods,cartGoods1);
cartGoods1.setQty(goodsDiscount.getActualGoodsNumber());
Long count = cartGoods.getOriginalPrice() * goodsDiscount.getActualGoodsNumber();
cartGoods1.setAmount(count - goodsDiscount.getDiscount());
cartGoods1.setCouponName(goodsDiscount.getActivityName());
cartGoods1.setOriginalAmount(count);
cartGoodsListNew.add(cartGoods1);
qty = qty - goodsDiscount.getActualGoodsNumber();
}
cartGoods.setQty(qty);
cartGoods.setCouponName("");
}
}
}
}
}
}
cartGoodsList.addAll(cartGoodsListNew);
//筛选数量不为0商品
cartGoodsList = cartGoodsList.stream().filter(cartGoods -> cartGoods.getQty() != 0).collect(Collectors.toList());
}
} }
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