Commit 8c26e910 by 周晓航

fix-券商品展示问题

Signed-off-by: 周晓航 <xiaohang.zhou@freemud.com>
parent b2be7900
package cn.freemud.handle; package cn.freemud.handle;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.dto.calculate.CalculationDiscountResult;
import cn.freemud.entities.dto.calculate.Discount; import cn.freemud.entities.dto.calculate.Discount;
import cn.freemud.entities.dto.calculate.Goods;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo; import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.entities.vo.SubtractStockVO; import cn.freemud.entities.vo.SubtractStockVO;
import cn.freemud.enums.ActivityTypeEnum; import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.GoodsTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.HashMap; import java.util.HashMap;
...@@ -17,7 +25,7 @@ import java.util.stream.Collectors; ...@@ -17,7 +25,7 @@ import java.util.stream.Collectors;
* @author : xh.Z * @author : xh.Z
* @email : fisherman0510@163.com * @email : fisherman0510@163.com
* @Date : 2021/11/18 下午2:42 * @Date : 2021/11/18 下午2:42
* @description : * @description : 一点点挪动相同代码 解决代码冗余
*/ */
@Component @Component
public class PromotionCommonMethodHandle { public class PromotionCommonMethodHandle {
...@@ -63,4 +71,72 @@ public class PromotionCommonMethodHandle { ...@@ -63,4 +71,72 @@ public class PromotionCommonMethodHandle {
} }
return stocks; return stocks;
} }
/**
* 新老算价 提取公共代码
*
* @param cartGoodsList
* @param calculationDiscountResult
*/
public void cartGoodsSetAttributeCommon(List<CartGoods> cartGoodsList,
CalculationDiscountResult calculationDiscountResult) {
Map<String, CheckSpqInfoResponseDto> validCouponMap = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getValidCouponMap();
for (CartGoods cartGoods : cartGoodsList) {
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;
}
List<CartGoods.CartGoodsExtra> extra = cartGoods.getExtra();
// fisherman bug修复,买m赠n券商品属性未展示问题
if (CollectionUtils.isNotEmpty(extra)) {
List<String> specIdList = extra.stream().map(CartGoods.CartGoodsExtra::getAttributeId).collect(Collectors.toList());
List<String> specNameList = extra.stream().map(CartGoods.CartGoodsExtra::getAttributeName).collect(Collectors.toList());
cartGoods.setSpecProductId(StringUtils.join(specIdList, "/"));
cartGoods.setSubName(StringUtils.join(specNameList, "/"));
}
if (StringUtils.isNotBlank(couponCode)) {
// 计算优惠信息时,已将券校验过,放在map中
if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto = null;
if (useCoupon) {
checkSpqInfoResponseDto = validCouponMap.get(couponCode + cartGoods.getSkuId());
} else {
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(cartGoods.getQty());
cartGoods.setCouponCode(checkSpqInfoResponseDto.getCouponCode());
cartGoods.setSpuName(checkSpqInfoResponseDto.getSpuName());
cartGoods.setSpecProductId(checkSpqInfoResponseDto.getDefaultSpecId());
cartGoods.setSubName(checkSpqInfoResponseDto.getDefaultSpecName());
cartGoods.setExtra(checkSpqInfoResponseDto.getExtras());
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
Goods discountGoods = null;
if (CollectionUtils.isNotEmpty(calculationDiscountResult.getGoods())) {
discountGoods = calculationDiscountResult.getGoods()
.stream()
.filter(d -> cartGoods.getCartGoodsUid().equals(d.getCartGoodsUid()))
.findFirst()
.orElse(null);
}
if (discountGoods != null) {
cartGoods.setAmount(discountGoods.getRealAmount());
} else {
cartGoods.setAmount(checkSpqInfoResponseDto.getPrice() * cartGoods.getQty());
}
}
cartGoods.setOriginalAmount(checkSpqInfoResponseDto.getPrice() * cartGoods.getQty());
}
}
}
}
}
} }
...@@ -9,7 +9,7 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; ...@@ -9,7 +9,7 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum; import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.AvailableCouponQueryFlagEnum; import cn.freemud.enums.AvailableCouponQueryFlagEnum;
import cn.freemud.enums.GoodsTypeEnum; import cn.freemud.handle.PromotionCommonMethodHandle;
import cn.freemud.service.CouponService; import cn.freemud.service.CouponService;
import cn.freemud.service.IPromotionService; import cn.freemud.service.IPromotionService;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant; import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
...@@ -49,6 +49,9 @@ public class CouponPromotionService implements IPromotionService { ...@@ -49,6 +49,9 @@ public class CouponPromotionService implements IPromotionService {
@Autowired @Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService; private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Autowired
private PromotionCommonMethodHandle promotionCommonMethodHandle;
@Override @Override
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto, public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto,
CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList,
...@@ -144,71 +147,15 @@ public class CouponPromotionService implements IPromotionService { ...@@ -144,71 +147,15 @@ public class CouponPromotionService implements IPromotionService {
} }
} }
if (Objects.isNull(couponPromotionVO)) {
//循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) {
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;
}
if (StringUtils.isNotBlank(couponCode)) {
List<String> validCouponCodeLis = new ArrayList<>();
if (couponPromotionVO != null && !ObjectUtils.equals(AvailableCouponQueryFlagEnum.NO.getCode(), couponPromotionVO.getAvailableCouponQueryFlag())){
validCouponCodeLis = shoppingCartGoodsResponseVo.getAvailableCoupon().getUsableCoupons().stream().map(ActivityCouponBean::getCouponCode).collect(Collectors.toList());
} else {
couponPromotionVO = new CouponPromotionVO(); couponPromotionVO = new CouponPromotionVO();
couponPromotionVO.setUserId(userLoginInfoDto.getMemberId()); couponPromotionVO.setUserId(userLoginInfoDto.getMemberId());
couponPromotionVO.setStoreId(activityQueryDto.getStoreId()); couponPromotionVO.setStoreId(activityQueryDto.getStoreId());
couponPromotionVO.setPartnerId(activityQueryDto.getPartnerId()); couponPromotionVO.setPartnerId(activityQueryDto.getPartnerId());
couponPromotionVO.setOrderType(activityQueryDto.getOrderType()); couponPromotionVO.setOrderType(activityQueryDto.getOrderType());
} }
// couponService.checkValidCoupon(couponPromotionVO, validCouponCodeLis, spqIdToCartUuid, couponCode, cartGoodsList); // 新老算价 提取公共代码
promotionCommonMethodHandle.cartGoodsSetAttributeCommon(cartGoodsList, calculationDiscountResult);
// 计算优惠信息时,已将券校验过,放在map中
if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto = null;
if(useCoupon){
checkSpqInfoResponseDto = validCouponMap.get(couponCode + cartGoods.getSkuId());
} else{
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(cartGoods.getQty());
cartGoods.setCouponCode(checkSpqInfoResponseDto.getCouponCode());
cartGoods.setSpuName(checkSpqInfoResponseDto.getSpuName());
List<CartGoods.CartGoodsExtra> extra = cartGoods.getExtra();
if (CollectionUtils.isNotEmpty(extra)){
List<String> specIdList = extra.stream().map(CartGoods.CartGoodsExtra::getAttributeId).collect(Collectors.toList());
List<String> specNameList = extra.stream().map(CartGoods.CartGoodsExtra::getAttributeName).collect(Collectors.toList());
cartGoods.setSpecProductId(StringUtils.join(specIdList, "/"));
cartGoods.setSubName(StringUtils.join(specNameList, "/"));
} else {
cartGoods.setSpecProductId(checkSpqInfoResponseDto.getDefaultSpecId());
cartGoods.setSubName(checkSpqInfoResponseDto.getDefaultSpecName());
cartGoods.setExtra(checkSpqInfoResponseDto.getExtras());
}
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
Goods discountGoods = calculationDiscountResult.getGoods()
.stream()
.filter(d -> cartGoods.getCartGoodsUid().equals(d.getCartGoodsUid()))
.findFirst()
.orElse(null);
if (discountGoods != null) {
cartGoods.setAmount(discountGoods.getRealAmount());
} else {
cartGoods.setAmount(checkSpqInfoResponseDto.getPrice() * cartGoods.getQty());
}
}
cartGoods.setOriginalAmount(checkSpqInfoResponseDto.getPrice() * cartGoods.getQty());
}
}
}
}
} }
......
...@@ -8,6 +8,7 @@ import cn.freemud.entities.vo.*; ...@@ -8,6 +8,7 @@ import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum; import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.AvailableCouponQueryFlagEnum; import cn.freemud.enums.AvailableCouponQueryFlagEnum;
import cn.freemud.enums.GoodsTypeEnum; import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.handle.PromotionCommonMethodHandle;
import cn.freemud.service.CouponService; import cn.freemud.service.CouponService;
import cn.freemud.service.impl.AssortmentSdkService; import cn.freemud.service.impl.AssortmentSdkService;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant; import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
...@@ -45,6 +46,8 @@ public class CouponSharingService { ...@@ -45,6 +46,8 @@ public class CouponSharingService {
@Autowired @Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService; private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Autowired
private PromotionCommonMethodHandle promotionCommonMethodHandle;
public void updateShoppingCartGoodsDiscount(CalculationDiscountResult calculationDiscountResult public void updateShoppingCartGoodsDiscount(CalculationDiscountResult calculationDiscountResult
, List<CartGoods> cartGoodsList , List<CartGoods> cartGoodsList
...@@ -132,72 +135,17 @@ public class CouponSharingService { ...@@ -132,72 +135,17 @@ public class CouponSharingService {
} }
} }
} }
//循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) { if (Objects.isNull(couponPromotionVO)) {
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;
}
List<String> validCouponCodeLis = new ArrayList<>();
if (couponPromotionVO != null && !ObjectUtils.equals(AvailableCouponQueryFlagEnum.NO.getCode(), couponPromotionVO.getAvailableCouponQueryFlag())){
validCouponCodeLis = shoppingCartGoodsResponseVo.getAvailableCoupon().getUsableCoupons().stream().map(ActivityCouponBean::getCouponCode).collect(Collectors.toList());
} else {
couponPromotionVO = new CouponPromotionVO(); couponPromotionVO = new CouponPromotionVO();
couponPromotionVO.setUserId(userId); couponPromotionVO.setUserId(userId);
couponPromotionVO.setStoreId(storeId); couponPromotionVO.setStoreId(storeId);
couponPromotionVO.setPartnerId(partnerId); couponPromotionVO.setPartnerId(partnerId);
couponPromotionVO.setOrderType(orderType); couponPromotionVO.setOrderType(orderType);
} }
// couponService.checkValidCoupon(couponPromotionVO, validCouponCodeLis, spqIdToCartUuid, couponCode, cartGoodsList); // 新老算价 提取公共代码
promotionCommonMethodHandle.cartGoodsSetAttributeCommon(cartGoodsList, calculationDiscountResult);
// fisherman bug修复,买m赠n券商品属性未展示问题
List<CartGoods.CartGoodsExtra> extra = cartGoods.getExtra();
if (CollectionUtils.isNotEmpty(extra)){
List<String> specIdList = extra.stream().map(CartGoods.CartGoodsExtra::getAttributeId).collect(Collectors.toList());
List<String> specNameList = extra.stream().map(CartGoods.CartGoodsExtra::getAttributeName).collect(Collectors.toList());
List<String> foreignSpecNameList = extra.stream().map(CartGoods.CartGoodsExtra::getAttributeForeignName).collect(Collectors.toList());
cartGoods.setSpecProductId(StringUtils.join(specIdList, "/"));
cartGoods.setSubName(StringUtils.join(specNameList, "/"));
cartGoods.setSubForeignName(StringUtils.join(foreignSpecNameList, "/"));
}
// 计算优惠信息时,已将券校验过,放在map中
if (MapUtils.isNotEmpty(validCouponMap)) {
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());
cartGoods.setSkuId(StringUtils.isEmpty(checkSpqInfoResponseDto.getSkuId()) ? checkSpqInfoResponseDto.getSpuId() : checkSpqInfoResponseDto.getSkuId());
cartGoods.setQty(cartGoods.getQty());
cartGoods.setCouponCode(checkSpqInfoResponseDto.getCouponCode());
cartGoods.setSpuName(checkSpqInfoResponseDto.getSpuName());
cartGoods.setSpecProductId(checkSpqInfoResponseDto.getDefaultSpecId());
cartGoods.setSubName(checkSpqInfoResponseDto.getDefaultSpecName());
cartGoods.setExtra(checkSpqInfoResponseDto.getExtras());
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
Goods discountGoods = calculationDiscountResult.getGoods()
.stream()
.filter(d -> cartGoods.getCartGoodsUid().equals(d.getCartGoodsUid()))
.findFirst()
.orElse(null);
if (discountGoods != null) {
cartGoods.setAmount(discountGoods.getRealAmount());
} else {
cartGoods.setAmount(checkSpqInfoResponseDto.getPrice() * cartGoods.getQty());
}
}
cartGoods.setOriginalAmount(checkSpqInfoResponseDto.getPrice() * cartGoods.getQty());
}
}
}
}
} }
public void equally(CalculationDiscountResult discountResult public void equally(CalculationDiscountResult discountResult
......
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