Commit bdc1eec1 by xiaoer.li@freemud.com

Merge remote-tracking branches 'remotes/origin/feature/1.9.25__门店超出配送范围问题',…

Merge remote-tracking branches 'remotes/origin/feature/1.9.25__门店超出配送范围问题', 'remotes/origin/feature/1.9.25_满减提示语', 'remotes/origin/feature/1.9.25_购物车支持限时折扣类型' and 'remotes/origin/feature/19.24_买一赠一活动优化' into qa
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<version>2.6.1-SNAPSHOT</version> <version>2.8.1-SNAPSHOT</version>
<artifactId>storecenter-sdk</artifactId> <artifactId>storecenter-sdk</artifactId>
</dependency> </dependency>
......
package cn.freemud.entities.vo;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.entities.vo ActivityListTip
* @Description:
* @author: family
* @date: 2020/5/28
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class ActivityList {
/*
购物车
- 空
- - 1 : 每满 : 满足 x 元 减 Y 元 ,最高 减 Z元
- - 满足 satisfy 减 deduct 最高减 maxDeduct
- - 2 : 阶梯满减:满足 X 元 减 Y 元,
- -满足 satisfy 减 deduct
- 有
- - 满足
- - 3 : 满足 X 元 减 Y 元 还差 Z元
- - 满足 satisfy 减 deduct 还差 missing
- - 4 : 已减 X 元 再买 Y 元 减 Z 元
- - 已减 alreadyDecut 再买againBuy 减 deduct
- - 不满足
- - 5 : 已减 X 元
- - 已减 deduct
*/
//提示类型
private Integer tipType;
//满足金额
private String satisfy;
//已减金额
private String deduct;
//最高扣减金额
private String maxDeduct;
//最高扣减金额
private String alreadyDecut;
//还差
private String missing;
//再买
private String againBuy;
//在减
private String agianDeduct;
}
...@@ -52,6 +52,7 @@ public class ActivityTip { ...@@ -52,6 +52,7 @@ public class ActivityTip {
* 200-X元Y件 * 200-X元Y件
*/ */
private Integer activityType; private Integer activityType;
private List<ActivityList> activityList;
/** /**
* *
*/ */
......
...@@ -120,5 +120,8 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV ...@@ -120,5 +120,8 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
*/ */
private String discountDeliveryActivityCode; private String discountDeliveryActivityCode;
/**
* 配送费为零的原因:0:正常,1:超出配送范围
*/
private Integer deliveryFeeZeroReason;
} }
...@@ -86,6 +86,7 @@ public class BuyAndGiftsPromotionService implements IPromotionService { ...@@ -86,6 +86,7 @@ public class BuyAndGiftsPromotionService implements IPromotionService {
cartGoods.setStockLimit(ObjectUtils.equals(1, product.getStockLimit())); cartGoods.setStockLimit(ObjectUtils.equals(1, product.getStockLimit()));
cartGoods.setCustomerCode(product.getCustomerCode()); cartGoods.setCustomerCode(product.getCustomerCode());
cartGoods.setUnit(product.getUnit()); cartGoods.setUnit(product.getUnit());
cartGoods.setWeight(product.getWeight());
cartGoods.setQty(sendGoods.getSendNumber()); cartGoods.setQty(sendGoods.getSendNumber());
// nodeId标识activeCode,用于计算均摊时每个商品在每个活动上均摊金额 // nodeId标识activeCode,用于计算均摊时每个商品在每个活动上均摊金额
cartGoods.setNodeId(sendActivity.getActivityCode()); cartGoods.setNodeId(sendActivity.getActivityCode());
......
...@@ -221,7 +221,7 @@ public class BuySendPromotionService implements IPromotionService { ...@@ -221,7 +221,7 @@ public class BuySendPromotionService implements IPromotionService {
} }
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods sendGoods = sendGoodsMap.get(cartGood.getSpuId()); ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods sendGoods = sendGoodsMap.get(cartGood.getSpuId());
CartGoods cartGoods = shoppingCartConvertAdapter.convent2CartGoods(cartGood, sendGoods.getNowPrice()); CartGoods cartGoods = shoppingCartConvertAdapter.convent2CartGoods(cartGood, sendGoods.getNowPrice());
cartGoods.setQty(SEND_NUMBER); cartGoods.setQty(sendGoods.getSendNumber() > 0 ? sendGoods.getSendNumber() : SEND_NUMBER);
newCartGoodsList.add(cartGoods); newCartGoodsList.add(cartGoods);
} }
......
...@@ -9,17 +9,13 @@ import cn.freemud.enums.ActivityTypeEnum; ...@@ -9,17 +9,13 @@ import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.ActivityService; import cn.freemud.service.ActivityService;
import cn.freemud.service.IPromotionService; import cn.freemud.service.IPromotionService;
import cn.freemud.utils.WebUtil; import cn.freemud.utils.WebUtil;
import com.freemud.application.sdk.api.promotioncenter.request.promotion.UnifyActivityRequest;
import com.freemud.application.sdk.api.promotioncenter.service.PromotionSdkService; import com.freemud.application.sdk.api.promotioncenter.service.PromotionSdkService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -76,23 +72,23 @@ public class FullPromotionService implements IPromotionService { ...@@ -76,23 +72,23 @@ public class FullPromotionService implements IPromotionService {
promotionMessageDto.setActivityType(activityResponseDto.getActivityType()); promotionMessageDto.setActivityType(activityResponseDto.getActivityType());
promotionMessageDto.setPromotionAmount(0L); promotionMessageDto.setPromotionAmount(0L);
StringBuilder messageBuilder = new StringBuilder(); StringBuilder messageBuilder = new StringBuilder();
ArrayList<ActivityList> activityList = new ArrayList<>();
//没有加入购物车 //没有加入购物车
if (calculationDiscountResult == null) { if (calculationDiscountResult == null) {
// 因为没有促销活动的计算信息,所以没有加入购物车内 // 因为没有促销活动的计算信息,所以没有加入购物车内
List<BenefitBeanDto> benefitBeanDtos = activityResponseDto.getBenefits(); List<BenefitBeanDto> benefitBeanDtos = activityResponseDto.getBenefits();
BenefitBeanDto benefitBeanDto = benefitBeanDtos.get(0); BenefitBeanDto benefitBeanDto = benefitBeanDtos.get(0);
//调用没有加入购物车的提示语的方法 //调用没有加入购物车的提示语的方法
setMessageNotInShoppingCart(messageBuilder,activityResponseDto,benefitBeanDtos,benefitBeanDto); setMessageNotInShoppingCart(messageBuilder, activityResponseDto, benefitBeanDtos, benefitBeanDto, activityList);
}else{ }else{
//促销返回满减提示语 //促销返回满减提示语
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ActivityPrompt> activityPrompts = calculationDiscountResult.getActivityPrompts(); List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ActivityPrompt> activityPrompts = calculationDiscountResult.getActivityPrompts();
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discountList1 = calculationDiscountResult.getDiscounts(); List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discountList1 = calculationDiscountResult.getDiscounts();
//构建提示语 //构建提示语
if (CollectionUtils.isNotEmpty(activityPrompts)){ if (CollectionUtils.isNotEmpty(activityPrompts)){
setMessageSatisfyCart(messageBuilder,activityPrompts,activityResponseDto); setMessageSatisfyCart(messageBuilder, activityPrompts, activityResponseDto, activityList);
}else { }else {
setMessageNoSatisfyCart(messageBuilder,discountList1); setMessageNoSatisfyCart(messageBuilder, discountList1, activityList);
} }
} }
...@@ -101,6 +97,7 @@ public class FullPromotionService implements IPromotionService { ...@@ -101,6 +97,7 @@ public class FullPromotionService implements IPromotionService {
activityTip.setActivityCode(promotionMessageDto.getActivityId()); activityTip.setActivityCode(promotionMessageDto.getActivityId());
activityTip.setActivityType(promotionMessageDto.getActivityType()); activityTip.setActivityType(promotionMessageDto.getActivityType());
activityTip.setActivityName(promotionMessageDto.getPromotionMessage()); activityTip.setActivityName(promotionMessageDto.getPromotionMessage());
activityTip.setActivityList(activityList);
shoppingCartGoodsResponseVo.setActivityTip(activityTip); shoppingCartGoodsResponseVo.setActivityTip(activityTip);
if (calculationDiscountResult == null){ if (calculationDiscountResult == null){
return; return;
...@@ -135,7 +132,8 @@ public class FullPromotionService implements IPromotionService { ...@@ -135,7 +132,8 @@ public class FullPromotionService implements IPromotionService {
} }
//设置没有加入购物车的提示语 //设置没有加入购物车的提示语
private void setMessageNotInShoppingCart(StringBuilder messageBuilder, ActivityResponseDto activityResponseDto, List<BenefitBeanDto> benefitBeanDtos, BenefitBeanDto benefitBeanDto){ private void setMessageNotInShoppingCart(StringBuilder messageBuilder, ActivityResponseDto activityResponseDto, List<BenefitBeanDto> benefitBeanDtos, BenefitBeanDto benefitBeanDto,
ArrayList<ActivityList> ActivityList) {
if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType())) { if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType())) {
messageBuilder.append("每满 <span style=\"color:#fa5555\">") messageBuilder.append("每满 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(benefitBeanDto.getThresholdAmount() * 1.00 / 100)) .append(WebUtil.formatAmount(benefitBeanDto.getThresholdAmount() * 1.00 / 100))
...@@ -145,6 +143,14 @@ public class FullPromotionService implements IPromotionService { ...@@ -145,6 +143,14 @@ public class FullPromotionService implements IPromotionService {
.append("最高减 <span style=\"color:#fa5555\">") .append("最高减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityResponseDto.getMaxMoney() * 1.00 / 100)) .append(WebUtil.formatAmount(activityResponseDto.getMaxMoney() * 1.00 / 100))
.append("</span> 元"); .append("</span> 元");
//满足 x 元 减 Y 元 ,最高 减 Z元
cn.freemud.entities.vo.ActivityList notInShopping = new ActivityList();
notInShopping.setTipType(1);
notInShopping.setSatisfy(WebUtil.formatAmount(benefitBeanDto.getThresholdAmount() * 1.00 / 100).toString());
notInShopping.setDeduct(WebUtil.formatAmount(benefitBeanDto.getDiscountAmount() * 1.00 / 100).toString());
notInShopping.setMaxDeduct(WebUtil.formatAmount(activityResponseDto.getMaxMoney() * 1.00 / 100).toString());
ActivityList.add(notInShopping);
} }
if (Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), activityResponseDto.getActivityType())) { if (Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), activityResponseDto.getActivityType())) {
int len = benefitBeanDtos.size(); int len = benefitBeanDtos.size();
...@@ -158,18 +164,29 @@ public class FullPromotionService implements IPromotionService { ...@@ -158,18 +164,29 @@ public class FullPromotionService implements IPromotionService {
.append("</span> 元"); .append("</span> 元");
if (i > 0) messageBuilder.append(","); if (i > 0) messageBuilder.append(",");
} }
// 阶梯满减:满足 X 元 减 Y 元,
for (int j = len - 1; j >= 0; j--) {
benefitBeanDto = benefitBeanDtos.get(j);
cn.freemud.entities.vo.ActivityList notInShopping = new ActivityList();
notInShopping.setTipType(2);
notInShopping.setSatisfy(WebUtil.formatAmount(benefitBeanDto.getThresholdAmount() * 1.00 / 100).toString());
notInShopping.setDeduct(WebUtil.formatAmount(benefitBeanDto.getDiscountAmount() * 1.00 / 100).toString());
ActivityList.add(notInShopping);
}
} }
} }
/** /**
* 设置加入商品满足购物车时的提示语 * 设置加入商品满足购物车时的提示语
*
* @param messageBuilder * @param messageBuilder
* @param activityPrompts * @param activityPrompts
* @param activityResponseDto * @param activityResponseDto
*/ */
private void setMessageSatisfyCart(StringBuilder messageBuilder,List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ActivityPrompt> activityPrompts private void setMessageSatisfyCart(StringBuilder messageBuilder, List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ActivityPrompt> activityPrompts
,ActivityResponseDto activityResponseDto){ , ActivityResponseDto activityResponseDto, ArrayList<ActivityList> activityList) {
ActivityList satisfyList = new ActivityList();
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ActivityPrompt activityPrompt = activityPrompts.get(0); ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ActivityPrompt activityPrompt = activityPrompts.get(0);
if (activityPrompt.getAlreadyDiscountAmount() == null if (activityPrompt.getAlreadyDiscountAmount() == null
|| activityPrompt.getAlreadyDiscountAmount() == 0) { || activityPrompt.getAlreadyDiscountAmount() == 0) {
...@@ -181,6 +198,11 @@ public class FullPromotionService implements IPromotionService { ...@@ -181,6 +198,11 @@ public class FullPromotionService implements IPromotionService {
.append("还差 <span style=\"color:#fa5555\">") .append("还差 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100)) .append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100))
.append("</span> 元"); .append("</span> 元");
// 满足 X 元 减 Y 元 还差 Z元
satisfyList.setTipType(3);
satisfyList.setSatisfy(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100).toString());
satisfyList.setDeduct(WebUtil.formatAmount(activityPrompt.getDiscountAmout() * 1.00 / 100).toString());
satisfyList.setMissing(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100).toString());
} else { } else {
Long toDiscountAmout; Long toDiscountAmout;
if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType())) { if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType())) {
...@@ -188,6 +210,7 @@ public class FullPromotionService implements IPromotionService { ...@@ -188,6 +210,7 @@ public class FullPromotionService implements IPromotionService {
} else { } else {
toDiscountAmout = activityPrompt.getDiscountAmout(); toDiscountAmout = activityPrompt.getDiscountAmout();
} }
//已减 X 元 再买 Y 元 减 Z 元
messageBuilder.append("已减 <span style=\"color:#fa5555\">") messageBuilder.append("已减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getAlreadyDiscountAmount() * 1.00 / 100)) .append(WebUtil.formatAmount(activityPrompt.getAlreadyDiscountAmount() * 1.00 / 100))
.append("</span> 元 再买 <span style=\"color:#fa5555\">") .append("</span> 元 再买 <span style=\"color:#fa5555\">")
...@@ -195,23 +218,33 @@ public class FullPromotionService implements IPromotionService { ...@@ -195,23 +218,33 @@ public class FullPromotionService implements IPromotionService {
.append("</span> 元减 <span style=\"color:#fa5555\">") .append("</span> 元减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(toDiscountAmout * 1.00 / 100)) .append(WebUtil.formatAmount(toDiscountAmout * 1.00 / 100))
.append("</span> 元"); .append("</span> 元");
satisfyList.setTipType(4);
satisfyList.setDeduct(WebUtil.formatAmount(activityPrompt.getAlreadyDiscountAmount() * 1.00 / 100).toString());
satisfyList.setAgainBuy(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100).toString());
satisfyList.setAgianDeduct(WebUtil.formatAmount(toDiscountAmout * 1.00 / 100).toString());
} }
activityList.add(satisfyList);
} }
/** /**
* 设置加入商品不满足购物车时的提示语 * 设置加入商品不满足购物车时的提示语
*
* @param messageBuilder * @param messageBuilder
* @param discountList * @param discountList
*/ */
private void setMessageNoSatisfyCart(StringBuilder messageBuilder,List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discountList){ private void setMessageNoSatisfyCart(StringBuilder messageBuilder, List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discountList, ArrayList<ActivityList> activityList) {
discountList = discountList.parallelStream().filter(k -> (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), k.getType()) discountList = discountList.parallelStream().filter(k -> (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), k.getType())
|| Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), k.getType()))).collect(Collectors.toList()); || Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), k.getType()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(discountList)) { if (CollectionUtils.isEmpty(discountList)) {
return; return;
} }
//已减 X 元
messageBuilder.append("已减 <span style=\"color:#fa5555\">") messageBuilder.append("已减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(discountList.get(0).getDiscount() * 1.00 / 100)) .append(WebUtil.formatAmount(discountList.get(0).getDiscount() * 1.00 / 100))
.append("</span> 元"); .append("</span> 元");
ActivityList noSatisfy = new ActivityList();
noSatisfy.setTipType(5);
noSatisfy.setDeduct(WebUtil.formatAmount(discountList.get(0).getDiscount() * 1.00 / 100).toString());
activityList.add(noSatisfy);
} }
} }
...@@ -264,7 +264,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -264,7 +264,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
spuId, allCartGoodsList, productBeanListSpuClass); spuId, allCartGoodsList, productBeanListSpuClass);
} }
Long deliveryAmount = calculateDeliveryAmount(receiveId,partnerId,storeId,userLoginInfoDto.getWxAppid()); Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo);
// 获取优惠信息 // 获取优惠信息
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult
...@@ -357,7 +357,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -357,7 +357,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, updateShoppingCartGoodsQtyRequestVo.getSessionId(), "", shoppingCartBaseService); assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, updateShoppingCartGoodsQtyRequestVo.getSessionId(), "", shoppingCartBaseService);
Long deliveryAmount = calculateDeliveryAmount(receiveId,partnerId,storeId,userLoginInfoDto.getWxAppid()); Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo);
// 获取优惠信息 // 获取优惠信息
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult
=getCalculationDiscountResult(menuType,partnerId,storeId,userId,appId,userLoginInfoDto.getWxAppid(),orderType,assortmentCustomerInfoVo.isMemberPaid(),cartGoodsList,new ArrayList(),new ArrayList<>(),null,deliveryAmount); =getCalculationDiscountResult(menuType,partnerId,storeId,userId,appId,userLoginInfoDto.getWxAppid(),orderType,assortmentCustomerInfoVo.isMemberPaid(),cartGoodsList,new ArrayList(),new ArrayList<>(),null,deliveryAmount);
...@@ -458,7 +458,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -458,7 +458,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
coupon.setActivityCode(activityCode); coupon.setActivityCode(activityCode);
coupons.add(coupon); coupons.add(coupon);
} }
Long deliveryAmount = calculateDeliveryAmount(receiveId,partnerId,storeId,userLoginInfoDto.getWxAppid()); Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo);
// 获取优惠信息 // 获取优惠信息
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult = getCalculationDiscountResult(menuType,partnerId,storeId,userId,appId,userLoginInfoDto.getWxAppid(),orderType,assortmentCustomerInfoVo.isMemberPaid(),cartGoodsList,coupons,null,shoppingCartInfoRequestVo.getReceiveId(),deliveryAmount); ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult = getCalculationDiscountResult(menuType,partnerId,storeId,userId,appId,userLoginInfoDto.getWxAppid(),orderType,assortmentCustomerInfoVo.isMemberPaid(),cartGoodsList,coupons,null,shoppingCartInfoRequestVo.getReceiveId(),deliveryAmount);
...@@ -624,7 +624,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -624,7 +624,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
} }
} }
Long deliveryAmount = calculateDeliveryAmount(receiveId,partnerId,storeId,userLoginInfoDto.getWxAppid()); Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo);
// 获取优惠信息 // 获取优惠信息
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult = getCalculationDiscountResult(menuType,partnerId,storeId,userId,appId,userLoginInfoDto.getWxAppid(),orderType,assortmentCustomerInfoVo.isMemberPaid(),cartGoodsList,coupons,sendGoodsList,shoppingCartInfoRequestVo.getReceiveId(),deliveryAmount); ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult = getCalculationDiscountResult(menuType,partnerId,storeId,userId,appId,userLoginInfoDto.getWxAppid(),orderType,assortmentCustomerInfoVo.isMemberPaid(),cartGoodsList,coupons,sendGoodsList,shoppingCartInfoRequestVo.getReceiveId(),deliveryAmount);
...@@ -1409,7 +1409,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1409,7 +1409,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return amount; return amount;
} }
private Long getNewDeliveryAmount(String receiveId, String partnerId, String storeId) { private Long getNewDeliveryAmount(String receiveId, String partnerId, String storeId, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
String trackingNo = LogThreadLocal.getTrackingNo(); String trackingNo = LogThreadLocal.getTrackingNo();
Long amount = 0L; Long amount = 0L;
if (StringUtils.isBlank(receiveId)) { if (StringUtils.isBlank(receiveId)) {
...@@ -1434,6 +1434,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1434,6 +1434,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
if(queryDeliverDetailResponse.getData().getDeliveryAmount() == null) { if(queryDeliverDetailResponse.getData().getDeliveryAmount() == null) {
throw new ServiceException(ResponseResult.STORE_DELIVERY_AMOUNT_ERROR); throw new ServiceException(ResponseResult.STORE_DELIVERY_AMOUNT_ERROR);
} }
shoppingCartGoodsResponseVo.setDeliveryFeeZeroReason(queryDeliverDetailResponse.getData().getDeliveryFeeZeroReason() != null ? queryDeliverDetailResponse.getData().getDeliveryFeeZeroReason() : 0);
return queryDeliverDetailResponse.getData().getDeliveryAmount(); return queryDeliverDetailResponse.getData().getDeliveryAmount();
} }
...@@ -1481,16 +1482,17 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1481,16 +1482,17 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return calculationDiscountResult; return calculationDiscountResult;
} }
private Long calculateDeliveryAmount(String receiveId,String partnerId,String storeId,String wxappid){ private Long calculateDeliveryAmount(String receiveId, String partnerId, String storeId, String wxappid, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
Long deliveryAmount = 0L; Long deliveryAmount = 0L;
if(StringUtils.isBlank(receiveId)) { if (StringUtils.isBlank(receiveId)) {
return deliveryAmount; return deliveryAmount;
} }
log.info("获取配送配逻辑 tackingNo:{},storeDeliveryUseOld:{},receiveId:{},partnerId:{},storeId:{}", LogThreadLocal.getTrackingNo(), storeDeliveryUseOld, receiveId, partnerId, storeId); log.info("获取配送配逻辑 tackingNo:{},storeDeliveryUseOld:{},receiveId:{},partnerId:{},storeId:{}", LogThreadLocal.getTrackingNo(), storeDeliveryUseOld, receiveId, partnerId, storeId);
if(storeDeliveryUseOld) { if (storeDeliveryUseOld) {
deliveryAmount = Long.parseLong(getDeliveryAmount(receiveId,partnerId,storeId).toString()); deliveryAmount = Long.parseLong(getDeliveryAmount(receiveId, partnerId, storeId).toString());
shoppingCartGoodsResponseVo.setDeliveryFeeZeroReason(0);
} else { } else {
deliveryAmount = getNewDeliveryAmount(receiveId, partnerId, storeId); deliveryAmount = getNewDeliveryAmount(receiveId, partnerId, storeId, shoppingCartGoodsResponseVo);
} }
return deliveryAmount; return deliveryAmount;
......
...@@ -13,10 +13,7 @@ import org.apache.commons.lang.ObjectUtils; ...@@ -13,10 +13,7 @@ import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -37,7 +34,7 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -37,7 +34,7 @@ public class TimeSalePromotionService implements IPromotionService {
@Override @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 (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts()) || !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()))) { if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts()) || !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> (ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()) || (ActivityTypeEnum.TYPE_21.getCode().equals(discount.getType()))))) {
return; return;
} }
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods(); List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods();
...@@ -49,12 +46,13 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -49,12 +46,13 @@ public class TimeSalePromotionService implements IPromotionService {
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1)); .collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1));
// 存储当前享受限时特价折扣的商品数量,key:goodsId; value:可享受数量 // 存储当前享受限时特价折扣的商品数量,key:goodsId; value:可享受数量
Map<String, Integer> numberMap = new HashMap<>(); Map<String, Integer> numberMap = new HashMap<>();
List<Integer> discounts = Arrays.asList(ActivityTypeEnum.TYPE_2.getCode(), ActivityTypeEnum.TYPE_21.getCode());
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods; ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods;
if ((goods = goodsMap.get(cartGoods.getGoodsId())) == null) { if ((goods = goodsMap.get(cartGoods.getGoodsId())) == null) {
continue; continue;
} }
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = getGoodsDiscount(goods.getDiscounts(), ActivityTypeEnum.TYPE_2); ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = getGoodsDiscount(goods.getDiscounts(), discounts);
if (goodsDiscount == null) { if (goodsDiscount == null) {
continue; continue;
} }
...@@ -86,7 +84,7 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -86,7 +84,7 @@ public class TimeSalePromotionService implements IPromotionService {
@Override @Override
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) { public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts()) || !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()))) { if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts()) || !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> (ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()) || ActivityTypeEnum.TYPE_21.getCode().equals(discount.getType())))) {
return; return;
} }
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods(); List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods();
...@@ -98,14 +96,13 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -98,14 +96,13 @@ public class TimeSalePromotionService implements IPromotionService {
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream() Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1)); .collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1));
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoods : shoppingCartGoodsDto.getProducts()) { for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoods : shoppingCartGoodsDto.getProducts()) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods; ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods;
// 特价商品没有匹配 或 加价购商品 直接跳出循环 // 特价商品没有匹配 或 加价购商品 直接跳出循环
if ((goods = goodsMap.get(cartGoods.getSkuId())) == null || ObjectUtils.equals(ActivityTypeEnum.TYPE_81.getCode(), cartGoods.getActivityType())) { if ((goods = goodsMap.get(cartGoods.getSkuId())) == null || ObjectUtils.equals(ActivityTypeEnum.TYPE_81.getCode(), cartGoods.getActivityType())) {
continue; continue;
} }
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = getGoodsDiscount(goods.getDiscounts(), ActivityTypeEnum.TYPE_2); ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = getGoodsDiscount(goods.getDiscounts(), Arrays.asList(ActivityTypeEnum.TYPE_21.getCode(), ActivityTypeEnum.TYPE_2.getCode()));
if (goodsDiscount == null) { if (goodsDiscount == null) {
continue; continue;
} }
...@@ -135,15 +132,15 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -135,15 +132,15 @@ public class TimeSalePromotionService implements IPromotionService {
* 获取指定促销类型的GoodsDiscount * 获取指定促销类型的GoodsDiscount
* *
* @param goodsDiscountList * @param goodsDiscountList
* @param type * @param discounts
* @return * @return
*/ */
private ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount getGoodsDiscount(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> goodsDiscountList, ActivityTypeEnum type) { private ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount getGoodsDiscount(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> goodsDiscountList, List<Integer> discounts) {
if (CollectionUtils.isEmpty(goodsDiscountList)) { if (CollectionUtils.isEmpty(goodsDiscountList)) {
return null; return null;
} }
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount : goodsDiscountList) { for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount : goodsDiscountList) {
if (Objects.equals(goodsDiscount.getType(), type.getCode())) { if (discounts.contains(goodsDiscount.getType())) {
return goodsDiscount; return goodsDiscount;
} }
} }
......
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