From 795bc269ba9acfae74620059c4ed64bd121aa288 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 22 十月 2026 12:23:00 +0800
Subject: [PATCH] feat(mdm): 打通智能体物料导入端到端链路

---
 yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java |  174 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 98 insertions(+), 76 deletions(-)

diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
index cfbc790..e266489 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
@@ -451,88 +451,18 @@
                 .failureList(new LinkedHashMap<>()).build();
 
         // 1. 棰勭儹锛氬垎绫荤紪鐮� -> ID锛圡ES 鐗╂枡鍒嗙被锛屼笌鐗╂枡琛ㄥ崟涓嬫媺鏁版嵁婧愪竴鑷达級銆佸崟浣嶇紪鐮� -> ID
-        Map<String, Long> categoryCodeIdMap = new HashMap<>();
-        for (String categoryCode : importList.stream()
-                .map(MdmItemImportExcelVO::getCategoryCode).filter(StrUtil::isNotBlank).distinct().toList()) {
-            CommonResult<MesMdItemTypeRespDTO> categoryResult = mesMdItemTypeApi.getItemTypeByCode(categoryCode);
-            if (categoryResult != null && categoryResult.getData() != null) {
-                categoryCodeIdMap.put(categoryCode, categoryResult.getData().getId());
-            }
-        }
-        Map<String, Long> unitCodeIdMap = new HashMap<>();
-        for (MdmUnitMeasureDO unit : unitMeasureMapper.selectList()) {
-            unitCodeIdMap.put(unit.getCode(), unit.getId());
-        }
+        MdmItemImportContext context = buildImportContext(importList);
 
         // 2. 閬嶅巻瀵煎叆锛堟瘡琛屼竴涓嫭绔嬩簨鍔★細鍗曡澶辫触鍙洖婊氳琛岋紝涓嶅奖鍝嶅叾浣欒锛�
         TransactionTemplate importTxTemplate = new TransactionTemplate(transactionManager);
         for (MdmItemImportExcelVO importVO : importList) {
-            // 2.1 鍩虹鏍¢獙
-            if (StrUtil.isBlank(importVO.getCode()) || StrUtil.isBlank(importVO.getName())) {
-                respVO.getFailureList().put(buildFailKey(importVO), "鐗╂枡缂栫爜鍜岀墿鏂欏悕绉颁笉鑳戒负绌�");
+            // 2.1~2.6 鏍¢獙蹇呭~椤广�佽В鏋愬垎绫讳笌鍗曚綅銆佺粍瑁� SaveReqVO
+            MdmItemRowResolution resolution = resolveImportRow(importVO, context);
+            if (!resolution.isSuccess()) {
+                respVO.getFailureList().put(buildFailKey(importVO), resolution.failureMessage());
                 continue;
             }
-            // 2.2 瑙f瀽鍒嗙被
-            Long categoryId = null;
-            if (StrUtil.isNotBlank(importVO.getCategoryCode())) {
-                categoryId = categoryCodeIdMap.get(importVO.getCategoryCode());
-                if (categoryId == null) {
-                    respVO.getFailureList().put(buildFailKey(importVO), "鐗╂枡鍒嗙被缂栫爜涓嶅瓨鍦細" + importVO.getCategoryCode());
-                    continue;
-                }
-            }
-            // 2.3 瑙f瀽涓诲崟浣�
-            Long unitMeasureId = null;
-            if (StrUtil.isNotBlank(importVO.getUnitMeasureCode())) {
-                unitMeasureId = unitCodeIdMap.get(importVO.getUnitMeasureCode());
-                if (unitMeasureId == null) {
-                    respVO.getFailureList().put(buildFailKey(importVO), "璁¢噺鍗曚綅缂栫爜涓嶅瓨鍦細" + importVO.getUnitMeasureCode());
-                    continue;
-                }
-            }
-            // 2.4 瑙f瀽杈呭崟浣�1
-            Long unitMeasureId2 = null;
-            if (StrUtil.isNotBlank(importVO.getUnitMeasureCode2())) {
-                unitMeasureId2 = unitCodeIdMap.get(importVO.getUnitMeasureCode2());
-                if (unitMeasureId2 == null) {
-                    respVO.getFailureList().put(buildFailKey(importVO), "杈呭崟浣�1缂栫爜涓嶅瓨鍦細" + importVO.getUnitMeasureCode2());
-                    continue;
-                }
-            }
-            // 2.5 瑙f瀽杈呭崟浣�2
-            Long unitMeasureId3 = null;
-            if (StrUtil.isNotBlank(importVO.getUnitMeasureCode3())) {
-                unitMeasureId3 = unitCodeIdMap.get(importVO.getUnitMeasureCode3());
-                if (unitMeasureId3 == null) {
-                    respVO.getFailureList().put(buildFailKey(importVO), "杈呭崟浣�2缂栫爜涓嶅瓨鍦細" + importVO.getUnitMeasureCode3());
-                    continue;
-                }
-            }
-
-            // 2.6 缁勮 SaveReqVO锛堝鐢� create/update 閫昏緫锛�
-            MdmItemSaveReqVO saveReqVO = new MdmItemSaveReqVO();
-            saveReqVO.setCode(importVO.getCode());
-            saveReqVO.setName(importVO.getName());
-            saveReqVO.setBarCode(importVO.getBarCode());
-            saveReqVO.setSpecification(importVO.getSpecification());
-            saveReqVO.setCategoryId(categoryId);
-            saveReqVO.setUnitMeasureId(unitMeasureId);
-            saveReqVO.setUnitMeasureId2(unitMeasureId2);
-            saveReqVO.setUnitMeasureRate1(importVO.getUnitMeasureRate1());
-            saveReqVO.setUnitMeasureId3(unitMeasureId3);
-            saveReqVO.setUnitMeasureRate2(importVO.getUnitMeasureRate2());
-            saveReqVO.setPurchasePrice(importVO.getPurchasePrice());
-            saveReqVO.setSalesPrice(importVO.getSalesPrice());
-            saveReqVO.setCostPrice(importVO.getCostPrice());
-            saveReqVO.setSafetyStock(importVO.getSafetyStock());
-            saveReqVO.setMinStock(importVO.getMinStock());
-            saveReqVO.setMaxStock(importVO.getMaxStock());
-            saveReqVO.setIsBatchManaged(importVO.getIsBatchManaged());
-            saveReqVO.setExpiryDay(importVO.getExpiryDay());
-            saveReqVO.setStatus(importVO.getStatus() != null ? importVO.getStatus() : cn.iocoder.yudao.framework.common.enums.CommonStatusEnum.ENABLE.getStatus());
-            saveReqVO.setSyncMes(importVO.getSyncMes() != null ? importVO.getSyncMes() : false);
-            saveReqVO.setRemark(importVO.getRemark());
-            saveReqVO.setItemType(1); // 榛樿鐗╂枡绫诲瀷锛氱墿鏂�
+            MdmItemSaveReqVO saveReqVO = resolution.saveReqVO();
 
             // 2.7 宸插瓨鍦紙鎸夌紪鐮佸垽鏂級
             MdmItemDO existByCode = itemMapper.selectByCode(importVO.getCode());
@@ -574,6 +504,98 @@
         return respVO;
     }
 
+    @Override
+    public MdmItemImportContext buildImportContext(List<MdmItemImportExcelVO> importList) {
+        Map<String, Long> categoryCodeIdMap = new HashMap<>();
+        Map<String, String> categoryCodeNameMap = new HashMap<>();
+        for (String categoryCode : importList.stream()
+                .map(MdmItemImportExcelVO::getCategoryCode).filter(StrUtil::isNotBlank).distinct().toList()) {
+            CommonResult<MesMdItemTypeRespDTO> categoryResult = mesMdItemTypeApi.getItemTypeByCode(categoryCode);
+            if (categoryResult != null && categoryResult.getData() != null) {
+                categoryCodeIdMap.put(categoryCode, categoryResult.getData().getId());
+                categoryCodeNameMap.put(categoryCode, categoryResult.getData().getName());
+            }
+        }
+        Map<String, Long> unitCodeIdMap = new HashMap<>();
+        Map<String, String> unitCodeNameMap = new HashMap<>();
+        for (MdmUnitMeasureDO unit : unitMeasureMapper.selectList()) {
+            unitCodeIdMap.put(unit.getCode(), unit.getId());
+            unitCodeNameMap.put(unit.getCode(), unit.getName());
+        }
+        return new MdmItemImportContext(categoryCodeIdMap, categoryCodeNameMap, unitCodeIdMap, unitCodeNameMap);
+    }
+
+    @Override
+    public MdmItemRowResolution resolveImportRow(MdmItemImportExcelVO importVO, MdmItemImportContext context) {
+        // 鍩虹鏍¢獙
+        if (StrUtil.isBlank(importVO.getCode()) || StrUtil.isBlank(importVO.getName())) {
+            return MdmItemRowResolution.failure("鐗╂枡缂栫爜鍜岀墿鏂欏悕绉颁笉鑳戒负绌�");
+        }
+        // 瑙f瀽鍒嗙被
+        Long categoryId = null;
+        if (StrUtil.isNotBlank(importVO.getCategoryCode())) {
+            categoryId = context.categoryCodeIdMap().get(importVO.getCategoryCode());
+            if (categoryId == null) {
+                return MdmItemRowResolution.failure("鐗╂枡鍒嗙被缂栫爜涓嶅瓨鍦細" + importVO.getCategoryCode());
+            }
+        }
+        // 瑙f瀽涓诲崟浣�
+        Long unitMeasureId = null;
+        if (StrUtil.isNotBlank(importVO.getUnitMeasureCode())) {
+            unitMeasureId = context.unitCodeIdMap().get(importVO.getUnitMeasureCode());
+            if (unitMeasureId == null) {
+                return MdmItemRowResolution.failure("璁¢噺鍗曚綅缂栫爜涓嶅瓨鍦細" + importVO.getUnitMeasureCode());
+            }
+        }
+        // 瑙f瀽杈呭崟浣�1
+        Long unitMeasureId2 = null;
+        if (StrUtil.isNotBlank(importVO.getUnitMeasureCode2())) {
+            unitMeasureId2 = context.unitCodeIdMap().get(importVO.getUnitMeasureCode2());
+            if (unitMeasureId2 == null) {
+                return MdmItemRowResolution.failure("杈呭崟浣�1缂栫爜涓嶅瓨鍦細" + importVO.getUnitMeasureCode2());
+            }
+        }
+        // 瑙f瀽杈呭崟浣�2
+        Long unitMeasureId3 = null;
+        if (StrUtil.isNotBlank(importVO.getUnitMeasureCode3())) {
+            unitMeasureId3 = context.unitCodeIdMap().get(importVO.getUnitMeasureCode3());
+            if (unitMeasureId3 == null) {
+                return MdmItemRowResolution.failure("杈呭崟浣�2缂栫爜涓嶅瓨鍦細" + importVO.getUnitMeasureCode3());
+            }
+        }
+
+        // 缁勮 SaveReqVO锛堝鐢� create/update 閫昏緫锛�
+        MdmItemSaveReqVO saveReqVO = new MdmItemSaveReqVO();
+        saveReqVO.setCode(importVO.getCode());
+        saveReqVO.setName(importVO.getName());
+        saveReqVO.setBarCode(importVO.getBarCode());
+        saveReqVO.setSpecification(importVO.getSpecification());
+        saveReqVO.setCategoryId(categoryId);
+        saveReqVO.setUnitMeasureId(unitMeasureId);
+        saveReqVO.setUnitMeasureId2(unitMeasureId2);
+        saveReqVO.setUnitMeasureRate1(importVO.getUnitMeasureRate1());
+        saveReqVO.setUnitMeasureId3(unitMeasureId3);
+        saveReqVO.setUnitMeasureRate2(importVO.getUnitMeasureRate2());
+        saveReqVO.setPurchasePrice(importVO.getPurchasePrice());
+        saveReqVO.setSalesPrice(importVO.getSalesPrice());
+        saveReqVO.setCostPrice(importVO.getCostPrice());
+        saveReqVO.setSafetyStock(importVO.getSafetyStock());
+        saveReqVO.setMinStock(importVO.getMinStock());
+        saveReqVO.setMaxStock(importVO.getMaxStock());
+        saveReqVO.setIsBatchManaged(importVO.getIsBatchManaged());
+        saveReqVO.setExpiryDay(importVO.getExpiryDay());
+        saveReqVO.setStatus(importVO.getStatus() != null ? importVO.getStatus() : cn.iocoder.yudao.framework.common.enums.CommonStatusEnum.ENABLE.getStatus());
+        saveReqVO.setSyncMes(importVO.getSyncMes() != null ? importVO.getSyncMes() : false);
+        saveReqVO.setRemark(importVO.getRemark());
+        saveReqVO.setItemType(1); // 榛樿鐗╂枡绫诲瀷锛氱墿鏂�
+        return MdmItemRowResolution.success(saveReqVO);
+    }
+
+    @Override
+    public List<MdmItemDO> getItemListByCode(String code) {
+        return itemMapper.selectListByCode(code);
+    }
+
     /**
      * 澶辫触娓呭崟鐨� key锛氱敤銆岀紪鐮� 鍚嶇О銆嶏紝鑰屼笉鏄崟鐢ㄥ悕绉般��
      * 鐗╂枡鍏佽鍚屽悕涓嶅悓缂栫爜鍚庯紝鍙寜鍚嶇О鍋� key 浼氳鍚屽悕琛屼簰鐩歌鐩栥�佸皯鎶ュけ璐ヨ锛�

--
Gitblit v1.9.3