Commit c2b6c0d72a0520ff7b8b14920796db10c1539034

Authored by puhui999
1 parent a159a983

fix: 订单列表重构 ①

Showing 13 changed files with 132 additions and 36 deletions
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/bargain/vo/BargainActivityBaseVO.java
... ... @@ -18,7 +18,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
18 18 @Data
19 19 public class BargainActivityBaseVO {
20 20  
21   - @Schema(description = "砍价活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "越拼越省钱")
  21 + @Schema(description = "砍价活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "砍得越多省得越多,是兄弟就来砍我")
22 22 @NotNull(message = "砍价名称不能为空")
23 23 private String name;
24 24  
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressController.java
1 1 package cn.iocoder.yudao.module.trade.controller.admin.delivery;
2 2  
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 6 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
6 7 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
7 8 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.*;
8   -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressUpdateReqVO;
9 9 import cn.iocoder.yudao.module.trade.convert.delivery.DeliveryExpressConvert;
10 10 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
11 11 import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService;
... ... @@ -67,6 +67,15 @@ public class DeliveryExpressController {
67 67 return success(DeliveryExpressConvert.INSTANCE.convert(deliveryExpress));
68 68 }
69 69  
  70 + @GetMapping("/list-all-simple")
  71 + @Operation(summary = "获取快递公司精简信息列表", description = "主要用于前端的下拉选项")
  72 + public CommonResult<List<DeliveryExpressSimpleRespVO>> getSimpleBrandList() {
  73 + // 获取品牌列表,只要开启状态的
  74 + List<DeliveryExpressDO> list = deliveryExpressService.getDeliveryExpressListByStatus(CommonStatusEnum.ENABLE.getStatus());
  75 + // 排序后,返回给前端
  76 + return success(DeliveryExpressConvert.INSTANCE.convertList1(list));
  77 + }
  78 +
70 79 @GetMapping("/page")
71 80 @Operation(summary = "获得快递公司分页")
72 81 @PreAuthorize("@ss.hasPermission('trade:delivery:express:query')")
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressSimpleRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Data;
  6 +import lombok.NoArgsConstructor;
  7 +
  8 +import javax.validation.constraints.NotNull;
  9 +
  10 +@Schema(description = "管理后台 - 快递公司精简信息 Response VO")
  11 +@Data
  12 +@NoArgsConstructor
  13 +@AllArgsConstructor
  14 +public class DeliveryExpressSimpleRespVO {
  15 +
  16 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6592")
  17 + @NotNull(message = "编号不能为空")
  18 + private Long id;
  19 +
  20 + @Schema(description = "快递公司名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "顺丰速运")
  21 + @NotNull(message = "快递公司名称不能为空")
  22 + private String name;
  23 +
  24 +}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.java
... ... @@ -7,10 +7,7 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
7 7 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
8 8 import cn.iocoder.yudao.module.product.api.property.ProductPropertyValueApi;
9 9 import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO;
10   -import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
11   -import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDetailRespVO;
12   -import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageItemRespVO;
13   -import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
  10 +import cn.iocoder.yudao.module.trade.controller.admin.order.vo.*;
14 11 import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
15 12 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
16 13 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
... ... @@ -97,4 +94,19 @@ public class TradeOrderController {
97 94 return success(true);
98 95 }
99 96  
  97 + @PostMapping("/remark")
  98 + @Operation(summary = "发货订单")
  99 + @PreAuthorize("@ss.hasPermission('trade:order:remark')")
  100 + public CommonResult<Boolean> remarkOrder(@RequestBody TradeOrderRemarkReqVO remarkReqVO) {
  101 + tradeOrderUpdateService.remarkOrder(getLoginUserId(), remarkReqVO);
  102 + return success(true);
  103 + }
  104 +
  105 + // TODO @puhui999 订单物流详情
  106 + // TODO @puhui999 【前台】订单取消
  107 + // TODO @puhui999 【后台】订单取消
  108 + // TODO @puhui999 【前台】订单核销
  109 + // TODO @puhui999 【前台】订单删除
  110 + // TODO @puhui999 【后台】订单统计
  111 +
100 112 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/vo/TradeOrderDeliveryReqVO.java
1 1 package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
2 2  
3   -import cn.iocoder.yudao.framework.common.validation.InEnum;
4   -import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum;
5 3 import io.swagger.v3.oas.annotations.media.Schema;
6 4 import lombok.Data;
7 5  
... ... @@ -16,12 +14,6 @@ public class TradeOrderDeliveryReqVO {
16 14 @NotNull(message = "订单编号不能为空")
17 15 private Long id;
18 16  
19   - // TODO @puhui999:可以去掉 type;如果无需发货,则 logisticsId 传递 0;logisticsNo 传递空串
20   - @Schema(description = "发货类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
21   - @InEnum(DeliveryTypeEnum.class)
22   - @NotNull(message = "发货类型不能为空")
23   - private Integer type;
24   -
25 17 @Schema(description = "发货物流公司编号", example = "1")
26 18 @NotNull(message = "发货物流公司不能为空")
27 19 private Long logisticsId;
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/vo/TradeOrderRemarkReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import javax.validation.constraints.NotEmpty;
  7 +import javax.validation.constraints.NotNull;
  8 +
  9 +@Schema(description = "管理后台 - 订单备注 Request VO")
  10 +@Data
  11 +public class TradeOrderRemarkReqVO {
  12 +
  13 + @Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  14 + @NotNull(message = "订单编号不能为空")
  15 + private Long id;
  16 +
  17 + @Schema(description = "商家备注", example = "你猜一下")
  18 + @NotEmpty(message = "订单备注不能为空")
  19 + private String remark;
  20 +
  21 +}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/delivery/DeliveryExpressConvert.java
1 1 package cn.iocoder.yudao.module.trade.convert.delivery;
2 2  
3   -import java.util.*;
4   -
5 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6   -
7   -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressCreateReqVO;
8   -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressExcelVO;
9   -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressRespVO;
10   -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressUpdateReqVO;
  4 +import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.*;
11 5 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
12 6 import org.mapstruct.Mapper;
13 7 import org.mapstruct.factory.Mappers;
14 8  
  9 +import java.util.List;
  10 +
15 11 @Mapper
16 12 public interface DeliveryExpressConvert {
17 13  
... ... @@ -29,4 +25,5 @@ public interface DeliveryExpressConvert {
29 25  
30 26 List<DeliveryExpressExcelVO> convertList02(List<DeliveryExpressDO> list);
31 27  
  28 + List<DeliveryExpressSimpleRespVO> convertList1(List<DeliveryExpressDO> list);
32 29 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/delivery/DeliveryExpressMapper.java
... ... @@ -36,6 +36,11 @@ public interface DeliveryExpressMapper extends BaseMapperX&lt;DeliveryExpressDO&gt; {
36 36 return selectOne(new LambdaQueryWrapper<DeliveryExpressDO>()
37 37 .eq(DeliveryExpressDO::getCode, code));
38 38 }
  39 +
  40 + default List<DeliveryExpressDO> selectListByStatus(Integer status) {
  41 + return selectList(DeliveryExpressDO::getStatus, status);
  42 + }
  43 +
39 44 }
40 45  
41 46  
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressService.java
1 1 package cn.iocoder.yudao.module.trade.service.delivery;
2 2  
3   -import java.util.*;
4   -import javax.validation.*;
5   -
6 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 4 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressCreateReqVO;
8 5 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressExportReqVO;
... ... @@ -10,6 +7,10 @@ import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.Delive
10 7 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressUpdateReqVO;
11 8 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
12 9  
  10 +import javax.validation.Valid;
  11 +import java.util.Collection;
  12 +import java.util.List;
  13 +
13 14 /**
14 15 * 快递公司 Service 接口
15 16 *
... ... @@ -71,4 +72,11 @@ public interface DeliveryExpressService {
71 72 */
72 73 List<DeliveryExpressDO> getDeliveryExpressList(DeliveryExpressExportReqVO exportReqVO);
73 74  
  75 + /**
  76 + * 获取指定状态的快递公司列表
  77 + *
  78 + * @param status 状态
  79 + * @return 返回快递公司列表
  80 + */
  81 + List<DeliveryExpressDO> getDeliveryExpressListByStatus(Integer status);
74 82 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressServiceImpl.java
... ... @@ -9,14 +9,15 @@ import cn.iocoder.yudao.module.trade.convert.delivery.DeliveryExpressConvert;
9 9 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
10 10 import cn.iocoder.yudao.module.trade.dal.mysql.delivery.DeliveryExpressMapper;
11 11 import org.springframework.stereotype.Service;
12   -import javax.annotation.Resource;
13 12 import org.springframework.validation.annotation.Validated;
14 13  
15   -import java.util.*;
16   -
  14 +import javax.annotation.Resource;
  15 +import java.util.Collection;
  16 +import java.util.List;
17 17  
18 18 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
19   -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*;
  19 +import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.EXPRESS_CODE_DUPLICATE;
  20 +import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.EXPRESS_NOT_EXISTS;
20 21  
21 22 /**
22 23 * 快递公司 Service 实现类
... ... @@ -99,4 +100,9 @@ public class DeliveryExpressServiceImpl implements DeliveryExpressService {
99 100 return deliveryExpressMapper.selectList(exportReqVO);
100 101 }
101 102  
  103 + @Override
  104 + public List<DeliveryExpressDO> getDeliveryExpressListByStatus(Integer status) {
  105 + return deliveryExpressMapper.selectListByStatus(status);
  106 + }
  107 +
102 108 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java
1 1 package cn.iocoder.yudao.module.trade.service.order;
2 2  
3 3 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
  4 +import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO;
4 5 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO;
5 6 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettlementReqVO;
6 7 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettlementRespVO;
... ... @@ -60,6 +61,14 @@ public interface TradeOrderUpdateService {
60 61 */
61 62 void receiveOrder(Long userId, Long id);
62 63  
  64 + /**
  65 + * 【管理员】交易订单备注
  66 + *
  67 + * @param loginUserId 管理员编号
  68 + * @param remarkReqVO 备注请求
  69 + */
  70 + void remarkOrder(Long loginUserId, TradeOrderRemarkReqVO remarkReqVO);
  71 +
63 72 // =================== Order Item ===================
64 73  
65 74 /**
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
... ... @@ -30,6 +30,7 @@ import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi;
30 30 import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponUseReqDTO;
31 31 import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
32 32 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
  33 +import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO;
33 34 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO;
34 35 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettlementReqVO;
35 36 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettlementRespVO;
... ... @@ -398,7 +399,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
398 399 TradeOrderDO updateOrderObj = new TradeOrderDO();
399 400 // 判断发货类型
400 401 // 2.1 快递发货
401   - if (Objects.equals(deliveryReqVO.getType(), DeliveryTypeEnum.EXPRESS.getMode())) {
  402 + if (ObjectUtil.notEqual(deliveryReqVO.getLogisticsId(), 0L)) {
402 403 // 校验快递公司
403 404 DeliveryExpressDO deliveryExpress = deliveryExpressService.getDeliveryExpress(deliveryReqVO.getLogisticsId());
404 405 if (deliveryExpress == null) {
... ... @@ -408,11 +409,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
408 409 throw exception(EXPRESS_STATUS_NOT_ENABLE);
409 410 }
410 411 updateOrderObj.setLogisticsId(deliveryReqVO.getLogisticsId()).setLogisticsNo(deliveryReqVO.getLogisticsNo()).setDeliveryType(DeliveryTypeEnum.EXPRESS.getMode());
411   - }
412   - // TODO @puhui999:无需发货时,更新 logisticsId 为 0;
413   - // 2.2 无需发货
414   - if (Objects.equals(deliveryReqVO.getType(), DeliveryTypeEnum.NULL.getMode())) {
415   - updateOrderObj.setLogisticsId(null).setLogisticsNo("").setDeliveryType(DeliveryTypeEnum.NULL.getMode());
  412 + } else {
  413 + // 2.2 无需发货
  414 + updateOrderObj.setLogisticsId(0L).setLogisticsNo("").setDeliveryType(DeliveryTypeEnum.NULL.getMode());
416 415 }
417 416  
418 417 // 更新 TradeOrderDO 状态为已发货,等待收货
... ... @@ -489,6 +488,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
489 488 // TODO 芋艿:lili 发送商品被购买完成的数据
490 489 }
491 490  
  491 + @Override
  492 + public void remarkOrder(Long loginUserId, TradeOrderRemarkReqVO remarkReqVO) {
  493 + // 校验并获得交易订单
  494 + validateOrderDeliverable(remarkReqVO.getId());
  495 +
  496 + TradeOrderDO updateOrderObj = new TradeOrderDO();
  497 + updateOrderObj.setId(remarkReqVO.getId());
  498 + updateOrderObj.setRemark(remarkReqVO.getRemark());
  499 + tradeOrderMapper.updateById(updateOrderObj);
  500 + }
  501 +
492 502 /**
493 503 * 校验交易订单满足可售货的条件
494 504 *
... ...
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceTest.java
... ... @@ -18,6 +18,7 @@ import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum;
18 18 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum;
19 19 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
20 20 import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties;
  21 +import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
21 22 import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService;
22 23 import org.junit.jupiter.api.Test;
23 24 import org.springframework.boot.test.mock.mockito.MockBean;
... ... @@ -54,6 +55,8 @@ public class TradeAfterSaleServiceTest extends BaseDbUnitTest {
54 55 @MockBean
55 56 private TradeOrderUpdateService tradeOrderService;
56 57 @MockBean
  58 + private TradeOrderQueryService tradeOrderQueryService;
  59 + @MockBean
57 60 private PayRefundApi payRefundApi;
58 61  
59 62 @MockBean
... ... @@ -72,12 +75,12 @@ public class TradeAfterSaleServiceTest extends BaseDbUnitTest {
72 75 o.setOrderId(111L).setUserId(userId).setPayPrice(200);
73 76 o.setAfterSaleStatus(TradeOrderItemAfterSaleStatusEnum.NONE.getStatus());
74 77 });
75   - when(tradeOrderService.getOrderItem(eq(1024L), eq(1L)))
  78 + when(tradeOrderQueryService.getOrderItem(eq(1024L), eq(1L)))
76 79 .thenReturn(orderItem);
77 80 // mock 方法(交易订单)
78 81 TradeOrderDO order = randomPojo(TradeOrderDO.class, o -> o.setStatus(TradeOrderStatusEnum.DELIVERED.getStatus())
79 82 .setNo("202211301234"));
80   - when(tradeOrderService.getOrder(eq(1024L), eq(111L))).thenReturn(order);
  83 + when(tradeOrderQueryService.getOrder(eq(1024L), eq(111L))).thenReturn(order);
81 84  
82 85 // 调用
83 86 Long afterSaleId = tradeAfterSaleService.createAfterSale(userId, createReqVO);
... ...