From daf9f8dbb7ba36eb283221d2c6022039aefaf97d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期日, 25 十月 2026 00:40:38 +0800
Subject: [PATCH] feat(aftersales): 售后退货单同步MES批次信息并优化工单处理流程

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java |   46 +++++++++++++++++++++++++++++-----------------
 1 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
index 30b1ad6..49414ff 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
@@ -4,10 +4,12 @@
 import cn.hutool.core.util.ObjUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchGenerateReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLinePageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLineSaveReqVO;
 import cn.iocoder.yudao.module.mes.api.event.MesReturnSalesProgressEvent;
 import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesLineMapper;
@@ -27,6 +29,7 @@
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.MD_ITEM_BATCH_REQUIRED;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_BATCH_CLIENT_MISMATCH;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_SALES_LINE_NOT_EXISTS;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_SALES_RQC_SOURCE_INVALID;
 
@@ -87,9 +90,9 @@
      */
     private void validateLineSaveData(MesWmReturnSalesLineSaveReqVO reqVO) {
         // 鏍¢獙閫�璐у崟瀛樺湪 + 鑽夌鐘舵��
-        returnSalesService.validateReturnSalesExistsAndPrepare(reqVO.getReturnId());
-        // 鏍¢獙鐗╂枡瀛樺湪 + 鎵规绠$悊
-        validateItemBatchManagement(reqVO.getReturnId(), reqVO.getItemId(), reqVO.getBatchId());
+        MesWmReturnSalesDO returnSales = returnSalesService.validateReturnSalesExistsAndPrepare(reqVO.getReturnId());
+        // 鏍¢獙鐗╂枡瀛樺湪 + 瑙f瀽鎵规
+        resolveAndValidateBatch(returnSales, reqVO);
     }
 
     @Override
@@ -153,24 +156,33 @@
     }
 
     /**
-     * 鏍¢獙鐗╂枡鎵规绠$悊
+     * 瑙f瀽骞舵牎楠岀墿鏂欐壒娆�
      *
-     * @param returnId 閫�璐у崟ID
-     * @param itemId   鐗╂枡ID
-     * @param batchId  鎵规ID
+     * <p>閫�璐у晢鍝佸湪閿�鍞嚭搴撴椂鍙兘鏈褰曟壒娆★紝姝ゆ椂鎸夌墿鏂� + 瀹㈡埛 + 閿�鍞鍗曡嚜鍔ㄧ敓鎴愰��璐ф壒娆★紝
+     * 淇濊瘉閫�璐у崟浠嶅彲杩芥函鍒板叿浣撴壒娆★紱宸叉湁鎵规鍒欐牎楠岀墿鏂欏綊灞烇紝鎵规鏈寚瀹氬鎴锋椂瑙嗕负閫氱敤鎵规銆�
      */
-    private void validateItemBatchManagement(Long returnId, Long itemId, Long batchId) {
-        MesMdmItemDO item = mdmItemService.validateItemExistsAndEnable(itemId);
-        // 濡傛灉鐗╂枡鍚敤浜嗘壒娆$鐞嗭紝鍒欏繀椤婚�夋嫨鎵规
-        if (Boolean.TRUE.equals(item.getIsBatchManaged()) && batchId == null) {
+    private void resolveAndValidateBatch(MesWmReturnSalesDO returnSales, MesWmReturnSalesLineSaveReqVO reqVO) {
+        MesMdmItemDO item = mdmItemService.validateItemExistsAndEnable(reqVO.getItemId());
+        if (reqVO.getBatchId() != null) {
+            MesWmBatchDO batch = batchService.validateBatchExists(reqVO.getBatchId(), reqVO.getItemId());
+            if (batch.getClientId() != null && ObjUtil.notEqual(batch.getClientId(), returnSales.getClientId())) {
+                throw exception(WM_BATCH_CLIENT_MISMATCH);
+            }
+            reqVO.setBatchCode(batch.getCode());
+            return;
+        }
+        if (!Boolean.TRUE.equals(item.getIsBatchManaged())) {
+            return;
+        }
+        MesWmBatchGenerateReqVO batchReqVO = new MesWmBatchGenerateReqVO()
+                .setItemId(reqVO.getItemId())
+                .setClientId(returnSales.getClientId())
+                .setSalesOrderCode(returnSales.getSalesOrderCode());
+        MesWmBatchDO batch = batchService.getOrGenerateBatchCode(batchReqVO);
+        if (batch == null) {
             throw exception(MD_ITEM_BATCH_REQUIRED);
         }
-        // 鏍¢獙鎵规瀛樺湪涓斿睘浜庡綋鍓嶇墿鏂欏拰瀹㈡埛
-        if (batchId != null) {
-            // 浠庣埗鍗曡幏鍙栧鎴稩D锛屾牎楠屾壒娆″綊灞�
-            MesWmReturnSalesDO returnSales = returnSalesService.validateReturnSalesExistsAndPrepare(returnId);
-            batchService.validateBatchExists(batchId, itemId, returnSales.getClientId(), null);
-        }
+        reqVO.setBatchId(batch.getId()).setBatchCode(batch.getCode());
     }
 
     @Override

--
Gitblit v1.9.3