Commit e604cba3bf9ab489d6e4596a66713676982b85b1
1 parent
ce367d99
【代码评审】商城:积分商城的下单流程
Showing
7 changed files
with
11 additions
and
11 deletions
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 | } |