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