Commit 67436ea4c6599425f00eee75b497307f6f71d555

Authored by zhijiantianya@gmail.com
1 parent 952e6aa4

mall: 下单的代码 review

Showing 21 changed files with 48 additions and 56 deletions
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/sku/ProductSkuApi.java
@@ -31,10 +31,11 @@ public interface ProductSkuApi { @@ -31,10 +31,11 @@ public interface ProductSkuApi {
31 List<ProductSkuRespDTO> getSkuList(Collection<Long> ids); 31 List<ProductSkuRespDTO> getSkuList(Collection<Long> ids);
32 32
33 /** 33 /**
34 - * 批量扣减sku库存 34 + * 批量扣减 SKU 库存
35 * 35 *
36 * @param batchReqDTO sku库存信息列表 36 * @param batchReqDTO sku库存信息列表
37 */ 37 */
  38 + // TODO @LeeYan9: decrementSkuStockBatch? 啊哈, 动名词;
38 void decrementStockBatch(SkuDecrementStockBatchReqDTO batchReqDTO); 39 void decrementStockBatch(SkuDecrementStockBatchReqDTO batchReqDTO);
39 40
40 } 41 }
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/sku/dto/SkuDecrementStockBatchReqDTO.java
@@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
7 import java.util.List; 7 import java.util.List;
8 8
9 /** 9 /**
  10 + * TODO @LeeYan9: 1) 类注释; 2) Product 开头哈;
10 * @author LeeYan9 11 * @author LeeYan9
11 * @since 2022-08-26 12 * @since 2022-08-26
12 */ 13 */
@@ -15,7 +16,7 @@ import java.util.List; @@ -15,7 +16,7 @@ import java.util.List;
15 @AllArgsConstructor 16 @AllArgsConstructor
16 public class SkuDecrementStockBatchReqDTO { 17 public class SkuDecrementStockBatchReqDTO {
17 18
18 - 19 + // TODO @LeeYan9: 参数校验
19 private List<Item> items; 20 private List<Item> items;
20 21
21 @Data 22 @Data
@@ -24,6 +25,7 @@ public class SkuDecrementStockBatchReqDTO { @@ -24,6 +25,7 @@ public class SkuDecrementStockBatchReqDTO {
24 /** 25 /**
25 * 商品 SPU 编号,自增 26 * 商品 SPU 编号,自增
26 */ 27 */
  28 + // TODO @LeeYan9: 是不是不用传递哈
27 private Long productId; 29 private Long productId;
28 30
29 /** 31 /**
@@ -38,6 +40,7 @@ public class SkuDecrementStockBatchReqDTO { @@ -38,6 +40,7 @@ public class SkuDecrementStockBatchReqDTO {
38 40
39 } 41 }
40 42
  43 + // TODO @LeeYan9: 构造方法, 是不是可以满足啦
41 public static SkuDecrementStockBatchReqDTO of(List<Item> items) { 44 public static SkuDecrementStockBatchReqDTO of(List<Item> items) {
42 return new SkuDecrementStockBatchReqDTO(items); 45 return new SkuDecrementStockBatchReqDTO(items);
43 } 46 }
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/spu/dto/SpuInfoRespDTO.java
@@ -7,6 +7,7 @@ import lombok.Data; @@ -7,6 +7,7 @@ import lombok.Data;
7 7
8 import java.util.List; 8 import java.util.List;
9 9
  10 +// TODO @LeeYan9: ProductSpuRespDTO
10 /** 11 /**
11 * @author LeeYan9 12 * @author LeeYan9
12 * @since 2022-08-26 13 * @since 2022-08-26
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/sku/ProductSkuApiImpl.java
@@ -16,6 +16,7 @@ import java.util.Collections; @@ -16,6 +16,7 @@ import java.util.Collections;
16 import java.util.List; 16 import java.util.List;
17 17
18 /** 18 /**
  19 + * TODO LeeYan9: 类注释;
19 * @author LeeYan9 20 * @author LeeYan9
20 * @since 2022-09-06 21 * @since 2022-09-06
21 */ 22 */
@@ -28,6 +29,7 @@ public class ProductSkuApiImpl implements ProductSkuApi { @@ -28,6 +29,7 @@ public class ProductSkuApiImpl implements ProductSkuApi {
28 29
29 @Override 30 @Override
30 public List<SkuInfoRespDTO> getSkusByIds(Collection<Long> skuIds) { 31 public List<SkuInfoRespDTO> getSkusByIds(Collection<Long> skuIds) {
  32 + // TODO TODO LeeYan9: AllEmpty?
31 if (CollectionUtils.isAnyEmpty(skuIds)) { 33 if (CollectionUtils.isAnyEmpty(skuIds)) {
32 return Collections.emptyList(); 34 return Collections.emptyList();
33 } 35 }
@@ -38,6 +40,7 @@ public class ProductSkuApiImpl implements ProductSkuApi { @@ -38,6 +40,7 @@ public class ProductSkuApiImpl implements ProductSkuApi {
38 @Override 40 @Override
39 @Transactional(rollbackFor = Exception.class) 41 @Transactional(rollbackFor = Exception.class)
40 public void decrementStockBatch(SkuDecrementStockBatchReqDTO batchReqDTO) { 42 public void decrementStockBatch(SkuDecrementStockBatchReqDTO batchReqDTO) {
  43 + // TODO @LeeYan9: 最好 Service 去 for 循环;
41 productSkuMapper.decrementStockBatch(batchReqDTO.getItems()); 44 productSkuMapper.decrementStockBatch(batchReqDTO.getItems());
42 } 45 }
43 } 46 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/spu/ProductSpuApiImpl.java
@@ -14,6 +14,8 @@ import java.util.Collections; @@ -14,6 +14,8 @@ import java.util.Collections;
14 import java.util.List; 14 import java.util.List;
15 15
16 /** 16 /**
  17 + * TODO LeeYan9: 类注释;
  18 + *
17 * @author LeeYan9 19 * @author LeeYan9
18 * @since 2022-09-06 20 * @since 2022-09-06
19 */ 21 */
@@ -26,6 +28,7 @@ public class ProductSpuApiImpl implements ProductSpuApi { @@ -26,6 +28,7 @@ public class ProductSpuApiImpl implements ProductSpuApi {
26 28
27 @Override 29 @Override
28 public List<SpuInfoRespDTO> getSpuList(Collection<Long> spuIds) { 30 public List<SpuInfoRespDTO> getSpuList(Collection<Long> spuIds) {
  31 + // TODO TODO LeeYan9: AllEmpty?
29 if (CollectionUtils.isAnyEmpty(spuIds)) { 32 if (CollectionUtils.isAnyEmpty(spuIds)) {
30 return Collections.emptyList(); 33 return Collections.emptyList();
31 } 34 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/convert/sku/ProductSkuConvert.java
@@ -38,5 +38,4 @@ public interface ProductSkuConvert { @@ -38,5 +38,4 @@ public interface ProductSkuConvert {
38 38
39 List<SkuInfoRespDTO> convertList03(List<ProductSkuDO> list); 39 List<SkuInfoRespDTO> convertList03(List<ProductSkuDO> list);
40 40
41 -  
42 } 41 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/convert/spu/ProductSpuConvert.java
@@ -36,6 +36,5 @@ public interface ProductSpuConvert { @@ -36,6 +36,5 @@ public interface ProductSpuConvert {
36 AppSpuPageRespVO convertAppResp(ProductSpuDO list); 36 AppSpuPageRespVO convertAppResp(ProductSpuDO list);
37 37
38 List<SpuInfoRespDTO> convertList2(List<ProductSpuDO> list); 38 List<SpuInfoRespDTO> convertList2(List<ProductSpuDO> list);
39 -  
40 - 39 +
41 } 40 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
@@ -23,16 +23,13 @@ import javax.servlet.http.HttpServletRequest; @@ -23,16 +23,13 @@ import javax.servlet.http.HttpServletRequest;
23 @Api(tags = "用户 App - 交易订单") 23 @Api(tags = "用户 App - 交易订单")
24 @RestController 24 @RestController
25 @RequestMapping("/trade/order") 25 @RequestMapping("/trade/order")
26 -@RequiredArgsConstructor 26 +@RequiredArgsConstructor // TODO @LeeYan9: 先统一使用 @Resource 注入哈; 项目只有三层, 依赖注入会存在, 所以使用 @Resource; 也因此, 最好全局保持一致
27 @Validated 27 @Validated
28 @Slf4j 28 @Slf4j
29 public class AppTradeOrderController { 29 public class AppTradeOrderController {
30 30
31 - // TODO 在思考下;  
32 -  
33 private final TradeOrderService tradeOrderService; 31 private final TradeOrderService tradeOrderService;
34 32
35 -  
36 @GetMapping("/get-create-info") 33 @GetMapping("/get-create-info")
37 @ApiOperation("基于商品,确认创建订单") 34 @ApiOperation("基于商品,确认创建订单")
38 @PreAuthenticated 35 @PreAuthenticated
@@ -46,15 +43,12 @@ public class AppTradeOrderController { @@ -46,15 +43,12 @@ public class AppTradeOrderController {
46 @PreAuthenticated 43 @PreAuthenticated
47 public CommonResult<Long> createTradeOrder(@RequestBody AppTradeOrderCreateReqVO createReqVO, 44 public CommonResult<Long> createTradeOrder(@RequestBody AppTradeOrderCreateReqVO createReqVO,
48 HttpServletRequest servletRequest) { 45 HttpServletRequest servletRequest) {
49 -// return success(tradeOrderService.createTradeOrder(UserSecurityContextHolder.getUserId(),  
50 -// HttpUtil.getIp(servletRequest), createReqVO));  
51 // 获取登录用户 46 // 获取登录用户
52 Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); 47 Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
53 // 获取用户ip地址 48 // 获取用户ip地址
54 String clientIp = ServletUtil.getClientIP(servletRequest); 49 String clientIp = ServletUtil.getClientIP(servletRequest);
55 // 创建交易订单,预支付记录 50 // 创建交易订单,预支付记录
56 Long result = tradeOrderService.createTradeOrder(loginUserId, clientIp, createReqVO); 51 Long result = tradeOrderService.createTradeOrder(loginUserId, clientIp, createReqVO);
57 -  
58 return CommonResult.success(result); 52 return CommonResult.success(result);
59 } 53 }
60 54
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java
@@ -8,16 +8,11 @@ import org.mapstruct.Mapping; @@ -8,16 +8,11 @@ import org.mapstruct.Mapping;
8 import org.mapstruct.Mappings; 8 import org.mapstruct.Mappings;
9 import org.mapstruct.factory.Mappers; 9 import org.mapstruct.factory.Mappers;
10 10
11 -/**  
12 - * @author LeeYan9  
13 - * @since 2022-08-26  
14 - */  
15 @Mapper 11 @Mapper
16 public interface TradeOrderConvert { 12 public interface TradeOrderConvert {
17 13
18 TradeOrderConvert INSTANCE = Mappers.getMapper(TradeOrderConvert.class); 14 TradeOrderConvert INSTANCE = Mappers.getMapper(TradeOrderConvert.class);
19 15
20 -  
21 @Mappings({ 16 @Mappings({
22 @Mapping(source = "order.couponId", target = "couponId"), 17 @Mapping(source = "order.couponId", target = "couponId"),
23 @Mapping(target = "remark", ignore = true), 18 @Mapping(target = "remark", ignore = true),
@@ -25,4 +20,5 @@ public interface TradeOrderConvert { @@ -25,4 +20,5 @@ public interface TradeOrderConvert {
25 @Mapping(source = "createVO.addressId", target = "receiverAreaId") 20 @Mapping(source = "createVO.addressId", target = "receiverAreaId")
26 }) 21 })
27 TradeOrderDO convert(AppTradeOrderCreateReqVO createVO, PriceCalculateRespDTO.Order order); 22 TradeOrderDO convert(AppTradeOrderCreateReqVO createVO, PriceCalculateRespDTO.Order order);
  23 +
28 } 24 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderItemConvert.java
@@ -7,18 +7,11 @@ import org.mapstruct.factory.Mappers; @@ -7,18 +7,11 @@ import org.mapstruct.factory.Mappers;
7 7
8 import java.util.List; 8 import java.util.List;
9 9
10 -/**  
11 - * @author LeeYan9  
12 - * @since 2022-08-26  
13 - */  
14 @Mapper 10 @Mapper
15 public interface TradeOrderItemConvert { 11 public interface TradeOrderItemConvert {
16 12
17 TradeOrderItemConvert INSTANCE = Mappers.getMapper(TradeOrderItemConvert.class); 13 TradeOrderItemConvert INSTANCE = Mappers.getMapper(TradeOrderItemConvert.class);
18 14
19 - /**  
20 - * @param items sku列表价格  
21 - * @return 订单项  
22 - */  
23 List<TradeOrderItemDO> convertList(List<PriceCalculateRespDTO.OrderItem> items); 15 List<TradeOrderItemDO> convertList(List<PriceCalculateRespDTO.OrderItem> items);
  16 +
24 } 17 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/pay/PayOrderConvert.java
@@ -11,10 +11,6 @@ import org.mapstruct.factory.Mappers; @@ -11,10 +11,6 @@ import org.mapstruct.factory.Mappers;
11 11
12 import java.util.Date; 12 import java.util.Date;
13 13
14 -/**  
15 - * @author LeeYan9  
16 - * @since 2022-08-26  
17 - */  
18 @Mapper 14 @Mapper
19 public interface PayOrderConvert { 15 public interface PayOrderConvert {
20 16
@@ -30,4 +26,5 @@ public interface PayOrderConvert { @@ -30,4 +26,5 @@ public interface PayOrderConvert {
30 default Date convertCreateTimeToPayExpireTime(Date cancelTime) { 26 default Date convertCreateTimeToPayExpireTime(Date cancelTime) {
31 return DateUtil.offsetMinute(new Date(), 30); 27 return DateUtil.offsetMinute(new Date(), 30);
32 } 28 }
  29 +
33 } 30 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/price/PriceConvert.java
@@ -7,10 +7,6 @@ import org.mapstruct.Mapping; @@ -7,10 +7,6 @@ import org.mapstruct.Mapping;
7 import org.mapstruct.Mappings; 7 import org.mapstruct.Mappings;
8 import org.mapstruct.factory.Mappers; 8 import org.mapstruct.factory.Mappers;
9 9
10 -/**  
11 - * @author LeeYan9  
12 - * @since 2022-08-26  
13 - */  
14 @Mapper 10 @Mapper
15 public interface PriceConvert { 11 public interface PriceConvert {
16 12
@@ -19,5 +15,6 @@ public interface PriceConvert { @@ -19,5 +15,6 @@ public interface PriceConvert {
19 @Mappings( 15 @Mappings(
20 @Mapping(source = "userId" , target = "userId") 16 @Mapping(source = "userId" , target = "userId")
21 ) 17 )
22 - PriceCalculateReqDTO convert(AppTradeOrderCreateReqVO createReqVO , Long userId); 18 + PriceCalculateReqDTO convert(AppTradeOrderCreateReqVO createReqVO, Long userId);
  19 +
23 } 20 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/sku/ProductSkuConvert.java
@@ -17,5 +17,6 @@ public interface ProductSkuConvert { @@ -17,5 +17,6 @@ public interface ProductSkuConvert {
17 17
18 ProductSkuConvert INSTANCE = Mappers.getMapper(ProductSkuConvert.class); 18 ProductSkuConvert INSTANCE = Mappers.getMapper(ProductSkuConvert.class);
19 19
20 - List<SkuDecrementStockBatchReqDTO.Item> convert(List<TradeOrderItemDO> tradeOrderItems); 20 + List<SkuDecrementStockBatchReqDTO.Item> convert(List<TradeOrderItemDO> list);
  21 +
21 } 22 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java
@@ -4,10 +4,6 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -4,10 +4,6 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 4 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
5 import org.apache.ibatis.annotations.Mapper; 5 import org.apache.ibatis.annotations.Mapper;
6 6
7 -/**  
8 - * @author LeeYan9  
9 - * @since 2022-08-26  
10 - */  
11 @Mapper 7 @Mapper
12 public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> { 8 public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
13 } 9 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/orderitem/TradeOrderItemMapper.java
@@ -4,10 +4,6 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -4,10 +4,6 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; 4 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
5 import org.apache.ibatis.annotations.Mapper; 5 import org.apache.ibatis.annotations.Mapper;
6 6
7 -/**  
8 - * @author LeeYan9  
9 - * @since 2022-08-26  
10 - */  
11 @Mapper 7 @Mapper
12 public interface TradeOrderItemMapper extends BaseMapperX<TradeOrderItemDO> { 8 public interface TradeOrderItemMapper extends BaseMapperX<TradeOrderItemDO> {
13 } 9 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/order/config/TradeOrderConfig.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.trade.framework.order.config; @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.trade.framework.order.config;
3 import org.springframework.boot.context.properties.EnableConfigurationProperties; 3 import org.springframework.boot.context.properties.EnableConfigurationProperties;
4 import org.springframework.context.annotation.Configuration; 4 import org.springframework.context.annotation.Configuration;
5 5
  6 +// TODO @LeeYan9: 可以直接给 TradeOrderProperties 一个 @Component生效哈
6 /** 7 /**
7 * @author LeeYan9 8 * @author LeeYan9
8 * @since 2022-09-15 9 * @since 2022-09-15
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderService.java
@@ -3,15 +3,16 @@ package cn.iocoder.yudao.module.trade.service.order; @@ -3,15 +3,16 @@ package cn.iocoder.yudao.module.trade.service.order;
3 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO; 3 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO;
4 4
5 /** 5 /**
  6 + * TODO @LeeYan9: 类注释
6 * @author LeeYan9 7 * @author LeeYan9
7 * @since 2022-08-26 8 * @since 2022-08-26
8 */ 9 */
9 public interface TradeOrderService { 10 public interface TradeOrderService {
10 11
11 /** 12 /**
12 - * 创建交易订单 13 + * 创建交易订单 TODO @LeeYan9: 方法注释, 和参数要空一行
13 * @param loginUserId 登录用户 14 * @param loginUserId 登录用户
14 - * @param clientIp 用户ip地址 15 + * @param clientIp 用户ip地址 // TODO @LeeYan9: 中英文之间, 空一行哈
15 * @param createReqVO 创建交易订单请求模型 16 * @param createReqVO 创建交易订单请求模型
16 * @return 交易订单创建结果 17 * @return 交易订单创建结果
17 */ 18 */
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.trade.service.order; @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.trade.service.order;
3 import cn.hutool.core.bean.BeanUtil; 3 import cn.hutool.core.bean.BeanUtil;
4 import cn.hutool.core.text.StrBuilder; 4 import cn.hutool.core.text.StrBuilder;
5 import cn.hutool.core.util.IdUtil; 5 import cn.hutool.core.util.IdUtil;
  6 +import cn.hutool.core.util.StrUtil;
6 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 7 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
7 import cn.iocoder.yudao.framework.common.enums.TerminalEnum; 8 import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
8 import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; 9 import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
@@ -45,42 +46,41 @@ import java.util.Map; @@ -45,42 +46,41 @@ import java.util.Map;
45 import java.util.Objects; 46 import java.util.Objects;
46 47
47 /** 48 /**
  49 + * TODO @LeeYan9: 注释
48 * @author LeeYan9 50 * @author LeeYan9
49 * @since 2022-08-26 51 * @since 2022-08-26
50 */ 52 */
51 @Service 53 @Service
52 public class TradeOrderServiceImpl implements TradeOrderService { 54 public class TradeOrderServiceImpl implements TradeOrderService {
53 55
  56 + // TODO @LeeYan9: 相同类型的, 可以放在一起,不用空行; 例如说 Mapper 和 API 和 Properties
  57 +
54 @Resource 58 @Resource
55 private TradeOrderMapper tradeOrderMapper; 59 private TradeOrderMapper tradeOrderMapper;
56 -  
57 @Resource 60 @Resource
58 private TradeOrderItemMapper tradeOrderItemMapper; 61 private TradeOrderItemMapper tradeOrderItemMapper;
59 62
60 @Resource 63 @Resource
61 private PriceApi priceApi; 64 private PriceApi priceApi;
62 -  
63 @Resource 65 @Resource
64 private ProductSkuApi productSkuApi; 66 private ProductSkuApi productSkuApi;
65 -  
66 @Resource 67 @Resource
67 private ProductSpuApi productSpuApi; 68 private ProductSpuApi productSpuApi;
68 -  
69 @Resource 69 @Resource
70 private PayOrderApi payOrderApi; 70 private PayOrderApi payOrderApi;
71 71
72 @Resource 72 @Resource
73 private TradeOrderProperties tradeOrderProperties; 73 private TradeOrderProperties tradeOrderProperties;
74 74
  75 + // TODO LeeYan9: 静态变量, 需要在最前面哈; 另外, 静态变量的注释最好写下;
75 private static final String BLANK_PLACEHOLDER = " "; 76 private static final String BLANK_PLACEHOLDER = " ";
76 private static final String MULTIPLIER_PLACEHOLDER = "x"; 77 private static final String MULTIPLIER_PLACEHOLDER = "x";
77 78
78 -  
79 @Override 79 @Override
80 @Transactional(rollbackFor = Exception.class) 80 @Transactional(rollbackFor = Exception.class)
81 public Long createTradeOrder(Long loginUserId, String clientIp, AppTradeOrderCreateReqVO createReqVO) { 81 public Long createTradeOrder(Long loginUserId, String clientIp, AppTradeOrderCreateReqVO createReqVO) {
82 82
83 - List<Item> items = createReqVO.getItems(); 83 + List<Item> items = createReqVO.getItems(); // TODO @LeeYan9: 方法第一行, 不用空哈;
84 // 商品SKU检查 sku可售状态,库存 84 // 商品SKU检查 sku可售状态,库存
85 List<ProductSkuRespDTO> skuInfos = productSkuApi.getSkuList(CollectionUtils.convertSet(items, Item::getSkuId)); 85 List<ProductSkuRespDTO> skuInfos = productSkuApi.getSkuList(CollectionUtils.convertSet(items, Item::getSkuId));
86 Map<Long, ProductSkuRespDTO> skuInfoMap = CollectionUtils.convertMap(skuInfos, ProductSkuRespDTO::getId); 86 Map<Long, ProductSkuRespDTO> skuInfoMap = CollectionUtils.convertMap(skuInfos, ProductSkuRespDTO::getId);
@@ -93,33 +93,38 @@ public class TradeOrderServiceImpl implements TradeOrderService { @@ -93,33 +93,38 @@ public class TradeOrderServiceImpl implements TradeOrderService {
93 // 价格计算 93 // 价格计算
94 PriceCalculateReqDTO priceCalculateReqDTO = PriceConvert.INSTANCE.convert(createReqVO, loginUserId); 94 PriceCalculateReqDTO priceCalculateReqDTO = PriceConvert.INSTANCE.convert(createReqVO, loginUserId);
95 PriceCalculateRespDTO priceResp = priceApi.calculatePrice(priceCalculateReqDTO); 95 PriceCalculateRespDTO priceResp = priceApi.calculatePrice(priceCalculateReqDTO);
  96 + // TODO @LeeYan9: 是可以思考下, 订单的营销优惠记录, 应该记录在哪里, 微信讨论起来!
  97 +
96 // 订单信息记录 98 // 订单信息记录
97 TradeOrderDO tradeOrderDO = TradeOrderConvert.INSTANCE.convert(createReqVO, priceResp.getOrder()); 99 TradeOrderDO tradeOrderDO = TradeOrderConvert.INSTANCE.convert(createReqVO, priceResp.getOrder());
98 - fillTradeOrderInfoFromReqInfo(tradeOrderDO,createReqVO,loginUserId, clientIp); 100 + fillTradeOrderInfoFromReqInfo(tradeOrderDO,createReqVO,loginUserId, clientIp); // TODO @LeeYan9: tradeOrderDO, createReqVO, loginUserId, clientIp
99 tradeOrderMapper.insert(tradeOrderDO); 101 tradeOrderMapper.insert(tradeOrderDO);
100 102
101 // 订单项信息记录 103 // 订单项信息记录
102 List<TradeOrderItemDO> tradeOrderItems = TradeOrderItemConvert.INSTANCE.convertList(priceResp.getOrder().getItems()); 104 List<TradeOrderItemDO> tradeOrderItems = TradeOrderItemConvert.INSTANCE.convertList(priceResp.getOrder().getItems());
103 - //-填充订单项-SKU信息 105 + // 填充订单项-SKU信息
104 fillItemsInfoFromSkuAndOrder(tradeOrderDO, tradeOrderItems, skuInfoMap); 106 fillItemsInfoFromSkuAndOrder(tradeOrderDO, tradeOrderItems, skuInfoMap);
105 tradeOrderItemMapper.insertBatch(tradeOrderItems); 107 tradeOrderItemMapper.insertBatch(tradeOrderItems);
106 108
  109 + // TODO @LeeYan9: 先扣减库存哈; 可能会扣减失败; 毕竟 get 和 update 之间, 会有并发的可能性
107 // 库存扣减 110 // 库存扣减
108 List<SkuDecrementStockBatchReqDTO.Item> skuDecrementStockItems = ProductSkuConvert.INSTANCE.convert(tradeOrderItems); 111 List<SkuDecrementStockBatchReqDTO.Item> skuDecrementStockItems = ProductSkuConvert.INSTANCE.convert(tradeOrderItems);
109 productSkuApi.decrementStockBatch(SkuDecrementStockBatchReqDTO.of(skuDecrementStockItems)); 112 productSkuApi.decrementStockBatch(SkuDecrementStockBatchReqDTO.of(skuDecrementStockItems));
110 113
111 // 构建预支付请求参数 114 // 构建预支付请求参数
  115 + // TODO @LeeYan9: 需要更新到订单上
112 PayOrderInfoCreateReqDTO payOrderCreateReqDTO = PayOrderConvert.INSTANCE.convert(tradeOrderDO); 116 PayOrderInfoCreateReqDTO payOrderCreateReqDTO = PayOrderConvert.INSTANCE.convert(tradeOrderDO);
113 fillPayOrderInfoFromItems(payOrderCreateReqDTO, tradeOrderItems); 117 fillPayOrderInfoFromItems(payOrderCreateReqDTO, tradeOrderItems);
114 // 生成预支付 118 // 生成预支付
115 return payOrderApi.createPayOrder(payOrderCreateReqDTO); 119 return payOrderApi.createPayOrder(payOrderCreateReqDTO);
116 } 120 }
117 121
  122 + // TODO @LeeYan9: 填充就好, 不用 from 哈;
118 private void fillTradeOrderInfoFromReqInfo(TradeOrderDO tradeOrderDO, AppTradeOrderCreateReqVO createReqVO, 123 private void fillTradeOrderInfoFromReqInfo(TradeOrderDO tradeOrderDO, AppTradeOrderCreateReqVO createReqVO,
119 Long loginUserId, String clientIp) { 124 Long loginUserId, String clientIp) {
120 tradeOrderDO.setUserId(loginUserId); 125 tradeOrderDO.setUserId(loginUserId);
121 tradeOrderDO.setUserIp(clientIp); 126 tradeOrderDO.setUserIp(clientIp);
122 - tradeOrderDO.setSn(IdUtil.getSnowflakeNextId() + ""); 127 + tradeOrderDO.setSn(IdUtil.getSnowflakeNextId() + ""); // TODO @LeeYan9: 思考下, 怎么生成好点哈; 这个是会展示给用户的;
123 tradeOrderDO.setStatus(TradeOrderStatusEnum.WAITING_PAYMENT.getStatus()); 128 tradeOrderDO.setStatus(TradeOrderStatusEnum.WAITING_PAYMENT.getStatus());
124 tradeOrderDO.setType(TradeOrderTypeEnum.NORMAL.getType()); 129 tradeOrderDO.setType(TradeOrderTypeEnum.NORMAL.getType());
125 tradeOrderDO.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()); 130 tradeOrderDO.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus());
@@ -139,7 +144,6 @@ public class TradeOrderServiceImpl implements TradeOrderService { @@ -139,7 +144,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
139 // 填写商品信息 144 // 填写商品信息
140 StrBuilder subject = new StrBuilder(); 145 StrBuilder subject = new StrBuilder();
141 StrBuilder body = new StrBuilder(); 146 StrBuilder body = new StrBuilder();
142 -  
143 for (TradeOrderItemDO tradeOrderItem : tradeOrderItems) { 147 for (TradeOrderItemDO tradeOrderItem : tradeOrderItems) {
144 // append subject 148 // append subject
145 subject.append(BLANK_PLACEHOLDER); 149 subject.append(BLANK_PLACEHOLDER);
@@ -151,6 +155,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { @@ -151,6 +155,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
151 body.append(tradeOrderItem.getCount()); 155 body.append(tradeOrderItem.getCount());
152 } 156 }
153 // 设置 subject & body 157 // 设置 subject & body
  158 + // TODO @LeeYan9: 可以抽象一个 StrUtils 方法; 或者看看 hutool 有没自带的哈
154 payOrderInfoCreateReqDTO.setSubject(StrUtils.maxLength(subject.subString(1), 32)); 159 payOrderInfoCreateReqDTO.setSubject(StrUtils.maxLength(subject.subString(1), 32));
155 payOrderInfoCreateReqDTO.setBody(StrUtils.maxLength(body.subString(1), 128)); 160 payOrderInfoCreateReqDTO.setBody(StrUtils.maxLength(body.subString(1), 128));
156 } 161 }
@@ -182,6 +187,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { @@ -182,6 +187,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
182 } 187 }
183 } 188 }
184 189
  190 + // TODO @LeeYan9: checkSpuXXX 会不会好点哈? ps: 这个貌似是 sku 哈
185 private void checkSaleableAndStockFromSpu(Map<Long, ProductSkuRespDTO> skuInfoMap, 191 private void checkSaleableAndStockFromSpu(Map<Long, ProductSkuRespDTO> skuInfoMap,
186 List<Item> items) { 192 List<Item> items) {
187 // sku 不存在 193 // sku 不存在
yudao-module-mall/yudao-module-trade-biz/src/main/test/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceTest.java
@@ -30,6 +30,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -30,6 +30,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
30 import static org.mockito.ArgumentMatchers.any; 30 import static org.mockito.ArgumentMatchers.any;
31 import static org.mockito.Mockito.when; 31 import static org.mockito.Mockito.when;
32 32
  33 +// TODO @芋艿: 单测的 review; 最后搞;
33 /** 34 /**
34 * @author LeeYan9 35 * @author LeeYan9
35 * @since 2022-09-07 36 * @since 2022-09-07
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java
@@ -3,12 +3,13 @@ package cn.iocoder.yudao.module.pay.api.order; @@ -3,12 +3,13 @@ package cn.iocoder.yudao.module.pay.api.order;
3 import javax.validation.Valid; 3 import javax.validation.Valid;
4 4
5 /** 5 /**
  6 + * 支付单 API 接口
  7 + *
6 * @author LeeYan9 8 * @author LeeYan9
7 * @since 2022-08-26 9 * @since 2022-08-26
8 */ 10 */
9 public interface PayOrderApi { 11 public interface PayOrderApi {
10 12
11 -  
12 /** 13 /**
13 * 创建支付单 14 * 创建支付单
14 * 15 *
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderInfoCreateReqDTO.java
@@ -9,8 +9,10 @@ import javax.validation.constraints.NotNull; @@ -9,8 +9,10 @@ import javax.validation.constraints.NotNull;
9 import java.io.Serializable; 9 import java.io.Serializable;
10 import java.util.Date; 10 import java.util.Date;
11 11
  12 +// TODO @LeeYan9: 1) 新建一个 dto 包, 然后挪进去哈; 2) 在 order下; Info 可以去掉;
12 /** 13 /**
13 * 支付单创建 Request DTO 14 * 支付单创建 Request DTO
  15 + *
14 * @author LeeYan9 16 * @author LeeYan9
15 */ 17 */
16 @Data 18 @Data
@@ -53,6 +55,7 @@ public class PayOrderInfoCreateReqDTO implements Serializable { @@ -53,6 +55,7 @@ public class PayOrderInfoCreateReqDTO implements Serializable {
53 * 支付金额,单位:分 55 * 支付金额,单位:分
54 */ 56 */
55 @NotNull(message = "支付金额不能为空") 57 @NotNull(message = "支付金额不能为空")
  58 + // TODO @LeeYan9: 是不是 @Min 注解呀, 是 Integer 哈
56 @DecimalMin(value = "0", inclusive = false, message = "支付金额必须大于零") 59 @DecimalMin(value = "0", inclusive = false, message = "支付金额必须大于零")
57 private Integer amount; 60 private Integer amount;
58 61