設(shè)計門戶網(wǎng)站站內(nèi)seo和站外seo區(qū)別
項目開發(fā)中需要用到釘釘機器人發(fā)送任務(wù)狀態(tài),本來想單獨做一個功能就好,但是想著公司用到釘釘機器人發(fā)送項目挺多的。所以把這個釘釘機器人抽離成一個組件發(fā)布到企業(yè)maven倉庫,這樣可以給其他同事用提高工作效率。
1.目錄結(jié)構(gòu)
2.用抽象類(abstract)規(guī)范釘釘發(fā)送消息模版
2.1創(chuàng)建一個抽象類
public abstract class BaseMessage {public BaseMessage() {initMsg();}protected String msgType;public String getMsgType() {return msgType;}protected abstract void initMsg();/*** 返回Message對象組裝出來的Map對象,供后續(xù)JSON序列化** @return Map*/public abstract JSONObject toMessageMap();
}
2.2釘釘(link,text,markdown)類型創(chuàng)建實體繼承BaseMessgae
釘釘api文檔 添加鏈接描述
LinkMessage類
@Data
public class LinkMessage extends BaseMessage {/*** 消息簡介*/private String text;/*** 消息標(biāo)題*/private String title;/*** 封面圖片URL*/private String picUrl;/*** 消息跳轉(zhuǎn)URL*/private String messageUrl;public LinkMessage() {}public LinkMessage(String title, String text, String messageUrl) {this.text = text;this.title = title;this.messageUrl = messageUrl;}public LinkMessage(String title, String text, String messageUrl, String picUrl) {this.text = text;this.title = title;this.picUrl = picUrl;this.messageUrl = messageUrl;}@Overrideprotected void initMsg() {this.msgType = DingTalkMsgEnum.LINK.getType();}@Overridepublic JSONObject toMessageMap() {if (StringUtils.isEmpty(this.text) || !DingTalkMsgEnum.LINK.getType().equals(this.msgType)) {throw new IllegalArgumentException("please check the necessary parameters!");}JSONObject resultMap = JSONUtil.createObj();resultMap.put("msgtype", this.msgType);JSONObject linkItems = JSONUtil.createObj();linkItems.put("title", this.title);linkItems.put("text", this.text);linkItems.put("picUrl", this.picUrl);linkItems.put("messageUrl", this.messageUrl);resultMap.put("link", linkItems);return resultMap;}
}TextMessage 類
@Data
public class TextMessage extends BaseMessage {/*** 文本消息的具體內(nèi)容*/private String content;/*** 可以通過群成員的綁定手機號來艾特具體的群成員*/private String[] atMobiles;/*** 是否艾特所有人* 也可以設(shè)置isAtAll=true來艾特所有人*/private boolean isAtAll;public TextMessage() {}public TextMessage(String content) {this.content = content;}public TextMessage(String content, String[] atMobiles) {this.content = content;this.atMobiles = atMobiles;}public TextMessage(String content, boolean isAtAll) {this.content = content;this.isAtAll = isAtAll;}@Overrideprotected void initMsg() {this.msgType = DingTalkMsgEnum.TEXT.getType();}@Overridepublic JSONObject toMessageMap() {if (StringUtils.isEmpty(this.content) || !DingTalkMsgEnum.TEXT.getType().equals(this.msgType)) {throw new IllegalArgumentException("please check the necessary parameters!");}JSONObject resultMap = JSONUtil.createObj();resultMap.put("msgtype", this.msgType);JSONObject textItems = JSONUtil.createObj();textItems.put("content", this.content);resultMap.put("text", textItems);JSONObject atItems = JSONUtil.createObj();atItems.put("atMobiles", this.atMobiles);atItems.put("isAtAll", this.isAtAll);resultMap.put("at", atItems);return resultMap;}
}MarkdownMessage
@Data
public class MarkdownMessage extends BaseMessage {/*** 消息簡介*/private String text;/*** 消息標(biāo)題*/private String title;/*** 可以通過群成員的綁定手機號來艾特具體的群成員*/private String[] atMobiles;/*** 是否艾特所有人* 也可以設(shè)置isAtAll=true來艾特所有人*/private boolean isAtAll;public MarkdownMessage() {}public MarkdownMessage(String title, String text) {this.text = text;this.title = title;}public MarkdownMessage(String title, String text, String[] atMobiles) {this.text = text;this.title = title;this.atMobiles = atMobiles;}public MarkdownMessage(String title, String text, boolean isAtAll) {this.text = text;this.title = title;this.isAtAll = isAtAll;}@Overrideprotected void initMsg() {this.msgType = DingTalkMsgEnum.MARKDOWN.getType();}@Overridepublic JSONObject toMessageMap() {if (StringUtils.isEmpty(this.text) || !DingTalkMsgEnum.MARKDOWN.getType().equals(this.msgType)) {throw new IllegalArgumentException("please check the necessary parameters!");}JSONObject resultMap = JSONUtil.createObj();resultMap.put("msgtype", this.msgType);JSONObject markdownItems = JSONUtil.createObj();markdownItems.put("title", this.title);markdownItems.put("text", this.text);resultMap.put("markdown", markdownItems);JSONObject atItems = JSONUtil.createObj();atItems.put("atMobiles", this.atMobiles);atItems.put("isAtAll", this.isAtAll);resultMap.put("at", atItems);return resultMap;}
}
3. 釘釘異常錯誤類
public class DingTalkResponse {/*** 錯誤碼*/private Integer errcode;/*** 錯誤信息*/private String errmsg;public Integer getErrcode() {return errcode;}public void setErrcode(Integer errcode) {this.errcode = errcode;}public String getErrmsg() {return errmsg;}public void setErrmsg(String errmsg) {this.errmsg = errmsg;}@Overridepublic String toString() {return "DingTalkResponse{" +"errcode=" + errcode +", errmsg='" + errmsg + '\'' +'}';}
}
4.釘釘類型枚舉
@Getter
public enum DingTalkMsgEnum {LINK("link"),TEXT("text"),MARKDOWN("markdown");private final String type;DingTalkMsgEnum(String type) {this.type = type;}}
5.實現(xiàn)類方法
public class DingTalkRobotClient {/*** 釘釘機器人WebHook地址的access_token*/private String accessToken;private static String DING_TALK_PATH = "https://oapi.dingtalk.com/robot/send?access_token=ACCESS_TOKEN";public DingTalkRobotClient(String token) {if(StringUtils.isEmpty(token)){throw new ServiceException("accessToken獲取失敗!");}this.accessToken = token;}private DingTalkResponse sendMessage(BaseMessage message) {String result = HttpUtil.post(DING_TALK_PATH.replace("ACCESS_TOKEN", this.accessToken), message.toMessageMap().toString());DingTalkResponse dingTalkResponse = JSON.parseObject(result, DingTalkResponse.class);// 對DingTalkResponse為空情況做異常封裝if (dingTalkResponse == null) {throw new ServiceException("請求釘釘報錯!");}if (dingTalkResponse.getErrcode() != 0) {throw new ServiceException(String.format("錯誤碼:%s;%s", dingTalkResponse.getErrcode(), dingTalkResponse.getErrmsg()));}return dingTalkResponse;}/*** 發(fā)送文本消息到釘釘** @param message* @return*/public DingTalkResponse sendTextMessage(TextMessage message) {return this.sendMessage(message);}/*** 發(fā)送文本消息到釘釘** @param content* @return*/public DingTalkResponse sendTextMessage(String content) {return this.sendMessage(new TextMessage(content));}/*** 發(fā)送文本消息到釘釘** @param content* @param atMobiles* @return*/public DingTalkResponse sendTextMessage(String content, String[] atMobiles) {return this.sendMessage(new TextMessage(content, atMobiles));}/*** 發(fā)送文本消息到釘釘** @param content* @param isAtAll* @return*/public DingTalkResponse sendTextMessage(String content, boolean isAtAll) {return this.sendMessage(new TextMessage(content, isAtAll));}/*** 發(fā)送Link消息到釘釘** @param message* @return*/public DingTalkResponse sendLinkMessage(LinkMessage message) {return this.sendMessage(message);}/*** 發(fā)送Link消息到釘釘** @param title* @param text* @param messageUrl* @return*/public DingTalkResponse sendLinkMessage(String title, String text, String messageUrl) {return this.sendMessage(new LinkMessage(title, text, messageUrl));}/*** 發(fā)送Link消息到釘釘** @param title* @param text* @param messageUrl* @param picUrl* @return*/public DingTalkResponse sendLinkMessage(String title, String text, String messageUrl, String picUrl) {return this.sendMessage(new LinkMessage(title, text, messageUrl, picUrl));}/*** 發(fā)送MarkDown消息到釘釘** @param message* @return*/public DingTalkResponse sendMarkdownMessage(MarkdownMessage message) {return this.sendMessage(message);}/*** 發(fā)送MarkDown消息到釘釘** @param title* @param text* @return*/public DingTalkResponse sendMarkdownMessage(String title, String text) {return this.sendMessage(new MarkdownMessage(title, text));}/*** 發(fā)送MarkDown消息到釘釘** @param title* @param text* @param atMobiles* @return*/public DingTalkResponse sendMarkdownMessage(String title, String text, String[] atMobiles) {return this.sendMessage(new MarkdownMessage(title, text, atMobiles));}/*** 發(fā)送MarkDown消息到釘釘** @param title* @param text* @param isAtAll* @return*/public DingTalkResponse sendMarkdownMessage(String title, String text, boolean isAtAll) {return this.sendMessage(new MarkdownMessage(title, text, isAtAll));}public static void main(String[] args) {new DingTalkRobotClient("accessToken").sendMarkdownMessage("構(gòu)建任務(wù)","#### 杭州天氣 @156xxxx8827\n" +"> 9度,西北風(fēng)1級,空氣良89,相對溫度73%\n\n" +"> \n" +"> ###### 10點20分發(fā)布 [天氣](http://www.thinkpage.cn/) \n");}
6. DingTalkConfig配置
@ConfigurationProperties(prefix = "dingtalk")
@Configuration
@Data
public class DingTalkConfig {private String accessToken;@Beanpublic DingTalkRobotClient dingTalkRobotClient(){return new DingTalkRobotClient(accessToken);}
}