From 3b4dc22224ba1db1ba7a3ececa36b9c4f67cc15b Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期四, 17 九月 2026 11:18:15 +0800
Subject: [PATCH] feat(aftersales): 售后工单/退货销售订单号必填并反显订单物料

---
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/vo/ticket/AfterSaleTicketSaveReqVO.java |    6 ++++--
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java       |   11 +++++++++++
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java               |    7 ++++++-
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnRespVO.java        |    3 +++
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/enums/ErrorCodeConstants.java                                   |    1 +
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnSaveReqVO.java     |    3 ++-
 6 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java
index 4f593cf..68ff1d0 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java
@@ -9,7 +9,9 @@
 import cn.iocoder.yudao.module.aftersales.controller.admin.returnobj.vo.AfterSaleReturnSaveReqVO;
 import cn.iocoder.yudao.module.aftersales.dal.dataobject.returnobj.AfterSaleReturnDO;
 import cn.iocoder.yudao.module.aftersales.dal.dataobject.returnobj.AfterSaleReturnItemDO;
+import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketDO;
 import cn.iocoder.yudao.module.aftersales.service.returnobj.AfterSaleReturnService;
+import cn.iocoder.yudao.module.aftersales.service.ticket.AfterSaleTicketService;
 import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
 import cn.iocoder.yudao.module.crm.api.customer.dto.CrmCustomerRespDTO;
 import io.swagger.v3.oas.annotations.Operation;
@@ -24,6 +26,7 @@
 import java.util.*;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 
@@ -35,6 +38,9 @@
 
     @Resource
     private AfterSaleReturnService returnService;
+
+    @Resource
+    private AfterSaleTicketService ticketService;
 
     @Resource
     private CrmCustomerApi customerApi;
@@ -85,10 +91,15 @@
         // 鎵归噺鍔犺浇瀹㈡埛鍚嶇О
         Set<Long> customerIds = convertSet(returnList, AfterSaleReturnDO::getCustomerId);
         Map<Long, CrmCustomerRespDTO> customerMap = customerApi.getCustomerMap(customerIds);
+        // 鎵归噺鍔犺浇鍏宠仈宸ュ崟鐨勯攢鍞鍗曞彿锛堝弽鏄捐鍗曚俊鎭級
+        Set<Long> ticketIds = convertSet(returnList, AfterSaleReturnDO::getTicketId);
+        Map<Long, AfterSaleTicketDO> ticketMap = convertMap(ticketService.getTicketList(ticketIds), AfterSaleTicketDO::getId);
         // 鎷艰鍚嶇О瀛楁
         return BeanUtils.toBean(returnList, AfterSaleReturnRespVO.class, vo -> {
             CrmCustomerRespDTO customer = customerMap.get(vo.getCustomerId());
             if (customer != null) vo.setCustomerName(customer.getName());
+            AfterSaleTicketDO ticket = ticketMap.get(vo.getTicketId());
+            if (ticket != null) vo.setSaleOrderNo(ticket.getSaleOrderNo());
         });
     }
 
diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnRespVO.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnRespVO.java
index 007ef50..c28108b 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnRespVO.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnRespVO.java
@@ -32,6 +32,9 @@
     @Schema(description = "鍏宠仈閿�鍞鍗曠紪鍙�", example = "1")
     private Long saleOrderId;
 
+    @Schema(description = "鍏宠仈閿�鍞鍗曞彿", example = "SO202401010001")
+    private String saleOrderNo;
+
     @Schema(description = "閫�璐х被鍨�: 1-閫�娆鹃��璐� 2-鎹㈣揣 3-浠呴��娆�", example = "1")
     private Integer returnType;
 
diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnSaveReqVO.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnSaveReqVO.java
index 6ff52ca..aa70842 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnSaveReqVO.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnSaveReqVO.java
@@ -26,7 +26,8 @@
     @NotNull(message = "瀹㈡埛涓嶈兘涓虹┖")
     private Long customerId;
 
