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