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/md/item/MesMdItemTypeServiceImpl.java |   69 ++++++++++++++++++++++++++++++++++
 1 files changed, 69 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemTypeServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemTypeServiceImpl.java
index ab5b7a2..fee17b9 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemTypeServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemTypeServiceImpl.java
@@ -2,10 +2,14 @@
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.mdm.api.category.MdmItemCategoryApi;
 import cn.iocoder.yudao.module.mdm.api.category.dto.MdmItemCategoryRespDTO;
+import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.type.MesMdItemTypeImportExcelVO;
+import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.type.MesMdItemTypeImportRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.type.MesMdItemTypeListReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.type.MesMdItemTypeSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemTypeDO;
@@ -13,9 +17,11 @@
 import jakarta.annotation.Resource;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
@@ -230,4 +236,67 @@
         return mesDO;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public MesMdItemTypeImportRespVO importItemTypeList(List<MesMdItemTypeImportExcelVO> importItemTypeList,
+                                                        boolean updateSupport) {
+        // 1. 鏍¢獙闈炵┖
+        if (CollUtil.isEmpty(importItemTypeList)) {
+            throw exception(MD_ITEM_TYPE_IMPORT_LIST_IS_EMPTY);
+        }
+
+        // 2. 閫愯澶勭悊
+        MesMdItemTypeImportRespVO respVO = MesMdItemTypeImportRespVO.builder()
+                .createCodes(new ArrayList<>()).updateCodes(new ArrayList<>())
+                .failureCodes(new LinkedHashMap<>()).build();
+        AtomicInteger index = new AtomicInteger(1);
+        importItemTypeList.forEach(importItem -> {
+            int currentIndex = index.getAndIncrement();
+            String key = StrUtil.blankToDefault(importItem.getCode(), "绗� " + currentIndex + " 琛�");
+            if (StrUtil.isBlank(importItem.getCode())) {
+                respVO.getFailureCodes().put(key, "鍒嗙被缂栫爜涓嶈兘涓虹┖");
+                return;
+            }
+            if (StrUtil.isBlank(importItem.getName())) {
+                respVO.getFailureCodes().put(key, "鍒嗙被鍚嶇О涓嶈兘涓虹┖");
+                return;
+            }
+            if (StrUtil.isBlank(importItem.getItemOrProduct())) {
+                respVO.getFailureCodes().put(key, "鐗╂枡/浜у搧鏍囪瘑涓嶈兘涓虹┖");
+                return;
+            }
+            // 2.1 瑙f瀽鐖跺垎绫伙紙涓虹┖鍒欓粯璁や负鏍瑰垎绫伙級
+            Long parentId = MesMdItemTypeDO.PARENT_ID_ROOT;
+            if (StrUtil.isNotBlank(importItem.getParentCode())) {
+                MesMdItemTypeDO parentItemType = itemTypeMapper.selectByCode(importItem.getParentCode());
+                if (parentItemType == null) {
+                    respVO.getFailureCodes().put(key, "鐖跺垎绫荤紪鐮乕" + importItem.getParentCode() + "]涓嶅瓨鍦�");
+                    return;
+                }
+                parentId = parentItemType.getId();
+            }
+            // 2.2 鍒ゆ柇鏄惁瀛樺湪锛堝悓涓�鐖跺垎绫讳笅缂栫爜鍞竴锛�
+            MesMdItemTypeDO existItemType = itemTypeMapper.selectByParentIdAndCode(parentId, importItem.getCode());
+            if (existItemType == null) {
+                // 2.2.1 鏂板
+                MesMdItemTypeDO itemType = BeanUtils.toBean(importItem, MesMdItemTypeDO.class);
+                itemType.setParentId(parentId);
+                itemType.setSort(ObjUtil.defaultIfNull(importItem.getSort(), 0));
+                itemType.setStatus(ObjUtil.defaultIfNull(importItem.getStatus(), CommonStatusEnum.ENABLE.getStatus()));
+                itemTypeMapper.insert(itemType);
+                respVO.getCreateCodes().add(importItem.getCode());
+            } else if (updateSupport) {
+                // 2.2.2 鏇存柊
+                MesMdItemTypeDO updateObj = BeanUtils.toBean(importItem, MesMdItemTypeDO.class);
+                updateObj.setId(existItemType.getId());
+                updateObj.setParentId(parentId);
+                itemTypeMapper.updateById(updateObj);
+                respVO.getUpdateCodes().add(importItem.getCode());
+            } else {
+                respVO.getFailureCodes().put(key, "鍒嗙被缂栫爜宸插瓨鍦�");
+            }
+        });
+        return respVO;
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.3