From 16bbd0a2e072bafea1dc254fbbcf86768fb3ea48 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期一, 18 十一月 2024 14:57:18 +0800
Subject: [PATCH] 钉钉推送消息,通过机器人发送到个人

---
 src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java      |    5 +
 src/main/java/com/gs/dingtalk/controller/KMController.java              |   32 ++++++++++
 src/main/java/com/gs/dingtalk/service/impl/SendDingtalkServiceImpl.java |   27 ++++++---
 src/main/java/com/gs/dingtalk/task/ScheduledTasks.java                  |   12 +---
 src/main/java/com/gs/dingtalk/service/impl/SendMessageServiceImpl.java  |    8 --
 src/main/java/com/gs/dingtalk/service/SimpleExample.java                |   72 ++++++++++++++++++-----
 6 files changed, 115 insertions(+), 41 deletions(-)

diff --git a/src/main/java/com/gs/dingtalk/controller/KMController.java b/src/main/java/com/gs/dingtalk/controller/KMController.java
new file mode 100644
index 0000000..151b60d
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/controller/KMController.java
@@ -0,0 +1,32 @@
+package com.gs.dingtalk.controller;
+
+
+import com.gs.dingtalk.config.ResultMessage;
+import com.gs.dingtalk.service.SendDingtalkService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("Numerical")
+@RequiredArgsConstructor
+@CrossOrigin(origins = "*") //璺ㄥ煙璇锋眰
+public class KMController {
+
+
+    private final SendDingtalkService sendDingtalkService;
+
+    @PostMapping("/chatSendMessage")
+    public ResultMessage setCode() {
+
+        try {
+            sendDingtalkService.chatSendMessage();
+            return ResultMessage.ok();
+        } catch (Exception e) {
+            return ResultMessage.error(e);
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/dingtalk/service/SimpleExample.java b/src/main/java/com/gs/dingtalk/service/SimpleExample.java
index b8f0fb0..95b6e6b 100644
--- a/src/main/java/com/gs/dingtalk/service/SimpleExample.java
+++ b/src/main/java/com/gs/dingtalk/service/SimpleExample.java
@@ -1,18 +1,22 @@
 package com.gs.dingtalk.service;
 
 
+import cn.hutool.core.util.StrUtil;
 import com.aliyun.dingtalkoauth2_1_0.Client;
 import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest;
 import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse;
+import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTOHeaders;
+import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTORequest;
+import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTOResponse;
+import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTOResponseBody;
 import com.aliyun.tea.TeaException;
 import com.aliyun.teaopenapi.models.Config;
 import com.aliyun.teautil.Common;
+import com.aliyun.teautil.models.RuntimeOptions;
 import com.dingtalk.api.DefaultDingTalkClient;
 import com.dingtalk.api.DingTalkClient;
-import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
 import com.dingtalk.api.request.OapiRobotSendRequest;
 import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
-import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
 import com.dingtalk.api.response.OapiRobotSendResponse;
 import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
 import com.google.gson.Gson;
@@ -32,6 +36,8 @@
 import java.net.URLEncoder;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import java.util.List;
 
 
 /**
@@ -100,27 +106,53 @@
     /**
      * 鍙戦�佹秷鎭�
      */
-    public DingTalkMessage sendMessage(String userIdList, String message) throws Exception {
+    public DingTalkMessage sendMessage(String userIdListStr, String message) throws Exception {
+
+        if (!StrUtil.isNotEmpty(userIdListStr)) {
+            return new DingTalkMessage(1, 0L, "null");
+        }
+
+        String[] strArray = userIdListStr.split(",");
+        List<String> userIdList = Arrays.asList(strArray);
 
         String accessToken = getAccessToken();
 
-        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
-        OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
-        request.setAgentId(DataAcquisitionConfiguration.AGENT_ID);
-        request.setUseridList(userIdList);
-        request.setToAllUser(false);
+        com.aliyun.dingtalkrobot_1_0.Client client1 = createClient1();
+        BatchSendOTOHeaders batchSendOTOHeaders = new BatchSendOTOHeaders();
+        batchSendOTOHeaders.xAcsDingtalkAccessToken = accessToken;
+        BatchSendOTORequest batchSendOTORequest = new BatchSendOTORequest()
+                .setRobotCode("ding7n8fldhylh2rt2l2")
+                .setUserIds(userIdList)
+                .setMsgKey("sampleText")
+                .setMsgParam("{\"content\": \"" + message + "\"}");
 
-        OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
-        msg.setMsgtype("text");
-        msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text());
-        msg.getText().setContent(message);
-        request.setMsg(msg);
+        try {
+            BatchSendOTOResponse batchSendOTOResponse = client1.batchSendOTOWithOptions(batchSendOTORequest, batchSendOTOHeaders, new RuntimeOptions());
 
-        OapiMessageCorpconversationAsyncsendV2Response rsp = client.execute(request, accessToken);
+            BatchSendOTOResponseBody body = batchSendOTOResponse.getBody();
+            if (StrUtil.isNotEmpty(body.getProcessQueryKey())) {
+                return new DingTalkMessage(0, 0L, "null");
+            }
 
-        Gson gson = new Gson();
+        } catch (TeaException err) {
+            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                System.out.println(err.code);
+                System.out.println(err.message);
 
-        return gson.fromJson(rsp.getBody(), DingTalkMessage.class);
+                System.out.println(err.accessDeniedDetail.toString());
+            }
+
+        } catch (Exception _err) {
+            TeaException err = new TeaException(_err.getMessage(), _err);
+            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                System.out.println(err.code);
+                System.out.println(err.message);
+            }
+
+        }
+
+        return new DingTalkMessage(1, 0L, "null");
+        //return gson.fromJson(rsp.getBody(), DingTalkMessage.class);
     }
 
     /**
@@ -155,6 +187,13 @@
         return null;
     }
 
+    public static com.aliyun.dingtalkrobot_1_0.Client createClient1() throws Exception {
+        Config config = new Config();
+        config.protocol = "https";
+        config.regionId = "central";
+        return new com.aliyun.dingtalkrobot_1_0.Client(config);
+    }
+
     /**
      * 浣跨敤 Token 鍒濆鍖栬处鍙稢lient
      *
@@ -168,6 +207,7 @@
         return new Client(config);
     }
 
+
     public OapiV2UserGetbymobileResponse getOapiV2UserGetbymobileResponse(SendDingtalk s, String accessToken) {
         DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile");
         OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
diff --git a/src/main/java/com/gs/dingtalk/service/impl/SendDingtalkServiceImpl.java b/src/main/java/com/gs/dingtalk/service/impl/SendDingtalkServiceImpl.java
index cb17f90..c267e80 100644
--- a/src/main/java/com/gs/dingtalk/service/impl/SendDingtalkServiceImpl.java
+++ b/src/main/java/com/gs/dingtalk/service/impl/SendDingtalkServiceImpl.java
@@ -19,6 +19,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -78,7 +79,7 @@
 
         List<SendDingtalk> list = list(wrapper);
 
-        getMessage(list);
+        getMessage(list, 5);
     }
 
     @Override
@@ -88,7 +89,7 @@
 
         List<SendDingtalk> list = list(wrapper);
 
-        getMessage(list);
+        getMessage(list, 30);
     }
 
     @Override
@@ -117,18 +118,26 @@
         });
     }
 
-    private void getMessage(List<SendDingtalk> list) {
+    private void getMessage(List<SendDingtalk> list, int Minutes) {
         List<SendMessage> sendMessageList = sendMessageService.getSendMessageList();
 
         sendMessageList.forEach(s -> {
 
-            String userIdList = list.stream()
-                    .filter(dingtalk -> {
-                        String[] purviews = dingtalk.getPurview().split(",");
-                        return Arrays.asList(purviews).contains(s.getProcNo());
-                    }).map(SendDingtalk::getUserId).collect(Collectors.joining(","));
+            // 鑾峰彇褰撳墠鏃堕棿鐨� LocalDateTime锛屽拷鐣ョ
+            LocalDateTime now = LocalDateTime.now().withSecond(0).withNano(0);
 
-            //閽夐拤鐨勮鍒欓檺鍒� 缁欏悓涓�鍛樺伐涓�澶╁彧鑳藉彂閫佷竴鏉″唴瀹圭浉鍚岀殑娑堟伅閫氱煡銆�
+            // 姣旇緝鏃堕棿锛屽垽鏂� sendDate 鏄惁澶т簬褰撳墠鏃堕棿浜斿垎閽�
+            boolean isGreaterThanFiveMinutes = s.getSendDate().plusMinutes(Minutes).isBefore(now);
+
+            if (!isGreaterThanFiveMinutes) {
+                return;
+            }
+
+            String userIdList = list.stream().filter(dingtalk -> {
+                String[] purviews = dingtalk.getPurview().split(",");
+                return Arrays.asList(purviews).contains(s.getProcNo());
+            }).map(SendDingtalk::getUserId).collect(Collectors.joining(","));
+
             String message = s.getLineName() + s.getProcName() + ",璇峰敖蹇鐞�";
 
             DingTalkMessage dingTalkMessage = null;
diff --git a/src/main/java/com/gs/dingtalk/service/impl/SendMessageServiceImpl.java b/src/main/java/com/gs/dingtalk/service/impl/SendMessageServiceImpl.java
index c2f02c0..3b0f198 100644
--- a/src/main/java/com/gs/dingtalk/service/impl/SendMessageServiceImpl.java
+++ b/src/main/java/com/gs/dingtalk/service/impl/SendMessageServiceImpl.java
@@ -9,7 +9,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -22,11 +21,6 @@
     public List<SendMessage> getSendMessageList() {
         LambdaQueryWrapper<SendMessage> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(SendMessage::getFstatus, "寰呭鐞�");
-
-        List<SendMessage> list = list(queryWrapper);
-
-        List<SendMessage> result = new ArrayList<>();
-        result.add(list.get(0));
-        return result;
+        return list(queryWrapper);
     }
 }
diff --git a/src/main/java/com/gs/dingtalk/task/ScheduledTasks.java b/src/main/java/com/gs/dingtalk/task/ScheduledTasks.java
index 7ba07cb..b20df1c 100644
--- a/src/main/java/com/gs/dingtalk/task/ScheduledTasks.java
+++ b/src/main/java/com/gs/dingtalk/task/ScheduledTasks.java
@@ -10,7 +10,7 @@
 @RequiredArgsConstructor
 public class ScheduledTasks {
 
-    private SendDingtalkService sendDingtalkService;
+    private final SendDingtalkService sendDingtalkService;
 
     /**
      * 姣忎簲鍒嗛挓鎵ц涓�娆�
@@ -21,18 +21,12 @@
      * @description TODO
      * @date 2024/9/27 21:48
      */
-    @Scheduled(cron = "0 0/5 * * * ?")
+    @Scheduled(cron = "0 0/2 * * * ?")
     public void getDeviceRealTimeData() throws Exception {
         sendDingtalkService.sendDingTalkFiveMinute();
     }
 
-    //0/5 * * * * ? *
-    @Scheduled(cron = "0/5 * * * * ?")
-    public void chatSendMessage() throws Exception {
-        sendDingtalkService.chatSendMessage();
-    }
-
-    @Scheduled(cron = "0 0/30 * * * ?")
+    @Scheduled(cron = "0 0/3 * * * ?")
     public void sendDingTalkthirtyMinute() throws Exception {
         sendDingtalkService.sendDingTalkthirtyMinute();
     }
diff --git a/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java b/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
index f68756b..8de1248 100644
--- a/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
+++ b/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
@@ -50,6 +50,11 @@
         sendDingtalkService.sendDingTalkFiveMinute();
     }
 
+    @Test
+    void sendDingTalkthirtyMinute() throws Exception {
+        sendDingtalkService.sendDingTalkthirtyMinute();
+    }
+
     //chatSendMessage
     @Test
     void chatSendMessage() throws Exception {

--
Gitblit v1.9.3