Commit dd6adb8ee6f431d062dc826971711066675f6f86

Authored by zhijiantianya@gmail.com
1 parent 361ad2e2

code review order

yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverPickUpStoreController.java
@@ -24,6 +24,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -24,6 +24,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
24 @Validated 24 @Validated
25 public class AppDeliverPickUpStoreController { 25 public class AppDeliverPickUpStoreController {
26 26
  27 + // TODO 待实现[门店自提]:如果 latitude、longitude 非空,计算经纬度,并排序。计算的库,可以使用 hutool 的 DistanceUtil 计算。
27 @GetMapping("/list") 28 @GetMapping("/list")
28 @Operation(summary = "获得自提门店列表") 29 @Operation(summary = "获得自提门店列表")
29 public CommonResult<List<AppDeliveryPickUpStoreRespVO>> getDeliveryPickUpStoreList( 30 public CommonResult<List<AppDeliveryPickUpStoreRespVO>> getDeliveryPickUpStoreList(
@@ -50,6 +51,7 @@ public class AppDeliverPickUpStoreController { @@ -50,6 +51,7 @@ public class AppDeliverPickUpStoreController {
50 return success(list); 51 return success(list);
51 } 52 }
52 53
  54 + // TODO 待实现[门店自提]:
53 @GetMapping("/get") 55 @GetMapping("/get")
54 @Operation(summary = "获得自提门店") 56 @Operation(summary = "获得自提门店")
55 @Parameter(name = "id", description = "门店编号") 57 @Parameter(name = "id", description = "门店编号")
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
@@ -50,9 +50,6 @@ public class AppTradeOrderController { @@ -50,9 +50,6 @@ public class AppTradeOrderController {
50 private DeliveryExpressService deliveryExpressService; 50 private DeliveryExpressService deliveryExpressService;
51 51
52 @Resource 52 @Resource
53 - private ProductPropertyValueApi productPropertyValueApi;  
54 -  
55 - @Resource  
56 private TradeOrderProperties tradeOrderProperties; 53 private TradeOrderProperties tradeOrderProperties;
57 54
58 @GetMapping("/settlement") 55 @GetMapping("/settlement")
@@ -78,6 +75,7 @@ public class AppTradeOrderController { @@ -78,6 +75,7 @@ public class AppTradeOrderController {
78 return success(true); 75 return success(true);
79 } 76 }
80 77
  78 + // TODO @芋艿:如果拼团活动、秒杀活动、砍价活动时,是不是要额外在返回活动之类的信息;
81 @GetMapping("/get-detail") 79 @GetMapping("/get-detail")
82 @Operation(summary = "获得交易订单") 80 @Operation(summary = "获得交易订单")
83 @Parameter(name = "id", description = "交易订单编号") 81 @Parameter(name = "id", description = "交易订单编号")
@@ -93,6 +91,7 @@ public class AppTradeOrderController { @@ -93,6 +91,7 @@ public class AppTradeOrderController {
93 // 查询物流公司 91 // 查询物流公司
94 DeliveryExpressDO express = order.getLogisticsId() != null && order.getLogisticsId() > 0 ? 92 DeliveryExpressDO express = order.getLogisticsId() != null && order.getLogisticsId() > 0 ?
95 deliveryExpressService.getDeliveryExpress(order.getLogisticsId()) : null; 93 deliveryExpressService.getDeliveryExpress(order.getLogisticsId()) : null;
  94 + // TODO @puhui999:如果门店自提,信息的拼接;
96 // 最终组合 95 // 最终组合
97 return success(TradeOrderConvert.INSTANCE.convert02(order, orderItems, tradeOrderProperties, express)); 96 return success(TradeOrderConvert.INSTANCE.convert02(order, orderItems, tradeOrderProperties, express));
98 } 97 }
@@ -141,7 +140,7 @@ public class AppTradeOrderController { @@ -141,7 +140,7 @@ public class AppTradeOrderController {
141 @PutMapping("/receive") 140 @PutMapping("/receive")
142 @Operation(summary = "确认交易订单收货") 141 @Operation(summary = "确认交易订单收货")
143 @Parameter(name = "id", description = "交易订单编号") 142 @Parameter(name = "id", description = "交易订单编号")
144 - public CommonResult<Boolean> takeOrder(@RequestParam("id") Long id) { 143 + public CommonResult<Boolean> receiveOrder(@RequestParam("id") Long id) {
145 tradeOrderUpdateService.receiveOrder(getLoginUserId(), id); 144 tradeOrderUpdateService.receiveOrder(getLoginUserId(), id);
146 return success(true); 145 return success(true);
147 } 146 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemDO.java
@@ -143,6 +143,8 @@ public class TradeOrderItemDO extends BaseDO { @@ -143,6 +143,8 @@ public class TradeOrderItemDO extends BaseDO {
143 * 对应 taobao 的 trade.point_fee 字段 143 * 对应 taobao 的 trade.point_fee 字段
144 */ 144 */
145 private Integer pointPrice; 145 private Integer pointPrice;
  146 + // TODO @芋艿:如果商品 vip 折扣时,到底是新增一个 vipPrice 记录优惠记录,还是 vipDiscountPrice,记录 vip 的优惠;还是直接使用 vipPrice;
  147 + // 目前 crmeb 的选择,单独一个 vipPrice 记录优惠价格;感觉不一定合理,可以在看看有赞的;
146 148
147 // ========== 售后基本信息 ========== 149 // ========== 售后基本信息 ==========
148 150
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceImpl.java
@@ -98,6 +98,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa @@ -98,6 +98,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa
98 return afterSale; 98 return afterSale;
99 } 99 }
100 100
  101 + // TODO 芋艿:拼团失败,要不要发起售后的方式退款?还是走取消逻辑?
  102 +
101 @Override 103 @Override
102 @Transactional(rollbackFor = Exception.class) 104 @Transactional(rollbackFor = Exception.class)
103 public Long createAfterSale(Long userId, AppTradeAfterSaleCreateReqVO createReqVO) { 105 public Long createAfterSale(Long userId, AppTradeAfterSaleCreateReqVO createReqVO) {
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
@@ -96,6 +96,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -96,6 +96,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
96 private TradePriceService tradePriceService; 96 private TradePriceService tradePriceService;
97 @Resource 97 @Resource
98 private DeliveryExpressService deliveryExpressService; 98 private DeliveryExpressService deliveryExpressService;
  99 + @Resource
  100 + private TradeMessageService tradeMessageService;
99 101
100 @Resource 102 @Resource
101 private ProductSkuApi productSkuApi; 103 private ProductSkuApi productSkuApi;
@@ -105,26 +107,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -105,26 +107,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
105 private AddressApi addressApi; 107 private AddressApi addressApi;
106 @Resource 108 @Resource
107 private CouponApi couponApi; 109 private CouponApi couponApi;
108 - 110 + @Resource
  111 + private CombinationRecordApi combinationRecordApi;
  112 + @Resource
  113 + private BargainRecordApi bargainRecordApi;
109 @Resource 114 @Resource
110 private MemberUserApi memberUserApi; 115 private MemberUserApi memberUserApi;
111 @Resource 116 @Resource
112 private MemberLevelApi memberLevelApi; 117 private MemberLevelApi memberLevelApi;
113 @Resource 118 @Resource
114 private MemberPointApi memberPointApi; 119 private MemberPointApi memberPointApi;
115 -  
116 @Resource 120 @Resource
117 private ProductCommentApi productCommentApi; 121 private ProductCommentApi productCommentApi;
118 - @Resource  
119 - private TradeMessageService tradeMessageService;  
120 - @Resource  
121 - private TradeOrderProperties tradeOrderProperties;  
122 122
123 @Resource 123 @Resource
124 - private CombinationRecordApi combinationRecordApi;  
125 -  
126 - @Resource  
127 - private BargainRecordApi bargainRecordApi; 124 + private TradeOrderProperties tradeOrderProperties;
128 125
129 // =================== Order =================== 126 // =================== Order ===================
130 127
@@ -179,15 +176,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -179,15 +176,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
179 @Override 176 @Override
180 @Transactional(rollbackFor = Exception.class) 177 @Transactional(rollbackFor = Exception.class)
181 public TradeOrderDO createOrder(Long userId, String userIp, AppTradeOrderCreateReqVO createReqVO) { 178 public TradeOrderDO createOrder(Long userId, String userIp, AppTradeOrderCreateReqVO createReqVO) {
182 - // 2. 价格计算 179 + // 1. 价格计算
183 TradePriceCalculateRespBO calculateRespBO = calculatePrice(userId, createReqVO); 180 TradePriceCalculateRespBO calculateRespBO = calculatePrice(userId, createReqVO);
184 - // 3.1 插入 TradeOrderDO 订单 181 +
  182 + // 2.1 插入 TradeOrderDO 订单
185 TradeOrderDO order = createTradeOrder(userId, userIp, createReqVO, calculateRespBO); 183 TradeOrderDO order = createTradeOrder(userId, userIp, createReqVO, calculateRespBO);
186 - // 3.2 插入 TradeOrderItemDO 订单项 184 + // 2.2 插入 TradeOrderItemDO 订单项
187 List<TradeOrderItemDO> orderItems = createTradeOrderItems(order, calculateRespBO); 185 List<TradeOrderItemDO> orderItems = createTradeOrderItems(order, calculateRespBO);
188 - // 订单创建完后的逻辑 186 +
  187 + // 3. 订单创建完后的逻辑
189 afterCreateTradeOrder(userId, createReqVO, order, orderItems, calculateRespBO); 188 afterCreateTradeOrder(userId, createReqVO, order, orderItems, calculateRespBO);
190 - // 3.3 校验订单类型 189 + // 3.1 拼团的特殊逻辑
191 // TODO @puhui999:这个逻辑,先抽个小方法;未来要通过设计模式,把这些拼团之类的逻辑,抽象出去 190 // TODO @puhui999:这个逻辑,先抽个小方法;未来要通过设计模式,把这些拼团之类的逻辑,抽象出去
192 // 拼团 191 // 拼团
193 if (Objects.equals(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) { 192 if (Objects.equals(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
@@ -205,15 +204,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -205,15 +204,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
205 204
206 combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, orderItemDO, createReqVO, user)); 205 combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, orderItemDO, createReqVO, user));
207 } 206 }
  207 + // 3.2 秒杀的特殊逻辑
208 // TODO 秒杀扣减库存是下单就扣除还是等待订单支付成功再扣除 208 // TODO 秒杀扣减库存是下单就扣除还是等待订单支付成功再扣除
209 if (Objects.equals(TradeOrderTypeEnum.SECKILL.getType(), order.getType())) { 209 if (Objects.equals(TradeOrderTypeEnum.SECKILL.getType(), order.getType())) {
210 210
211 } 211 }
  212 + // 3.3 砍价的特殊逻辑
212 213
213 // TODO @LeeYan9: 是可以思考下, 订单的营销优惠记录, 应该记录在哪里, 微信讨论起来! 214 // TODO @LeeYan9: 是可以思考下, 订单的营销优惠记录, 应该记录在哪里, 微信讨论起来!
214 return order; 215 return order;
215 } 216 }
216 217
  218 + // TODO @puhui999:订单超时,自动取消;
  219 +
  220 + // TODO @疯狂:用户手动取消订单;
  221 +
217 /** 222 /**
218 * 校验收件地址是否存在 223 * 校验收件地址是否存在
219 * 224 *
@@ -239,7 +244,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -239,7 +244,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
239 } 244 }
240 TradeOrderDO order = TradeOrderConvert.INSTANCE.convert(userId, clientIp, createReqVO, calculateRespBO, address); 245 TradeOrderDO order = TradeOrderConvert.INSTANCE.convert(userId, clientIp, createReqVO, calculateRespBO, address);
241 order.setType(validateActivity(createReqVO)); 246 order.setType(validateActivity(createReqVO));
242 - order.setNo(IdUtil.getSnowflakeNextId() + ""); // TODO @LeeYan9: 思考下, 怎么生成好点哈; 这个是会展示给用户的; 247 + order.setNo(IdUtil.getSnowflakeNextId() + ""); // TODO @puhui999: 参考支付订单,的 no 生成哈;
243 order.setStatus(TradeOrderStatusEnum.UNPAID.getStatus()); 248 order.setStatus(TradeOrderStatusEnum.UNPAID.getStatus());
244 order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()); 249 order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus());
245 order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum)); 250 order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum));
@@ -251,6 +256,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -251,6 +256,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
251 // 退款信息 256 // 退款信息
252 order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0); 257 order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0);
253 tradeOrderMapper.insert(order); 258 tradeOrderMapper.insert(order);
  259 + // TODO @puhui999:如果是门店订单,则需要生成核销码;
254 return order; 260 return order;
255 } 261 }
256 262
@@ -291,6 +297,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -291,6 +297,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
291 TradeOrderDO tradeOrderDO, List<TradeOrderItemDO> orderItems, 297 TradeOrderDO tradeOrderDO, List<TradeOrderItemDO> orderItems,
292 TradePriceCalculateRespBO calculateRespBO) { 298 TradePriceCalculateRespBO calculateRespBO) {
293 // 下单时扣减商品库存 299 // 下单时扣减商品库存
  300 + // TODO @puhui999:扣库存,需要前置;
  301 + // 1)如果是秒杀商品:额外扣减秒杀的库存;
  302 + // 2)如果是拼团活动:额外扣减拼团的库存;
  303 + // 3)如果是砍价活动:额外扣减砍价的库存;
294 productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems)); 304 productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems));
295 305
296 // 删除购物车商品 306 // 删除购物车商品
@@ -299,9 +309,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -299,9 +309,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
299 cartService.deleteCart(userId, cartIds); 309 cartService.deleteCart(userId, cartIds);
300 } 310 }
301 311
302 - // 扣减积分 TODO 芋艿:待实现 312 + // 扣减积分 TODO 芋艿:待实现,需要前置;
303 313
304 - // 有使用优惠券时更新 314 + // 有使用优惠券时更新 TODO 芋艿:需要前置;
305 if (createReqVO.getCouponId() != null) { 315 if (createReqVO.getCouponId() != null) {
306 couponApi.useCoupon(new CouponUseReqDTO().setId(createReqVO.getCouponId()).setUserId(userId) 316 couponApi.useCoupon(new CouponUseReqDTO().setId(createReqVO.getCouponId()).setUserId(userId)
307 .setOrderId(tradeOrderDO.getId())); 317 .setOrderId(tradeOrderDO.getId()));
@@ -510,6 +520,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -510,6 +520,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
510 // TODO 芋艿:lili 发送订单变化的消息 520 // TODO 芋艿:lili 发送订单变化的消息
511 521
512 // TODO 芋艿:lili 发送商品被购买完成的数据 522 // TODO 芋艿:lili 发送商品被购买完成的数据
  523 +
  524 + // TODO 芋艿:销售佣金的记录;
  525 +
  526 + // TODO 芋艿:获得积分;
513 } 527 }
514 528
515 @Override 529 @Override
@@ -529,11 +543,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -529,11 +543,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
529 if (order.getPayStatus()) { 543 if (order.getPayStatus()) {
530 throw exception(ORDER_UPDATE_PRICE_FAIL_PAID); 544 throw exception(ORDER_UPDATE_PRICE_FAIL_PAID);
531 } 545 }
  546 + // TODO @puhui999:如果改价,需要校验下是否真的变化;
532 547
533 // 更新 548 // 更新
534 // TODO @puhui999:TradeOrderItemDO 需要做 adjustPrice 的分摊;另外,支付订单那的价格,需要 update 下; 549 // TODO @puhui999:TradeOrderItemDO 需要做 adjustPrice 的分摊;另外,支付订单那的价格,需要 update 下;
535 TradeOrderDO update = TradeOrderConvert.INSTANCE.convert(reqVO); 550 TradeOrderDO update = TradeOrderConvert.INSTANCE.convert(reqVO);
536 update.setPayPrice(update.getPayPrice() + update.getAdjustPrice()); 551 update.setPayPrice(update.getPayPrice() + update.getAdjustPrice());
  552 + // TODO @芋艿:改价时,赠送的积分,要不要做改动???
537 tradeOrderMapper.updateById(update); 553 tradeOrderMapper.updateById(update);
538 } 554 }
539 555
@@ -651,6 +667,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -651,6 +667,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
651 List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId()); 667 List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
652 if (!anyMatch(orderItems, item -> Objects.equals(item.getCommentStatus(), Boolean.FALSE))) { 668 if (!anyMatch(orderItems, item -> Objects.equals(item.getCommentStatus(), Boolean.FALSE))) {
653 tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setCommentStatus(Boolean.TRUE)); 669 tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setCommentStatus(Boolean.TRUE));
  670 + // TODO 待实现:已完成评价,要不要写一条订单日志?目前 crmeb 会写,有赞可以研究下
654 } 671 }
655 return comment; 672 return comment;
656 } 673 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java
@@ -41,6 +41,7 @@ public class TradePriceServiceImpl implements TradePriceService { @@ -41,6 +41,7 @@ public class TradePriceServiceImpl implements TradePriceService {
41 @Resource 41 @Resource
42 private List<TradePriceCalculator> priceCalculators; 42 private List<TradePriceCalculator> priceCalculators;
43 43
  44 + // TODO @疯狂:需要搞个 TradePriceCalculator,计算赠送积分;
44 @Override 45 @Override
45 public TradePriceCalculateRespBO calculatePrice(TradePriceCalculateReqBO calculateReqBO) { 46 public TradePriceCalculateRespBO calculatePrice(TradePriceCalculateReqBO calculateReqBO) {
46 // 1.1 获得商品 SKU 数组 47 // 1.1 获得商品 SKU 数组
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java
@@ -42,6 +42,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { @@ -42,6 +42,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
42 42
43 @Override 43 @Override
44 public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { 44 public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) {
  45 + // TODO @芋艿:如果门店自提,需要校验是否开启;
45 // 1.1 判断配送方式 46 // 1.1 判断配送方式
46 if (param.getDeliveryType() == null || DeliveryTypeEnum.PICK_UP.getMode().equals(param.getDeliveryType())) { 47 if (param.getDeliveryType() == null || DeliveryTypeEnum.PICK_UP.getMode().equals(param.getDeliveryType())) {
47 return; 48 return;