lifuquan пре 1 година
родитељ
комит
2e472f6f14

+ 20 - 6
README.md

@@ -26,9 +26,6 @@ pushmessage.appSecret=oz4OgKBaMNwi4LWfLPbhrPbbuCS8T0Rb
 pushmessage.systemId=10000078
 pushmessage.moduleId=20000156
 pushmessage.busiCode=30000111
-# https://oapi.dingtalk.com/robot/send?access_token=b2f1424d6119affaacab614b184f043fcd2c73db2651bb86eff29992d66820bf
-pushmessage.accessToken=b2f1424d6119affaacab614b184f043fcd2c73db2651bb86eff29992d66820bf
-pushmessage.prefix=CUC:
 ```
 
 - yml配置
@@ -42,14 +39,31 @@ pushmessage:
   systemId: 10000078
   moduleId: 20000156
   busiCode: 30000111
-  # 在钉钉群添加机器人的时候可以得到accessToken和prefix
-  accessToken: b2f1424d6119affaacab614b184f043fcd2c73db2651bb86eff29992d66820bf
-  prefix: "CUC:"
 ```
 
 ## 版本更新记录
 
+### v1.1
+
+1. 修改钉钉群相关的两个参数(accessToken/prefix)为通过参数传入
+
+[参数如何获取可以参考这里](./doc/%E9%92%89%E9%92%89%E7%BE%A4%E6%B7%BB%E5%8A%A0%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%96%B9%E5%BC%8F.md)
+
 ### v1.0
 
 1. 支持发送text和markdown形式的数据
 2. 添加钉钉机器人时必须采用自定义关键词方式设置安全方式
+
+```yml
+pushmessage:
+  enable: true
+  url: http://10.244.18.105:8000/api/chinaUnicom/microservice/notice/pushMessage/v1
+  appId: ENWaB7YdUD
+  appSecret: oz4OgKBaMNwi4LWfLPbhrPbbuCS8T0Rb
+  systemId: 10000078
+  moduleId: 20000156
+  busiCode: 30000111
+  # 在钉钉群添加机器人的时候可以得到accessToken和prefix
+  accessToken: b2f1424d6119affaacab614b184f043fcd2c73db2651bb86eff29992d66820bf
+  prefix: "CUC:"
+```

BIN
doc/webhook机器人.png


BIN
doc/机器人信息.png


BIN
doc/钉钉消息推送服务(钉钉群机器人推送)/中国联通数字化能力开放平台业务接口规范_钉钉推送消息接口接口规范.docx


+ 208 - 0
doc/钉钉消息推送服务(钉钉群机器人推送)/钉钉消息推送服务(钉钉群机器人推送).md

