From 028c9d3b0fb263cceae2f4c3b3f1e2563dacf799 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Wed, 9 Jul 2025 16:44:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-4586)=20-=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=A3=80=E6=B5=8B=E5=91=8A=E8=AD=A6=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/NextNodePreCheckAlterDTO.java | 19 ++++++++ .../NextActivityConfigCheckJobHandler.java | 4 +- .../cn/axzo/workflow/core/listener/Alter.java | 2 +- .../workflow/core/util/DingTalkUtils.java | 21 +++++++++ .../workflow/server/alter/DingTalkAlter.java | 47 ++++++++++++++++--- 5 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/NextNodePreCheckAlterDTO.java diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/NextNodePreCheckAlterDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/NextNodePreCheckAlterDTO.java new file mode 100644 index 000000000..d921ac342 --- /dev/null +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/NextNodePreCheckAlterDTO.java @@ -0,0 +1,19 @@ +package cn.axzo.workflow.common.model; + +import lombok.Data; + +/** + * 节点检测告警对象 + * + * @author wangli + * @since 2024-09-13 11:37 + */ +@Data +public class NextNodePreCheckAlterDTO { + + private String processInstanceId; + + private String activityId; + + private String errorMsg; +} diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/job/NextActivityConfigCheckJobHandler.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/job/NextActivityConfigCheckJobHandler.java index d0695fec9..021b58251 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/job/NextActivityConfigCheckJobHandler.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/job/NextActivityConfigCheckJobHandler.java @@ -75,7 +75,7 @@ public class NextActivityConfigCheckJobHandler extends AbstractJobHandler implem } } - private String doCheck(JobEntity job, List flowElements, ProcessEngineConfigurationImpl processEngineConfiguration) { + private void doCheck(JobEntity job, List flowElements, ProcessEngineConfigurationImpl processEngineConfiguration) { AtomicReference checkActivityId = new AtomicReference<>(""); ListUtils.emptyIfNull(flowElements).stream() .filter(i -> i instanceof UserTask || i instanceof ReceiveTask || i instanceof ServiceTask) @@ -107,7 +107,7 @@ public class NextActivityConfigCheckJobHandler extends AbstractJobHandler implem }); checkActivityId.set(flowElement.getId()); }); - return checkActivityId.get(); + checkActivityId.get(); } public List approverSelect(String type, FlowElement flowElement, diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/Alter.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/Alter.java index 5ad691f57..2b6ac9afd 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/Alter.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/Alter.java @@ -10,5 +10,5 @@ import cn.axzo.workflow.common.model.dto.AlterDTO; */ public interface Alter { - void invoke(AlterDTO alterDTO); + void invoke(Object obj); } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/util/DingTalkUtils.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/util/DingTalkUtils.java index b95644ab3..10dce32de 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/util/DingTalkUtils.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/util/DingTalkUtils.java @@ -1,5 +1,6 @@ package cn.axzo.workflow.core.util; +import cn.axzo.workflow.common.model.NextNodePreCheckAlterDTO; import cn.axzo.workflow.common.model.dto.AlterDTO; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; @@ -167,6 +168,26 @@ public class DingTalkUtils { return sb.toString(); } + public static void sendDingTalkForNodePreCheck(String profile, NextNodePreCheckAlterDTO alterDTO, List alterMobiles) { + OapiRobotSendRequest request = new OapiRobotSendRequest(); + request.setMsgtype("markdown"); + OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown(); + markdown.setTitle("Notice 审批模板节点预检查告警, Env: " + profile); + markdown.setText("#### [" + profile + "]审批模板节点预检查告警\n" + + "> 相关信息: " + JSONUtil.toJsonStr(alterDTO) + "\n\n" + + "> 实例 ID:" + alterDTO.getProcessInstanceId() + "\n\n" + + "> 检测节点 ID:" + alterDTO.getActivityId() + "\n\n" + + "> ##### 错误信息:" + alterDTO.getErrorMsg() + "\n\n" + + mobiles(alterMobiles)); + request.setMarkdown(markdown); + OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); + at.setAtMobiles(alterMobiles); + at.setIsAtAll(false); + request.setAt(at); + sendDingTalk(request); + + } + public static void sendDingTalkForTransferToAdminError(String profile, String processInstanceId, String taskDefinitionKey, Object orgScopes, String targetUrl) { OapiRobotSendRequest request = new OapiRobotSendRequest(); request.setMsgtype("markdown"); diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/alter/DingTalkAlter.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/alter/DingTalkAlter.java index 3a268e62f..c3cbf20db 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/alter/DingTalkAlter.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/alter/DingTalkAlter.java @@ -5,6 +5,7 @@ import cn.axzo.riven.client.common.enums.DingTalkMsgTypeEnum; import cn.axzo.riven.client.feign.DingDingMsgApi; import cn.axzo.riven.client.model.SampleMarkdown; import cn.axzo.riven.client.req.DingDingSendRebootGroupMsgReq; +import cn.axzo.workflow.common.model.NextNodePreCheckAlterDTO; import cn.axzo.workflow.common.model.dto.AlterDTO; import cn.axzo.workflow.core.conf.SupportRefreshProperties; import cn.axzo.workflow.core.listener.Alter; @@ -39,13 +40,47 @@ public class DingTalkAlter implements Alter { private DingDingMsgApi dingDingMsgApi; @Override - public void invoke(AlterDTO alterDTO) { - log.info("send biz node alter : {}", JSON.toJSONString(alterDTO)); - if (Objects.equals(profile, "master")) { - DingTalkUtils.sendDingTalkForBizNodeAlter(profile, alterDTO, refreshProperties.getAlterMobiles()); - } else { - rivenDingtalk(alterDTO); + public void invoke(Object obj) { + log.info("send biz node alter : {}", JSON.toJSONString(obj)); + if (obj instanceof AlterDTO) { + AlterDTO alterDTO = (AlterDTO) obj; + if (Objects.equals(profile, "master")) { + DingTalkUtils.sendDingTalkForBizNodeAlter(profile, alterDTO, refreshProperties.getAlterMobiles()); + } else { + rivenDingtalk(alterDTO); + } } + if (obj instanceof NextNodePreCheckAlterDTO) { + NextNodePreCheckAlterDTO alterDTO = (NextNodePreCheckAlterDTO) obj; + if(Objects.equals(profile, "master")){ + DingTalkUtils.sendDingTalkForNodePreCheck(profile, alterDTO, refreshProperties.getAlterMobiles()); + } else { + rivenDingtalkForNodePreCheck(alterDTO); + } + } + } + + private void rivenDingtalkForNodePreCheck(NextNodePreCheckAlterDTO alterDTO) { + DingDingSendRebootGroupMsgReq req = new DingDingSendRebootGroupMsgReq(); + req.setDingDingScene("WORKFLOW_ENGINE_BIZNODE_ALTER"); + String processInstanceId = alterDTO.getProcessInstanceId(); + String title = "Notice 审批模板节点预检查告警, Env: " + profile; + String text = "#### [" + profile + "]审批模板节点预检查告警\n" + + "> 相关信息: " + JSONUtil.toJsonStr(alterDTO) + "\n\n" + + "> 实例 ID:" + alterDTO.getProcessInstanceId() + "\n\n" + + "> 检测节点 ID:" + alterDTO.getActivityId() + "\n\n" + + "> ##### 错误信息:" + alterDTO.getErrorMsg() + "\n\n" + + mobiles(refreshProperties.getAlterMobiles()); + SampleMarkdown markdown = new SampleMarkdown(title, text); + + JSONObject markdownJson = JSONObject.parseObject(markdown.toJson()); + JSONObject atMobiles = new JSONObject(); + atMobiles.put("atMobiles", refreshProperties.getAlterMobiles()); + markdownJson.put("at", atMobiles); + markdownJson.put("isAtAll", false); + req.setDingDingJson(markdownJson.toJSONString()); + req.setMsgType(DingTalkMsgTypeEnum.sampleMarkdown); + dingDingMsgApi.sendRebootGroupMsg(req); } private void rivenDingtalk(AlterDTO alterDTO) {