From 8e4eee5ad4d74e1a4e6ab4de3a9c28000700dce0 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 03 十一月 2026 13:49:04 +0800
Subject: [PATCH] 修复采购退货页面 ERP 模块已禁用报错

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java |   72 +++++++++++++++++++++++++++++++++++-
 1 files changed, 70 insertions(+), 2 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 4403d20..19abddd 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
@@ -2,6 +2,7 @@
 
 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.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@@ -27,6 +28,8 @@
 import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
 import cn.iocoder.yudao.module.erp.api.purchase.ErpPurchaseOrderApi;
 import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi;
+import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
+import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
 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;
@@ -39,9 +42,13 @@
 import lombok.extern.slf4j.Slf4j;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
@@ -85,6 +92,9 @@
 
     @Resource
     private MdmItemApi mdmItemApi;
+
+    @Resource
+    private NotifyMessageSendApi notifyMessageSendApi;
 
     @Override
     public Long createItemReceipt(MesWmItemReceiptSaveReqVO createReqVO) {
@@ -240,13 +250,70 @@
         }
 
         // 5. 鍥炲啓 ERP 閲囪喘璁㈠崟鐨勫叆搴撴暟閲�
-        updateErpPurchaseOrderInCount(receipt);
+        Long purchaseOrderId = updateErpPurchaseOrderInCount(receipt);
+
+        // 6. 闇�姹� 5.2鈶狅細閲囪喘鍏ュ簱瀹屾垚鍚庤Е鍙戜粯娆炬祦绋嬶紙绔欏唴淇℃彁閱掕储鍔$敓鎴愪粯娆惧崟锛�
+        notifyPaymentRemind(receipt, purchaseOrderId);
+    }
+
+    /** 浠樻鎻愰啋绔欏唴淇℃ā鏉跨紪鐮� */
+    private static final String PAYMENT_REMIND_TEMPLATE_CODE = "purchase_receipt_payment_remind";
+
+    /**
+     * 閲囪喘鍏ュ簱瀹屾垚鍚庯紝鎻愰啋鐩稿叧浜哄嚟閲囪喘璁㈠崟鐢熸垚浠樻鍗�
+     *
+     * <p>闇�姹� 5.2鈶狅細閲囪喘鍏ュ簱纭鏀惰揣鍚庤Е鍙戜粯娆炬祦绋嬨�傜郴缁熶笉鑷姩鍒涘缓浠樻鍗曗�斺��
+     * ERP 浠樻鍗曞繀椤诲叧鑱旀潵绁紙鍙戠エ锛夛紝鍏ュ簱鏃堕�氬父灏氭湭鍙栫エ锛岃嚜鍔ㄥ缓鍗曚細鐢熸垚鏃犳晥鍗曟嵁锛�
+     * 鍥犳杩欓噷浠ョ珯鍐呬俊鏂瑰紡鎻愰啋锛岀敱璐㈠姟鍦ㄣ�屼粯娆惧崟銆嶉〉闈㈡寜鏉ョエ琛ュ綍銆�</p>
+     */
+    private void notifyPaymentRemind(MesWmItemReceiptDO receipt, Long purchaseOrderId) {
+        try {
+            // 1. 閲囪喘璁㈠崟鍙蜂笌璁㈠崟閲戦
+            String purchaseOrderCode = receipt.getPurchaseOrderCode();
+            BigDecimal totalPrice = null;
+            if (purchaseOrderId != null) {
+                cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderRespDTO order =
+                        purchaseOrderApi.getPurchaseOrder(purchaseOrderId).getCheckedData();
+                if (order != null) {
+                    if (StrUtil.isBlank(purchaseOrderCode)) {
+                        purchaseOrderCode = order.getNo();
+                    }
+                    totalPrice = order.getTotalPrice();
+                }
+            }
+            Map<String, Object> params = new HashMap<>();
+            params.put("receiptCode", receipt.getCode());
+            params.put("purchaseOrderCode", StrUtil.isNotBlank(purchaseOrderCode) ? purchaseOrderCode : "-");
+            params.put("totalPrice", totalPrice != null
+                    ? totalPrice.setScale(2, RoundingMode.HALF_UP).toPlainString() : "-");
+            // 2. 鎺ユ敹浜猴細鍏ュ簱鍗曞垱寤轰汉锛堜粨绠★級+ 绠$悊鍛橈紝鍘婚噸鍚庨�愪釜鍙戦��
+            Set<Long> recipientIds = new LinkedHashSet<>();
+            if (StrUtil.isNotBlank(receipt.getCreator())) {
+                try {
+                    recipientIds.add(Long.parseLong(receipt.getCreator()));
+                } catch (NumberFormatException ignored) {
+                    log.warn("閲囪喘鍏ュ簱鍗�({}) 鍒涘缓浜�({}) 涓嶆槸鍚堟硶鐢ㄦ埛缂栧彿锛屼粯娆炬彁閱掑皢鍙彂缁欑鐞嗗憳",
+                            receipt.getId(), receipt.getCreator());
+                }
+            }
+            recipientIds.add(1L);
+            for (Long userId : recipientIds) {
+                NotifySendSingleToUserReqDTO message = new NotifySendSingleToUserReqDTO();
+                message.setUserId(userId);
+                message.setTemplateCode(PAYMENT_REMIND_TEMPLATE_CODE);
+                message.setTemplateParams(params);
+                notifyMessageSendApi.sendSingleMessageToAdmin(message);
+            }
+        } catch (Exception ex) {
+            // 鎻愰啋澶辫触涓嶅奖鍝嶅叆搴撲笟鍔�
+            log.warn("閲囪喘鍏ュ簱鍗�({}) 浠樻鎻愰啋鍙戦�佸け璐�", receipt.getId(), ex);
+        }
     }
 
     /**
      * 鍥炲啓 ERP 閲囪喘璁㈠崟鐨勫叆搴撴暟閲�
      */
-    private void updateErpPurchaseOrderInCount(MesWmItemReceiptDO receipt) {
+    private Long updateErpPurchaseOrderInCount(MesWmItemReceiptDO receipt) {
         // 1. 纭畾閲囪喘璁㈠崟 ID锛氫紭鍏堜粠鍏ュ簱鍗曞ご鍙栵紙浠庡埌璐ч�氱煡鍗曞甫鍏ワ級锛屽叾娆′粠琛屽弽鏌�
         Long purchaseOrderId = receipt.getPurchaseOrderId();
         if (purchaseOrderId == null && receipt.getNoticeId() != null) {
@@ -293,6 +360,7 @@
         if (purchaseOrderId != null) {
             purchaseOrderApi.updateOrderInStatus(purchaseOrderId);
         }
+        return purchaseOrderId;
     }
 
     private void createTransactionList(MesWmItemReceiptDO receipt) {

--
Gitblit v1.9.3