diff --git a/sms4j-oa-plugin/sms4j-oa-api/src/main/java/org/dromara/oa/api/OaSender.java b/sms4j-oa-plugin/sms4j-oa-api/src/main/java/org/dromara/oa/api/OaSender.java index 34b54145..fd4d37f3 100644 --- a/sms4j-oa-plugin/sms4j-oa-api/src/main/java/org/dromara/oa/api/OaSender.java +++ b/sms4j-oa-plugin/sms4j-oa-api/src/main/java/org/dromara/oa/api/OaSender.java @@ -41,4 +41,6 @@ public interface OaSender { */ void senderAsyncByPriority(Request request, MessageType messageType); + + } diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/Request.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/Request.java index e774c593..cab47f42 100644 --- a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/Request.java +++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/Request.java @@ -22,6 +22,7 @@ public class Request implements Comparable { private List phoneList; + // 用于@,唯一标识:userId/openId private List userIdList; private List userNamesList; diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/MessageType.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/MessageType.java index 49dffc47..453e3ee3 100644 --- a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/MessageType.java +++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/MessageType.java @@ -1,14 +1,28 @@ package org.dromara.oa.comm.enums; public enum MessageType { - // text 类型 - TEXT("text"), + // 钉钉支持类型 + DINGTALK_TEXT("text"), - // md 格式 - MARKDOWN("markdown"), + DINGTALK_MARKDOWN("markdown"), - // link 格式 - LINK("link"); + DINGTALK_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) { this.name = name; diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/utils/ByteTalkBuilder.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/utils/ByteTalkBuilder.java index 74bc018f..04d24f6b 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/utils/ByteTalkBuilder.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/utils/ByteTalkBuilder.java @@ -1,6 +1,7 @@ package org.dromara.oa.core.byteTalk.utils; import cn.hutool.json.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.dromara.oa.comm.entity.Request; import org.dromara.oa.comm.enums.MessageType; @@ -11,14 +12,17 @@ import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Base64; 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 * 2023-10-19 13:07 */ +@Slf4j public class ByteTalkBuilder { 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) { JSONObject message = new JSONObject(); - if (messageType == TEXT) { + List userIdList = request.getUserIdList(); + if (messageType == BYTETALK_TEXT) { message.set("msg_type", "text"); message.set("timestamp", timestamp); message.set("sign", sign); StringBuilder content = new StringBuilder(); - List userNamesList = request.getUserNamesList(); Boolean isNoticeAll = request.getIsNoticeAll(); - if (isNoticeAll) { + boolean isNotice = false; + if (!Objects.isNull(isNoticeAll)&&isNoticeAll) { content.append("所有人"); + isNotice=true; + } + if(!Objects.isNull(userIdList)){ + userIdList.forEach(l -> content.append("")); + isNotice=true; + } + // 如果有@就进行消息体换行 + if(isNotice){ + content.append("\n"); } - userNamesList.forEach(l -> content.append("").append(l).append("")); content.append(request.getContent()); JSONObject text = new JSONObject(); text.set("text", content); message.set("content", text); + } else { + log.error("输入的消息格式不对,message:"+messageType+"应该使用BYTETALK前缀的消息类型"); } return message; } diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/service/DingTalkOaImpl.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/service/DingTalkOaImpl.java index 636f0123..42d124ec 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/service/DingTalkOaImpl.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/service/DingTalkOaImpl.java @@ -48,11 +48,6 @@ public class DingTalkOaImpl extends AbstractOaBlend { @Override public Response sender(Request request, MessageType messageType) { - try { - Thread.sleep(10000L); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } if (Objects.isNull(request.getContent())) { throw new OaException("消息体content不能为空",getConfig().getConfigId()); } diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/utils/DingTalkBuilder.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/utils/DingTalkBuilder.java index 59a750fe..31a8d4b8 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/utils/DingTalkBuilder.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/utils/DingTalkBuilder.java @@ -2,6 +2,7 @@ package org.dromara.oa.core.dingTalk.utils; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.dromara.oa.comm.entity.Request; import org.dromara.oa.comm.enums.MessageType; @@ -23,6 +24,7 @@ import static org.dromara.oa.comm.enums.MessageType.*; * @author dongfeng * 2023-10-19 13:07 */ +@Slf4j public class DingTalkBuilder { public static String sign(String secret) { Long timestamp = System.currentTimeMillis(); @@ -50,18 +52,18 @@ public class DingTalkBuilder { JSONObject message = new JSONObject(); - if (messageType == TEXT) { + if (messageType == DINGTALK_TEXT) { message.set("msgtype", "text"); JSONObject text = new JSONObject(); text.set("content", request.getContent()); message.set("text", text); - } else if (messageType == MARKDOWN) { + } else if (messageType == DINGTALK_MARKDOWN) { message.set("msgtype", "markdown"); JSONObject markdown = new JSONObject(); markdown.set("text", request.getContent()); markdown.set("title", request.getTitle()); message.set("markdown", markdown); - } else if (messageType == LINK) { + } else if (messageType == DINGTALK_LINK) { message.set("msgtype", "link"); JSONObject link = new JSONObject(); link.set("text", request.getContent()); @@ -69,6 +71,8 @@ public class DingTalkBuilder { link.set("picUrl", request.getPicUrl()); link.set("messageUrl", request.getMessageUrl()); message.set("link", link); + }else{ + log.error("输入的消息格式不对,message:"+messageType+"应该使用DINGTALK前缀的消息类型"); } diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/utils/WeTalkBuilder.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/utils/WeTalkBuilder.java index 93b5ff46..273c6cea 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/utils/WeTalkBuilder.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/utils/WeTalkBuilder.java @@ -1,54 +1,76 @@ package org.dromara.oa.core.weTalk.utils; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.dromara.oa.comm.entity.Request; import org.dromara.oa.comm.enums.MessageType; 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 * 2023-10-19 13:07 */ +@Slf4j public class WeTalkBuilder { public static JSONObject createWeTalkMessage(Request request, MessageType messageType) { JSONObject message = new JSONObject(); - if (messageType == TEXT) { + List userIdList = request.getUserIdList(); + List phoneList = request.getPhoneList(); + StringBuilder content = new StringBuilder(); + Boolean isNoticeAll = request.getIsNoticeAll(); + if (messageType == WETETALK_TEXT) { message.set("msgtype", "text"); JSONObject text = new JSONObject(); text.set("content", request.getContent()); boolean isContain = false; - List userIdList = request.getUserIdList(); - List phoneList = request.getPhoneList(); - Boolean isNoticeAll = request.getIsNoticeAll(); + if(isNoticeAll&&ObjectUtil.isNull(userIdList)&&ObjectUtil.isNull(phoneList)){ + JSONArray userIdArray = new JSONArray(); + userIdArray.add("@all"); + text.set("mentioned_list", userIdArray); + } if (!ObjectUtil.isNull(userIdList)) { + JSONArray userIdArray = new JSONArray(); + userIdList.forEach(userIdArray::set); if (isNoticeAll) { - userIdList.add("@all"); + userIdArray.add("@all"); isContain = true; } - text.set("mentioned_list", userIdList.toArray()); + text.set("mentioned_list", userIdArray); } if (!ObjectUtil.isNull(phoneList)) { + JSONArray phoneArray = new JSONArray(); + phoneList.forEach(phoneArray::set); 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); - } else if (messageType == MARKDOWN) { + } else if (messageType == WETETALK_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(); - markdown.set("content", request.getContent()); + markdown.set("content", content ); markdown.set("title", request.getTitle()); message.set("markdown", markdown); + } else { + log.error("输入的消息格式不对,message:"+messageType+"应该使用WETETALK前缀的消息类型"); } return message; } diff --git a/sms4j-spring-boot-example/src/test/java/org/dromara/sms4j/example/SmsOaTest.java b/sms4j-spring-boot-example/src/test/java/org/dromara/sms4j/example/SmsOaTest.java index 6c5ccfb6..6685268f 100644 --- a/sms4j-spring-boot-example/src/test/java/org/dromara/sms4j/example/SmsOaTest.java +++ b/sms4j-spring-boot-example/src/test/java/org/dromara/sms4j/example/SmsOaTest.java @@ -4,13 +4,16 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.oa.api.OaSender; import org.dromara.oa.comm.entity.Request; 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.provider.factory.OaFactory; +import org.dromara.oa.core.weTalk.config.WeTalkConfig; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.util.ArrayList; import java.util.Random; +import java.util.concurrent.CountDownLatch; @Slf4j @@ -49,22 +52,13 @@ public class SmsOaTest { Request request = new Request(); ArrayList phones = new ArrayList<>(); phones.add(DingTalkPHONE); - //测试text + // 支持通过手机号@ request.setPhoneList(phones); - request.setIsNoticeAll(false); + // 支持@all +// request.setIsNoticeAll(true); request.setContent("测试消息"); - request.setTitle("测试消息标题"); - // 异步发送方式 - 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("同步任务已执行完"); + alarm.sender(request, MessageType.DINGTALK_TEXT); } @@ -84,22 +78,12 @@ public class SmsOaTest { OaSender alarm = OaFactory.getSmsOaBlend(key); Request request = new Request(); - ArrayList phones = new ArrayList<>(); - phones.add(DingTalkPHONE); - request.setPhoneList(phones); + // 支持@all request.setIsNoticeAll(true); request.setContent("#### 杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n"); - request.setTitle("测试消息标题"); - alarm.senderAsync(request, MessageType.MARKDOWN); + request.setTitle("标题"); + 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); Request request = new Request(); - ArrayList phones = new ArrayList<>(); - phones.add(DingTalkPHONE); - // 测试link - request.setPhoneList(phones); - request.setIsNoticeAll(true); request.setContent("这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林"); 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.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 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); OaSender alarm = OaFactory.getSmsOaBlend(key); - + CountDownLatch user = new CountDownLatch(1); // 模拟10条不同优先级的消息 - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 3; i++) { 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(); - ArrayList phones = new ArrayList<>(); - phones.add(DingTalkPHONE); - request.setPhoneList(phones); - request.setIsNoticeAll(false); - request.setPriority(priority); - request.setTitle("优先级为" + priority); - //测试-1-TEXT -// request.setContent("该消息优先级为"+ priority); -// alarm.senderAsyncByPriority(request, MessageType.TEXT); -// System.out.println("优先级为"+priority+"的异步任务已提交"); + Request request = new Request(); + ArrayList phones = new ArrayList<>(); + phones.add(DingTalkPHONE); + request.setPhoneList(phones); + request.setIsNoticeAll(false); + request.setPriority(priority); + //测试-1-TEXT + request.setContent("该消息优先级为" + priority); + alarm.senderAsyncByPriority(request, MessageType.DINGTALK_TEXT); + System.out.println("优先级为" + priority + "的异步任务已提交"); - // 测试-2-MARKDOWN -// request.setContent("该消息优先级为"+ priority+"\n#### ++杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\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 + "的异步任务已提交"); + }).start(); } - 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(); ArrayList phones = new ArrayList<>(); phones.add(DingTalkPHONE); + // 支持通过手机号@ request.setPhoneList(phones); - request.setIsNoticeAll(false); - request.setContent("HertzBeat"); - request.setTitle("HertzBeat"); - alarm.sender(request, MessageType.TEXT); + // 支持@all +// request.setIsNoticeAll(true); + request.setContent("测试消息"); + 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 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 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 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 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 userIdList = new ArrayList<>(); + userIdList.add(WeTalkUSERID); + request.setUserIdList(userIdList); + + request.setContent( + "实时新增用户反馈132例,请相关同事注意。\n" + + ">类型:用户反馈" + + ">普通用户反馈:117例" + + ">VIP用户反馈:15例"); + + 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 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 phones = new ArrayList<>(); + phones.add(WeTalkPHONE); + request.setPhoneList(phones); + request.setIsNoticeAll(true); + request.setContent("SMS4JContent"); + alarm.sender(request, MessageType.WETETALK_TEXT); } }