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 55f0c5e92..10459654b 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 @@ -10,7 +10,6 @@ import com.dingtalk.api.response.OapiRobotSendResponse; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.slf4j.MDC; -import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.HashMap; @@ -134,9 +133,9 @@ public class DingTalkUtils { } public static void sendDingTalkForBizNodeAlter(String profile, AlterDTO alterDTO, List atMobiles) { - if (CollectionUtils.isEmpty(atMobiles)) { - return; - } +// if (CollectionUtils.isEmpty(atMobiles)) { +// return; +// } String processInstanceId = alterDTO.getProcessInstanceId(); OapiRobotSendRequest request = new OapiRobotSendRequest(); request.setMsgtype("markdown"); @@ -145,13 +144,25 @@ public class DingTalkUtils { markdown.setText("#### [" + profile + "]业务节点长时间停止\n" + "> 节点相关信息: " + JSONUtil.toJsonStr(alterDTO) + "\n\n" + "> ##### [点击查看审批日志](" + getWebUrl(profile) + "/#/workflow/examples?processInstanceId=" + processInstanceId + ") \n\n" + - "> ##### 提示:如果以上地址提示未登录,请在对应环境 OMS 系统登录后并点击审批管理的功能后,再使用。或者复制实例 ID 到 OMS 中手动查询"); + "> ##### 提示:如果以上地址提示未登录,请在对应环境 OMS 系统登录后并点击审批管理的功能后,再使用。或者复制实例 ID 到 OMS 中手动查询 \n\n" + + mobiles(atMobiles)); request.setMarkdown(markdown); OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); at.setAtMobiles(atMobiles); at.setIsAtAll(false); request.setAt(at); -// sendDingTalk(request); + sendDingTalk(request); + } + + public static String mobiles(List atMobiles) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < atMobiles.size(); i++) { + if (i != 0) { + sb.append(","); + } + sb.append("@").append(atMobiles.get(i)); + } + return sb.toString(); } public static void sendDingTalkForTransferToAdminError(String profile, String processInstanceId, String taskDefinitionKey, Object orgScopes) { diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/WorkflowEngineApplication.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/WorkflowEngineApplication.java index 24b5cfc84..9be380a26 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/WorkflowEngineApplication.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/WorkflowEngineApplication.java @@ -13,7 +13,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @MapperScan({"cn.axzo.workflow.core.**.mapper", "cn.axzo.workflow.admin.**.mapper"}) @ComponentScan({"cn.axzo.workflow"}) -@EnableFeignClients("cn.axzo.oss") +@EnableFeignClients({"cn.axzo.oss", "cn.axzo.riven.client.feign"}) @SpringBootApplication(exclude = RabbitAutoConfiguration.class) @EnableTransactionManagement @EnableCaching 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 fb758849e..3a268e62f 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 @@ -1,14 +1,25 @@ package cn.axzo.workflow.server.alter; import cn.axzo.framework.jackson.utility.JSON; +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.dto.AlterDTO; import cn.axzo.workflow.core.conf.SupportRefreshProperties; import cn.axzo.workflow.core.listener.Alter; +import cn.axzo.workflow.core.util.DingTalkUtils; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.Objects; + +import static cn.axzo.workflow.core.util.DingTalkUtils.getWebUrl; +import static cn.axzo.workflow.core.util.DingTalkUtils.mobiles; /** * 钉钉告警实现 @@ -24,11 +35,39 @@ public class DingTalkAlter implements Alter { private String profile; @Resource private SupportRefreshProperties refreshProperties; + @Resource + private DingDingMsgApi dingDingMsgApi; @Override public void invoke(AlterDTO alterDTO) { log.info("send biz node alter : {}", JSON.toJSONString(alterDTO)); -// DingTalkUtils.sendDingTalkForBizNodeAlter(profile, alterDTO, refreshProperties.getAlterMobiles()); + if (Objects.equals(profile, "master")) { + DingTalkUtils.sendDingTalkForBizNodeAlter(profile, alterDTO, refreshProperties.getAlterMobiles()); + } else { + rivenDingtalk(alterDTO); + } + } + + private void rivenDingtalk(AlterDTO 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" + + "> ##### [点击查看审批日志](" + getWebUrl(profile) + "/#/workflow/examples?processInstanceId=" + processInstanceId + ") \n\n" + + "> ##### 提示:如果以上地址提示未登录,请在对应环境 OMS 系统登录后并点击审批管理的功能后,再使用。或者复制实例 ID 到 OMS 中手动查询 \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); } }