Commit e5dfd1c2 by ping.wu

新算价 买m赠n券

parent 2f20d2c2
...@@ -1450,17 +1450,20 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1450,17 +1450,20 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
cartGoods.setName(checkSpqInfoResponseDto.getCouponName()); cartGoods.setName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName()); cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit()); cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit());
//买M赠N券,不重复加促销券集合字段 if (GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
for (ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon discountCoupon : coupons){ cartGoods.setName(checkSpqInfoResponseDto.getSkuName());
if(Objects.equals(discountCoupon.getCode(),couponCode)){ cartGoods.setSpuName(checkSpqInfoResponseDto.getSpuName());
continue; }
} //添加请求的优惠券信息 买M赠N券,不重复加促销券集合字段
// 添加请求的优惠券信息 String finalCouponCode = couponCode;
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> collect = coupons.stream().filter(calculationDiscountCoupon -> Objects.equals(calculationDiscountCoupon.getCode(), finalCouponCode)).collect(toList());
if(CollectionUtils.isEmpty(collect)){
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon coupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon(); ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon coupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(checkSpqInfoResponseDto.getCouponCode()); coupon.setCode(checkSpqInfoResponseDto.getCouponCode());
coupon.setActivityCode(checkSpqInfoResponseDto.getActiveCode()); coupon.setActivityCode(checkSpqInfoResponseDto.getActiveCode());
coupons.add(coupon); coupons.add(coupon);
} }
// 添加商品券代表的商品 // 添加商品券代表的商品
// 换购券传给促销要带code // 换购券传给促销要带code
String goodsId = StringUtils.isEmpty(checkSpqInfoResponseDto.getSkuId()) ? checkSpqInfoResponseDto.getSpuId() : checkSpqInfoResponseDto.getSkuId(); String goodsId = StringUtils.isEmpty(checkSpqInfoResponseDto.getSkuId()) ? checkSpqInfoResponseDto.getSpuId() : checkSpqInfoResponseDto.getSkuId();
......
...@@ -96,63 +96,8 @@ public class CalculationSharingDiscountService { ...@@ -96,63 +96,8 @@ public class CalculationSharingDiscountService {
HashMap<String, List<String>> spqIdToCartUuid = new HashMap<>(16); HashMap<String, List<String>> spqIdToCartUuid = new HashMap<>(16);
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()) && !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())) {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
} else {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto);
}
if (null == checkSpqInfo) {
cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
//跑业务异常 商品券不存
} else {
if(useCoupon){
validCouponMap.put(couponCode + checkSpqInfo.getSkuId(), checkSpqInfo);
} else{
validCouponMap.put(couponCode, checkSpqInfo);
}
if (spqIdToCartUuid.containsKey(couponCode)){
List<String> uuidList = spqIdToCartUuid.get(couponCode);
uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(couponCode, uuidList);
} else {
List<String> uuidList = new ArrayList<>();
uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(couponCode, uuidList);
}
validCouponMap.put(couponCode, checkSpqInfo);
cartGoods.setName(checkSpqInfo.getCouponName());
cartGoods.setSpuName(checkSpqInfo.getCouponName());
cartGoods.setStockLimit(checkSpqInfo.isStockLimit());
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(checkSpqInfo.getCouponCode());
coupon.setActivityCode(checkSpqInfo.getActiveCode());
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = coupons.stream().filter(p -> coupon.getActivityCode().equals(p.getActivityCode()) && coupon.getCode().equals(p.getCode())).findFirst().orElse(null);
if (calculationDiscountCoupon == null){
coupons.add(coupon);
}
// 添加商品券代表的商品放入促销
String goodsId = StringUtils.isNotBlank(checkSpqInfo.getSkuId()) ? checkSpqInfo.getSkuId() : checkSpqInfo.getSpuId();
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
this.setSpqDiscountGoods(calculationDiscountGoodsList, cartGoods, goodsId, checkSpqInfo.getPrice(), cartGoods.getSpuId());
} else {
this.setSpqDiscountGoods(calculationDiscountGoodsList, cartGoods, goodsId, checkSpqInfo.getPrice());
}
}
}
//套餐商品的固定和可选商品必有一个
if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) { if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
if (CollectionUtils.isEmpty(cartGoods.getProductGroupList()) && CollectionUtils.isEmpty(cartGoods.getProductComboList())) { if (CollectionUtils.isEmpty(cartGoods.getProductGroupList()) && CollectionUtils.isEmpty(cartGoods.getProductComboList())) {
cartGoodsList.remove(i); cartGoodsList.remove(i);
...@@ -160,6 +105,62 @@ public class CalculationSharingDiscountService { ...@@ -160,6 +105,62 @@ public class CalculationSharingDiscountService {
throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL); throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL);
} }
} }
String couponCode = cartGoods.getCouponCode();
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
}
if (StringUtils.isBlank(couponCode)) {//非商品券
this.setCommonDiscountGoods(calculationDiscountGoodsList, cartGoods);
}
//商品券->商品券ID换取商品
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
CheckSpqInfoResponseDto checkSpqInfo = null;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
} else {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto);
}
if (null == checkSpqInfo) {
cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
continue;
//跑业务异常 商品券不存
}
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
validCouponMap.put(couponCode, checkSpqInfo);
}
if (!GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
validCouponMap.put(couponCode + checkSpqInfo.getSkuId(), checkSpqInfo);
validCouponMap.put(couponCode, checkSpqInfo);
}
if (spqIdToCartUuid.containsKey(couponCode)) {
List<String> uuidList = spqIdToCartUuid.get(couponCode);
uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(couponCode, uuidList);
} else {
List<String> uuidList = new ArrayList<>();
uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(couponCode, uuidList);
}
cartGoods.setName(checkSpqInfo.getCouponName());
cartGoods.setSpuName(checkSpqInfo.getCouponName());
cartGoods.setStockLimit(checkSpqInfo.isStockLimit());
//买M送N券不赋值券名称
if (GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
cartGoods.setName(checkSpqInfo.getSkuName());
cartGoods.setSpuName(checkSpqInfo.getSpuName());
}
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(checkSpqInfo.getCouponCode());
coupon.setActivityCode(checkSpqInfo.getActiveCode());
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = coupons.stream().filter(p -> coupon.getActivityCode().equals(p.getActivityCode()) && coupon.getCode().equals(p.getCode())).findFirst().orElse(null);
if (calculationDiscountCoupon == null) {
coupons.add(coupon);
}
// 添加商品券代表的商品放入促销
String goodsId = StringUtils.isNotBlank(checkSpqInfo.getSkuId()) ? checkSpqInfo.getSkuId() : checkSpqInfo.getSpuId();
this.setSpqDiscountGoods(calculationDiscountGoodsList, cartGoods, goodsId, checkSpqInfo.getPrice(), couponCode);
} }
/*加价购商品不为空*/ /*加价购商品不为空*/
...@@ -184,7 +185,7 @@ public class CalculationSharingDiscountService { ...@@ -184,7 +185,7 @@ public class CalculationSharingDiscountService {
} }
//剔除商品数量为空的 //剔除商品数量为空的
calculationDiscountGoodsList.removeIf(v->v.getGoodsQuantity().equals(0)); calculationDiscountGoodsList.removeIf(v -> v.getGoodsQuantity().equals(0));
if (CollectionUtils.isEmpty(calculationDiscountGoodsList)) { if (CollectionUtils.isEmpty(calculationDiscountGoodsList)) {
//throw new BizServiceException(ResponseResult.SHOPPING_CART_COUPON_NOT_EXIST,"参数促销计算商品有异常"); //throw new BizServiceException(ResponseResult.SHOPPING_CART_COUPON_NOT_EXIST,"参数促销计算商品有异常");
return null; return null;
...@@ -193,18 +194,15 @@ public class CalculationSharingDiscountService { ...@@ -193,18 +194,15 @@ public class CalculationSharingDiscountService {
//组装促销 //组装促销
calculationSharingDiscountRequestDto.setGoods(calculationDiscountGoodsList); calculationSharingDiscountRequestDto.setGoods(calculationDiscountGoodsList);
calculationSharingDiscountRequestDto.setCoupons(coupons); calculationSharingDiscountRequestDto.setCoupons(coupons);
calculationSharingDiscountRequestDto.setOrgIds(commonService.getOrgIdsForCoupon(partnerId,storeId)); calculationSharingDiscountRequestDto.setOrgIds(commonService.getOrgIdsForCoupon(partnerId, storeId));
calculationSharingDiscountRequestDto.setDistributionFee(deliveryAmount); calculationSharingDiscountRequestDto.setDistributionFee(deliveryAmount);
calculationSharingDiscountRequestDto.setIsMember(isMember); calculationSharingDiscountRequestDto.setIsMember(isMember);
CalculationSharingDiscountResponseDto sharingDiscountResponseDto;
// 构建买一送一寄杯活动用户选择信息 // 构建买一送一寄杯活动用户选择信息
ActiveService activeService = activeFactory.getBuildChooseGoodsService(partnerId); ActiveService activeService = activeFactory.getBuildChooseGoodsService(partnerId);
activeService.buildChooseGoodsService(calculationSharingDiscountRequestDto,shoppingCartInfoRequestVo == null ? null : shoppingCartInfoRequestVo.getChooseGoods()); activeService.buildChooseGoodsService(calculationSharingDiscountRequestDto, shoppingCartInfoRequestVo == null ? null : shoppingCartInfoRequestVo.getChooseGoods());
try { //算价
sharingDiscountResponseDto = activityClient.calculationSharingDiscount(calculationSharingDiscountRequestDto); CalculationSharingDiscountResponseDto sharingDiscountResponseDto = activityClient.calculationSharingDiscount(calculationSharingDiscountRequestDto);
} if(sharingDiscountResponseDto == null){
catch (Exception e) {
ErrorLog.errorConvertJson(this.getClass(), JsonUtil.toJSONString(calculationSharingDiscountRequestDto), e);
throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN); throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN);
} }
// 返回成功 // 返回成功
...@@ -226,8 +224,8 @@ public class CalculationSharingDiscountService { ...@@ -226,8 +224,8 @@ public class CalculationSharingDiscountService {
} }
// 这个是专门给coco使用的券验证错误的异常,message要抛出去 // 这个是专门给coco使用的券验证错误的异常,message要抛出去
if(sharingDiscountResponseDto != null && StringUtils.equals(sharingDiscountResponseDto.getStatusCode(), ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR)){ if (sharingDiscountResponseDto != null && StringUtils.equals(sharingDiscountResponseDto.getStatusCode(), ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR)) {
throw new BizServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,sharingDiscountResponseDto.getMsg()); throw new BizServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL, sharingDiscountResponseDto.getMsg());
} }
// 支付宝华莱士紧急修改代码,当促销返回103错误码时,需要报券不适用于该门店,且清空购物车 // 支付宝华莱士紧急修改代码,当促销返回103错误码时,需要报券不适用于该门店,且清空购物车
...@@ -254,6 +252,7 @@ public class CalculationSharingDiscountService { ...@@ -254,6 +252,7 @@ public class CalculationSharingDiscountService {
/** /**
* 实物商品 * 实物商品
*
* @param calculationDiscountGoodsList * @param calculationDiscountGoodsList
* @param cartGoods * @param cartGoods
*/ */
...@@ -267,9 +266,8 @@ public class CalculationSharingDiscountService { ...@@ -267,9 +266,8 @@ public class CalculationSharingDiscountService {
calculationDiscountGoods.setAddCartTime(cartGoods.getAddCartTime() == null ? 0 : cartGoods.getAddCartTime()); calculationDiscountGoods.setAddCartTime(cartGoods.getAddCartTime() == null ? 0 : cartGoods.getAddCartTime());
//if (cartGoods.getGoodsType().equals(GoodsTypeEnum.SET_MEAL_GOODS)) //if (cartGoods.getGoodsType().equals(GoodsTypeEnum.SET_MEAL_GOODS))
if (CollectionUtils.isNotEmpty(cartGoods.getProductGroupList()) || CollectionUtils.isNotEmpty(cartGoods.getProductComboList())) { if (CollectionUtils.isNotEmpty(cartGoods.getProductGroupList()) || CollectionUtils.isNotEmpty(cartGoods.getProductComboList())) {
calculationDiscountGoods.setOriginalPrice(cartGoods.getFinalPrice()!=null ? cartGoods.getFinalPrice() : cartGoods.getOriginalPrice()); calculationDiscountGoods.setOriginalPrice(cartGoods.getFinalPrice() != null ? cartGoods.getFinalPrice() : cartGoods.getOriginalPrice());
} } else {
else {
calculationDiscountGoods.setOriginalPrice(cartGoods.getOriginalPrice()); calculationDiscountGoods.setOriginalPrice(cartGoods.getOriginalPrice());
} }
calculationDiscountGoods.setMemberDiscount(cartGoods.getMemberDiscount()); calculationDiscountGoods.setMemberDiscount(cartGoods.getMemberDiscount());
...@@ -321,27 +319,29 @@ public class CalculationSharingDiscountService { ...@@ -321,27 +319,29 @@ public class CalculationSharingDiscountService {
/** /**
* 组队券码商品 * 组队券码商品
*
* @param calculationDiscountGoodsList * @param calculationDiscountGoodsList
* @param cartGoods * @param cartGoods
* @param goodsId * @param goodsId
* @param originalPrice * @param originalPrice
*/ */
private void setSpqDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList // private void setSpqDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList
, CartGoods cartGoods, String goodsId, Long originalPrice) { // , CartGoods cartGoods, String goodsId, Long originalPrice) {
CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new CalculationSharingDiscountRequestDto.CalculationDiscountGoods(); // CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new CalculationSharingDiscountRequestDto.CalculationDiscountGoods();
calculationDiscountGoods.setGoodsId(goodsId); // calculationDiscountGoods.setGoodsId(goodsId);
calculationDiscountGoods.setCartGoodsUid(cartGoods.getCartGoodsUid()); // calculationDiscountGoods.setCartGoodsUid(cartGoods.getCartGoodsUid());
calculationDiscountGoods.setAddCartTime(cartGoods.getAddCartTime() == null ? 0 : cartGoods.getAddCartTime()); // calculationDiscountGoods.setAddCartTime(cartGoods.getAddCartTime() == null ? 0 : cartGoods.getAddCartTime());
calculationDiscountGoods.setGoodsQuantity(cartGoods.getQty()); // calculationDiscountGoods.setGoodsQuantity(cartGoods.getQty());
calculationDiscountGoods.setOriginalPrice(originalPrice); // calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(100); // calculationDiscountGoods.setMemberDiscount(100);
this.setCalculationDiscountGoods(calculationDiscountGoodsList,calculationDiscountGoods); // this.setCalculationDiscountGoods(calculationDiscountGoodsList, calculationDiscountGoods);
} // }
private void setSpqDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList private void setSpqDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList
, CartGoods cartGoods , CartGoods cartGoods
, String goodsId , String goodsId
, Long originalPrice , Long originalPrice
,String couponCode) { , String couponCode) {
CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new CalculationSharingDiscountRequestDto.CalculationDiscountGoods(); CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new CalculationSharingDiscountRequestDto.CalculationDiscountGoods();
calculationDiscountGoods.setGoodsId(goodsId); calculationDiscountGoods.setGoodsId(goodsId);
calculationDiscountGoods.setCartGoodsUid(cartGoods.getCartGoodsUid()); calculationDiscountGoods.setCartGoodsUid(cartGoods.getCartGoodsUid());
...@@ -350,23 +350,23 @@ public class CalculationSharingDiscountService { ...@@ -350,23 +350,23 @@ public class CalculationSharingDiscountService {
calculationDiscountGoods.setOriginalPrice(originalPrice); calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(100); calculationDiscountGoods.setMemberDiscount(100);
calculationDiscountGoods.setCouponCode(couponCode); calculationDiscountGoods.setCouponCode(couponCode);
this.setCalculationDiscountGoods(calculationDiscountGoodsList,calculationDiscountGoods); this.setCalculationDiscountGoods(calculationDiscountGoodsList, calculationDiscountGoods);
} }
/** /**
* 需要促销计算的商品 * 需要促销计算的商品
*
* @param calculationDiscountGoodsList * @param calculationDiscountGoodsList
* @param calculationDiscountGoods * @param calculationDiscountGoods
*/ */
private void setCalculationDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList private void setCalculationDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList
,CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods) { , CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods) {
int index = 0; int index = 0;
//当商品已经存在时,需要累加数量 //当商品已经存在时,需要累加数量
if ((index = calculationDiscountGoodsList.indexOf(calculationDiscountGoods))>=0) { if ((index = calculationDiscountGoodsList.indexOf(calculationDiscountGoods)) >= 0) {
CalculationSharingDiscountRequestDto.CalculationDiscountGoods old = calculationDiscountGoodsList.get(index); CalculationSharingDiscountRequestDto.CalculationDiscountGoods old = calculationDiscountGoodsList.get(index);
calculationDiscountGoodsList.get(index).setGoodsQuantity(old.getGoodsQuantity()+calculationDiscountGoods.getGoodsQuantity()); calculationDiscountGoodsList.get(index).setGoodsQuantity(old.getGoodsQuantity() + calculationDiscountGoods.getGoodsQuantity());
} } else {
else {
calculationDiscountGoodsList.add(calculationDiscountGoods); calculationDiscountGoodsList.add(calculationDiscountGoods);
} }
......
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