refactor(sj_map_reduce): 重构钉钉消息发送工具类

This commit is contained in:
xlsea 2024-07-05 11:48:58 +08:00
parent fa635db300
commit eb6e60447e
3 changed files with 43 additions and 46 deletions

View File

@ -22,11 +22,9 @@
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<revision>1.1.0-beta2</revision>
<dingding-talk.version>1.0.0</dingding-talk.version>
<netty-all.version>4.1.94.Final</netty-all.version>
<hutool-all.version>5.8.25</hutool-all.version>
<mybatis-plus.version>3.5.7</mybatis-plus.version>
<alibaba-dingtalk.version>2.0.0</alibaba-dingtalk.version>
<guava-retrying.version>2.0.0</guava-retrying.version>
<tinylog.version>1.3.6</tinylog.version>
<tinylog2.version>2.6.2</tinylog2.version>
@ -136,12 +134,6 @@
<artifactId>snail-job-client-job-core</artifactId>
<version>${revision}</version>
</dependency>
<!-- dingding talk sdk -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
<version>${alibaba-dingtalk.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>

View File

@ -31,20 +31,6 @@
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>

View File

@ -2,15 +2,17 @@ package com.aizuda.snailjob.common.core.util;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.aizuda.snailjob.common.core.constant.SystemConstants;
import com.aizuda.snailjob.common.log.SnailJobLog;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author: opensnail
@ -22,28 +24,29 @@ public class DingDingUtils {
public static final String atLabel = "@{0}";
/**
* 组装OapiRobotSendRequest
* 组装 DingTalkRequest
*
* @param title
* @param text
* @return
* @param title 标题
* @param text 内容
* @return DingTalkRequest
*/
public static OapiRobotSendRequest buildSendRequest(String title, String text, List<String> ats) {
OapiRobotSendRequest request = new OapiRobotSendRequest();
request.setMsgtype("markdown");
OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
markdown.setTitle(title);
// 防止文本过长钉钉限流目前最大为4000
markdown.setText(StrUtil.sub(getAtText(ats, text, atLabel), 0, 4000));
request.setMarkdown(markdown);
public static String buildSendRequest(String title, String text, List<String> ats) {
Map<String, Object> message = new HashMap<>();
message.put("msgtype", "markdown");
Map<String, Object> markdown = new HashMap<>();
markdown.put("text", StrUtil.sub(getAtText(ats, text, atLabel), 0, 4000));
markdown.put("title", title);
message.put("markdown", markdown);
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
at.setAtMobiles(ats);
request.setAt(at);
// 处理提到的人
Map<String, Object> at = new HashMap<>();
at.put("atMobiles", ats);
at.put("isAtAll", true);
if (CollUtil.isNotEmpty(ats)) {
at.setIsAtAll(ats.stream().map(String::toLowerCase).anyMatch(SystemConstants.AT_ALL::equals));
at.put("isAtAll", ats.stream().map(String::toLowerCase).anyMatch(SystemConstants.AT_ALL::equals));
}
return request;
message.put("at", at);
return JsonUtil.toJsonString(message);
}
public static String getAtText(List<String> ats, String text, String atLabel) {
@ -57,18 +60,28 @@ public class DingDingUtils {
}
/**
* @param request
* @param request DingTalkRequest
*/
public static boolean sendMessage(OapiRobotSendRequest request, String url) {
public static boolean sendMessage(String request, String url) {
try {
if (StrUtil.isBlank(url)) {
return false;
}
DingTalkClient client = new DefaultDingTalkClient(url);
client.execute(request);
// 发送POST请求
HttpResponse response = HttpRequest.post(url)
.headerMap(getHeaders(), true)
.body(request)
.execute();
String body = response.body();
JsonNode bodyJson = JsonUtil.toJson(body);
int errCode = bodyJson.get("errcode").asInt();
if (errCode != 0) {
SnailJobLog.LOCAL.error("dingDingProcessNotify: 钉钉发送失败, 错误码:{}, 错误信息:{}", errCode, bodyJson.get("errmsg").asText());
return false;
}
return true;
} catch (Exception e) {
SnailJobLog.LOCAL.error("dingDingProcessNotify", e);
@ -77,4 +90,10 @@ public class DingDingUtils {
return false;
}
public static Map<String, String> getHeaders() {
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
return headers;
}
}