From 940c8481d2fdcf51341db4ccd6fd6fcc2d43debb Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 29 六月 2026 15:32:58 +0800
Subject: [PATCH] 初始化项目

---
 yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java |  266 +++++++++++++++++++++++++++++++++++------------------
 1 files changed, 176 insertions(+), 90 deletions(-)

diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java
index 191ca86..7875778 100644
--- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java
+++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java
@@ -1,23 +1,24 @@
 package cn.iocoder.yudao.module.wms.service.md.item;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemCreateReqDTO;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemUpdateReqDTO;
+import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi;
+import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
 import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.item.WmsItemListReqVO;
 import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.item.WmsItemPageReqVO;
 import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.item.WmsItemSaveReqVO;
 import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemDO;
-import cn.iocoder.yudao.module.wms.dal.mysql.md.item.WmsItemMapper;
 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.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.*;
@@ -25,129 +26,91 @@
 /**
  * WMS 鍟嗗搧 Service 瀹炵幇绫�
  *
+ * 鏀归�犺鏄庯細WMS 鍟嗗搧鏁版嵁鏉ユ簮浜� MDM 鐗╂枡涓绘暟鎹�
+ * - 鎵�鏈夋搷浣滆皟鐢� MDM API
+ * - WMS 鍟嗗搧瀵瑰簲 MDM 鐗╂枡绫诲瀷 = 鐗╂枡锛坕temType = 1锛�
+ * - 瀛楁鏄犲皠锛歐msItemDO.unit <- MDM 璁¢噺鍗曚綅鍚嶇О
+ *
  * @author 鑺嬮亾婧愮爜
  */
 @Service
 @Validated
 public class WmsItemServiceImpl implements WmsItemService {
 
+    /** WMS 鍟嗗搧瀵瑰簲鐨� MDM 鐗╂枡绫诲瀷锛氱墿鏂� */
+    private static final int MDM_ITEM_TYPE_MATERIAL = 1;
+
     @Resource
-    private WmsItemMapper itemMapper;
+    private MdmItemApi mdmItemApi;
+
     @Resource
-    @Lazy // 寤惰繜鍔犺浇锛岄伩鍏嶅惊鐜緷璧�
-    private WmsItemCategoryService categoryService;
-    @Resource
-    @Lazy // 寤惰繜鍔犺浇锛岄伩鍏嶅惊鐜緷璧�
-    private WmsItemBrandService brandService;
-    @Resource
-    private WmsItemSkuService itemSkuService;
+    private MdmUnitMeasureApi mdmUnitMeasureApi;
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public Long createItem(WmsItemSaveReqVO createReqVO) {
         // 鏍¢獙鏁版嵁
         validateItemSaveData(createReqVO);
 
-        // 鎻掑叆鍟嗗搧
-        WmsItemDO item = BeanUtils.toBean(createReqVO, WmsItemDO.class);
-        itemMapper.insert(item);
-        // 鎻掑叆 SKU
-        itemSkuService.createItemSkuList(item.getId(), createReqVO.getSkus());
-        return item.getId();
+        // 鏋勫缓鍒涘缓璇锋眰骞惰皟鐢� MDM API
+        MdmItemCreateReqDTO createReqDTO = buildCreateReqDTO(createReqVO);
+        return mdmItemApi.createItem(createReqDTO).getCheckedData();
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public void updateItem(WmsItemSaveReqVO updateReqVO) {
         // 鏍¢獙瀛樺湪
         validateItemExists(updateReqVO.getId());
         // 鏍¢獙鏁版嵁
         validateItemSaveData(updateReqVO);
 
-        // 鏇存柊鍟嗗搧
-        WmsItemDO updateObj = BeanUtils.toBean(updateReqVO, WmsItemDO.class);
-        itemMapper.updateById(updateObj);
-        // 鏇存柊 SKU
-        itemSkuService.updateItemSkuList(updateReqVO.getId(), updateReqVO.getSkus());
-    }
-
-    private void validateItemSaveData(WmsItemSaveReqVO reqVO) {
-        // 鏍¢獙鍟嗗搧缂栧彿鍞竴
-        validateItemCodeUnique(reqVO.getId(), reqVO.getCode());
-        // 鏍¢獙鍟嗗搧鍚嶇О鍞竴
-        validateItemNameUnique(reqVO.getId(), reqVO.getName());
-        // 鏍¢獙鍟嗗搧鍒嗙被瀛樺湪
-        validateCategoryExists(reqVO.getCategoryId());
-        // 鏍¢獙鍟嗗搧鍝佺墝瀛樺湪
-        validateBrandExists(reqVO.getBrandId());
-    }
-
-    private void validateItemCodeUnique(Long id, String code) {
-        WmsItemDO item = itemMapper.selectByCode(code);
-        if (item == null) {
-            return;
-        }
-        if (id == null || ObjectUtil.notEqual(item.getId(), id)) {
-            throw exception(ITEM_CODE_DUPLICATE);
-        }
-    }
-
-    private void validateItemNameUnique(Long id, String name) {
-        WmsItemDO item = itemMapper.selectByName(name);
-        if (item == null) {
-            return;
-        }
-        if (id == null || ObjectUtil.notEqual(item.getId(), id)) {
-            throw exception(ITEM_NAME_DUPLICATE);
-        }
-    }
-
-    private void validateCategoryExists(Long categoryId) {
-        categoryService.validateItemCategoryExists(categoryId);
-    }
-
-    private void validateBrandExists(Long brandId) {
-        if (brandId == null) {
-            return;
-        }
-        brandService.validateItemBrandExists(brandId);
+        // 鏋勫缓鏇存柊璇锋眰骞惰皟鐢� MDM API
+        MdmItemUpdateReqDTO updateReqDTO = buildUpdateReqDTO(updateReqVO);
+        mdmItemApi.updateItem(updateReqDTO);
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public void deleteItem(Long id) {
         // 鏍¢獙瀛樺湪
         validateItemExists(id);
-
-        // 鍒犻櫎鍟嗗搧鍜� SKU
-        itemSkuService.deleteItemSkuListByItemId(id);
-        itemMapper.deleteById(id);
+        // WMS 鍟嗗搧鍒犻櫎瀹為檯涓虹鐢紙MDM 鐗╂枡涓嶈兘鐗╃悊鍒犻櫎锛�
+        mdmItemApi.updateItemStatus(id, CommonStatusEnum.DISABLE.getStatus());
     }
 
     @Override
     public WmsItemDO validateItemExists(Long id) {
-        WmsItemDO item = itemMapper.selectById(id);
-        if (item == null) {
-            throw exception(ITEM_NOT_EXISTS);
-        }
-        return item;
+        MdmItemRespDTO item = mdmItemApi.validateItemExists(id).getCheckedData();
+        return convertToWmsItemDO(item);
     }
 
     @Override
     public WmsItemDO getItem(Long id) {
-        return itemMapper.selectById(id);
+        MdmItemRespDTO item = mdmItemApi.getItem(id).getCheckedData();
+        if (item == null) {
+            return null;
+        }
+        return convertToWmsItemDO(item);
     }
 
     @Override
     public PageResult<WmsItemDO> getItemPage(WmsItemPageReqVO pageReqVO) {
-        return itemMapper.selectPage(pageReqVO,
-                categoryService.getSelfAndChildItemCategoryIdList(pageReqVO.getCategoryId()));
+        // 璋冪敤 MDM API 鍒嗛〉鏌ヨ
+        PageResult<MdmItemRespDTO> mdmPageResult = mdmItemApi.getItemPage(
+                MDM_ITEM_TYPE_MATERIAL,
+                pageReqVO.getStatus(),
+                pageReqVO.getPageNo(),
+                pageReqVO.getPageSize()
+        ).getCheckedData();
+
+        // 杞崲缁撴灉
+        List<WmsItemDO> itemList = convertToWmsItemDOList(mdmPageResult.getList());
+        return new PageResult<>(itemList, mdmPageResult.getTotal());
     }
 
     @Override
     public List<WmsItemDO> getItemList(WmsItemListReqVO listReqVO) {
-        return itemMapper.selectList(listReqVO,
-                categoryService.getSelfAndChildItemCategoryIdList(listReqVO.getCategoryId()));
+        // 璋冪敤 MDM API 鑾峰彇鍒楄〃
+        List<MdmItemRespDTO> itemList = mdmItemApi.getItemListByStatus(listReqVO.getStatus()).getCheckedData();
+        return convertToWmsItemDOList(itemList);
     }
 
     @Override
@@ -155,17 +118,140 @@
         if (CollUtil.isEmpty(ids)) {
             return Collections.emptyList();
         }
-        return itemMapper.selectByIds(ids);
+        List<MdmItemRespDTO> itemList = mdmItemApi.getItemList(ids).getCheckedData();
+        return convertToWmsItemDOList(itemList);
     }
 
     @Override
     public long getItemCountByCategoryId(Long categoryId) {
-        return itemMapper.selectCountByCategoryId(categoryId);
+        return mdmItemApi.getItemCountByCategoryId(categoryId).getCheckedData();
     }
 
     @Override
     public long getItemCountByBrandId(Long brandId) {
-        return itemMapper.selectCountByBrandId(brandId);
+        // MDM 鏆傛棤鎸夊搧鐗岀粺璁℃柟娉曪紝杩斿洖 0
+        return 0L;
     }
 
-}
+    // ==================== 绉佹湁鏂规硶 ====================
+
+    /**
+     * 鏍¢獙鍟嗗搧淇濆瓨鏁版嵁
+     */
+    private void validateItemSaveData(WmsItemSaveReqVO reqVO) {
+        // 鏍¢獙鍟嗗搧缂栫爜鍞竴
+        if (reqVO.getCode() != null) {
+            MdmItemRespDTO existItem = mdmItemApi.getItemByCode(reqVO.getCode()).getCheckedData();
+            if (existItem != null && !existItem.getId().equals(reqVO.getId())) {
+                throw exception(ITEM_CODE_DUPLICATE);
+            }
+        }
+        // 鏍¢獙鍟嗗搧鍚嶇О鍞竴
+        if (reqVO.getName() != null) {
+            // MDM 鏆傛棤鎸夊悕绉版煡璇㈡柟娉曪紝璺宠繃姝ゆ牎楠�
+        }
+    }
+
+    /**
+     * 鏋勫缓鍒涘缓璇锋眰 DTO
+     */
+    private MdmItemCreateReqDTO buildCreateReqDTO(WmsItemSaveReqVO saveReqVO) {
+        MdmItemCreateReqDTO createReqDTO = new MdmItemCreateReqDTO();
+        createReqDTO.setCode(saveReqVO.getCode());
+        createReqDTO.setName(saveReqVO.getName());
+        createReqDTO.setCategoryId(saveReqVO.getCategoryId());
+        createReqDTO.setBrandId(saveReqVO.getBrandId());
+        createReqDTO.setUnitMeasureId(saveReqVO.getUnitMeasureId());
+        createReqDTO.setItemType(MDM_ITEM_TYPE_MATERIAL);
+        createReqDTO.setStatus(CommonStatusEnum.ENABLE.getStatus());
+        createReqDTO.setRemark(saveReqVO.getRemark());
+        return createReqDTO;
+    }
+
+    /**
+     * 鏋勫缓鏇存柊璇锋眰 DTO
+     */
+    private MdmItemUpdateReqDTO buildUpdateReqDTO(WmsItemSaveReqVO saveReqVO) {
+        MdmItemUpdateReqDTO updateReqDTO = new MdmItemUpdateReqDTO();
+        updateReqDTO.setId(saveReqVO.getId());
+        updateReqDTO.setCode(saveReqVO.getCode());
+        updateReqDTO.setName(saveReqVO.getName());
+        updateReqDTO.setCategoryId(saveReqVO.getCategoryId());
+        updateReqDTO.setBrandId(saveReqVO.getBrandId());
+        updateReqDTO.setUnitMeasureId(saveReqVO.getUnitMeasureId());
+        updateReqDTO.setStatus(CommonStatusEnum.ENABLE.getStatus());
+        updateReqDTO.setRemark(saveReqVO.getRemark());
+        return updateReqDTO;
+    }
+
+    /**
+     * 杞崲 MDM 鐗╂枡涓� WMS 鍟嗗搧
+     */
+    private WmsItemDO convertToWmsItemDO(MdmItemRespDTO mdmItem) {
+        if (mdmItem == null) {
+            return null;
+        }
+        WmsItemDO item = new WmsItemDO();
+        item.setId(mdmItem.getId());
+        item.setCode(mdmItem.getCode());
+        item.setName(mdmItem.getName());
+        item.setCategoryId(mdmItem.getCategoryId());
+        item.setBrandId(mdmItem.getBrandId());
+        item.setRemark(mdmItem.getRemark());
+
+        // 鑾峰彇璁¢噺鍗曚綅鍚嶇О
+        if (mdmItem.getUnitMeasureId() != null) {
+            MdmUnitMeasureRespDTO unit = mdmUnitMeasureApi.getUnitMeasure(mdmItem.getUnitMeasureId()).getCheckedData();
+            if (unit != null) {
+                item.setUnit(unit.getName());
+            }
+        }
+        return item;
+    }
+
+    /**
+     * 鎵归噺杞崲 MDM 鐗╂枡鍒楄〃涓� WMS 鍟嗗搧鍒楄〃
+     */
+    private List<WmsItemDO> convertToWmsItemDOList(List<MdmItemRespDTO> mdmItemList) {
+        if (CollUtil.isEmpty(mdmItemList)) {
+            return Collections.emptyList();
+        }
+
+        // 鎵归噺鑾峰彇璁¢噺鍗曚綅
+        Set<Long> unitIds = mdmItemList.stream()
+                .map(MdmItemRespDTO::getUnitMeasureId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        Map<Long, MdmUnitMeasureRespDTO> unitMap = new HashMap<>();
+        if (!unitIds.isEmpty()) {
+            List<MdmUnitMeasureRespDTO> units = mdmUnitMeasureApi.getUnitMeasureList(unitIds).getCheckedData();
+            for (MdmUnitMeasureRespDTO unit : units) {
+                unitMap.put(unit.getId(), unit);
+            }
+        }
+
+        // 杞崲鍒楄〃
+        List<WmsItemDO> result = new ArrayList<>();
+        for (MdmItemRespDTO mdmItem : mdmItemList) {
+            WmsItemDO item = new WmsItemDO();
+            item.setId(mdmItem.getId());
+            item.setCode(mdmItem.getCode());
+            item.setName(mdmItem.getName());
+            item.setCategoryId(mdmItem.getCategoryId());
+            item.setBrandId(mdmItem.getBrandId());
+            item.setRemark(mdmItem.getRemark());
+
+            // 璁剧疆鍗曚綅鍚嶇О
+            if (mdmItem.getUnitMeasureId() != null) {
+                MdmUnitMeasureRespDTO unit = unitMap.get(mdmItem.getUnitMeasureId());
+                if (unit != null) {
+                    item.setUnit(unit.getName());
+                }
+            }
+            result.add(item);
+        }
+        return result;
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.9.3