From f7273277023f3497ac071bf98f556a569cb4dd25 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 17 九月 2026 16:24:10 +0800
Subject: [PATCH] feat(mes): 重构袋码生成与物料分类功能
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/batch/MesProBatchServiceImpl.java | 80 ++++++++++++++++++++++++++--------------
1 files changed, 52 insertions(+), 28 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/batch/MesProBatchServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/batch/MesProBatchServiceImpl.java
index 0fe4f45..7b63e97 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/batch/MesProBatchServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/batch/MesProBatchServiceImpl.java
@@ -7,7 +7,7 @@
import cn.iocoder.yudao.module.mes.controller.admin.pro.batch.vo.MesProBatchPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.batch.vo.MesProBatchPreGenerateReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.batch.vo.MesProBatchSaveReqVO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
+import cn.iocoder.yudao.module.mes.controller.admin.pro.pallet.vo.MesProPalletBindBatchReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.batch.MesProBatchDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.batch.MesProBatchWorkerDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.line.MesProLineDO;
@@ -18,8 +18,8 @@
import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
import cn.iocoder.yudao.module.mes.enums.pro.MesProBatchStatusEnum;
import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
-import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.pro.line.MesProLineService;
+import cn.iocoder.yudao.module.mes.service.pro.pallet.MesProPalletService;
import cn.iocoder.yudao.module.mes.service.trace.integrity.MesTraceIntegrityService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import jakarta.annotation.Resource;
@@ -59,11 +59,12 @@
private MesProPalletMapper palletMapper;
@Resource
+ private MesProPalletService palletService;
+
+ @Resource
private MesMdAutoCodeRecordService autoCodeRecordService;
@Resource
private AdminUserApi adminUserApi;
- @Resource
- private MesMdmItemService mdmItemService;
@Resource
private MesProLineService lineService;
@Resource
@@ -72,27 +73,30 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Long createBatch(MesProBatchSaveReqVO createReqVO) {
- // 1. 鏍¢獙鍏宠仈鏁版嵁锛堝搧绉嶃�佷骇绾裤�佺敓浜т汉鍛橈級
- MesMdmItemDO item = mdmItemService.validateItemExists(createReqVO.getItemId());
+ // 1. 鏍¢獙鍏宠仈鏁版嵁锛堜骇绾裤�佺敓浜т汉鍛橈級
MesProLineDO line = lineService.validateLineExistsAndEnable(createReqVO.getLineId());
validateRelations(createReqVO);
- // 2. 鐢熸垚鎵规鍙凤紙缂栫爜瑙勫垯锛氬墠缂� + 鏃ユ湡 + 浜х嚎缂栫爜 + 鍝佺缂栫爜 + 娴佹按鍙凤級
- String code = generateBatchCode(line.getCode(), item.getCode());
+ // 2. 鐢熸垚鎵规鍙凤紙缂栫爜瑙勫垯锛氬墠缂� + 鏃ユ湡 + 浜х嚎缂栫爜 + 娴佹按鍙凤級
+ String code = generateBatchCode(line.getCode());
- // 3. 鎻掑叆鎵规锛堜骇绾跨紪鐮�/鍚嶇О鍐椾綑鍥炲~锛�
+ // 3. 鎻掑叆鎵规锛堜骇绾跨紪鐮�/鍚嶇О鍐椾綑鍥炲~锛涘嬀閫夌粦瀹氭墭鐩樻椂鎵规鐩存帴杩涘叆鐢熶骇涓級
+ boolean bindPallets = CollUtil.isNotEmpty(createReqVO.getPalletIds());
MesProBatchDO batch = BeanUtils.toBean(createReqVO, MesProBatchDO.class)
.setCode(code)
.setLineCode(line.getCode())
.setLineName(line.getName())
.setBagQuantity(0)
.setPalletQuantity(0)
- .setStatus(MesProBatchStatusEnum.DRAFT.getStatus());
+ .setStatus(bindPallets ? MesProBatchStatusEnum.PRODUCING.getStatus()
+ : MesProBatchStatusEnum.DRAFT.getStatus());
batchMapper.insert(batch);
// 4. 鎻掑叆鐢熶骇浜哄憳閰嶇疆
insertBatchWorkers(batch.getId(), createReqVO.getWorkers());
- // 5. 鐢熸垚鎵规瀹屾暣鎬ф憳瑕�
+ // 5. 缁戝畾鎵樼洏锛堢骇鑱旂敓鎴愭寮忔墭鐩樼爜骞跺綍鍏ユ墭鐩樹笅琚嬬爜锛屽け璐ユ暣浣撳洖婊氾級
+ bindPalletsToBatch(batch.getId(), createReqVO.getPalletIds());
+ // 6. 鐢熸垚鎵规瀹屾暣鎬ф憳瑕�
integrityService.recordBatchIntegrity(batch.getId());
return batch.getId();
}
@@ -130,21 +134,24 @@
throw exception(PRO_BATCH_ALREADY_FILLED);
}
// 2. 鏍¢獙鍏宠仈鏁版嵁骞剁敓鎴愭寮忔壒娆″彿
- MesMdmItemDO item = mdmItemService.validateItemExists(fillReqVO.getItemId());
MesProLineDO line = lineService.validateLineExistsAndEnable(fillReqVO.getLineId());
validateRelations(fillReqVO);
- String code = generateBatchCode(line.getCode(), item.getCode());
- // 3. 钀藉簱涓氬姟淇℃伅锛堜繚鐣欎复鏃舵壒娆$爜鐢ㄤ簬鍘嗗彶鎵爜杩芥函锛涗骇绾跨紪鐮�/鍚嶇О鍐椾綑鍥炲~锛�
+ String code = generateBatchCode(line.getCode());
+ // 3. 钀藉簱涓氬姟淇℃伅锛堜繚鐣欎复鏃舵壒娆$爜鐢ㄤ簬鍘嗗彶鎵爜杩芥函锛涗骇绾跨紪鐮�/鍚嶇О鍐椾綑鍥炲~锛涘嬀閫夌粦瀹氭墭鐩樻椂鎵规鐩存帴杩涘叆鐢熶骇涓級
+ boolean bindPallets = CollUtil.isNotEmpty(fillReqVO.getPalletIds());
MesProBatchDO updateObj = BeanUtils.toBean(fillReqVO, MesProBatchDO.class)
.setCode(code)
.setLineCode(line.getCode())
.setLineName(line.getName())
- .setStatus(MesProBatchStatusEnum.DRAFT.getStatus());
+ .setStatus(bindPallets ? MesProBatchStatusEnum.PRODUCING.getStatus()
+ : MesProBatchStatusEnum.DRAFT.getStatus());
batchMapper.updateById(updateObj);
// 4. 閲嶅缓鐢熶骇浜哄憳閰嶇疆
batchWorkerMapper.deleteByBatchId(fillReqVO.getId());
insertBatchWorkers(fillReqVO.getId(), fillReqVO.getWorkers());
- // 5. 鐢熸垚鎵规瀹屾暣鎬ф憳瑕侊紙琛ュ綍姝e紡淇℃伅鍚庤鐩栵級
+ // 5. 缁戝畾鎵樼洏锛堢骇鑱旂敓鎴愭寮忔墭鐩樼爜骞跺綍鍏ユ墭鐩樹笅琚嬬爜锛屽け璐ユ暣浣撳洖婊氾級
+ bindPalletsToBatch(fillReqVO.getId(), fillReqVO.getPalletIds());
+ // 6. 鐢熸垚鎵规瀹屾暣鎬ф憳瑕侊紙琛ュ綍姝e紡淇℃伅鍚庤鐩栵級
integrityService.recordBatchIntegrity(fillReqVO.getId());
}
@@ -157,29 +164,33 @@
// 2. 鏍¢獙鍏宠仈鏁版嵁锛堢敓浜т汉鍛橈級
validateRelations(updateReqVO);
- // 3. 鏈敓鎴愭寮忔壒娆″彿鎴栧搧绉�/浜х嚎鍙樺寲鏃堕噸鏂扮敓鎴愭壒娆″彿锛堟壒娆″彿鍖呭惈浜х嚎缂栫爜 + 鍝佺缂栫爜瑕佺礌锛�
+ // 3. 鏈敓鎴愭寮忔壒娆″彿鎴栦骇绾垮彉鍖栨椂閲嶆柊鐢熸垚鎵规鍙凤紙鎵规鍙峰寘鍚骇绾跨紪鐮佽绱狅級
boolean codeEmpty = StrUtil.isEmpty(oldBatch.getCode());
- boolean itemChanged = !Objects.equals(oldBatch.getItemId(), updateReqVO.getItemId());
boolean lineChanged = !Objects.equals(oldBatch.getLineId(), updateReqVO.getLineId());
String code = oldBatch.getCode();
MesProBatchDO updateObj = BeanUtils.toBean(updateReqVO, MesProBatchDO.class);
- if (codeEmpty || itemChanged || lineChanged) {
- MesMdmItemDO item = mdmItemService.validateItemExists(updateReqVO.getItemId());
+ if (codeEmpty || lineChanged) {
// 鍙樻洿浜х嚎鏃讹紝鐩爣浜х嚎蹇呴』鍚敤锛涙湭鍙樻洿鍒欎粎鏍¢獙瀛樺湪锛堥伩鍏嶅仠鐢ㄤ骇绾跨殑鍘嗗彶鎵规鏃犳硶缂栬緫鍏朵粬瀛楁锛�
MesProLineDO line = (lineChanged || codeEmpty)
? lineService.validateLineExistsAndEnable(updateReqVO.getLineId())
: lineService.validateLineExists(updateReqVO.getLineId());
- code = generateBatchCode(line.getCode(), item.getCode());
+ code = generateBatchCode(line.getCode());
updateObj.setLineCode(line.getCode()).setLineName(line.getName());
}
- // 4. 鏇存柊鎵规
+ // 4. 鏇存柊鎵规锛堝嬀閫夌粦瀹氭墭鐩樻椂鎵规鐩存帴杩涘叆鐢熶骇涓紱鍙栨秷鍕鹃�変笉鍥為��锛屽凡缁戝畾鎵樼洏涓嶅彲瑙g粦锛�
+ boolean bindPallets = CollUtil.isNotEmpty(updateReqVO.getPalletIds());
updateObj.setCode(code);
+ if (bindPallets) {
+ updateObj.setStatus(MesProBatchStatusEnum.PRODUCING.getStatus());
+ }
batchMapper.updateById(updateObj);
// 5. 閲嶅缓鐢熶骇浜哄憳閰嶇疆
batchWorkerMapper.deleteByBatchId(updateReqVO.getId());
insertBatchWorkers(updateReqVO.getId(), updateReqVO.getWorkers());
- // 6. 鎽樿瑕嗙洊鑼冨洿鍚搧绉�/浜х嚎/鐢熶骇鏃ユ湡/璁″垝鏁伴噺锛岀紪杈戝悗閲嶆柊鐢熸垚閬垮厤璇姤绡℃敼
+ // 6. 缁戝畾鏂板鍕鹃�夌殑鎵樼洏锛堢骇鑱旂敓鎴愭寮忔墭鐩樼爜骞跺綍鍏ユ墭鐩樹笅琚嬬爜锛屽け璐ユ暣浣撳洖婊氾級
+ bindPalletsToBatch(updateReqVO.getId(), updateReqVO.getPalletIds());
+ // 7. 鎽樿瑕嗙洊鑼冨洿鍚搧绉�/浜х嚎/鐢熶骇鏃ユ湡/璁″垝鏁伴噺锛岀紪杈戝悗閲嶆柊鐢熸垚閬垮厤璇姤绡℃敼
integrityService.recordBatchIntegrity(updateReqVO.getId());
}
@@ -283,7 +294,7 @@
/**
* 鏍¢獙鍏宠仈鏁版嵁锛堢敓浜т汉鍛橈細璐d换浜� + 鐢熶骇浜哄憳閰嶇疆锛�
* <p>
- * 鍝佺銆佷骇绾跨殑鏍¢獙鍦ㄥ垱寤�/鏇存柊娴佺▼涓唴鑱旀墽琛岋紙闇�鍙栫紪鐮佸弬涓庢壒娆″彿鐢熸垚锛�
+ * 浜х嚎鐨勬牎楠屽湪鍒涘缓/鏇存柊娴佺▼涓唴鑱旀墽琛岋紙闇�鍙栫紪鐮佸弬涓庢壒娆″彿鐢熸垚锛�
*/
private void validateRelations(MesProBatchSaveReqVO reqVO) {
Set<Long> userIds = new HashSet<>();
@@ -293,16 +304,29 @@
}
/**
+ * 鎵规缁戝畾鎵樼洏锛堝彲閫夛級锛氬悓浜嬪姟鍐呭鐢ㄦ墭鐩樼粦瀹氭壒娆¢�昏緫锛�
+ * 鐢熸垚姝e紡鎵樼洏鐮佸苟绾ц仈褰曞叆鎵樼洏涓嬫湭缁戞壒娆$殑琚嬬爜锛屽け璐ユ暣浣撳洖婊�
+ */
+ private void bindPalletsToBatch(Long batchId, List<Long> palletIds) {
+ if (CollUtil.isEmpty(palletIds)) {
+ return;
+ }
+ MesProPalletBindBatchReqVO bindReqVO = new MesProPalletBindBatchReqVO();
+ bindReqVO.setBatchId(batchId);
+ bindReqVO.setIds(palletIds);
+ palletService.bindBatch(bindReqVO);
+ }
+
+ /**
* 鐢熸垚鎵规鍙�
* <p>
- * 缂栫爜瑙勫垯锛氬浐瀹氬墠缂�(PC) + 鏃ユ湡(yyyyMMdd) + 杈撳叆瀛楃(浜х嚎缂栫爜 + 鍝佺缂栫爜) + 娴佹按鍙�(鎸夋棩寰幆)
+ * 缂栫爜瑙勫垯锛氬浐瀹氬墠缂�(PC) + 鏃ユ湡(yyyyMMdd) + 杈撳叆瀛楃(浜х嚎缂栫爜) + 娴佹按鍙�(鎸夋棩寰幆)
*
* @param lineCode 浜х嚎缂栫爜
- * @param itemCode 鍝佺锛堢墿鏂欙級缂栫爜
* @return 鎵规鍙�
*/
- private String generateBatchCode(String lineCode, String itemCode) {
- String inputChar = StrUtil.emptyToDefault(lineCode, "") + StrUtil.emptyToDefault(itemCode, "");
+ private String generateBatchCode(String lineCode) {
+ String inputChar = StrUtil.emptyToDefault(lineCode, "");
return autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.PRO_BATCH_CODE.getCode(), inputChar);
}
--
Gitblit v1.9.3