Commit e604cba3bf9ab489d6e4596a66713676982b85b1

Authored by YunaiV
1 parent ce367d99

【代码评审】商城:积分商城的下单流程

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/AppPointActivityController.java
... ... @@ -73,12 +73,11 @@ public class AppPointActivityController {
73 73  
74 74 // 2. 拼接数据
75 75 List<PointProductDO> products = pointActivityService.getPointProductListByActivityIds(Collections.singletonList(id));
76   - AppPointActivityDetailRespVO respVO = BeanUtils.toBean(activity, AppPointActivityDetailRespVO.class);
77   - // 设置 product 信息
78   - respVO.setProducts(BeanUtils.toBean(products, AppPointActivityDetailRespVO.Product.class));
79   - PointProductDO minProduct = getMinPropertyObj(products, PointProductDO::getPoint);
  76 + PointProductDO minProduct = getMinObject(products, PointProductDO::getPoint);
80 77 assert minProduct != null;
81   - respVO.setPoint(minProduct.getPoint()).setPrice(minProduct.getPrice());
  78 + AppPointActivityDetailRespVO respVO = BeanUtils.toBean(activity, AppPointActivityDetailRespVO.class)
  79 + .setProducts(BeanUtils.toBean(products, AppPointActivityDetailRespVO.Product.class))
  80 + .setPoint(minProduct.getPoint()).setPrice(minProduct.getPrice());
82 81 return success(respVO);
83 82 }
84 83  
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityDetailRespVO.java
... ... @@ -30,7 +30,7 @@ public class AppPointActivityDetailRespVO {
30 30 @Schema(description = "商品信息数组", requiredMode = Schema.RequiredMode.REQUIRED)
31 31 private List<Product> products;
32 32  
33   - //======================= 显示所需兑换积分最少的 sku 信息 =======================
  33 + //======================= 显示所需兑换积分最少的 SKU 信息 =======================
34 34  
35 35 @Schema(description = "兑换积分", requiredMode = Schema.RequiredMode.REQUIRED)
36 36 private Integer point;
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryService.java
... ... @@ -116,7 +116,7 @@ public interface TradeOrderQueryService {
116 116 * @param activityId 活动编号
117 117 * @return 秒杀商品数量
118 118 */
119   - int getActivityProductCount(Long userId, Long activityId);
  119 + int getSeckillProductCount(Long userId, Long activityId);
120 120  
121 121 // =================== Order Item ===================
122 122  
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryServiceImpl.java
... ... @@ -174,7 +174,7 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
174 174 }
175 175  
176 176 @Override
177   - public int getActivityProductCount(Long userId, Long activityId) {
  177 + public int getSeckillProductCount(Long userId, Long activityId) {
178 178 // 获得订单列表
179 179 List<TradeOrderDO> orders = tradeOrderMapper.selectListByUserIdAndSeckillActivityId(userId, activityId);
180 180 orders.removeIf(order -> TradeOrderStatusEnum.isCanceled(order.getStatus())); // 过滤掉【已取消】的订单
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java
... ... @@ -69,7 +69,8 @@ public class TradePriceServiceImpl implements TradePriceService {
69 69 .buildCalculateResp(calculateReqBO, spuList, skuList);
70 70 priceCalculators.forEach(calculator -> calculator.calculate(calculateReqBO, calculateRespBO));
71 71 // 2.2 如果最终支付金额小于等于 0,则抛出业务异常
72   - if (calculateReqBO.getPointActivityId() == null && calculateRespBO.getPrice().getPayPrice() <= 0) {
  72 + if (calculateReqBO.getPointActivityId() == null // 积分订单,允许支付金额为 0
  73 + && calculateRespBO.getPrice().getPayPrice() <= 0) {
73 74 log.error("[calculatePrice][价格计算不正确,请求 calculateReqDTO({}),结果 priceCalculate({})]",
74 75 calculateReqBO, calculateRespBO);
75 76 throw exception(PRICE_CALCULATE_PAY_PRICE_ILLEGAL);
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointActivityPriceCalculator.java
... ... @@ -84,7 +84,7 @@ public class TradePointActivityPriceCalculator implements TradePriceCalculator {
84 84 // 1. 校验是否可以参与积分商城活动
85 85 PointValidateJoinRespDTO pointValidateJoinRespDTO = pointActivityApi.validateJoinPointActivity(activityId, skuId, count);
86 86 // 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用
87   - int activityProductCount = tradeOrderQueryService.getActivityProductCount(userId, activityId);
  87 + int activityProductCount = tradeOrderQueryService.getSeckillProductCount(userId, activityId);
88 88 if (activityProductCount + count > pointValidateJoinRespDTO.getCount()) {
89 89 throw exception(PRICE_CALCULATE_POINT_TOTAL_LIMIT_COUNT);
90 90 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeSeckillActivityPriceCalculator.java
... ... @@ -60,7 +60,7 @@ public class TradeSeckillActivityPriceCalculator implements TradePriceCalculator
60 60 // 1. 校验是否可以参与秒杀
61 61 SeckillValidateJoinRespDTO seckillActivity = seckillActivityApi.validateJoinSeckill(activityId, skuId, count);
62 62 // 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用
63   - int seckillProductCount = tradeOrderQueryService.getActivityProductCount(userId, activityId);
  63 + int seckillProductCount = tradeOrderQueryService.getSeckillProductCount(userId, activityId);
64 64 if (seckillProductCount + count > seckillActivity.getTotalLimitCount()) {
65 65 throw exception(PRICE_CALCULATE_SECKILL_TOTAL_LIMIT_COUNT);
66 66 }
... ...