Commit 230e33da by chongfu.liang

频次券支持一笔订单多商品

parent 91ae36bb
...@@ -393,7 +393,10 @@ public interface ShoppingCartBaseService { ...@@ -393,7 +393,10 @@ public interface ShoppingCartBaseService {
//获取所有商品券cartGoodsUid=sqp+code //获取所有商品券cartGoodsUid=sqp+code
List<String> couponIds = cartGoodsList.parallelStream() List<String> couponIds = cartGoodsList.parallelStream()
.filter(k ->StringUtils.isNotEmpty(k.getCartGoodsUid())&& k.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)).map(CartGoods::getSpuId).collect(Collectors.toList()); .filter(k ->StringUtils.isNotEmpty(k.getCartGoodsUid())&& k.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)).map(CartGoods::getSpuId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(couponIds)) {
couponIds = cartGoodsList.parallelStream()
.filter(k ->StringUtils.isNotBlank(k.getCouponCode())).map(CartGoods::getCouponCode).collect(Collectors.toList());
}
if (CollectionUtils.isEmpty(couponIds)) { if (CollectionUtils.isEmpty(couponIds)) {
return goodsStates; return goodsStates;
} }
...@@ -434,6 +437,11 @@ public interface ShoppingCartBaseService { ...@@ -434,6 +437,11 @@ public interface ShoppingCartBaseService {
List<CartGoods> cartGoodsByProduct = cartGoodsList.stream() List<CartGoods> cartGoodsByProduct = cartGoodsList.stream()
.filter(cartGoods -> cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) .filter(cartGoods -> cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX))
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtils.isEmpty(cartGoodsByProduct)){
cartGoodsByProduct = cartGoodsList.stream()
.filter(cartGoods -> StringUtils.isNotBlank(cartGoods.getCouponCode()))
.collect(Collectors.toList());
}
for (CartGoods cartGoods : cartGoodsByProduct) { for (CartGoods cartGoods : cartGoodsByProduct) {
DetailVO detail = detailsMap.get(cartGoods.getSpuId()); DetailVO detail = detailsMap.get(cartGoods.getSpuId());
String activeCode = detail != null ? detail.getActiveCode() : ""; String activeCode = detail != null ? detail.getActiveCode() : "";
......
...@@ -414,7 +414,7 @@ public class ShoppingCartConvertAdapter { ...@@ -414,7 +414,7 @@ public class ShoppingCartConvertAdapter {
cartGoods.setQty(qty); cartGoods.setQty(qty);
cartGoods.setCouponCode(addShoppingCartGoodsRequestVo.getCouponCode()); cartGoods.setCouponCode(addShoppingCartGoodsRequestVo.getCouponCode());
Integer goodsType = StringUtils.isEmpty(skuId)||ObjectUtils.equals(spuId,skuId) ? GoodsTypeEnum.SPU_GOODS.getGoodsType() : GoodsTypeEnum.SKU_GOODS.getGoodsType(); Integer goodsType = StringUtils.isEmpty(skuId)||ObjectUtils.equals(spuId,skuId) ? GoodsTypeEnum.SPU_GOODS.getGoodsType() : GoodsTypeEnum.SKU_GOODS.getGoodsType();
if (spuId.startsWith(CommonsConstant.COUPON_PREFIX)) { if (spuId.startsWith(CommonsConstant.COUPON_PREFIX) || StringUtils.isNotBlank(addShoppingCartGoodsRequestVo.getCouponCode())) {
goodsType = GoodsTypeEnum.COUPON_GOODS.getGoodsType(); goodsType = GoodsTypeEnum.COUPON_GOODS.getGoodsType();
} else if (CollectionUtils.isNotEmpty(addShoppingCartGoodsRequestVo.getProductComboList()) || CollectionUtils.isNotEmpty(addShoppingCartGoodsRequestVo.getProductGroupList())) { } else if (CollectionUtils.isNotEmpty(addShoppingCartGoodsRequestVo.getProductComboList()) || CollectionUtils.isNotEmpty(addShoppingCartGoodsRequestVo.getProductGroupList())) {
goodsType = GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(); goodsType = GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType();
......
...@@ -116,12 +116,12 @@ public interface ShoppingCartNewService { ...@@ -116,12 +116,12 @@ public interface ShoppingCartNewService {
*/ */
default String validCoupon(String partnerId default String validCoupon(String partnerId
, String storeId , String storeId
, String spuId , String couponCode
, List<Long> productIds , List<Long> productIds
, String menuType , String menuType
, CouponProductDto couponProductDto) { , CouponProductDto couponProductDto) {
String spuId2; String spuId2;
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, spuId.substring(CommonsConstant.COUPON_PREFIX.length()), menuType); CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
CouponService couponService = SDKCommonBaseContextWare.getBean(CouponService.class); CouponService couponService = SDKCommonBaseContextWare.getBean(CouponService.class);
CheckSpqInfoResponseDto checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto); CheckSpqInfoResponseDto checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto);
if (checkSpqInfoResponseDto == null) { if (checkSpqInfoResponseDto == null) {
...@@ -148,13 +148,13 @@ public interface ShoppingCartNewService { ...@@ -148,13 +148,13 @@ public interface ShoppingCartNewService {
*/ */
default String validCoupon(String partnerId default String validCoupon(String partnerId
, String storeId , String storeId
, String spuId , String couponCode
, List<Long> productIds , List<Long> productIds
, String menuType , String menuType
, String goodsId , String goodsId
, CouponProductDto couponProductDto) { , CouponProductDto couponProductDto) {
String spuId2; String spuId2;
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, spuId.substring(CommonsConstant.COUPON_PREFIX.length()), menuType); CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
CouponService couponService = SDKCommonBaseContextWare.getBean(CouponService.class); CouponService couponService = SDKCommonBaseContextWare.getBean(CouponService.class);
CheckSpqInfoResponseDto checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto, goodsId); CheckSpqInfoResponseDto checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto, goodsId);
LogUtil.info("validCoupon.CheckSpqInfoResponseDto", JSON.toJSONString(checkSpqInfoRequestDto),JSON.toJSONString(checkSpqInfoResponseDto)); LogUtil.info("validCoupon.CheckSpqInfoResponseDto", JSON.toJSONString(checkSpqInfoRequestDto),JSON.toJSONString(checkSpqInfoResponseDto));
...@@ -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 -> k.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)); boolean haveCouponProduct = allCartGoodsList.parallelStream().anyMatch(k -> StringUtils.isNotBlank(k.getCouponCode()));
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);
......
...@@ -46,8 +46,8 @@ public class CouponPromotionService implements IPromotionService { ...@@ -46,8 +46,8 @@ public class CouponPromotionService implements IPromotionService {
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, UserLoginInfoDto userLoginInfoDto, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) { public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, UserLoginInfoDto userLoginInfoDto, 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 -> k.getCartGoodsUid() List<CartGoods> tmpCartGoods = cartGoodsList.parallelStream().filter(k -> (k.getCartGoodsUid()
.startsWith(CommonsConstant.COUPON_PREFIX)).collect(Collectors.toList()); .startsWith(CommonsConstant.COUPON_PREFIX) || StringUtils.isNotBlank(k.getCouponCode()))).collect(Collectors.toList());
// 是否存在商品券 // 是否存在商品券
boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods); boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods);
// 构建可用不可用优惠券 // 构建可用不可用优惠券
...@@ -85,12 +85,22 @@ public class CouponPromotionService implements IPromotionService { ...@@ -85,12 +85,22 @@ public class CouponPromotionService implements IPromotionService {
shoppingCartGoodsResponseVo.setCouponDiscount(couponDiscount); shoppingCartGoodsResponseVo.setCouponDiscount(couponDiscount);
//循环购物车商品券 //循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) { String couponCode = cartGoods.getCouponCode();
String spqId = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length()); 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)) {
// 计算优惠信息时,已将券校验过,放在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(spqId); CheckSpqInfoResponseDto checkSpqInfoResponseDto = null;
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());
......
...@@ -84,12 +84,12 @@ public class CalculationSharingDiscountService { ...@@ -84,12 +84,12 @@ 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 (!cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {//非商品券 if (StringUtils.isBlank(cartGoods.getCouponCode())) {//非商品券
this.setCommonDiscountGoods(calculationDiscountGoodsList,cartGoods); this.setCommonDiscountGoods(calculationDiscountGoodsList,cartGoods);
} }
else {//商品券->商品券ID换取商品 else {//商品券->商品券ID换取商品
String spqId = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length()); String couponCode = cartGoods.getCouponCode();
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, spqId, 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())) {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId()); checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
...@@ -103,7 +103,8 @@ public class CalculationSharingDiscountService { ...@@ -103,7 +103,8 @@ 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(spqId, checkSpqInfo); validCouponMap.put(couponCode, checkSpqInfo);
validCouponMap.put(couponCode + checkSpqInfo.getSkuId(), 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,8 +45,7 @@ public class CouponSharingService { ...@@ -45,8 +45,7 @@ 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 -> k.getCartGoodsUid() List<CartGoods> tmpCartGoods = cartGoodsList.parallelStream().filter(k -> StringUtils.isNotBlank(k.getCouponCode())).collect(Collectors.toList());
.startsWith(CommonsConstant.COUPON_PREFIX)).collect(Collectors.toList());
// 是否存在商品券 // 是否存在商品券
boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods); boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods);
// 构建可用不可用优惠券 // 构建可用不可用优惠券
...@@ -84,12 +83,12 @@ public class CouponSharingService { ...@@ -84,12 +83,12 @@ public class CouponSharingService {
shoppingCartGoodsResponseVo.setCouponDiscount(couponDiscount); shoppingCartGoodsResponseVo.setCouponDiscount(couponDiscount);
//循环购物车商品券 //循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) { if (StringUtils.isNotBlank(cartGoods.getCouponCode())) {
String spqId = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length()); String couponCode = cartGoods.getCouponCode();
// 计算优惠信息时,已将券校验过,放在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(spqId); CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(couponCode + cartGoods.getSkuId());
if (checkSpqInfoResponseDto != null) { if (checkSpqInfoResponseDto != null) {
cartGoods.setOriginalPrice(checkSpqInfoResponseDto.getPrice()); cartGoods.setOriginalPrice(checkSpqInfoResponseDto.getPrice());
cartGoods.setSpuId(checkSpqInfoResponseDto.getSpuId()); cartGoods.setSpuId(checkSpqInfoResponseDto.getSpuId());
...@@ -127,12 +126,12 @@ public class CouponSharingService { ...@@ -127,12 +126,12 @@ public class CouponSharingService {
} }
//循环购物车商品券 //循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) { if (StringUtils.isNotBlank(cartGoods.getCouponCode())) {
String spqId = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length()); String couponCode = cartGoods.getCouponCode();
// 计算优惠信息时,已将券校验过,放在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(spqId); CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(couponCode + cartGoods.getSkuId());
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