From 3aa3f9e730127147236c9e7627920dd8aacf3a36 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 15 七月 2026 15:49:59 +0800
Subject: [PATCH] 1.仓储物流-批次号优化覆盖数据 2.仓储物流-新增自定义出入库流水查询 3.采购管理-清理无用代码和表 4.销售管理-清理无用代码和表 5.销售流程状态字段数据回游
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 109 insertions(+), 1 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 860e5b2..1102aef 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
@@ -22,6 +22,8 @@
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;
@@ -38,7 +40,7 @@
/**
* MES 鐗╂枡浜у搧 Service 瀹炵幇绫�
*
- * 娉ㄦ剰锛氬綋鍓嶄繚鎸佷娇鐢� MES 鏈湴琛紝寰� MDM 鏁版嵁杩佺Щ瀹屾垚鍚庡啀鍒囨崲鍒� MDM API
+ * 鏀寔 MES 鍜� MDM 鐗╂枡鏁版嵁鍙屽悜鍚屾
*
* @author 鑺嬮亾婧愮爜
*/
@@ -66,7 +68,11 @@
@Resource
private MesMdAutoCodeRecordService autoCodeRecordService;
+ @Resource
+ private MdmItemSyncApi mdmItemSyncApi;
+
@Override
+ @Transactional(rollbackFor = Exception.class)
public Long createItem(MesMdItemSaveReqVO createReqVO) {
// 鏍¢獙鏁版嵁
validateItemSaveData(createReqVO);
@@ -80,10 +86,17 @@
// 鑷姩鐢熸垚鏉$爜
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());
@@ -94,6 +107,12 @@
MesMdItemDO updateObj = BeanUtils.toBean(updateReqVO, MesMdItemDO.class);
clearStockIfNotSafe(updateObj); // 濡傛灉鏈惎鐢ㄥ畨鍏ㄥ簱瀛橈紝娓呴浂搴撳瓨涓婁笅闄�
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) {
@@ -369,4 +388,93 @@
return respVO;
}
+ /**
+ * 鍚屾鐗╂枡鍒� MDM
+ *
+ * @param item MES 鐗╂枡鏁版嵁
+ * @param saveReqVO 淇濆瓨璇锋眰锛堝寘鍚壒娆¢厤缃級
+ */
+ private void syncItemToMdm(MesMdItemDO item, MesMdItemSaveReqVO saveReqVO) {
+ // 1. 鑾峰彇鐗╂枡绫诲瀷瀵瑰簲鐨� itemType
+ Integer 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());
+ }
+ }
+
+ // 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; // 榛樿鍘熸枡
+ }
+
}
\ No newline at end of file
--
Gitblit v1.9.3