diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.http b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.http index eb6281052..8e7746359 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.http +++ b/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}} ] } -### /trade-order/page 获得订单交易分页 -GET {{shop-api-base-url}}/trade-order/page?status=1&pageNo=1&pageSize=10 -Content-Type: application/x-www-form-urlencoded +### 获得订单交易的分页 +GET {{appApi}}/trade/order/page?pageNo=1&pageSize=10 +Authorization: Bearer {{appToken}} +tenant-id: {{appTenentId}} -### +### 获得订单交易的详细 +GET {{appApi}}/trade/order/get-detail?id=21 +Authorization: Bearer {{appToken}} +tenant-id: {{appTenentId}} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java index 282040dc5..06ce965d2 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java +++ b/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; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO; -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO; -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderGetCreateInfoRespVO; -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO; -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderRespVO; +import cn.iocoder.yudao.module.product.api.property.ProductPropertyValueApi; +import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO; +import cn.iocoder.yudao.module.trade.controller.app.order.vo.*; +import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; import cn.iocoder.yudao.module.trade.service.order.TradeOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -20,8 +21,11 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Api(tags = "用户 App - 交易订单") @RestController @@ -33,6 +37,9 @@ public class AppTradeOrderController { @Resource private TradeOrderService tradeOrderService; + @Resource + private ProductPropertyValueApi productPropertyValueApi; + @GetMapping("/get-create-info") @ApiOperation("基于商品,确认创建订单") @PreAuthenticated @@ -47,7 +54,7 @@ public class AppTradeOrderController { public CommonResult createOrder(@RequestBody AppTradeOrderCreateReqVO createReqVO, HttpServletRequest servletRequest) { // 获取登录用户、用户 IP 地址 - Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); + Long loginUserId = getLoginUserId(); String clientIp = ServletUtil.getClientIP(servletRequest); // 创建交易订单,预支付记录 Long orderId = tradeOrderService.createOrder(loginUserId, clientIp, createReqVO); @@ -62,19 +69,34 @@ public class AppTradeOrderController { return success(true); } - @GetMapping("/get") + @GetMapping("/get-detail") @ApiOperation("获得交易订单") - @ApiImplicitParam(name = "tradeOrderId", value = "交易订单编号", required = true, dataTypeClass = Long.class) - public CommonResult getTradeOrder(@RequestParam("tradeOrderId") Integer tradeOrderId) { -// return success(tradeOrderService.getTradeOrder(tradeOrderId)); - return null; + @ApiImplicitParam(name = "id", value = "交易订单编号", required = true, dataTypeClass = Long.class) + public CommonResult getOrder(@RequestParam("id") Long id) { + // 查询订单 + TradeOrderDO order = tradeOrderService.getOrder(getLoginUserId(), id); + // 查询订单项 + List orderItems = tradeOrderService.getOrderItemListByOrderId(order.getId()); + // 查询商品属性 + List propertyValueDetails = productPropertyValueApi + .getPropertyValueDetailList(TradeOrderConvert.INSTANCE.convertPropertyValueIds(orderItems)); + // 最终组合 + return success(TradeOrderConvert.INSTANCE.convert02(order, orderItems, propertyValueDetails)); } @GetMapping("/page") @ApiOperation("获得订单交易分页") - public CommonResult> pageTradeOrder(AppTradeOrderPageReqVO pageVO) { -// return success(tradeOrderService.pageTradeOrder(UserSecurityContextHolder.getUserId(), pageVO)); - return null; + public CommonResult> getOrderPage(AppTradeOrderPageReqVO reqVO) { + // 查询订单 + PageResult pageResult = tradeOrderService.getOrderPage(getLoginUserId(), reqVO); + // 查询订单项 + List orderItems = tradeOrderService.getOrderItemListByOrderId( + convertSet(pageResult.getList(), TradeOrderDO::getId)); + // 查询商品属性 + List propertyValueDetails = productPropertyValueApi + .getPropertyValueDetailList(TradeOrderConvert.INSTANCE.convertPropertyValueIds(orderItems)); + // 最终组合 + return success(TradeOrderConvert.INSTANCE.convertPage02(pageResult, orderItems, propertyValueDetails)); } } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderDetailRespVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderDetailRespVO.java new file mode 100644 index 000000000..14614a57e --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderDetailRespVO.java @@ -0,0 +1,150 @@ +package cn.iocoder.yudao.module.trade.controller.app.order.vo; + +import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +@ApiModel("用户 App - 订单交易的明细 Response VO") +@Data +public class AppTradeOrderDetailRespVO { + + // ========== 订单基本信息 ========== + + @ApiModelProperty(value = "订单编号", required = true, example = "1024") + private Long id; + + @ApiModelProperty(value = "订单流水号", required = true, example = "1146347329394184195") + private String no; + + @ApiModelProperty(value = "创建时间", required = true, notes = "下单时间") + private Date createTime; + + @ApiModelProperty(value = "用户备注", required = true, example = "你猜") + private String userRemark; + + @ApiModelProperty(value = "订单状态", required = true, example = "1", notes = "参见 TradeOrderStatusEnum 枚举") + private Integer status; + + @ApiModelProperty(value = "购买的商品数量", required = true, example = "10") + private Integer productCount; + + @ApiModelProperty(value = "订单完成时间") + private LocalDateTime finishTime; + + @ApiModelProperty(value = "订单取消时间") + private LocalDateTime cancelTime; + + // ========== 价格 + 支付基本信息 ========== + + @ApiModelProperty(value = "支付订单编号", required = true, example = "1024") + private Long payOrderId; + + @ApiModelProperty(value = "付款时间") + private LocalDateTime payTime; + + @ApiModelProperty(value = "商品原价(总)", required = true, example = "1000", notes = "单位:分") + private Integer originalPrice; + + @ApiModelProperty(value = "订单原价(总)", required = true, example = "1000", notes = "单位:分") + private Integer orderPrice; + + @ApiModelProperty(value = "订单优惠(总)", required = true, example = "100", notes = "单位:分") + private Integer discountPrice; + + @ApiModelProperty(value = "运费金额", required = true, example = "100", notes = "单位:分") + private Integer deliveryPrice; + + @ApiModelProperty(value = "订单调价(总)", required = true, example = "100", notes = "单位:分") + private Integer adjustPrice; + + @ApiModelProperty(value = "应付金额(总)", required = true, example = "1000", notes = "单位:分") + private Integer payPrice; + + // ========== 收件 + 物流基本信息 ========== + + @ApiModelProperty(value = "发货物流单号", example = "1024") + private String logisticsNo; + + @ApiModelProperty(value = "发货时间") + private LocalDateTime deliveryTime; + + @ApiModelProperty(value = "收货时间") + private LocalDateTime receiveTime; + + @ApiModelProperty(value = "收件人名称", required = true, example = "张三") + private String receiverName; + + @ApiModelProperty(value = "收件人手机", required = true, example = "13800138000") + private String receiverMobile; + + @ApiModelProperty(value = "收件人地区编号", required = true, example = "110000") + private Integer receiverAreaId; + + @ApiModelProperty(value = "收件人地区名字", required = true, example = "上海 上海市 普陀区") + private String receiverAreaName; + + @ApiModelProperty(value = "收件人邮编", required = true, example = "100000") + private Integer receiverPostCode; + + @ApiModelProperty(value = "收件人详细地址", required = true, example = "中关村大街 1 号") + private String receiverDetailAddress; + + // ========== 售后基本信息 ========== + + // ========== 营销基本信息 ========== + + @ApiModelProperty(value = "优惠劵编号", example = "1024") + private Long couponId; + + @ApiModelProperty(value = "优惠劵减免金额", required = true, example = "100", notes = "单位:分") + private Integer couponPrice; + + @ApiModelProperty(value = "积分抵扣的金额", required = true, example = "100", notes = "单位:分") + private Integer pointPrice; + + /** + * 订单项数组 + */ + private List items; + + @ApiModel("用户 App - 交易订单的分页项的订单项目") + @Data + public static class Item { + + @ApiModelProperty(value = "编号", required = true, example = "1") + private Long id; + + @ApiModelProperty(value = "商品 SPU 编号", required = true, example = "1") + private Long spuId; + + @ApiModelProperty(value = "商品 SPU 名称", required = true, example = "芋道源码") + private String spuName; + + @ApiModelProperty(value = "商品 SKU 编号", required = true, example = "1") + private Long skuId; + + @ApiModelProperty(value = "商品图片", required = true, example = "https://www.iocoder.cn/1.png") + private String picUrl; + + @ApiModelProperty(value = "购买数量", required = true, example = "1") + private Integer count; + + @ApiModelProperty(value = "商品原价(总)", required = true, example = "100", notes = "单位:分") + private Integer originalPrice; + + @ApiModelProperty(value = "商品原价(单)", required = true, example = "100", notes = "单位:分") + private Integer originalUnitPrice; + + /** + * 属性数组 + */ + private List properties; + + } + +} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderItemRespVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderItemRespVO.java deleted file mode 100644 index 74191d980..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderItemRespVO.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.iocoder.yudao.module.trade.controller.app.order.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.time.LocalDateTime; - -// TODO 芋艿:字段优化 -@ApiModel("交易订单项 Response VO") -@Data -public class AppTradeOrderItemRespVO { - - @ApiModelProperty(value = "id自增长", required = true) - private Integer id; - @ApiModelProperty(value = "订单编号", required = true) - private Integer orderId; - @ApiModelProperty(value = "订单项状态", required = true) - private Integer status; - @ApiModelProperty(value = "商品 SKU 编号", required = true) - private Integer skuId; - @ApiModelProperty(value = "商品 SPU 编号", required = true) - private Integer spuId; - @ApiModelProperty(value = "商品名字", required = true) - private String skuName; - @ApiModelProperty(value = "图片名字", required = true) - private String skuImage; - @ApiModelProperty(value = "商品数量", required = true) - private Integer quantity; - @ApiModelProperty(value = "原始单价,单位:分", required = true) - private Integer originPrice; - @ApiModelProperty(value = "购买单价,单位:分", required = true) - private Integer buyPrice; - @ApiModelProperty(value = "最终价格,单位:分", required = true) - private Integer presentPrice; - @ApiModelProperty(value = "购买总金额,单位:分", required = true) - private Integer buyTotal; - @ApiModelProperty(value = "优惠总金额,单位:分", required = true) - private Integer discountTotal; - @ApiModelProperty(value = "最终总金额,单位:分", required = true) - private Integer presentTotal; - @ApiModelProperty(value = "退款总金额,单位:分", required = true) - private Integer refundTotal; - @ApiModelProperty(value = "物流id") - private Integer logisticsId; - @ApiModelProperty(value = "售后状态", required = true) - private Integer afterSaleStatus; - @ApiModelProperty(value = "售后订单编号") - private Integer afterSaleOrderId; - @ApiModelProperty(value = "创建时间", required = true) - private LocalDateTime createTime; - - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageItemRespVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageItemRespVO.java new file mode 100644 index 000000000..8815c0c39 --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageItemRespVO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.trade.controller.app.order.vo; + +import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@ApiModel("用户 App - 订单交易的分页项 Response VO") +@Data +public class AppTradeOrderPageItemRespVO { + + @ApiModelProperty(value = "订单编号", required = true, example = "1024") + private Long id; + + @ApiModelProperty(value = "订单流水号", required = true, example = "1146347329394184195") + private String no; + + @ApiModelProperty(value = "订单状态", required = true, example = "1", notes = "参见 TradeOrderStatusEnum 枚举") + private Integer status; + + @ApiModelProperty(value = "购买的商品数量", required = true, example = "10") + private Integer productCount; + + /** + * 订单项数组 + */ + private List items; + + @ApiModel("用户 App - 交易订单的明细的订单项目") + @Data + public static class Item { + + @ApiModelProperty(value = "编号", required = true, example = "1") + private Long id; + + @ApiModelProperty(value = "商品 SPU 编号", required = true, example = "1") + private Long spuId; + + @ApiModelProperty(value = "商品 SPU 名称", required = true, example = "芋道源码") + private String spuName; + + @ApiModelProperty(value = "商品 SKU 编号", required = true, example = "1") + private Long skuId; + + @ApiModelProperty(value = "商品图片", required = true, example = "https://www.iocoder.cn/1.png") + private String picUrl; + + @ApiModelProperty(value = "购买数量", required = true, example = "1") + private Integer count; + + @ApiModelProperty(value = "商品原价(总)", required = true, example = "100", notes = "单位:分") + private Integer originalPrice; + + @ApiModelProperty(value = "商品原价(单)", required = true, example = "100", notes = "单位:分") + private Integer originalUnitPrice; + + /** + * 属性数组 + */ + private List properties; + + } + +} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageReqVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageReqVO.java index bec40c1cb..00d253305 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageReqVO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderPageReqVO.java @@ -1,18 +1,19 @@ package cn.iocoder.yudao.module.trade.controller.app.order.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.EqualsAndHashCode; // TODO 芋艿:字段优化 @ApiModel("交易订单分页 Request VO") @Data -@EqualsAndHashCode(callSuper = true) public class AppTradeOrderPageReqVO extends PageParam { @ApiModelProperty(value = "订单状态", example = "1", notes = "参见 TradeOrderStatusEnum 枚举") - private Integer orderStatus; + @InEnum(value = TradeOrderStatusEnum.class, message = "订单状态必须是 {value}") + private Integer status; } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderRespVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderRespVO.java deleted file mode 100644 index de569cdde..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderRespVO.java +++ /dev/null @@ -1,73 +0,0 @@ -package cn.iocoder.yudao.module.trade.controller.app.order.vo; - -import lombok.*; -import io.swagger.annotations.*; - -import java.time.LocalDateTime; -import java.util.*; - -// TODO 芋艿:字段优化 -@ApiModel("订单交易 Response VO") -@Data -public class AppTradeOrderRespVO { - - @ApiModelProperty(value = "订单编号", required = true) - private Integer id; - @ApiModelProperty(value = "用户编号", required = true) - private Integer userId; - @ApiModelProperty(value = "订单单号", required = true) - private String orderNo; - @ApiModelProperty(value = "订单状态", required = true) - private Integer orderStatus; - @ApiModelProperty(value = "备注") - private String remark; - @ApiModelProperty(value = "订单结束时间") - private LocalDateTime endTime; - @ApiModelProperty(value = "订单金额(总金额),单位:分", required = true) - private Integer buyPrice; - @ApiModelProperty(value = "优惠总金额,单位:分", required = true) - private Integer discountPrice; - @ApiModelProperty(value = "物流金额,单位:分", required = true) - private Integer logisticsPrice; - @ApiModelProperty(value = "最终金额,单位:分", required = true) - private Integer presentPrice; - @ApiModelProperty(value = "支付金额,单位:分", required = true) - private Integer payPrice; - @ApiModelProperty(value = "退款金额,单位:分", required = true) - private Integer refundPrice; - @ApiModelProperty(value = "付款时间") - private LocalDateTime payTime; - @ApiModelProperty(value = "支付订单编号") - private Integer payTransactionId; - @ApiModelProperty(value = "支付渠道") - private Integer payChannel; - @ApiModelProperty(value = "配送类型", required = true) - private Integer deliveryType; - @ApiModelProperty(value = "发货时间") - private LocalDateTime deliveryTime; - @ApiModelProperty(value = "收货时间") - private LocalDateTime receiveTime; - @ApiModelProperty(value = "收件人名称", required = true) - private String receiverName; - @ApiModelProperty(value = "手机号", required = true) - private String receiverMobile; - @ApiModelProperty(value = "地区编码", required = true) - private Integer receiverAreaCode; - @ApiModelProperty(value = "收件详细地址", required = true) - private String receiverDetailAddress; - @ApiModelProperty(value = "售后状态", required = true) - private Integer afterSaleStatus; - @ApiModelProperty(value = "优惠劵编号") - private Integer couponCardId; - @ApiModelProperty(value = "创建时间", required = true) - private LocalDateTime createTime; - - /** - * 订单项数组 - * - * // TODO 芋艿,后续考虑怎么优化下,目前是内嵌了别的 dto - */ - private List orderItems; - - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java index 31b2ffdad..b1f0b4b2a 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java +++ b/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 import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDetailRespVO; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageItemRespVO; +import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO; +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderDetailRespVO; +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageItemRespVO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; @@ -174,4 +177,65 @@ public interface TradeOrderConvert { TradeOrderDetailRespVO convert2(TradeOrderDO order, List items); MemberUserRespVO convert(MemberUserRespDTO bean); + default PageResult convertPage02(PageResult pageResult, List orderItems, + List propertyValueDetails) { + Map> orderItemMap = convertMultiMap(orderItems, TradeOrderItemDO::getOrderId); + Map propertyValueDetailMap = convertMap(propertyValueDetails, ProductPropertyValueDetailRespDTO::getValueId); + // 转化 List + List orderVOs = CollectionUtils.convertList(pageResult.getList(), order -> { + List xOrderItems = orderItemMap.get(order.getId()); + AppTradeOrderPageItemRespVO orderVO = convert02(order, xOrderItems); + if (CollUtil.isNotEmpty(xOrderItems)) { + // 处理商品属性 + for (int i = 0; i < xOrderItems.size(); i++) { + List properties = xOrderItems.get(i).getProperties(); + if (CollUtil.isEmpty(properties)) { + continue; + } + AppTradeOrderPageItemRespVO.Item item = orderVO.getItems().get(i); + item.setProperties(new ArrayList<>(properties.size())); + // 遍历每个 properties,设置到 TradeOrderPageItemRespVO.Item 中 + properties.forEach(property -> { + ProductPropertyValueDetailRespDTO propertyValueDetail = propertyValueDetailMap.get(property.getValueId()); + if (propertyValueDetail == null) { + return; + } + item.getProperties().add(convert02(propertyValueDetail)); + }); + } + } + return orderVO; + }); + return new PageResult<>(orderVOs, pageResult.getTotal()); + } + AppTradeOrderPageItemRespVO convert02(TradeOrderDO order, List items); + AppProductPropertyValueDetailRespVO convert02(ProductPropertyValueDetailRespDTO bean); + + default AppTradeOrderDetailRespVO convert02(TradeOrderDO order, List orderItems, + List propertyValueDetails) { + AppTradeOrderDetailRespVO orderVO = convert3(order, orderItems); + // 处理商品属性 + Map propertyValueDetailMap = convertMap(propertyValueDetails, ProductPropertyValueDetailRespDTO::getValueId); + for (int i = 0; i < orderItems.size(); i++) { + List properties = orderItems.get(i).getProperties(); + if (CollUtil.isEmpty(properties)) { + continue; + } + AppTradeOrderDetailRespVO.Item item = orderVO.getItems().get(i); + item.setProperties(new ArrayList<>(properties.size())); + // 遍历每个 properties,设置到 TradeOrderPageItemRespVO.Item 中 + properties.forEach(property -> { + ProductPropertyValueDetailRespDTO propertyValueDetail = propertyValueDetailMap.get(property.getValueId()); + if (propertyValueDetail == null) { + return; + } + item.getProperties().add(convert02(propertyValueDetail)); + }); + } + // 处理收货地址 + orderVO.setReceiverAreaName(AreaUtils.format(order.getReceiverAreaId())); + return orderVO; + } + AppTradeOrderDetailRespVO convert3(TradeOrderDO order, List items); + } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java index e256a2ee1..7be224744 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java +++ b/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; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO; +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; @@ -35,4 +36,11 @@ public interface TradeOrderMapper extends BaseMapperX { .betweenIfPresent(TradeOrderDO::getCreateTime, reqVO.getCreateTime())); } + default PageResult selectPage(AppTradeOrderPageReqVO reqVO, Long userId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(TradeOrderDO::getUserId, userId) + .eqIfPresent(TradeOrderDO::getStatus, reqVO.getStatus()) + .orderByDesc(TradeOrderDO::getId)); // TODO 芋艿:未来不同的 status,不同的排序 + } + } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderService.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderService.java index e53cac433..086f65edd 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderService.java +++ b/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; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO; +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; @@ -74,13 +75,22 @@ public interface TradeOrderService { TradeOrderDO getOrder(Long userId, Long id); /** - * 获得交易订单分页 + * 【管理员】获得交易订单分页 * * @param reqVO 分页请求 * @return 交易订单 */ PageResult getOrderPage(TradeOrderPageReqVO reqVO); + /** + * 【会员】获得交易订单分页 + * + * @param userId 用户编号 + * @param reqVO 分页请求 + * @return 交易订单 + */ + PageResult getOrderPage(Long userId, AppTradeOrderPageReqVO reqVO); + // =================== Order Item =================== /** diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java index e9b1d93ac..86d84c415 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java +++ b/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 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO.Item; +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO; import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; @@ -450,6 +451,11 @@ public class TradeOrderServiceImpl implements TradeOrderService { return tradeOrderMapper.selectPage(reqVO, userIds); } + @Override + public PageResult getOrderPage(Long userId, AppTradeOrderPageReqVO reqVO) { + return tradeOrderMapper.selectPage(reqVO, userId); + } + // =================== Order Item =================== @Override diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java index 6e425b919..85fee7ff4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java +++ b/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 { SmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId); // 短信模板不存在 if (channelDO == null) { - throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS); + throw exception(SMS_CHANNEL_NOT_EXISTS); } return channelDO; } diff --git a/yudao-ui-admin/src/router/index.js b/yudao-ui-admin/src/router/index.js index 63a01eed7..be6fabaf2 100644 --- a/yudao-ui-admin/src/router/index.js +++ b/yudao-ui-admin/src/router/index.js @@ -198,20 +198,12 @@ export const constantRoutes = [ ] }, { - path: '/order', + path: '/trade/order', component: Layout, - name: '订单管理', - meta: { title: '订单管理' }, - alwaysShow: true, + hidden: true, children: [ { - path: '/mall/trade/order', - name: '商品订单', - meta: { title: '商品订单' }, - component: (resolve) => require(['@/views/mall/trade/order'], resolve) - }, - { - path: '/mall/trade/order/detail', + path: 'detail', name: '订单详情', hidden: true, meta: { title: '订单详情' }, diff --git a/yudao-ui-admin/src/views/mall/trade/order/index.vue b/yudao-ui-admin/src/views/mall/trade/order/index.vue index 9a4760d39..0ffabe234 100644 --- a/yudao-ui-admin/src/views/mall/trade/order/index.vue +++ b/yudao-ui-admin/src/views/mall/trade/order/index.vue @@ -229,7 +229,7 @@ export default { this.getList(); }, goToDetail (row) { - this.$router.push({ path: '/mall/trade/order/detail', query: { id: row.id }}) + this.$router.push({ path: '/trade/order/detail', query: { id: row.id }}) } } } diff --git a/yudao-ui-app/api/order.js b/yudao-ui-app/api/order.js index 4e3a100ad..6de577975 100644 --- a/yudao-ui-app/api/order.js +++ b/yudao-ui-app/api/order.js @@ -1,4 +1,4 @@ const { http } = uni.$u -//获得订单交易分页 -export const getOrderPageData = params => http.get('/trade/order/page', { params }) +// 获得订单交易分页 +export const getOrderPage = params => http.get('/trade/order/page', { params }) diff --git a/yudao-ui-app/pages/order/order.vue b/yudao-ui-app/pages/order/order.vue index 9b23c9867..76c8c03b1 100644 --- a/yudao-ui-app/pages/order/order.vue +++ b/yudao-ui-app/pages/order/order.vue @@ -14,7 +14,7 @@