From 05ab6e3f69a5e73624b2573db043f5923e8f7d8b Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期四, 05 十一月 2026 14:17:19 +0800
Subject: [PATCH] fix 修复bug
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java | 366 +++++++++++++++++++++++++++++++++++-----------------
1 files changed, 246 insertions(+), 120 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 7585be0..0ad9119 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
@@ -3,11 +3,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.mdm.api.item.MdmItemApi;
-import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
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;
@@ -18,12 +15,15 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemTypeDO;
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.controller.admin.md.item.vo.type.MesMdItemTypeListReqVO;
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;
import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemSyncApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemSyncReqDTO;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -31,7 +31,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;
@@ -40,11 +39,9 @@
/**
* MES 鐗╂枡浜у搧 Service 瀹炵幇绫�
*
- * 鏀归�犺鏄庯細MES 鐗╂枡涓绘暟鎹潵婧愪簬 MDM
- * - getItem/getItemList/validateItemExists 璋冪敤 MDM API
- * - MES 鐗规湁閰嶇疆锛堟壒娆¢厤缃�丅OM銆丼OP銆丼IP锛変繚鐣欏湪 MES 妯″潡绠$悊
+ * 鏀寔 MES 鍜� MDM 鐗╂枡鏁版嵁鍙屽悜鍚屾
*
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
*/
@Service
@Validated
@@ -52,9 +49,6 @@
@Resource
private MesMdItemMapper itemMapper;
-
- @Resource
- private MdmItemApi mdmItemApi;
@Resource
private MesMdItemTypeService itemTypeService;
@@ -73,24 +67,53 @@
@Resource
private MesMdAutoCodeRecordService autoCodeRecordService;
+ @Resource
+ private MdmItemSyncApi mdmItemSyncApi;
+
@Override
+ @Transactional(rollbackFor = Exception.class)
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();
+ }
+ // 瀛樺湪閫昏緫鍒犻櫎璁板綍锛堝彇娑堝悓姝ュ悗閲嶆柊鍚屾锛夛細鎭㈠璇ヨ褰曞悗璧版洿鏂帮紝閬垮厤涓婚敭鍐茬獊
+ if (itemMapper.selectAnyById(createReqVO.getId()) != null) {
+ itemMapper.restoreById(createReqVO.getId());
+ updateItem(createReqVO);
+ return createReqVO.getId();
+ }
+ }
+
// 鎻掑叆
MesMdItemDO item = BeanUtils.toBean(createReqVO, MesMdItemDO.class);
- item.setStatus(CommonStatusEnum.DISABLE.getStatus()); // 榛樿绂佺敤銆備俊鎭畬鎴愬悗锛屽啀鍚敤
+ // 鐘舵�佸彧鑳界敱鍩虹鏁版嵁锛圡DM锛夋帶鍒讹細MDM 鍚屾鏃舵部鐢ㄥ叾鐘舵�侊紱MES 鏈湴鏂板榛樿绂佺敤
+ item.setStatus(createReqVO.getMdmItemId() != null && createReqVO.getStatus() != null
+ ? createReqVO.getStatus() : CommonStatusEnum.DISABLE.getStatus());
clearStockIfNotSafe(item); // 濡傛灉鏈惎鐢ㄥ畨鍏ㄥ簱瀛橈紝娓呴浂搴撳瓨涓婁笅闄�
itemMapper.insert(item);
// 鑷姩鐢熸垚鏉$爜
barcodeService.autoGenerateBarcode(BarcodeBizTypeEnum.ITEM.getValue(),
item.getId(), item.getCode(), item.getName());
+
+ // 鍚屾鍒� MDM锛堝嬀閫� syncMdm 鏃讹級
+ if (Boolean.TRUE.equals(createReqVO.getSyncMdm())) {
+ syncItemToMdm(item, createReqVO);
+ }
+
return item.getId();
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public void updateItem(MesMdItemSaveReqVO updateReqVO) {
// 鏍¢獙瀛樺湪
validateItemExists(updateReqVO.getId());
@@ -100,14 +123,23 @@
// 鏇存柊
MesMdItemDO updateObj = BeanUtils.toBean(updateReqVO, MesMdItemDO.class);
clearStockIfNotSafe(updateObj); // 濡傛灉鏈惎鐢ㄥ畨鍏ㄥ簱瀛橈紝娓呴浂搴撳瓨涓婁笅闄�
+ // 鐘舵�佸彧鑳界敱鍩虹鏁版嵁锛圡DM锛夋帶鍒讹紝MES 鏈湴鏇存柊涓嶅厑璁镐慨鏀圭姸鎬�
+ if (updateReqVO.getMdmItemId() == null) {
+ updateObj.setStatus(null);
+ }
itemMapper.updateById(updateObj);
+
+ // 鍚屾鍒� MDM锛堝嬀閫� syncMdm 鏃讹級
+ if (Boolean.TRUE.equals(updateReqVO.getSyncMdm())) {
+ MesMdItemDO item = itemMapper.selectById(updateReqVO.getId());
+ syncItemToMdm(item, updateReqVO);
+ }
}
private void validateItemSaveData(MesMdItemSaveReqVO reqVO) {
// 鏍¢獙鐗╂枡缂栫爜鐨勫敮涓�鎬�
validateItemCodeUnique(reqVO.getId(), reqVO.getCode());
- // 鏍¢獙鐗╂枡鍚嶇О鐨勫敮涓�鎬�
- validateItemNameUnique(reqVO.getId(), reqVO.getName());
+ // 涓嶅啀鏍¢獙鐗╂枡鍚嶇О鐨勫敮涓�鎬э細鍏佽鍚屽悕涓嶅悓缂栫爜鐨勭墿鏂欙紙涓� MDM 鐗╂枡瑙勫垯淇濇寔涓�鑷达級
// 鏍¢獙鐗╂枡鍒嗙被瀛樺湪
validateItemTypeExists(reqVO.getItemTypeId());
// 鏍¢獙璁¢噺鍗曚綅瀛樺湪
@@ -156,14 +188,20 @@
@Override
public MesMdItemDO validateItemExists(Long id) {
- MdmItemRespDTO item = mdmItemApi.validateItemExists(id).getCheckedData();
- return BeanUtils.toBean(item, MesMdItemDO.class);
+ MesMdItemDO item = itemMapper.selectById(id);
+ if (item == null) {
+ throw exception(MD_ITEM_NOT_EXISTS);
+ }
+ return item;
}
@Override
public MesMdItemDO validateItemExistsAndEnable(Long id) {
- MdmItemRespDTO item = mdmItemApi.validateItemExistsAndEnable(id).getCheckedData();
- return BeanUtils.toBean(item, MesMdItemDO.class);
+ MesMdItemDO item = validateItemExists(id);
+ if (ObjUtil.notEqual(CommonStatusEnum.ENABLE.getStatus(), item.getStatus())) {
+ throw exception(MD_ITEM_IS_DISABLE);
+ }
+ return item;
}
private void validateItemCodeUnique(Long id, String code) {
@@ -176,24 +214,9 @@
}
}
- private void validateItemNameUnique(Long id, String name) {
- MesMdItemDO item = itemMapper.selectByName(name);
- if (item == null) {
- return;
- }
- if (ObjUtil.notEqual(item.getId(), id)) {
- throw exception(MD_ITEM_NAME_DUPLICATE);
- }
- }
-
private void validateItemTypeExists(Long itemTypeId) {
if (itemTypeService.getItemType(itemTypeId) == null) {
throw exception(MD_ITEM_TYPE_NOT_EXISTS);
- }
- // 鏍¢獙蹇呴』鏄彾瀛愬垎绫伙紙娌℃湁瀛愬垎绫伙級
- List<MesMdItemTypeDO> children = itemTypeService.getItemTypeChildrenList(itemTypeId);
- if (CollUtil.isNotEmpty(children)) {
- throw exception(MD_ITEM_TYPE_NOT_LEAF);
}
}
@@ -242,18 +265,26 @@
@Override
public MesMdItemDO getItem(Long id) {
- // 浠� MDM 鑾峰彇鐗╂枡涓绘暟鎹�
- MdmItemRespDTO item = mdmItemApi.getItem(id).getCheckedData();
- return BeanUtils.toBean(item, MesMdItemDO.class);
+ return itemMapper.selectById(id);
+ }
+
+ @Override
+ public MesMdItemDO getItemByCode(String code) {
+ return itemMapper.selectByCode(code);
}
@Override
public PageResult<MesMdItemDO> getItemPage(MesMdItemPageReqVO pageReqVO) {
- // 璋冪敤 MDM API 鍒嗛〉鏌ヨ锛圡ES 鐗╂枡瀵瑰簲 MDM 鐗╂枡绫诲瀷=鐗╂枡锛�
- cn.iocoder.yudao.framework.common.pojo.PageResult<MdmItemRespDTO> mdmPageResult =
- mdmItemApi.getItemPage(1, pageReqVO.getStatus(), pageReqVO.getPageNo(), pageReqVO.getPageSize()).getCheckedData();
- List<MesMdItemDO> itemList = BeanUtils.toBean(mdmPageResult.getList(), MesMdItemDO.class);
- return new PageResult<>(itemList, mdmPageResult.getTotal());
+ // 鏌ユ壘鏃讹紝濡傛灉鏌ユ壘鏌愪釜鍒嗙被缂栧彿锛屽垯鍖呭惈瀹冪殑瀛愬垎绫�
+ Set<Long> itemTypeIds = null;
+ if (pageReqVO.getItemTypeId() != null) {
+ itemTypeIds = new HashSet<>();
+ itemTypeIds.add(pageReqVO.getItemTypeId());
+ List<MesMdItemTypeDO> children = itemTypeService.getItemTypeChildrenList(pageReqVO.getItemTypeId());
+ itemTypeIds.addAll(convertSet(children, MesMdItemTypeDO::getId));
+ }
+ // 鍒嗛〉鏌ヨ
+ return itemMapper.selectPage(pageReqVO, itemTypeIds);
}
@Override
@@ -261,106 +292,201 @@
if (CollUtil.isEmpty(ids)) {
return Collections.emptyList();
}
- List<MdmItemRespDTO> itemList = mdmItemApi.getItemList(ids).getCheckedData();
- return BeanUtils.toBean(itemList, MesMdItemDO.class);
+ return itemMapper.selectByIds(ids);
}
@Override
public Long getItemCountByItemTypeId(Long itemTypeId) {
- // MES 鍒嗙被闇�瑕佹槧灏勫埌 MDM 鍒嗙被
- return mdmItemApi.getItemCountByCategoryId(itemTypeId).getCheckedData();
+ return itemMapper.selectCountByItemTypeId(itemTypeId);
}
@Override
public Long getItemCountByUnitMeasureId(Long unitMeasureId) {
- return mdmItemApi.getItemCountByUnitMeasureId(unitMeasureId).getCheckedData();
+ return itemMapper.selectCountByUnitMeasureId(unitMeasureId);
+ }
+
+ /**
+ * 鍚屾鐗╂枡鍒� MDM
+ *
+ * @param item MES 鐗╂枡鏁版嵁
+ * @param saveReqVO 淇濆瓨璇锋眰锛堝寘鍚壒娆¢厤缃級
+ */
+ private void syncItemToMdm(MesMdItemDO item, MesMdItemSaveReqVO saveReqVO) {
+ // 1. 鑾峰彇鐗╂枡绫诲瀷瀵瑰簲鐨� itemType
+ 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 = itemTypeDO.getId();
+ }
+ }
+
+ // 2. 鑾峰彇璁¢噺鍗曚綅缂栫爜
+ String unitCode = null;
+ Long unitMeasureId = null;
+ if (item.getUnitMeasureId() != null) {
+ MesMdUnitMeasureDO unitMeasure = unitMeasureService.getUnitMeasure(item.getUnitMeasureId());
+ if (unitMeasure != null) {
+ unitCode = unitMeasure.getCode();
+ }
+ unitMeasureId = item.getUnitMeasureId();
+ }
+
+ // 3. 鑾峰彇鎵规閰嶇疆
+ MesMdItemBatchConfigDO batchConfig = itemBatchConfigService.getItemBatchConfigByItemId(item.getId());
+
+ // 4. 缁勮鍚屾 DTO
+ MdmItemSyncReqDTO syncReqDTO = new MdmItemSyncReqDTO();
+ syncReqDTO.setCode(item.getCode());
+ syncReqDTO.setName(item.getName());
+ syncReqDTO.setSpecification(item.getSpecification());
+ syncReqDTO.setItemType(itemType);
+ syncReqDTO.setUnitMeasureId(unitMeasureId);
+ syncReqDTO.setCategoryId(item.getItemTypeId());
+ syncReqDTO.setStatus(item.getStatus());
+ syncReqDTO.setMinStock(item.getMinStock());
+ syncReqDTO.setMaxStock(item.getMaxStock());
+ syncReqDTO.setIsBatchManaged(item.getBatchFlag());
+ syncReqDTO.setIsHighValue(item.getHighValue());
+ syncReqDTO.setRemark(item.getRemark());
+
+ // 5. 鍚屾鎵规閰嶇疆
+ if (batchConfig != null) {
+ syncReqDTO.setProduceDateFlag(batchConfig.getProduceDateFlag());
+ syncReqDTO.setExpireDateFlag(batchConfig.getExpireDateFlag());
+ syncReqDTO.setReceiptDateFlag(batchConfig.getReceiptDateFlag());
+ syncReqDTO.setVendorFlag(batchConfig.getVendorFlag());
+ syncReqDTO.setPurchaseOrderCodeFlag(batchConfig.getPurchaseOrderCodeFlag());
+ syncReqDTO.setLotNumberFlag(batchConfig.getLotNumberFlag());
+ syncReqDTO.setQualityStatusFlag(batchConfig.getQualityStatusFlag());
+ }
+
+ // 6. 璋冪敤 MDM 鍚屾 API
+ mdmItemSyncApi.syncItemToMdm(syncReqDTO);
+ }
+
+ /**
+ * 灏� MES 鐗╂枡绫诲瀷杞崲涓� MDM 鐗╂枡绫诲瀷
+ * MES: ITEM(鐗╂枡)/PRODUCT(浜у搧)
+ * MDM: 1鍘熸枡, 2鍗婃垚鍝�, 3鎴愬搧, 4杈呮枡
+ */
+ private Integer convertMesItemTypeToMdm(String itemOrProduct, String typeName) {
+ if (itemOrProduct == null) {
+ return null;
+ }
+ // 鏍规嵁鍚嶇О鍖归厤
+ if (typeName != null) {
+ if (typeName.contains("鍘熸枡")) {
+ return 1;
+ } else if (typeName.contains("鍗婃垚鍝�")) {
+ return 2;
+ } else if (typeName.contains("鎴愬搧")) {
+ return 3;
+ } else if (typeName.contains("杈呮枡")) {
+ return 4;
+ }
+ }
+ // 鏍规嵁 ITEM/PRODUCT 鍏滃簳
+ if ("PRODUCT".equals(itemOrProduct)) {
+ return 3; // 浜у搧 -> 鎴愬搧
+ }
+ 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;
}
@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);
+ public MesMdItemImportRespVO importItemList(List<MesMdItemImportExcelVO> importList, Boolean updateSupport) {
+ MesMdItemImportRespVO respVO = MesMdItemImportRespVO.empty();
+ if (CollUtil.isEmpty(importList)) {
+ return respVO;
}
+ // 棰勫姞杞借閲忓崟浣嶃�佺墿鏂欏垎绫伙紝鎸夊悕绉板缓绱㈠紩锛岄伩鍏嶉�愯鏌ュ簱
+ Map<String, Long> unitMeasureMap = new HashMap<>();
+ unitMeasureService.getUnitMeasureListByStatus(CommonStatusEnum.ENABLE.getStatus())
+ .forEach(unit -> unitMeasureMap.put(unit.getName().trim(), unit.getId()));
+ Map<String, Long> itemTypeMap = new HashMap<>();
+ itemTypeService.getItemTypeList(new MesMdItemTypeListReqVO())
+ .forEach(type -> itemTypeMap.put(type.getName().trim(), type.getId()));
- // 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()));
+ int index = 0;
+ for (MesMdItemImportExcelVO row : importList) {
+ index++;
+ String key = StrUtil.isNotBlank(row.getCode()) ? row.getCode().trim() : "绗� " + index + " 琛�";
+ // 1. 鍩虹鏍¢獙
+ if (StrUtil.isBlank(row.getCode())) {
+ respVO.getFailureCodes().put(key, "鐗╂枡缂栫爜涓嶈兘涓虹┖");
+ continue;
}
- String key = importItem.getCode();
- if (StrUtil.isBlank(importItem.getName())) {
+ if (StrUtil.isBlank(row.getName())) {
respVO.getFailureCodes().put(key, "鐗╂枡鍚嶇О涓嶈兘涓虹┖");
- return;
+ continue;
}
- if (StrUtil.isBlank(importItem.getUnitMeasureCode())) {
- respVO.getFailureCodes().put(key, "鍗曚綅缂栫爜涓嶈兘涓虹┖");
- return;
+ String code = row.getCode().trim();
+ String unitName = StrUtil.trim(row.getUnitMeasureName());
+ Long unitMeasureId = unitName == null ? null : unitMeasureMap.get(unitName);
+ if (unitMeasureId == null) {
+ respVO.getFailureCodes().put(key, "璁¢噺鍗曚綅[" + unitName + "]涓嶅瓨鍦�");
+ continue;
}
- // 灏嗗崟浣嶇紪鐮佽浆鎹负鍗曚綅 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;
+ String typeName = StrUtil.trim(row.getItemTypeName());
+ Long itemTypeId = typeName == null ? null : itemTypeMap.get(typeName);
+ if (itemTypeId == null) {
+ respVO.getFailureCodes().put(key, "鐗╂枡鍒嗙被[" + typeName + "]涓嶅瓨鍦�");
+ continue;
}
- // 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;
+ // 2. 缁勮淇濆瓨瀵硅薄锛堥鑹蹭竴骞跺啓鍏ワ級
+ MesMdItemSaveReqVO saveReqVO = new MesMdItemSaveReqVO();
+ saveReqVO.setCode(code);
+ saveReqVO.setName(row.getName().trim());
+ saveReqVO.setSpecification(StrUtil.trim(row.getSpecification()));
+ saveReqVO.setColor(StrUtil.trim(row.getColor()));
+ saveReqVO.setUnitMeasureId(unitMeasureId);
+ saveReqVO.setItemTypeId(itemTypeId);
+ saveReqVO.setSafeStockFlag(row.getSafeStockFlag());
+ saveReqVO.setMinStock(row.getMinStock());
+ saveReqVO.setMaxStock(row.getMaxStock());
+ saveReqVO.setHighValue(row.getHighValue());
+ saveReqVO.setBatchFlag(row.getBatchFlag());
+ saveReqVO.setRemark(StrUtil.trim(row.getRemark()));
+
+ // 3. 鏂板鎴栨洿鏂帮紝鍗曡澶辫触涓嶅奖鍝嶆暣鎵�
+ MesMdItemDO existItem = itemMapper.selectByCode(code);
+ try {
+ if (existItem == null) {
+ createItem(saveReqVO);
+ respVO.getCreateCodes().add(code);
+ } else if (!Boolean.TRUE.equals(updateSupport)) {
+ respVO.getFailureCodes().put(key, "鐗╂枡缂栫爜宸插瓨鍦紙鍕鹃�夈�屾槸鍚﹁鐩栥�嶅彲鏇存柊锛�");
+ } else {
+ saveReqVO.setId(existItem.getId());
+ saveReqVO.setMdmItemId(existItem.getMdmItemId());
+ updateItem(saveReqVO);
+ respVO.getUpdateCodes().add(code);
}
- 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, "鐗╂枡缂栫爜宸插瓨鍦�");
+ } catch (Exception e) {
+ respVO.getFailureCodes().put(key, e.getMessage() == null ? "瀵煎叆澶辫触" : e.getMessage());
}
- });
+ }
return respVO;
}
--
Gitblit v1.9.3