Commit b4af45e4 by huiyang.chen

Merge branch '2020/11/3-买三赠一-huiyang' into qa

# Conflicts:
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/ShoppingCartMCoffeeServiceImpl.java
parents 0b31edfa e8ee51d6
......@@ -25,6 +25,10 @@ public class RedisKeyConstant {
/**
* 用户购物车在redis的key前缀
*/
public final static String SAAS_SHOPPINGCART_COUPON_KEY_PREFIX_TYPE = "saas:user:info:cart:coupon:type:";
/**
* 用户购物车在redis的key前缀
*/
public final static String SAAS_USER_INFO_CART_CARTADDPRODUCT = "saas:user:info:cart:cartAddProduct:goods:";
/**
* 用户购物车总价在redis的key前缀
......
......@@ -41,4 +41,9 @@ public class CartParamDto {
private MealClearOperationEnum operationType;
private Integer couponType;
/**
* 各类券信息
*/
private List<CouponTypeVo> couponTypeList;
}
package com.freemud.sdk.api.assortment.shoppingcart.domain;
import lombok.Data;
@Data
public class CouponTypeVo {
/**
* 券类型 1:买三赠一券
*/
private Integer type;
/**
* 券code
*/
private String code;
}
......@@ -5,6 +5,8 @@ public enum SaveCouponType {
COUPON(1, "代金券"),
FREIGHT_COUPON(2, "运费券"),
MON_COUPON(3, "随单购月卡"),
THREE_TO_ONE_COUPON(4, "买三赠一券"),
THREE_TO_ONE_ACTIVITY_CODE(5, "买三赠一券虚拟活动号"),
;
private Integer code;
......
......@@ -120,6 +120,26 @@ public interface ShoppingCartBaseService {
}
/**
*
* @param cartParamDto
* @param trackingNo
* @return
*/
default BaseResponse<List<CouponTypeVo>> setTypeCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
return null;
}
/**
*
* @param cartParamDto
* @param trackingNo
* @return
*/
default BaseResponse<List<CouponTypeVo>> getTypeCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
return null;
}
/**
* 清除麦咖啡购物车商品行信息
*
* @param cartParamDto
......
......@@ -3,41 +3,23 @@ package com.freemud.sdk.api.assortment.shoppingcart.service.impl;
import ch.qos.logback.classic.Level;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.redis.RedisCache;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.couponcenter.enums.CouponTypeEnum;
import com.freemud.application.sdk.api.couponcenter.online.domain.*;
import com.freemud.application.sdk.api.couponcenter.online.request.ActiveBatchQueryRequest;
import com.freemud.application.sdk.api.couponcenter.online.request.CouponDetailRequest;
import com.freemud.application.sdk.api.couponcenter.online.request.PartnerRequest;
import com.freemud.application.sdk.api.couponcenter.online.response.CouponDetailResponse;
import com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService;
import com.freemud.application.sdk.api.couponcenter.online.service.OnlineCouponSdkService;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.productcenter.constant.ResponseConstant;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.application.sdk.api.productcenter.domain.ProductInfosDTO;
import com.freemud.application.sdk.api.productcenter.request.menu.GetMenuCategoryByIdsRequest;
import com.freemud.application.sdk.api.productcenter.request.product.GetProductRequest;
import com.freemud.application.sdk.api.productcenter.response.menu.GetMenuCategoryByIdsResponse;
import com.freemud.application.sdk.api.productcenter.response.menu.GetMenuCategoryInfoResponse;
import com.freemud.application.sdk.api.productcenter.response.product.GetProductInfosResponse;
import com.freemud.application.sdk.api.productcenter.service.MenuService;
import com.freemud.application.sdk.api.productcenter.service.ProductService;
import com.freemud.sdk.api.assortment.shoppingcart.adapter.ShoppingCartAdapter;
import com.freemud.sdk.api.assortment.shoppingcart.constant.*;
import com.freemud.sdk.api.assortment.shoppingcart.domain.*;
import com.freemud.sdk.api.assortment.shoppingcart.enums.SaveCouponType;
import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.request.GetProductInfoRequest;
import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil;
import com.freemud.sdk.api.assortment.shoppingcart.util.DateTimeUtils;
import com.freemud.sdk.api.assortment.shoppingcart.util.PropertyConvertUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.BoundHashOperations;
......@@ -45,7 +27,6 @@ import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
......@@ -154,6 +135,34 @@ public class ShoppingCartBaseServiceImpl implements ShoppingCartBaseService {
}
@Override
public BaseResponse<List<CouponTypeVo>> setTypeCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartTypeCouponCodeKey(cartParamDto);
redisTemplate.delete(redisKey);
BoundValueOperations<String, List<CouponTypeVo>> operations = redisTemplate.boundValueOps(redisKey);
operations.set(cartParamDto.getCouponTypeList());
return CartResponseUtil.success();
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "setTypeCartCouponCode", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse<List<CouponTypeVo>> getTypeCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartTypeCouponCodeKey(cartParamDto);
BoundValueOperations<String, List<CouponTypeVo>> operations = redisTemplate.boundValueOps(redisKey);
List<CouponTypeVo> couponTypeVos = operations.get();
return CartResponseUtil.success(couponTypeVos);
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "getTypeCartCouponCode", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse<CartGoods> getCartGoods(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartGoodsKey(cartParamDto);
......@@ -341,6 +350,10 @@ public class ShoppingCartBaseServiceImpl implements ShoppingCartBaseService {
return RedisKeyConstant.SAAS_SHOPPINGCART_COUPON_KEY_PREFIX + cartParamDto.getPartnerId() + "_" + cartParamDto.getStoreId() + "_" + cartParamDto.getUserId() + "_" + cartParamDto.getCouponType();
}
private String getShoppingCartTypeCouponCodeKey(CartParamDto cartParamDto) {
return RedisKeyConstant.SAAS_SHOPPINGCART_COUPON_KEY_PREFIX_TYPE + cartParamDto.getPartnerId() + "_" + cartParamDto.getStoreId() + "_" + cartParamDto.getUserId();
}
/**
* 获取记录购物车价格的key
*
......
......@@ -83,6 +83,10 @@ public class ActivityCalculationDiscountRequestDto {
* 活动号
*/
private String activityCode;
/**
* 买卡活动Id
*/
private String payCardActivityId;
}
@Data
......
......@@ -169,13 +169,22 @@ public class ActivityCalculationDiscountResponseDto {
*/
private String tenderId;
/**
* 1-运费券 2-运费月卡券 3-月卡券 4-万能券 5-啡常月享卡 6-通用券
* 1-运费券 2-运费月卡券 3-月卡券 4-万能券 5-啡常月享卡 6-通用券 7买三赠一券
*/
private Integer extendType;
private SendPointDto sendPointVo;
private Date endTime;
/**
* 买卡现价
*/
private Integer cardAmount;
/**
* 买卡原价
*/
private Integer cardOriginalPrice;
}
@Data
......
......@@ -23,7 +23,7 @@ public class ActivityDiscountsDto {
private Integer activityType;
private String tenderId;
/**
* 1-运费券 2-运费月卡券 3-月卡券 4-万能券 5-啡常月享卡 6-通用券
* 1-运费券 2-运费月卡券 3-月卡券 4-万能券 5-啡常月享卡 6-通用券 7-买三赠一券
*/
private Integer extendType;
......
......@@ -133,6 +133,11 @@ public class ShoppingCartGoodsDto {
private SendPoint sendPoint;
/**
* 麦咖啡-买三赠一券价格
*/
private Long buyThreeGiveOneCouponFee;
@Data
public static class CartGoodsDetailDto {
/**
......
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class CouponTypeVo {
/**
* 券类型 1:买三赠一券
*/
private Integer type;
/**
* 券code
*/
private String code;
}
......@@ -141,4 +141,19 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
*/
private Long payCardFee;
/**
* 各类券信息
*/
private List<CouponTypeVo> couponTypeList;
/**
* 麦咖啡-买三赠一券活动号
*/
private String buyThreeGiveOneActivityCode;
/**
* 麦咖啡-买三赠一券默认券号
*/
private String buyThreeGiveOneCouponCode;
}
......@@ -97,6 +97,21 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
*/
private String monthlyCardCode;
/**
* 各类券信息
*/
private List<CouponTypeVo> couponTypeList;
/**
* 麦咖啡-买三赠一券活动号
*/
private String buyThreeGiveOneActivityCode;
/**
* 麦咖啡-买三赠一券默认券号
*/
private String buyThreeGiveOneCouponCode;
@Data
public final static class SendGoods {
/**
......
......@@ -37,6 +37,11 @@ public class UpdateShoppingCartGoodsQtyRequestVo extends BaseRequestVo {
@NotNull(message = "qty不能为空")
private Integer qty;
/**
* 更新前商品数量
*/
private Integer oldQty;
private String version;
/**
* 购物车版本号(围餐)
......
......@@ -32,6 +32,7 @@ public enum ActivityTypeEnum {
TYPE_3(3, "代金券"),
TYPE_31(31, "折扣券"),
TYPE_32(32, "商品券"),
TYPE_35(35, "买三赠一券"),
TYPE_5(5, "整单满金额折"),
TYPE_51(51, "每满金额折"),
TYPE_52(52, "阶梯满金额折"),
......
......@@ -3,11 +3,10 @@ package cn.freemud.service.impl;
import ch.qos.logback.classic.Level;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CouponTypeVo;
import cn.freemud.entities.vo.ShoppingCartGoodsBaseResponseVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
......@@ -20,10 +19,8 @@ import com.freemud.sdk.api.assortment.shoppingcart.request.GetProductInfoRequest
import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.naming.Name;
import java.util.ArrayList;
import java.util.List;
......@@ -149,6 +146,25 @@ public class AssortmentSdkService {
}
/**
* 获取用户选择的优惠券列表
*
* @param partnerId
* @param storeId
* @param useId
* @param shoppingCartService
* @return
*/
public List<CouponTypeVo> getTypeCartCouponCode(String partnerId, String storeId, String useId, ShoppingCartBaseService shoppingCartService) {
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = getCartParamDto(partnerId, storeId, useId);
BaseResponse<List<com.freemud.sdk.api.assortment.shoppingcart.domain.CouponTypeVo>> baseResponse = shoppingCartService.getTypeCartCouponCode(cartParamDto, LogThreadLocal.getTrackingNo());
if (baseResponse == null || !ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode()) || CollectionUtils.isEmpty(baseResponse.getResult())) {
return null;
}
return JSONArray.parseArray(JSONObject.toJSONString(baseResponse.getResult()), CouponTypeVo.class);
}
/**
* 调用聚合sdk设置缓存中购物车信息
*
* @param partnerId
......@@ -190,6 +206,21 @@ public class AssortmentSdkService {
}
/**
* 保存用户选择的优惠券列表
* @param partnerId
* @param storeId
* @param useId
* @param couponTypeList
* @param shoppingCartService
* @return
*/
public void setTypeCartCouponCode(String partnerId, String storeId, String useId, List<CouponTypeVo> couponTypeList , ShoppingCartBaseService shoppingCartService) {
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = getCartParamDto(partnerId, storeId, useId);
cartParamDto.setCouponTypeList(JSONArray.parseArray(JSONObject.toJSONString(couponTypeList), com.freemud.sdk.api.assortment.shoppingcart.domain.CouponTypeVo.class));
shoppingCartService.setTypeCartCouponCode(cartParamDto, LogThreadLocal.getTrackingNo());
}
/**
* 调用SDK校验购物车
*
* @param oldAllCartGoodsList
......
......@@ -59,12 +59,15 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.json.JSONString;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static cn.freemud.constant.ShoppingCartConstant.SHOPPING_CART_EMPTY_GOODS_LIST;
......@@ -146,6 +149,8 @@ public class ShoppingCartMCoffeeServiceImpl {
String receiveId = addShoppingCartGoodsRequestVo.getReceiveId();
Integer operationType = addShoppingCartGoodsRequestVo.getOperationType();
String couponCode = addShoppingCartGoodsRequestVo.getCouponCode();
String threeToOneActivityCode = addShoppingCartGoodsRequestVo.getBuyThreeGiveOneActivityCode();
String threeToOneCouponCode = addShoppingCartGoodsRequestVo.getBuyThreeGiveOneCouponCode();
String spuId2 = spuId;
MCoffeeProductIdsVo vo =new MCoffeeProductIdsVo();
......@@ -192,12 +197,17 @@ public class ShoppingCartMCoffeeServiceImpl {
setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS);
}
if(StringUtils.isNotEmpty(threeToOneCouponCode) && StringUtils.isNotEmpty(threeToOneActivityCode)) {
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());
}
// 购物车数据更新(保存商品原价)
List<CartGoods> newCartGoods = updateCartGoodsLegal(partnerId, storeId, orderType, tableNumber, menuType, userId, addCartGoods, shoppingCartGoodsResponseVo, oldCartGoodsList);
// 促销活动等价格计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
newCartGoods, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo, null);
newCartGoods, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo, null, null);
// 返回购物车数据
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, newCartGoods, null, ShoppingCartConstant.ADD_AND_UPDATE, null);
......@@ -294,6 +304,7 @@ public class ShoppingCartMCoffeeServiceImpl {
String menuType = updateShoppingCartGoodsQtyRequestVo.getMenuType();
Integer orderType = updateShoppingCartGoodsQtyRequestVo.getOrderType();
String receiveId = updateShoppingCartGoodsQtyRequestVo.getReceiveId();
Integer oldQty = updateShoppingCartGoodsQtyRequestVo.getOldQty();
// 先验证商品是否存在
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, null, null, shoppingCartBaseService);
......@@ -301,7 +312,11 @@ public class ShoppingCartMCoffeeServiceImpl {
for (CartGoods cartGoods_ : cartGoodsList) {
if (cartGoodsUid.equals(cartGoods_.getCartGoodsUid())) {
cartGoods = cartGoods_;
if (oldQty == null ) {
cartGoods_.setQty(qty);
}else {
cartGoods_.setQty(cartGoods_.getQty() - (oldQty - qty));
}
break;
}
}
......@@ -327,12 +342,15 @@ public class ShoppingCartMCoffeeServiceImpl {
String couponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.COUPON.getCode());
String freightCouponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode());
String buyThreeGiveOneCouponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_COUPON.getCode());
String buyThreeGiveOneActivityCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.THREE_TO_ONE_ACTIVITY_CODE.getCode());
List<CouponTypeVo> couponTypeList = assortmentSdkService.getTypeCartCouponCode(partnerId, storeId, userId, shoppingCartBaseService);
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,freightCouponCode, null);
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,freightCouponCode,null,buyThreeGiveOneCouponCode,buyThreeGiveOneActivityCode, couponTypeList);
// 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, couponCode,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null);
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null, null);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.ADD_AND_UPDATE, null);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
......@@ -364,12 +382,17 @@ public class ShoppingCartMCoffeeServiceImpl {
Integer orderType = shoppingCartInfoRequestVo.getOrderType();
String receiveId = shoppingCartInfoRequestVo.getReceiveId();
String buyMonthlyCard = shoppingCartInfoRequestVo.getBuyMonthlyCard();
String buyThreeGiveOneCouponCode = shoppingCartInfoRequestVo.getBuyThreeGiveOneCouponCode();
String buyThreeGiveOneActivityCode = shoppingCartInfoRequestVo.getBuyThreeGiveOneActivityCode();
List<CouponTypeVo> couponTypeList = shoppingCartInfoRequestVo.getCouponTypeList();
// 获取购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, sessionId, "", shoppingCartBaseService);
log.info("cartGoodsList: {}",JSONObject.toJSONString(cartGoodsList));
// 如果购物车商品不为空, 则check购物车中所有商品
if (CollectionUtils.isNotEmpty(cartGoodsList)) {
// 合并相同商品数据
//cartGoodsList = mergeProductList(cartGoodsList);
// check购物车中所有商品
cartGoodsList = checkCartGoods(partnerId, storeId, orderType, menuType, shoppingCartGoodsResponseVo, cartGoodsList);
// 重新存储最新购物车
......@@ -410,6 +433,24 @@ public class ShoppingCartMCoffeeServiceImpl {
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, freightCouponCode, shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode());
}
if(StringUtils.isEmpty(buyThreeGiveOneCouponCode) && StringUtils.isEmpty(buyThreeGiveOneActivityCode)) {
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 {
if("remove".equals(buyThreeGiveOneCouponCode)) {
buyThreeGiveOneCouponCode = "";
buyThreeGiveOneActivityCode = "";
}
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)){
couponTypeList = assortmentSdkService.getTypeCartCouponCode(partnerId, storeId, userId, shoppingCartBaseService);
}else {
assortmentSdkService.setTypeCartCouponCode(partnerId, storeId, userId, couponTypeList, shoppingCartBaseService);
}
//放到参数里
if(StringUtils.isNotEmpty(couponCode) ) {
shoppingCartInfoRequestVo.setCouponCode(couponCode);
......@@ -421,20 +462,47 @@ public class ShoppingCartMCoffeeServiceImpl {
}
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,shoppingCartInfoRequestVo.getFreightCouponCode(), code);
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,shoppingCartInfoRequestVo.getFreightCouponCode(), code, buyThreeGiveOneCouponCode , buyThreeGiveOneActivityCode, shoppingCartInfoRequestVo.getCouponTypeList());
List<String> eliminateGoodsList = new ArrayList<>();
// 促销活动的优惠金额计算
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, eliminateGoodsList);
// 剔除商品加料信息
if ( CollectionUtils.isNotEmpty(eliminateGoodsList) ) {
// 获取购物车商品
List<CartGoods> cartGoodsListOld = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, sessionId, "", shoppingCartBaseService);
// 如果购物车商品不为空, 则check购物车中所有商品
if (CollectionUtils.isNotEmpty(cartGoodsListOld)) {
Map<String, CartGoods> goodsMap = cartGoodsListOld.parallelStream().collect(Collectors.toMap(CartGoods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
for (String uid : eliminateGoodsList) {
CartGoods cartGoods = goodsMap.get(uid);
cartGoods.setSpecialExtra(null);
}
// check购物车中所有商品
cartGoodsList = checkCartGoods(partnerId, storeId, orderType, menuType, shoppingCartGoodsResponseVo, cartGoodsListOld);
// 重新存储最新购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsListOld, sessionId, "", shoppingCartBaseService);
}
// 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo, payCardPrice, null );
}
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
//先出参里的券设置为空,然后如果可用,再放到出参里
shoppingCartGoodsResponseVo.setCouponCode("");
shoppingCartGoodsResponseVo.setFreightCouponCode("");
if(StringUtils.isNotEmpty(couponCode) || StringUtils.isNotEmpty(freightCouponCode)) {
shoppingCartGoodsResponseVo.setBuyThreeGiveOneActivityCode(buyThreeGiveOneActivityCode);
shoppingCartGoodsResponseVo.setBuyThreeGiveOneCouponCode("");
shoppingCartGoodsResponseVo.setCouponTypeList(couponTypeList);
if(StringUtils.isNotEmpty(couponCode) || StringUtils.isNotEmpty(freightCouponCode) || StringUtils.isNotEmpty(buyThreeGiveOneCouponCode)) {
String finalCouponCode = couponCode;
String finalFreightCouponCode = freightCouponCode;
String finalBuyThreeGiveOneCouponCode = buyThreeGiveOneCouponCode;
if(null != calculationDiscountResult && CollectionUtils.isNotEmpty(calculationDiscountResult.getDiscounts())) {
calculationDiscountResult.getDiscounts().stream().forEach(o -> {
if(o.getActivityCode().equals(finalCouponCode)) {
......@@ -443,6 +511,9 @@ public class ShoppingCartMCoffeeServiceImpl {
if(o.getActivityCode().equals(finalFreightCouponCode)) {
shoppingCartGoodsResponseVo.setFreightCouponCode(finalFreightCouponCode);
}
if(o.getActivityCode().equals(finalBuyThreeGiveOneCouponCode)) {
shoppingCartGoodsResponseVo.setBuyThreeGiveOneCouponCode(finalBuyThreeGiveOneCouponCode);
}
});
}
}
......@@ -452,9 +523,57 @@ public class ShoppingCartMCoffeeServiceImpl {
if(ObjectUtils.notEqual(shoppingCartGoodsResponseVo.getFreightCouponCode(), freightCouponCode)) {
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);
}
/**
* 合并购物车相同商品,数量相加
* @param cartGoodsList
* @return
*/
public List<CartGoods> mergeProductList(List<CartGoods> cartGoodsList ){
if (CollectionUtils.isEmpty(cartGoodsList)){
return null;
}
List<CartGoods> list =new ArrayList<>();
Map<String, CartGoods> map =new HashMap<>();
for (CartGoods cartGoods : cartGoodsList) {
String skuId = cartGoods.getSkuId();
if (StringUtils.isNotEmpty(cartGoods.getCouponCode())){
map.put(skuId,cartGoods);
continue;
}
String cartGoodsUid = cartGoods.getCartGoodsUid();
if (map.containsKey(skuId)){
CartGoods cartGoods1 = map.get(skuId);
//判断是否有加料,加料是否相同
List<CartGoods.MaterialGoods> productMaterialList = cartGoods.getProductMaterialList();
List<CartGoods.MaterialGoods> productMaterialList1 = cartGoods1.getProductMaterialList();
if ((CollectionUtils.isNotEmpty(productMaterialList) && CollectionUtils.isNotEmpty(productMaterialList1) && productMaterialList.retainAll(productMaterialList1))
|| (CollectionUtils.isNotEmpty(productMaterialList) && CollectionUtils.isEmpty(productMaterialList1))
|| (CollectionUtils.isEmpty(productMaterialList) && CollectionUtils.isNotEmpty(productMaterialList1)) ) {
map.put(skuId + cartGoodsUid,cartGoods);
}else {
cartGoods1.setQty(cartGoods1.getQty() + cartGoods.getQty());
map.put(skuId,cartGoods1);
}
}else {
map.put(skuId,cartGoods);
}
}
for(String temp:map.keySet()){
list.add(map.get(temp));
}
return list;
}
/**
* 券码用-查询购物车最新信息,计算优惠
......@@ -473,10 +592,10 @@ public class ShoppingCartMCoffeeServiceImpl {
payCardPrice = Long.valueOf(payCardFee);
}
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(null, null, cartGoodsList,null, buyMonthlyCard);
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,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,payCardPrice);
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,payCardPrice, null);
String moneyCoupon = assortmentSdkService.getShoppingCartCoupon(requestVo.getPartnerId(),
requestVo.getStoreId(), requestVo.getUserId(), shoppingCartBaseService,SaveCouponType.COUPON.getCode());
String deliveryFeeCoupon = assortmentSdkService.getShoppingCartCoupon(requestVo.getPartnerId(),requestVo.getStoreId(),requestVo.getUserId(),shoppingCartBaseService,SaveCouponType.FREIGHT_COUPON.getCode());
......@@ -585,6 +704,9 @@ public class ShoppingCartMCoffeeServiceImpl {
Integer orderType = shoppingCartInfoRequestVo.getOrderType();
String receiveId = shoppingCartInfoRequestVo.getReceiveId();
String buyMonthlyCard = shoppingCartInfoRequestVo.getBuyMonthlyCard();
String buyThreeGiveOneCouponCode = shoppingCartInfoRequestVo.getBuyThreeGiveOneCouponCode();
String buyThreeGiveOneActivityCode = shoppingCartInfoRequestVo.getBuyThreeGiveOneActivityCode();
List<CouponTypeVo> couponTypeList = shoppingCartInfoRequestVo.getCouponTypeList();
// 获取购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, null, tableNumber, shoppingCartBaseService);
......@@ -636,7 +758,7 @@ public class ShoppingCartMCoffeeServiceImpl {
}
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,shoppingCartInfoRequestVo.getFreightCouponCode(),code);
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,shoppingCartInfoRequestVo.getFreightCouponCode(),code,buyThreeGiveOneCouponCode,buyThreeGiveOneActivityCode,couponTypeList);
//加价购商品
List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList = shoppingCartInfoRequestVo.getSendGoods();
......@@ -644,7 +766,7 @@ public class ShoppingCartMCoffeeServiceImpl {
// packgeAdditional(shoppingCartInfoRequestVo, premiumExchangeActivity);
// 促销活动的优惠金额计算
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscount = calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
cartGoodsList, coupons, sendGoodsList, shoppingCartGoodsResponseVo, payCardPrice);
cartGoodsList, coupons, sendGoodsList, shoppingCartGoodsResponseVo, payCardPrice, null);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
......@@ -708,11 +830,11 @@ public class ShoppingCartMCoffeeServiceImpl {
//清空商品券商品
clearCartCouponGoods(partnerId, toStoreId, userId, sessionId, cartGoodsList);
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,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,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null);
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null, null);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
shoppingCartGoodsResponseVo.setChanged(false);
......@@ -725,11 +847,11 @@ public class ShoppingCartMCoffeeServiceImpl {
//清空商品券商品
clearCartCouponGoods(partnerId, toStoreId, userId, sessionId, cartGoodsList);
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,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,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null);
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null, null);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
shoppingCartGoodsResponseVo.setChanged(false);
......@@ -798,7 +920,7 @@ public class ShoppingCartMCoffeeServiceImpl {
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, sessionId, "", shoppingCartBaseService);
// 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, null, null,
cartGoodsList, new ArrayList<>(), new ArrayList<>(), shoppingCartGoodsResponseVo,null);
cartGoodsList, new ArrayList<>(), new ArrayList<>(), shoppingCartGoodsResponseVo,null, null);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.ADD_AND_UPDATE, null);
//再来一单清除配送费
......@@ -1413,7 +1535,8 @@ public class ShoppingCartMCoffeeServiceImpl {
return checkCartRequest;
}
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, String buyThreeGiveOneActivityCode, List<CouponTypeVo> couponTypeList) {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
if (StringUtils.isNotEmpty(couponCode)) {
......@@ -1433,6 +1556,19 @@ public class ShoppingCartMCoffeeServiceImpl {
coupon.setActivityCode(activityCode);
coupons.add(coupon);
}
if (StringUtils.isNotEmpty(threeToOneCouponCode)) {
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon coupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(threeToOneCouponCode);
coupon.setPayCardActivityId(buyThreeGiveOneActivityCode);
coupons.add(coupon);
}
if (CollectionUtils.isNotEmpty(couponTypeList)) {
for (CouponTypeVo couponType: couponTypeList) {
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon coupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(couponType.getCode());
coupons.add(coupon);
}
}
//购物车商品券
if (CollectionUtils.isNotEmpty(cartGoodsList)) {
......@@ -1682,11 +1818,11 @@ public class ShoppingCartMCoffeeServiceImpl {
}
}
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,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,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo, null);
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null, null);
//设置更新响应信息
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo =new ShoppingCartInfoRequestVo();
BeanUtil.convertBean(cardAddVo,shoppingCartInfoRequestVo);
......
......@@ -91,7 +91,7 @@ public class CalculationServiceImpl {
boolean isMember, String menuType, String receiveId,String couponCode,
List<CartGoods> cartGoodsList, List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons,
List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
Long payCardFee) {
Long payCardFee, List<String> eliminateGoodsList) {
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, menuType);
......@@ -107,13 +107,15 @@ public class CalculationServiceImpl {
//优惠券
CouponPromotionVO couponPromotionVO = couponDiscountCalculation.getCouponPromotionVO(partnerId, storeId, userId, couponCode, orderType);
couponDiscountCalculation.updateShoppingCartGoodsDiscount(couponPromotionVO,calculationDiscount,cartGoodsList, shoppingCartGoodsResponseVo);
couponDiscountCalculation.updateShoppingCartGoodsDiscount(couponPromotionVO,calculationDiscount,cartGoodsList, shoppingCartGoodsResponseVo,eliminateGoodsList);
//套餐
setMealCalculation.updateShoppingCartGoodsDiscount(calculationDiscount,cartGoodsList,shoppingCartGoodsResponseVo);
//加料
materialCalculation.updateShoppingCartGoodsApportion(calculationDiscount,cartGoodsList);
//买三赠一券
couponDiscountCalculation.updateBuyThreeToOneShoppingCartGoodsDiscount(calculationDiscount, cartGoodsList, shoppingCartGoodsResponseVo);
return calculationDiscount;
}
......@@ -166,7 +168,8 @@ public class CalculationServiceImpl {
}
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo){
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult,
ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo){
List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtoList = CollectionUtils.isEmpty(shoppingCartGoodsDto.getProducts()) ? new ArrayList<>() : shoppingCartGoodsDto.getProducts();
List<ShareDiscountActivityDto> shareDiscountActivityDtoList = CollectionUtils.isEmpty(shoppingCartGoodsDto.getShareDiscountActivityDtos()) ? new ArrayList<>() : shoppingCartGoodsDto.getShareDiscountActivityDtos();
......@@ -178,7 +181,8 @@ public class CalculationServiceImpl {
shoppingCartGoodsDto.setTotalDiscountAmount(shoppingCartGoodsResponseVo.getTotalDiscountAmount());
//随单购 月卡价格
shoppingCartGoodsDto.setPayCardFee(shoppingCartGoodsResponseVo.getPayCardFee());
long buyThreeGiveOneCouponFee = calculationDiscountResult.getDiscounts().stream().filter(t -> t.getExtendType() == 7).mapToLong(apportionGoods -> apportionGoods.getCardAmount()).sum();
shoppingCartGoodsDto.setBuyThreeGiveOneCouponFee(buyThreeGiveOneCouponFee);
shoppingCartGoodsDto.setDeliveryAmount(shoppingCartGoodsResponseVo.getDeliveryAmount());
shoppingCartGoodsDto.setDiscountDeliveryAmount(shoppingCartGoodsResponseVo.getDiscountDeliveryAmount());
shoppingCartGoodsDto.setThresholdAmount(shoppingCartGoodsResponseVo.getThresholdAmount());
......
......@@ -27,6 +27,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
......@@ -77,11 +78,13 @@ public class CouponDiscountCalculation {
/**
* 优惠计算
*/
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList,
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, List<String> eliminateGoodsList) {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts())
|| !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;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods();
......@@ -95,7 +98,7 @@ public class CouponDiscountCalculation {
return;
}
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())))).collect(Collectors.toList());
|| (ActivityTypeEnum.TYPE_31.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_32.getCode().equals(discount.getType()) || (ActivityTypeEnum.TYPE_35.getCode().equals(discount.getType())) ))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(couponDiscounts)) {
return;
}
......@@ -107,25 +110,11 @@ public class CouponDiscountCalculation {
&& mccafeUniversalCouponCode.equals(t.getActivityCode()))).findFirst().orElse(null);
for (CartGoods cartGoods : cartGoodsList) {
//商品券商品
if (StringUtils.isNotBlank(cartGoods.getCouponCode()) || discountMon != null) {
// String couponCode = cartGoods.getCouponCode();
// // 计算优惠信息时,已将券校验过,放在map中
// Map<String, CheckSpqInfoResponseDto> validCouponMap = calculationDiscountResult.getValidCouponMap();
// if (MapUtils.isNotEmpty(validCouponMap)) {
// CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(couponCode);
// if (checkSpqInfoResponseDto != null) {
// cartGoods.setOriginalPrice(checkSpqInfoResponseDto.getPrice());
// cartGoods.setSpuId(checkSpqInfoResponseDto.getSpuId());
// cartGoods.setSkuId(StringUtils.isEmpty(checkSpqInfoResponseDto.getSkuId()) ? checkSpqInfoResponseDto.getSpuId() : checkSpqInfoResponseDto.getSkuId());
// cartGoods.setQty(1);
// cartGoods.setCouponCode(checkSpqInfoResponseDto.getCouponCode());
// cartGoods.setSpuName(checkSpqInfoResponseDto.getSpuName());
// }
// }
if (goodsMap.get(cartGoods.getCartGoodsUid()) == null) {
continue;
}
//商品券商品
if (StringUtils.isNotBlank(cartGoods.getCouponCode()) || discountMon != null) {
cartGoods.setAmount(goodsMap.get(cartGoods.getCartGoodsUid()).getRealAmount());
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> discountsNew = goodsMap.get(cartGoods.getCartGoodsUid()).getDiscounts();
if (CollectionUtils.isNotEmpty(discountsNew)) {
......@@ -133,6 +122,17 @@ public class CouponDiscountCalculation {
cartGoods.setCouponName(goodsDiscount.getActivityName());
}
}
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods = goodsMap.get(cartGoods.getCartGoodsUid());
// 用来判断是否需要删除商品中的加料信息,然后重新计算
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsMaterial> smallMaterial = goods.getSmallMaterial();
if (CollectionUtils.isNotEmpty(smallMaterial)) {
if (CollectionUtils.isNotEmpty(goods.getDiscounts())) {
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> goodsDiscounts_35 = goods.getDiscounts().stream().filter(t -> (ActivityTypeEnum.TYPE_35.getCode().equals(t.getType()))).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(goodsDiscounts_35)) {
eliminateGoodsList.add(cartGoods.getCartGoodsUid());
}
}
}
}
// 当couponCode不为空时,需计算优惠价格
......@@ -152,7 +152,8 @@ public class CouponDiscountCalculation {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts())
|| !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;
}
//订单级别券优惠
......@@ -161,7 +162,7 @@ public class CouponDiscountCalculation {
return;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discounts = couponDiscounts.stream().filter(discount -> (ActivityTypeEnum.TYPE_3.getCode().equals(discount.getType())
|| (ActivityTypeEnum.TYPE_31.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_32.getCode().equals(discount.getType())))).collect(Collectors.toList());
|| (ActivityTypeEnum.TYPE_31.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_32.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_35.getCode().equals(discount.getType())))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(discounts)) {
return;
}
......@@ -221,6 +222,25 @@ public class CouponDiscountCalculation {
cartGoods.setActivityDiscountsDtos(productActivityDiscountsDtos);
}
}
if (CollectionUtils.isNotEmpty(list)) {
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> goodsDiscounts_35 = list.stream().filter(t -> (ActivityTypeEnum.TYPE_35.getCode().equals(t.getType()))).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(goodsDiscounts_35)) {
List<ActivityDiscountsDto> productActivityDiscountsDtos = new ArrayList<>();
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount : goodsDiscounts_35) {
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
activityDiscountsDto.setActivityCode(goodsDiscount.getActivityCode());
activityDiscountsDto.setActivityName(goodsDiscount.getActivityName());
activityDiscountsDto.setActivityType(goodsDiscount.getType());
activityDiscountsDto.setDiscountAmount(0 - goodsDiscount.getDiscount().intValue());
activityDiscountsDto.setExtendType(discount.getExtendType());
activityDiscountsDto.setTenderId(goodsMap.get(cartGoods.getCartGoodsUid()).getArtNo());
productActivityDiscountsDtos.add(activityDiscountsDto);
}
cartGoods.setTotalDiscountAmount(goodsMap.get(cartGoods.getCartGoodsUid()).getDiscountAmount().intValue());
cartGoods.setSalePrice(goodsMap.get(cartGoods.getCartGoodsUid()).getRealAmount());
cartGoods.setActivityDiscountsDtos(productActivityDiscountsDtos);
}
}
}
}
......@@ -606,4 +626,61 @@ public class CouponDiscountCalculation {
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 (calculationDiscount != null && 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);
cartGoods1.setCartGoodsUid(cartGoods.getCartGoodsUid());
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());
}
}
......@@ -133,4 +133,13 @@ public class MCoffeeAddGoodsRequestVo {
*/
private String groupName;
/**
* 买三赠一券code
*/
private String buyThreeGiveOneCouponCode;
/**
* 买三赠一券活动号
*/
private String buyThreeGiveOneActivityCode;
}
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