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
| @@ -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), |