mirror of
https://gitee.com/dromara/sms4j.git
synced 2025-12-06 08:58:38 +08:00
bug:1、修复企业微信@all重复的bug.2、完善飞书和企业微信的测试案例.3、重新调整消息类型,更加明确.
This commit is contained in:
parent
df36fb802a
commit
ad28a7ac67
@ -41,4 +41,6 @@ public interface OaSender {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void senderAsyncByPriority(Request request, MessageType messageType);
|
void senderAsyncByPriority(Request request, MessageType messageType);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,6 +22,7 @@ public class Request implements Comparable<Request> {
|
|||||||
|
|
||||||
private List<String> phoneList;
|
private List<String> phoneList;
|
||||||
|
|
||||||
|
// 用于@,唯一标识:userId/openId
|
||||||
private List<String> userIdList;
|
private List<String> userIdList;
|
||||||
|
|
||||||
private List<String> userNamesList;
|
private List<String> userNamesList;
|
||||||
|
|||||||
@ -1,14 +1,28 @@
|
|||||||
package org.dromara.oa.comm.enums;
|
package org.dromara.oa.comm.enums;
|
||||||
|
|
||||||
public enum MessageType {
|
public enum MessageType {
|
||||||
// text 类型
|
// 钉钉支持类型
|
||||||
TEXT("text"),
|
DINGTALK_TEXT("text"),
|
||||||
|
|
||||||
// md 格式
|
DINGTALK_MARKDOWN("markdown"),
|
||||||
MARKDOWN("markdown"),
|
|
||||||
|
|
||||||
// link 格式
|
DINGTALK_LINK("link"),
|
||||||
LINK("link");
|
// 飞书支持类型
|
||||||
|
|
||||||
|
BYTETALK_TEXT("text"),
|
||||||
|
// BYTETALK_MARKDOWN("markdown"),
|
||||||
|
// BYTETALK_LINK("link"),
|
||||||
|
|
||||||
|
// 企业微信支持类型
|
||||||
|
WETETALK_TEXT("text"),
|
||||||
|
|
||||||
|
WETETALK_MARKDOWN("markdown");
|
||||||
|
//暂未支持
|
||||||
|
// WETETALK_IMAGE("image"),
|
||||||
|
// WETETALK_NEWS("news"),
|
||||||
|
// WETETALK_FILE("file"),
|
||||||
|
// WETETALK_VOICE("voice"),
|
||||||
|
// WETETALK_TEMPLATE_CARD("template_card");
|
||||||
|
|
||||||
MessageType(String name) {
|
MessageType(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package org.dromara.oa.core.byteTalk.utils;
|
package org.dromara.oa.core.byteTalk.utils;
|
||||||
|
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.oa.comm.entity.Request;
|
import org.dromara.oa.comm.entity.Request;
|
||||||
import org.dromara.oa.comm.enums.MessageType;
|
import org.dromara.oa.comm.enums.MessageType;
|
||||||
|
|
||||||
@ -11,14 +12,17 @@ import java.security.InvalidKeyException;
|
|||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static org.dromara.oa.comm.enums.MessageType.BYTETALK_TEXT;
|
||||||
|
|
||||||
import static org.dromara.oa.comm.enums.MessageType.TEXT;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 飞书通知签名和信息构建
|
* 飞书通知签名和信息构建
|
||||||
* @author dongfeng
|
* @author dongfeng
|
||||||
* 2023-10-19 13:07
|
* 2023-10-19 13:07
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
public class ByteTalkBuilder {
|
public class ByteTalkBuilder {
|
||||||
|
|
||||||
public static String byteTalkSign(String secret, Long timestamp) {
|
public static String byteTalkSign(String secret, Long timestamp) {
|
||||||
@ -39,21 +43,32 @@ public class ByteTalkBuilder {
|
|||||||
|
|
||||||
public static JSONObject createByteTalkMessage(Request request, MessageType messageType, String sign, Long timestamp) {
|
public static JSONObject createByteTalkMessage(Request request, MessageType messageType, String sign, Long timestamp) {
|
||||||
JSONObject message = new JSONObject();
|
JSONObject message = new JSONObject();
|
||||||
if (messageType == TEXT) {
|
List<String> userIdList = request.getUserIdList();
|
||||||
|
if (messageType == BYTETALK_TEXT) {
|
||||||
message.set("msg_type", "text");
|
message.set("msg_type", "text");
|
||||||
message.set("timestamp", timestamp);
|
message.set("timestamp", timestamp);
|
||||||
message.set("sign", sign);
|
message.set("sign", sign);
|
||||||
StringBuilder content = new StringBuilder();
|
StringBuilder content = new StringBuilder();
|
||||||
List<String> userNamesList = request.getUserNamesList();
|
|
||||||
Boolean isNoticeAll = request.getIsNoticeAll();
|
Boolean isNoticeAll = request.getIsNoticeAll();
|
||||||
if (isNoticeAll) {
|
boolean isNotice = false;
|
||||||
|
if (!Objects.isNull(isNoticeAll)&&isNoticeAll) {
|
||||||
content.append("<at user_id=\"all\">所有人</at>");
|
content.append("<at user_id=\"all\">所有人</at>");
|
||||||
|
isNotice=true;
|
||||||
|
}
|
||||||
|
if(!Objects.isNull(userIdList)){
|
||||||
|
userIdList.forEach(l -> content.append("<at user_id=\"").append(l).append("\"></at>"));
|
||||||
|
isNotice=true;
|
||||||
|
}
|
||||||
|
// 如果有@就进行消息体换行
|
||||||
|
if(isNotice){
|
||||||
|
content.append("\n");
|
||||||
}
|
}
|
||||||
userNamesList.forEach(l -> content.append("<at user_id=\"ou_xxx\">").append(l).append("</at>"));
|
|
||||||
content.append(request.getContent());
|
content.append(request.getContent());
|
||||||
JSONObject text = new JSONObject();
|
JSONObject text = new JSONObject();
|
||||||
text.set("text", content);
|
text.set("text", content);
|
||||||
message.set("content", text);
|
message.set("content", text);
|
||||||
|
} else {
|
||||||
|
log.error("输入的消息格式不对,message:"+messageType+"应该使用BYTETALK前缀的消息类型");
|
||||||
}
|
}
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,11 +48,6 @@ public class DingTalkOaImpl extends AbstractOaBlend<DingTalkConfig> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response sender(Request request, MessageType messageType) {
|
public Response sender(Request request, MessageType messageType) {
|
||||||
try {
|
|
||||||
Thread.sleep(10000L);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
if (Objects.isNull(request.getContent())) {
|
if (Objects.isNull(request.getContent())) {
|
||||||
throw new OaException("消息体content不能为空",getConfig().getConfigId());
|
throw new OaException("消息体content不能为空",getConfig().getConfigId());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package org.dromara.oa.core.dingTalk.utils;
|
|||||||
|
|
||||||
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONArray;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.oa.comm.entity.Request;
|
import org.dromara.oa.comm.entity.Request;
|
||||||
import org.dromara.oa.comm.enums.MessageType;
|
import org.dromara.oa.comm.enums.MessageType;
|
||||||
|
|
||||||
@ -23,6 +24,7 @@ import static org.dromara.oa.comm.enums.MessageType.*;
|
|||||||
* @author dongfeng
|
* @author dongfeng
|
||||||
* 2023-10-19 13:07
|
* 2023-10-19 13:07
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
public class DingTalkBuilder {
|
public class DingTalkBuilder {
|
||||||
public static String sign(String secret) {
|
public static String sign(String secret) {
|
||||||
Long timestamp = System.currentTimeMillis();
|
Long timestamp = System.currentTimeMillis();
|
||||||
@ -50,18 +52,18 @@ public class DingTalkBuilder {
|
|||||||
|
|
||||||
|
|
||||||
JSONObject message = new JSONObject();
|
JSONObject message = new JSONObject();
|
||||||
if (messageType == TEXT) {
|
if (messageType == DINGTALK_TEXT) {
|
||||||
message.set("msgtype", "text");
|
message.set("msgtype", "text");
|
||||||
JSONObject text = new JSONObject();
|
JSONObject text = new JSONObject();
|
||||||
text.set("content", request.getContent());
|
text.set("content", request.getContent());
|
||||||
message.set("text", text);
|
message.set("text", text);
|
||||||
} else if (messageType == MARKDOWN) {
|
} else if (messageType == DINGTALK_MARKDOWN) {
|
||||||
message.set("msgtype", "markdown");
|
message.set("msgtype", "markdown");
|
||||||
JSONObject markdown = new JSONObject();
|
JSONObject markdown = new JSONObject();
|
||||||
markdown.set("text", request.getContent());
|
markdown.set("text", request.getContent());
|
||||||
markdown.set("title", request.getTitle());
|
markdown.set("title", request.getTitle());
|
||||||
message.set("markdown", markdown);
|
message.set("markdown", markdown);
|
||||||
} else if (messageType == LINK) {
|
} else if (messageType == DINGTALK_LINK) {
|
||||||
message.set("msgtype", "link");
|
message.set("msgtype", "link");
|
||||||
JSONObject link = new JSONObject();
|
JSONObject link = new JSONObject();
|
||||||
link.set("text", request.getContent());
|
link.set("text", request.getContent());
|
||||||
@ -69,6 +71,8 @@ public class DingTalkBuilder {
|
|||||||
link.set("picUrl", request.getPicUrl());
|
link.set("picUrl", request.getPicUrl());
|
||||||
link.set("messageUrl", request.getMessageUrl());
|
link.set("messageUrl", request.getMessageUrl());
|
||||||
message.set("link", link);
|
message.set("link", link);
|
||||||
|
}else{
|
||||||
|
log.error("输入的消息格式不对,message:"+messageType+"应该使用DINGTALK前缀的消息类型");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,54 +1,76 @@
|
|||||||
package org.dromara.oa.core.weTalk.utils;
|
package org.dromara.oa.core.weTalk.utils;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.json.JSONArray;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.oa.comm.entity.Request;
|
import org.dromara.oa.comm.entity.Request;
|
||||||
import org.dromara.oa.comm.enums.MessageType;
|
import org.dromara.oa.comm.enums.MessageType;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static org.dromara.oa.comm.enums.MessageType.WETETALK_MARKDOWN;
|
||||||
|
import static org.dromara.oa.comm.enums.MessageType.WETETALK_TEXT;
|
||||||
|
|
||||||
import static org.dromara.oa.comm.enums.MessageType.MARKDOWN;
|
|
||||||
import static org.dromara.oa.comm.enums.MessageType.TEXT;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 企业微信--签名和消息构建
|
* 企业微信--签名和消息构建
|
||||||
* @author dongfeng
|
* @author dongfeng
|
||||||
* 2023-10-19 13:07
|
* 2023-10-19 13:07
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
public class WeTalkBuilder {
|
public class WeTalkBuilder {
|
||||||
|
|
||||||
|
|
||||||
public static JSONObject createWeTalkMessage(Request request, MessageType messageType) {
|
public static JSONObject createWeTalkMessage(Request request, MessageType messageType) {
|
||||||
|
|
||||||
JSONObject message = new JSONObject();
|
JSONObject message = new JSONObject();
|
||||||
if (messageType == TEXT) {
|
List<String> userIdList = request.getUserIdList();
|
||||||
|
List<String> phoneList = request.getPhoneList();
|
||||||
|
StringBuilder content = new StringBuilder();
|
||||||
|
Boolean isNoticeAll = request.getIsNoticeAll();
|
||||||
|
if (messageType == WETETALK_TEXT) {
|
||||||
message.set("msgtype", "text");
|
message.set("msgtype", "text");
|
||||||
JSONObject text = new JSONObject();
|
JSONObject text = new JSONObject();
|
||||||
text.set("content", request.getContent());
|
text.set("content", request.getContent());
|
||||||
boolean isContain = false;
|
boolean isContain = false;
|
||||||
List<String> userIdList = request.getUserIdList();
|
if(isNoticeAll&&ObjectUtil.isNull(userIdList)&&ObjectUtil.isNull(phoneList)){
|
||||||
List<String> phoneList = request.getPhoneList();
|
JSONArray userIdArray = new JSONArray();
|
||||||
Boolean isNoticeAll = request.getIsNoticeAll();
|
userIdArray.add("@all");
|
||||||
|
text.set("mentioned_list", userIdArray);
|
||||||
|
}
|
||||||
if (!ObjectUtil.isNull(userIdList)) {
|
if (!ObjectUtil.isNull(userIdList)) {
|
||||||
|
JSONArray userIdArray = new JSONArray();
|
||||||
|
userIdList.forEach(userIdArray::set);
|
||||||
if (isNoticeAll) {
|
if (isNoticeAll) {
|
||||||
userIdList.add("@all");
|
userIdArray.add("@all");
|
||||||
isContain = true;
|
isContain = true;
|
||||||
}
|
}
|
||||||
text.set("mentioned_list", userIdList.toArray());
|
text.set("mentioned_list", userIdArray);
|
||||||
}
|
}
|
||||||
if (!ObjectUtil.isNull(phoneList)) {
|
if (!ObjectUtil.isNull(phoneList)) {
|
||||||
|
JSONArray phoneArray = new JSONArray();
|
||||||
|
phoneList.forEach(phoneArray::set);
|
||||||
if (isNoticeAll && !isContain) {
|
if (isNoticeAll && !isContain) {
|
||||||
phoneList.add("@all");
|
phoneArray.add("@all");
|
||||||
}
|
}
|
||||||
text.set("mentioned_mobile_list", phoneList.toArray());
|
text.set("mentioned_mobile_list",phoneArray);
|
||||||
}
|
}
|
||||||
message.set("text", text);
|
message.set("text", text);
|
||||||
} else if (messageType == MARKDOWN) {
|
} else if (messageType == WETETALK_MARKDOWN) {
|
||||||
message.set("msgtype", "markdown");
|
message.set("msgtype", "markdown");
|
||||||
|
if(!Objects.isNull(userIdList)){
|
||||||
|
userIdList.forEach(l -> content.append("<@").append(l).append(">"));
|
||||||
|
content.append("\n");
|
||||||
|
}
|
||||||
|
content.append(request.getContent());
|
||||||
JSONObject markdown = new JSONObject();
|
JSONObject markdown = new JSONObject();
|
||||||
markdown.set("content", request.getContent());
|
markdown.set("content", content );
|
||||||
markdown.set("title", request.getTitle());
|
markdown.set("title", request.getTitle());
|
||||||
message.set("markdown", markdown);
|
message.set("markdown", markdown);
|
||||||
|
} else {
|
||||||
|
log.error("输入的消息格式不对,message:"+messageType+"应该使用WETETALK前缀的消息类型");
|
||||||
}
|
}
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,13 +4,16 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.dromara.oa.api.OaSender;
|
import org.dromara.oa.api.OaSender;
|
||||||
import org.dromara.oa.comm.entity.Request;
|
import org.dromara.oa.comm.entity.Request;
|
||||||
import org.dromara.oa.comm.enums.MessageType;
|
import org.dromara.oa.comm.enums.MessageType;
|
||||||
|
import org.dromara.oa.core.byteTalk.config.ByteTalkConfig;
|
||||||
import org.dromara.oa.core.dingTalk.config.DingTalkConfig;
|
import org.dromara.oa.core.dingTalk.config.DingTalkConfig;
|
||||||
import org.dromara.oa.core.provider.factory.OaFactory;
|
import org.dromara.oa.core.provider.factory.OaFactory;
|
||||||
|
import org.dromara.oa.core.weTalk.config.WeTalkConfig;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -49,22 +52,13 @@ public class SmsOaTest {
|
|||||||
Request request = new Request();
|
Request request = new Request();
|
||||||
ArrayList<String> phones = new ArrayList<>();
|
ArrayList<String> phones = new ArrayList<>();
|
||||||
phones.add(DingTalkPHONE);
|
phones.add(DingTalkPHONE);
|
||||||
//测试text
|
// 支持通过手机号@
|
||||||
request.setPhoneList(phones);
|
request.setPhoneList(phones);
|
||||||
request.setIsNoticeAll(false);
|
// 支持@all
|
||||||
|
// request.setIsNoticeAll(true);
|
||||||
request.setContent("测试消息");
|
request.setContent("测试消息");
|
||||||
request.setTitle("测试消息标题");
|
|
||||||
|
|
||||||
// 异步发送方式
|
alarm.sender(request, MessageType.DINGTALK_TEXT);
|
||||||
alarm.senderAsync(request, MessageType.TEXT);
|
|
||||||
alarm.senderAsync(request, MessageType.TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
|
|
||||||
|
|
||||||
System.out.println("异步任务已全部提交");
|
|
||||||
System.out.println("下面是同步任务");
|
|
||||||
|
|
||||||
alarm.sender(request, MessageType.TEXT);
|
|
||||||
|
|
||||||
System.out.println("同步任务已执行完");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,22 +78,12 @@ public class SmsOaTest {
|
|||||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||||
|
|
||||||
Request request = new Request();
|
Request request = new Request();
|
||||||
ArrayList<String> phones = new ArrayList<>();
|
// 支持@all
|
||||||
phones.add(DingTalkPHONE);
|
|
||||||
request.setPhoneList(phones);
|
|
||||||
request.setIsNoticeAll(true);
|
request.setIsNoticeAll(true);
|
||||||
request.setContent("#### 杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > \n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n");
|
request.setContent("#### 杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > \n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n");
|
||||||
request.setTitle("测试消息标题");
|
request.setTitle("标题");
|
||||||
alarm.senderAsync(request, MessageType.MARKDOWN);
|
alarm.sender(request, MessageType.DINGTALK_MARKDOWN);
|
||||||
|
|
||||||
alarm.senderAsync(request, MessageType.MARKDOWN, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
|
|
||||||
|
|
||||||
System.out.println("异步任务已全部提交");
|
|
||||||
System.out.println("下面是同步任务");
|
|
||||||
|
|
||||||
alarm.sender(request, MessageType.MARKDOWN);
|
|
||||||
|
|
||||||
System.out.println("同步任务已执行完");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -118,28 +102,51 @@ public class SmsOaTest {
|
|||||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||||
|
|
||||||
Request request = new Request();
|
Request request = new Request();
|
||||||
ArrayList<String> phones = new ArrayList<>();
|
|
||||||
phones.add(DingTalkPHONE);
|
|
||||||
// 测试link
|
|
||||||
request.setPhoneList(phones);
|
|
||||||
request.setIsNoticeAll(true);
|
|
||||||
request.setContent("这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林");
|
request.setContent("这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林");
|
||||||
request.setTitle("点击跳转到钉钉");
|
request.setTitle("点击跳转到钉钉");
|
||||||
request.setMessageUrl("https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI");
|
request.setMessageUrl("https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI");
|
||||||
request.setPicUrl("https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png");
|
request.setPicUrl("https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png");
|
||||||
|
|
||||||
alarm.senderAsync(request, MessageType.LINK);
|
alarm.sender(request, MessageType.DINGTALK_LINK);
|
||||||
|
|
||||||
alarm.senderAsync(request, MessageType.LINK, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
|
|
||||||
|
|
||||||
System.out.println("异步任务已全部提交");
|
|
||||||
System.out.println("下面是同步任务");
|
|
||||||
|
|
||||||
alarm.sender(request, MessageType.LINK);
|
|
||||||
|
|
||||||
System.out.println("同步任务已执行完");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DingTalk的异步消息发送
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void oaDingTalkAsyncTest() {
|
||||||
|
String key = "oaDingTalk";
|
||||||
|
DingTalkConfig dingTalkConfig = new DingTalkConfig();
|
||||||
|
dingTalkConfig.setConfigId(key);
|
||||||
|
dingTalkConfig.setSign(DingTalkSIGN);
|
||||||
|
dingTalkConfig.setTokenId(DingTalkTOKENID);
|
||||||
|
|
||||||
|
// 根据配置创建服务实例并注册
|
||||||
|
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
||||||
|
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||||
|
|
||||||
|
|
||||||
|
Request request = new Request();
|
||||||
|
ArrayList<String> phones = new ArrayList<>();
|
||||||
|
phones.add(DingTalkPHONE);
|
||||||
|
// 支持通过手机号@
|
||||||
|
request.setPhoneList(phones);
|
||||||
|
// 支持@all
|
||||||
|
// request.setIsNoticeAll(true);
|
||||||
|
request.setContent("测试消息");
|
||||||
|
|
||||||
|
// 异步发送方式
|
||||||
|
alarm.senderAsync(request, MessageType.DINGTALK_TEXT);
|
||||||
|
alarm.senderAsync(request, MessageType.DINGTALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
|
||||||
|
|
||||||
|
try {
|
||||||
|
Thread.sleep(3000L);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 异步优先级尽可能优先级高的消息先发送,但是获取响应会受网络影响
|
* 异步优先级尽可能优先级高的消息先发送,但是获取响应会受网络影响
|
||||||
*/
|
*/
|
||||||
@ -154,39 +161,40 @@ public class SmsOaTest {
|
|||||||
// 根据配置创建服务实例并注册
|
// 根据配置创建服务实例并注册
|
||||||
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
||||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||||
|
CountDownLatch user = new CountDownLatch(1);
|
||||||
// 模拟10条不同优先级的消息
|
// 模拟10条不同优先级的消息
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
int priority = random.nextInt(10);
|
new Thread(() -> {
|
||||||
|
int priority = random.nextInt(10);
|
||||||
|
try {
|
||||||
|
// 等待十个请求
|
||||||
|
System.out.println(priority + "等待");
|
||||||
|
user.await();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
Request request = new Request();
|
Request request = new Request();
|
||||||
ArrayList<String> phones = new ArrayList<>();
|
ArrayList<String> phones = new ArrayList<>();
|
||||||
phones.add(DingTalkPHONE);
|
phones.add(DingTalkPHONE);
|
||||||
request.setPhoneList(phones);
|
request.setPhoneList(phones);
|
||||||
request.setIsNoticeAll(false);
|
request.setIsNoticeAll(false);
|
||||||
request.setPriority(priority);
|
request.setPriority(priority);
|
||||||
request.setTitle("优先级为" + priority);
|
//测试-1-TEXT
|
||||||
//测试-1-TEXT
|
request.setContent("该消息优先级为" + priority);
|
||||||
// request.setContent("该消息优先级为"+ priority);
|
alarm.senderAsyncByPriority(request, MessageType.DINGTALK_TEXT);
|
||||||
// alarm.senderAsyncByPriority(request, MessageType.TEXT);
|
System.out.println("优先级为" + priority + "的异步任务已提交");
|
||||||
// System.out.println("优先级为"+priority+"的异步任务已提交");
|
|
||||||
|
|
||||||
// 测试-2-MARKDOWN
|
}).start();
|
||||||
// request.setContent("该消息优先级为"+ priority+"\n#### ++杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > \n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n");
|
|
||||||
// alarm.senderAsyncByPriority(request, MessageType.MARKDOWN);
|
|
||||||
|
|
||||||
// 测试-3-LINK
|
|
||||||
request.setContent("该消息优先级为" + priority + "这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林");
|
|
||||||
request.setMessageUrl("https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI");
|
|
||||||
request.setPicUrl("https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png");
|
|
||||||
|
|
||||||
// 发送
|
|
||||||
alarm.senderAsyncByPriority(request, MessageType.LINK);
|
|
||||||
|
|
||||||
System.out.println("优先级为" + priority + "的异步任务已提交");
|
|
||||||
}
|
}
|
||||||
while (true){
|
System.out.println("开始模拟");
|
||||||
|
user.countDown();
|
||||||
|
// 防止主线程挂掉
|
||||||
|
try {
|
||||||
|
Thread.sleep(2000L);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,11 +205,213 @@ public class SmsOaTest {
|
|||||||
Request request = new Request();
|
Request request = new Request();
|
||||||
ArrayList<String> phones = new ArrayList<>();
|
ArrayList<String> phones = new ArrayList<>();
|
||||||
phones.add(DingTalkPHONE);
|
phones.add(DingTalkPHONE);
|
||||||
|
// 支持通过手机号@
|
||||||
request.setPhoneList(phones);
|
request.setPhoneList(phones);
|
||||||
request.setIsNoticeAll(false);
|
// 支持@all
|
||||||
request.setContent("HertzBeat");
|
// request.setIsNoticeAll(true);
|
||||||
request.setTitle("HertzBeat");
|
request.setContent("测试消息");
|
||||||
alarm.sender(request, MessageType.TEXT);
|
alarm.sender(request, MessageType.DINGTALK_TEXT);
|
||||||
|
}
|
||||||
|
//***********************ByteTalk-Test************************//
|
||||||
|
/**
|
||||||
|
* 填测试手机号
|
||||||
|
*/
|
||||||
|
private static final String ByteTalkUSERID = "";
|
||||||
|
/**
|
||||||
|
* 填access_token
|
||||||
|
*/
|
||||||
|
private static final String ByteTalkTOKENID = "";
|
||||||
|
/**
|
||||||
|
* 填secret
|
||||||
|
*/
|
||||||
|
private static final String ByteTalkSIGN = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ByteTalk的Text测试
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void oaByteTalkText() {
|
||||||
|
String key = "oaByteTalk";
|
||||||
|
ByteTalkConfig byteTalkConfig = new ByteTalkConfig();
|
||||||
|
byteTalkConfig.setConfigId(key);
|
||||||
|
byteTalkConfig.setTokenId(ByteTalkTOKENID);
|
||||||
|
byteTalkConfig.setSign(ByteTalkSIGN);
|
||||||
|
// 根据配置创建服务实例并注册
|
||||||
|
OaFactory.createAndRegisterOaSender(byteTalkConfig);
|
||||||
|
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||||
|
|
||||||
|
Request request = new Request();
|
||||||
|
ArrayList<String> userIds = new ArrayList<>();
|
||||||
|
userIds.add(ByteTalkUSERID);
|
||||||
|
//测试text
|
||||||
|
request.setUserIdList(userIds);
|
||||||
|
request.setIsNoticeAll(true);
|
||||||
|
request.setContent("测试消息");
|
||||||
|
alarm.sender(request, MessageType.BYTETALK_TEXT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ByteTalk的异步消息发送
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void oaByteTalkAsyncText() {
|
||||||
|
String key = "oaByteTalk";
|
||||||
|
ByteTalkConfig byteTalkConfig = new ByteTalkConfig();
|
||||||
|
byteTalkConfig.setConfigId(key);
|
||||||
|
byteTalkConfig.setTokenId(ByteTalkTOKENID);
|
||||||
|
byteTalkConfig.setSign(ByteTalkSIGN);
|
||||||
|
// 根据配置创建服务实例并注册
|
||||||
|
OaFactory.createAndRegisterOaSender(byteTalkConfig);
|
||||||
|
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||||
|
|
||||||
|
Request request = new Request();
|
||||||
|
ArrayList<String> userIds = new ArrayList<>();
|
||||||
|
userIds.add(ByteTalkUSERID);
|
||||||
|
//测试text
|
||||||
|
request.setUserIdList(userIds);
|
||||||
|
request.setIsNoticeAll(true);
|
||||||
|
request.setContent("测试消息");
|
||||||
|
|
||||||
|
alarm.senderAsync(request, MessageType.BYTETALK_TEXT);
|
||||||
|
alarm.senderAsync(request, MessageType.BYTETALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
|
||||||
|
|
||||||
|
// 防止主线程挂掉
|
||||||
|
try {
|
||||||
|
Thread.sleep(3000L);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void oaByteTalkByYamlTest() {
|
||||||
|
String configId = "oaByteTalkByYaml";
|
||||||
|
OaSender alarm = OaFactory.getSmsOaBlend(configId);
|
||||||
|
Request request = new Request();
|
||||||
|
ArrayList<String> userIds = new ArrayList<>();
|
||||||
|
userIds.add(ByteTalkUSERID);
|
||||||
|
//测试text
|
||||||
|
request.setUserIdList(userIds);
|
||||||
|
request.setIsNoticeAll(true);
|
||||||
|
request.setContent("测试消息");
|
||||||
|
alarm.sender(request, MessageType.BYTETALK_TEXT);
|
||||||
|
}
|
||||||
|
//***********************WeTalk-Test************************//
|
||||||
|
/**
|
||||||
|
* 填测试手机号
|
||||||
|
*/
|
||||||
|
private static final String WeTalkPHONE = "";
|
||||||
|
/**
|
||||||
|
* 填测试UserId
|
||||||
|
*/
|
||||||
|
private static final String WeTalkUSERID = "";
|
||||||
|
/**
|
||||||
|
* 填access_token
|
||||||
|
*/
|
||||||
|
private static final String WeTalkTOKENID = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WeTalk的Text测试
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void oaWeTalkText() {
|
||||||
|
String key = "oaWeTalk";
|
||||||
|
WeTalkConfig WeTalkConfig = new WeTalkConfig();
|
||||||
|
WeTalkConfig.setConfigId(key);
|
||||||
|
WeTalkConfig.setTokenId(WeTalkTOKENID);
|
||||||
|
|
||||||
|
// 根据配置创建服务实例并注册
|
||||||
|
OaFactory.createAndRegisterOaSender(WeTalkConfig);
|
||||||
|
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||||
|
|
||||||
|
Request request = new Request();
|
||||||
|
ArrayList<String> phones = new ArrayList<>();
|
||||||
|
phones.add(WeTalkPHONE);
|
||||||
|
//测试text
|
||||||
|
request.setPhoneList(phones);
|
||||||
|
request.setIsNoticeAll(true);
|
||||||
|
request.setContent("测试消息");
|
||||||
|
|
||||||
|
alarm.sender(request, MessageType.WETETALK_TEXT);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WeTalk的Markdown测试--不支持@all,只能通过userId进行
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void oaWeTalkMarkdown() {
|
||||||
|
String key = "oaWeTalk";
|
||||||
|
WeTalkConfig WeTalkConfig = new WeTalkConfig();
|
||||||
|
WeTalkConfig.setConfigId(key);
|
||||||
|
WeTalkConfig.setTokenId(WeTalkTOKENID);
|
||||||
|
|
||||||
|
// 根据配置创建服务实例并注册
|
||||||
|
OaFactory.createAndRegisterOaSender(WeTalkConfig);
|
||||||
|
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||||
|
|
||||||
|
Request request = new Request();
|
||||||
|
// 管理后台-通讯录 账号就是userid,或者通过接口获取部门列表 再获取部门成员详情获取userid
|
||||||
|
ArrayList<String> userIdList = new ArrayList<>();
|
||||||
|
userIdList.add(WeTalkUSERID);
|
||||||
|
request.setUserIdList(userIdList);
|
||||||
|
|
||||||
|
request.setContent(
|
||||||
|
"实时新增用户反馈<font color=\"warning\">132例</font>,请相关同事注意。\n" +
|
||||||
|
">类型:<font color=\"comment\">用户反馈</font>" +
|
||||||
|
">普通用户反馈:<font color=\"comment\">117例</font>" +
|
||||||
|
">VIP用户反馈:<font color=\"comment\">15例</font>");
|
||||||
|
|
||||||
|
alarm.sender(request, MessageType.WETETALK_MARKDOWN);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WeTalk的异步消息发送
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void oaWeTalkAsyncText() {
|
||||||
|
String key = "oaWeTalk";
|
||||||
|
WeTalkConfig WeTalkConfig = new WeTalkConfig();
|
||||||
|
WeTalkConfig.setConfigId(key);
|
||||||
|
WeTalkConfig.setTokenId(WeTalkTOKENID);
|
||||||
|
|
||||||
|
// 根据配置创建服务实例并注册
|
||||||
|
OaFactory.createAndRegisterOaSender(WeTalkConfig);
|
||||||
|
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||||
|
|
||||||
|
Request request = new Request();
|
||||||
|
ArrayList<String> phones = new ArrayList<>();
|
||||||
|
phones.add(WeTalkPHONE);
|
||||||
|
//测试text
|
||||||
|
request.setPhoneList(phones);
|
||||||
|
request.setIsNoticeAll(true);
|
||||||
|
request.setContent("测试消息");
|
||||||
|
|
||||||
|
// 异步发送方式
|
||||||
|
alarm.senderAsync(request, MessageType.WETETALK_TEXT);
|
||||||
|
alarm.senderAsync(request, MessageType.WETETALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
|
||||||
|
|
||||||
|
// 防止主线程挂掉
|
||||||
|
try {
|
||||||
|
Thread.sleep(3000L);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void oaWeTalkByYamlTest() {
|
||||||
|
String configId = "oaWeTalkByYaml";
|
||||||
|
OaSender alarm = OaFactory.getSmsOaBlend(configId);
|
||||||
|
Request request = new Request();
|
||||||
|
ArrayList<String> phones = new ArrayList<>();
|
||||||
|
phones.add(WeTalkPHONE);
|
||||||
|
request.setPhoneList(phones);
|
||||||
|
request.setIsNoticeAll(true);
|
||||||
|
request.setContent("SMS4JContent");
|
||||||
|
alarm.sender(request, MessageType.WETETALK_TEXT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user