Browse Source

!1070 【代码优化】商城: 满减送活动
Merge pull request !1070 from puhui999/develop

芋道源码 7 months ago
parent
commit
f3dd628aba
13 changed files with 36 additions and 45 deletions
  1. 3 1
      yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java
  2. 5 6
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/reward/RewardActivityController.java
  3. 4 4
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/reward/vo/RewardActivityBaseVO.java
  4. 0 13
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/reward/RewardActivityConvert.java
  5. 5 2
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/reward/RewardActivityDO.java
  6. 2 3
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImpl.java
  7. 1 2
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java
  8. 1 1
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
  9. 2 2
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCouponOrderHandler.java
  10. 5 3
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateRespBO.java
  11. 1 1
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculatorHelper.java
  12. 6 6
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculator.java
  13. 1 1
      yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculatorTest.java

+ 3 - 1
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 {
          *
          * key: 优惠劵模版编号
          * value:对应的优惠券数量
+         *
+         * 目的:用于订单支付后赠送优惠券
          */
-        private Map<Long, Integer> giveCoupons;
+        private Map<Long, Integer> giveCouponTemplateCounts;
 
     }
 

+ 5 - 6
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/reward/RewardActivityController.java

@@ -2,23 +2,22 @@ package cn.iocoder.yudao.module.promotion.controller.admin.reward;
 
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
 import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO;
 import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityRespVO;
 import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO;
-import cn.iocoder.yudao.module.promotion.convert.reward.RewardActivityConvert;
 import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
 import cn.iocoder.yudao.module.promotion.service.reward.RewardActivityService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 
 @Tag(name = "管理后台 - 满减送活动")
@@ -69,7 +68,7 @@ public class RewardActivityController {
     @PreAuthorize("@ss.hasPermission('promotion:reward-activity:query')")
     public CommonResult<RewardActivityRespVO> getRewardActivity(@RequestParam("id") Long id) {
         RewardActivityDO rewardActivity = rewardActivityService.getRewardActivity(id);
-        return success(RewardActivityConvert.INSTANCE.convert(rewardActivity));
+        return success(BeanUtils.toBean(rewardActivity, RewardActivityRespVO.class));
     }
 
     @GetMapping("/page")
@@ -77,7 +76,7 @@ public class RewardActivityController {
     @PreAuthorize("@ss.hasPermission('promotion:reward-activity:query')")
     public CommonResult<PageResult<RewardActivityRespVO>> getRewardActivityPage(@Valid RewardActivityPageReqVO pageVO) {
         PageResult<RewardActivityDO> pageResult = rewardActivityService.getRewardActivityPage(pageVO);
-        return success(RewardActivityConvert.INSTANCE.convertPage(pageResult));
+        return success(BeanUtils.toBean(pageResult, RewardActivityRespVO.class));
     }
 
 }

+ 4 - 4
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/reward/vo/RewardActivityBaseVO.java

@@ -79,13 +79,13 @@ public class RewardActivityBaseVO {
         @Schema(description = "赠送的积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
         private Integer point;
 
-        @Schema(description = "赠送的优惠劵编号的数组", example = "1,2,3")
-        private Map<Long, Integer> giveCouponsMap;
+        @Schema(description = "赠送的优惠劵编号的数组")
+        private Map<Long, Integer> giveCouponTemplateCounts;
 
-        @AssertTrue(message = "赠送的积分不能小于 1")
+        @AssertTrue(message = "赠送的积分不能小于 0")
         @JsonIgnore
         public boolean isPointValid() {
-            return point == null || point >= 1;
+            return point == null || point >= 0;
         }
 
     }

+ 0 - 13
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/reward/RewardActivityConvert.java

@@ -1,10 +1,5 @@
 package cn.iocoder.yudao.module.promotion.convert.reward;
 
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
-import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityRespVO;
-import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO;
-import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
@@ -18,12 +13,4 @@ public interface RewardActivityConvert {
 
     RewardActivityConvert INSTANCE = Mappers.getMapper(RewardActivityConvert.class);
 
-    RewardActivityDO convert(RewardActivityCreateReqVO bean);
-
-    RewardActivityDO convert(RewardActivityUpdateReqVO bean);
-
-    RewardActivityRespVO convert(RewardActivityDO bean);
-
-    PageResult<RewardActivityRespVO> convertPage(PageResult<RewardActivityDO> page);
-
 }

+ 5 - 2
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 {
         /**
          * 赠送的优惠劵
          *
-         *  key: 优惠劵编号,value:对应的优惠券数量
+         * key: 优惠劵模版编号
+         * value:对应的优惠券数量
+         *
+         * 目的:用于订单支付后赠送优惠券
          */
-        private Map<Long, Integer> giveCouponsMap;
+        private Map<Long, Integer> giveCouponTemplateCounts;
 
     }
 

+ 2 - 3
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImpl.java

@@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivi
 import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
 import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO;
 import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO;
-import cn.iocoder.yudao.module.promotion.convert.reward.RewardActivityConvert;
 import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
 import cn.iocoder.yudao.module.promotion.dal.mysql.reward.RewardActivityMapper;
 import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum;
@@ -54,7 +53,7 @@ public class RewardActivityServiceImpl implements RewardActivityService {
         validateRewardActivitySpuConflicts(null, createReqVO);
 
         // 2. 插入
-        RewardActivityDO rewardActivity = RewardActivityConvert.INSTANCE.convert(createReqVO)
+        RewardActivityDO rewardActivity = BeanUtils.toBean(createReqVO, RewardActivityDO.class)
                 .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getEndTime()));
         rewardActivityMapper.insert(rewardActivity);
         // 返回
@@ -74,7 +73,7 @@ public class RewardActivityServiceImpl implements RewardActivityService {
         validateRewardActivitySpuConflicts(updateReqVO.getId(), updateReqVO);
 
         // 2. 更新
-        RewardActivityDO updateObj = RewardActivityConvert.INSTANCE.convert(updateReqVO)
+        RewardActivityDO updateObj = BeanUtils.toBean(updateReqVO, RewardActivityDO.class)
                 .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getEndTime()));
         rewardActivityMapper.updateById(updateObj);
     }

