Commit 2a6756ed by chongfu.liang

商品券和换购券添加启用金额

parent a1360bfa
......@@ -90,6 +90,10 @@ public class ActivityCalculationDiscountResponseDto {
*/
private Map<String, CheckSpqInfoResponseDto> validCouponMap;
/**
* 校验后有效的spqid对应的uuid
*/
private Map<String, List<String>> spqIdToCartUuid;
/**
* 扣减库存
*/
private List<SubtractStockVO> stocks;
......
......@@ -88,6 +88,11 @@ public class CalculationSharingDiscountResponseDto {
*/
private Map<String, CheckSpqInfoResponseDto> validCouponMap;
/**
* 校验后有效的spqid对应的uuid
*/
private Map<String, List<String>> spqIdToCartUuid;
/**
* 扣减库存
*/
private List<SubtractStockVO> stocks;
......
......@@ -13,6 +13,7 @@ import cn.freemud.enums.*;
import cn.freemud.service.CouponService;
import cn.freemud.service.IPromotionService;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
......@@ -42,8 +43,17 @@ public class CouponPromotionService implements IPromotionService {
@Autowired
private CouponService couponService;
@Autowired
private AssortmentSdkService assortmentSdkService;
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Override
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())) {
List<CartGoods> tmpCartGoods = cartGoodsList.parallelStream().filter(k -> k.getCartGoodsUid()
......@@ -83,12 +93,31 @@ public class CouponPromotionService implements IPromotionService {
}
}
shoppingCartGoodsResponseVo.setCouponDiscount(couponDiscount);
Map<String, CheckSpqInfoResponseDto> validCouponMap = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getValidCouponMap();
Map<String, List<String>> spqIdToCartUuid = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getSpqIdToCartUuid();
if (MapUtils.isNotEmpty(validCouponMap) && MapUtils.isNotEmpty(spqIdToCartUuid) && calculationDiscountResult != null){
List<String> activityCodeList = calculationDiscountResult.getDiscounts().stream().map(p -> p.getActivityCode()).collect(Collectors.toList());
for (String spqId : validCouponMap.keySet()) {
if (!activityCodeList.contains(spqId)){ // 表示商品券不够启用金额
List<String> uuidList = spqIdToCartUuid.get(spqId);
if (CollectionUtils.isNotEmpty(uuidList)){
List<CartGoods> newCartList = cartGoodsList.stream().filter(p -> !uuidList.contains(p.getCartGoodsUid())).collect(Collectors.toList());
assortmentSdkService.setShoppingCart(shoppingCartInfoRequestVo.getPartnerId(), shoppingCartInfoRequestVo.getShopId(), userLoginInfoDto.getMemberId(), newCartList, null, null, this.shoppingCartBaseService);
CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(spqId);
shoppingCartGoodsResponseVo.setChanged(true);
shoppingCartGoodsResponseVo.setToastMsg("当前购物车金额低于【" + checkSpqInfoResponseDto.getCouponName() + "】优惠券起用金额门槛,券已自动移除购物车");
}
}
}
}
//循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) {
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
String spqId = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
// 计算优惠信息时,已将券校验过,放在map中
Map<String, CheckSpqInfoResponseDto> validCouponMap = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getValidCouponMap();
if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(spqId);
if (checkSpqInfoResponseDto != null) {
......
......@@ -370,7 +370,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, deliveryAmount
, ShoppingCartConstant.ADD_AND_UPDATE
, partnerId
, null);
, null
, userId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,null,partnerId);
}
......@@ -496,7 +497,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, deliveryAmount
, ShoppingCartConstant.ADD_AND_UPDATE
, partnerId
, null);
, null
, userId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,null,partnerId);
}
......@@ -656,7 +658,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, deliveryAmount
, ShoppingCartConstant.QUERY_INFO
, partnerId
,shoppingCartInfoRequestVo.getFlag());
,shoppingCartInfoRequestVo.getFlag()
, userId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,calculationSharingDiscountResult,shoppingCartInfoRequestVo.getFlag(),partnerId);
}
......@@ -1157,6 +1160,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList = new ArrayList<>();
// 校验后有效的商品券map
Map<String, CheckSpqInfoResponseDto> validCouponMap = new HashMap<>(16);
HashMap<String, List<String>> spqIdToCartUuid = new HashMap<>(16);
for (int i = cartGoodsList.size() - 1; i >= 0; i--) {
CartGoods cartGoods = cartGoodsList.get(i);
String cartGoodsUid = cartGoods.getCartGoodsUid();
......@@ -1181,6 +1185,15 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
} else {
if (spqIdToCartUuid.containsKey(spqId)){
List<String> uuidList = spqIdToCartUuid.get(spqId);
uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(spqId, uuidList);
} else {
List<String> uuidList = new ArrayList<>();
uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(spqId, uuidList);
}
validCouponMap.put(spqId, checkSpqInfoResponseDto);
cartGoods.setName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName());
......@@ -1234,12 +1247,14 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
// 返回成功
if (activityCalculationDiscountResponseDto != null && StringUtils.equals(activityCalculationDiscountResponseDto.getStatusCode(), ResponseCodeConstant.RESPONSE_SUCCESS_STR)) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult result = activityCalculationDiscountResponseDto.getResult();
List<Integer> activityTypes = result.getDiscounts().stream().map(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount::getType).collect(Collectors.toList());
if (activityTypes.contains(221)) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount discountDTO = result.getDiscounts().stream().filter(d -> 221 == d.getType()).findFirst().get();
convert2SendPoint(result, discountDTO);
}
result.setValidCouponMap(validCouponMap);
result.setSpqIdToCartUuid(spqIdToCartUuid);
result.setDeliveryAmount(distributionFee);
result.setDistributionFee(result.getDistributionFee());
return result;
......
......@@ -68,7 +68,8 @@ public class CalculationSharingCartService {
, Long deliveryAmount
, String opt
, String partnerId
, Integer flag) {
, Integer flag
, String userId) {
/**
* 用促销价格初始化购物车行记录成交价
......@@ -78,7 +79,7 @@ public class CalculationSharingCartService {
/**
* 可用券及券折扣
*/
promotionSharingService.updateShoppingCartGoodsDiscount(discountResult, cartGoodsList, shoppingCartGoodsResponseVo, couponPromotionVO,shoppingCartInfoRequestVo);
promotionSharingService.updateShoppingCartGoodsDiscount(discountResult, cartGoodsList, shoppingCartGoodsResponseVo, couponPromotionVO,shoppingCartInfoRequestVo, userId);
/**
* 满减处理
......
......@@ -8,6 +8,7 @@ import cn.freemud.entities.dto.calculate.CalculationSharingDiscountRequestDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.dto.shoppingCart.SendPoint;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.*;
import cn.freemud.interceptor.BizServiceException;
......@@ -193,21 +194,7 @@ public class CalculationSharingDiscountService {
// 返回成功
if (sharingDiscountResponseDto != null && StringUtils.equals(sharingDiscountResponseDto.getStatusCode(), ResponseCodeConstant.RESPONSE_SUCCESS_STR)) {
CalculationSharingDiscountResponseDto.CalculationDiscountResult result = sharingDiscountResponseDto.getResult();
if (validCouponMap != null){
List<String> activityCodeList = result.getDiscounts().stream().map(p -> p.getActivityCode()).collect(Collectors.toList());
for (String spqId : validCouponMap.keySet()) {
if (!activityCodeList.contains(spqId)){ // 表示商品券不够启用金额
List<String> uuidList = spqIdToCartUuid.get(spqId);
if (CollectionUtils.isNotEmpty(uuidList)){
List<CartGoods> newCartList = cartGoodsList.stream().filter(p -> !uuidList.contains(p.getCartGoodsUid())).collect(Collectors.toList());
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, newCartList, null, null, this.shoppingCartBaseService);
throw new BizServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,sharingDiscountResponseDto.getMsg());
}
}
}
}
List<Integer> activityTypes = result.getDiscounts().stream().map(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount::getType).collect(Collectors.toList());
if (activityTypes.contains(221)) {
......@@ -215,6 +202,7 @@ public class CalculationSharingDiscountService {
convert2SendPoint(result, discountDTO);
}
result.setValidCouponMap(validCouponMap);
result.setSpqIdToCartUuid(spqIdToCartUuid);
result.setDeliveryAmount(deliveryAmount);
result.setDistributionFee(result.getDistributionFee());
return result;
......
......@@ -9,7 +9,9 @@ import cn.freemud.entities.vo.*;
import cn.freemud.enums.CouponFlag;
import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.service.CouponService;
import cn.freemud.service.impl.AssortmentSdkService;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
......@@ -38,11 +40,18 @@ public class CouponSharingService {
@Autowired
private CouponService couponService;
@Autowired
private AssortmentSdkService assortmentSdkService;
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
public void updateShoppingCartGoodsDiscount(CalculationSharingDiscountResponseDto.CalculationDiscountResult calculationDiscountResult
, List<CartGoods> cartGoodsList
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, CouponPromotionVO couponPromotionVO
,ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
,ShoppingCartInfoRequestVo shoppingCartInfoRequestVo, String userId) {
// 用户选择了查询优惠券信息
if (couponPromotionVO != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionVO.getFlg())) {
List<CartGoods> tmpCartGoods = cartGoodsList.parallelStream().filter(k -> k.getCartGoodsUid()
......@@ -83,12 +92,30 @@ public class CouponSharingService {
if (first!=null) couponDiscount = first.getDiscount().longValue();
}
shoppingCartGoodsResponseVo.setCouponDiscount(couponDiscount);
Map<String, CheckSpqInfoResponseDto> validCouponMap = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getValidCouponMap();
Map<String, List<String>> spqIdToCartUuid = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getSpqIdToCartUuid();
if (MapUtils.isNotEmpty(validCouponMap) && MapUtils.isNotEmpty(spqIdToCartUuid) && calculationDiscountResult != null){
List<String> activityCodeList = calculationDiscountResult.getDiscounts().stream().map(p -> p.getActivityCode()).collect(Collectors.toList());
for (String spqId : validCouponMap.keySet()) {
if (!activityCodeList.contains(spqId)){ // 表示商品券不够启用金额
List<String> uuidList = spqIdToCartUuid.get(spqId);
if (CollectionUtils.isNotEmpty(uuidList)){
List<CartGoods> newCartList = cartGoodsList.stream().filter(p -> !uuidList.contains(p.getCartGoodsUid())).collect(Collectors.toList());
assortmentSdkService.setShoppingCart(shoppingCartInfoRequestVo.getPartnerId(), shoppingCartInfoRequestVo.getShopId(), userId, newCartList, null, null, this.shoppingCartBaseService);
CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(spqId);
shoppingCartGoodsResponseVo.setChanged(true);
shoppingCartGoodsResponseVo.setToastMsg("当前购物车金额低于【" + checkSpqInfoResponseDto.getCouponName() + "】优惠券起用金额门槛,券已自动移除购物车");
}
}
}
}
//循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) {
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
String spqId = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
// 计算优惠信息时,已将券校验过,放在map中
Map<String, CheckSpqInfoResponseDto> validCouponMap = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getValidCouponMap();
if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(spqId);
if (checkSpqInfoResponseDto != null) {
......
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