From 4d15fa8051884869c5b612d0641508874cc71811 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 29 七月 2026 11:04:15 +0800
Subject: [PATCH] feat(erp): 集成SRM供应商服务并优化ERP模块功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java |   62 +++++++++++++++++++++----------
 1 files changed, 42 insertions(+), 20 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..aa30333 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
@@ -26,7 +26,7 @@
 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.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;
@@ -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());
@@ -247,28 +247,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 +415,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