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