+ 1 - 2
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 {
      */
     private Integer vipPrice;
 
-    // TODO @puhui999:我们要不要把相关的字段,定义的更明确一点?例如说,giveCouponTemplateCounts 赠送的优惠劵模版数量,或者 giveCouponCounts 赠送的优惠劵数量。感受上,Coupons 和 Map 有点点重叠哈。
     /**
      * 赠送的优惠劵
      *
@@ -306,7 +305,7 @@ public class TradeOrderDO extends BaseDO {
      * 目的:用于订单支付后赠送优惠券
      */
     @TableField(typeHandler = JacksonTypeHandler.class)
-    private Map<Long, Integer> giveCouponsMap;
+    private Map<Long, Integer> giveCouponTemplateCounts;
     /**
      * 赠送的优惠劵编号
      *

+ 1 - 1
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 {
         order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum));
         order.setUserIp(getClientIP()).setTerminal(getTerminal());
         // 使用 + 赠送优惠券
-        order.setGiveCouponsMap(calculateRespBO.getGiveCoupons());
+        order.setGiveCouponTemplateCounts(calculateRespBO.getGiveCouponTemplateCounts());
         // 支付 + 退款信息
         order.setAdjustPrice(0).setPayStatus(false);
         order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0);

+ 2 - 2
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 {
 
     @Override
     public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
-        if (CollUtil.isEmpty(order.getGiveCouponsMap())) {
+        if (CollUtil.isEmpty(order.getGiveCouponTemplateCounts())) {
             return;
         }
         // 赠送优惠券
-        List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponsMap(), order.getUserId());
+        List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponTemplateCounts(), order.getUserId());
         if (CollUtil.isEmpty(couponIds)) {
             return;
         }

+ 5 - 3
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 {
     /**
      * 赠送的优惠劵
      *
-     *  key: 优惠劵编号,value:对应的优惠券数量
-     * 目的:用于后续取消或者售后订单时,需要扣减赠送
+     * key: 优惠劵模版编号
+     * value:对应的优惠券数量
+     *
+     * 目的:用于订单支付后赠送优惠券
      */
-    private Map<Long, Integer> giveCoupons;
+    private Map<Long, Integer> giveCouponTemplateCounts;
 
     /**
      * 订单价格

+ 1 - 1
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 {
                                                                List<ProductSpuRespDTO> spuList, List<ProductSkuRespDTO> skuList) {
         // 创建 PriceCalculateRespDTO 对象
         TradePriceCalculateRespBO result = new TradePriceCalculateRespBO();
-        result.setType(getOrderType(param)).setPromotions(new ArrayList<>()).setGiveCoupons(new LinkedHashMap<>());
+        result.setType(getOrderType(param)).setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>());
 
         // 创建它的 OrderItem 属性
         result.setItems(new ArrayList<>(param.getItems().size()));

+ 6 - 6
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
             result.setFreeDelivery(true);
         }
         // 4.3 记录赠送的优惠券
-        if (CollUtil.isNotEmpty(rule.getGiveCoupons())) {
-            for (Map.Entry<Long, Integer> entry : rule.getGiveCoupons().entrySet()) {
-                Map<Long, Integer> giveCoupons = result.getGiveCoupons();
-                if (giveCoupons.get(entry.getKey()) == null) { // 情况一:还没有赠送的优惠券
-                    result.setGiveCoupons(rule.getGiveCoupons());
+        if (CollUtil.isNotEmpty(rule.getGiveCouponTemplateCounts())) {
+            for (Map.Entry<Long, Integer> entry : rule.getGiveCouponTemplateCounts().entrySet()) {
+                Map<Long, Integer> giveCouponTemplateCounts = result.getGiveCouponTemplateCounts();
+                if (giveCouponTemplateCounts.get(entry.getKey()) == null) { // 情况一:还没有赠送的优惠券
+                    result.setGiveCouponTemplateCounts(rule.getGiveCouponTemplateCounts());
                 } else { // 情况二:别的满减活动送过同类优惠券,则直接增加数量
-                    giveCoupons.put(entry.getKey(), giveCoupons.get(entry.getKey()) + entry.getValue());
+                    giveCouponTemplateCounts.put(entry.getKey(), giveCouponTemplateCounts.get(entry.getKey()) + entry.getValue());
                 }
             }
         }

+ 1 - 1
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
         TradePriceCalculateRespBO result = new TradePriceCalculateRespBO()
                 .setType(TradeOrderTypeEnum.NORMAL.getType())
                 .setPrice(new TradePriceCalculateRespBO.Price())
-                .setPromotions(new ArrayList<>()).setGiveCoupons(new LinkedHashMap<>())
+                .setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>())
                 .setItems(asList(
                         new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true)
                                 .setPrice(100).setSpuId(1L),