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