From d54fbc9d4f8981fa0f7f613b33a28a8cd4f764ea Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期日, 25 十月 2026 16:29:53 +0800
Subject: [PATCH] feat(system): 优化用户搜索功能并完善ERP和MES模块验证逻辑

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferServiceImpl.java |   70 ++++++++++++++++++++++++++++++++++-
 1 files changed, 68 insertions(+), 2 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferServiceImpl.java
index 9e40829..fcc21aa 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferServiceImpl.java
@@ -1,15 +1,19 @@
 package cn.iocoder.yudao.module.mes.service.wm.transfer;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferImportExcelVO;
+import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferImportRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferPageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDetailDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferLineDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer.MesWmTransferMapper;
 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
@@ -23,9 +27,12 @@
 import org.springframework.validation.annotation.Validated;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
@@ -189,20 +196,33 @@
         // 2. 閬嶅巻琛屽拰瀵瑰簲鐨勬槑缁嗭紝鍒涘缓浜嬪姟
         for (MesWmTransferLineDO line : lines) {
             List<MesWmTransferDetailDO> details = detailMap.getOrDefault(line.getId(), Collections.emptyList());
+            // 浠� materialStockId 鑾峰彇婧愬簱瀛樹俊鎭紙鍖呮嫭 vendor_id, batch_id 绛夛級
+            Long vendorId = null;
+            String batchCode = null;
+            if (line.getMaterialStockId() != null) {
+                MesWmMaterialStockDO sourceStock = materialStockService.getMaterialStock(line.getMaterialStockId());
+                if (sourceStock != null) {
+                    vendorId = sourceStock.getVendorId();
+                    batchCode = sourceStock.getBatchCode();
+                }
+            }
             for (MesWmTransferDetailDO detail : details) {
                 // 2.1 鍏堟墽琛屽嚭搴擄細璋冩嫧绉诲嚭锛堜粠婧愪粨搴撴墸鍑忓簱瀛橈級锛屽嚭搴撴暟閲忓熀浜庡綋鍓嶆槑缁嗙殑鏁伴噺
                 Long outTransactionId = wmTransactionService.createTransaction(new MesWmTransactionSaveReqDTO()
                         .setType(MesWmTransactionTypeEnum.MOVE_OUT.getType()).setItemId(line.getItemId())
                         .setQuantity(detail.getQuantity().negate()) // 搴撳瓨鍑忓皯锛堟寜 detail 鐨勬暟閲忓嚭锛�
-                        .setBatchId(line.getBatchId())
+                        .setBatchId(line.getBatchId()).setBatchCode(batchCode)
+                        .setVendorId(vendorId)
+                        .setMaterialStockId(line.getMaterialStockId())
                         .setWarehouseId(line.getFromWarehouseId()).setLocationId(line.getFromLocationId()).setAreaId(line.getFromAreaId())
                         .setBizType(MesBizTypeConstants.WM_TRANSFER_OUT).setBizId(transfer.getId())
                         .setBizCode(transfer.getCode()).setBizLineId(line.getId()));
                 // 2.2 鍐嶆墽琛屽叆搴擄細璋冩嫧绉诲叆锛堝悜鐩爣浠撳簱澧炲姞搴撳瓨锛夛紝鍏ュ簱鏁伴噺绛変簬鐩稿悓鏄庣粏鐨勬暟閲�
+                // 娉ㄦ剰锛氬叆搴撴椂涓嶄紶 vendorId锛屼互蹇界暐渚涘簲鍟嗙淮搴︼紝鍚堝苟鍒扮洰鏍囧簱浣嶅凡鏈夊簱瀛�
                 wmTransactionService.createTransaction(new MesWmTransactionSaveReqDTO()
                         .setType(MesWmTransactionTypeEnum.MOVE_IN.getType()).setItemId(line.getItemId()) // 鐗╂枡淇℃伅鏉ヨ嚜 line
                         .setQuantity(detail.getQuantity()) // 搴撳瓨澧炲姞锛堟寜 detail 鐨勬暟閲忓叆锛�
-                        .setBatchId(line.getBatchId()) // 鎵规淇℃伅鏉ヨ嚜 line
+                        .setBatchId(line.getBatchId()).setBatchCode(batchCode) // 鎵规淇℃伅鏉ヨ嚜 line
                         .setWarehouseId(detail.getToWarehouseId()).setLocationId(detail.getToLocationId()).setAreaId(detail.getToAreaId())
                         .setBizType(MesBizTypeConstants.WM_TRANSFER_IN).setBizId(transfer.getId())
                         .setBizCode(transfer.getCode()).setBizLineId(line.getId())
@@ -327,4 +347,50 @@
         transferMapper.updateById(new MesWmTransferDO().setId(id).setStatus(status));
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public MesWmTransferImportRespVO importTransferList(List<MesWmTransferImportExcelVO> importList, boolean updateSupport) {
+        if (CollUtil.isEmpty(importList)) {
+            throw exception(WM_TRANSFER_IMPORT_LIST_IS_EMPTY);
+        }
+        MesWmTransferImportRespVO respVO = MesWmTransferImportRespVO.builder()
+                .createCodes(new ArrayList<>()).updateCodes(new ArrayList<>())
+                .failureCodes(new LinkedHashMap<>()).build();
+        AtomicInteger index = new AtomicInteger(1);
+        importList.forEach(importItem -> {
+            int currentIndex = index.getAndIncrement();
+            String code = importItem.getCode();
+            String key = StrUtil.blankToDefault(code, "绗� " + currentIndex + " 琛�");
+            if (StrUtil.isBlank(code)) {
+                respVO.getFailureCodes().put(key, "鍗曞彿涓嶈兘涓虹┖");
+                return;
+            }
+            if (StrUtil.isBlank(importItem.getName())) {
+                respVO.getFailureCodes().put(key, "鍚嶇О涓嶈兘涓虹┖");
+                return;
+            }
+            MesWmTransferDO existing = transferMapper.selectByCode(code);
+            if (existing != null && updateSupport) {
+                if (!MesWmTransferStatusEnum.PREPARE.getStatus().equals(existing.getStatus())) {
+                    respVO.getFailureCodes().put(key, "鍗曟嵁闈炶崏绋跨姸鎬侊紝涓嶅厑璁歌鐩栨洿鏂�");
+                    return;
+                }
+                MesWmTransferDO updateObj = BeanUtils.toBean(importItem, MesWmTransferDO.class);
+                updateObj.setId(existing.getId());
+                updateObj.setStatus(existing.getStatus());
+                transferMapper.updateById(updateObj);
+                respVO.getUpdateCodes().add(code);
+            } else if (existing != null) {
+                respVO.getFailureCodes().put(key, "鍗曞彿宸插瓨鍦細" + code);
+            } else {
+                MesWmTransferDO createObj = BeanUtils.toBean(importItem, MesWmTransferDO.class);
+                createObj.setId(null);
+                createObj.setStatus(MesWmTransferStatusEnum.PREPARE.getStatus());
+                transferMapper.insert(createObj);
+                respVO.getCreateCodes().add(code);
+            }
+        });
+        return respVO;
+    }
+
 }

--
Gitblit v1.9.3