@@ -0,0 +1,208 @@
+# 钉钉消息推送服务(钉钉群机器人推送)
+
+## 入参和返回值
+
+```json
+{
+  "UNI_BSS_BODY": {
+    "PUSH_MESSAGE_REQ": {
+      "MSG_TYPE": "text",
+      "DATA": {
+        "AT_ALL": false,
+        "TEXT": {
+          "CONTENT": "河北联通:18631137650"
+        }
+      },
+      "ACCESS_TOKEN": "16e4778576ec99fbb2ce7083812d043aa4f9630112000ae3b15d25aa6b3b0b06",
+      "BUSI_CODE": "30000111",
+      "MODULE_ID": "20000156",
+      "SYSTEM_ID": "10000078"
+    }
+  },
+  "UNI_BSS_HEAD": {
+    "APP_ID": "ENWaB7YdUD",
+    "TIMESTAMP": "2023-05-10 20:03:51 650",
+    "TRANS_ID": "20230510200351650393652",
+    "TOKEN": "382e04599bce159cfa372dd5d88f9927"
+  }
+}
+```
+
+```json
+{
+  "UNI_BSS_BODY": {
+    "PUSH_MESSAGE_RSP": {
+      "STATUS": "0000",
+      "MSG": "服务调用成功!",
+      "TXID": "73b7ce8141ef^1681754343426^-157732",
+      "RSP": {
+        "RSP_CODE": "0000",
+        "RSP_DESC": "请求成功",
+        "SUB_CODE": "0000",
+        "SUB_DESC": "钉钉机器人推送成功",
+        "DATA": []
+      }
+    }
+  },
+  "UNI_BSS_HEAD": {
+    "RESP_DESC": "Success",
+    "APP_ID": "ENWaB7YdUD",
+    "RESP_CODE": "00000",
+    "TIMESTAMP": "2023-05-10 20:03:51 650",
+    "TRANS_ID": "20230510200351650393652"
+  }
+}
+```
+
+```json
+{
+  "UNI_BSS_BODY": {
+    "PUSH_MESSAGE_RSP": {
+      "STATUS": "0000",
+      "MSG": "服务调用成功!",
+      "TXID": "73b7ce8141ef^1681754343426^-157802",
+      "RSP": {
+        "RSP_CODE": "8888",
+        "RSP_DESC": "请求失败310000",
+        "SUB_CODE": "8888",
+        "SUB_DESC": "钉钉机器人推送失败错误描述:关键词不匹配;解决方案:请联系群管理员查看此机器人的关键词,并在发送的信息中包含此关键词;",
+        "DATA": []
+      }
+    }
+  },
+  "UNI_BSS_HEAD": {
+    "RESP_DESC": "Success",
+    "APP_ID": "ENWaB7YdUD",
+    "RESP_CODE": "00000",
+    "TIMESTAMP": "2023-05-10 22:29:43 563",
+    "TRANS_ID": "20230510222943563183179"
+  }
+}
+```
+
+## 调用代码
+
+```java
+/*
+ * 钉钉消息推送服务(钉钉群机器人推送)
+ * json_chinaUnicom_microservice_notice_pushMessage
+ */
+public class PushMessage {
+    // 河北联通移网投诉管理系统
+    protected static final String APP_ID = "ENWaB7YdUD";
+    // 测试环境密钥
+    protected static final String APP_SECRET_TEST = "MUwA8ZVBprY83mAZrtOfrMfjdiJ9RFXr";
+    // 生产环境密钥
+    protected static final String APP_SECRET = "oz4OgKBaMNwi4LWfLPbhrPbbuCS8T0Rb";
+
+    private static final String URL = "http://10.244.18.105:8000/api/chinaUnicom/microservice/notice/pushMessage/v1";
+    private static final String URL_TEST = "http://10.124.150.230:8000/api/chinaUnicom/microservice/notice/pushMessage/v1";
+
+    // 系统编号
+    private static final String SYSTEM_ID = "10000078";
+    // 模块编号
+    private static final String MODULE_ID = "20000156";
+    // 业务编码
+    private static final String BUSI_CODE = "30000111";
+
+    public COMPConnectionContext query(Map<String, Object> parmeterMap, boolean test) {
+        String realAppSecret = test ? APP_SECRET_TEST : APP_SECRET;
+        String realUrl = test ? URL_TEST : URL;
+        COMPConnection compConnection = new COMPJsonConnection(APP_ID, realAppSecret);
+
+        // REQ
+        Map<String, Object> req = new HashMap<>();
+
+        Map<String, Object> pushMessageReq = new HashMap<>();
+        req.put("PUSH_MESSAGE_REQ", pushMessageReq);
+
+        // 公共参数
+        pushMessageReq.put("SYSTEM_ID", SYSTEM_ID);
+        pushMessageReq.put("MODULE_ID", MODULE_ID);
+        pushMessageReq.put("BUSI_CODE", BUSI_CODE);
+
+        // 输入的参数信息
+        pushMessageReq.put("ACCESS_TOKEN", parmeterMap.get("ACCESS_TOKEN"));
+        pushMessageReq.put("MSG_TYPE", parmeterMap.get("MSG_TYPE"));
+        pushMessageReq.put("DATA", parmeterMap.get("DATA"));
+
+        return compConnection.excute(Const.HttpMethodType.POST, realUrl, req, false);
+    }
+}
+
+// 测试代码
+/* Text消息 测试环境 */
+void testQuery() {
+    PushMessage pushMessage = new PushMessage();
+
+    // 构造请求
+    Map<String, Object> req = new HashMap<>();
+    // 钉钉群的token
+    req.put("ACCESS_TOKEN", "0c7bde53a655e2ca96cccc40bd24b0f33ef2af7898018f5c1e24e637cbb5ef59");
+    // 消息类型:text、link、markdown、actionCard、feedCard
+    req.put("MSG_TYPE", "text");
+    // 消息体
+    Map<String, Object> data = new HashMap<>();
+    Map<String, Object> text = new HashMap<>();
+    data.put("TEXT", text);
+    text.put("CONTENT", "\"河北联通:这是一条测试消息。\"");
+    data.put("AT_LIST", new ArrayList<Long>() {
+        {
+            add(15324104774L);
+        }
+    });
+    data.put("AT_ALL", false);
+    req.put("DATA", data);
+
+    pushMessage.query(req, true);
+}
+
+/* Text消息 正式环境 */
+void testQuery2() {
+    PushMessage pushMessage = new PushMessage();
+
+    // 构造请求
+    Map<String, Object> req = new HashMap<>();
+    // 钉钉群的token
+    req.put("ACCESS_TOKEN", "0c7bde53a655e2ca96cccc40bd24b0f33ef2af7898018f5c1e24e637cbb5ef59");
+    // 消息类型:text、link、markdown、actionCard、feedCard
+    req.put("MSG_TYPE", "text");
+    // 消息体
+    Map<String, Object> data = new HashMap<>();
+    Map<String, Object> text = new HashMap<>();
+    data.put("TEXT", text);
+    text.put("CONTENT", "\"河北联通:这是一条测试消息。\"");
+    data.put("AT_LIST", new ArrayList<Long>() {
+        {
+            add(15324104774L);
+        }
+    });
+    data.put("AT_ALL", false);
+    req.put("DATA", data);
+
+    pushMessage.query(req, false);
+}
+
+/* Markdown消息 正式环境 */
+@Test
+void testQuery3() {
+    PushMessage pushMessage = new PushMessage();
+
+    // 构造请求
+    Map<String, Object> req = new HashMap<>();
+    // 钉钉群的token
+    req.put("ACCESS_TOKEN", "0c7bde53a655e2ca96cccc40bd24b0f33ef2af7898018f5c1e24e637cbb5ef59");
+    // 消息类型:text、link、markdown、actionCard、feedCard
+    req.put("MSG_TYPE", "markdown");
+    // 消息体
+    Map<String, Object> data = new HashMap<>();
+    Map<String, Object> markdown = new HashMap<>();
+    data.put("MARK_DOWN", markdown);
+    markdown.put("TITLE", "测试markdown消息");
+    markdown.put("TEXT",
+            "# 河北联通:这是一条测试消息。 \n<table><tr><td>col1</td><td>col2</td></tr><tr><td>aa</td><td>bb</td></tr></table>");
+    req.put("DATA", data);
+
+    pushMessage.query(req, false);
+}
+```

