From ffe7921a138331185186fd100846fe50dcaf841c Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 16 七月 2026 10:08:02 +0800
Subject: [PATCH] 1.采购管理-采购申请恢复
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java | 315 +++++++++++++++++++++++++++++++++++-----------------
1 files changed, 213 insertions(+), 102 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java
index 211281f..151f178 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java
@@ -2,19 +2,20 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchGenerateReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchPageReqVO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemBatchConfigDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.batch.MesWmBatchMapper;
import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
-import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemBatchConfigService;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemBatchConfigApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemBatchConfigRespDTO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -50,7 +51,7 @@
@Resource
private MesMdmItemService mdmItemService;
@Resource
- private MesMdItemBatchConfigService itemBatchConfigService;
+ private MdmItemBatchConfigApi itemBatchConfigApi;
@Resource
private MesMdAutoCodeRecordService autoCodeRecordService;
@Resource
@@ -80,119 +81,160 @@
// 鏈惎鐢ㄦ壒娆$鐞嗭紝杩斿洖 null
return null;
}
- // 1.2 鏌ヨ鐗╂枡鎵规閰嶇疆
- MesMdItemBatchConfigDO config = itemBatchConfigService.validateItemBatchConfigExists(reqVO.getItemId());
+
+ // 璋冭瘯鏃ュ織锛氭墦鍗版帴鏀跺埌鐨勬棩鏈�
+ log.info("[getOrGenerateBatchCode] 鏀跺埌璇锋眰, itemId={}, batchCode={}, produceDate={}",
+ reqVO.getItemId(), reqVO.getBatchCode(), reqVO.getProduceDate());
+
+ // 1.2 鏌ヨ鐗╂枡鎵规閰嶇疆锛堜粠 MDM 鑾峰彇锛屼笉瀛樺湪鍒欎娇鐢ㄩ粯璁ら厤缃級
+ MdmItemBatchConfigRespDTO config = itemBatchConfigApi.getItemBatchConfig(reqVO.getItemId());
// 2. 鏍规嵁閰嶇疆鏍¢獙蹇呭~鍙傛暟骞舵竻绌轰笉闇�瑕佺殑鍙傛暟
MesWmBatchDO batch = MesWmBatchDO.builder().itemId(reqVO.getItemId()).build();
- // 鐢熶骇鏃ユ湡
- if (Boolean.TRUE.equals(config.getProduceDateFlag())) {
- if (ObjUtil.isNull(reqVO.getProduceDate())) {
- throw exception(WM_BATCH_PRODUCE_DATE_REQUIRED);
+ if (config != null) {
+ // 鐢熶骇鏃ユ湡
+ if (Boolean.TRUE.equals(config.getProduceDateFlag())) {
+ if (ObjUtil.isNull(reqVO.getProduceDate())) {
+ throw exception(WM_BATCH_PRODUCE_DATE_REQUIRED);
+ }
+ batch.setProduceDate(reqVO.getProduceDate());
}
- batch.setProduceDate(reqVO.getProduceDate());
+ // 鍏ュ簱鏃ユ湡
+ if (Boolean.TRUE.equals(config.getReceiptDateFlag())) {
+ if (ObjUtil.isNull(reqVO.getReceiptDate())) {
+ throw exception(WM_BATCH_RECEIPT_DATE_REQUIRED);
+ }
+ batch.setReceiptDate(reqVO.getReceiptDate());
+ }
+ // 鏈夋晥鏈�
+ if (Boolean.TRUE.equals(config.getExpireDateFlag())) {
+ if (ObjUtil.isNull(reqVO.getExpireDate())) {
+ throw exception(WM_BATCH_EXPIRE_DATE_REQUIRED);
+ }
+ batch.setExpireDate(reqVO.getExpireDate());
+ }
+ // 渚涘簲鍟�
+ if (Boolean.TRUE.equals(config.getVendorFlag())) {
+ if (ObjUtil.isNull(reqVO.getVendorId())) {
+ throw exception(WM_BATCH_VENDOR_REQUIRED);
+ }
+ batch.setVendorId(reqVO.getVendorId());
+ }
+ // 瀹㈡埛
+ if (Boolean.TRUE.equals(config.getClientFlag())) {
+ if (ObjUtil.isNull(reqVO.getClientId())) {
+ throw exception(WM_BATCH_CLIENT_REQUIRED);
+ }
+ batch.setClientId(reqVO.getClientId());
+ }
+ // 閲囪喘璁㈠崟缂栧彿
+ if (Boolean.TRUE.equals(config.getPurchaseOrderCodeFlag())) {
+ if (ObjUtil.isNull(reqVO.getPurchaseOrderCode())) {
+ throw exception(WM_BATCH_PURCHASE_ORDER_CODE_REQUIRED);
+ }
+ batch.setPurchaseOrderCode(reqVO.getPurchaseOrderCode());
+ }
+ // 閿�鍞鍗曠紪鍙�
+ if (Boolean.TRUE.equals(config.getSalesOrderCodeFlag())) {
+ if (ObjUtil.isNull(reqVO.getSalesOrderCode())) {
+ throw exception(WM_BATCH_CUSTOMER_ORDER_CODE_REQUIRED);
+ }
+ batch.setSalesOrderCode(reqVO.getSalesOrderCode());
+ }
+ // 鐢熶骇宸ュ崟
+ if (Boolean.TRUE.equals(config.getWorkOrderFlag())) {
+ if (ObjUtil.isNull(reqVO.getWorkOrderId())) {
+ throw exception(WM_BATCH_WORK_ORDER_REQUIRED);
+ }
+ batch.setWorkOrderId(reqVO.getWorkOrderId());
+ }
+ // 鐢熶骇浠诲姟
+ if (Boolean.TRUE.equals(config.getTaskFlag())) {
+ if (ObjUtil.isNull(reqVO.getTaskId())) {
+ throw exception(WM_BATCH_TASK_REQUIRED);
+ }
+ batch.setTaskId(reqVO.getTaskId());
+ }
+ // 宸ヤ綔绔�
+ if (Boolean.TRUE.equals(config.getWorkstationFlag())) {
+ if (ObjUtil.isNull(reqVO.getWorkstationId())) {
+ throw exception(WM_BATCH_WORKSTATION_REQUIRED);
+ }
+ batch.setWorkstationId(reqVO.getWorkstationId());
+ }
+ // 宸ュ叿
+ if (Boolean.TRUE.equals(config.getToolFlag())) {
+ if (ObjUtil.isNull(reqVO.getToolId())) {
+ throw exception(WM_BATCH_TOOL_REQUIRED);
+ }
+ batch.setToolId(reqVO.getToolId());
+ }
+ // 妯″叿
+ if (Boolean.TRUE.equals(config.getMoldFlag())) {
+ if (ObjUtil.isNull(reqVO.getMoldId())) {
+ throw exception(WM_BATCH_MOLD_REQUIRED);
+ }
+ batch.setMoldId(reqVO.getMoldId());
+ }
+ // 鐢熶骇鎵瑰彿
+ if (Boolean.TRUE.equals(config.getLotNumberFlag())) {
+ if (ObjUtil.isNull(reqVO.getLotNumber())) {
+ throw exception(WM_BATCH_LOT_NUMBER_REQUIRED);
+ }
+ batch.setLotNumber(reqVO.getLotNumber());
+ }
+ // 璐ㄩ噺鐘舵��
+ if (Boolean.TRUE.equals(config.getQualityStatusFlag())) {
+ if (ObjUtil.isNull(reqVO.getQualityStatus())) {
+ throw exception(WM_BATCH_QUALITY_STATUS_REQUIRED);
+ }
+ batch.setQualityStatus(reqVO.getQualityStatus());
+ }
}
- // 鍏ュ簱鏃ユ湡
- if (Boolean.TRUE.equals(config.getReceiptDateFlag())) {
- if (ObjUtil.isNull(reqVO.getReceiptDate())) {
- throw exception(WM_BATCH_RECEIPT_DATE_REQUIRED);
+ // 鏃犳壒娆¢厤缃椂锛屼娇鐢ㄤ紶鍏ョ殑鍙傛暟锛堝鏉炬ā寮忥紝閫傜敤浜庤嚜瀹氫箟鍏ュ簱绛夊満鏅級
+ else {
+ if (reqVO.getProduceDate() != null) {
+ batch.setProduceDate(reqVO.getProduceDate());
}
- batch.setReceiptDate(reqVO.getReceiptDate());
- }
- // 鏈夋晥鏈�
- if (Boolean.TRUE.equals(config.getExpireDateFlag())) {
- if (ObjUtil.isNull(reqVO.getExpireDate())) {
- throw exception(WM_BATCH_EXPIRE_DATE_REQUIRED);
+ if (reqVO.getReceiptDate() != null) {
+ batch.setReceiptDate(reqVO.getReceiptDate());
}
- batch.setExpireDate(reqVO.getExpireDate());
- }
- // 渚涘簲鍟�
- if (Boolean.TRUE.equals(config.getVendorFlag())) {
- if (ObjUtil.isNull(reqVO.getVendorId())) {
- throw exception(WM_BATCH_VENDOR_REQUIRED);
+ if (reqVO.getExpireDate() != null) {
+ batch.setExpireDate(reqVO.getExpireDate());
}
- batch.setVendorId(reqVO.getVendorId());
- }
- // 瀹㈡埛
- if (Boolean.TRUE.equals(config.getClientFlag())) {
- if (ObjUtil.isNull(reqVO.getClientId())) {
- throw exception(WM_BATCH_CLIENT_REQUIRED);
+ if (reqVO.getVendorId() != null) {
+ batch.setVendorId(reqVO.getVendorId());
}
- batch.setClientId(reqVO.getClientId());
- }
- // 閲囪喘璁㈠崟缂栧彿
- if (Boolean.TRUE.equals(config.getPurchaseOrderCodeFlag())) {
- if (ObjUtil.isNull(reqVO.getPurchaseOrderCode())) {
- throw exception(WM_BATCH_PURCHASE_ORDER_CODE_REQUIRED);
+ if (reqVO.getClientId() != null) {
+ batch.setClientId(reqVO.getClientId());
}
- batch.setPurchaseOrderCode(reqVO.getPurchaseOrderCode());
- }
- // 閿�鍞鍗曠紪鍙�
- if (Boolean.TRUE.equals(config.getSalesOrderCodeFlag())) {
- if (ObjUtil.isNull(reqVO.getSalesOrderCode())) {
- throw exception(WM_BATCH_CUSTOMER_ORDER_CODE_REQUIRED);
- }
- batch.setSalesOrderCode(reqVO.getSalesOrderCode());
- }
- // 鐢熶骇宸ュ崟
- if (Boolean.TRUE.equals(config.getWorkOrderFlag())) {
- if (ObjUtil.isNull(reqVO.getWorkOrderId())) {
- throw exception(WM_BATCH_WORK_ORDER_REQUIRED);
- }
- batch.setWorkOrderId(reqVO.getWorkOrderId());
- }
- // 鐢熶骇浠诲姟
- if (Boolean.TRUE.equals(config.getTaskFlag())) {
- if (ObjUtil.isNull(reqVO.getTaskId())) {
- throw exception(WM_BATCH_TASK_REQUIRED);
- }
- batch.setTaskId(reqVO.getTaskId());
- }
- // 宸ヤ綔绔�
- if (Boolean.TRUE.equals(config.getWorkstationFlag())) {
- if (ObjUtil.isNull(reqVO.getWorkstationId())) {
- throw exception(WM_BATCH_WORKSTATION_REQUIRED);
- }
- batch.setWorkstationId(reqVO.getWorkstationId());
- }
- // 宸ュ叿
- if (Boolean.TRUE.equals(config.getToolFlag())) {
- if (ObjUtil.isNull(reqVO.getToolId())) {
- throw exception(WM_BATCH_TOOL_REQUIRED);
- }
- batch.setToolId(reqVO.getToolId());
- }
- // 妯″叿
- if (Boolean.TRUE.equals(config.getMoldFlag())) {
- if (ObjUtil.isNull(reqVO.getMoldId())) {
- throw exception(WM_BATCH_MOLD_REQUIRED);
- }
- batch.setMoldId(reqVO.getMoldId());
- }
- // 鐢熶骇鎵瑰彿
- if (Boolean.TRUE.equals(config.getLotNumberFlag())) {
- if (ObjUtil.isNull(reqVO.getLotNumber())) {
- throw exception(WM_BATCH_LOT_NUMBER_REQUIRED);
- }
- batch.setLotNumber(reqVO.getLotNumber());
- }
- // 璐ㄩ噺鐘舵��
- if (Boolean.TRUE.equals(config.getQualityStatusFlag())) {
- if (ObjUtil.isNull(reqVO.getQualityStatus())) {
- throw exception(WM_BATCH_QUALITY_STATUS_REQUIRED);
- }
- batch.setQualityStatus(reqVO.getQualityStatus());
}
- // 3.1 鎯呭喌涓�锛氭煡璇㈡槸鍚﹀瓨鍦ㄥ尮閰嶇殑鎵规
- MesWmBatchDO existingBatch = batchMapper.selectFirst(batch);
- if (existingBatch != null) {
- return existingBatch;
+ // 3.1 鎯呭喌涓�锛氫紶鍏ヤ簡 batchCode锛屾煡璇㈡槸鍚﹀瓨鍦ㄨ鎵规鍙�
+ if (StrUtil.isNotBlank(reqVO.getBatchCode())) {
+ MesWmBatchDO existingBatch = batchMapper.selectByCode(reqVO.getBatchCode());
+ if (existingBatch != null) {
+ // 鏍¢獙鐗╂枡鏄惁鍖归厤
+ if (!existingBatch.getItemId().equals(reqVO.getItemId())) {
+ throw exception(WM_BATCH_ITEM_MISMATCH);
+ }
+ // 鏇存柊鎵规灞炴�э紙浠呮洿鏂颁紶鍏ョ殑闈炵┖鍊硷級
+ updateBatchProperties(existingBatch, batch);
+ return existingBatch;
+ }
+ // 涓嶅瓨鍦ㄥ垯浣跨敤浼犲叆鐨� batchCode 鍒涘缓鏂版壒娆�
+ batch.setCode(reqVO.getBatchCode());
+ } else {
+ // 3.2 鎯呭喌浜岋細鏌ヨ鏄惁瀛樺湪鍖归厤鐨勬壒娆★紙鏍规嵁灞炴�у尮閰嶏級
+ MesWmBatchDO existingBatch = batchMapper.selectFirst(batch);
+ if (existingBatch != null) {
+ return existingBatch;
+ }
+ // 3.3 鎯呭喌涓夛細鑷姩鐢熸垚鏂版壒娆″彿
+ String batchCode = autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.WM_BATCH_CODE.getCode());
+ batch.setCode(batchCode);
}
- // 3.2 鎯呭喌浜岋細鐢熸垚鏂版壒娆�
- String batchCode = autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.WM_BATCH_CODE.getCode());
- batch.setCode(batchCode);
batchMapper.insert(batch);
// 4. 鐢熸垚鏉$爜
@@ -200,6 +242,75 @@
return batch;
}
+ /**
+ * 鏇存柊宸叉湁鎵规鐨勫睘鎬э紙浠呮洿鏂颁紶鍏ョ殑闈炵┖鍊硷級
+ *
+ * @param existingBatch 宸叉湁鎵规
+ * @param newBatch 鏂版壒娆″睘鎬�
+ */
+ private void updateBatchProperties(MesWmBatchDO existingBatch, MesWmBatchDO newBatch) {
+ boolean needUpdate = false;
+ if (newBatch.getProduceDate() != null && !newBatch.getProduceDate().equals(existingBatch.getProduceDate())) {
+ existingBatch.setProduceDate(newBatch.getProduceDate());
+ needUpdate = true;
+ }
+ if (newBatch.getExpireDate() != null && !newBatch.getExpireDate().equals(existingBatch.getExpireDate())) {
+ existingBatch.setExpireDate(newBatch.getExpireDate());
+ needUpdate = true;
+ }
+ if (newBatch.getReceiptDate() != null && !newBatch.getReceiptDate().equals(existingBatch.getReceiptDate())) {
+ existingBatch.setReceiptDate(newBatch.getReceiptDate());
+ needUpdate = true;
+ }
+ if (newBatch.getVendorId() != null && !newBatch.getVendorId().equals(existingBatch.getVendorId())) {
+ existingBatch.setVendorId(newBatch.getVendorId());
+ needUpdate = true;
+ }
+ if (newBatch.getClientId() != null && !newBatch.getClientId().equals(existingBatch.getClientId())) {
+ existingBatch.setClientId(newBatch.getClientId());
+ needUpdate = true;
+ }
+ if (newBatch.getSalesOrderCode() != null && !newBatch.getSalesOrderCode().equals(existingBatch.getSalesOrderCode())) {
+ existingBatch.setSalesOrderCode(newBatch.getSalesOrderCode());
+ needUpdate = true;
+ }
+ if (newBatch.getPurchaseOrderCode() != null && !newBatch.getPurchaseOrderCode().equals(existingBatch.getPurchaseOrderCode())) {
+ existingBatch.setPurchaseOrderCode(newBatch.getPurchaseOrderCode());
+ needUpdate = true;
+ }
+ if (newBatch.getWorkOrderId() != null && !newBatch.getWorkOrderId().equals(existingBatch.getWorkOrderId())) {
+ existingBatch.setWorkOrderId(newBatch.getWorkOrderId());
+ needUpdate = true;
+ }
+ if (newBatch.getTaskId() != null && !newBatch.getTaskId().equals(existingBatch.getTaskId())) {
+ existingBatch.setTaskId(newBatch.getTaskId());
+ needUpdate = true;
+ }
+ if (newBatch.getWorkstationId() != null && !newBatch.getWorkstationId().equals(existingBatch.getWorkstationId())) {
+ existingBatch.setWorkstationId(newBatch.getWorkstationId());
+ needUpdate = true;
+ }
+ if (newBatch.getToolId() != null && !newBatch.getToolId().equals(existingBatch.getToolId())) {
+ existingBatch.setToolId(newBatch.getToolId());
+ needUpdate = true;
+ }
+ if (newBatch.getMoldId() != null && !newBatch.getMoldId().equals(existingBatch.getMoldId())) {
+ existingBatch.setMoldId(newBatch.getMoldId());
+ needUpdate = true;
+ }
+ if (newBatch.getLotNumber() != null && !newBatch.getLotNumber().equals(existingBatch.getLotNumber())) {
+ existingBatch.setLotNumber(newBatch.getLotNumber());
+ needUpdate = true;
+ }
+ if (newBatch.getQualityStatus() != null && !newBatch.getQualityStatus().equals(existingBatch.getQualityStatus())) {
+ existingBatch.setQualityStatus(newBatch.getQualityStatus());
+ needUpdate = true;
+ }
+ if (needUpdate) {
+ batchMapper.updateById(existingBatch);
+ }
+ }
+
@Override
public List<MesWmBatchDO> getForwardBatchList(String code) {
return getForwardBatchList(code, new HashSet<>(), 0);
--
Gitblit v1.9.3