diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/content/OaContent.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/content/OaContent.java index 1a3ea8b3..213c832b 100644 --- a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/content/OaContent.java +++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/content/OaContent.java @@ -13,14 +13,14 @@ public class OaContent { /** * 钉钉 */ - public static final String DINGTALK = "dingding"; + public static final String DING_TALK = "ding_ding"; /** * 飞书 */ - public static final String BYTETALK = "feishu"; + public static final String BYTE_TALK = "byte_talk"; /** * 微信 */ - public static final String WETALK = "wetalk"; + public static final String WE_TALK = "we_talk"; } 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 cab47f42..ec52ab11 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 @@ -20,6 +20,9 @@ public class Request implements Comparable { // link类型的参数 private String messageUrl; + // news类型的参数 + private List articleList; + private List phoneList; // 用于@,唯一标识:userId/openId diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/WeTalkRequestArticle.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/WeTalkRequestArticle.java new file mode 100644 index 00000000..816d65db --- /dev/null +++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/WeTalkRequestArticle.java @@ -0,0 +1,27 @@ +package org.dromara.oa.comm.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 图文消息,一个图文消息支持1到8条图文 + * @author dongfeng + * 2024-03-23 19:25 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WeTalkRequestArticle { + // 标题,不超过128个字节,超过会自动截断 + private String title; + + // 描述,不超过512个字节,超过会自动截断 + private String description; + + // 点击后跳转的链接。 + private String url; + + // 图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068*455,小图150*150。 + private String picUrl; +} 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 544babca..f67d34fc 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 @@ -5,27 +5,27 @@ import lombok.Getter; @Getter public enum MessageType { // 钉钉支持类型 - DINGTALK_TEXT("text"), + DING_TALK_TEXT("text"), - DINGTALK_MARKDOWN("markdown"), + DING_TALK_MARKDOWN("markdown"), + + DING_TALK_LINK("link"), - DINGTALK_LINK("link"), // 飞书支持类型 - - BYTETALK_TEXT("text"), -// BYTETALK_MARKDOWN("markdown"), -// BYTETALK_LINK("link"), + BYTE_TALK_TEXT("text"), +// BYTE_TALK_MARKDOWN("markdown"), +// BYTE_TALK_LINK("link"), // 企业微信支持类型 - WETETALK_TEXT("text"), + WE_TALK_TEXT("text"), - WETETALK_MARKDOWN("markdown"); + WE_TALK_MARKDOWN("markdown"), + WE_TALK_NEWS("news"); //暂未支持 -// WETETALK_IMAGE("image"), -// WETETALK_NEWS("news"), -// WETETALK_FILE("file"), -// WETETALK_VOICE("voice"), -// WETETALK_TEMPLATE_CARD("template_card"); +// WE_TALK_IMAGE("image"), +// WE_TALK_FILE("file"), +// WE_TALK_VOICE("voice"), +// WE_TALK_TEMPLATE_CARD("template_card"); MessageType(String name) { this.name = name; diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/OaType.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/OaType.java index 6bf040e9..e399f10b 100644 --- a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/OaType.java +++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/OaType.java @@ -6,15 +6,15 @@ public enum OaType { /** * 钉钉 */ - DINGTALK("dingding", "https://oapi.dingtalk.com/robot/send?access_token=", true), + DING_TALK("ding_ding", "https://oapi.dingtalk.com/robot/send?access_token=", true), /** * 微信 */ - WETALK("wetalk", "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=", true), + WE_TALK("we_talk", "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=", true), /** * 飞书 */ - BYTETALK("feishu", "https://open.feishu.cn/open-apis/bot/v2/hook/", true), + BYTE_TALK("byte_talk", "https://open.feishu.cn/open-apis/bot/v2/hook/", true), ; @Getter diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkConfig.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkConfig.java index 7208bea8..b70fce51 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkConfig.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkConfig.java @@ -9,10 +9,10 @@ import org.dromara.oa.core.provider.config.OaBaseConfig; @EqualsAndHashCode(callSuper = true) public class ByteTalkConfig extends OaBaseConfig { - private final String requestUrl = OaType.BYTETALK.getUrl(); + private final String requestUrl = OaType.BYTE_TALK.getUrl(); @Override public String getSupplier() { - return OaType.BYTETALK.getType(); + return OaType.BYTE_TALK.getType(); } } \ No newline at end of file diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkFactory.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkFactory.java index 6b8416cc..9cad1099 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkFactory.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkFactory.java @@ -25,7 +25,7 @@ public class ByteTalkFactory extends OaAbstractProviderFactory { @Override public String getSupplier() { - return OaType.BYTETALK.getType(); + return OaType.BYTE_TALK.getType(); } @Override @@ -45,7 +45,7 @@ public class ByteTalkOaImpl extends AbstractOaBlend { StringBuilder webhook = new StringBuilder(); JSONObject message = null; ByteTalkConfig config = getConfig(); - webhook.append(BYTETALK.getUrl()); + webhook.append(BYTE_TALK.getUrl()); webhook.append(config.getTokenId()); long now = System.currentTimeMillis() / 1000; String sign = ByteTalkBuilder.byteTalkSign(config.getSign(), now); 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 70478499..05f24f15 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 @@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets; 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.BYTE_TALK_TEXT; /** * 飞书通知签名和信息构建 @@ -35,7 +35,7 @@ public class ByteTalkBuilder { public static JSONObject createByteTalkMessage(Request request, MessageType messageType, String sign, Long timestamp) { JSONObject message = new JSONObject(); List userIdList = request.getUserIdList(); - if (messageType == BYTETALK_TEXT) { + if (messageType == BYTE_TALK_TEXT) { message.set("msg_type", "text"); message.set("timestamp", timestamp); message.set("sign", sign); diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkConfig.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkConfig.java index 3d6d4530..1f5cb82c 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkConfig.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkConfig.java @@ -13,10 +13,10 @@ import org.dromara.oa.core.provider.config.OaBaseConfig; @Data @EqualsAndHashCode(callSuper = true) public class DingTalkConfig extends OaBaseConfig { - private final String requestUrl = OaType.DINGTALK.getUrl(); + private final String requestUrl = OaType.DING_TALK.getUrl(); @Override public String getSupplier() { - return OaType.DINGTALK.getType(); + return OaType.DING_TALK.getType(); } } diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkFactory.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkFactory.java index 64850761..a8d80996 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkFactory.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkFactory.java @@ -27,7 +27,7 @@ public class DingTalkFactory extends OaAbstractProviderFactory { StringBuilder webhook = new StringBuilder(); JSONObject message = null; DingTalkConfig config = getConfig(); - webhook.append(DINGTALK.getUrl()); + webhook.append(DING_TALK.getUrl()); webhook.append(config.getTokenId()); String sign = config.getSign(); if (!Objects.isNull(sign)) { 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 65ec55a0..3894a11f 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 @@ -15,9 +15,9 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Objects; -import static org.dromara.oa.comm.enums.MessageType.DINGTALK_LINK; -import static org.dromara.oa.comm.enums.MessageType.DINGTALK_MARKDOWN; -import static org.dromara.oa.comm.enums.MessageType.DINGTALK_TEXT; +import static org.dromara.oa.comm.enums.MessageType.DING_TALK_LINK; +import static org.dromara.oa.comm.enums.MessageType.DING_TALK_MARKDOWN; +import static org.dromara.oa.comm.enums.MessageType.DING_TALK_TEXT; /** * 钉钉通知签名和信息构建 @@ -46,18 +46,18 @@ public class DingTalkBuilder { JSONObject message = new JSONObject(); - if (messageType == DINGTALK_TEXT) { + if (messageType == DING_TALK_TEXT) { message.set("msgtype", "text"); JSONObject text = new JSONObject(); text.set("content", request.getContent()); message.set("text", text); - } else if (messageType == DINGTALK_MARKDOWN) { + } else if (messageType == DING_TALK_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 == DINGTALK_LINK) { + } else if (messageType == DING_TALK_LINK) { message.set("msgtype", "link"); JSONObject link = new JSONObject(); link.set("text", request.getContent()); diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkConfig.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkConfig.java index 88b045b8..f009bc25 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkConfig.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkConfig.java @@ -9,10 +9,10 @@ import org.dromara.oa.core.provider.config.OaBaseConfig; @EqualsAndHashCode(callSuper = true) public class WeTalkConfig extends OaBaseConfig { - private final String requestUrl = OaType.WETALK.getUrl(); + private final String requestUrl = OaType.WE_TALK.getUrl(); @Override public String getSupplier() { - return OaType.WETALK.getType(); + return OaType.WE_TALK.getType(); } } \ No newline at end of file diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkFactory.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkFactory.java index 0bfe4ec6..b7938963 100644 --- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkFactory.java +++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkFactory.java @@ -25,7 +25,7 @@ public class WeTalkFactory extends OaAbstractProviderFactory { @Override public String getSupplier() { - return OaType.WETALK.getType(); + return OaType.WE_TALK.getType(); } @Override public Response sender(Request request, MessageType messageType) { - if (Objects.isNull(request.getContent())) { - throw new OaException("消息体content不能为空"); - } + StringBuilder webhook = new StringBuilder(); JSONObject message = null; WeTalkConfig config = getConfig(); - webhook.append(WETALK.getUrl()); + webhook.append(WE_TALK.getUrl()); webhook.append(config.getTokenId()); message = WeTalkBuilder.createWeTalkMessage(request, messageType); String post; 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 273c6cea..c6586cac 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 @@ -5,13 +5,16 @@ 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.entity.WeTalkRequestArticle; import org.dromara.oa.comm.enums.MessageType; +import org.dromara.oa.comm.errors.OaException; 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.WE_TALK_MARKDOWN; +import static org.dromara.oa.comm.enums.MessageType.WE_TALK_NEWS; +import static org.dromara.oa.comm.enums.MessageType.WE_TALK_TEXT; /** @@ -30,7 +33,10 @@ public class WeTalkBuilder { List phoneList = request.getPhoneList(); StringBuilder content = new StringBuilder(); Boolean isNoticeAll = request.getIsNoticeAll(); - if (messageType == WETETALK_TEXT) { + if (messageType == WE_TALK_TEXT) { + if (Objects.isNull(request.getContent())) { + throw new OaException("消息体content不能为空"); + } message.set("msgtype", "text"); JSONObject text = new JSONObject(); text.set("content", request.getContent()); @@ -58,7 +64,10 @@ public class WeTalkBuilder { text.set("mentioned_mobile_list",phoneArray); } message.set("text", text); - } else if (messageType == WETETALK_MARKDOWN) { + } else if (messageType == WE_TALK_MARKDOWN) { + if (Objects.isNull(request.getContent())) { + throw new OaException("消息体content不能为空"); + } message.set("msgtype", "markdown"); if(!Objects.isNull(userIdList)){ userIdList.forEach(l -> content.append("<@").append(l).append(">")); @@ -69,8 +78,25 @@ public class WeTalkBuilder { markdown.set("content", content ); markdown.set("title", request.getTitle()); message.set("markdown", markdown); + } else if (messageType == WE_TALK_NEWS) { + message.set("msgtype", "news"); + JSONObject news = new JSONObject(); + JSONArray articles = new JSONArray(); + List articleList = request.getArticleList(); + if(!articleList.isEmpty()){ + articleList.forEach(article -> { + JSONObject articleJson = new JSONObject(); + articleJson.set("title", article.getTitle()); + articleJson.set("description", article.getDescription()); + articleJson.set("url", article.getUrl()); + articleJson.set("picurl", article.getPicUrl()); + articles.add(articleJson); + }); + } + news.set("articles", articles ); + message.set("news", news); } else { - log.error("输入的消息格式不对,message:"+messageType+"应该使用WETETALK前缀的消息类型"); + log.error("输入的消息格式不对,message:"+messageType+"应该使用WE_TALK前缀的消息类型"); } return message; }