+ 17 - 0
doc/钉钉群添加机器人方式.md

@@ -0,0 +1,17 @@
+# 钉钉群添加机器人方式
+
+## 如何添加机器人并获取accessToken和prefix
+
+1. 添加webhook机器人
+
+    ![添加机器人](./webhook%E6%9C%BA%E5%99%A8%E4%BA%BA.png)
+
+2. 保存机器人信息
+
+    - 机器人webhook链接内的access_token参数对应于参数accessToken
+
+    - 使用该接口要求安全设置必须使用且仅使用自定义关键字作,prefix参数对应自定义关键字。
+
+    `https://oapi.dingtalk.com/robot/send?access_token=b2f1424d6119affaacab614b184f043fcd2c73db2651bb86eff29992d66820bf`
+
+    ![机器人信息](./%E6%9C%BA%E5%99%A8%E4%BA%BA%E4%BF%A1%E6%81%AF.png)

+ 1 - 1
pom.xml

@@ -13,7 +13,7 @@
 
     <groupId>com.nokia</groupId>
     <artifactId>push-message-starter</artifactId>
-    <version>1.0</version>
+    <version>1.1</version>
 
     <packaging>jar</packaging>
 

+ 0 - 5
src/main/java/com/nokia/pushmessage/config/PushMessageAutoConfiguration.java

