Commit 5d924d09 by chongfu.liang

兼容老商品券

parent 230e33da
...@@ -110,7 +110,7 @@ public interface ShoppingCartNewService { ...@@ -110,7 +110,7 @@ public interface ShoppingCartNewService {
* *
* @param partnerId * @param partnerId
* @param storeId * @param storeId
* @param spuId * @param couponCode
* @param productIds * @param productIds
* @return * @return
*/ */
...@@ -140,7 +140,7 @@ public interface ShoppingCartNewService { ...@@ -140,7 +140,7 @@ public interface ShoppingCartNewService {
* *
* @param partnerId * @param partnerId
* @param storeId * @param storeId
* @param spuId * @param couponCode
* @param productIds * @param productIds
* @param menuType * @param menuType
* @param goodsId * @param goodsId
...@@ -300,7 +300,7 @@ public interface ShoppingCartNewService { ...@@ -300,7 +300,7 @@ public interface ShoppingCartNewService {
updateCartGoodsLegal(cartGoods, userId, shoppingCartGoodsResponseVo, addShoppingCartGoodsRequestVo, allCartGoodsList); updateCartGoodsLegal(cartGoods, userId, shoppingCartGoodsResponseVo, addShoppingCartGoodsRequestVo, allCartGoodsList);
// 如果购物车中有商品券,则当前添加的商品是特价商品时,需要提示“已选商品券,与其他优惠商品不同享,商品将恢复原价” // 如果购物车中有商品券,则当前添加的商品是特价商品时,需要提示“已选商品券,与其他优惠商品不同享,商品将恢复原价”
boolean haveCouponProduct = allCartGoodsList.parallelStream().anyMatch(k -> StringUtils.isNotBlank(k.getCouponCode())); boolean haveCouponProduct = allCartGoodsList.parallelStream().anyMatch(k -> (StringUtils.isNotBlank(k.getCouponCode()) || k.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)));
if (haveCouponProduct && isSpecialGoods(addShoppingCartGoodsRequestVo.getPartnerId(), addShoppingCartGoodsRequestVo.getShopId(), userId, addShoppingCartGoodsRequestVo.getAppId(), goodsId, addShoppingCartGoodsRequestVo.getOrderType())) { if (haveCouponProduct && isSpecialGoods(addShoppingCartGoodsRequestVo.getPartnerId(), addShoppingCartGoodsRequestVo.getShopId(), userId, addShoppingCartGoodsRequestVo.getAppId(), goodsId, addShoppingCartGoodsRequestVo.getOrderType())) {
// 如果购物车先加入商品券,再加入促销商品,toast提示“已选商品券,与其他优惠商品不同享,商品将恢复原价” // 如果购物车先加入商品券,再加入促销商品,toast提示“已选商品券,与其他优惠商品不同享,商品将恢复原价”
setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS); setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS);
......
...@@ -287,6 +287,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -287,6 +287,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
String receiveId = addShoppingCartGoodsRequestVo.getReceiveId(); String receiveId = addShoppingCartGoodsRequestVo.getReceiveId();
String tableNumber = addShoppingCartGoodsRequestVo.getTableNumber(); String tableNumber = addShoppingCartGoodsRequestVo.getTableNumber();
String couponCode = addShoppingCartGoodsRequestVo.getCouponCode(); // 商品券和换购券券号 String couponCode = addShoppingCartGoodsRequestVo.getCouponCode(); // 商品券和换购券券号
if (spuId.startsWith(CommonsConstant.COUPON_PREFIX)){ // 兼容老版本
couponCode = spuId.substring(CommonsConstant.COUPON_PREFIX.length());
}
CartGoods cartGoods = ShoppingCartConvertAdapter.convent2CartGoods(addShoppingCartGoodsRequestVo); CartGoods cartGoods = ShoppingCartConvertAdapter.convent2CartGoods(addShoppingCartGoodsRequestVo);
List<Long> productIds = new ArrayList<>(); List<Long> productIds = new ArrayList<>();
...@@ -1153,14 +1156,20 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1153,14 +1156,20 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
Map<String, CheckSpqInfoResponseDto> validCouponMap = new HashMap<>(16); Map<String, CheckSpqInfoResponseDto> validCouponMap = new HashMap<>(16);
for (int i = cartGoodsList.size() - 1; i >= 0; i--) { for (int i = cartGoodsList.size() - 1; i >= 0; i--) {
CartGoods cartGoods = cartGoodsList.get(i); CartGoods cartGoods = cartGoodsList.get(i);
String cartGoodsUid = cartGoods.getCartGoodsUid();
// 商品不是商品券 // 商品不是商品券
if (StringUtils.isBlank(cartGoods.getCouponCode())) { if (StringUtils.isBlank(cartGoods.getCouponCode()) && !cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)) {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, cartGoods); this.addCalculationDiscountGoods(calculationDiscountGoodsList, cartGoods);
} }
// 商品是商品券 // 商品是商品券
else { else {
// 商品券ID换取商品 // 商品券ID换取商品
String couponCode = cartGoods.getCouponCode(); String couponCode = "";
if (cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)){
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
} else {
couponCode = cartGoods.getCouponCode();
}
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType); CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
CheckSpqInfoResponseDto checkSpqInfoResponseDto = null; CheckSpqInfoResponseDto checkSpqInfoResponseDto = null;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) { if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
...@@ -1173,8 +1182,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1173,8 +1182,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
cartGoodsList.remove(i); cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService); assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
} else { } else {
if (cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)){
validCouponMap.put(couponCode, checkSpqInfoResponseDto); validCouponMap.put(couponCode, checkSpqInfoResponseDto);
} else {
validCouponMap.put(couponCode + checkSpqInfoResponseDto.getSkuId(), checkSpqInfoResponseDto); validCouponMap.put(couponCode + checkSpqInfoResponseDto.getSkuId(), checkSpqInfoResponseDto);
}
cartGoods.setName(checkSpqInfoResponseDto.getCouponName()); cartGoods.setName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName()); cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit()); cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit());
...@@ -1187,9 +1199,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1187,9 +1199,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
// 换购券传给促销要带code // 换购券传给促销要带code
String goodsId = StringUtils.isEmpty(checkSpqInfoResponseDto.getSkuId()) ? checkSpqInfoResponseDto.getSpuId() : checkSpqInfoResponseDto.getSkuId(); String goodsId = StringUtils.isEmpty(checkSpqInfoResponseDto.getSkuId()) ? checkSpqInfoResponseDto.getSpuId() : checkSpqInfoResponseDto.getSkuId();
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) { if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, goodsId, 1, checkSpqInfoResponseDto.getPrice(), 100, cartGoods.getCartGoodsUid(), cartGoods.getSpuId()); this.addCalculationDiscountGoods(calculationDiscountGoodsList, goodsId, 1, checkSpqInfoResponseDto.getPrice(), 100, cartGoodsUid, cartGoods.getSpuId());
} else { } else {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, goodsId, 1, checkSpqInfoResponseDto.getPrice(), 100, cartGoods.getCartGoodsUid()); this.addCalculationDiscountGoods(calculationDiscountGoodsList, goodsId, 1, checkSpqInfoResponseDto.getPrice(), 100, cartGoodsUid);
} }
} }
} }
...@@ -1699,8 +1711,14 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1699,8 +1711,14 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
} else { } else {
cartGoods.setGoodsType(GoodsTypeEnum.COUPON_GOODS.getGoodsType()); cartGoods.setGoodsType(GoodsTypeEnum.COUPON_GOODS.getGoodsType());
} }
if (StringUtils.isBlank(addShoppingCartGoodsRequestVo.getCouponCode())){ //老商品券
cartGoods.setCartGoodsUid(spuId);
} else {
cartGoods.setCouponCode(couponCode); cartGoods.setCouponCode(couponCode);
cartGoods.setSpuId(spuId); }
// 商品券Id
String spqId = spuId.substring(CommonsConstant.COUPON_PREFIX.length());
cartGoods.setSpuId(spqId);
cartGoods.setSkuId(spuId2); cartGoods.setSkuId(spuId2);
cartGoods.setOriginalPrice(0L); cartGoods.setOriginalPrice(0L);
cartGoods.setOriginalAmount(0L); cartGoods.setOriginalAmount(0L);
...@@ -1722,7 +1740,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1722,7 +1740,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
} }
} }
cartGoods.setStockLimit(stockLimit); cartGoods.setStockLimit(stockLimit);
List<String> goodsIds = allCartGoodsList.parallelStream().map(CartGoods::getGoodsId).collect(Collectors.toList()); List<String> goodsIds = allCartGoodsList.parallelStream().map(CartGoods::getGoodsId).collect(Collectors.toList());
boolean hasSpecialGoods = hasSpecialGoods(addShoppingCartGoodsRequestVo.getPartnerId(), addShoppingCartGoodsRequestVo.getShopId(), userId, addShoppingCartGoodsRequestVo.getAppId(), goodsIds, addShoppingCartGoodsRequestVo.getOrderType()); boolean hasSpecialGoods = hasSpecialGoods(addShoppingCartGoodsRequestVo.getPartnerId(), addShoppingCartGoodsRequestVo.getShopId(), userId, addShoppingCartGoodsRequestVo.getAppId(), goodsIds, addShoppingCartGoodsRequestVo.getOrderType());
// 如果购物车先加入促销活动的商品,再加入商品券时,toast提示“该商品券与其他活动不同享,购物车中已优惠的商品将恢复原价” // 如果购物车先加入促销活动的商品,再加入商品券时,toast提示“该商品券与其他活动不同享,购物车中已优惠的商品将恢复原价”
......
...@@ -84,11 +84,16 @@ public class CalculationSharingDiscountService { ...@@ -84,11 +84,16 @@ public class CalculationSharingDiscountService {
int cartSize = cartGoodsList.size() - 1; int cartSize = cartGoodsList.size() - 1;
for (int i = cartSize; i >= 0; i--) { for (int i = cartSize; i >= 0; i--) {
CartGoods cartGoods = cartGoodsList.get(i); CartGoods cartGoods = cartGoodsList.get(i);
if (StringUtils.isBlank(cartGoods.getCouponCode())) {//非商品券 if (StringUtils.isBlank(cartGoods.getCouponCode()) && !cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {//非商品券
this.setCommonDiscountGoods(calculationDiscountGoodsList,cartGoods); this.setCommonDiscountGoods(calculationDiscountGoodsList,cartGoods);
} }
else {//商品券->商品券ID换取商品 else {//商品券->商品券ID换取商品
String couponCode = cartGoods.getCouponCode(); String couponCode = cartGoods.getCouponCode();
boolean useCoupon = true; // 优惠券放在coupon字段而不是uuid中
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)){
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
useCoupon = false;
}
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType); CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
CheckSpqInfoResponseDto checkSpqInfo = null; CheckSpqInfoResponseDto checkSpqInfo = null;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) { if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
...@@ -103,8 +108,11 @@ public class CalculationSharingDiscountService { ...@@ -103,8 +108,11 @@ public class CalculationSharingDiscountService {
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService); assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
//跑业务异常 商品券不存 //跑业务异常 商品券不存
} else { } else {
validCouponMap.put(couponCode, checkSpqInfo); if(useCoupon){
validCouponMap.put(couponCode + checkSpqInfo.getSkuId(), checkSpqInfo); validCouponMap.put(couponCode + checkSpqInfo.getSkuId(), checkSpqInfo);
} else{
validCouponMap.put(couponCode, checkSpqInfo);
}
cartGoods.setName(checkSpqInfo.getCouponName()); cartGoods.setName(checkSpqInfo.getCouponName());
cartGoods.setSpuName(checkSpqInfo.getCouponName()); cartGoods.setSpuName(checkSpqInfo.getCouponName());
cartGoods.setStockLimit(checkSpqInfo.isStockLimit()); cartGoods.setStockLimit(checkSpqInfo.isStockLimit());
......
...@@ -45,7 +45,8 @@ public class CouponSharingService { ...@@ -45,7 +45,8 @@ public class CouponSharingService {
,ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) { ,ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
// 用户选择了查询优惠券信息 // 用户选择了查询优惠券信息
if (couponPromotionVO != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionVO.getFlg())) { if (couponPromotionVO != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionVO.getFlg())) {
List<CartGoods> tmpCartGoods = cartGoodsList.parallelStream().filter(k -> StringUtils.isNotBlank(k.getCouponCode())).collect(Collectors.toList()); List<CartGoods> tmpCartGoods = cartGoodsList.parallelStream().filter(k -> (StringUtils.isNotBlank(k.getCouponCode()) || k.getCartGoodsUid()
.startsWith(CommonsConstant.COUPON_PREFIX))).collect(Collectors.toList());
// 是否存在商品券 // 是否存在商品券
boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods); boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods);
// 构建可用不可用优惠券 // 构建可用不可用优惠券
...@@ -83,12 +84,22 @@ public class CouponSharingService { ...@@ -83,12 +84,22 @@ public class CouponSharingService {
shoppingCartGoodsResponseVo.setCouponDiscount(couponDiscount); shoppingCartGoodsResponseVo.setCouponDiscount(couponDiscount);
//循环购物车商品券 //循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
if (StringUtils.isNotBlank(cartGoods.getCouponCode())) { if (StringUtils.isNotBlank(cartGoods.getCouponCode()) || cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
String couponCode = cartGoods.getCouponCode(); String couponCode = cartGoods.getCouponCode();
boolean useCoupon = true; // 优惠券放在coupon字段而不是uuid中
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)){
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
useCoupon = false;
}
// 计算优惠信息时,已将券校验过,放在map中 // 计算优惠信息时,已将券校验过,放在map中
Map<String, CheckSpqInfoResponseDto> validCouponMap = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getValidCouponMap(); Map<String, CheckSpqInfoResponseDto> validCouponMap = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getValidCouponMap();
if (MapUtils.isNotEmpty(validCouponMap)) { if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(couponCode + cartGoods.getSkuId()); CheckSpqInfoResponseDto checkSpqInfoResponseDto;
if(useCoupon){
checkSpqInfoResponseDto = validCouponMap.get(couponCode + cartGoods.getSkuId());
} else{
checkSpqInfoResponseDto = validCouponMap.get(couponCode);
}
if (checkSpqInfoResponseDto != null) { if (checkSpqInfoResponseDto != null) {
cartGoods.setOriginalPrice(checkSpqInfoResponseDto.getPrice()); cartGoods.setOriginalPrice(checkSpqInfoResponseDto.getPrice());
cartGoods.setSpuId(checkSpqInfoResponseDto.getSpuId()); cartGoods.setSpuId(checkSpqInfoResponseDto.getSpuId());
...@@ -126,12 +137,22 @@ public class CouponSharingService { ...@@ -126,12 +137,22 @@ public class CouponSharingService {
} }
//循环购物车商品券 //循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
if (StringUtils.isNotBlank(cartGoods.getCouponCode())) { if (StringUtils.isNotBlank(cartGoods.getCouponCode()) || cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
String couponCode = cartGoods.getCouponCode(); String couponCode = cartGoods.getCouponCode();
boolean useCoupon = true; // 优惠券放在coupon字段而不是uuid中
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)){
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
useCoupon = false;
}
// 计算优惠信息时,已将券校验过,放在map中 // 计算优惠信息时,已将券校验过,放在map中
Map<String, CheckSpqInfoResponseDto> validCouponMap = discountResult == null ? new HashMap<>() : discountResult.getValidCouponMap(); Map<String, CheckSpqInfoResponseDto> validCouponMap = discountResult == null ? new HashMap<>() : discountResult.getValidCouponMap();
if (MapUtils.isNotEmpty(validCouponMap)) { if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(couponCode + cartGoods.getSkuId()); CheckSpqInfoResponseDto checkSpqInfoResponseDto;
if(useCoupon){
checkSpqInfoResponseDto = validCouponMap.get(couponCode + cartGoods.getSkuId());
} else{
checkSpqInfoResponseDto = validCouponMap.get(couponCode);
}
if (checkSpqInfoResponseDto != null) { if (checkSpqInfoResponseDto != null) {
cartGoods.setOriginalPrice(checkSpqInfoResponseDto.getPrice()); cartGoods.setOriginalPrice(checkSpqInfoResponseDto.getPrice());
cartGoods.setSpuId(checkSpqInfoResponseDto.getSpuId()); cartGoods.setSpuId(checkSpqInfoResponseDto.getSpuId());
......
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