Commit 79cb96702ad4144aac1a365a12df03918a7093b5

Authored by puhui999
1 parent 1bf7fd39

【代码优化】商城: 满减送活动

yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java
@@ -95,8 +95,10 @@ public class RewardActivityMatchRespDTO { @@ -95,8 +95,10 @@ public class RewardActivityMatchRespDTO {
95 * 95 *
96 * key: 优惠劵模版编号 96 * key: 优惠劵模版编号
97 * value:对应的优惠券数量 97 * value:对应的优惠券数量
  98 + *
  99 + * 目的:用于订单支付后赠送优惠券
98 */ 100 */
99 - private Map<Long, Integer> giveCoupons; 101 + private Map<Long, Integer> giveCouponTemplateCounts;
100 102
101 } 103 }
102 104
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/reward/vo/RewardActivityBaseVO.java
@@ -80,7 +80,7 @@ public class RewardActivityBaseVO { @@ -80,7 +80,7 @@ public class RewardActivityBaseVO {
80 private Integer point; 80 private Integer point;
81 81
82 @Schema(description = "赠送的优惠劵编号的数组") 82 @Schema(description = "赠送的优惠劵编号的数组")
83 - private Map<Long, Integer> giveCoupons; 83 + private Map<Long, Integer> giveCouponTemplateCounts;
84 84
85 @AssertTrue(message = "赠送的积分不能小于 0") 85 @AssertTrue(message = "赠送的积分不能小于 0")
86 @JsonIgnore 86 @JsonIgnore
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/reward/RewardActivityDO.java
@@ -107,9 +107,12 @@ public class RewardActivityDO extends BaseDO { @@ -107,9 +107,12 @@ public class RewardActivityDO extends BaseDO {
107 /** 107 /**
108 * 赠送的优惠劵 108 * 赠送的优惠劵
109 * 109 *
110 - * key: 优惠劵模版编号,value:对应的数量 110 + * key: 优惠劵模版编号
  111 + * value:对应的优惠券数量
  112 + *
  113 + * 目的:用于订单支付后赠送优惠券
111 */ 114 */
112 - private Map<Long, Integer> giveCoupons; 115 + private Map<Long, Integer> giveCouponTemplateCounts;
113 116
114 } 117 }
115 118
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java
@@ -296,7 +296,6 @@ public class TradeOrderDO extends BaseDO { @@ -296,7 +296,6 @@ public class TradeOrderDO extends BaseDO {
296 */ 296 */
297 private Integer vipPrice; 297 private Integer vipPrice;
298 298
299 - // TODO @puhui999:我们要不要把相关的字段,定义的更明确一点?例如说,giveCouponTemplateCounts 赠送的优惠劵模版数量,或者 giveCouponCounts 赠送的优惠劵数量。感受上,Coupons 和 Map 有点点重叠哈。  
300 /** 299 /**
301 * 赠送的优惠劵 300 * 赠送的优惠劵
302 * 301 *
@@ -306,7 +305,7 @@ public class TradeOrderDO extends BaseDO { @@ -306,7 +305,7 @@ public class TradeOrderDO extends BaseDO {
306 * 目的:用于订单支付后赠送优惠券 305 * 目的:用于订单支付后赠送优惠券
307 */ 306 */
308 @TableField(typeHandler = JacksonTypeHandler.class) 307 @TableField(typeHandler = JacksonTypeHandler.class)
309 - private Map<Long, Integer> giveCouponsMap; 308 + private Map<Long, Integer> giveCouponTemplateCounts;
310 /** 309 /**
311 * 赠送的优惠劵编号 310 * 赠送的优惠劵编号
312 * 311 *
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
@@ -202,7 +202,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -202,7 +202,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
202 order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum)); 202 order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum));
203 order.setUserIp(getClientIP()).setTerminal(getTerminal()); 203 order.setUserIp(getClientIP()).setTerminal(getTerminal());
204 // 使用 + 赠送优惠券 204 // 使用 + 赠送优惠券
205 - order.setGiveCouponsMap(calculateRespBO.getGiveCoupons()); 205 + order.setGiveCouponTemplateCounts(calculateRespBO.getGiveCouponTemplateCounts());
206 // 支付 + 退款信息 206 // 支付 + 退款信息
207 order.setAdjustPrice(0).setPayStatus(false); 207 order.setAdjustPrice(0).setPayStatus(false);
208 order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0); 208 order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0);
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCouponOrderHandler.java
@@ -42,11 +42,11 @@ public class TradeCouponOrderHandler implements TradeOrderHandler { @@ -42,11 +42,11 @@ public class TradeCouponOrderHandler implements TradeOrderHandler {
42 42
43 @Override 43 @Override
44 public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { 44 public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
45 - if (CollUtil.isEmpty(order.getGiveCouponsMap())) { 45 + if (CollUtil.isEmpty(order.getGiveCouponTemplateCounts())) {
46 return; 46 return;
47 } 47 }
48 // 赠送优惠券 48 // 赠送优惠券
49 - List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponsMap(), order.getUserId()); 49 + List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponTemplateCounts(), order.getUserId());
50 if (CollUtil.isEmpty(couponIds)) { 50 if (CollUtil.isEmpty(couponIds)) {
51 return; 51 return;
52 } 52 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateRespBO.java
@@ -76,10 +76,12 @@ public class TradePriceCalculateRespBO { @@ -76,10 +76,12 @@ public class TradePriceCalculateRespBO {
76 /** 76 /**
77 * 赠送的优惠劵 77 * 赠送的优惠劵
78 * 78 *
79 - * key: 优惠劵编号,value:对应的优惠券数量  
80 - * 目的:用于后续取消或者售后订单时,需要扣减赠送 79 + * key: 优惠劵模版编号
  80 + * value:对应的优惠券数量
  81 + *
  82 + * 目的:用于订单支付后赠送优惠券
81 */ 83 */
82 - private Map<Long, Integer> giveCoupons; 84 + private Map<Long, Integer> giveCouponTemplateCounts;
83 85
84 /** 86 /**
85 * 订单价格 87 * 订单价格
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculatorHelper.java
@@ -32,7 +32,7 @@ public class TradePriceCalculatorHelper { @@ -32,7 +32,7 @@ public class TradePriceCalculatorHelper {
32 List<ProductSpuRespDTO> spuList, List<ProductSkuRespDTO> skuList) { 32 List<ProductSpuRespDTO> spuList, List<ProductSkuRespDTO> skuList) {
33 // 创建 PriceCalculateRespDTO 对象 33 // 创建 PriceCalculateRespDTO 对象
34 TradePriceCalculateRespBO result = new TradePriceCalculateRespBO(); 34 TradePriceCalculateRespBO result = new TradePriceCalculateRespBO();
35 - result.setType(getOrderType(param)).setPromotions(new ArrayList<>()).setGiveCoupons(new LinkedHashMap<>()); 35 + result.setType(getOrderType(param)).setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>());
36 36
37 // 创建它的 OrderItem 属性 37 // 创建它的 OrderItem 属性
38 result.setItems(new ArrayList<>(param.getItems().size())); 38 result.setItems(new ArrayList<>(param.getItems().size()));
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculator.java
@@ -107,13 +107,13 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator @@ -107,13 +107,13 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator
107 result.setFreeDelivery(true); 107 result.setFreeDelivery(true);
108 } 108 }
109 // 4.3 记录赠送的优惠券 109 // 4.3 记录赠送的优惠券
110 - if (CollUtil.isNotEmpty(rule.getGiveCoupons())) {  
111 - for (Map.Entry<Long, Integer> entry : rule.getGiveCoupons().entrySet()) {  
112 - Map<Long, Integer> giveCoupons = result.getGiveCoupons();  
113 - if (giveCoupons.get(entry.getKey()) == null) { // 情况一:还没有赠送的优惠券  
114 - result.setGiveCoupons(rule.getGiveCoupons()); 110 + if (CollUtil.isNotEmpty(rule.getGiveCouponTemplateCounts())) {
  111 + for (Map.Entry<Long, Integer> entry : rule.getGiveCouponTemplateCounts().entrySet()) {
  112 + Map<Long, Integer> giveCouponTemplateCounts = result.getGiveCouponTemplateCounts();
  113 + if (giveCouponTemplateCounts.get(entry.getKey()) == null) { // 情况一:还没有赠送的优惠券
  114 + result.setGiveCouponTemplateCounts(rule.getGiveCouponTemplateCounts());
115 } else { // 情况二:别的满减活动送过同类优惠券,则直接增加数量 115 } else { // 情况二:别的满减活动送过同类优惠券,则直接增加数量
116 - giveCoupons.put(entry.getKey(), giveCoupons.get(entry.getKey()) + entry.getValue()); 116 + giveCouponTemplateCounts.put(entry.getKey(), giveCouponTemplateCounts.get(entry.getKey()) + entry.getValue());
117 } 117 }
118 } 118 }
119 } 119 }
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculatorTest.java
@@ -49,7 +49,7 @@ public class TradeRewardActivityPriceCalculatorTest extends BaseMockitoUnitTest @@ -49,7 +49,7 @@ public class TradeRewardActivityPriceCalculatorTest extends BaseMockitoUnitTest
49 TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() 49 TradePriceCalculateRespBO result = new TradePriceCalculateRespBO()
50 .setType(TradeOrderTypeEnum.NORMAL.getType()) 50 .setType(TradeOrderTypeEnum.NORMAL.getType())
51 .setPrice(new TradePriceCalculateRespBO.Price()) 51 .setPrice(new TradePriceCalculateRespBO.Price())
52 - .setPromotions(new ArrayList<>()).setGiveCoupons(new LinkedHashMap<>()) 52 + .setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>())
53 .setItems(asList( 53 .setItems(asList(
54 new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) 54 new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true)
55 .setPrice(100).setSpuId(1L), 55 .setPrice(100).setSpuId(1L),