From 6b5f7c66fc40d7f6099d561e31a34fbd50dd20d3 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 01 七月 2026 15:54:57 +0800
Subject: [PATCH] 初始化项目

---
 yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java |  306 +++++++++++++++++++++++---------------------------
 1 files changed, 142 insertions(+), 164 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 7875778..5ded7db 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,24 +1,27 @@
 package cn.iocoder.yudao.module.wms.service.md.item;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.hutool.core.util.ObjectUtil;
 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.mdm.enums.MdmItemTypeEnum;
 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.*;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.*;
@@ -26,10 +29,8 @@
 /**
  * WMS 鍟嗗搧 Service 瀹炵幇绫�
  *
- * 鏀归�犺鏄庯細WMS 鍟嗗搧鏁版嵁鏉ユ簮浜� MDM 鐗╂枡涓绘暟鎹�
- * - 鎵�鏈夋搷浣滆皟鐢� MDM API
- * - WMS 鍟嗗搧瀵瑰簲 MDM 鐗╂枡绫诲瀷 = 鐗╂枡锛坕temType = 1锛�
- * - 瀛楁鏄犲皠锛歐msItemDO.unit <- MDM 璁¢噺鍗曚綅鍚嶇О
+ * 鏀归�犺鏄庯細鍟嗗搧鍩虹鏁版嵁浠� MDM 妯″潡鑾峰彇锛坕temType=1 鐗╂枡绫诲瀷锛�
+ * WMS 鐗规湁鍔熻兘锛圫KU銆佸簱瀛樼瓑锛変粛淇濈暀 WMS 绠$悊
  *
  * @author 鑺嬮亾婧愮爜
  */
