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/productsales/MesWmProductSalesLineServiceImpl.java |   48 ++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java
index 30303e7..e684794 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java
@@ -5,8 +5,10 @@
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.ObjUtil;
 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.productsales.vo.line.MesWmProductSalesLinePageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLineSaveReqVO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesLineDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesLineMapper;
@@ -167,15 +169,45 @@
     }
 
     /**
-     * 鏍规嵁 batchCode 瑙f瀽 batchId
+     * 瑙f瀽骞跺~鍏呮壒娆�
+     *
+     * <p>鍚敤鎵规绠$悊鐨勭墿鏂欏嚭搴撴椂蹇呴』钀芥壒娆★紱鏈褰曟壒娆℃椂鎸夌墿鏂� + 瀹㈡埛 + 閿�鍞鍗曡嚜鍔ㄧ敓鎴愶紝
+     * 渚涘悗缁��璐х瓑涓氬姟杩芥函銆�
      */
-    private void fillBatchId(MesWmProductSalesLineSaveReqVO reqVO) {
-        if (StrUtil.isBlank(reqVO.getBatchCode())) {
+    private void fillBatchId(MesWmProductSalesDO sales, MesMdmItemDO item,
+                             MesWmProductSalesLineSaveReqVO reqVO) {
+        if (StrUtil.isNotBlank(reqVO.getBatchCode())) {
+            MesWmBatchDO batch = batchService.getBatchByCode(reqVO.getBatchCode());
+            if (batch != null) {
+                reqVO.setBatchId(batch.getId());
+                return;
+            }
+            if (!Boolean.TRUE.equals(item.getIsBatchManaged())) {
+                reqVO.setBatchId(null);
+                return;
+            }
+            // 鎸囧畾浜嗘壒娆″彿浣嗙郴缁熶腑涓嶅瓨鍦紝鎸夎鎵规鍙峰缓妗�
+            MesWmBatchDO created = batchService.getOrGenerateBatchCode(buildBatchGenerateReq(sales, reqVO));
+            reqVO.setBatchId(created != null ? created.getId() : null);
+            return;
+        }
+        if (!Boolean.TRUE.equals(item.getIsBatchManaged())) {
             reqVO.setBatchId(null);
             return;
         }
-        MesWmBatchDO batch = batchService.getBatchByCode(reqVO.getBatchCode());
-        reqVO.setBatchId(batch != null ? batch.getId() : null);
+        // 鏈褰曟壒娆★紝鑷姩鐢熸垚
+        MesWmBatchDO batch = batchService.getOrGenerateBatchCode(buildBatchGenerateReq(sales, reqVO));
+        reqVO.setBatchId(batch != null ? batch.getId() : null)
+                .setBatchCode(batch != null ? batch.getCode() : null);
+    }
+
+    private MesWmBatchGenerateReqVO buildBatchGenerateReq(MesWmProductSalesDO sales,
+                                                          MesWmProductSalesLineSaveReqVO reqVO) {
+        return new MesWmBatchGenerateReqVO()
+                .setItemId(reqVO.getItemId())
+                .setBatchCode(reqVO.getBatchCode())
+                .setClientId(sales.getClientId())
+                .setSalesOrderCode(sales.getSalesOrderCode());
     }
 
     /**
@@ -185,11 +217,11 @@
         // 鏍¢獙涓诲崟瀛樺湪涓斾负鑽夌鐘舵��
         MesWmProductSalesDO sales = productSalesService.validateProductSalesExistsAndDraft(reqVO.getSalesId());
         // 鏍¢獙鐗╂枡瀛樺湪
-        mdmItemService.validateItemExistsAndEnable(reqVO.getItemId());
+        MesMdmItemDO item = mdmItemService.validateItemExistsAndEnable(reqVO.getItemId());
         // 鏍¢獙鍏宠仈鍙戣揣閫氱煡鍗曡锛堝瓨鍦ㄦ�� + 褰掑睘 + 瀛楁涓�鑷存�э級
         validateSalesNoticeLine(sales, reqVO);
-        // 鏍规嵁 batchCode 瑙f瀽 batchId
-        fillBatchId(reqVO);
+        // 瑙f瀽鎵规
+        fillBatchId(sales, item, reqVO);
     }
 
     /**

--
Gitblit v1.9.3