From dd637406e18a7afbf08d323c6ece913fe545b7ad Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 28 十月 2026 18:11:32 +0800
Subject: [PATCH] feat(mes): 增加盘号追溯功能和销售退货单优化

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java |   34 +++++++++++++++++++++++++++-------
 1 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java
index 32f0981..0e08f25 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java
@@ -65,7 +65,11 @@
     @Override
     public void updateReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO updateReqVO) {
         // 鏍¢獙瀛樺湪
-        validateReturnSalesDetailExists(updateReqVO.getId());
+        MesWmReturnSalesDetailDO oldDetail = validateReturnSalesDetailExists(updateReqVO.getId());
+        if (ObjUtil.notEqual(oldDetail.getLineId(), updateReqVO.getLineId())
+                || ObjUtil.notEqual(oldDetail.getReturnId(), updateReqVO.getReturnId())) {
+            throw exception(WM_RETURN_SALES_DETAIL_SOURCE_MISMATCH);
+        }
         // 鏍¢獙淇濆瓨鏁版嵁
         validateReturnSalesDetailSaveData(updateReqVO);
 
@@ -134,8 +138,14 @@
     private void validateReturnSalesDetailSaveData(MesWmReturnSalesDetailSaveReqVO reqVO) {
         // 鏍¢獙鐖舵暟鎹瓨鍦�
         MesWmReturnSalesLineDO line = returnSalesLineService.validateReturnSalesLineExists(reqVO.getLineId());
+        if (ObjUtil.notEqual(line.getReturnId(), reqVO.getReturnId())
+                || ObjUtil.notEqual(line.getItemId(), reqVO.getItemId())) {
+            throw exception(WM_RETURN_SALES_DETAIL_SOURCE_MISMATCH);
+        }
         // 鏍¢獙閫�璐у崟涓哄緟涓婃灦鐘舵��
         validateReturnSalesStatusApproved(line.getReturnId());
+        // 涓婃灦浣跨敤閫�璐ц鐨勬壒娆★紱鑻ヨ娌℃湁鎸囧畾鎵规锛屽厑璁告樉寮忛�夋嫨灞炰簬璇ョ墿鏂欑殑鎵规銆�
+        fillBatchId(reqVO, line);
         // 鏍¢獙浠撳簱銆佸簱鍖恒�佸簱浣嶇殑鍏宠仈鍏崇郴
         warehouseAreaService.validateWarehouseAreaExists(
                 reqVO.getWarehouseId(), reqVO.getLocationId(), reqVO.getAreaId());
@@ -144,8 +154,6 @@
         // 鏍¢獙鏄庣粏鎬绘暟閲忎笉瓒呰繃琛屾暟閲忥紙鎺掗櫎鑷韩锛�
         validateDetailQuantityNotExceed(reqVO.getLineId(), reqVO.getQuantity(), reqVO.getId(), line);
 
-        // 鏍规嵁 batchCode 瑙f瀽 batchId锛堝繀椤诲湪娣锋斁瑙勫垯鏍¢獙涔嬪墠锛屽洜涓哄畠渚濊禆 batchId锛�
-        fillBatchId(reqVO);
     }
 
     /**
@@ -173,13 +181,25 @@
     /**
      * 鏍规嵁 batchCode 瑙f瀽骞跺洖濉� batchId
      */
-    private void fillBatchId(MesWmReturnSalesDetailSaveReqVO reqVO) {
-        if (StrUtil.isBlank(reqVO.getBatchCode())) {
-            return;
+    private void fillBatchId(MesWmReturnSalesDetailSaveReqVO reqVO, MesWmReturnSalesLineDO line) {
+        MesWmBatchDO batch = null;
+        if (StrUtil.isNotBlank(reqVO.getBatchCode())) {
+            batch = batchService.getBatchByCode(reqVO.getBatchCode());
+            if (batch == null) throw exception(WM_BATCH_NOT_EXISTS);
+            if (reqVO.getBatchId() != null && ObjUtil.notEqual(batch.getId(), reqVO.getBatchId())) {
+                throw exception(WM_RETURN_SALES_DETAIL_BATCH_MISMATCH);
+            }
+        } else if (reqVO.getBatchId() != null || line.getBatchId() != null) {
+            batch = batchService.validateBatchExists(
+                    reqVO.getBatchId() != null ? reqVO.getBatchId() : line.getBatchId(), reqVO.getItemId());
         }
-        MesWmBatchDO batch = batchService.getBatchByCode(reqVO.getBatchCode());
         if (batch != null) {
+            if (ObjUtil.notEqual(batch.getItemId(), reqVO.getItemId())
+                    || (line.getBatchId() != null && ObjUtil.notEqual(line.getBatchId(), batch.getId()))) {
+                throw exception(WM_RETURN_SALES_DETAIL_BATCH_MISMATCH);
+            }
             reqVO.setBatchId(batch.getId());
+            reqVO.setBatchCode(batch.getCode());
         }
     }
 

--
Gitblit v1.9.3