Commit 6e347bb5 by chongfu.liang

抽出公共代码

parent f3390093
package cn.freemud.demo.entities.bo.goods;
import lombok.Data;
@Data
public class BaseBo {
private ManagerServiceBO managerService;
private String partnerId;
private String shopId;
private String sessionId;
private String userId;
/**
* 业务类型: 0 : 自提 1:外卖 2:微商城
*/
private String menuType ;
}
package cn.freemud.demo.entities.bo.goods.add;
import cn.freemud.demo.entities.bo.goods.BaseBo;
import cn.freemud.demo.entities.bo.goods.ManagerServiceBO;
import cn.freemud.entities.vo.CartGoods;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
@Data
public class BaseAddGoodsBO {
private String sessionId;
private String userId;
private String partnerId;
private String shopId;
public class BaseAddGoodsBO extends BaseBo {
@NotEmpty(message = "spuId不能为空")
private String spuId;
private String skuId;
private ManagerServiceBO managerService;
private CartGoods addGoods;
......@@ -65,10 +55,6 @@ public class BaseAddGoodsBO {
*/
private Integer carVer;
/**
* 业务类型: 0 : 自提 1:外卖 2:微商城
*/
private String menuType ;
private String tableNumber;
......
package cn.freemud.demo.entities.bo.goods.list;
import cn.freemud.demo.entities.bo.goods.BaseBo;
import cn.freemud.demo.entities.bo.goods.ManagerServiceBO;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
......@@ -10,24 +11,14 @@ import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class ListCartGoodsBO {
public class ListCartGoodsBO extends BaseBo {
private String sessionId;
private String userId;
private String partnerId;
private String shopId;
@NotEmpty(message = "spuId不能为空")
private String spuId;
private String skuId;
private ManagerServiceBO managerService;
private CartGoods addGoods;
/**
* 会员卡信息
......@@ -106,10 +97,6 @@ public class ListCartGoodsBO {
*/
private Integer carVer;
/**
* 业务类型: 0 : 自提 1:外卖 2:微商城
*/
private String menuType ;
private String tableNumber;
......
package cn.freemud.demo.entities.bo.goods.update;
import cn.freemud.demo.entities.bo.goods.BaseBo;
import cn.freemud.demo.entities.bo.goods.ManagerServiceBO;
import cn.freemud.entities.vo.CartGoods;
import lombok.Data;
......@@ -8,15 +9,8 @@ import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class UpdateAddGoodsBO {
public class UpdateAddGoodsBO extends BaseBo {
private String sessionId;
private String userId;
private String partnerId;
private String shopId;
@NotEmpty(message = "spuId不能为空")
private String spuId;
......@@ -36,8 +30,6 @@ public class UpdateAddGoodsBO {
@NotEmpty(message = "cartGoodsUid不能为空")
private String cartGoodsUid;
private ManagerServiceBO managerService;
private CartGoods addGoods;
......@@ -79,11 +71,6 @@ public class UpdateAddGoodsBO {
*/
private Integer carVer;
/**
* 业务类型: 0 : 自提 1:外卖 2:微商城
*/
private String menuType ;
private String tableNumber;
......
package cn.freemud.demo.service;
import cn.freemud.demo.entities.bo.goods.*;
import cn.freemud.demo.entities.bo.goods.update.UpdateAddGoodsBO;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.vo.CartGoods;
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
public interface DistributeService {
/**
* 初始化价格
*/
ShoppingGoodsAmountBO initShoppingCart(CalculationDiscountBO.CalculationDiscountResult discountResult
, List<CartGoods> cartGoodsList);
FullReductionBO fullReduction(BaseBo baseRequestDTO, CalculationDiscountBO.CalculationDiscountResult discountResult, List<CartGoods> cartGoodsList, ActivityQueryDto activityQueryDto);
List<CartGoods> buyGift(CalculationDiscountBO.CalculationDiscountResult result, List<CartGoods> cartGoods, ActivityQueryDto activityQueryDto, BaseBo baseRequestDTO);
List<ChooseGoodsBO> bugGiftAndSendCup(CalculationDiscountBO.CalculationDiscountResult result, List<CartGoods> cartGoods, ActivityQueryDto activityQueryDto, BaseBo baseRequestDTO);
}
package cn.freemud.demo.service;
import cn.freemud.demo.entities.bo.goods.CalculationDiscountBO;
import cn.freemud.demo.entities.bo.goods.ShoppingGoodsAmountBO;
import cn.freemud.demo.entities.bo.promotion.ActivityBO;
import cn.freemud.entities.vo.ActivityList;
import cn.freemud.entities.vo.CartGoods;
import java.util.List;
public interface MessageService {
/**
* 满减提示
* @param discountResult
* @return
*/
List<ActivityList> fullReduceMessage(CalculationDiscountBO.CalculationDiscountResult discountResult
, StringBuilder messageBuilder, ActivityBO activityBO);
}
......@@ -15,7 +15,9 @@ import cn.freemud.demo.manager.coupon.CouponManager;
import cn.freemud.demo.manager.customer.CustomerManager;
import cn.freemud.demo.manager.product.ProductManager;
import cn.freemud.demo.manager.promotion.PromotionManager;
import cn.freemud.demo.service.DistributeService;
import cn.freemud.demo.service.ListCartGoodsService;
import cn.freemud.demo.service.MessageService;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.vo.*;
......@@ -73,17 +75,18 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
private PromotionManager promotionManager;
@Autowired
private CalculationCommonService calculationCommonService;
@Autowired
private ActivityAdapter activityAdapter;
@Autowired
private RedisCache redisCache;
private static final String limitCartKey = "ecology:kgd:wxappconfig:open_platform_partner_wxapp_config:appkey_";
@Autowired
private DistributeService distributeService;
@Autowired
private MessageService messageService;
private static final String limitCartKey = "ecology:kgd:wxappconfig:open_platform_partner_wxapp_config:appkey_";
/**
......@@ -314,29 +317,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
// 满减提示
StringBuilder messageBuilder = new StringBuilder();
ActivityBO activityBO = setMessageBO.getActivityBO();
List<ActivityList> activityList = null;
if (activityBO != null && (discountResult == null || CollectionUtils.isEmpty(discountResult.getGoods()))) {
if (activityBO != null && CollectionUtils.isNotEmpty(activityBO.getBenefits())) {
List<BenefitBeanBO> benefitBeanBOList = activityBO.getBenefits();
BenefitBeanBO benefitBeanBO = benefitBeanBOList.get(0);
//调用没有加入购物车的提示语的方法
activityList = setMessageNotInShoppingCart(messageBuilder, activityBO, benefitBeanBOList, benefitBeanBO);
}
}
//促销返回满减提示语
List<CalculationDiscountBO.CalculationDiscountResult.ActivityPrompt> activityPrompts = null;
if (discountResult != null){
discountResult.getActivityPrompts();
}
/**
* 构建提示语
*/
if (CollectionUtils.isNotEmpty(activityPrompts)) {
activityList = setMessageSatisfyCart(messageBuilder, activityPrompts, activityBO);
} else if (discountResult != null) {
activityList = setMessageNoSatisfyCart(messageBuilder, discountResult.getDiscounts());
}
List<ActivityList> activityList = messageService.fullReduceMessage(discountResult, messageBuilder, activityBO);
/**
* 调用促销统一活动查询,过滤出参与的满减(目前只有每满减和阶梯满减)
*/
......@@ -451,10 +432,10 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
ShoppingCartGoodsBO shoppingCartGoodsBO = new ShoppingCartGoodsBO();
ShoppingGoodsAmountBO shoppingGoodsAmountBO = this.initShoppingCart(distributeBO.getCalculationDiscountBO(), distributeBO.getCartGoods());
ShoppingGoodsAmountBO shoppingGoodsAmountBO = distributeService.initShoppingCart(distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods());
// 满减
FullReductionBO fullReductionBO = this.fullReduction(baseRequestDTO, distributeBO.getCalculationDiscountBO(), distributeBO.getCartGoods(), activityQueryDto);
FullReductionBO fullReductionBO = distributeService.fullReduction(baseRequestDTO, distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), activityQueryDto);
List<CartGoods> giftGoods = new ArrayList<>();
AdditionBO additionBO = new AdditionBO(0L ,0l);
if (distributeBO.getCalculationDiscountBO() != null && CollectionUtils.isEmpty(distributeBO.getCartGoods())){
......@@ -462,7 +443,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
* 用促销价格初始化购物车行记录成交价
*/
// 买赠
giftGoods = this.buyGift(distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), activityQueryDto, baseRequestDTO);
giftGoods = distributeService.buyGift(distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), activityQueryDto, baseRequestDTO);
/**
......@@ -490,11 +471,10 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
/**
* 特价类型超出部分提示
*/
// calculationCommonService.drawSurpassDiscountInfo(discountResult, shoppingCartGoodsResponseVo);
Long packAmount = this.getPackAmount(baseRequestDTO, shoppingGoodsAmountBO);
BuyMemberCardBO buyMemberCardBO = this.addNeedCardAmount(baseRequestDTO);
// 买一赠一寄杯
List<ChooseGoodsBO> chooseGoodsBO = this.bugGiftAndSendCup(distributeBO.getCalculationDiscountBO(), distributeBO.getCartGoods(), activityQueryDto, baseRequestDTO);
List<ChooseGoodsBO> chooseGoodsBO = distributeService.bugGiftAndSendCup(distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), activityQueryDto, baseRequestDTO);
shoppingCartGoodsBO.setOriginalTotalAmount(shoppingGoodsAmountBO.getOriginalTotalAmount());
shoppingCartGoodsBO.setNewPackAmount(packAmount);
......
package cn.freemud.demo.service.impl;
import cn.freemud.demo.entities.bo.goods.BenefitBeanBO;
import cn.freemud.demo.entities.bo.goods.CalculationDiscountBO;
import cn.freemud.demo.entities.bo.promotion.ActivityBO;
import cn.freemud.demo.service.MessageService;
import cn.freemud.entities.vo.ActivityList;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.utils.WebUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
public class MessageServiceImpl implements MessageService {
@Override
public List<ActivityList> fullReduceMessage(CalculationDiscountBO.CalculationDiscountResult discountResult, StringBuilder messageBuilder, ActivityBO activityBO) {
List<ActivityList> activityList = null;
if (discountResult == null || CollectionUtils.isEmpty(discountResult.getGoods())) {
if (activityBO != null && CollectionUtils.isNotEmpty(activityBO.getBenefits())) {
List<BenefitBeanBO> benefitBeanBOList = activityBO.getBenefits();
BenefitBeanBO benefitBeanBO = benefitBeanBOList.get(0);
//调用没有加入购物车的提示语的方法
activityList = setMessageNotInShoppingCart(messageBuilder, activityBO, benefitBeanBOList, benefitBeanBO);
}
} else {
//促销返回满减提示语
List<CalculationDiscountBO.CalculationDiscountResult.ActivityPrompt> activityPrompts = discountResult.getActivityPrompts();
/**
* 构建提示语
*/
if (CollectionUtils.isNotEmpty(activityPrompts)) {
activityList = setMessageSatisfyCart(messageBuilder, activityPrompts, activityBO);
}
else {
activityList = setMessageNoSatisfyCart(messageBuilder, discountResult.getDiscounts());
}
}
return activityList;
}
/**
* 设置没有加入购物车的提示语
* @param messageBuilder
*/
private ArrayList<ActivityList> setMessageNotInShoppingCart(StringBuilder messageBuilder, ActivityBO activityBO, List<BenefitBeanBO> benefitBeanBOList, BenefitBeanBO benefitBeanBO) {
ArrayList<ActivityList> activityList = new ArrayList<>();
if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityBO.getActivityType())) {
messageBuilder.append("每满 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(benefitBeanBO.getThresholdAmount() * 1.00 / 100))
.append("</span> 减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(benefitBeanBO.getDiscountAmount() * 1.00 / 100))
.append("</span> ")
.append("最高减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityBO.getMaxMoney() * 1.00 / 100))
.append("</span> 元");
//满足 x 元 减 Y 元 ,最高 减 Z元
ActivityList notInShopping = new ActivityList();
notInShopping.setTipType(1);
notInShopping.setSatisfy(WebUtil.formatAmount(benefitBeanBO.getThresholdAmount() * 1.00 / 100).toString());
notInShopping.setDeduct(WebUtil.formatAmount(benefitBeanBO.getDiscountAmount() * 1.00 / 100).toString());
notInShopping.setMaxDeduct(WebUtil.formatAmount(activityBO.getMaxMoney() * 1.00 / 100).toString());
activityList.add(notInShopping);
}
if (Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), activityBO.getActivityType())) {
int len = benefitBeanBOList.size();
// // 购物车中无商品或者存在与满减互斥的活动
for (int i = len - 1; i >= 0; i--) {
benefitBeanBO = benefitBeanBOList.get(i);
messageBuilder.append("满 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(benefitBeanBO.getThresholdAmount() * 1.00 / 100))
.append("</span> 减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(benefitBeanBO.getDiscountAmount() * 1.00 / 100))
.append("</span> 元");
if (i > 0) messageBuilder.append(",");
}
// 阶梯满减:满足 X 元 减 Y 元,
for (int j = len - 1; j >= 0; j--) {
benefitBeanBO = benefitBeanBOList.get(j);
ActivityList notInShopping = new ActivityList();
notInShopping.setTipType(2);
notInShopping.setSatisfy(WebUtil.formatAmount(benefitBeanBO.getThresholdAmount() * 1.00 / 100).toString());
notInShopping.setDeduct(WebUtil.formatAmount(benefitBeanBO.getDiscountAmount() * 1.00 / 100).toString());
activityList.add(notInShopping);
}
}
return activityList;
}
/**
* 设置加入商品满足购物车时的提示语
*
* @param messageBuilder
* @param activityPrompts
* @param activityResponseDto
*/
private List<ActivityList> setMessageSatisfyCart(StringBuilder messageBuilder, List<CalculationDiscountBO.CalculationDiscountResult.ActivityPrompt> activityPrompts
, ActivityBO activityResponseDto) {
ArrayList<ActivityList> result = new ArrayList<>();
ActivityList satisfyList = new ActivityList();
CalculationDiscountBO.CalculationDiscountResult.ActivityPrompt activityPrompt = activityPrompts.get(0);
if (activityPrompt.getAlreadyDiscountAmount() == null
|| activityPrompt.getAlreadyDiscountAmount() == 0) {
messageBuilder.append("满 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100))
.append("</span> 减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getDiscountAmout() * 1.00 / 100))
.append("</span> ")
.append("还差 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100))
.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 {
Long toDiscountAmout;
if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType())) {
toDiscountAmout = activityPrompt.getDiscountAmout() + activityPrompt.getAlreadyDiscountAmount();
} else {
toDiscountAmout = activityPrompt.getDiscountAmout();
}
//已减 X 元 再买 Y 元 减 Z 元
messageBuilder.append("已减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getAlreadyDiscountAmount() * 1.00 / 100))
.append("</span> 元 再买 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100))
.append("</span> 元减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(toDiscountAmout * 1.00 / 100))
.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());
}
result.add(satisfyList);
return result;
}
/**
* 设置加入商品不满足购物车时的提示语
*
* @param messageBuilder
* @param discountList
*/
private List<ActivityList> setMessageNoSatisfyCart(StringBuilder messageBuilder, List<CalculationDiscountBO.CalculationDiscountResult.Discount> discountList) {
List<ActivityList> activityList = new ArrayList<>();
discountList = discountList.parallelStream().filter(k -> (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), k.getType())
|| Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), k.getType()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(discountList)) {
return null;
}
//已减 X 元
messageBuilder.append("已减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(discountList.get(0).getDiscount() * 1.00 / 100))
.append("</span> 元");
ActivityList noSatisfy = new ActivityList();
noSatisfy.setTipType(5);
noSatisfy.setDeduct(WebUtil.formatAmount(discountList.get(0).getDiscount() * 1.00 / 100).toString());
activityList.add(noSatisfy);
return activityList;
}
}
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