Commit 3251655e by 孙昱

sunyu::update::月享卡2.0加购逻辑&&促销返回逻辑修改&&月享卡异常流程处理

parent 95b0fb32
...@@ -56,6 +56,12 @@ public class ActivityCalculationDiscountResponseDto { ...@@ -56,6 +56,12 @@ public class ActivityCalculationDiscountResponseDto {
* 总的优惠信息集合 * 总的优惠信息集合
*/ */
private List<Discount> discounts; private List<Discount> discounts;
/**
* 月享卡2.0优惠
*/
private MonthCardDiscount monthlyEnjoyCardDiscount;
/** /**
* 商品优惠信息 * 商品优惠信息
*/ */
...@@ -110,6 +116,34 @@ public class ActivityCalculationDiscountResponseDto { ...@@ -110,6 +116,34 @@ public class ActivityCalculationDiscountResponseDto {
private SendPoint sendPointVo; private SendPoint sendPointVo;
@Data
public static class MonthCardDiscount{
/**
* 月享卡2.0优惠总额
*/
private Long discountAmount;
/**
* 月享卡名称
*/
private String cardName;
/**
* 月享卡券号
*/
private String couponCode;
/**
* 券标识
*/
private String couponLogo;
/**
* 优惠标识
*/
private String discountLogo;
/**
* 优惠描述
*/
private String discountDesc;
}
@Data @Data
public static class ActivityPrompt { public static class ActivityPrompt {
......
...@@ -162,8 +162,11 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -162,8 +162,11 @@ public class ShoppingCartMCoffeeServiceImpl {
} }
productIds.add(Long.parseLong(goodsId)); productIds.add(Long.parseLong(goodsId));
List<ProductBeanDTO> productBeanListSpuClass = null;
// 获取添加商品的详细信息 // 获取添加商品的详细信息
List<ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId, Collections.singletonList(spuId2), menuType, this.shoppingCartBaseService); if (addShoppingCartGoodsRequestVo.getIsMonthCard() < 1) {
productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId, Collections.singletonList(spuId2), menuType, this.shoppingCartBaseService);
}
// 查询购物车缓存 // 查询购物车缓存
List<CartGoods> oldCartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, null, null, shoppingCartBaseService); List<CartGoods> oldCartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, null, null, shoppingCartBaseService);
...@@ -179,18 +182,14 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -179,18 +182,14 @@ public class ShoppingCartMCoffeeServiceImpl {
//加锁,防止重复请求导致的加购数量错误 //加锁,防止重复请求导致的加购数量错误
synchronized (oldCartGoodsList) { synchronized (oldCartGoodsList) {
//餐具和月享卡数量限制 //餐具和月享卡数量限制
if (mcCafeTablewareSkuId.equals(skuId) || Objects.equals(addShoppingCartGoodsRequestVo.getIsMonthCard(), 1)) { if (mcCafeTablewareSkuId.equals(skuId) || StringUtils.equals("9999",skuId)) {
for (CartGoods cartGoods : oldCartGoodsList) { for (CartGoods cartGoods : oldCartGoodsList) {
if (mcCafeTablewareSkuId.equals(cartGoods.getSkuId())) { if (mcCafeTablewareSkuId.equals(cartGoods.getSkuId())) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_ADD_ERROR.getCode(), "不能重复添加餐具商品"); return ResponseUtil.error(ResponseResult.SHOPPING_CART_ADD_ERROR.getCode(), "不能重复添加餐具商品");
} }
if (Objects.equals(addShoppingCartGoodsRequestVo.getIsMonthCard(), 1) && cartGoods.getQty() >= 10) { if (StringUtils.equals("9999",skuId)) {
shoppingCartGoodsResponseVo.setChanged(true);
shoppingCartGoodsResponseVo.setToastMsg("该商品单次购买数量限制为10,请知晓");
// 返回购物车数据 // 返回购物车数据
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, oldCartGoodsList, setAddAndUpdateResponse(shoppingCartGoodsResponseVo, oldCartGoodsList, null, ShoppingCartConstant.ADD_AND_UPDATE, null);
ResponseResult.SHOPPING_CART_ADD_ERROR.getMessage(), ShoppingCartConstant.ADD_AND_UPDATE
, null);
return ResponseUtil.success(shoppingCartGoodsResponseVo); return ResponseUtil.success(shoppingCartGoodsResponseVo);
} }
} }
...@@ -211,7 +210,14 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -211,7 +210,14 @@ public class ShoppingCartMCoffeeServiceImpl {
CustomerInfoVo userLoginInfoDto = getCustomerInfoVo(sessionId); CustomerInfoVo userLoginInfoDto = getCustomerInfoVo(sessionId);
couponName = getCouponNameByCode(couponCode, userLoginInfoDto, couponName = getCouponNameByCode(couponCode, userLoginInfoDto,
BusinessTypeEnum.getByType(addShoppingCartGoodsRequestVo.getMenuType()).getCode(), storeId); BusinessTypeEnum.getByType(addShoppingCartGoodsRequestVo.getMenuType()).getCode(), storeId);
addCartGoods.setCouponName(couponName); //月享卡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 +227,25 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -221,14 +227,25 @@ public class ShoppingCartMCoffeeServiceImpl {
setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS); setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS);
} }
// 购物车数据更新(保存商品原价) List<CartGoods> newCartGoods = null;
List<CartGoods> newCartGoods = updateCartGoodsLegal(partnerId, storeId, orderType, tableNumber, menuType, userId, addCartGoods, shoppingCartGoodsResponseVo, oldCartGoodsList); if ( addCartGoods.getIsMonthCard() < 1 ) {
// 购物车数据更新(保存商品原价)
// 促销活动等价格计算 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); // 促销活动等价格计算
// 重新保存购物车数据 calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
updateCartGoodsLegal(partnerId, storeId, orderType, tableNumber, menuType, userId, addCartGoods, shoppingCartGoodsResponseVo, oldCartGoodsList); newCartGoods, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo, null);
// 重新保存购物车数据
updateCartGoodsLegal(partnerId, storeId, orderType, tableNumber, menuType, userId, addCartGoods, shoppingCartGoodsResponseVo, oldCartGoodsList);
}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); setAddAndUpdateResponse(shoppingCartGoodsResponseVo, newCartGoods, null, ShoppingCartConstant.ADD_AND_UPDATE, null);
} }
...@@ -595,13 +612,19 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -595,13 +612,19 @@ public class ShoppingCartMCoffeeServiceImpl {
// 获取购物车商品 // 获取购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, sessionId, "", shoppingCartBaseService); List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, sessionId, "", shoppingCartBaseService);
log.info("cartGoodsList: {}",JSONObject.toJSONString(cartGoodsList)); log.info("cartGoodsList: {}",JSONObject.toJSONString(cartGoodsList));
CartGoods monthCardProduct = null;
// 如果购物车商品不为空, 则check购物车中所有商品 // 如果购物车商品不为空, 则check购物车中所有商品
if (CollectionUtils.isNotEmpty(cartGoodsList)) { if (CollectionUtils.isNotEmpty(cartGoodsList)) {
// check购物车中所有商品 // check购物车中所有商品
List<CartGoods> temList = new ArrayList<>(); List<CartGoods> temList = new ArrayList<>();
for (CartGoods goods : cartGoodsList) { for (CartGoods goods : cartGoodsList) {
if (StringUtils.equals(goods.getSkuId(),"9999")){
monthCardProduct = goods;
continue;
}
temList.addAll(checkCartGoods(partnerId, storeId, orderType, menuType, shoppingCartGoodsResponseVo, Arrays.asList(goods))); temList.addAll(checkCartGoods(partnerId, storeId, orderType, menuType, shoppingCartGoodsResponseVo, Arrays.asList(goods)));
} }
temList.add(monthCardProduct);
cartGoodsList = temList; cartGoodsList = temList;
if (CollectionUtils.isNotEmpty(cartGoodsList)) { if (CollectionUtils.isNotEmpty(cartGoodsList)) {
int size = cartGoodsList.size(); int size = cartGoodsList.size();
...@@ -2258,24 +2281,26 @@ public class ShoppingCartMCoffeeServiceImpl { ...@@ -2258,24 +2281,26 @@ public class ShoppingCartMCoffeeServiceImpl {
throw new ServiceException(ResponseResult.SHOPPING_CART_SEED_COUPON_VALID); throw new ServiceException(ResponseResult.SHOPPING_CART_SEED_COUPON_VALID);
} }
int seedCouponCount = 0; // int seedCouponCount = 0;
int seedCouponGoodsCount = 0; // int seedCouponGoodsCount = 0;
for (CartGoods cartGoods : oldCartGoodsList) { for (CartGoods cartGoods : oldCartGoodsList) {
//1.种子券商品券信息与月卡信息一致 //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); throw new ServiceException(ResponseResult.SHOPPING_CART_COUPON_NOT_EXIST);
} }
if (cartGoods.getIsMonthCard()>0){
seedCouponCount = seedCouponCount + cartGoods.getQty(); //@Date 2021-03-15 月享卡2.0需求不再校验月享卡商品购买次数限制
} // if (cartGoods.getIsMonthCard()>0){
if (cartGoods.getIsSeedCouponGoods()>0 && cartGoods.getIsMonthCard()<1){ // seedCouponCount = seedCouponCount + cartGoods.getQty();
seedCouponGoodsCount = seedCouponGoodsCount + cartGoods.getQty(); // }
} // if (cartGoods.getIsSeedCouponGoods()>0 && cartGoods.getIsMonthCard()<1){
// seedCouponGoodsCount = seedCouponGoodsCount + cartGoods.getQty();
// }
} }
//2.种子券商品数量不可大于种子券数量 //2.种子券商品数量不可大于种子券数量
if ((seedCouponGoodsCount+addShoppingCartGoodsRequestVo.getQty()) > seedCouponCount){ // if ((seedCouponGoodsCount+addShoppingCartGoodsRequestVo.getQty()) > seedCouponCount){
throw new ServiceException(ResponseResult.SHOPPING_CART_SEED_COUPON_VALID); // throw new ServiceException(ResponseResult.SHOPPING_CART_SEED_COUPON_VALID);
} // }
} }
} }
...@@ -97,6 +97,37 @@ public class CouponDiscountCalculation { ...@@ -97,6 +97,37 @@ public class CouponDiscountCalculation {
if (CollectionUtils.isEmpty(couponDiscounts)) { if (CollectionUtils.isEmpty(couponDiscounts)) {
return; return;
} }
/**
* 月享卡2.0 促销单独返回 月享卡优惠
*/
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.MonthCardDiscount monthCardDiscount = calculationDiscountResult.getMonthlyEnjoyCardDiscount();
if (null != monthCardDiscount){
Boolean hasMonCardDiscountVirtualProduct = false;
//如果购物车列表已有优惠项,则更新促销返回的优惠信息
for (CartGoods cartGoods : cartGoodsList) {
if (StringUtils.equals(cartGoods.getSkuId(),"9999")){
cartGoods.setAmount(monthCardDiscount.getDiscountAmount());
cartGoods.setCouponCode(monthCardDiscount.getCouponCode());
cartGoods.setPic(monthCardDiscount.getCouponLogo());
hasMonCardDiscountVirtualProduct = true;
}
}
//如果是菜单页加购月享卡商品.促销返回月享卡优惠后 虚拟一个 优惠项返回给前端
if (!hasMonCardDiscountVirtualProduct){
CartGoods virtualProduct = new CartGoods();
virtualProduct.setSkuId("9999");
virtualProduct.setSpuId("9999");
virtualProduct.setSkuName(monthCardDiscount.getCardName());
virtualProduct.setSpuName(monthCardDiscount.getCardName());
virtualProduct.setCouponCode(monthCardDiscount.getCouponCode());
virtualProduct.setPic(monthCardDiscount.getCouponLogo());
virtualProduct.setCouponName(monthCardDiscount.getCardName());
virtualProduct.setAmount(monthCardDiscount.getDiscountAmount());
cartGoodsList.add(virtualProduct);
}
}
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream() Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1)); .collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
......
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