From d6075e7ec88fcbf5b4677e6fc9007a4a53288f0e Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期四, 10 十月 2024 09:20:41 +0800
Subject: [PATCH] 钉钉发送消息改为不同机构有不同的发送钉钉群(可以是相同的群)

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java                  |  162 +++++++++++++++++++++++---------
 pipIrr-platform/pipIrr-global/src/main/resources/application-global(ym元谋系统).yml                       |   30 ++++-
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forMs/MsObj4Ding.java       |    5 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global(test测试系统).yml                     |   31 ++++-
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml                               |   30 ++++-
 6 files changed, 192 insertions(+), 68 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java
index e66f22b..863695f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java
@@ -7,7 +7,7 @@
 import com.taobao.api.ApiException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Base64;
-import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 
 import javax.crypto.Mac;
@@ -17,6 +17,8 @@
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @author ZhuBaoMin
@@ -27,6 +29,18 @@
 @Slf4j
 @Component
 public class DingTalk {
+    private static final String dingTalkConfigPriFix = "dingtalk";
+    private static final Map<String, Option> optionsMap = new HashMap();
+
+    class Option{
+        public Boolean enable ;
+        public String robotUrl ;
+        public String robotAccessToken ;
+        public String secret ;
+        public Boolean atAll ;
+        public String mobile ;
+    }
+    /*
     @Value("${dingtalk.robot.url}")
     private String URL;
 
@@ -41,54 +55,108 @@
 
     @Value("${dingtalk.mobile}")
     private String MOBILE;
+    */
 
-    public void sendMessage(String message) {
-        try {
-            Long timestamp = System.currentTimeMillis();
-            String secret = SECRET;
-            String stringToSign = timestamp + "\n" + secret;
-            Mac mac = Mac.getInstance("HmacSHA256");
-            mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
-            byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
-            String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
-
-            //sign瀛楁鍜宼imestamp瀛楁蹇呴』鎷兼帴鍒拌姹俇RL涓婏紝鍚﹀垯浼氬嚭鐜� 310000 鐨勯敊璇俊鎭�
-            DingTalkClient client = new DefaultDingTalkClient( URL + "?sign=" + sign + "&timestamp=" + timestamp);
-            OapiRobotSendRequest req = new OapiRobotSendRequest();
-            /**
-             * 鍙戦�佹枃鏈秷鎭�
-             */
-            //瀹氫箟鏂囨湰鍐呭
-            OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
-            text.setContent(message);
-            //瀹氫箟 @瀵硅薄
-            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
-            if(AT_ALL) {
-                at.setIsAtAll(true);
-            }else {
-                at.setAtMobiles(Collections.singletonList(MOBILE));
+    private Option getOptions(String orgTag, Environment env){
+        Option vo = null ;
+        try{
+            vo = optionsMap.get(orgTag);
+            if(vo == null){
+                vo = new Option();
+                String enableStr = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".enable");
+                if(enableStr != null && !enableStr.trim().equals("")){
+                    vo.enable = Boolean.valueOf(enableStr);
+                }else{
+                    vo.enable = true ;
+                }
+                vo.robotUrl = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.url");
+                vo.robotAccessToken = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.access-token");
+                vo.secret = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.secret");
+                String atAllStr = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".at-all");
+                if(atAllStr != null && !atAllStr.trim().equals("")){
+                    vo.atAll = Boolean.valueOf(atAllStr);
+                }else{
+                    vo.atAll = true ;
+                }
+                vo.mobile = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".mobile");
+                optionsMap.put(orgTag, vo) ;
             }
-            //璁剧疆娑堟伅绫诲瀷
-            req.setMsgtype("text");
-            req.setText(text);
-            req.setAt(at);
-            OapiRobotSendResponse rsp = client.execute(req, CUSTOM_ROBOT_TOKEN);
-            log.info(rsp.getBody());
-        } catch (ApiException e) {
-            log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
-            //e.printStackTrace();
-        } catch (UnsupportedEncodingException e) {
-            log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
-            //e.printStackTrace();
-        } catch (NoSuchAlgorithmException e) {
-            log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
-            //e.printStackTrace();
-        } catch (InvalidKeyException e) {
-            log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
-            //e.printStackTrace();
-        } catch (Exception e){
-            log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
-            //e.printStackTrace();
+        }catch (Exception e){
+            vo = null ;
+        }
+        return vo ;
+    }
+
+    /**
+     * 鍚戦拤閽夌兢鍙戦�佹秷鎭�
+     * @param orgTag
+     * @param env
+     * @param message
+     */
+    public void sendMessage(String orgTag, Environment env, String message) {
+        if(orgTag == null || orgTag.trim().equals("")){
+            log.error("閽夐拤鍙戦�佹秷鎭紓甯革紝鏈烘瀯鏍囩涓虹┖");
+            return;
+        }
+        if(env == null){
+            log.error("閽夐拤鍙戦�佹秷鎭紓甯革紝Spring鐜涓虹┖");
+            return;
+        }
+        if(message == null || message.trim().equals("")){
+            log.error("閽夐拤鍙戦�佹秷鎭紓甯革紝娑堟伅涓虹┖");
+            return;
+        }
+        Option vo = this.getOptions(orgTag, env) ;
+        if(vo == null){
+            log.error("閽夐拤鍙戦�佹秷鎭紓甯革紝閽夐拤閰嶇疆閿欒");
+            return;
+        }
+        if(vo.enable){
+            try {
+                Long timestamp = System.currentTimeMillis() ;
+                String stringToSign = timestamp + "\n" + vo.secret;
+                Mac mac = Mac.getInstance("HmacSHA256");
+                mac.init(new SecretKeySpec(vo.secret.getBytes("UTF-8"), "HmacSHA256"));
+                byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
+                String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
+
+                //瀹氫箟鏂囨湰鍐呭
+                OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
+                text.setContent(message);
+                //瀹氫箟 @瀵硅薄
+                OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
+                if(vo.atAll) {
+                    at.setIsAtAll(true);
+                }else {
+                    at.setAtMobiles(Collections.singletonList(vo.mobile));
+                }
+
+                OapiRobotSendRequest req = new OapiRobotSendRequest();
+                //璁剧疆娑堟伅绫诲瀷
+                req.setMsgtype("text");
+                req.setText(text);
+                req.setAt(at);
+
+                //sign瀛楁鍜宼imestamp瀛楁蹇呴』鎷兼帴鍒拌姹俇RL涓婏紝鍚﹀垯浼氬嚭鐜� 310000 鐨勯敊璇俊鎭�
+                DingTalkClient client = new DefaultDingTalkClient( vo.robotUrl + "?sign=" + sign + "&timestamp=" + timestamp);
+                OapiRobotSendResponse rsp = client.execute(req, vo.robotAccessToken);
+                log.info(rsp.getBody());
+            } catch (ApiException e) {
+                log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
+                //e.printStackTrace();
+            } catch (UnsupportedEncodingException e) {
+                log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
+                //e.printStackTrace();
+            } catch (NoSuchAlgorithmException e) {
+                log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
+                //e.printStackTrace();
+            } catch (InvalidKeyException e) {
+                log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
+                //e.printStackTrace();
+            } catch (Exception e){
+                log.error("閽夐拤鍙戦�佹秷鎭紓甯�", e);
+                //e.printStackTrace();
+            }
         }
     }
 }
