From ca2417166fe917aeb45d08df6ff152f9c7a0060a Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期日, 27 四月 2025 10:57:17 +0800
Subject: [PATCH] 修改拦载器

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java |  162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 162 insertions(+), 0 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
new file mode 100644
index 0000000..e283c52
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java
@@ -0,0 +1,162 @@
+package com.dy.pipIrrGlobal.config;
+
+import com.dingtalk.api.DefaultDingTalkClient;
+import com.dingtalk.api.DingTalkClient;
+import com.dingtalk.api.request.OapiRobotSendRequest;
+import com.dingtalk.api.response.OapiRobotSendResponse;
+import com.taobao.api.ApiException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-07-31 9:20
+ * @LastEditTime 2024-07-31 9:20
+ * @Description 閽夐拤瀹㈡埛绔伐鍏风被
+ */
+@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;
+
+    @Value("${dingtalk.robot.access-token}")
+    private String CUSTOM_ROBOT_TOKEN;
+
+    @Value("${dingtalk.robot.secret}")
+    private String SECRET;
+
+    @Value("${dingtalk.at-all}")
+    private Boolean AT_ALL;
+
+    @Value("${dingtalk.mobile}")
+    private String 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) ;
+            }
+        }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.trim(), 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();
+            }
+        }
+    }
+}

--
Gitblit v1.8.0