-    @Schema(description = "鍏宠仈閿�鍞鍗曠紪鍙�", example = "1")
+    @Schema(description = "鍏宠仈閿�鍞鍗曠紪鍙�", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "閿�鍞鍗曞彿涓嶈兘涓虹┖")
     private Long saleOrderId;
 
     @Schema(description = "閫�璐х被鍨�: 1-閫�娆鹃��璐� 2-鎹㈣揣 3-浠呴��娆�", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/vo/ticket/AfterSaleTicketSaveReqVO.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/vo/ticket/AfterSaleTicketSaveReqVO.java
index 6e7c96f..ae6e164 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/vo/ticket/AfterSaleTicketSaveReqVO.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/vo/ticket/AfterSaleTicketSaveReqVO.java
@@ -29,10 +29,12 @@
     @Schema(description = "鑱旂郴浜虹紪鍙�", example = "1")
     private Long contactId;
 
-    @Schema(description = "閿�鍞鍗曠紪鍙�", example = "1")
+    @Schema(description = "閿�鍞鍗曠紪鍙�", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "閿�鍞鍗曞彿涓嶈兘涓虹┖")
     private Long saleOrderId;
 
-    @Schema(description = "閿�鍞鍗曞彿", example = "SO202401010001")
+    @Schema(description = "閿�鍞鍗曞彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "SO202401010001")
+    @NotEmpty(message = "閿�鍞鍗曞彿涓嶈兘涓虹┖")
     private String saleOrderNo;
 
     @Schema(description = "鍚堝悓缂栧彿", example = "1")
diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/enums/ErrorCodeConstants.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/enums/ErrorCodeConstants.java
index 0b0bd22..2b8c7a2 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/enums/ErrorCodeConstants.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/enums/ErrorCodeConstants.java
@@ -30,6 +30,7 @@
     ErrorCode RETURN_APPROVE_FAIL = new ErrorCode(1_022_002_002, "瀹℃牳閫�璐х敵璇峰け璐ワ紝鍘熷洜锛氫笉鏄緟瀹℃牳鐘舵��");
     ErrorCode RETURN_ITEM_EMPTY = new ErrorCode(1_022_002_003, "閫�璐ф槑缁嗚涓嶈兘涓虹┖");
     ErrorCode RETURN_DELETE_FAIL_NOT_DRAFT = new ErrorCode(1_022_002_004, "閫�璐х敵璇蜂笉鏄崏绋跨姸鎬侊紝鏃犳硶鍒犻櫎");
+    ErrorCode RETURN_TICKET_SALE_ORDER_REQUIRED = new ErrorCode(1_022_002_005, "鍒涘缓閫�璐х敵璇峰け璐ワ紝鍘熷洜锛氬敭鍚庡伐鍗曟湭鍏宠仈閿�鍞鍗�");
 
     // ========== 缁翠慨璁板綍 1-022-003-000 ==========
     ErrorCode REPAIR_NOT_EXISTS = new ErrorCode(1_022_003_000, "缁翠慨璁板綍涓嶅瓨鍦�");
diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java
index ed5fcd6..f165863 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnServiceImpl.java
@@ -62,11 +62,16 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createReturn(AfterSaleReturnSaveReqVO createReqVO, Long userId) {
-        // 1. 鏍¢獙宸ュ崟瀛樺湪
+        // 1. 鏍¢獙宸ュ崟瀛樺湪锛屼笖蹇呴』鍏宠仈閿�鍞鍗曪紙閫�璐х殑璁㈠崟涓庣墿鏂欐暟鎹敱宸ュ崟鍙嶆樉甯﹀叆锛�
         AfterSaleTicketDO ticket = ticketMapper.selectById(createReqVO.getTicketId());
         if (ticket == null) {
             throw exception(TICKET_NOT_EXISTS);
         }
+        if (ticket.getSaleOrderId() == null) {
+            throw exception(RETURN_TICKET_SALE_ORDER_REQUIRED);
+        }
+        // 閿�鍞鍗曚互宸ュ崟涓哄噯锛屼繚璇侀��璐у崟涓庡伐鍗曞叧鑱斿悓涓�璁㈠崟
+        createReqVO.setSaleOrderId(ticket.getSaleOrderId());
 
         // 2. 鐢熸垚鍗曞彿
         String no = noRedisDAO.generate(AfterSaleNoRedisDAO.RETURN_NO_PREFIX);

--
Gitblit v1.9.3