From a82d847bbb39e2417d4c9773ebc4fc51fdb0b8fc Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 10 十一月 2026 13:31:31 +0800
Subject: [PATCH] feat(crm): 完善投标保证金与报价单关联及作废功能
---
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java | 90 ++++++++++++++++++++++++++------------------
1 files changed, 53 insertions(+), 37 deletions(-)
diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java
index c9889ad..af93ad3 100644
--- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java
+++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/message/BpmMessageServiceImpl.java
@@ -1,79 +1,95 @@
package cn.iocoder.yudao.module.bpm.service.message;
-import cn.iocoder.yudao.framework.web.config.WebProperties;
-import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert;
-import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum;
+import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskTimeoutReqDTO;
-import cn.iocoder.yudao.module.system.api.sms.SmsSendApi;
+import cn.iocoder.yudao.module.system.service.notify.NotifySendService;
+import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
+import org.flowable.engine.TaskService;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
-import jakarta.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
* BPM 娑堟伅 Service 瀹炵幇绫�
*
- * @author 鑺嬮亾婧愮爜
+ * 褰撳墠鍙繚鐣欍�愬緟鍔炰换鍔°�戠殑绔欏唴淇¢�氱煡锛氫换鍔″垎閰嶅埌鍏蜂綋瀹℃壒浜烘椂锛岀粰瀹℃壒浜哄彂涓�鏉$珯鍐呬俊锛堢郴缁熷彸涓婅灏忛搩閾涘彲瑙侊級銆�
+ * 鐭俊閫氱煡宸叉暣浣撳叧闂紝鍏朵綑鏂规硶浠呰褰曟棩蹇椼��
+ *
+ * @author 瓒呯骇绠$悊鍛�
*/
@Service
@Validated
@Slf4j
public class BpmMessageServiceImpl implements BpmMessageService {
- @Resource
- private SmsSendApi smsSendApi;
+ /**
+ * 寰呭姙浠诲姟绔欏唴淇℃ā鏉跨紪鐮侊紝瀵瑰簲 system_notify_template.code
+ */
+ private static final String TEMPLATE_CODE_TASK_ASSIGNED = "bpm_task_assigned";
+
+ /**
+ * 绔欏唴淇″弬鏁板�肩殑鏈�澶ч暱搴︺��
+ * 璇存槑锛歴ystem_notify_message.template_params 鍙湁 varchar(255)锛屽弬鏁板�艰繃闀夸細瀵艰嚧鎻掑叆澶辫触锛�
+ * 杩欓噷缁熶竴鎴柇锛屼繚璇佷竴鏉″緟鍔炲繀瀹氳兘鍙戝嚭鍘汇��
+ */
+ private static final int PARAM_VALUE_MAX_LENGTH = 60;
@Resource
- private WebProperties webProperties;
+ private NotifySendService notifySendService;
+
+ @Resource
+ private TaskService flowTaskService;
@Override
public void sendMessageWhenProcessInstanceApprove(BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO) {
- Map<String, Object> templateParams = new HashMap<>();
- templateParams.put("processInstanceName", reqDTO.getProcessInstanceName());
- templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
- smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getStartUserId(),
- BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsTemplateCode(), templateParams));
+ log.info("[sendMessageWhenProcessInstanceApprove][宸插叧闂煭淇¢�氱煡锛岃烦杩囧彂閫乚[processInstanceId: {}]", reqDTO.getProcessInstanceId());
}
@Override
public void sendMessageWhenProcessInstanceReject(BpmMessageSendWhenProcessInstanceRejectReqDTO reqDTO) {
- Map<String, Object> templateParams = new HashMap<>();
- templateParams.put("processInstanceName", reqDTO.getProcessInstanceName());
- templateParams.put("reason", reqDTO.getReason());
- templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
- smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getStartUserId(),
- BpmMessageEnum.PROCESS_INSTANCE_REJECT.getSmsTemplateCode(), templateParams));
+ log.info("[sendMessageWhenProcessInstanceReject][宸插叧闂煭淇¢�氱煡锛岃烦杩囧彂閫乚[processInstanceId: {}]", reqDTO.getProcessInstanceId());
}
+ /**
+ * 浠诲姟鍒嗛厤鍒板鎵逛汉鏃讹紝鍙戦�佺珯鍐呬俊閫氱煡銆�
+ *
+ * 璇存槑锛氭墍鏈夋祦绋嬭妭鐐圭殑寰呭姙浠诲姟閮戒細璧� BpmTaskServiceImpl#processTaskAssigned 鐨勬湰娆¤皟鐢紙鍔犵銆佽浆鍔炲悓鏍蜂細瑙﹀彂锛夛紝
+ * 鍥犳杩欓噷瀹炵幇涓�娆″嵆鍙鐩栧叏閮ㄦ祦绋嬬殑寰呭姙閫氱煡銆�
+ */
@Override
public void sendMessageWhenTaskAssigned(BpmMessageSendWhenTaskCreatedReqDTO reqDTO) {
- Map<String, Object> templateParams = new HashMap<>();
- templateParams.put("processInstanceName", reqDTO.getProcessInstanceName());
- templateParams.put("taskName", reqDTO.getTaskName());
- templateParams.put("startUserNickname", reqDTO.getStartUserNickname());
- templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
- smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getAssigneeUserId(),
- BpmMessageEnum.TASK_ASSIGNED.getSmsTemplateCode(), templateParams));
+ if (reqDTO.getAssigneeUserId() == null) {
+ return;
+ }
+ // 浠诲姟鍙兘鍦ㄥ悓涓�浜嬪姟閲屽凡琚嚜鍔ㄩ�氳繃銆佽嚜鍔ㄦ嫆缁濇垨鍙栨秷锛堝厤瀹℃壒寮�鍏炽�佹垨绛捐鎶㈠崰绛夛級锛屾鏃跺彂寰呭姙閫氱煡鍙細璇瀹℃壒浜�
+ if (flowTaskService.createTaskQuery().taskId(reqDTO.getTaskId()).count() == 0) {
+ log.info("[sendMessageWhenTaskAssigned][taskId({}) 宸蹭笉鍦ㄥ緟鍔炰腑锛岃烦杩囧緟鍔為�氱煡]", reqDTO.getTaskId());
+ return;
+ }
+ Map<String, Object> templateParams = new HashMap<>(4);
+ templateParams.put("processName", StrUtil.maxLength(reqDTO.getProcessInstanceName(), PARAM_VALUE_MAX_LENGTH));
+ templateParams.put("taskName", StrUtil.maxLength(reqDTO.getTaskName(), PARAM_VALUE_MAX_LENGTH));
+ templateParams.put("startUserName", StrUtil.maxLength(reqDTO.getStartUserNickname(), PARAM_VALUE_MAX_LENGTH));
+ try {
+ notifySendService.sendSingleNotifyToAdmin(reqDTO.getAssigneeUserId(), TEMPLATE_CODE_TASK_ASSIGNED, templateParams);
+ log.info("[sendMessageWhenTaskAssigned][宸插悜鐢ㄦ埛({})鍙戦�佸緟鍔炵珯鍐呬俊][taskId({}) taskName({})]",
+ reqDTO.getAssigneeUserId(), reqDTO.getTaskId(), reqDTO.getTaskName());
+ } catch (Exception ex) {
+ // 绔欏唴淇″彂閫佸け璐ヤ笉鑳藉奖鍝嶅鎵逛换鍔℃湰韬殑鍒涘缓锛屽惁鍒欐暣涓祦绋嬫彁浜や簨鍔′細琚洖婊�
+ log.error("[sendMessageWhenTaskAssigned][鍚戠敤鎴�({})鍙戦�佸緟鍔炵珯鍐呬俊澶辫触][taskId({})]",
+ reqDTO.getAssigneeUserId(), reqDTO.getTaskId(), ex);
+ }
}
@Override
public void sendMessageWhenTaskTimeout(BpmMessageSendWhenTaskTimeoutReqDTO reqDTO) {
- Map<String, Object> templateParams = new HashMap<>();
- templateParams.put("processInstanceName", reqDTO.getProcessInstanceName());
- templateParams.put("taskName", reqDTO.getTaskName());
- templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
- smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getAssigneeUserId(),
- BpmMessageEnum.TASK_TIMEOUT.getSmsTemplateCode(), templateParams));
- }
-
- private String getProcessInstanceDetailUrl(String taskId) {
- return webProperties.getAdminUi().getUrl() + "/bpm/process-instance/detail?id=" + taskId;
+ log.info("[sendMessageWhenTaskTimeout][宸插叧闂煭淇¢�氱煡锛岃烦杩囧彂閫乚[processInstanceId: {}]", reqDTO.getProcessInstanceId());
}
}
--
Gitblit v1.9.3