Commit 5d924d09 by chongfu.liang

兼容老商品券

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