From bb1210d95ccd0216ff8a352238f0ee25754a2ef2 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 04 八月 2026 09:37:29 +0800
Subject: [PATCH] fix(crm): 修复权限切面中的空指针异常

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java |  127 ++++++++++--------------------------------
 1 files changed, 31 insertions(+), 96 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java
index 1102aef..fcefee0 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java
@@ -2,12 +2,8 @@
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.MesMdItemImportExcelVO;
-import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.MesMdItemImportRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.MesMdItemPageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.MesMdItemSaveReqVO;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
@@ -17,7 +13,7 @@
 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.md.item.MesMdItemMapper;
 import cn.iocoder.yudao.module.mes.enums.md.MesMdItemTypeEnum;
-import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
+
 import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum;
 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
 import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
@@ -31,7 +27,6 @@
 
 import java.math.BigDecimal;
 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.framework.common.util.collection.CollectionUtils.convertSet;
@@ -76,6 +71,16 @@
     public Long createItem(MesMdItemSaveReqVO createReqVO) {
         // 鏍¢獙鏁版嵁
         validateItemSaveData(createReqVO);
+
+        // 濡傛灉鎸囧畾浜� ID锛屾鏌ヨ ID 鏄惁宸插瓨鍦紙鐢ㄤ簬 MDM 鍚屾鏃朵繚鎸� ID 涓�鑷达級
+        if (createReqVO.getId() != null) {
+            MesMdItemDO existItem = itemMapper.selectById(createReqVO.getId());
+            if (existItem != null) {
+                // ID 宸插瓨鍦紝杞负鏇存柊
+                updateItem(createReqVO);
+                return createReqVO.getId();
+            }
+        }
 
         // 鎻掑叆
         MesMdItemDO item = BeanUtils.toBean(createReqVO, MesMdItemDO.class);
@@ -300,94 +305,6 @@
         return itemMapper.selectCountByUnitMeasureId(unitMeasureId);
     }
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public MesMdItemImportRespVO importItemList(List<MesMdItemImportExcelVO> importItems, boolean updateSupport) {
-        // 1. 鍙傛暟鏍¢獙
-        if (CollUtil.isEmpty(importItems)) {
-            throw exception(MD_ITEM_IMPORT_LIST_IS_EMPTY);
-        }
-
-        // 2. 閬嶅巻锛岄�愪釜鍒涘缓 or 鏇存柊
-        MesMdItemImportRespVO respVO = MesMdItemImportRespVO.builder()
-                .createCodes(new ArrayList<>()).updateCodes(new ArrayList<>())
-                .failureCodes(new LinkedHashMap<>()).build();
-        AtomicInteger index = new AtomicInteger(1);
-        importItems.forEach(importItem -> {
-            int currentIndex = index.getAndIncrement();
-            // 2.1 鏍¢獙瀛楁
-            if (StrUtil.isBlank(importItem.getCode())) {
-                // 绌虹紪鐮佹椂鑷姩鐢熸垚
-                importItem.setCode(autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.MD_ITEM_CODE.getCode()));
-            }
-            String key = importItem.getCode();
-            if (StrUtil.isBlank(importItem.getName())) {
-                respVO.getFailureCodes().put(key, "鐗╂枡鍚嶇О涓嶈兘涓虹┖");
-                return;
-            }
-            if (StrUtil.isBlank(importItem.getUnitMeasureCode())) {
-                respVO.getFailureCodes().put(key, "鍗曚綅缂栫爜涓嶈兘涓虹┖");
-                return;
-            }
-            // 灏嗗崟浣嶇紪鐮佽浆鎹负鍗曚綅 ID
-            MesMdUnitMeasureDO unitMeasure = unitMeasureService.getUnitMeasureByCode(importItem.getUnitMeasureCode());
-            if (unitMeasure == null) {
-                respVO.getFailureCodes().put(key, "鍗曚綅缂栫爜[" + importItem.getUnitMeasureCode() + "]涓嶅瓨鍦�");
-                return;
-            }
-            if (importItem.getItemTypeId() == null) {
-                respVO.getFailureCodes().put(key, "鐗╂枡鍒嗙被缂栧彿涓嶈兘涓虹┖");
-                return;
-            }
-            // 2.2 鏍¢獙鍒嗙被鏄惁瀛樺湪
-            try {
-                validateItemTypeExists(importItem.getItemTypeId());
-            } catch (ServiceException ex) {
-                respVO.getFailureCodes().put(key, ex.getMessage());
-                return;
-            }
-
-            // 2.3 鍒ゆ柇锛氬垱寤� or 鏇存柊
-            MesMdItemDO existItem = itemMapper.selectByCode(importItem.getCode());
-            if (existItem == null) {
-                // 2.3.1 鍒涘缓
-                try {
-                    validateItemNameUnique(null, importItem.getName());
-                } catch (ServiceException ex) {
-                    respVO.getFailureCodes().put(key, ex.getMessage());
-                    return;
-                }
-                MesMdItemDO item = BeanUtils.toBean(importItem, MesMdItemDO.class);
-                item.setUnitMeasureId(unitMeasure.getId());
-                item.setStatus(CommonStatusEnum.DISABLE.getStatus()); // 榛樿绂佺敤銆備俊鎭畬鎴愬悗锛屽啀鍚敤
-                clearStockIfNotSafe(item);
-                itemMapper.insert(item);
-                // 鑷姩鐢熸垚鏉$爜
-                barcodeService.autoGenerateBarcode(BarcodeBizTypeEnum.ITEM.getValue(),
-                        item.getId(), item.getCode(), item.getName());
-                respVO.getCreateCodes().add(importItem.getCode());
-            } else if (updateSupport) {
-                // 2.3.2 鏇存柊
-                try {
-                    validateItemNameUnique(existItem.getId(), importItem.getName());
-                } catch (ServiceException ex) {
-                    respVO.getFailureCodes().put(key, ex.getMessage());
-                    return;
-                }
-                MesMdItemDO updateObj = BeanUtils.toBean(importItem, MesMdItemDO.class);
-                updateObj.setId(existItem.getId());
-                updateObj.setUnitMeasureId(unitMeasure.getId());
-                clearStockIfNotSafe(updateObj);
-                itemMapper.updateById(updateObj);
-                respVO.getUpdateCodes().add(importItem.getCode());
-            } else {
-                // 涓嶆敮鎸佹洿鏂�
-                respVO.getFailureCodes().put(key, "鐗╂枡缂栫爜宸插瓨鍦�");
-            }
-        });
-        return respVO;
-    }
-
     /**
      * 鍚屾鐗╂枡鍒� MDM
      *
@@ -396,12 +313,13 @@
      */
     private void syncItemToMdm(MesMdItemDO item, MesMdItemSaveReqVO saveReqVO) {
         // 1. 鑾峰彇鐗╂枡绫诲瀷瀵瑰簲鐨� itemType
-        Integer itemType = null;
+        Long itemType = null;
         if (item.getItemTypeId() != null) {
             MesMdItemTypeDO itemTypeDO = itemTypeService.getItemType(item.getItemTypeId());
             if (itemTypeDO != null) {
                 // MES: ITEM=鐗╂枡, PRODUCT=浜у搧 -> MDM: 1=鍘熸枡, 2=鍗婃垚鍝�, 3=鎴愬搧, 4=杈呮枡
-                itemType = convertMesItemTypeToMdm(itemTypeDO.getItemOrProduct(), itemTypeDO.getName());
+//                itemType = convertMesItemTypeToMdm(itemTypeDO.getItemOrProduct(), itemTypeDO.getName());
+                itemType = itemTypeDO.getId();
             }
         }
 
@@ -477,4 +395,21 @@
         return 1; // 榛樿鍘熸枡
     }
 
+    @Override
+    public MesMdItemDO getItemByMdmItemId(Long mdmItemId) {
+        if (mdmItemId == null) {
+            return null;
+        }
+        return itemMapper.selectByMdmItemId(mdmItemId);
+    }
+
+    @Override
+    public MesMdItemDO validateItemExistsByMdmItemId(Long mdmItemId) {
+        MesMdItemDO item = getItemByMdmItemId(mdmItemId);
+        if (item == null) {
+            throw exception(MD_ITEM_NOT_EXISTS);
+        }
+        return item;
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.3