From f71dabccb0e4c2fa410683e6058eb906a7dbf094 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期三, 26 八月 2026 18:12:07 +0800
Subject: [PATCH] feat 采购修正
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java | 80 +++++++++++++++++++++++++++------------
1 files changed, 55 insertions(+), 25 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
index e474e63..f15ad92 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -25,8 +25,8 @@
import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
-import cn.iocoder.yudao.module.erp.api.purchase.ErpPurchaseOrderApi;
-import cn.iocoder.yudao.module.erp.api.purchase.ErpSupplierApi;
+import cn.iocoder.yudao.module.erp.api.purchase.PurchaseOrderApi;
+import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi;
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import org.springframework.security.core.Authentication;
@@ -67,7 +67,7 @@
private MesWmArrivalNoticeService arrivalNoticeService;
@Resource
@Lazy
- private ErpSupplierApi supplierApi;
+ private SrmSupplierApi srmSupplierApi;
@Resource
@Lazy
private MesQcIqcService iqcService;
@@ -81,7 +81,7 @@
private BpmProcessInstanceApi processInstanceApi;
@Resource
- private ErpPurchaseOrderApi purchaseOrderApi;
+ private PurchaseOrderApi purchaseOrderApi;
@Resource
private MdmItemApi mdmItemApi;
@@ -114,7 +114,7 @@
// 鏍¢獙缂栫爜鍞竴
validateCodeUnique(reqVO.getId(), reqVO.getCode());
// 鏍¢獙渚涘簲鍟嗗瓨鍦紙閲囪喘鍏ュ簱浣跨敤 ERP 渚涘簲鍟嗭級
- supplierApi.validateSupplier(reqVO.getVendorId());
+ srmSupplierApi.getSupplier(reqVO.getVendorId());
// 鏍¢獙鍒拌揣閫氱煡鍗曞瓨鍦�
if (reqVO.getNoticeId() != null) {
MesWmArrivalNoticeDO notice = arrivalNoticeService.validateArrivalNoticeReadyForReceipt(reqVO.getNoticeId());
@@ -184,11 +184,19 @@
if (item == null) {
continue;
}
- // 濡傛灉鐗╂枡寮�鍚壒娆$鐞嗭紝妫�鏌ヨ涓婄殑鎵规鍙锋槸鍚︿负绌�
- if (Boolean.TRUE.equals(item.getIsBatchManaged()) && line.getBatchId() == null) {
- throw exception(WM_ITEM_RECEIPT_BATCH_REQUIRED, item.getCode(), item.getName());
+ // 濡傛灉鐗╂枡寮�鍚壒娆$鐞嗭紝琛屾垨鍏朵笂鏋舵槑缁嗗繀椤绘惡甯︽壒娆″彿锛屽惁鍒欐棤娉曠敓鎴愬簱瀛樹簨鍔�
+ if (Boolean.TRUE.equals(item.getIsBatchManaged())) {
+ boolean hasBatch = line.getBatchId() != null
+ || hasDetailBatch(itemReceiptDetailService.getItemReceiptDetailListByLineId(line.getId()));
+ if (!hasBatch) {
+ throw exception(WM_ITEM_RECEIPT_BATCH_REQUIRED, item.getCode(), item.getName());
+ }
}
}
+ }
+
+ private boolean hasDetailBatch(List<MesWmItemReceiptDetailDO> details) {
+ return details.stream().anyMatch(detail -> detail.getBatchId() != null);
}
@Override
@@ -247,28 +255,49 @@
* 鍥炲啓 ERP 閲囪喘璁㈠崟鐨勫叆搴撴暟閲�
*/
private void updateErpPurchaseOrderInCount(MesWmItemReceiptDO receipt) {
- // 鑾峰彇鍏ュ簱鍗曡
- List<MesWmItemReceiptLineDO> lines = itemReceiptLineService.getItemReceiptLineListByReceiptId(receipt.getId());
- if (CollUtil.isEmpty(lines)) {
- return;
+ // 1. 纭畾閲囪喘璁㈠崟 ID锛氫紭鍏堜粠鍏ュ簱鍗曞ご鍙栵紙浠庡埌璐ч�氱煡鍗曞甫鍏ワ級锛屽叾娆′粠琛屽弽鏌�
+ Long purchaseOrderId = receipt.getPurchaseOrderId();
+ if (purchaseOrderId == null && receipt.getNoticeId() != null) {
+ // 浠庡叧鑱旂殑鍒拌揣閫氱煡鍗曡幏鍙栭噰璐鍗� ID
+ MesWmArrivalNoticeDO notice = arrivalNoticeService.getArrivalNotice(receipt.getNoticeId());
+ if (notice != null) {
+ purchaseOrderId = notice.getPurchaseOrderId();
+ }
}
- // 鐢ㄤ簬瀛樺偍閲囪喘璁㈠崟 ID锛岄伩鍏嶉噸澶嶆洿鏂�
- Long purchaseOrderId = null;
- // 閬嶅巻琛岋紝鎸� purchaseOrderItemId 鏇存柊鍏ュ簱鏁伴噺
- for (MesWmItemReceiptLineDO line : lines) {
- if (line.getPurchaseOrderItemId() != null && line.getReceivedQuantity() != null) {
- purchaseOrderApi.updateOrderItemInCount(line.getPurchaseOrderItemId(), line.getReceivedQuantity());
- // 鑾峰彇閲囪喘璁㈠崟 ID锛堜粠绗竴涓湁鏁堢殑鏄庣粏椤硅幏鍙栵級
- if (purchaseOrderId == null) {
- cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderItemRespDTO itemDTO =
- purchaseOrderApi.getPurchaseOrderItem(line.getPurchaseOrderItemId()).getCheckedData();
- if (itemDTO != null && itemDTO.getOrderId() != null) {
- purchaseOrderId = itemDTO.getOrderId();
+
+ // 2. 鑾峰彇鍏ュ簱鍗曡锛屾寜 purchaseOrderItemId 鏇存柊鍏ュ簱鏁伴噺
+ List<MesWmItemReceiptLineDO> lines = itemReceiptLineService.getItemReceiptLineListByReceiptId(receipt.getId());
+ if (CollUtil.isNotEmpty(lines)) {
+ for (MesWmItemReceiptLineDO line : lines) {
+ if (line.getPurchaseOrderItemId() != null && line.getReceivedQuantity() != null) {
+ purchaseOrderApi.updateOrderItemInCount(line.getPurchaseOrderItemId(), line.getReceivedQuantity());
+ // 濡傛灉杩樻病鎷垮埌 purchaseOrderId锛屼粠鏄庣粏椤瑰弽鏌�
+ if (purchaseOrderId == null) {
+ cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderItemRespDTO itemDTO =
+ purchaseOrderApi.getPurchaseOrderItem(line.getPurchaseOrderItemId()).getCheckedData();
+ if (itemDTO != null && itemDTO.getOrderId() != null) {
+ purchaseOrderId = itemDTO.getOrderId();
+ }
+ }
+ }
+ }
+ } else if (receipt.getNoticeId() != null) {
+ // 鍏滃簳锛氬叆搴撹涓虹┖鏃讹紝浠庡埌璐ч�氱煡鍗曡鍥炲啓鍏ュ簱鏁伴噺
+ List<MesWmArrivalNoticeLineDO> noticeLines = arrivalNoticeLineService
+ .getArrivalNoticeLineListByNoticeId(receipt.getNoticeId());
+ for (MesWmArrivalNoticeLineDO noticeLine : noticeLines) {
+ if (noticeLine.getPurchaseOrderItemId() != null) {
+ // 浣跨敤鍚堟牸鏁伴噺锛堟湁 IQC 鏃朵负鍚堟牸鏁伴噺锛屽惁鍒欎负鍒拌揣鏁伴噺锛�
+ BigDecimal qty = noticeLine.getQualifiedQuantity() != null
+ ? noticeLine.getQualifiedQuantity() : noticeLine.getArrivalQuantity();
+ if (qty != null && qty.compareTo(BigDecimal.ZERO) > 0) {
+ purchaseOrderApi.updateOrderItemInCount(noticeLine.getPurchaseOrderItemId(), qty);
}
}
}
}
- // 鏇存柊閲囪喘璁㈠崟鐨勫叆搴撶姸鎬�
+
+ // 3. 鏇存柊閲囪喘璁㈠崟鐨勫叆搴撶姸鎬�
if (purchaseOrderId != null) {
purchaseOrderApi.updateOrderInStatus(purchaseOrderId);
}
@@ -394,6 +423,7 @@
receipt.setCode(code);
receipt.setName(notice.getName() + "鍏ュ簱鍗�");
receipt.setNoticeId(arrivalNoticeId);
+ receipt.setPurchaseOrderId(notice.getPurchaseOrderId());
receipt.setPurchaseOrderCode(notice.getPurchaseOrderCode());
receipt.setVendorId(notice.getVendorId());
receipt.setReceiptDate(java.time.LocalDateTime.now()); // 鍏ュ簱鏃堕棿涓哄綋鍓嶆椂闂�
--
Gitblit v1.9.3