From 48ee7c963f29f5614a8f86c08608620cc6310793 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 26 十月 2026 17:11:33 +0800
Subject: [PATCH] feat: 完善产品编码与技术文件管理
---
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java | 55 +++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 49 insertions(+), 6 deletions(-)
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
index cfbc790..1780521 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
@@ -19,6 +19,7 @@
import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO;
import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemBatchConfigMapper;
import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemMapper;
+import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemCodeSequenceMapper;
import cn.iocoder.yudao.module.mdm.dal.mysql.unit.MdmUnitMeasureMapper;
import cn.iocoder.yudao.module.mdm.service.brand.MdmBrandService;
import cn.iocoder.yudao.module.mdm.service.category.MdmItemCategoryService;
@@ -60,6 +61,9 @@
private MdmItemMapper itemMapper;
@Resource
+ private MdmItemCodeSequenceMapper itemCodeSequenceMapper;
+
+ @Resource
private MdmItemCategoryService itemCategoryService;
@Resource
private MdmUnitMeasureService unitMeasureService;
@@ -85,6 +89,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Long createItem(MdmItemSaveReqVO createReqVO) {
+ createReqVO.setCode(generateItemCode(createReqVO.getItemType()));
// 鏍¢獙鏁版嵁
validateItemSaveData(createReqVO);
@@ -107,7 +112,10 @@
@Transactional(rollbackFor = Exception.class)
public void updateItem(MdmItemSaveReqVO updateReqVO) {
// 鏍¢獙瀛樺湪
- validateItemExists(updateReqVO.getId());
+ MdmItemDO existingItem = validateItemExists(updateReqVO.getId());
+ // 缂栧彿鐢辩郴缁熺敓鎴愶紝淇敼浜у搧鏃朵繚鎸佸師缂栧彿涓嶅彉銆�
+ updateReqVO.setCode(existingItem.getCode());
+ updateReqVO.setItemType(existingItem.getItemType());
// 鏍¢獙鏁版嵁
validateItemSaveData(updateReqVO);
@@ -127,8 +135,41 @@
}
private void validateItemSaveData(MdmItemSaveReqVO reqVO) {
+ if (reqVO.getItemType() == null || reqVO.getItemType() < 1 || reqVO.getItemType() > 5) {
+ throw exception(MDM_ITEM_TYPE_INVALID);
+ }
// 鏍¢獙鐗╂枡缂栫爜鐨勫敮涓�鎬�
validateItemCodeUnique(reqVO.getId(), reqVO.getCode());
+ }
+
+ /** 鐢熸垚鍥涗綅绫诲瀷鍓嶇紑 + 浜斾綅娴佹按鍙凤紝鍏变節浣嶃�傛祦姘磋鍦ㄤ簨鍔″唴鍔犻攣锛岄伩鍏嶅苟鍙戦噸澶嶃�� */
+ private String generateItemCode(Integer itemType) {
+ String prefix = switch (itemType == null ? 0 : itemType) {
+ case 1 -> "1001";
+ case 2 -> "1002";
+ case 3 -> "1003";
+ case 4 -> "1004";
+ case 5 -> "1005";
+ default -> throw exception(MDM_ITEM_TYPE_INVALID);
+ };
+ itemCodeSequenceMapper.insertIfAbsent(prefix);
+ Integer current = itemCodeSequenceMapper.selectCurrentValueForUpdate(prefix);
+ if (current == null) {
+ current = itemMapper.selectMaxSequenceByPrefix(prefix);
+ itemCodeSequenceMapper.insertIfAbsent(prefix);
+ itemCodeSequenceMapper.updateCurrentValue(prefix, current);
+ }
+ int maxExisting = itemMapper.selectMaxSequenceByPrefix(prefix);
+ if (current < maxExisting) {
+ current = maxExisting;
+ itemCodeSequenceMapper.updateCurrentValue(prefix, current);
+ }
+ if (current >= 99_999) {
+ throw exception(MDM_ITEM_CODE_SEQUENCE_EXHAUSTED);
+ }
+ itemCodeSequenceMapper.increment(prefix);
+ int next = current + 1;
+ return prefix + String.format("%05d", next);
}
/**
@@ -468,8 +509,8 @@
TransactionTemplate importTxTemplate = new TransactionTemplate(transactionManager);
for (MdmItemImportExcelVO importVO : importList) {
// 2.1 鍩虹鏍¢獙
- if (StrUtil.isBlank(importVO.getCode()) || StrUtil.isBlank(importVO.getName())) {
- respVO.getFailureList().put(buildFailKey(importVO), "鐗╂枡缂栫爜鍜岀墿鏂欏悕绉颁笉鑳戒负绌�");
+ if (StrUtil.isBlank(importVO.getName())) {
+ respVO.getFailureList().put(buildFailKey(importVO), "鐗╂枡鍚嶇О涓嶈兘涓虹┖");
continue;
}
// 2.2 瑙f瀽鍒嗙被
@@ -511,10 +552,12 @@
// 2.6 缁勮 SaveReqVO锛堝鐢� create/update 閫昏緫锛�
MdmItemSaveReqVO saveReqVO = new MdmItemSaveReqVO();
+ // 鏂板鏃跺拷鐣� Excel 涓殑鐗╂枡缂栫爜锛岀敱 MDM 鎸変骇鍝佺被鍨嬭嚜鍔ㄧ敓鎴愩��
saveReqVO.setCode(importVO.getCode());
saveReqVO.setName(importVO.getName());
saveReqVO.setBarCode(importVO.getBarCode());
saveReqVO.setSpecification(importVO.getSpecification());
+ saveReqVO.setTechnicalParameters(importVO.getTechnicalParameters());
saveReqVO.setCategoryId(categoryId);
saveReqVO.setUnitMeasureId(unitMeasureId);
saveReqVO.setUnitMeasureId2(unitMeasureId2);
@@ -532,10 +575,10 @@
saveReqVO.setStatus(importVO.getStatus() != null ? importVO.getStatus() : cn.iocoder.yudao.framework.common.enums.CommonStatusEnum.ENABLE.getStatus());
saveReqVO.setSyncMes(importVO.getSyncMes() != null ? importVO.getSyncMes() : false);
saveReqVO.setRemark(importVO.getRemark());
- saveReqVO.setItemType(1); // 榛樿鐗╂枡绫诲瀷锛氱墿鏂�
+ saveReqVO.setItemType(importVO.getItemType() != null ? importVO.getItemType() : 1); // 鏈彁渚涚被鍨嬫椂榛樿涓哄師鏉愭枡
// 2.7 宸插瓨鍦紙鎸夌紪鐮佸垽鏂級
- MdmItemDO existByCode = itemMapper.selectByCode(importVO.getCode());
+ MdmItemDO existByCode = StrUtil.isBlank(importVO.getCode()) ? null : itemMapper.selectByCode(importVO.getCode());
if (existByCode != null && !Boolean.TRUE.equals(isUpdateSupport)) {
respVO.getFailureList().put(buildFailKey(importVO), "鐗╂枡缂栫爜宸插瓨鍦�");
continue;
@@ -587,4 +630,4 @@
StrUtil.blankToDefault(importVO.getName(), "锛堝悕绉板拰缂栫爜涓虹┖鐨勮锛�"));
}
-}
\ No newline at end of file
+}
--
Gitblit v1.9.3