From 9efecf90d32e39b2ecab8fd6c789300962fd5a97 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期六, 07 三月 2026 12:49:00 +0800
Subject: [PATCH] #钉钉消息通知
---
src/main/java/com/zy/asrs/task/handler/ExceptionNoticeHandler.java | 61 +++++++++++++++
src/main/java/com/zy/asrs/task/ExceptionNoticeScheduler.java | 16 ++++
src/main/java/com/zy/common/utils/DingDingPush.java | 117 +++++++++++++++++++++++++++++
pom.xml | 12 +++
4 files changed, 206 insertions(+), 0 deletions(-)
diff --git a/pom.xml b/pom.xml
index ca051d4..14c7a6d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -112,6 +112,18 @@
<artifactId>truelicense-core</artifactId>
<version>1.33</version>
</dependency>
+ <!-- 閽夐拤娑堟伅鎺ㄩ�� -->
+ <dependency>
+ <groupId>com.aliyun</groupId>
+ <artifactId>alibaba-dingtalk-service-sdk</artifactId>
+ <version>1.0.1</version>
+ <exclusions>
+ <exclusion>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
<!-- WebClient -->
<dependency>
<groupId>org.springframework.boot</groupId>
diff --git a/src/main/java/com/zy/asrs/task/ExceptionNoticeScheduler.java b/src/main/java/com/zy/asrs/task/ExceptionNoticeScheduler.java
new file mode 100644
index 0000000..06a973e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/ExceptionNoticeScheduler.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.task.core.ReturnT;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import static org.reflections.Reflections.log;
+
+public class ExceptionNoticeScheduler {
+ @Scheduled(cron = "0/1 * * * * ? ")
+ private void execute(){
+ ReturnT<String> returnT = exceptionNoticeHandler.start();
+ if (!returnT.isSuccess()) {
+ log.error(returnT.getMsg());
+ }
+ }
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/ExceptionNoticeHandler.java b/src/main/java/com/zy/asrs/task/handler/ExceptionNoticeHandler.java
new file mode 100644
index 0000000..92ab9b3
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/ExceptionNoticeHandler.java
@@ -0,0 +1,61 @@
+package com.zy.asrs.task.handler;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.zy.asrs.entity.ApiLog;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.common.utils.DingDingPush;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+
+@Slf4j
+@Service
+@Transactional
+public class ExceptionNoticeHandler extends AbstractHandler<String> {
+ @Autowired
+ private ApiLogService apiLogService;
+ @Transactional
+ public ReturnT<String> start() {
+ try {
+ EntityWrapper<ApiLog> wrapper = new EntityWrapper<>();
+ wrapper.eq("result", 0).isNull("memo").orderBy("create_time", false);
+ Page<ApiLog> page = apiLogService.selectPage(new Page<>(1, 1), wrapper);
+ if (page.getRecords() != null && !page.getRecords().isEmpty()) {
+ ApiLog item = page.getRecords().get(0);
+ StringBuilder sb = new StringBuilder();
+ sb.append("寮傚父鍛婅").append("\n");
+ sb.append("鏃堕棿: ").append(item.getCreateTime$()).append("\n");
+ sb.append("鎺ュ彛: ").append(nvl(item.getNamespace())).append(" ").append(nvl(item.getUrl())).append("\n");
+ sb.append("IP: ").append(nvl(item.getClientIp())).append("\n");
+ sb.append("璇锋眰: ").append(cut(nvl(item.getRequest()), 500)).append("\n");
+ sb.append("鍝嶅簲: ").append(cut(nvl(item.getResponse()), 500)).append("\n");
+ sb.append("寮傚父: ").append(cut(nvl(item.getErr()), 500));
+ DingDingPush.send(sb.toString());
+ item.setMemo("PUSHED");
+ apiLogService.updateById(item);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ return FAIL.setMsg(e.getMessage());
+ }
+ return SUCCESS;
+ }
+
+ private String nvl(String s) {
+ return s == null ? "" : s;
+ }
+
+ private String cut(String s, int max) {
+ if (s == null) {
+ return "";
+ }
+ return s.length() > max ? s.substring(0, max) : s;
+ }
+}
diff --git a/src/main/java/com/zy/common/utils/DingDingPush.java b/src/main/java/com/zy/common/utils/DingDingPush.java
new file mode 100644
index 0000000..f2115fd
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/DingDingPush.java
@@ -0,0 +1,117 @@
+package com.zy.common.utils;
+
+import com.alibaba.fastjson.JSON;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 閽夐拤娑堟伅鍙戦��
+ */
+public class DingDingPush {
+
+ public static void main(String[] args) {
+ StringBuffer pushSb = new StringBuffer();
+ pushSb.append("銆�")
+ .append(new Date()).append("銆�")
+ .append("ERRORChina");
+ DingDingPush.send(pushSb.toString());
+ }
+
+ public static String send(String content){
+ //娴嬭瘯鏈哄櫒浜簁ey
+ String dingKey ="https://oapi.dingtalk.com/robot/send?access_token=a7b0a0e96f4b19810e545b0518740e16ad934679c42ffb0a4d545cf4fd129887";
+ // 璇锋眰鐨凧SON鏁版嵁锛岃繖閲屾垜鐢╩ap鍦ㄥ伐鍏风被閲岃浆鎴恓son鏍煎紡
+ Map<String,Object> json=new HashMap<>();
+ Map<String,Object> text=new HashMap<>();
+ json.put("msgtype","text");
+ text.put("content",content);
+ json.put("text",text);
+ // 鍙戦�乸ost璇锋眰
+ String result = DingDingPush.sendPostByMap(dingKey, json);
+ System.out.println("result sefsefsfsef " + result);
+ return result;
+ }
+
+ /**
+ * 鍙戦�丳OST璇锋眰锛屽弬鏁版槸Map, contentType=x-www-form-urlencoded
+ *
+ * @param url
+ * @param mapParam
+ * @return
+ */
+ public static String sendPostByMap(String url, Map<String, Object> mapParam) {
+ Map<String, String> headParam = new HashMap<>();
+ headParam.put("Content-type", "application/json;charset=UTF-8");
+ return sendPost(url, mapParam, headParam);
+ }
+
+ /**
+ * 鍚戞寚瀹� URL 鍙戦�丳OST鏂规硶鐨勮姹�
+ *
+ * @param url 鍙戦�佽姹傜殑 URL
+ * @param param 璇锋眰鍙傛暟锛�
+ * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
+ */
+ public static String sendPost(String url, Map<String, Object> param, Map<String, String> headParam) {
+ PrintWriter out = null;
+ BufferedReader in = null;
+ String result = "";
+ try {
+ URL realUrl = new URL(url);
+ // 鎵撳紑鍜孶RL涔嬮棿鐨勮繛鎺�
+ URLConnection conn = realUrl.openConnection();
+ // 璁剧疆閫氱敤鐨勮姹傚睘鎬� 璇锋眰澶�
+ conn.setRequestProperty("accept", "*/*");
+ conn.setRequestProperty("connection", "Keep-Alive");
+ conn.setRequestProperty("user-agent",
+ "Fiddler");
+ if (headParam != null) {
+ for (Map.Entry<String, String> entry : headParam.entrySet()) {
+ conn.setRequestProperty(entry.getKey(), entry.getValue());
+ }
+ }
+ // 鍙戦�丳OST璇锋眰蹇呴』璁剧疆濡備笅涓よ
+ conn.setDoOutput(true);
+ conn.setDoInput(true);
+ // 鑾峰彇URLConnection瀵硅薄瀵瑰簲鐨勮緭鍑烘祦
+ out = new PrintWriter(conn.getOutputStream());
+ // 鍙戦�佽姹傚弬鏁�
+ out.print(JSON.toJSONString(param));
+ // flush杈撳嚭娴佺殑缂撳啿
+ out.flush();
+ // 瀹氫箟BufferedReader杈撳叆娴佹潵璇诲彇URL鐨勫搷搴�
+ in = new BufferedReader(
+ new InputStreamReader(conn.getInputStream()));
+ String line;
+ while ((line = in.readLine()) != null) {
+ result += line;
+ }
+ System.out.println("line=" +line);
+ } catch (Exception e) {
+ System.out.println("鍙戦�� POST 璇锋眰鍑虹幇寮傚父锛�" + e);
+ e.printStackTrace();
+ }
+ //浣跨敤finally鍧楁潵鍏抽棴杈撳嚭娴併�佽緭鍏ユ祦
+ finally {
+ try {
+ if (out != null) {
+ out.close();
+ }
+ if (in != null) {
+ in.close();
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+ return result;
+ }
+}
--
Gitblit v1.9.1