Browse Source

code review:营销活动+订单

YunaiV 1 year ago
parent
commit
87c55784c4
18 changed files with 91 additions and 62 deletions
  1. 0 8
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
  2. 2 2
      yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApi.java
  3. 0 1
      yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java
  4. 4 0
      yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/dto/SeckillActivityUpdateStockReqDTO.java
  5. 2 0
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainActivityApiImpl.java
  6. 10 1
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApiImpl.java
  7. 43 31
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/combination/CombinationRecordDO.java
  8. 2 2
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java
  9. 4 4
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java
  10. 5 4
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java
  11. 5 4
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.java
  12. 4 4
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
  13. 2 0
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java
  14. 1 0
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/redis/no/TradeOrderNoRedisDAO.java
  15. 4 0
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
  16. 2 0
      yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java
  17. 0 1
      yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java
  18. 1 0
      yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java

+ 0 - 8
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java

@@ -68,14 +68,6 @@ public class CommonResult<T> implements Serializable {
         return result;
     }
 
-    public static <T> CommonResult<T> success(T data, String msg) {
-        CommonResult<T> result = new CommonResult<>();
-        result.code = GlobalErrorCodeConstants.SUCCESS.getCode();
-        result.data = data;
-        result.msg = msg;
-        return result;
-    }
-
     public static boolean isSuccess(Integer code) {
         return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode());
     }

+ 2 - 2
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApi.java