@@ -37,80 +38,155 @@
 @Validated
 public class WmsItemServiceImpl implements WmsItemService {
 
-    /** WMS 鍟嗗搧瀵瑰簲鐨� MDM 鐗╂枡绫诲瀷锛氱墿鏂� */
-    private static final int MDM_ITEM_TYPE_MATERIAL = 1;
+    @Resource
+    private WmsItemMapper itemMapper;
 
     @Resource
     private MdmItemApi mdmItemApi;
 
     @Resource
-    private MdmUnitMeasureApi mdmUnitMeasureApi;
+    @Lazy // 寤惰繜鍔犺浇锛岄伩鍏嶅惊鐜緷璧�
+    private WmsItemCategoryService categoryService;
+    @Resource
+    @Lazy // 寤惰繜鍔犺浇锛岄伩鍏嶅惊鐜緷璧�
+    private WmsItemBrandService brandService;
+    @Resource
+    private WmsItemSkuService itemSkuService;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Long createItem(WmsItemSaveReqVO createReqVO) {
         // 鏍¢獙鏁版嵁
         validateItemSaveData(createReqVO);
 
-        // 鏋勫缓鍒涘缓璇锋眰骞惰皟鐢� MDM API
-        MdmItemCreateReqDTO createReqDTO = buildCreateReqDTO(createReqVO);
-        return mdmItemApi.createItem(createReqDTO).getCheckedData();
+        // 鎻掑叆鍟嗗搧锛堟殏鏃朵繚鐣欏師閫昏緫锛屽悗缁彲瀹屽叏杩佺Щ鍒� MDM锛�
+        WmsItemDO item = BeanUtils.toBean(createReqVO, WmsItemDO.class);
+        itemMapper.insert(item);
+        // 鎻掑叆 SKU
+        itemSkuService.createItemSkuList(item.getId(), createReqVO.getSkus());
+        return item.getId();
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateItem(WmsItemSaveReqVO updateReqVO) {
         // 鏍¢獙瀛樺湪
         validateItemExists(updateReqVO.getId());
         // 鏍¢獙鏁版嵁
         validateItemSaveData(updateReqVO);
 
-        // 鏋勫缓鏇存柊璇锋眰骞惰皟鐢� MDM API
-        MdmItemUpdateReqDTO updateReqDTO = buildUpdateReqDTO(updateReqVO);
-        mdmItemApi.updateItem(updateReqDTO);
+        // 鏇存柊鍟嗗搧锛堟殏鏃朵繚鐣欏師閫昏緫锛�
+        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) {
+        // 妫�鏌� MDM 涓紪鐮佸敮涓�鎬�
+        MdmItemRespDTO item = mdmItemApi.getItemByCode(code).getCheckedData();
+        if (item != 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);
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void deleteItem(Long id) {
         // 鏍¢獙瀛樺湪
         validateItemExists(id);
-        // WMS 鍟嗗搧鍒犻櫎瀹為檯涓虹鐢紙MDM 鐗╂枡涓嶈兘鐗╃悊鍒犻櫎锛�
-        mdmItemApi.updateItemStatus(id, CommonStatusEnum.DISABLE.getStatus());
+
+        // 鍒犻櫎鍟嗗搧鍜� SKU
+        itemSkuService.deleteItemSkuListByItemId(id);
+        itemMapper.deleteById(id);
     }
 
     @Override
     public WmsItemDO validateItemExists(Long id) {
+        // 浠� MDM 鏍¢獙鐗╂枡瀛樺湪
         MdmItemRespDTO item = mdmItemApi.validateItemExists(id).getCheckedData();
-        return convertToWmsItemDO(item);
+        if (item == null) {
+            // 濡傛灉 MDM 涓笉瀛樺湪锛屾鏌ユ湰鍦拌〃
+            WmsItemDO localItem = itemMapper.selectById(id);
+            if (localItem == null) {
+                throw exception(ITEM_NOT_EXISTS);
+            }
+            return localItem;
+        }
+        return convertToWmsItem(item);
     }
 
     @Override
     public WmsItemDO getItem(Long id) {
+        // 浠� MDM 鑾峰彇鐗╂枡鏁版嵁锛堟敞鎰� WMS ID 鍋忕Щ 30000锛�
         MdmItemRespDTO item = mdmItemApi.getItem(id).getCheckedData();
         if (item == null) {
-            return null;
+            // 濡傛灉 MDM 涓笉瀛樺湪锛屾煡璇㈡湰鍦拌〃
+            return itemMapper.selectById(id);
         }
-        return convertToWmsItemDO(item);
+        return convertToWmsItem(item);
     }
 
     @Override
     public PageResult<WmsItemDO> getItemPage(WmsItemPageReqVO pageReqVO) {
-        // 璋冪敤 MDM API 鍒嗛〉鏌ヨ
-        PageResult<MdmItemRespDTO> mdmPageResult = mdmItemApi.getItemPage(
-                MDM_ITEM_TYPE_MATERIAL,
-                pageReqVO.getStatus(),
-                pageReqVO.getPageNo(),
-                pageReqVO.getPageSize()
-        ).getCheckedData();
+        // 浠� MDM 鑾峰彇鐗╂枡鍒嗛〉鏁版嵁锛坕temType=1 鐗╂枡绫诲瀷锛�
+        cn.iocoder.yudao.framework.common.pojo.PageResult<MdmItemRespDTO> mdmPageResult =
+                mdmItemApi.getItemPage(MdmItemTypeEnum.MATERIAL.getType(), null,
+                        pageReqVO.getPageNo(), pageReqVO.getPageSize()).getCheckedData();
 
-        // 杞崲缁撴灉
-        List<WmsItemDO> itemList = convertToWmsItemDOList(mdmPageResult.getList());
-        return new PageResult<>(itemList, mdmPageResult.getTotal());
+        // 杞崲涓� WMS 鍟嗗搧 DO
+        List<WmsItemDO> list = new ArrayList<>();
+        for (MdmItemRespDTO item : mdmPageResult.getList()) {
+            list.add(convertToWmsItem(item));
+        }
+        return new PageResult<>(list, mdmPageResult.getTotal());
     }
 
     @Override
     public List<WmsItemDO> getItemList(WmsItemListReqVO listReqVO) {
-        // 璋冪敤 MDM API 鑾峰彇鍒楄〃
-        List<MdmItemRespDTO> itemList = mdmItemApi.getItemListByStatus(listReqVO.getStatus()).getCheckedData();
-        return convertToWmsItemDOList(itemList);
+        // 浠� MDM 鑾峰彇鐗╂枡鍒楄〃锛坕temType=1 鐗╂枡绫诲瀷锛�
+        List<MdmItemRespDTO> items = mdmItemApi.getItemListByStatus(null).getCheckedData();
+
+        List<WmsItemDO> result = new ArrayList<>();
+        for (MdmItemRespDTO item : items) {
+            // 鍙繑鍥炵墿鏂欑被鍨�
+            if (MdmItemTypeEnum.MATERIAL.getType().equals(item.getItemType())) {
+                result.add(convertToWmsItem(item));
+            }
+        }
+        return result;
     }
 
     @Override
@@ -118,140 +194,42 @@
         if (CollUtil.isEmpty(ids)) {
             return Collections.emptyList();
         }
-        List<MdmItemRespDTO> itemList = mdmItemApi.getItemList(ids).getCheckedData();
-        return convertToWmsItemDOList(itemList);
+        // 浠� MDM 鑾峰彇鐗╂枡鍒楄〃
+        List<MdmItemRespDTO> items = mdmItemApi.getItemList(ids).getCheckedData();
+        List<WmsItemDO> result = new ArrayList<>();
+        for (MdmItemRespDTO item : items) {
+            result.add(convertToWmsItem(item));
+        }
+        return result;
+    }
+
+    /**
+     * 灏� MDM 鐗╂枡杞崲涓� WMS 鍟嗗搧 DO
+     */
+    private WmsItemDO convertToWmsItem(MdmItemRespDTO item) {
+        WmsItemDO wmsItem = new WmsItemDO();
+        wmsItem.setId(item.getId());
+        wmsItem.setCode(item.getCode());
+        wmsItem.setName(item.getName());
+        // MDM categoryId 鏄犲皠鍒� WMS categoryId锛堟敞鎰� ID 鍋忕Щ锛�
+        wmsItem.setCategoryId(item.getCategoryId() != null ? item.getCategoryId() - 20000 : null);
+        wmsItem.setBrandId(item.getBrandId());
+        // 鍗曚綅鍚嶇О闇�瑕佷粠 MDM 鍗曚綅琛ㄨ幏鍙栵紝杩欓噷鏆傛椂鐣欑┖
+        wmsItem.setRemark(item.getRemark());
+        return wmsItem;
     }
 
     @Override
     public long getItemCountByCategoryId(Long categoryId) {
-        return mdmItemApi.getItemCountByCategoryId(categoryId).getCheckedData();
+        // 浠� MDM 鑾峰彇鍒嗙被鐗╂枡鏁伴噺锛堟敞鎰� ID 鍋忕Щ锛�
+        return mdmItemApi.getItemCountByCategoryId(categoryId + 20000).getCheckedData();
     }
 
     @Override
     public long getItemCountByBrandId(Long 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;
+        // 浠� MDM 鑾峰彇鍝佺墝鐗╂枡鏁伴噺
+        // 娉ㄦ剰锛歁DM 鐩墠娌℃湁鎸夊搧鐗岀粺璁$殑 API锛屾殏鏃惰繑鍥炴湰鍦版暟鎹�
+        return itemMapper.selectCountByBrandId(brandId);
     }
 
 }
\ No newline at end of file

--
Gitblit v1.9.3