Commit 767e22ae by 孙昱

Merge branch 'feature/20210312_麦咖啡P5V9月享卡2.0_yu.sun'

# Conflicts:
#	assortment-shoppingcart-sdk/pom.xml
#	assortment-shoppingcart-sdk/readme.md
#	shopping-cart-application-service/pom.xml
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/ShoppingCartMCoffeeServiceImpl.java
parents 6bef2739 b032435d
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-shoppingcart-sdk</artifactId>
<version>1.2.6.RELEASE</version>
<version>1.2.7.RELEASE</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
......
......@@ -16,3 +16,4 @@
| 1.2.4.RELEASE| 多小料| 刘鹏飞 | 2021-03-03 |
| 1.2.5.RELEASE| 频次券| 梁崇福 | 2021-03-09 |
| 1.2.6.RELEASE| 多规格加料校验| 梁崇福 | 2021-03-25 |
| 1.2.7.RELEASE| 麦咖啡月享卡2.0| 孙昱 | 2021-04-15 |
......@@ -80,7 +80,13 @@ public class CartGoods {
/**
* 是否为种子券商品 1:是;0:否
*/
private int isSeedCouponGoods;
private int isMonthCardGoods;
/**
* 是否使用月享卡2.0
* 1 是
* 0 否
*/
private int isUseMonthCard;
/**
* 是否是太阳蛋商品
*/
......@@ -314,6 +320,12 @@ public class CartGoods {
* 月享卡类型:1.月享卡(单商品购买);2.月享卡(多商品购买);3.普通月卡
*/
private Integer type;
/**
* 是否使用月享卡2.0
* 1 是
* 0 否
*/
private int isUseMonthCard;
}
@Data
......
......@@ -45,7 +45,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-shoppingcart-sdk</artifactId>
<version>1.2.6.RELEASE</version>
<version>1.2.7.RELEASE</version>
</dependency>
<!-- 再来一单查询订单信息 -->
<dependency>
......
......@@ -331,8 +331,11 @@ public class ShoppingCartMccafeAdapter {
* 1. 商品券:cartGoodsDetailDto.couponCode非空,保留ApportionGoods#ApportionDetails#apportionType中32的
* 2. 普通商品:cartGoodsDetailDto.couponCode空,去掉32的
*/
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails> apportionDetails = apportionGoods.getApportionDetails().stream().filter(detail -> !detail.getActivityType().equals(ActivityTypeEnum.TYPE_32.getCode())
&& !detail.getActivityType().equals(ActivityTypeEnum.TYPE_104.getCode()) && !detail.getActivityType().equals(ActivityTypeEnum.TYPE_2.getCode()) && !detail.getActivityType().equals(ActivityTypeEnum.TYPE_21.getCode())).collect(Collectors.toList());
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails> apportionDetails = apportionGoods.getApportionDetails().stream()
.filter(detail -> !detail.getActivityType().equals(ActivityTypeEnum.TYPE_32.getCode())
&& !detail.getActivityType().equals(ActivityTypeEnum.TYPE_37.getCode())
&& !detail.getActivityType().equals(ActivityTypeEnum.TYPE_38.getCode()) && !detail.getActivityType().equals(ActivityTypeEnum.TYPE_104.getCode())
&& !detail.getActivityType().equals(ActivityTypeEnum.TYPE_2.getCode()) && !detail.getActivityType().equals(ActivityTypeEnum.TYPE_21.getCode())).collect(Collectors.toList());
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails detail : apportionDetails) {
List<ActivityDiscountsDto> currentDiscount = activityDiscountsDtoList.stream().filter(discount -> ObjectUtils.equals(discount.getActivityCode(), detail.getActivityCode())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(currentDiscount)) {
......
......@@ -88,10 +88,6 @@ public class ActivityCalculationDiscountRequestDto {
*/
private String activityCode;
/**
* 是否为种子券商品
*/
private Integer isSeedCouponGoods;
/**
* 购物车商品行uid(种子券商品才传)
*/
private String cartGoodsUid;
......
......@@ -57,6 +57,12 @@ public class ActivityCalculationDiscountResponseDto {
* 总的优惠信息集合
*/
private List<Discount> discounts;
/**
* 月享卡2.0优惠
*/
private MonthCardDiscount monthlyEnjoyCardDiscount;
/**
* 商品优惠信息
*/
......@@ -115,6 +121,30 @@ public class ActivityCalculationDiscountResponseDto {
private SendPoint sendPointVo;
@Data
public static class MonthCardDiscount{
/**
* 月享卡2.0优惠总额
*/
private Long discountAmount;
/**
* 月享卡券号
*/
private String couponCode;
/**
* 券标识
*/
private String couponLogo;
/**
* 优惠标识
*/
private String discountLogo;
/**
* 优惠描述
*/
private String discountDesc;
}
@Data
public static class ActivityPrompt {
......
package cn.freemud.entities.dto.shoppingCart;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.OrderProductAddInfo;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.activity.ShareDiscountActivityDto;
......@@ -92,6 +93,12 @@ public class ShoppingCartGoodsDto {
* 订单享受的促销活动
*/
private List<ActivityDiscountsDto> activityDiscountsDtos;
/**
* 月享卡2.0优惠集合
*/
private ActivityCalculationDiscountResponseDto.CalculationDiscountResult.MonthCardDiscount monthCardDiscount;
/**
* 扣减库存
*/
......
......@@ -41,4 +41,17 @@ public class BatchOperateCartGoodsRequestVo extends BaseRequestVo{
*/
private List<BatchGoodsInfoVo> goodsInfos;
/**
* 根据券号清除当前购物车中月卡及商品信息
*/
private String redundancyCouponCode;
/**
* 是否使用月享卡2.0
* 1 是
* 0 否
*/
private int isUseMonthCard;
}
\ No newline at end of file
......@@ -238,15 +238,15 @@ public class CartGoods {
/**
* 是否是月享卡商品
*/
private int isMonthCard;
private int isMonthCard = 0;
/**
* 是否是太阳蛋商品
*/
private int isSunnyCoupon=0;
/**
* 是否为种子券商品 1:是;0:否
* 是否为月享卡商品 1:是;0:否
*/
private int isSeedCouponGoods;
private int isMonthCardGoods = 0;
/**
* 月享卡信息
*/
......
package cn.freemud.entities.vo;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
@Data
public class ClearCouponCodeRequestVo extends BaseRequestVo {
@NotEmpty(message = "券号不可为空")
private String redundancyCouponCode;
/**
* 是否使用月享卡2.0
* 1 是
* 0 否
*/
private int isUseMonthCard;
}
......@@ -29,4 +29,10 @@ public class MonthCardVo {
* 月享卡类型:1.月享卡(单商品购买);2.月享卡(多商品购买);3.普通月卡
*/
private Integer type;
/**
* 是否使用月享卡2.0
* 1 是
* 0 否
*/
private int isUseMonthCard = 1;
}
......@@ -69,6 +69,13 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
* 优惠券code列表
*/
private List<couponCode> couponCodes;
/**
* 是否使用月享卡2.0
* 1 是
* 0 否
*/
private Integer isUseMonthCard = 1;
/**
* 优惠券对应的活动号
*/
......
......@@ -36,6 +36,7 @@ public enum ActivityTypeEnum {
TYPE_32(32, "商品券"),
TYPE_33(33, "换购券"),
TYPE_37(37, "月享卡种子券"),
TYPE_38(38,"月享卡2.0"),
TYPE_5(5, "整单满金额折"),
TYPE_51(51, "每满金额折"),
TYPE_52(52, "阶梯满金额折"),
......
......@@ -102,7 +102,6 @@ public enum ResponseResult {
SHOPPING_CART_BUY_ONE_SEND_GOODS_ERR("44033", "寄件活动商品错误"),
SHOPPING_CART_COUPON_MIX_NOT_EXIST("44034", "券商品不存在"),
SHOPPING_CART_QTY_LIMIT_ERR("44035", "该商品单次购买数量限制为10,请知晓"),
SHOPPING_CART_SEED_COUPON_VALID("44037","券商品数量不可大于券数量"),
SHOPPING_CART_MATERIA_QTY_LIMIT_ERR("44038", "商品加料超过最大限制"),
/**
......
......@@ -31,9 +31,11 @@ import cn.freemud.service.thirdparty.CustomerApplicationClient;
import cn.freemud.utils.BeanUtil;
import cn.freemud.service.thirdparty.ProductClient;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
......@@ -162,8 +164,11 @@ public class ShoppingCartMCoffeeServiceImpl {
}
productIds.add(Long.parseLong(goodsId));
List<ProductBeanDTO> productBeanListSpuClass = null;
// 获取添加商品的详细信息
List<ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId, Collections.singletonList(spuId2), menuType, this.shoppingCartBaseService);
if (!StringUtils.equals("9999",addShoppingCartGoodsRequestVo.getSkuId())) {
productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId, Collections.singletonList(spuId2), menuType, this.shoppingCartBaseService);
}
// 查询购物车缓存
List<CartGoods> oldCartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, null, null, shoppingCartBaseService);
......@@ -172,25 +177,21 @@ public class ShoppingCartMCoffeeServiceImpl {
}
//种子券商品信息校验
if (addShoppingCartGoodsRequestVo.getIsMonthCard()< 1 && addShoppingCartGoodsRequestVo.getIsSeedCouponGoods() > 0) {
if (1 == addShoppingCartGoodsRequestVo.getIsMonthCard()) {
seedCouponGoodsValidate(addShoppingCartGoodsRequestVo, oldCartGoodsList);
}
//加锁,防止重复请求导致的加购数量错误
synchronized (oldCartGoodsList) {
//餐具和月享卡数量限制
if (mcCafeTablewareSkuId.equals(skuId) || Objects.equals(addShoppingCartGoodsRequestVo.getIsMonthCard(), 1)) {
if (mcCafeTablewareSkuId.equals(skuId) || StringUtils.equals("9999",skuId)) {
for (CartGoods cartGoods : oldCartGoodsList) {
if (mcCafeTablewareSkuId.equals(cartGoods.getSkuId())) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_ADD_ERROR.getCode(), "不能重复添加餐具商品");
}
if (Objects.equals(addShoppingCartGoodsRequestVo.getIsMonthCard(), 1) && cartGoods.getQty() >= 10) {
shoppingCartGoodsResponseVo.setChanged(true);
shoppingCartGoodsResponseVo.setToastMsg("该商品单次购买数量限制为10,请知晓");
if (StringUtils.equals("9999",cartGoods.getSkuId())) {
// 返回购物车数据
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, oldCartGoodsList,
ResponseResult.SHOPPING_CART_ADD_ERROR.getMessage(), ShoppingCartConstant.ADD_AND_UPDATE
, null);
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, oldCartGoodsList, null, ShoppingCartConstant.ADD_AND_UPDATE, null);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
}
......@@ -211,7 +212,14 @@ public class ShoppingCartMCoffeeServiceImpl {
CustomerInfoVo userLoginInfoDto = getCustomerInfoVo(sessionId);
couponName = getCouponNameByCode(couponCode, userLoginInfoDto,
BusinessTypeEnum.getByType(addShoppingCartGoodsRequestVo.getMenuType()).getCode(), storeId);
//月享卡2.0之后不在显示月享卡券的名称 与普通商品券不同,故过滤掉月享卡券名称查询
if (!("9999").equals(addCartGoods.getSpuId()) && !("9999").equals(addCartGoods.getSkuId())){
addCartGoods.setCouponName(couponName);
}else{
//将卡券名称赋值给 虚拟商品作为 月享卡2.0的优惠项展示
addCartGoods.setSpuName(couponName);
addCartGoods.setSkuName(couponName);
}
}
// 如果购物车中有商品券,则当前添加的商品是特价商品时,需要提示“已选商品券,与其他优惠商品不同享,商品将恢复原价”
......@@ -221,14 +229,26 @@ public class ShoppingCartMCoffeeServiceImpl {
setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS);
}
List<CartGoods> newCartGoods = null;
if (!StringUtils.equals("9999",skuId)) {
log.info("【addGoodsList】:{} ,【addGoodsRequestVo】:{}",JSONObject.toJSONString(oldCartGoodsList),JSONObject.toJSONString(addCartGoods));
// 购物车数据更新(保存商品原价)
List<CartGoods> newCartGoods = updateCartGoodsLegal(partnerId, storeId, orderType, tableNumber, menuType, userId, addCartGoods, shoppingCartGoodsResponseVo, oldCartGoodsList);
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);
// 购物车信息到缓存中
// 重新保存购物车数据
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, newCartGoods, null, tableNumber, this.shoppingCartBaseService);
}else{
// 将月享卡2.0的虚拟商品保存到购物车中
oldCartGoodsList.add(addCartGoods);
// 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, couponCode,
oldCartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, oldCartGoodsList, null, tableNumber, this.shoppingCartBaseService);
newCartGoods = oldCartGoodsList;
}
// 返回购物车数据
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, newCartGoods, null, ShoppingCartConstant.ADD_AND_UPDATE, null);
}
......@@ -275,6 +295,15 @@ public class ShoppingCartMCoffeeServiceImpl {
throw new ServiceException(ResponseResult.PARAMETER_MISSING, "请先添加商品再使用商品券");
}
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
//月享卡加购时,将券号传给促销
if (null != addShoppingCartGoodsRequestVo
&& null != addShoppingCartGoodsRequestVo.getMonthCardInfo()
&& StringUtils.isNotEmpty(addShoppingCartGoodsRequestVo.getMonthCardInfo().getCardCode())){
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
calculationDiscountCoupon.setCode(addShoppingCartGoodsRequestVo.getMonthCardInfo().getCardCode());
coupons.add(calculationDiscountCoupon);
}
if (CollectionUtils.isNotEmpty(oldCartGoodsList)) {
Boolean isContinue =true;
for (CartGoods cartGoods : oldCartGoodsList) {
......@@ -282,16 +311,21 @@ public class ShoppingCartMCoffeeServiceImpl {
if (StringUtils.isNotBlank(cartGoods.getCouponCode())) {
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
calculationDiscountCoupon.setCode(cartGoods.getCouponCode());
calculationDiscountCoupon.setIsSeedCouponGoods(cartGoods.getIsSeedCouponGoods());
if (cartGoods.getIsSeedCouponGoods()>0) {
calculationDiscountCoupon.setCartGoodsUid(cartGoods.getCartGoodsUid());
coupons.add(calculationDiscountCoupon);
}
//月享卡加购时,将券号传给促销
if (null != cartGoods && null != cartGoods.getMonthCardInfo()
&& StringUtils.isNotEmpty(cartGoods.getMonthCardInfo().getCardCode())
&& 1 == cartGoods.getMonthCardInfo().getIsUseMonthCard()){
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
calculationDiscountCoupon.setCode(cartGoods.getMonthCardInfo().getCardCode());
coupons.add(calculationDiscountCoupon);
}
//使用券的是,如果购物车已经存在这个券,先清除,再添加
//过滤月享卡种子券
if (StringUtils.isNotEmpty(couponCode) && couponCode.equals(cartGoods.getCouponCode()) && Objects.equals(0,cartGoods.getIsSeedCouponGoods())) {
if (StringUtils.isNotEmpty(couponCode) && couponCode.equals(cartGoods.getCouponCode()) && Objects.equals(0,cartGoods.getIsMonthCardGoods())) {
cartGoods.setQty(0);
}
if (StringUtils.isNotEmpty(goodsId) && StringUtils.isNotEmpty(couponCode) && isContinue
......@@ -304,7 +338,7 @@ public class ShoppingCartMCoffeeServiceImpl {
cartGoods.setQty(cartGoods.getQty() - 1);
} else {
//如果购物车存在相同的商品,则先删除购物车商品,在新增商品券购物车行
if (Objects.equals(0,cartGoods.getIsSeedCouponGoods())){
if (Objects.equals(0,cartGoods.getIsMonthCardGoods())){
cartGoods.setQty(0);
}
}
......@@ -338,13 +372,15 @@ public class ShoppingCartMCoffeeServiceImpl {
if (StringUtils.isNotBlank(couponCode)) {
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
calculationDiscountCoupon.setCode(couponCode);
calculationDiscountCoupon.setIsSeedCouponGoods(addShoppingCartGoodsRequestVo.getIsSeedCouponGoods());
if (addShoppingCartGoodsRequestVo.getIsSeedCouponGoods()>0) {
calculationDiscountCoupon.setCartGoodsUid(addShoppingCartGoodsRequestVo.getCartGoodsUid());
}
// calculationDiscountCoupon.setIsSeedCouponGoods(addShoppingCartGoodsRequestVo.getIsSeedCouponGoods());
// if (addShoppingCartGoodsRequestVo.getIsSeedCouponGoods()>0) {
// calculationDiscountCoupon.setCartGoodsUid(addShoppingCartGoodsRequestVo.getCartGoodsUid());
// }
coupons.add(calculationDiscountCoupon);
}
if (CollectionUtils.isNotEmpty(coupons)){
coupons = coupons.stream().distinct().collect(Collectors.toList());
}
return coupons;
}
......@@ -358,10 +394,21 @@ public class ShoppingCartMCoffeeServiceImpl {
if (StringUtils.isEmpty(requestVo.getShopId())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_SHOP_ID_NOT_EMPTY);
}
if (CollectionUtils.isEmpty(requestVo.getGoodsInfos()) && CollectionUtils.isEmpty(requestVo.getQtyInfoList())) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_ADD_INVAILD);
BaseResponse baseResponse = new BaseResponse();
//清除券信息
if (StringUtils.isNotEmpty(requestVo.getRedundancyCouponCode())){
ClearCouponCodeRequestVo clearCouponCodeRequestVo = new ClearCouponCodeRequestVo();
clearCouponCodeRequestVo.setRedundancyCouponCode(requestVo.getRedundancyCouponCode());
clearCouponCodeRequestVo.setSessionId(requestVo.getSessionId());
clearCouponCodeRequestVo.setPartnerId(requestVo.getPartnerId());
clearCouponCodeRequestVo.setShopId(requestVo.getShopId());
clearCouponCodeRequestVo.setOrderType(requestVo.getOrderType());
clearCouponCodeRequestVo.setChannelType(requestVo.getChannelType());
clearCouponCodeRequestVo.setIsUseMonthCard(requestVo.getIsUseMonthCard());
baseResponse = clearCouponInfoByCode(clearCouponCodeRequestVo);
}
BaseResponse baseResponse = null;
if (CollectionUtils.isNotEmpty(requestVo.getQtyInfoList())) {
BatchUpdateGoodsQtyRequestVo updateGoodsQtyRequestVo = new BatchUpdateGoodsQtyRequestVo();
updateGoodsQtyRequestVo.setAppId(requestVo.getAppId());
......@@ -428,6 +475,45 @@ public class ShoppingCartMCoffeeServiceImpl {
}
/**
* 根据券号清除券信息
* @param requestVo
* @return
*/
public BaseResponse clearCouponInfoByCode(ClearCouponCodeRequestVo requestVo){
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo = new ShoppingCartGoodsResponseVo();
if (StringUtils.isEmpty(requestVo.getShopId())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_SHOP_ID_NOT_EMPTY);
}
String sessionId = requestVo.getSessionId();
// 获取用户信息
CustomerInfoVo assortmentCustomerInfoVo = getCustomerInfoVo(sessionId);
String userId = assortmentCustomerInfoVo.getMemberId();
String partnerId = requestVo.getPartnerId();
String storeId = requestVo.getShopId();
// 获取购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, sessionId, "", shoppingCartBaseService);
for (CartGoods cartGoods : cartGoodsList) {
if (StringUtils.equals(cartGoods.getCouponCode(),requestVo.getRedundancyCouponCode())){
cartGoods.setCouponCode(null);
cartGoods.setIsMonthCardGoods(0);
}
/**
* 是否继续使用月享卡优惠
*/
if (null != cartGoods.getMonthCardInfo()){
cartGoods.getMonthCardInfo().setIsUseMonthCard(requestVo.getIsUseMonthCard());
ApiLog.info("【清除券信息】是否使用月享卡优惠:{},月享卡实体:{}",requestVo.getIsUseMonthCard(),JSONObject.toJSONString(cartGoods));
}
}
cartGoodsList = cartGoodsList.stream().filter(cartGoods -> !StringUtils.equals("9999",cartGoods.getSkuId())).collect(Collectors.toList());
//重新保存购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, null);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
/**
* 更新商品数量
*/
public BaseResponse updateGoodsQty(UpdateShoppingCartGoodsQtyRequestVo updateShoppingCartGoodsQtyRequestVo) {
......@@ -475,6 +561,9 @@ public class ShoppingCartMCoffeeServiceImpl {
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
if (cartGoodsUid.equals(cartGoods_.getCartGoodsUid())) {
if (cartGoods_.getIsMonthCard() == 1 && qty == 0){
cartGoodsList = clearMonthCouponInfo(cartGoodsList,cartGoods_.getMonthCardInfo().getCardCode(),cartGoodsUid);
}
cartGoods = cartGoods_;
cartGoods_.setQty(qty);
skuId = cartGoods_.getSkuId();
......@@ -491,34 +580,12 @@ public class ShoppingCartMCoffeeServiceImpl {
}
}
for (CartGoods goods : cartGoodsList) {
if (Objects.equals(1,goods.getIsMonthCard())
&& goods.getCartGoodsUid().equals(updateShoppingCartGoodsQtyRequestVo.getCartGoodsUid())){
if (updateShoppingCartGoodsQtyRequestVo.getQty() == 0){
if (cartGoodsList.size()>1) {
Iterator<CartGoods> cartGoodsIterator = cartGoodsList.iterator();
while (cartGoodsIterator.hasNext()) {
String couponCode = null != cartGoodsIterator.next() ?
cartGoodsIterator.next().getCouponCode() : "";
if (StringUtils.isNotEmpty(couponCode) && couponCode.equals(goods.getMonthCardInfo().getCardCode()))
{
cartGoodsIterator.remove();
break;
}
}
}else{
cartGoodsList = new ArrayList<>();
}
}
}
}
if (cartGoods == null) {
throw new ServiceException(ResponseResult.SHOPPING_CART_UPDATE_ERROR);
}
//商品券行商品数量不可增加
if (cartGoods.getCouponCode() != null && qty > 1 && cartGoods.getIsSeedCouponGoods() < 0) {
if (StringUtils.isNotEmpty(cartGoods.getCouponCode()) && qty > 1 && cartGoods.getIsMonthCardGoods() < 1 && cartGoods.getIsMonthCard() < 1) {
throw new ServiceException(ResponseResult.NOT_SUPPORTED);
}
......@@ -595,19 +662,32 @@ public class ShoppingCartMCoffeeServiceImpl {
// 获取购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, sessionId, "", shoppingCartBaseService);
log.info("cartGoodsList: {}",JSONObject.toJSONString(cartGoodsList));
CartGoods monthCardProduct = null;
// 如果购物车商品不为空, 则check购物车中所有商品
if (CollectionUtils.isNotEmpty(cartGoodsList)) {
// check购物车中所有商品
List<CartGoods> temList = new ArrayList<>();
for (CartGoods goods : cartGoodsList) {
if(shoppingCartInfoRequestVo.getIsUseMonthCard() != null && goods.getMonthCardInfo() != null) {
goods.getMonthCardInfo().setIsUseMonthCard(shoppingCartInfoRequestVo.getIsUseMonthCard());
}
if (StringUtils.equals(goods.getSkuId(),"9999")){
monthCardProduct = goods;
continue;
}
temList.addAll(checkCartGoods(partnerId, storeId, orderType, menuType, shoppingCartGoodsResponseVo, Arrays.asList(goods)));
}
if (null != monthCardProduct) {
temList.add(monthCardProduct);
}
cartGoodsList = temList;
if (CollectionUtils.isNotEmpty(cartGoodsList)) {
int size = cartGoodsList.size();
for(int i=0;i<size;i++) {
//先把月卡放到最后
if(Objects.equals(1,cartGoodsList.get(i).getIsMonthCard())) {
if(null != cartGoodsList.get(i) && Objects.equals(1,cartGoodsList.get(i).getIsMonthCard())) {
CartGoods cartGoods = cartGoodsList.get(i);
if(i != size-1) {
cartGoodsList.remove(i);
......@@ -618,7 +698,7 @@ public class ShoppingCartMCoffeeServiceImpl {
}
for(int i=0;i<size;i++) {
//如果是餐具商品,则放到最后
if(cartGoodsList.get(i).getSkuId().equals(mcCafeTablewareSkuId)) {
if(null != cartGoodsList.get(i) && cartGoodsList.get(i).getSkuId().equals(mcCafeTablewareSkuId)) {
CartGoods cartGoods = cartGoodsList.get(i);
cartGoods.setIsTableware(true);
if(i != size-1) {
......@@ -675,6 +755,12 @@ public class ShoppingCartMCoffeeServiceImpl {
// 促销活动的优惠金额计算
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult = calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo, payCardPrice);
//如果促销返回的商品里有月享卡2.0的虚拟商品,重新保存一次购物车
if(CollectionUtils.isNotEmpty(cartGoodsList) && cartGoodsList.stream().anyMatch(cartGoods -> cartGoods.getSkuId().equals("9999"))){
// 重新存储最新购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, sessionId, "", shoppingCartBaseService);
}
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
......@@ -869,8 +955,6 @@ public class ShoppingCartMCoffeeServiceImpl {
if (CollectionUtils.isNotEmpty(reduceGoods)) {
allCartGoodsList.addAll(reduceGoods);
}
//恢复套餐商品空键位
// checkNewCartGoods(allCartGoodsList,2,map);
// 重新存储最新购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, sessionId, tableNumber, shoppingCartBaseService);
......@@ -892,12 +976,13 @@ public class ShoppingCartMCoffeeServiceImpl {
//加价购商品
List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList = shoppingCartInfoRequestVo.getSendGoods();
// //加价购商品组装
// packgeAdditional(shoppingCartInfoRequestVo, premiumExchangeActivity);
// 促销活动的优惠金额计算
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscount = calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
cartGoodsList, coupons, sendGoodsList, shoppingCartGoodsResponseVo, payCardPrice);
//过滤月享卡2.0虚拟商品
cartGoodsList = cartGoodsList.stream().filter(goods-> !StringUtils.equals("9999",goods.getSkuId())).collect(Collectors.toList());
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
......@@ -954,6 +1039,7 @@ public class ShoppingCartMCoffeeServiceImpl {
// 获取原门店购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, fromStoreId, userId, sessionId, "", shoppingCartBaseService);
log.info("【switchCardGoods】原门店数据:{}",JSONObject.toJSONString(cartGoodsList));
// 如果购物车商品不为空, 则check购物车中所有商品
if (CollectionUtils.isEmpty(cartGoodsList)) {
return ResponseUtil.success(shoppingCartGoodsResponseVo);
......@@ -965,17 +1051,9 @@ public class ShoppingCartMCoffeeServiceImpl {
break;
}
}
//清空商品券商品
Iterator<CartGoods> cartGoodsIterator = cartGoodsList.iterator();
while (cartGoodsIterator.hasNext()){
if (StringUtils.isNotEmpty(cartGoodsIterator.next().getCouponCode())){
cartGoodsIterator.remove();
}
}
log.info("switchCartGoods:{}",JSONObject.toJSONString(cartGoodsList));
// 重新存储门店购物车
assortmentSdkService.setShoppingCart(partnerId, toStoreId, userId, cartGoodsList, sessionId, "", shoppingCartBaseService);
assortmentSdkService.setShoppingCart(partnerId, fromStoreId, userId, cartGoodsList, sessionId, "", shoppingCartBaseService);
clearCartCouponGoods(partnerId, fromStoreId, userId, sessionId, cartGoodsList);
}
List<CartGoods> onlyCheckGoodsList = new ArrayList<>();
......@@ -984,61 +1062,30 @@ public class ShoppingCartMCoffeeServiceImpl {
for (CartGoods cartGoods : cartGoodsList) {
onlyCheckGoodsList.addAll(checkCartGoods(partnerId, toStoreId, orderType, menuType, shoppingCartGoodsResponseVo, Arrays.asList(cartGoods)));
}
}else{
// 新门店check购物车中所有商品
List<CartGoods> temList = new ArrayList<>();
for (CartGoods goods : cartGoodsList) {
temList.addAll(checkCartGoods(partnerId, toStoreId, orderType, menuType, shoppingCartGoodsResponseVo, Arrays.asList(goods)));
}
cartGoodsList = temList;
}
if (requestVo.getOperationType() == ShoppingCartOperationType.CHECK.getCode()) {
if (StringUtils.isNotEmpty(shoppingCartGoodsResponseVo.getToastMsg())){
//设置更新响应信息,校验失败只弹框提示消息,不切换门店,故将门店id重置为原来门店
shoppingCartGoodsResponseVo.setProducts(cartGoodsList);
shoppingCartInfoRequestVo.setShopId(requestVo.getFromShopId());
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.ADD_AND_UPDATE, shoppingCartInfoRequestVo);
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
// 重新存储新门店购物车
assortmentSdkService.setShoppingCart(partnerId, toStoreId, userId, cartGoodsList, sessionId, "", shoppingCartBaseService);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
}else {
//清除当前用户的代金券缓存,防止切换门店券数据带到不适用门店
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = assortmentSdkService.getCartParamDto(partnerId, fromStoreId, userId);
shoppingCartBaseService.clearMCCafeCouponByType(cartParamDto, SaveCouponType.COUPON.getCode(),LogThreadLocal.getTrackingNo());
// 新门店check购物车中所有商品
List<CartGoods> temList = new ArrayList<>();
for (CartGoods goods : cartGoodsList) {
temList.addAll(checkCartGoods(partnerId, toStoreId, orderType, menuType, shoppingCartGoodsResponseVo, Arrays.asList(goods)));
}
cartGoodsList = temList;
// 重新存储新门店购物车
assortmentSdkService.setShoppingCart(partnerId, toStoreId, userId, cartGoodsList, sessionId, "", shoppingCartBaseService);
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,null,null);
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList, null, null);
// 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, toStoreId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
shoppingCartGoodsResponseVo.setChanged(false);
}
}
// 新门店check购物车中所有商品
if (requestVo.getOperationType() == ShoppingCartOperationType.CONFIRM.getCode()) {
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo, null);
// 重新存储新门店购物车
assortmentSdkService.setShoppingCart(partnerId, toStoreId, userId, cartGoodsList, sessionId, "", shoppingCartBaseService);
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,null,null);
// 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, toStoreId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo,null);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
shoppingCartGoodsResponseVo.setChanged(false);
......@@ -1053,17 +1100,11 @@ public class ShoppingCartMCoffeeServiceImpl {
if (CollectionUtils.isEmpty(cartGoodsList)) {
return;
}
cartGoodsList = cartGoodsList.stream().filter(cartGoods -> StringUtils.isEmpty(cartGoods.getCouponCode())).collect(Collectors.toList());
//如果购物车商品剔除商品券商品后列表为空,则清空缓存信息
if (CollectionUtils.isEmpty(cartGoodsList)){
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = assortmentSdkService.getCartParamDto(partnerId, storeId, userId);
log.info("clearCouponInfo:{}",JSONObject.toJSONString(cartParamDto));
shoppingCartBaseService.clearMCCafe(cartParamDto, LogThreadLocal.getTrackingNo());
}else{
// 重新存储新门店购物车
cartGoodsList = cartGoodsList.stream().filter(cartGoods -> StringUtils.isEmpty(cartGoods.getCouponCode())
&& !StringUtils.equals("9999",cartGoods.getSkuId())).collect(Collectors.toList());
// 重新存储门店购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, sessionId, "", shoppingCartBaseService);
}
}
/**
......@@ -1356,6 +1397,17 @@ public class ShoppingCartMCoffeeServiceImpl {
oldCartGoodsList = checkCartGoods(partnerId, storeId, orderType, menuType,shoppingCartGoodsResponseVo, oldCartGoodsList);
List<CartGoods> newCartGoods = new ArrayList<>();
newCartGoods.add(addCartGoods);
//如果加购的商品与购物车缓存中月享卡2.0的商品goodsId相同,则给新增商品的couponCode 赋值为月享卡2.0的券号,否则会分行展示
List<CartGoods> montCardGoods = oldCartGoodsList.stream().filter(c-> c.getIsMonthCardGoods()>0).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(montCardGoods)){
for (CartGoods montCardGood : montCardGoods) {
if (StringUtils.isEmpty(newCartGoods.get(0).getCouponCode()) && newCartGoods.get(0).getGoodsId().equals(montCardGood.getGoodsId())){
newCartGoods.get(0).setCouponCode(montCardGood.getCouponCode());
}
}
}
//加购商品校验
List<CartGoods> newCartGoodsList = checkCartGoods(partnerId, storeId, orderType, menuType,shoppingCartGoodsResponseVo, newCartGoods);
List<CartGoods> nowCartGoodsList = new ArrayList<>();
......@@ -1363,7 +1415,7 @@ public class ShoppingCartMCoffeeServiceImpl {
nowCartGoodsList.addAll(oldCartGoodsList);
}
if(CollectionUtils.isNotEmpty(newCartGoodsList)){
//判断当前商品在购物车是否已存在,存在则数量+1,不存在商品行 + 1
log.info("【merge-before】:{} ,【newCardGoods】:{}",JSONObject.toJSONString(nowCartGoodsList),JSONObject.toJSONString(newCartGoods));
newCartGoodsList.forEach(newCartGood -> {
int index;
if ((index = nowCartGoodsList.indexOf(newCartGood)) >= 0) {
......@@ -1620,7 +1672,7 @@ public class ShoppingCartMCoffeeServiceImpl {
cartGoods.setSkuId(skuId);
cartGoods.setQty(qty);
cartGoods.setIsMonthCard(addShoppingCartGoodsRequestVo.getIsMonthCard());
cartGoods.setIsSeedCouponGoods(addShoppingCartGoodsRequestVo.getIsSeedCouponGoods());
cartGoods.setIsMonthCardGoods(addShoppingCartGoodsRequestVo.getIsMonthCardGoods());
cartGoods.setCouponCode(addShoppingCartGoodsRequestVo.getCouponCode());
Integer goodsType = StringUtils.isEmpty(skuId) || ObjectUtils.equals(spuId, skuId) ? GoodsTypeEnum.SPU_GOODS.getGoodsType() : GoodsTypeEnum.SKU_GOODS.getGoodsType();
if (spuId.startsWith(CommonsConstant.COUPON_PREFIX)) {
......@@ -1739,8 +1791,8 @@ public class ShoppingCartMCoffeeServiceImpl {
private List<CartGoods> checkCartGoods(String partnerId, String storeId, Integer orderType, String menuType,
ShoppingCartGoodsBaseResponseVo shoppingCartGoodsResponseVo, List<CartGoods> cartGoodsList) {
//筛选数量不为0商品
cartGoodsList = cartGoodsList.stream().filter(cartGoods -> cartGoods.getQty() != 0).collect(Collectors.toList());
//筛选数量不为0商品 && 非月享卡2.0虚拟商品
cartGoodsList = cartGoodsList.stream().filter(cartGoods -> cartGoods.getQty() != 0 && !StringUtils.equals("9999",cartGoods.getSkuId())).collect(Collectors.toList());
//筛选非超值加购活动商品--超值加购活动商品不校验是否在菜单,不调用validateShopProduct
List<CartGoods> checkGoods = cartGoodsList.stream().filter(cartGoods -> cartGoods.getGoodsType() != GoodsTypeEnum.REDUCE_PRICE_GOODS.getGoodsType()).collect(Collectors.toList());
......@@ -1804,7 +1856,7 @@ public class ShoppingCartMCoffeeServiceImpl {
ShoppingCartGoodsBaseResponseVo shoppingCartGoodsResponseVo, List<CartGoods> cartGoodsList) {
//筛选数量不为0商品
cartGoodsList = cartGoodsList.stream().filter(cartGoods -> cartGoods.getQty() != 0).collect(Collectors.toList());
cartGoodsList = cartGoodsList.stream().filter(cartGoods -> cartGoods.getQty() != 0 && StringUtils.equals("9999",cartGoods.getSkuId())).collect(Collectors.toList());
//筛选非加购商品--加价购商品不校验是否在菜单,不调用validateShopProduct
List<CartGoods> checkGoods = cartGoodsList.stream().filter(cartGoods -> cartGoods.getGoodsType() != GoodsTypeEnum.REDUCE_PRICE_GOODS.getGoodsType()).collect(Collectors.toList());
......@@ -1842,17 +1894,25 @@ public class ShoppingCartMCoffeeServiceImpl {
if (CollectionUtils.isNotEmpty(cartGoodsList)) {
for (CartGoods cartGoods : cartGoodsList) {
//购物车已存在商品券
if (StringUtils.isNotBlank(cartGoods.getCouponCode())) {
if (null != cartGoods) {
if (StringUtils.isNotEmpty(cartGoods.getCouponCode())) {
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
calculationDiscountCoupon.setCode(cartGoods.getCouponCode());
calculationDiscountCoupon.setIsSeedCouponGoods(cartGoods.getIsSeedCouponGoods());
if (cartGoods.getIsSeedCouponGoods()>0){
calculationDiscountCoupon.setCartGoodsUid(cartGoods.getCartGoodsUid());
coupons.add(calculationDiscountCoupon);
}
if (null != cartGoods.getMonthCardInfo()
&& StringUtils.isNotEmpty(cartGoods.getMonthCardInfo().getCardCode())
&& 1 == cartGoods.getMonthCardInfo().getIsUseMonthCard()) {
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
calculationDiscountCoupon.setCode(cartGoods.getMonthCardInfo().getCardCode());
coupons.add(calculationDiscountCoupon);
}
}
}
}
if (CollectionUtils.isNotEmpty(coupons)){
coupons = coupons.stream().distinct().collect(Collectors.toList());
}
return coupons;
}
......@@ -2204,7 +2264,7 @@ public class ShoppingCartMCoffeeServiceImpl {
mCoffeeAddGoodsRequestVo.setCouponCode(goodsInfo.getCouponCode());
mCoffeeAddGoodsRequestVo.setGroupName(goodsInfo.getGroupName());
mCoffeeAddGoodsRequestVo.setIsMonthCard(goodsInfo.getIsMonthCard());
mCoffeeAddGoodsRequestVo.setIsSeedCouponGoods(goodsInfo.getIsSeedCouponGoods());
mCoffeeAddGoodsRequestVo.setIsMonthCardGoods(goodsInfo.getIsMonthCardGoods());
mCoffeeAddGoodsRequestVo.setMonthCardInfo(goodsInfo.getMonthCardInfo());
return mCoffeeAddGoodsRequestVo;
}
......@@ -2257,32 +2317,29 @@ public class ShoppingCartMCoffeeServiceImpl {
*/
private void seedCouponGoodsValidate(MCoffeeAddGoodsRequestVo addShoppingCartGoodsRequestVo,List<CartGoods> oldCartGoodsList){
//若加购种子券商品,则券号不可为空
if (StringUtils.isEmpty(addShoppingCartGoodsRequestVo.getCouponCode())){
if (null == addShoppingCartGoodsRequestVo.getMonthCardInfo()){
throw new ServiceException(ResponseResult.SHOPPING_CART_ADD_ERROR);
}
//加购种子券商品,购物车中必须已有月卡不可为空
if (CollectionUtils.isEmpty(oldCartGoodsList)) {
throw new ServiceException(ResponseResult.SHOPPING_CART_SEED_COUPON_VALID);
}
int seedCouponCount = 0;
int seedCouponGoodsCount = 0;
for (CartGoods cartGoods : oldCartGoodsList) {
//1.种子券商品券信息与月卡信息一致
if (null != cartGoods.getMonthCardInfo() && !addShoppingCartGoodsRequestVo.getCouponCode().equals(cartGoods.getMonthCardInfo().getCardCode())){
if (null != cartGoods.getMonthCardInfo() && !addShoppingCartGoodsRequestVo.getCouponCode().equals(cartGoods.getMonthCardInfo().getCardCode())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_COUPON_NOT_EXIST);
}
if (cartGoods.getIsMonthCard()>0){
seedCouponCount = seedCouponCount + cartGoods.getQty();
}
if (cartGoods.getIsSeedCouponGoods()>0 && cartGoods.getIsMonthCard()<1){
seedCouponGoodsCount = seedCouponGoodsCount + cartGoods.getQty();
}
}
//2.种子券商品数量不可大于种子券数量
if ((seedCouponGoodsCount+addShoppingCartGoodsRequestVo.getQty()) > seedCouponCount){
throw new ServiceException(ResponseResult.SHOPPING_CART_SEED_COUPON_VALID);
/**
* 清除购物车商品使用月卡信息
* @param cartGoods
* @param couponCode
*/
private List<CartGoods> clearMonthCouponInfo(List<CartGoods> cartGoods,String couponCode,String cartGoodsUid){
for (CartGoods cartGood : cartGoods) {
if (StringUtils.equals(couponCode,cartGood.getCouponCode())){
cartGood.setCouponCode(null);
cartGood.setIsMonthCardGoods(0);
}
}
return cartGoods.stream().filter(t-> !StringUtils.equals("9999",t.getSkuId()) && !t.getCartGoodsUid().equals(cartGoodsUid)).collect(Collectors.toList());
}
}
......@@ -20,6 +20,7 @@ import cn.freemud.service.CommonService;
import cn.freemud.service.impl.ItemServiceImpl;
import cn.freemud.service.thirdparty.ActivityClient;
import cn.freemud.utils.PropertyConvertUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest;
......@@ -197,7 +198,7 @@ public class CalculationServiceImpl {
calculationDiscountResult == null ? new ArrayList<>() : calculationDiscountResult.getApportionGoods();
Map<String, String> duplicateGoodsMap = new HashMap<>();
cartGoodsList.stream().collect(Collectors.groupingBy(CartGoods::getGoodsId, Collectors.counting())).forEach((goodsId, count) -> {
cartGoodsList.stream().filter(cartGoods -> !StringUtils.equals(cartGoods.getSkuId(),"9999")).collect(Collectors.groupingBy(CartGoods::getGoodsId, Collectors.counting())).forEach((goodsId, count) -> {
duplicateGoodsMap.put(goodsId,String.format("%s,0", count));
});
for (int i = 0, len = cartGoodsList.size(); i < len; i++) {
......@@ -251,7 +252,7 @@ public class CalculationServiceImpl {
}
}
List<ShoppingCartGoodsDto.CartGoodsDetailDto> products = shoppingCartGoodsDto.getProducts();
List<ShoppingCartGoodsDto.CartGoodsDetailDto> products = shoppingCartGoodsDto.getProducts().stream().filter(p-> !StringUtils.equals("9999",p.getSkuId())).collect(Collectors.toList());
List<String> productIds = products.stream().map(t -> t.getSkuId()).collect(Collectors.toList());
//调用商品的接口获取商品键位
......@@ -405,9 +406,11 @@ public class CalculationServiceImpl {
calculationDiscountGoods.setGoodsQuantity(goodsQuantity);
calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(memberDiscount);
//新增咖啡月卡券券号
calculationDiscountGoods.setCouponCode(cartGoods.getCouponCode());
calculationDiscountGoods.setCartGoodsUid(cartGoods.getCartGoodsUid());
//新增咖啡月卡券券号,同一行商品才替换券号,防止不同商品券相同sku之间的覆盖
if (cartGoods.getCartGoodsUid().equals(calculationDiscountGoods.getCartGoodsUid())) {
calculationDiscountGoods.setCouponCode(StringUtils.isEmpty(cartGoods.getCouponCode()) ? null : cartGoods.getCouponCode());
}
ArrayList<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material> materials = new ArrayList<>();
//可选搭配
......
......@@ -79,7 +79,7 @@ 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_37.getCode().equals(discount.getType()))))){
|| (ActivityTypeEnum.TYPE_37.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_38.getCode().equals(discount.getType()))))){
return;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods();
......@@ -93,47 +93,88 @@ public class CouponDiscountCalculation {
}
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_37.getCode().equals(discount.getType())) )).collect(Collectors.toList());
|| (ActivityTypeEnum.TYPE_37.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_38.getCode().equals(discount.getType())))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(couponDiscounts)) {
return;
}
/**
* 月享卡2.0 促销单独返回 月享卡优惠
*/
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.MonthCardDiscount monthCardDiscount = calculationDiscountResult.getMonthlyEnjoyCardDiscount();
if (null != monthCardDiscount){
//月享卡2.0 信息回填
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods : goodsList) {
Optional<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> optional = goods.getDiscounts().stream().filter(goodsDiscount -> ActivityTypeEnum.TYPE_38.getCode() == goodsDiscount.getType()).findFirst();
if(CollectionUtils.isNotEmpty(goods.getDiscounts()) && optional.isPresent()){
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount card2Discount = optional.get();
for (CartGoods cartGoods : cartGoodsList) {
//比較商品ID 以及 商品行UID 防止篡改了其他商品券的券号
if (StringUtils.equals(cartGoods.getGoodsId(),card2Discount.getGoodsId()) && goods.getCartGoodsUid().equals(cartGoods.getCartGoodsUid())){
cartGoods.setIsMonthCardGoods(1);
cartGoods.setCouponName("");
cartGoods.setCouponCode(card2Discount.getActivityCode());
cartGoods.setActivityType(card2Discount.getType());
}
}
}
}
Boolean hasMonCardDiscountVirtualProduct = false;
//如果购物车列表已有优惠项,则更新促销返回的优惠信息
for (CartGoods cartGoods : cartGoodsList) {
if (StringUtils.equals(cartGoods.getSkuId(),"9999")){
cartGoods.setSkuName(monthCardDiscount.getDiscountDesc());
cartGoods.setSpuName(monthCardDiscount.getDiscountDesc());
cartGoods.setPic(monthCardDiscount.getDiscountLogo());
cartGoods.setQty(1);
cartGoods.setAmount(monthCardDiscount.getDiscountAmount());
hasMonCardDiscountVirtualProduct = true;
}
}
//如果是菜单页加购月享卡商品.促销返回月享卡优惠后 虚拟一个 优惠项返回给前端
if (!hasMonCardDiscountVirtualProduct){
CartGoods virtualProduct = new CartGoods();
virtualProduct.setSkuId("9999");
virtualProduct.setSpuId("9999");
virtualProduct.setSkuName(monthCardDiscount.getDiscountDesc());
virtualProduct.setSpuName(monthCardDiscount.getDiscountDesc());
virtualProduct.setPic(monthCardDiscount.getCouponLogo());
virtualProduct.setQty(1);
virtualProduct.setAmount(monthCardDiscount.getDiscountAmount());
cartGoodsList.add(virtualProduct);
}
}
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
// 匹配随单购悦享卡
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount discountMon = couponDiscounts.stream().filter(t -> (
(ActivityTypeEnum.TYPE_32.getCode().equals(t.getType()) || ActivityTypeEnum.TYPE_37.getCode().equals(t.getType()))
(ActivityTypeEnum.TYPE_37.getCode().equals(t.getType()) || ActivityTypeEnum.TYPE_38.getCode().equals(t.getType()))
&& 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;
}
cartGoods.setAmount(goodsMap.get(cartGoods.getCartGoodsUid()).getRealAmount());
//商品券商品
if (StringUtils.isNotBlank(cartGoods.getCouponCode()) || discountMon != null) {
//先将商品券商品最终售价设置为 原价
if (!StringUtils.equals("9999",cartGoods.getSkuId())){
cartGoods.setAmount(cartGoods.getOriginalAmount());
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> discountsNew = goodsMap.get(cartGoods.getCartGoodsUid()).getDiscounts();
if (CollectionUtils.isNotEmpty(discountsNew)) {
log.info("couponDiscountCalculation:{}",discountsNew);
//这里过滤掉了 月享卡2.0,因为月享卡2.0商品不用展示划线价,故显示原价
Optional<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> targetDiscount = discountsNew.stream()
.filter(t -> ActivityTypeEnum.TYPE_32.getCode().equals(t.getType()) || ActivityTypeEnum.TYPE_37.getCode().equals(t.getType())).findFirst();
if (null != targetDiscount && targetDiscount.isPresent()) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = targetDiscount.get();
cartGoods.setCouponName(goodsDiscount.getActivityName());
//普通商品券 和月享卡1.0的 商品最终售价更新为促销返回价格
cartGoods.setAmount(goodsMap.get(cartGoods.getCartGoodsUid()).getRealAmount());
}
}
}
......@@ -157,7 +198,7 @@ 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_37.getCode().equals(discount.getType()))))) {
||(ActivityTypeEnum.TYPE_37.getCode().equals(discount.getType())) ||(ActivityTypeEnum.TYPE_38.getCode().equals(discount.getType()))))) {
return;
}
Map<String, Integer> extendTypeMap = calculationDiscountResult.getDiscounts().stream().filter(o -> o.getExtendType() != null)
......@@ -170,11 +211,20 @@ public class CouponDiscountCalculation {
}
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())
|| (ActivityTypeEnum.TYPE_37.getCode().equals(discount.getType()))))).collect(Collectors.toList());
|| (ActivityTypeEnum.TYPE_37.getCode().equals(discount.getType())) || (ActivityTypeEnum.TYPE_38.getCode().equals(discount.getType()))))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(discounts)) {
return;
}
/**
* 月享卡2.0 促销单独返回 月享卡优惠
*/
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.MonthCardDiscount monthCardDiscount = calculationDiscountResult.getMonthlyEnjoyCardDiscount();
if (calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> ActivityTypeEnum.TYPE_38.getCode().equals(discount.getType())) && null == monthCardDiscount){
return;
}
shoppingCartGoodsDto.setMonthCardDiscount(monthCardDiscount);
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods();
if (CollectionUtils.isEmpty(goodsList)) {
return;
......@@ -184,7 +234,10 @@ public class CouponDiscountCalculation {
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
// 匹配随单购悦享卡
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount discount = discounts.stream().filter(t -> (ActivityTypeEnum.TYPE_32.getCode().equals(t.getType()) && mccafeUniversalCouponCode.equals(t.getActivityCode()))).findFirst().orElse(null);
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount discount = discounts.stream()
.filter(t -> ((ActivityTypeEnum.TYPE_32.getCode().equals(t.getType()) || ActivityTypeEnum.TYPE_37.getCode().equals(t.getType())
|| ActivityTypeEnum.TYPE_38.getCode().equals(t.getType())) && mccafeUniversalCouponCode.equals(t.getActivityCode()))).findFirst().orElse(null);
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoods : shoppingCartGoodsDto.getProducts()) {
if (goodsMap.get(cartGoods.getCartGoodsUid()) == null) {
continue;
......@@ -222,7 +275,8 @@ public class CouponDiscountCalculation {
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> list = goodsMap.get(cartGoods.getCartGoodsUid()).getDiscounts();
if (CollectionUtils.isNotEmpty(list) && discount != null) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = list.stream()
.filter(t -> ((ActivityTypeEnum.TYPE_32.getCode().equals(t.getType()) || ActivityTypeEnum.TYPE_37.getCode().equals(t.getType())) && mccafeUniversalCouponCode.equals(t.getActivityCode()))).findFirst().orElse(null);
.filter(t -> ((ActivityTypeEnum.TYPE_32.getCode().equals(t.getType()) || ActivityTypeEnum.TYPE_37.getCode().equals(t.getType())
|| ActivityTypeEnum.TYPE_38.getCode().equals(t.getType())) && mccafeUniversalCouponCode.equals(t.getActivityCode()))).findFirst().orElse(null);
if (goodsDiscount != null){
List<ActivityDiscountsDto> productActivityDiscountsDtos = new ArrayList<>();
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
......@@ -403,7 +457,7 @@ public class CouponDiscountCalculation {
List<CouponProductVo> calculAmountProductList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(cartGoods)) {
cartGoods.forEach(cartGood -> {
if (StringUtils.isNotEmpty(cartGood.getCouponCode())) {
if (!StringUtils.equals(cartGood.getSkuId(),"9999") && StringUtils.isNotEmpty(cartGood.getCouponCode())) {
CouponProductVo couponProductVo = new CouponProductVo();
couponProductVo.setAmount(cartGood.getAmount().intValue());
couponProductVo.setKeyProductCode(cartGood.getCustomerCode());
......@@ -413,29 +467,6 @@ public class CouponDiscountCalculation {
couponProductVo.setCategoryCode(null);
calculAmountProductList.add(couponProductVo);
}
// if (CollectionUtils.isNotEmpty(cartGood.getProductComboList())) {
// cartGood.getProductComboList().forEach(comboxGoods -> {
// CouponProductVo couponProductVo = new CouponProductVo();
// couponProductVo.setAmount(Integer.valueOf(comboxGoods.getAmount().toString()));
// couponProductVo.setKeyProductCode(comboxGoods.getCustomerCode());
// couponProductVo.setQuantity(comboxGoods.getQty());
// couponProductVo.setProductId(comboxGoods.getGoodsId());
// couponProductVo.setCategoryCode(null);
// productList.add(couponProductVo);
// });
// }
// if (CollectionUtils.isNotEmpty(cartGood.getProductGroupList())) {
// cartGood.getProductGroupList().forEach(comboxGoods -> {
// CouponProductVo couponProductVo = new CouponProductVo();
// couponProductVo.setAmount(Integer.valueOf(comboxGoods.getAmount().toString()));
// couponProductVo.setKeyProductCode(comboxGoods.getCustomerCode());
// couponProductVo.setQuantity(comboxGoods.getQty());
// couponProductVo.setProductId(comboxGoods.getGoodsId());
// couponProductVo.setCategoryCode(null);
// productList.add(couponProductVo);
// });
// }
});
res.setProductList(cartGoods);
Long totalAmount = createProductRequest(cartGoods, calculAmountProductList);
......@@ -475,7 +506,7 @@ public class CouponDiscountCalculation {
try {
for (CartGoods cartGood : cartGoods) {
// 剔除商品券得商品
if (StringUtils.isEmpty(cartGood.getSkuId()) && StringUtils.isEmpty(cartGood.getSpuId())) {
if (StringUtils.isEmpty(cartGood.getSkuId()) && StringUtils.isEmpty(cartGood.getSpuId()) || StringUtils.equals("9999",cartGood.getSkuId())) {
continue;
}
// 剔除商品券得商品,麦咖啡逻辑
......
......@@ -105,9 +105,9 @@ public class BatchGoodsInfoVo {
*/
private int isMonthCard;
/**
* 是否为种子券商品 1:是;0:否
* 是否为月享卡商品
*/
private int isSeedCouponGoods;
private int isMonthCardGoods;
/**
* 月享卡加购信息
*/
......
......@@ -144,9 +144,9 @@ public class MCoffeeAddGoodsRequestVo {
*/
private int isMonthCard;
/**
* 是否为种子券商品 1:是;0:否
* 是否为月享卡商品
*/
private int isSeedCouponGoods;
private int isMonthCardGoods;
/**
* 月享卡加购信息
*/
......
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