Commit 79cb96702ad4144aac1a365a12df03918a7093b5
1 parent
1bf7fd39
【代码优化】商城: 满减送活动
Showing
10 changed files
with
26 additions
and
20 deletions
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java
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 | 80 | private Integer point; |
| 81 | 81 | |
| 82 | 82 | @Schema(description = "赠送的优惠劵编号的数组") |
| 83 | - private Map<Long, Integer> giveCoupons; | |
| 83 | + private Map<Long, Integer> giveCouponTemplateCounts; | |
| 84 | 84 | |
| 85 | 85 | @AssertTrue(message = "赠送的积分不能小于 0") |
| 86 | 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 | 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 | 296 | */ |
| 297 | 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 | 305 | * 目的:用于订单支付后赠送优惠券 |
| 307 | 306 | */ |
| 308 | 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 | 202 | order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum)); |
| 203 | 203 | order.setUserIp(getClientIP()).setTerminal(getTerminal()); |
| 204 | 204 | // 使用 + 赠送优惠券 |
| 205 | - order.setGiveCouponsMap(calculateRespBO.getGiveCoupons()); | |
| 205 | + order.setGiveCouponTemplateCounts(calculateRespBO.getGiveCouponTemplateCounts()); | |
| 206 | 206 | // 支付 + 退款信息 |
| 207 | 207 | order.setAdjustPrice(0).setPayStatus(false); |
| 208 | 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 | 42 | |
| 43 | 43 | @Override |
| 44 | 44 | public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { |
| 45 | - if (CollUtil.isEmpty(order.getGiveCouponsMap())) { | |
| 45 | + if (CollUtil.isEmpty(order.getGiveCouponTemplateCounts())) { | |
| 46 | 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 | 50 | if (CollUtil.isEmpty(couponIds)) { |
| 51 | 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 | 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 | 32 | List<ProductSpuRespDTO> spuList, List<ProductSkuRespDTO> skuList) { |
| 33 | 33 | // 创建 PriceCalculateRespDTO 对象 |
| 34 | 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 | 37 | // 创建它的 OrderItem 属性 |
| 38 | 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 | 107 | result.setFreeDelivery(true); |
| 108 | 108 | } |
| 109 | 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 | 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 | 49 | TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() |
| 50 | 50 | .setType(TradeOrderTypeEnum.NORMAL.getType()) |
| 51 | 51 | .setPrice(new TradePriceCalculateRespBO.Price()) |
| 52 | - .setPromotions(new ArrayList<>()).setGiveCoupons(new LinkedHashMap<>()) | |
| 52 | + .setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>()) | |
| 53 | 53 | .setItems(asList( |
| 54 | 54 | new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) |
| 55 | 55 | .setPrice(100).setSpuId(1L), | ... | ... |