Commit 7f131a3853eecfe3ee3cba9d4b61363a57683e97

Authored by YunaiV
1 parent b7d78a24

trade:增加用户 App 的订单分页和详情接口

Showing 16 changed files with 366 additions and 174 deletions
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.http
... ... @@ -26,8 +26,12 @@ tenant-id: {{appTenentId}}
26 26 ]
27 27 }
28 28  
29   -### /trade-order/page 获得订单交易分页
30   -GET {{shop-api-base-url}}/trade-order/page?status=1&pageNo=1&pageSize=10
31   -Content-Type: application/x-www-form-urlencoded
  29 +### 获得订单交易的分页
  30 +GET {{appApi}}/trade/order/page?pageNo=1&pageSize=10
  31 +Authorization: Bearer {{appToken}}
  32 +tenant-id: {{appTenentId}}
32 33  
33   -###
  34 +### 获得订单交易的详细
  35 +GET {{appApi}}/trade/order/get-detail?id=21
  36 +Authorization: Bearer {{appToken}}
  37 +tenant-id: {{appTenentId}}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
... ... @@ -4,12 +4,13 @@ import cn.hutool.extra.servlet.ServletUtil;
4 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
7   -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
8 7 import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO;
9   -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO;
10   -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderGetCreateInfoRespVO;
11   -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
12   -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderRespVO;
  8 +import cn.iocoder.yudao.module.product.api.property.ProductPropertyValueApi;
  9 +import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO;
  10 +import cn.iocoder.yudao.module.trade.controller.app.order.vo.*;
  11 +import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
  12 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
  13 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
13 14 import cn.iocoder.yudao.module.trade.service.order.TradeOrderService;
14 15 import io.swagger.annotations.Api;
15 16 import io.swagger.annotations.ApiImplicitParam;
... ... @@ -20,8 +21,11 @@ import org.springframework.web.bind.annotation.*;
20 21  
21 22 import javax.annotation.Resource;
22 23 import javax.servlet.http.HttpServletRequest;
  24 +import java.util.List;