diff --git "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050test\346\265\213\350\257\225\347\263\273\347\273\237\051.yml" "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050test\346\265\213\350\257\225\347\263\273\347\273\237\051.yml"
index d8417c5..fa2694e 100644
--- "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050test\346\265\213\350\257\225\347\263\273\347\273\237\051.yml"
+++ "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050test\346\265\213\350\257\225\347\263\273\347\273\237\051.yml"
@@ -178,13 +178,30 @@
 
 #閽夐拤娑堟伅鎺ㄩ��
 dingtalk:
-    robot:
-        url: https://oapi.dingtalk.com/robot/send
-        access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
-        secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
-    at-all: true
-    mobile: 18602657034
-
+    ym:
+        enable: true #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    pj:
+        enable: false #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    test:
+        enable: false #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
 #闃�鎺у櫒鍙傛暟
 rtu:
     batteryVolt: 17
diff --git "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050ym\345\205\203\350\260\213\347\263\273\347\273\237\051.yml" "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050ym\345\205\203\350\260\213\347\263\273\347\273\237\051.yml"
index 610b648..962df65 100644
--- "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050ym\345\205\203\350\260\213\347\263\273\347\273\237\051.yml"
+++ "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050ym\345\205\203\350\260\213\347\263\273\347\273\237\051.yml"
@@ -178,12 +178,30 @@
 
 #閽夐拤娑堟伅鎺ㄩ��
 dingtalk:
-    robot:
-        url: https://oapi.dingtalk.com/robot/send
-        access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
-        secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
-    at-all: true
-    mobile: 18602657034
+    ym:
+        enable: true #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    pj:
+        enable: false #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    test:
+        enable: false #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
 
 #闃�鎺у櫒鍙傛暟
 rtu:
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
index 610b648..962df65 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -178,12 +178,30 @@
 
 #閽夐拤娑堟伅鎺ㄩ��
 dingtalk:
-    robot:
-        url: https://oapi.dingtalk.com/robot/send
-        access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
-        secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
-    at-all: true
-    mobile: 18602657034
+    ym:
+        enable: true #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    pj:
+        enable: false #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
+    test:
+        enable: false #鏄惁鍚敤
+        robot:
+            url: https://oapi.dingtalk.com/robot/send
+            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+        at-all: true
+        mobile: 18602657034
 
 #闃�鎺у櫒鍙傛暟
 rtu:
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forMs/MsObj4Ding.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forMs/MsObj4Ding.java
index 1d267ee..130ebe9 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forMs/MsObj4Ding.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forMs/MsObj4Ding.java
@@ -3,8 +3,10 @@
 import com.dy.common.queue.NodeObj;
 import com.dy.common.springUtil.SpringContextUtil;
 import com.dy.pipIrrGlobal.config.DingTalk;
+import com.dy.rtuMw.server.ServerProperties;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.springframework.core.env.Environment;
 
 /**
  * @Author: liurunyu
@@ -27,7 +29,8 @@
      */
     public boolean dealSelf(){
         DingTalk dingTalk = SpringContextUtil.getBean(DingTalk.class) ;
-        dingTalk.sendMessage(ms);
+        Environment env = SpringContextUtil.getApplicationContext().getEnvironment() ;
+        dingTalk.sendMessage(ServerProperties.orgTag, env, ms);
         return true ;
     }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
index 7684816..f35f3f1 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
@@ -68,7 +68,7 @@
 
     public String sendMessage(String message) {
         try {
-            dingTalk.sendMessage(message);
+            dingTalk.sendMessage(DataSourceContext.get(), this.env, message);
         } catch (Exception e) {
             return "鍙戦�佸け璐�";
         }

--
Gitblit v1.8.0