@@ -52,7 +52,7 @@ public interface CombinationRecordApi {
     void validateCombinationLimitCount(Long activityId, Integer count, Integer sumCount);
 
     /**
-     * 更新拼团状态为 成功
+     * 更新拼团状态为成功
      *
      * @param userId  用户编号
      * @param orderId 订单编号
@@ -60,7 +60,7 @@ public interface CombinationRecordApi {
     void updateRecordStatusToSuccess(Long userId, Long orderId);
 
     /**
-     * 更新拼团状态为 失败
+     * 更新拼团状态为失败
      *
      * @param userId  用户编号
      * @param orderId 订单编号

+ 0 - 1
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java

@@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.promotion.api.seckill.dto.SeckillActivityUpdateSt
  */
 public interface SeckillActivityApi {
 
-
     /**
      * 更新秒杀库存
      *

+ 4 - 0
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/dto/SeckillActivityUpdateStockReqDTO.java

@@ -12,6 +12,10 @@ import java.util.List;
 @Data
 public class SeckillActivityUpdateStockReqDTO {
 
+    // TODO @puhui999:参数校验
+
+    // TODO @puhui999:秒杀的话,一次只能购买一种商品哈;不能多个哈;
+
     /**
      * 活动编号
      */

+ 2 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainActivityApiImpl.java

@@ -23,6 +23,7 @@ public class BargainActivityApiImpl implements BargainActivityApi {
 
     @Override
     public void updateBargainActivityStock(Long activityId, Integer count) {
+        // TODO @puhui999:可以整个实现到 bargainActivityService 中
         // 查询砍价活动
         BargainActivityDO activity = bargainActivityService.getBargainActivity(activityId);
         if (activity == null) {
@@ -30,6 +31,7 @@ public class BargainActivityApiImpl implements BargainActivityApi {
         }
 
         // 更新砍价库存
+        // TODO @puhui999:考虑下并发更新问题
         BargainActivityUpdateReqVO reqVO = new BargainActivityUpdateReqVO();
         reqVO.setId(activityId);
         reqVO.setStock(activity.getStock() - count);

+ 10 - 1
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApiImpl.java

@@ -27,14 +27,19 @@ public class SeckillActivityApiImpl implements SeckillActivityApi {
     @Resource
     private SeckillActivityService activityService;
 
+    // TODO @puhui:建议这块弄到 activityService 实现哈;
+    // TODO @puhui:这个方法,要考虑事务性
     @Override
     public void updateSeckillStock(SeckillActivityUpdateStockReqDTO updateStockReqDTO) {
+        // TODO @puhui999:长方法,最好有 1.1 1.2 2.1 这种步骤哈;
         SeckillActivityDO seckillActivity = activityService.getSeckillActivity(updateStockReqDTO.getActivityId());
         if (seckillActivity.getStock() < updateStockReqDTO.getCount()) {
             throw exception(SECKILL_ACTIVITY_UPDATE_STOCK_FAIL);
         }
         // 获取活动商品
+        // TODO @puhui999:在一个方法里,dos 和 dolist 最好保持一致,要么用 s,要么用 list 哈;
         List<SeckillProductDO> productDOs = activityService.getSeckillProductListByActivityId(updateStockReqDTO.getActivityId());
+        // TODO @puhui999:这个是不是搞成  CollectionUtils.convertMultiMap()
         List<SeckillActivityUpdateStockReqDTO.Item> items = updateStockReqDTO.getItems();
         Map<Long, List<Long>> map = new HashMap<>();
         items.forEach(item -> {
@@ -49,9 +54,11 @@ public class SeckillActivityApiImpl implements SeckillActivityApi {
             }
         });
         // 过滤出购买的商品
+        // TODO @puhui999:productDOList 可以简化成 productList;一般来说,do 之类不用带着哈,在变量里;
         List<SeckillProductDO> productDOList = CollectionUtils.filterList(productDOs, item -> map.get(item.getSpuId()).contains(item.getSkuId()));
         Map<Long, SeckillActivityUpdateStockReqDTO.Item> productDOMap = CollectionUtils.convertMap(items, SeckillActivityUpdateStockReqDTO.Item::getSkuId, p -> p);
         // 检查活动商品库存是否充足
+        // TODO @puhui999:避免 b 这种无业务含义的变量;
         boolean b = CollectionUtils.anyMatch(productDOList, item -> {
             SeckillActivityUpdateStockReqDTO.Item item1 = productDOMap.get(item.getSkuId());
             return (item.getStock() < item1.getCount()) || (item.getStock() - item1.getCount()) < 0;
@@ -59,17 +66,19 @@ public class SeckillActivityApiImpl implements SeckillActivityApi {
         if (b) {
             throw exception(SECKILL_ACTIVITY_UPDATE_STOCK_FAIL);
         }
+        // TODO @puhui999:类似 doList,应该和下面的 update 逻辑粘的更紧密一点;so 在空行的时候,应该挪到 74 之后里去;甚至更合理,应该是 79 之后;说白了,逻辑要分块,每个模块涉及的代码要紧密在一起;
         List<SeckillProductDO> doList = CollectionUtils.convertList(productDOList, item -> {
             item.setStock(item.getStock() - productDOMap.get(item.getSkuId()).getCount());
             return item;
         });
 
         // 更新活动库存
+        // TODO @puhui999:考虑下并发更新
         seckillActivity.setStock(seckillActivity.getStock() + updateStockReqDTO.getCount());
         seckillActivity.setTotalStock(seckillActivity.getTotalStock() - updateStockReqDTO.getCount());
         activityService.updateSeckillActivity(seckillActivity);
         // 更新活动商品库存
-        activityService.updateSeckillActivityProductByList(doList);
+        activityService.updateSeckillActivityProductList(doList);
     }
 
 }

+ 43 - 31
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/combination/CombinationRecordDO.java

@@ -9,6 +9,7 @@ import lombok.*;
 
 import java.time.LocalDateTime;
 
+// TODO 芋艿:把字段的顺序,和 do 顺序对齐下
 /**
  * 拼团记录 DO
  *
@@ -27,34 +28,28 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 public class CombinationRecordDO extends BaseDO {
 
+    /**
+     * 编号,主键自增
+     */
     @TableId
     private Long id;
+
     /**
      * 拼团活动编号
+     *
+     * 关联 {@link CombinationActivityDO#getId()}
      */
     private Long activityId;
     /**
-     * SPU 编号
-     */
-    private Long spuId;
-    /**
-     * SKU 编号
-     */
-    private Long skuId;
-    /**
-     * 用户编号
-     */
-    private Long userId;
-    /**
-     * 订单编号
+     * 拼团商品单价
+     *
+     * 冗余 {@link CombinationProductDO#getCombinationPrice()}
      */
-    private Long orderId;
+    private Integer combinationPrice;
     /**
-     * 团长编号
-     *
-     * 关联 {@link CombinationRecordDO#getId()}
+     * SPU 编号
      */
-    private Long headId;
+    private Long spuId;
     /**
      * 商品名字
      */
@@ -64,9 +59,14 @@ public class CombinationRecordDO extends BaseDO {
      */
     private String picUrl;
     /**
-     * 拼团商品单价
+     * SKU 编号
      */
-    private Integer combinationPrice;
+    private Long skuId;
+
+    /**
+     * 用户编号
+     */
+    private Long userId;
     /**
      * 用户昵称
      */
@@ -75,20 +75,42 @@ public class CombinationRecordDO extends BaseDO {
      * 用户头像
      */
     private String avatar;
+
+    /**
+     * 团长编号
+     *
+     * 关联 {@link CombinationRecordDO#getId()}
+     */
+    private Long headId;
     /**
      * 开团状态
      *
      * 关联 {@link CombinationRecordStatusEnum}
      */
     private Integer status;
+    /**
+     * 订单编号
+     */
+    private Long orderId;
+    /**
+     * 开团需要人数
+     *
+     * 关联 {@link CombinationActivityDO#getUserSize()}
+     */
+    private Integer userSize;
+    /**
+     * 已加入拼团人数
+     */
+    private Integer userCount;
     /**
      * 是否虚拟成团
      */
     private Boolean virtualGroup;
+
     /**
      * 过期时间
      *
-     * {@link CombinationRecordDO#getStartTime()} + {@link CombinationActivityDO#getLimitDuration()} 计算
+     * 基于 {@link CombinationRecordDO#getStartTime()} + {@link CombinationActivityDO#getLimitDuration()} 计算
      */
     private LocalDateTime expireTime;
     /**
@@ -99,15 +121,5 @@ public class CombinationRecordDO extends BaseDO {
      * 结束时间(成团时间/失败时间)
      */
     private LocalDateTime endTime;
-    /**
-     * 开团需要人数
-     *
-     * 关联 {@link CombinationActivityDO#getUserSize()}
-     */
-    private Integer userSize;
-    /**
-     * 已加入拼团人数
-     */
-    private Integer userCount;
 
 }

+ 2 - 2
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java

@@ -43,9 +43,9 @@ public interface SeckillActivityService {
     /**
      * 更新秒杀活动商品
      *
-     * @param productDOList 活动商品列表
+     * @param productList 活动商品列表
      */
-    void updateSeckillActivityProductByList(List<SeckillProductDO> productDOList);
+    void updateSeckillActivityProductList(List<SeckillProductDO> productList);
 
     /**
      * 关闭秒杀活动

+ 4 - 4
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java

@@ -93,8 +93,8 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
             activityList.removeIf(item -> ObjectUtil.equal(item.getId(), activityId));
         }
         // 2.2 过滤出所有 configIds 有交集的活动,判断是否存在重叠
-        List<SeckillActivityDO> activityDOs = filterList(activityList, s -> containsAny(s.getConfigIds(), configIds));
-        if (isNotEmpty(activityDOs)) {
+        List<SeckillActivityDO> conflictActivityList = filterList(activityList, s -> containsAny(s.getConfigIds(), configIds));
+        if (isNotEmpty(conflictActivityList)) {
             throw exception(SECKILL_ACTIVITY_SPU_CONFLICTS);
         }
     }
@@ -150,8 +150,8 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
     }
 
     @Override
-    public void updateSeckillActivityProductByList(List<SeckillProductDO> productDOList) {
-        seckillProductMapper.updateBatch(productDOList);
+    public void updateSeckillActivityProductList(List<SeckillProductDO> productList) {
+        seckillProductMapper.updateBatch(productList);
     }
 
     /**

+ 5 - 4
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java

@@ -36,7 +36,6 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.AFTER_SALE_NOT_FOUND;
 
 @Tag(name = "管理后台 - 售后订单")
 @RestController
@@ -77,9 +76,11 @@ public class TradeAfterSaleController {
     public CommonResult<TradeAfterSaleDetailRespVO> getOrderDetail(@RequestParam("id") Long id) {
         // 查询订单
         TradeAfterSaleDO afterSale = afterSaleService.getAfterSale(id);
-        if (afterSale == null) {
-            return success(null, AFTER_SALE_NOT_FOUND.getMsg());
-        }
+        // TODO @puhui999:这里建议改成,如果为 null,直接返回 success null;主要查询操作,尽量不要有非空的提示哈;交给前端处理;
+//        if (afterSale == null) {
+//            return success(null, AFTER_SALE_NOT_FOUND.getMsg());
+//        }
+
         // 查询订单
         TradeOrderDO order = tradeOrderQueryService.getOrder(afterSale.getOrderId());
         // 查询订单项

+ 5 - 4
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.java

@@ -25,7 +25,6 @@ import java.util.Map;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
-import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_NOT_FOUND;
 
 @Tag(name = "管理后台 - 交易订单")
 @RestController
@@ -68,9 +67,11 @@ public class TradeOrderController {
     public CommonResult<TradeOrderDetailRespVO> getOrderDetail(@RequestParam("id") Long id) {
         // 查询订单
         TradeOrderDO order = tradeOrderQueryService.getOrder(id);
-        if (order == null) {
-            return success(null, ORDER_NOT_FOUND.getMsg());
-        }
+        // TODO @puhui999:这里建议改成,如果为 null,直接返回 success null;主要查询操作,尽量不要有非空的提示哈;交给前端处理;
+//        if (order == null) {
+//            return success(null, ORDER_NOT_FOUND.getMsg());
+//        }
+
         // 查询订单项
         List<TradeOrderItemDO> orderItems = tradeOrderQueryService.getOrderItemListByOrderId(id);
         // orderLog

+ 4 - 4
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java

@@ -33,7 +33,6 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_NOT_FOUND;
 
 @Tag(name = "用户 App - 交易订单")
 @RestController
@@ -82,9 +81,10 @@ public class AppTradeOrderController {
     public CommonResult<AppTradeOrderDetailRespVO> getOrder(@RequestParam("id") Long id) {
         // 查询订单
         TradeOrderDO order = tradeOrderQueryService.getOrder(getLoginUserId(), id);
-        if (order == null) {
-            return success(null, ORDER_NOT_FOUND.getMsg());
-        }
+        // TODO @puhui999:这里建议改成,如果为 null,直接返回 success null;主要查询操作,尽量不要有非空的提示哈;交给前端处理;
+//        if (order == null) {
+//            return success(null, ORDER_NOT_FOUND.getMsg());
+//        }
 
         // 查询订单项
         List<TradeOrderItemDO> orderItems = tradeOrderQueryService.getOrderItemListByOrderId(order.getId());

+ 2 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java

@@ -50,6 +50,7 @@ public class AppTradeOrderSettlementReqVO {
     private Long seckillActivityId;
 
     // ========== 拼团活动相关字段 ==========
+    // TODO @puhui999:是不是拼团记录的编号哈?
     @Schema(description = "拼团活动编号", example = "1024")
     private Long combinationActivityId;
 
@@ -57,6 +58,7 @@ public class AppTradeOrderSettlementReqVO {
     private Long combinationHeadId;
 
     // ========== 砍价活动相关字段 ==========
+    // TODO @puhui999:是不是砍价记录的编号哈?
     @Schema(description = "砍价活动编号", example = "123")
     private Long bargainActivityId;
 

+ 1 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/redis/no/TradeOrderNoRedisDAO.java

@@ -15,6 +15,7 @@ import java.time.LocalDateTime;
  */
 @Repository
 public class TradeOrderNoRedisDAO {
+
     public static final String TRADE_ORDER_NO_PREFIX = "O";
 
     @Resource

+ 4 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -561,6 +561,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     }
 
     @Override
+    // TODO @puhui999:考虑事务性
     public void updateOrderPrice(TradeOrderUpdatePriceReqVO reqVO) {
         // 校验交易订单
         TradeOrderDO order = validateOrderExists(reqVO.getId());
@@ -571,6 +572,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             throw exception(ORDER_UPDATE_PRICE_FAIL_EQUAL);
         }
 
+        // TODO @puhui999:应该是按照 payPrice 分配;并且要考虑取余问题;payPrice 也要考虑,item 里的
         List<TradeOrderItemDO> itemDOs = tradeOrderItemMapper.selectListByOrderId(order.getId());
         // TradeOrderItemDO 需要做 adjustPrice 的分摊
         int price = reqVO.getAdjustPrice() / itemDOs.size();
@@ -578,8 +580,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             item.setAdjustPrice(price);
         });
         // 更新 TradeOrderItem
+        // TODO @puhui999:不要整个对象去更新哈;应该 new 一下;
         tradeOrderItemMapper.updateBatch(itemDOs);
         // 更新订单
+        // TODO @puhui999:要考虑多次修改价格,不能单单的 payPrice + 价格;
         TradeOrderDO update = TradeOrderConvert.INSTANCE.convert(reqVO);
         update.setPayPrice(update.getPayPrice() + update.getAdjustPrice());
         // TODO @芋艿:改价时,赠送的积分,要不要做改动???

+ 2 - 0
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java

@@ -29,6 +29,7 @@ public interface PayOrderApi {
      */
     PayOrderRespDTO getOrder(Long id);
 
+    // TODO @puhui999:可以去掉 byId;然后 payOrderId 参数改成 id;
     /**
      * 更新支付订单价格
      *
@@ -36,4 +37,5 @@ public interface PayOrderApi {
      * @param payPrice   支付单价格
      */
     void updatePayOrderPriceById(Long payOrderId, Integer payPrice);
+
 }

+ 0 - 1
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java

@@ -36,5 +36,4 @@ public class PayOrderApiImpl implements PayOrderApi {
         payOrderService.updatePayOrderPriceById(payOrderId, payPrice);
     }
 
-
 }

+ 1 - 0
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java

@@ -413,6 +413,7 @@ public class PayOrderServiceImpl implements PayOrderService {
 
     @Override
     public void updatePayOrderPriceById(Long payOrderId, Integer payPrice) {
+        // TODO @puhui999:不能直接这样修改哈;应该只有未支付状态的订单才可以改;另外,如果价格如果没变,可以直接 return 哈;
         PayOrderDO order = orderMapper.selectById(payOrderId);
         if (order == null) {
             throw exception(ORDER_NOT_FOUND);