23 25  
24 26 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  27 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  28 +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
25 29  
26 30 @Api(tags = "用户 App - 交易订单")
27 31 @RestController
... ... @@ -33,6 +37,9 @@ public class AppTradeOrderController {
33 37 @Resource
34 38 private TradeOrderService tradeOrderService;
35 39  
  40 + @Resource
  41 + private ProductPropertyValueApi productPropertyValueApi;
  42 +
36 43 @GetMapping("/get-create-info")
37 44 @ApiOperation("基于商品,确认创建订单")
38 45 @PreAuthenticated
... ... @@ -47,7 +54,7 @@ public class AppTradeOrderController {
47 54 public CommonResult<Long> createOrder(@RequestBody AppTradeOrderCreateReqVO createReqVO,
48 55 HttpServletRequest servletRequest) {
49 56 // 获取登录用户、用户 IP 地址
50   - Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
  57 + Long loginUserId = getLoginUserId();
51 58 String clientIp = ServletUtil.getClientIP(servletRequest);
52 59 // 创建交易订单,预支付记录
53 60 Long orderId = tradeOrderService.createOrder(loginUserId, clientIp, createReqVO);
... ... @@ -62,19 +69,34 @@ public class AppTradeOrderController {
62 69 return success(true);
63 70 }
64 71  
65   - @GetMapping("/get")
  72 + @GetMapping("/get-detail")
66 73 @ApiOperation("获得交易订单")
67   - @ApiImplicitParam(name = "tradeOrderId", value = "交易订单编号", required = true, dataTypeClass = Long.class)
68   - public CommonResult<AppTradeOrderRespVO> getTradeOrder(@RequestParam("tradeOrderId") Integer tradeOrderId) {
69   -// return success(tradeOrderService.getTradeOrder(tradeOrderId));
70   - return null;
  74 + @ApiImplicitParam(name = "id", value = "交易订单编号", required = true, dataTypeClass = Long.class)
  75 + public CommonResult<AppTradeOrderDetailRespVO> getOrder(@RequestParam("id") Long id) {
  76 + // 查询订单
  77 + TradeOrderDO order = tradeOrderService.getOrder(getLoginUserId(), id);
  78 + // 查询订单项
  79 + List<TradeOrderItemDO> orderItems = tradeOrderService.getOrderItemListByOrderId(order.getId());
  80 + // 查询商品属性
  81 + List<ProductPropertyValueDetailRespDTO> propertyValueDetails = productPropertyValueApi
  82 + .getPropertyValueDetailList(TradeOrderConvert.INSTANCE.convertPropertyValueIds(orderItems));
  83 + // 最终组合
  84 + return success(TradeOrderConvert.INSTANCE.convert02(order, orderItems, propertyValueDetails));
71 85 }
72 86  
73 87 @GetMapping("/page")
74 88 @ApiOperation("获得订单交易分页")
75   - public CommonResult<PageResult<AppTradeOrderRespVO>> pageTradeOrder(AppTradeOrderPageReqVO pageVO) {
76   -// return success(tradeOrderService.pageTradeOrder(UserSecurityContextHolder.getUserId(), pageVO));
77   - return null;
  89 + public CommonResult<PageResult<AppTradeOrderPageItemRespVO>> getOrderPage(AppTradeOrderPageReqVO reqVO) {
  90 + // 查询订单
  91 + PageResult<TradeOrderDO> pageResult = tradeOrderService.getOrderPage(getLoginUserId(), reqVO);
  92 + // 查询订单项
  93 + List<TradeOrderItemDO> orderItems = tradeOrderService.getOrderItemListByOrderId(
  94 + convertSet(pageResult.getList(), TradeOrderDO::getId));
  95 + // 查询商品属性
  96 + List<ProductPropertyValueDetailRespDTO> propertyValueDetails = productPropertyValueApi
  97 + .getPropertyValueDetailList(TradeOrderConvert.INSTANCE.convertPropertyValueIds(orderItems));
  98 + // 最终组合
  99 + return success(TradeOrderConvert.INSTANCE.convertPage02(pageResult, orderItems, propertyValueDetails));
78 100 }
79 101  
80 102 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderDetailRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.controller.app.order.vo;
  2 +
  3 +import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
  4 +import io.swagger.annotations.ApiModel;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +
  8 +import java.time.LocalDateTime;
  9 +import java.util.Date;
  10 +import java.util.List;
  11 +
  12 +@ApiModel("用户 App - 订单交易的明细 Response VO")
  13 +@Data
  14 +public class AppTradeOrderDetailRespVO {
  15 +
  16 + // ========== 订单基本信息 ==========
  17 +
  18 + @ApiModelProperty(value = "订单编号", required = true, example = "1024")
  19 + private Long id;
  20 +
  21 + @ApiModelProperty(value = "订单流水号", required = true, example = "1146347329394184195")
  22 + private String no;
  23 +
  24 + @ApiModelProperty(value = "创建时间", required = true, notes = "下单时间")
  25 + private Date createTime;
  26 +
  27 + @ApiModelProperty(value = "用户备注", required = true, example = "你猜")
  28 + private String userRemark;
  29 +
  30 + @ApiModelProperty(value = "订单状态", required = true, example = "1", notes = "参见 TradeOrderStatusEnum 枚举")
  31 + private Integer status;
  32 +
  33 + @ApiModelProperty(value = "购买的商品数量", required = true, example = "10")
  34 + private Integer productCount;
  35 +
  36 + @ApiModelProperty(value = "订单完成时间")
  37 + private LocalDateTime finishTime;
  38 +
  39 + @ApiModelProperty(value = "订单取消时间")
  40 + private LocalDateTime cancelTime;
  41 +
  42 + // ========== 价格 + 支付基本信息 ==========
  43 +
  44 + @ApiModelProperty(value = "支付订单编号", required = true, example = "1024")
  45 + private Long payOrderId;
  46 +
  47 + @ApiModelProperty(value = "付款时间")
  48 + private LocalDateTime payTime;
  49 +
  50 + @ApiModelProperty(value = "商品原价(总)", required = true, example = "1000", notes = "单位:分")
  51 + private Integer originalPrice;
  52 +
  53 + @ApiModelProperty(value = "订单原价(总)", required = true, example = "1000", notes = "单位:分")
  54 + private Integer orderPrice;
  55 +
  56 + @ApiModelProperty(value = "订单优惠(总)", required = true, example = "100", notes = "单位:分")
  57 + private Integer discountPrice;
  58 +
  59 + @ApiModelProperty(value = "运费金额", required = true, example = "100", notes = "单位:分")
  60 + private Integer deliveryPrice;
  61 +
  62 + @ApiModelProperty(value = "订单调价(总)", required = true, example = "100", notes = "单位:分")
  63 + private Integer adjustPrice;
  64 +
  65 + @ApiModelProperty(value = "应付金额(总)", required = true, example = "1000", notes = "单位:分")
  66 + private Integer payPrice;
  67 +
  68 + // ========== 收件 + 物流基本信息 ==========
  69 +
  70 + @ApiModelProperty(value = "发货物流单号", example = "1024")
  71 + private String logisticsNo;
  72 +
  73 + @ApiModelProperty(value = "发货时间")
  74 + private LocalDateTime deliveryTime;
  75 +
  76 + @ApiModelProperty(value = "收货时间")
  77 + private LocalDateTime receiveTime;
  78 +
  79 + @ApiModelProperty(value = "收件人名称", required = true, example = "张三")
  80 + private String receiverName;
  81 +
  82 + @ApiModelProperty(value = "收件人手机", required = true, example = "13800138000")
  83 + private String receiverMobile;
  84 +
  85 + @ApiModelProperty(value = "收件人地区编号", required = true, example = "110000")
  86 + private Integer receiverAreaId;
  87 +
  88 + @ApiModelProperty(value = "收件人地区名字", required = true, example = "上海 上海市 普陀区")
  89 + private String receiverAreaName;
  90 +
  91 + @ApiModelProperty(value = "收件人邮编", required = true, example = "100000")
  92 + private Integer receiverPostCode;
  93 +
  94 + @ApiModelProperty(value = "收件人详细地址", required = true, example = "中关村大街 1 号")
  95 + private String receiverDetailAddress;
  96 +
  97 + // ========== 售后基本信息 ==========
  98 +
  99 + // ========== 营销基本信息 ==========
  100 +
  101 + @ApiModelProperty(value = "优惠劵编号", example = "1024")
  102 + private Long couponId;
  103 +
  104 + @ApiModelProperty(value = "优惠劵减免金额", required = true, example = "100", notes = "单位:分")
  105 + private Integer couponPrice;
  106 +
  107 + @ApiModelProperty(value = "积分抵扣的金额", required = true, example = "100", notes = "单位:分")
  108 + private Integer pointPrice;
  109 +
  110 + /**
  111 + * 订单项数组
  112 + */
  113 + private List<Item> items;
  114 +
  115 + @ApiModel("用户 App - 交易订单的分页项的订单项目")
  116 + @Data
  117 + public static class Item {
  118 +
  119 + @ApiModelProperty(value = "编号", required = true, example = "1")
  120 + private Long id;
  121 +
  122 + @ApiModelProperty(value = "商品 SPU 编号", required = true, example = "1")
  123 + private Long spuId;
  124 +
  125 + @ApiModelProperty(value = "商品 SPU 名称", required = true, example = "芋道源码")
  126 + private String spuName;
  127 +
  128 + @ApiModelProperty(value = "商品 SKU 编号", required = true, example = "1")
  129 + private Long skuId;
  130 +
  131 + @ApiModelProperty(value = "商品图片", required = true, example = "https://www.iocoder.cn/1.png")
  132 + private String picUrl;
  133 +
  134 + @ApiModelProperty(value = "购买数量", required = true, example = "1")
  135 + private Integer count;
  136 +
  137 + @ApiModelProperty(value = "商品原价(总)", required = true, example = "100", notes = "单位:分")
  138 + private Integer originalPrice;
  139 +
  140 + @ApiModelProperty(value = "商品原价(单)", required = true, example = "100", notes = "单位:分")
  141 + private Integer originalUnitPrice;
  142 +
  143 + /**
  144 + * 属性数组
  145 + */
  146 + private List<AppProductPropertyValueDetailRespVO> properties;
  147 +
  148 + }
  149 +
  150 +}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderItemRespVO.java deleted
1   -package cn.iocoder.yudao.module.trade.controller.app.order.vo;
2   -
3   -import io.swagger.annotations.ApiModel;
4   -import io.swagger.annotations.ApiModelProperty;
5   -import lombok.Data;
6   -
7   -import java.time.LocalDateTime;
8   -
9   -// TODO 芋艿:字段优化
10   -@ApiModel("交易订单项 Response VO")
11   -@Data
12   -public class AppTradeOrderItemRespVO {
13   -
14   - @ApiModelProperty(value = "id自增长", required = true)
15   - private Integer id;
16   - @ApiModelProperty(value = "订单编号", required = true)
17   - private Integer orderId;
18   - @ApiModelProperty(value = "订单项状态", required = true)
19   - private Integer status;
20   - @ApiModelProperty(value = "商品 SKU 编号", required = true)
21   - private Integer skuId;
22   - @ApiModelProperty(value = "商品 SPU 编号", required = true)
23   - private Integer spuId;
24   - @ApiModelProperty(value = "商品名字", required = true)
25   - private String skuName;
26   - @ApiModelProperty(value = "图片名字", required = true)
27   - private String skuImage;
28   - @ApiModelProperty(value = "商品数量", required = true)
29   - private Integer quantity;
30   - @ApiModelProperty(value = "原始单价,单位:分", required = true)
31   - private Integer originPrice;
32   - @ApiModelProperty(value = "购买单价,单位:分", required = true)
33   - private Integer buyPrice;
34   - @ApiModelProperty(value = "最终价格,单位:分", required = true)
35   - private Integer presentPrice;
36   - @ApiModelProperty(value = "购买总金额,单位:分", required = true)
37   - private Integer buyTotal;
38   - @ApiModelProperty(value = "优惠总金额,单位:分", required = true)
39   - private Integer discountTotal;
40   - @ApiModelProperty(value = "最终总金额,单位:分", required = true)
41   - private Integer presentTotal;
42   - @ApiModelProperty(value = "退款总金额,单位:分", required = true)
43   - private Integer refundTotal;
44   - @ApiModelProperty(value = "物流id")
45   - private Integer logisticsId;
46   - @ApiModelProperty(value = "售后状态", required = true)
47   - private Integer afterSaleStatus;
48   - @ApiModelProperty(value = "售后订单编号")
49   - private Integer afterSaleOrderId;
50   - @ApiModelProperty(value = "创建时间", required = true)
51   - private LocalDateTime createTime;
52   -
53   -
54   -}
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageItemRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.controller.app.order.vo;
  2 +
  3 +import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
  4 +import io.swagger.annotations.ApiModel;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +
  8 +import java.util.List;
  9 +
  10 +@ApiModel("用户 App - 订单交易的分页项 Response VO")
  11 +@Data
  12 +public class AppTradeOrderPageItemRespVO {
  13 +
  14 + @ApiModelProperty(value = "订单编号", required = true, example = "1024")
  15 + private Long id;
  16 +
  17 + @ApiModelProperty(value = "订单流水号", required = true, example = "1146347329394184195")
  18 + private String no;
  19 +
  20 + @ApiModelProperty(value = "订单状态", required = true, example = "1", notes = "参见 TradeOrderStatusEnum 枚举")
  21 + private Integer status;
  22 +
  23 + @ApiModelProperty(value = "购买的商品数量", required = true, example = "10")
  24 + private Integer productCount;
  25 +
  26 + /**
  27 + * 订单项数组
  28 + */
  29 + private List<Item> items;
  30 +
  31 + @ApiModel("用户 App - 交易订单的明细的订单项目")
  32 + @Data
  33 + public static class Item {
  34 +
  35 + @ApiModelProperty(value = "编号", required = true, example = "1")
  36 + private Long id;
  37 +
  38 + @ApiModelProperty(value = "商品 SPU 编号", required = true, example = "1")
  39 + private Long spuId;
  40 +
  41 + @ApiModelProperty(value = "商品 SPU 名称", required = true, example = "芋道源码")
  42 + private String spuName;
  43 +
  44 + @ApiModelProperty(value = "商品 SKU 编号", required = true, example = "1")
  45 + private Long skuId;
  46 +
  47 + @ApiModelProperty(value = "商品图片", required = true, example = "https://www.iocoder.cn/1.png")
  48 + private String picUrl;
  49 +
  50 + @ApiModelProperty(value = "购买数量", required = true, example = "1")
  51 + private Integer count;
  52 +
  53 + @ApiModelProperty(value = "商品原价(总)", required = true, example = "100", notes = "单位:分")
  54 + private Integer originalPrice;
  55 +
  56 + @ApiModelProperty(value = "商品原价(单)", required = true, example = "100", notes = "单位:分")
  57 + private Integer originalUnitPrice;
  58 +
  59 + /**
  60 + * 属性数组
  61 + */
  62 + private List<AppProductPropertyValueDetailRespVO> properties;
  63 +
  64 + }
  65 +
  66 +}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageReqVO.java
1 1 package cn.iocoder.yudao.module.trade.controller.app.order.vo;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import cn.iocoder.yudao.framework.common.validation.InEnum;
  5 +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
4 6 import io.swagger.annotations.ApiModel;
5 7 import io.swagger.annotations.ApiModelProperty;
6 8 import lombok.Data;
7   -import lombok.EqualsAndHashCode;
8 9  
9 10 // TODO 芋艿:字段优化
10 11 @ApiModel("交易订单分页 Request VO")
11 12 @Data
12   -@EqualsAndHashCode(callSuper = true)
13 13 public class AppTradeOrderPageReqVO extends PageParam {
14 14  
15 15 @ApiModelProperty(value = "订单状态", example = "1", notes = "参见 TradeOrderStatusEnum 枚举")
16   - private Integer orderStatus;
  16 + @InEnum(value = TradeOrderStatusEnum.class, message = "订单状态必须是 {value}")
  17 + private Integer status;
17 18  
18 19 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderRespVO.java deleted
1   -package cn.iocoder.yudao.module.trade.controller.app.order.vo;
2   -
3   -import lombok.*;
4   -import io.swagger.annotations.*;
5   -
6   -import java.time.LocalDateTime;
7   -import java.util.*;
8   -
9   -// TODO 芋艿:字段优化
10   -@ApiModel("订单交易 Response VO")
11   -@Data
12   -public class AppTradeOrderRespVO {
13   -
14   - @ApiModelProperty(value = "订单编号", required = true)
15   - private Integer id;
16   - @ApiModelProperty(value = "用户编号", required = true)
17   - private Integer userId;
18   - @ApiModelProperty(value = "订单单号", required = true)
19   - private String orderNo;
20   - @ApiModelProperty(value = "订单状态", required = true)
21   - private Integer orderStatus;
22   - @ApiModelProperty(value = "备注")
23   - private String remark;
24   - @ApiModelProperty(value = "订单结束时间")
25   - private LocalDateTime endTime;
26   - @ApiModelProperty(value = "订单金额(总金额),单位:分", required = true)
27   - private Integer buyPrice;
28   - @ApiModelProperty(value = "优惠总金额,单位:分", required = true)
29   - private Integer discountPrice;
30   - @ApiModelProperty(value = "物流金额,单位:分", required = true)
31   - private Integer logisticsPrice;
32   - @ApiModelProperty(value = "最终金额,单位:分", required = true)
33   - private Integer presentPrice;
34   - @ApiModelProperty(value = "支付金额,单位:分", required = true)
35   - private Integer payPrice;
36   - @ApiModelProperty(value = "退款金额,单位:分", required = true)
37   - private Integer refundPrice;
38   - @ApiModelProperty(value = "付款时间")
39   - private LocalDateTime payTime;
40   - @ApiModelProperty(value = "支付订单编号")
41   - private Integer payTransactionId;
42   - @ApiModelProperty(value = "支付渠道")
43   - private Integer payChannel;
44   - @ApiModelProperty(value = "配送类型", required = true)
45   - private Integer deliveryType;
46   - @ApiModelProperty(value = "发货时间")
47   - private LocalDateTime deliveryTime;
48   - @ApiModelProperty(value = "收货时间")
49   - private LocalDateTime receiveTime;
50   - @ApiModelProperty(value = "收件人名称", required = true)
51   - private String receiverName;
52   - @ApiModelProperty(value = "手机号", required = true)
53   - private String receiverMobile;
54   - @ApiModelProperty(value = "地区编码", required = true)
55   - private Integer receiverAreaCode;
56   - @ApiModelProperty(value = "收件详细地址", required = true)
57   - private String receiverDetailAddress;
58   - @ApiModelProperty(value = "售后状态", required = true)
59   - private Integer afterSaleStatus;
60   - @ApiModelProperty(value = "优惠劵编号")
61   - private Integer couponCardId;
62   - @ApiModelProperty(value = "创建时间", required = true)
63   - private LocalDateTime createTime;
64   -
65   - /**
66   - * 订单项数组
67   - *
68   - * // TODO 芋艿,后续考虑怎么优化下,目前是内嵌了别的 dto
69   - */
70   - private List<AppTradeOrderItemRespVO> orderItems;
71   -
72   -
73   -}
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java
... ... @@ -17,7 +17,10 @@ import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUse
17 17 import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO;
18 18 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDetailRespVO;
19 19 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageItemRespVO;
  20 +import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
20 21 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO;
  22 +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderDetailRespVO;
  23 +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageItemRespVO;
21 24 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
22 25 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
23 26 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum;
... ... @@ -174,4 +177,65 @@ public interface TradeOrderConvert {
174 177 TradeOrderDetailRespVO convert2(TradeOrderDO order, List<TradeOrderItemDO> items);
175 178 MemberUserRespVO convert(MemberUserRespDTO bean);
176 179  
  180 + default PageResult<AppTradeOrderPageItemRespVO> convertPage02(PageResult<TradeOrderDO> pageResult, List<TradeOrderItemDO> orderItems,
  181 + List<ProductPropertyValueDetailRespDTO> propertyValueDetails) {
  182 + Map<Long, List<TradeOrderItemDO>> orderItemMap = convertMultiMap(orderItems, TradeOrderItemDO::getOrderId);
  183 + Map<Long, ProductPropertyValueDetailRespDTO> propertyValueDetailMap = convertMap(propertyValueDetails, ProductPropertyValueDetailRespDTO::getValueId);
  184 + // 转化 List
  185 + List<AppTradeOrderPageItemRespVO> orderVOs = CollectionUtils.convertList(pageResult.getList(), order -> {
  186 + List<TradeOrderItemDO> xOrderItems = orderItemMap.get(order.getId());
  187 + AppTradeOrderPageItemRespVO orderVO = convert02(order, xOrderItems);
  188 + if (CollUtil.isNotEmpty(xOrderItems)) {
  189 + // 处理商品属性
  190 + for (int i = 0; i < xOrderItems.size(); i++) {
  191 + List<TradeOrderItemDO.Property> properties = xOrderItems.get(i).getProperties();
  192 + if (CollUtil.isEmpty(properties)) {
  193 + continue;
  194 + }
  195 + AppTradeOrderPageItemRespVO.Item item = orderVO.getItems().get(i);
  196 + item.setProperties(new ArrayList<>(properties.size()));
  197 + // 遍历每个 properties,设置到 TradeOrderPageItemRespVO.Item 中
  198 + properties.forEach(property -> {
  199 + ProductPropertyValueDetailRespDTO propertyValueDetail = propertyValueDetailMap.get(property.getValueId());
  200 + if (propertyValueDetail == null) {
  201 + return;
  202 + }
  203 + item.getProperties().add(convert02(propertyValueDetail));
  204 + });
  205 + }
  206 + }
  207 + return orderVO;
  208 + });
  209 + return new PageResult<>(orderVOs, pageResult.getTotal());
  210 + }
  211 + AppTradeOrderPageItemRespVO convert02(TradeOrderDO order, List<TradeOrderItemDO> items);
  212 + AppProductPropertyValueDetailRespVO convert02(ProductPropertyValueDetailRespDTO bean);
  213 +
  214 + default AppTradeOrderDetailRespVO convert02(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
  215 + List<ProductPropertyValueDetailRespDTO> propertyValueDetails) {
  216 + AppTradeOrderDetailRespVO orderVO = convert3(order, orderItems);
  217 + // 处理商品属性
  218 + Map<Long, ProductPropertyValueDetailRespDTO> propertyValueDetailMap = convertMap(propertyValueDetails, ProductPropertyValueDetailRespDTO::getValueId);
  219 + for (int i = 0; i < orderItems.size(); i++) {
  220 + List<TradeOrderItemDO.Property> properties = orderItems.get(i).getProperties();
  221 + if (CollUtil.isEmpty(properties)) {
  222 + continue;
  223 + }
  224 + AppTradeOrderDetailRespVO.Item item = orderVO.getItems().get(i);
  225 + item.setProperties(new ArrayList<>(properties.size()));
  226 + // 遍历每个 properties,设置到 TradeOrderPageItemRespVO.Item 中
  227 + properties.forEach(property -> {
  228 + ProductPropertyValueDetailRespDTO propertyValueDetail = propertyValueDetailMap.get(property.getValueId());
  229 + if (propertyValueDetail == null) {
  230 + return;
  231 + }
  232 + item.getProperties().add(convert02(propertyValueDetail));
  233 + });
  234 + }
  235 + // 处理收货地址
  236 + orderVO.setReceiverAreaName(AreaUtils.format(order.getReceiverAreaId()));
  237 + return orderVO;
  238 + }
  239 + AppTradeOrderDetailRespVO convert3(TradeOrderDO order, List<TradeOrderItemDO> items);
  240 +
177 241 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java
... ... @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6 6 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
  7 +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
7 8 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
8 9 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
9 10 import org.apache.ibatis.annotations.Mapper;
... ... @@ -35,4 +36,11 @@ public interface TradeOrderMapper extends BaseMapperX&lt;TradeOrderDO&gt; {
35 36 .betweenIfPresent(TradeOrderDO::getCreateTime, reqVO.getCreateTime()));
36 37 }
37 38  
  39 + default PageResult<TradeOrderDO> selectPage(AppTradeOrderPageReqVO reqVO, Long userId) {
  40 + return selectPage(reqVO, new LambdaQueryWrapperX<TradeOrderDO>()
  41 + .eq(TradeOrderDO::getUserId, userId)
  42 + .eqIfPresent(TradeOrderDO::getStatus, reqVO.getStatus())
  43 + .orderByDesc(TradeOrderDO::getId)); // TODO 芋艿:未来不同的 status,不同的排序
  44 + }
  45 +
38 46 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderService.java
... ... @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
5 5 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
6 6 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO;
  7 +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
7 8 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
8 9 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
9 10  
... ... @@ -74,13 +75,22 @@ public interface TradeOrderService {
74 75 TradeOrderDO getOrder(Long userId, Long id);
75 76  
76 77 /**
77   - * 获得交易订单分页
  78 + * 【管理员】获得交易订单分页
78 79 *
79 80 * @param reqVO 分页请求
80 81 * @return 交易订单
81 82 */
82 83 PageResult<TradeOrderDO> getOrderPage(TradeOrderPageReqVO reqVO);
83 84  
  85 + /**
  86 + * 【会员】获得交易订单分页
  87 + *
  88 + * @param userId 用户编号
  89 + * @param reqVO 分页请求
  90 + * @return 交易订单
  91 + */
  92 + PageResult<TradeOrderDO> getOrderPage(Long userId, AppTradeOrderPageReqVO reqVO);
  93 +
84 94 // =================== Order Item ===================
85 95  
86 96 /**
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java
... ... @@ -32,6 +32,7 @@ import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliver
32 32 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
33 33 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO;
34 34 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO.Item;
  35 +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
35 36 import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
36 37 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
37 38 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
... ... @@ -450,6 +451,11 @@ public class TradeOrderServiceImpl implements TradeOrderService {
450 451 return tradeOrderMapper.selectPage(reqVO, userIds);
451 452 }
452 453  
  454 + @Override
  455 + public PageResult<TradeOrderDO> getOrderPage(Long userId, AppTradeOrderPageReqVO reqVO) {
  456 + return tradeOrderMapper.selectPage(reqVO, userId);
  457 + }
  458 +
453 459 // =================== Order Item ===================
454 460  
455 461 @Override
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java
... ... @@ -113,7 +113,7 @@ public class SmsSendServiceImpl implements SmsSendService {
113 113 SmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId);
114 114 // 短信模板不存在
115 115 if (channelDO == null) {
116   - throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS);
  116 + throw exception(SMS_CHANNEL_NOT_EXISTS);
117 117 }
118 118 return channelDO;
119 119 }
... ...
yudao-ui-admin/src/router/index.js
... ... @@ -198,20 +198,12 @@ export const constantRoutes = [
198 198 ]
199 199 },
200 200 {
201   - path: '/order',
  201 + path: '/trade/order',
202 202 component: Layout,
203   - name: '订单管理',
204   - meta: { title: '订单管理' },
205   - alwaysShow: true,
  203 + hidden: true,
206 204 children: [
207 205 {
208   - path: '/mall/trade/order',
209   - name: '商品订单',
210   - meta: { title: '商品订单' },
211   - component: (resolve) => require(['@/views/mall/trade/order'], resolve)
212   - },
213   - {
214   - path: '/mall/trade/order/detail',
  206 + path: 'detail',
215 207 name: '订单详情',
216 208 hidden: true,
217 209 meta: { title: '订单详情' },
... ...
yudao-ui-admin/src/views/mall/trade/order/index.vue
... ... @@ -229,7 +229,7 @@ export default {
229 229 this.getList();
230 230 },
231 231 goToDetail (row) {
232   - this.$router.push({ path: '/mall/trade/order/detail', query: { id: row.id }})
  232 + this.$router.push({ path: '/trade/order/detail', query: { id: row.id }})
233 233 }
234 234 }
235 235 }
... ...
yudao-ui-app/api/order.js
1 1 const { http } = uni.$u
2 2  
3   -//获得订单交易分页
4   -export const getOrderPageData = params => http.get('/trade/order/page', { params })
  3 +// 获得订单交易分页
  4 +export const getOrderPage = params => http.get('/trade/order/page', { params })
... ...
yudao-ui-app/pages/order/order.vue
... ... @@ -14,7 +14,7 @@
14 14 </template>
15 15  
16 16 <script>
17   -import { getOrderPageData } from '../../api/order'
  17 +import { getOrderPage } from '../../api/order'
18 18  
19 19 export default {
20 20 name: 'order',
... ... @@ -32,23 +32,19 @@ export default {
32 32 status: '0'
33 33 },
34 34 {
35   - name: '已付款',
36   - status: '10'
37   - },
38   - {
39 35 name: '待发货',
40   - status: '20'
  36 + status: '10'
41 37 },
42 38 {
43 39 name: '待收货',
44   - status: '30'
  40 + status: '20'
45 41 },
46 42 {
47 43 name: '已完成',
48   - status: '40'
  44 + status: '30'
49 45 },
50 46 {
51   - name: '已取消',
  47 + name: '已取消', // TODO @辰尘:已取消不展示
52 48 status: '50'
53 49 }
54 50 ],
... ... @@ -76,7 +72,7 @@ export default {
76 72 if (status >= 0) {
77 73 params.orderStatus = status
78 74 }
79   - getOrderPageData(params)
  75 + getOrderPage(params)
80 76 .then(res => {
81 77 console.log(res)
82 78 })
... ...