@@ -14,14 +14,9 @@ import com.nokia.pushmessage.service.PushMessageService;
 @EnableConfigurationProperties(PushMessageProperties.class)
 public class PushMessageAutoConfiguration {
 
-    public PushMessageAutoConfiguration() {
-        System.out.println("=====PushMessageAutoConfiguration=====");
-    }
-
     @Bean
     @ConditionalOnProperty(name = "pushmessage.enable", havingValue = "true", matchIfMissing = false)
     public PushMessageService pushMessageService() {
-        System.out.println("======PushMessageAutoConfiguration.pushMessageService=======");
         return new PushMessageService();
     }
 }

+ 0 - 8
src/main/java/com/nokia/pushmessage/config/PushMessageProperties.java

@@ -23,12 +23,4 @@ public class PushMessageProperties {
     private String moduleId;
     // 业务编码
     private String busiCode;
-    // 钉钉群机器人accessToken,通过添加webhook的机器人可以查询到,也可使用已添加的机器人
-    private String accessToken;
-    // 钉钉机器人前缀
-    private String prefix;
-
-    public PushMessageProperties() {
-        System.out.println("==================PushMessageProperties====================");
-    }
 }

+ 30 - 31
src/main/java/com/nokia/pushmessage/service/PushMessageService.java

@@ -31,17 +31,13 @@ public class PushMessageService {
 
     private DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
 
-    public PushMessageService() {
-        System.out.println("===PushMessageService===");
-    }
-
     /**
      * 发送文本消息
      * 
      * @param message
      */
-    public void sendTextMessage(String message) {
-        sendTextMessage(message, null, null);
+    public void sendTextMessage(String accessToken, String prefix, String message) {
+        sendTextMessage(accessToken, prefix, message, null, null);
     }
 
     /**
@@ -50,8 +46,8 @@ public class PushMessageService {
      * @param message
      * @param atList
      */
-    public void sendTextMessage(String message, @Nullable List<Integer> atList) {
-        sendTextMessage(message, atList, null);
+    public void sendTextMessage(String accessToken, String prefix, String message, @Nullable List<Integer> atList) {
+        sendTextMessage(accessToken, prefix, message, atList, null);
     }
 
     /**
@@ -60,8 +56,8 @@ public class PushMessageService {
      * @param message
      * @param atAll
      */
-    public void sendTextMessage(String message, @Nullable Boolean atAll) {
-        sendTextMessage(message, null, atAll);
+    public void sendTextMessage(String accessToken, String prefix, String message, @Nullable Boolean atAll) {
+        sendTextMessage(accessToken, prefix, message, null, atAll);
     }
 
     /**
@@ -71,14 +67,15 @@ public class PushMessageService {
      * @param atList
      * @param atAll
      */
-    public void sendTextMessage(String messge, @Nullable List<Integer> atList, @Nullable Boolean atAll) {
+    public void sendTextMessage(String accessToken, String prefix, String messge, @Nullable List<Integer> atList,
+            @Nullable Boolean atAll) {
         Map<String, Object> map = new HashMap<>();
         map.put("MSG_TYPE", "text");
         Map<String, Object> data = new HashMap<>();
         map.put("DATA", data);
         Map<String, Object> text = new HashMap<>();
         data.put("TEXT", text);
-        messge = messge.startsWith(properties.getPrefix()) ? messge : properties.getPrefix() + messge;
+        messge = messge.startsWith(prefix) ? messge : prefix + messge;
         text.put("CONTENT", messge);
         if (atList != null) {
             data.put("AT_LIST", atList);
@@ -86,7 +83,7 @@ public class PushMessageService {
         if (atAll != null) {
             data.put("AT_ALL", atAll);
         }
-        sendMessage(map);
+        sendMessage(map, accessToken);
     }
 
     /**
@@ -94,8 +91,8 @@ public class PushMessageService {
      * 
      * @param messge
      */
-    public void sendMarkdownMessage(String messge) {
-        sendMarkdownMessage(messge, null, null, null);
+    public void sendMarkdownMessage(String accessToken, String prefix, String messge) {
+        sendMarkdownMessage(accessToken, prefix, messge, null, null, null);
     }
 
     /**
@@ -104,8 +101,8 @@ public class PushMessageService {
      * @param messge
      * @param title
      */
-    public void sendMarkdownMessage(String messge, String title) {
-        sendMarkdownMessage(messge, title, null, null);
+    public void sendMarkdownMessage(String accessToken, String prefix, String messge, String title) {
+        sendMarkdownMessage(accessToken, prefix, messge, title, null, null);
     }
 
     /**
@@ -114,8 +111,8 @@ public class PushMessageService {
      * @param messge
      * @param atList
      */
-    public void sendMarkdownMessage(String messge, List<Integer> atList) {
-        sendMarkdownMessage(messge, null, atList, null);
+    public void sendMarkdownMessage(String accessToken, String prefix, String messge, List<Integer> atList) {
+        sendMarkdownMessage(accessToken, prefix, messge, null, atList, null);
     }
 
     /**
@@ -124,8 +121,8 @@ public class PushMessageService {
      * @param messge
      * @param atAll
      */
-    public void sendMarkdownMessage(String messge, @Nullable Boolean atAll) {
-        sendMarkdownMessage(messge, null, null, atAll);
+    public void sendMarkdownMessage(String accessToken, String prefix, String messge, @Nullable Boolean atAll) {
+        sendMarkdownMessage(accessToken, prefix, messge, null, null, atAll);
     }
 
     /**
@@ -136,7 +133,8 @@ public class PushMessageService {
      * @param atList
      * @param atAll
      */
-    public void sendMarkdownMessage(String messge, @Nullable String title, @Nullable List<Integer> atList,
+    public void sendMarkdownMessage(String accessToken, String prefix, String messge, @Nullable String title,
+            @Nullable List<Integer> atList,
             @Nullable Boolean atAll) {
         Map<String, Object> map = new HashMap<>();
         map.put("MSG_TYPE", "markdown");
@@ -144,8 +142,8 @@ public class PushMessageService {
         map.put("DATA", data);
         Map<String, Object> markdown = new HashMap<>();
         data.put("MARK_DOWN", markdown);
-        title = title == null || "".equals(title) ? properties.getPrefix() : title;
-        title = title.startsWith(properties.getPrefix()) ? title : properties.getPrefix() + title;
+        title = title == null || "".equals(title) ? prefix : title;
+        title = title.startsWith(prefix) ? title : prefix + title;
         markdown.put("TITLE", title);
         markdown.put("TEXT", messge);
         if (atList != null) {
@@ -154,11 +152,12 @@ public class PushMessageService {
         if (atAll != null) {
             data.put("AT_ALL", atAll);
         }
-        sendMessage(map);
+        sendMessage(map, accessToken);
     }
 
-    private void sendMessage(Map<String, Object> reqMap) {
-        JsonNode respon = restTemplate.postForObject(properties.getUrl(), getRequest(reqMap), JsonNode.class);
+    private void sendMessage(Map<String, Object> reqMap, String accessToken) {
+        JsonNode respon = restTemplate.postForObject(properties.getUrl(), getRequest(reqMap, accessToken),
+                JsonNode.class);
         if (respon == null) {
             throw new RuntimeException("调用结果为空");
         }
@@ -176,17 +175,17 @@ public class PushMessageService {
         throw new RuntimeException(respon.toString());
     }
 
-    private Map<String, Object> getRequest(Map<String, Object> reqMap) {
+    private Map<String, Object> getRequest(Map<String, Object> reqMap, String accessToken) {
         Map<String, Object> map = new HashMap<>();
         map.put("UNI_BSS_HEAD", getUniBssHead());
-        map.put("UNI_BSS_BODY", getUniBssBody(reqMap));
+        map.put("UNI_BSS_BODY", getUniBssBody(reqMap, accessToken));
         return map;
     }
 
-    private Map<String, Object> getUniBssBody(Map<String, Object> reqMap) {
+    private Map<String, Object> getUniBssBody(Map<String, Object> reqMap, String accessToken) {
         Map<String, Object> map = new HashMap<>();
         map.put("PUSH_MESSAGE_REQ", reqMap);
-        reqMap.put("ACCESS_TOKEN", properties.getAccessToken());
+        reqMap.put("ACCESS_TOKEN", accessToken);
         reqMap.put("BUSI_CODE", properties.getBusiCode());
         reqMap.put("MODULE_ID", properties.getModuleId());
         reqMap.put("SYSTEM_ID", properties.getSystemId());