From f61d65290e3d7ba23432a9a017065af0e0636a1a Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期一, 18 十一月 2024 09:17:58 +0800
Subject: [PATCH] 钉钉推送消息,发送到个人和发送到群聊

---
 src/main/java/com/gs/dingtalk/mapper/SendMessageMapper.java             |    9 
 src/main/java/com/gs/dingtalk/task/ScheduledTasks.java                  |   16 +
 src/main/java/com/gs/dingtalk/entity/SendMessage.java                   |  144 +++++++++++
 src/main/java/com/gs/dingtalk/service/impl/SendMessageServiceImpl.java  |   32 ++
 pom.xml                                                                 |   17 +
 src/main/java/com/gs/dingtalk/service/SimpleExample.java                |  185 ++++++++++++++
 src/main/java/com/gs/dingtalk/entity/SendDingtalk.java                  |   48 +++
 src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java      |   25 +
 src/main/java/com/gs/dingtalk/dto/DingTalkResponse.java                 |   23 +
 src/main/java/com/gs/dingtalk/service/impl/SendDingtalkServiceImpl.java |  146 +++++++++++
 src/main/java/com/gs/dingtalk/config/DataAcquisitionConfiguration.java  |   23 +
 src/main/java/com/gs/dingtalk/service/SendDingtalkService.java          |   16 +
 src/main/java/com/gs/dingtalk/mapper/SendDingtalkMapper.java            |   10 
 src/main/java/com/gs/dingtalk/dto/DingTalkMessage.java                  |   21 +
 src/main/resources/application.yml                                      |    6 
 src/main/resources/mapper/SendDingtalkMapper.xml                        |    8 
 src/main/java/com/gs/dingtalk/dto/Result.java                           |   17 +
 src/main/java/com/gs/dingtalk/service/SendMessageService.java           |   11 
 src/main/resources/mapper/SendMessageMapper.xml                         |    8 
 19 files changed, 757 insertions(+), 8 deletions(-)

diff --git a/pom.xml b/pom.xml
index d432e19..b1bc3de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -67,6 +67,23 @@
             <version>4.9.3</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dingtalk</artifactId>
+            <version>2.0.14</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.11</version>
+        </dependency>
 
         <dependency>
             <groupId>com.alibaba</groupId>
diff --git a/src/main/java/com/gs/dingtalk/config/DataAcquisitionConfiguration.java b/src/main/java/com/gs/dingtalk/config/DataAcquisitionConfiguration.java
index bf98b52..7ad8e45 100644
--- a/src/main/java/com/gs/dingtalk/config/DataAcquisitionConfiguration.java
+++ b/src/main/java/com/gs/dingtalk/config/DataAcquisitionConfiguration.java
@@ -3,9 +3,24 @@
 
 public class DataAcquisitionConfiguration {
 
-    public static final String APP_ID =
-            "d18e3c5b-6c75-4383-a1e5-ab3ea126053a";
+    /**
+     * 搴旂敤鐨� AgentId
+     */
+    public static final Long AGENT_ID = 3303296035L;
+    /**
+     * 搴旂敤鐨� AppKey
+     */
+    public static final String APP_KEY = "dingyfqkfjecy4cjfyxa";
+    /**
+     * 搴旂敤鐨� AppSecret
+     */
+    public static final String APP_SECRET = "nCwmyBw8K-EqAvkuhrhhqFonbLp455awtMa4D4Q-VRaY8U2EDEVsnYSYYfPvjiAX";
 
-    public static final String PUBLIC_KEY =
-            "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWc1nZ3OlSTCI6RnLLe+UNtJS05rUUbz4KooGo 4FQpDSPkTJncHHb6dGWleCuWob2gwZo+xYDa7B5s2qmWsqvtbCeRRGsNwuDJku1Idh7S3cWPWYow 9upJGqYmnVv0QQ4AMc2VWerTHUa7ZJSSbZZj+rd+gcbMdjp8GUHZwRI69wIDAQAB";
+    public static final String CORP_ID = "ding1dd72cd1d6adf70aa1320dcb25e91351";
+
+    //缇よ亰鏈哄櫒浜虹浉鍏�
+
+    public static final String CUSTOM_ROBOT_TOKEN = "c2849e46cb0d91b0721c377742938b8ac5ef57e3c9eeab918e2cd5dd9c3aad2a";
+
+    public static final String SECRET = "SEC382027a5c81ea5152b71b687fb2c1ebf26acbde035355da6ab2fb37306454134";
 }
diff --git a/src/main/java/com/gs/dingtalk/dto/DingTalkMessage.java b/src/main/java/com/gs/dingtalk/dto/DingTalkMessage.java
new file mode 100644
index 0000000..5c098b8
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/dto/DingTalkMessage.java
@@ -0,0 +1,21 @@
+package com.gs.dingtalk.dto;
+
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DingTalkMessage {
+    @SerializedName("errcode")
+    private int errcode;
+
+    @SerializedName("task_id")
+    private Long taskId;
+
+    @SerializedName("request_id")
+    private String requestId;
+}
diff --git a/src/main/java/com/gs/dingtalk/dto/DingTalkResponse.java b/src/main/java/com/gs/dingtalk/dto/DingTalkResponse.java
new file mode 100644
index 0000000..fe169c6
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/dto/DingTalkResponse.java
@@ -0,0 +1,23 @@
+package com.gs.dingtalk.dto;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DingTalkResponse {
+
+    @SerializedName("errcode")
+    private int errcode;
+
+    @SerializedName("errmsg")
+    private String errmsg;
+
+    @SerializedName("result")
+    private Result result;
+
+}
diff --git a/src/main/java/com/gs/dingtalk/dto/Result.java b/src/main/java/com/gs/dingtalk/dto/Result.java
new file mode 100644
index 0000000..f1ace1c
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/dto/Result.java
@@ -0,0 +1,17 @@
+package com.gs.dingtalk.dto;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Result {
+
+    // Getters and Setters
+    @SerializedName("exclusive_account_userid_list")
+    private List<String> exclusiveAccountUseridList;
+
+    private String userid;
+
+}
diff --git a/src/main/java/com/gs/dingtalk/entity/SendDingtalk.java b/src/main/java/com/gs/dingtalk/entity/SendDingtalk.java
new file mode 100644
index 0000000..30df714
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/entity/SendDingtalk.java
@@ -0,0 +1,48 @@
+package com.gs.dingtalk.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@TableName("send_dingtalk")
+@KeySequence(value = "SEQ_SEND", dbType = DbType.ORACLE)
+public class SendDingtalk implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId
+    private Long id;        // 涓婚敭
+
+    /**
+     * 閽夐拤id
+     */
+    private String userId;
+
+    /**
+     * 鐢ㄦ埛鍚�
+     */
+    private String userName;
+
+    /**
+     * 鎵嬫満鍙�
+     */
+    private String telephone;
+
+    /**
+     * 鎺ユ敹鐨勬潈闄� 1:鍛煎彨鐗╂枡 2:鍛煎彨鐝暱 3:鍛煎彨鍝佽川
+     */
+    private String purview;
+
+    /**
+     * 浜斿垎閽熻鎻愰啋鐨勪汉  0琛ㄧず涓嶆彁閱�  1 琛ㄧず鎻愰啋
+     */
+    private Integer fiveMinuteReminder;
+
+    /**
+     * 涓夊崄鍒嗛挓璇ユ彁閱掔殑浜� 0琛ㄧず涓嶆彁閱�  1 琛ㄧず鎻愰啋
+     */
+    private Integer thirtyMinuteReminder;
+}
diff --git a/src/main/java/com/gs/dingtalk/entity/SendMessage.java b/src/main/java/com/gs/dingtalk/entity/SendMessage.java
new file mode 100644
index 0000000..643a962
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/entity/SendMessage.java
@@ -0,0 +1,144 @@
+package com.gs.dingtalk.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("send_message")
+public class SendMessage implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "ID")
+    private Long id;
+
+    /**
+     * 鍙戦�佸櫒搴忓彿
+     */
+    private String scallno;
+
+    /**
+     * 鍙戦�佸櫒ID
+     */
+    private String snedvalues;
+
+    /**
+     * 寮傚父绫诲瀷
+     */
+    private String errCode;
+
+    /**
+     * 浜х嚎缂栧彿
+     */
+    private String lineNo;
+
+    /**
+     * 宸ュ簭缂栧彿
+     */
+    private String procNo;
+
+    /**
+     * 宸ヤ綅
+     */
+    private Integer procLine;
+
+    /**
+     * 寮�濮嬪缃�
+     */
+    private LocalDateTime recDate;
+
+    /**
+     * 鍒涘缓浜�
+     */
+    private String createBy;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private LocalDateTime createDate;
+
+    /**
+     * 鏈�鍚庢洿鏂颁汉
+     */
+    private String lastupdateBy;
+
+    /**
+     * 鏈�鍚庢洿鏂版椂闂�
+     */
+    private LocalDateTime lastupdateDate;
+
+    /**
+     * 澶囨敞
+     */
+    private String memo;
+
+    /**
+     * 鐘舵��
+     */
+    private String fstatus;
+
+    /**
+     * 澶勭悊浜哄憳
+     */
+    private String excBy;
+
+    /**
+     * 瀵圭瓥瀹屾垚
+     */
+    private LocalDateTime excDate;
+
+    /**
+     * 寮傚父鎻忚堪
+     */
+    private String errMemo;
+
+    /**
+     * 鎺ユ敹浜哄憳
+     */
+    private String recBy;
+
+    /**
+     * 寮傚父瀵圭瓥
+     */
+    private String errExc;
+
+    /**
+     * mid
+     */
+    private Long mid;
+
+    /**
+     * 鍙戦�佹椂闂�
+     */
+    @TableField("SENDDATE")
+    private LocalDateTime sendDate;
+
+    /**
+     * 浜х嚎鍚嶇О
+     */
+    private String lineName;
+
+    /**
+     * 宸ュ簭鍚嶇О
+     */
+    private String procName;
+
+    /**
+     * 澶勭悊鏃堕暱
+     */
+    private Integer timeLength;
+
+    /**
+     * (鍒嗛挓)
+     */
+    private Integer rem;
+}
diff --git a/src/main/java/com/gs/dingtalk/mapper/SendDingtalkMapper.java b/src/main/java/com/gs/dingtalk/mapper/SendDingtalkMapper.java
new file mode 100644
index 0000000..59517c5
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/mapper/SendDingtalkMapper.java
@@ -0,0 +1,10 @@
+package com.gs.dingtalk.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gs.dingtalk.entity.SendDingtalk;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SendDingtalkMapper extends BaseMapper<SendDingtalk> {
+
+}
diff --git a/src/main/java/com/gs/dingtalk/mapper/SendMessageMapper.java b/src/main/java/com/gs/dingtalk/mapper/SendMessageMapper.java
new file mode 100644
index 0000000..7aefbfa
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/mapper/SendMessageMapper.java
@@ -0,0 +1,9 @@
+package com.gs.dingtalk.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gs.dingtalk.entity.SendMessage;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SendMessageMapper extends BaseMapper<SendMessage> {
+}
diff --git a/src/main/java/com/gs/dingtalk/service/SendDingtalkService.java b/src/main/java/com/gs/dingtalk/service/SendDingtalkService.java
new file mode 100644
index 0000000..e454b7e
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/service/SendDingtalkService.java
@@ -0,0 +1,16 @@
+package com.gs.dingtalk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gs.dingtalk.entity.SendDingtalk;
+
+public interface SendDingtalkService extends IService<SendDingtalk> {
+
+
+    void getDingTalkUserId() throws Exception;
+
+    void sendDingTalkFiveMinute() throws Exception;
+
+    void sendDingTalkthirtyMinute() throws Exception;
+
+    void chatSendMessage() throws Exception;
+}
diff --git a/src/main/java/com/gs/dingtalk/service/SendMessageService.java b/src/main/java/com/gs/dingtalk/service/SendMessageService.java
new file mode 100644
index 0000000..999a58b
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/service/SendMessageService.java
@@ -0,0 +1,11 @@
+package com.gs.dingtalk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gs.dingtalk.entity.SendMessage;
+
+import java.util.List;
+
+public interface SendMessageService extends IService<SendMessage> {
+
+    List<SendMessage> getSendMessageList();
+}
diff --git a/src/main/java/com/gs/dingtalk/service/SimpleExample.java b/src/main/java/com/gs/dingtalk/service/SimpleExample.java
new file mode 100644
index 0000000..b8f0fb0
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/service/SimpleExample.java
@@ -0,0 +1,185 @@
+package com.gs.dingtalk.service;
+
+
+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.tea.TeaException;
+import com.aliyun.teaopenapi.models.Config;
+import com.aliyun.teautil.Common;
+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;
+import com.gs.dingtalk.config.DataAcquisitionConfiguration;
+import com.gs.dingtalk.dto.DingTalkMessage;
+import com.gs.dingtalk.dto.DingTalkResponse;
+import com.gs.dingtalk.entity.SendDingtalk;
+import com.taobao.api.ApiException;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+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;
+
+
+/**
+ * 鍙戦�佷釜浜烘秷鎭�
+ *
+ * @author tjx
+ * @date 2024/11/17 16:18
+ */
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class SimpleExample {
+
+    /**
+     * 缇ら噷鏈哄櫒浜哄彂閫佹秷鎭�
+     *
+     * @author tjx
+     * @date 2024/11/18 08:54
+     */
+    public DingTalkResponse chatSendMessage(String message) throws Exception {
+        try {
+            Long timestamp = System.currentTimeMillis();
+            System.out.println(timestamp);
+            String secret = DataAcquisitionConfiguration.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");
+            System.out.println(sign);
+
+            //sign瀛楁鍜宼imestamp瀛楁蹇呴』鎷兼帴鍒拌姹俇RL涓婏紝鍚﹀垯浼氬嚭鐜� 310000 鐨勯敊璇俊鎭�
+            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?sign=" + sign + "&timestamp=" + timestamp);
+            OapiRobotSendRequest req = new OapiRobotSendRequest();
+            /**
+             * 鍙戦�佹枃鏈秷鎭�
+             */
+            //瀹氫箟鏂囨湰鍐呭
+            OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
+            text.setContent(message);
+            //瀹氫箟 @ 瀵硅薄
+            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
+            at.setIsAtAll(true);
+            //璁剧疆娑堟伅绫诲瀷
+            req.setMsgtype("text");
+            req.setText(text);
+            req.setAt(at);
+            OapiRobotSendResponse rsp = client.execute(req, DataAcquisitionConfiguration.CUSTOM_ROBOT_TOKEN);
+
+            Gson gson = new Gson();
+
+            return gson.fromJson(rsp.getBody(), DingTalkResponse.class);
+        } catch (ApiException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException(e);
+        } catch (InvalidKeyException e) {
+            throw new RuntimeException(e);
+        }
+
+        return null;
+    }
+
+    /**
+     * 鍙戦�佹秷鎭�
+     */
+    public DingTalkMessage sendMessage(String userIdList, String message) throws Exception {
+
+        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);
+
+        OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
+        msg.setMsgtype("text");
+        msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text());
+        msg.getText().setContent(message);
+        request.setMsg(msg);
+
+        OapiMessageCorpconversationAsyncsendV2Response rsp = client.execute(request, accessToken);
+
+        Gson gson = new Gson();
+
+        return gson.fromJson(rsp.getBody(), DingTalkMessage.class);
+    }
+
+    /**
+     * 鑾峰彇 AccessToken
+     *
+     * @return AccessToken
+     * @throws Exception
+     */
+    public String getAccessToken() throws Exception {
+        Client client = createClient();
+        GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest()
+                .setAppKey(DataAcquisitionConfiguration.APP_KEY)
+                .setAppSecret(DataAcquisitionConfiguration.APP_SECRET);
+        try {
+            GetAccessTokenResponse accessToken = client.getAccessToken(getAccessTokenRequest);
+            return accessToken.body.getAccessToken();
+
+        } catch (TeaException err) {
+            if (!Common.empty(err.code) && !Common.empty(err.message)) {
+                // err 涓惈鏈� code 鍜� message 灞炴�э紝鍙府鍔╁紑鍙戝畾浣嶉棶棰�
+                System.out.println(err.code);
+                System.out.println(err.message);
+            }
+        } catch (Exception exception) {
+            TeaException err = new TeaException(exception.getMessage(), exception);
+            if (!Common.empty(err.code) && !Common.empty(err.message)) {
+                // err 涓惈鏈� code 鍜� message 灞炴�э紝鍙府鍔╁紑鍙戝畾浣嶉棶棰�
+                System.out.println(err.code);
+                System.out.println(err.message);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 浣跨敤 Token 鍒濆鍖栬处鍙稢lient
+     *
+     * @return Client
+     * @throws Exception
+     */
+    public Client createClient() throws Exception {
+        Config config = new Config();
+        config.protocol = "https";
+        config.regionId = "central";
+        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();
+        req.setMobile(s.getTelephone());
+        req.setSupportExclusiveAccountSearch(true);
+        OapiV2UserGetbymobileResponse rsp = null;
+
+        try {
+            rsp = client.execute(req, accessToken);
+        } catch (ApiException e) {
+            throw new RuntimeException(e);
+        }
+        return rsp;
+    }
+}
diff --git a/src/main/java/com/gs/dingtalk/service/impl/SendDingtalkServiceImpl.java b/src/main/java/com/gs/dingtalk/service/impl/SendDingtalkServiceImpl.java
new file mode 100644
index 0000000..cb17f90
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/service/impl/SendDingtalkServiceImpl.java
@@ -0,0 +1,146 @@
+package com.gs.dingtalk.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
+import com.google.gson.Gson;
+import com.gs.dingtalk.dto.DingTalkMessage;
+import com.gs.dingtalk.dto.DingTalkResponse;
+import com.gs.dingtalk.entity.SendDingtalk;
+import com.gs.dingtalk.entity.SendMessage;
+import com.gs.dingtalk.mapper.SendDingtalkMapper;
+import com.gs.dingtalk.service.SendDingtalkService;
+import com.gs.dingtalk.service.SendMessageService;
+import com.gs.dingtalk.service.SimpleExample;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class SendDingtalkServiceImpl extends ServiceImpl<SendDingtalkMapper, SendDingtalk> implements SendDingtalkService {
+
+
+    private final SimpleExample simpleExample;
+
+    private final SendMessageService sendMessageService;
+
+    @Override
+    public void getDingTalkUserId() throws Exception {
+        String accessToken = simpleExample.getAccessToken();
+
+        LambdaQueryWrapper<SendDingtalk> wrapper = new LambdaQueryWrapper<>();
+        wrapper.isNull(SendDingtalk::getUserId);
+        List<SendDingtalk> list = list(wrapper);
+
+        list.forEach(s -> {
+
+            OapiV2UserGetbymobileResponse rsp = simpleExample.getOapiV2UserGetbymobileResponse(s, accessToken);
+
+            // 浣跨敤 Gson 瑙f瀽鍝嶅簲鏁版嵁
+            Gson gson = new Gson();
+            DingTalkResponse response = gson.fromJson(rsp.getBody(), DingTalkResponse.class);
+
+            if ("ok".equals(response.getErrmsg())) {
+
+                List<String> exclusiveAccountUseridList = response.getResult().getExclusiveAccountUseridList();
+
+                String userId = "";
+                if (CollectionUtil.isNotEmpty(exclusiveAccountUseridList)) {
+                    userId = exclusiveAccountUseridList.get(0);
+                } else if (StrUtil.isNotEmpty(response.getResult().getUserid())) {
+                    userId = response.getResult().getUserid();
+                }
+
+                LambdaUpdateWrapper<SendDingtalk> updateWrapper = new LambdaUpdateWrapper<>();
+                updateWrapper.set(SendDingtalk::getUserId, userId).eq(SendDingtalk::getId, s.getId());
+
+                update(updateWrapper);
+            }
+
+        });
+    }
+
+    @Override
+    public void sendDingTalkFiveMinute() throws Exception {
+
+        LambdaQueryWrapper<SendDingtalk> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SendDingtalk::getFiveMinuteReminder, 1);
+
+        List<SendDingtalk> list = list(wrapper);
+
+        getMessage(list);
+    }
+
+    @Override
+    public void sendDingTalkthirtyMinute() throws Exception {
+        LambdaQueryWrapper<SendDingtalk> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SendDingtalk::getThirtyMinuteReminder, 1);
+
+        List<SendDingtalk> list = list(wrapper);
+
+        getMessage(list);
+    }
+
+    @Override
+    public void chatSendMessage() throws Exception {
+        List<SendMessage> sendMessageList = sendMessageService.getSendMessageList();
+
+        sendMessageList.forEach(s -> {
+
+            //閽夐拤鐨勮鍒欓檺鍒� 缁欏悓涓�鍛樺伐涓�澶╁彧鑳藉彂閫佷竴鏉″唴瀹圭浉鍚岀殑娑堟伅閫氱煡銆�
+            String message = s.getLineName() + s.getProcName() + ",璇峰敖蹇鐞�";
+
+            DingTalkResponse dingTalkResponse = null;
+
+            try {
+                dingTalkResponse = simpleExample.chatSendMessage(message);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+
+            if (dingTalkResponse != null) {
+                if (dingTalkResponse.getErrcode() == 0) {
+                    System.out.println("鍙戦�佹垚鍔�");
+                }
+            }
+
+        });
+    }
+
+    private void getMessage(List<SendDingtalk> list) {
+        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(","));
+
+            //閽夐拤鐨勮鍒欓檺鍒� 缁欏悓涓�鍛樺伐涓�澶╁彧鑳藉彂閫佷竴鏉″唴瀹圭浉鍚岀殑娑堟伅閫氱煡銆�
+            String message = s.getLineName() + s.getProcName() + ",璇峰敖蹇鐞�";
+
+            DingTalkMessage dingTalkMessage = null;
+            try {
+                dingTalkMessage = simpleExample.sendMessage(userIdList, message);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+
+            if (dingTalkMessage.getErrcode() == 0) {
+                System.out.println("鍙戦�佹垚鍔�");
+            }
+        });
+    }
+}
diff --git a/src/main/java/com/gs/dingtalk/service/impl/SendMessageServiceImpl.java b/src/main/java/com/gs/dingtalk/service/impl/SendMessageServiceImpl.java
new file mode 100644
index 0000000..c2f02c0
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/service/impl/SendMessageServiceImpl.java
@@ -0,0 +1,32 @@
+package com.gs.dingtalk.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gs.dingtalk.entity.SendMessage;
+import com.gs.dingtalk.mapper.SendMessageMapper;
+import com.gs.dingtalk.service.SendMessageService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class SendMessageServiceImpl extends ServiceImpl<SendMessageMapper, SendMessage> implements SendMessageService {
+
+
+    @Override
+    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;
+    }
+}
diff --git a/src/main/java/com/gs/dingtalk/task/ScheduledTasks.java b/src/main/java/com/gs/dingtalk/task/ScheduledTasks.java
index 5cccab2..7ba07cb 100644
--- a/src/main/java/com/gs/dingtalk/task/ScheduledTasks.java
+++ b/src/main/java/com/gs/dingtalk/task/ScheduledTasks.java
@@ -1,6 +1,7 @@
 package com.gs.dingtalk.task;
 
 
+import com.gs.dingtalk.service.SendDingtalkService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -8,6 +9,8 @@
 @Component
 @RequiredArgsConstructor
 public class ScheduledTasks {
+
+    private SendDingtalkService sendDingtalkService;
 
     /**
      * 姣忎簲鍒嗛挓鎵ц涓�娆�
@@ -19,7 +22,18 @@
      * @date 2024/9/27 21:48
      */
     @Scheduled(cron = "0 0/5 * * * ?")
-    public void getDeviceRealTimeData() {
+    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 * * * ?")
+    public void sendDingTalkthirtyMinute() throws Exception {
+        sendDingtalkService.sendDingTalkthirtyMinute();
     }
 }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index f272b3b..0790698 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -5,9 +5,9 @@
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     driver-class-name: oracle.jdbc.OracleDriver
-    url: jdbc:oracle:thin:@192.168.11.251:1521/orcl
-    username: sg_prd
-    password: sgprd
+    url: jdbc:oracle:thin:@192.168.0.100:1521/orcl
+    username: yc_dev
+    password: ycdev
     druid:
       initialSize: 5
       minIdle: 5
diff --git a/src/main/resources/mapper/SendDingtalkMapper.xml b/src/main/resources/mapper/SendDingtalkMapper.xml
new file mode 100644
index 0000000..1f70d9e
--- /dev/null
+++ b/src/main/resources/mapper/SendDingtalkMapper.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.gs.dingtalk.mapper.SendDingtalkMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/SendMessageMapper.xml b/src/main/resources/mapper/SendMessageMapper.xml
new file mode 100644
index 0000000..b6c9cf3
--- /dev/null
+++ b/src/main/resources/mapper/SendMessageMapper.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.gs.dingtalk.mapper.SendMessageMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java b/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
index aaba91d..f68756b 100644
--- a/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
+++ b/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
@@ -1,7 +1,10 @@
 package com.gs.dingtalk;
 
 import com.gs.dingtalk.config.URLEncoder;
+import com.gs.dingtalk.service.SendDingtalkService;
+import com.gs.dingtalk.service.SimpleExample;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.math.BigDecimal;
@@ -10,6 +13,12 @@
 @SpringBootTest
 class DeviceReceivingApplicationTests {
 
+
+    @Autowired
+    private SimpleExample simpleExample;
+
+    @Autowired
+    private SendDingtalkService sendDingtalkService;
 
     @Test
     void contextLoads() {
@@ -30,4 +39,20 @@
         String encode = URLEncoder.encode("");
         System.out.println(encode);
     }
+
+    @Test
+    void getPhone() throws Exception {
+        sendDingtalkService.getDingTalkUserId();
+    }
+
+    @Test
+    void sendDingTalk() throws Exception {
+        sendDingtalkService.sendDingTalkFiveMinute();
+    }
+
+    //chatSendMessage
+    @Test
+    void chatSendMessage() throws Exception {
+        sendDingtalkService.chatSendMessage();
+    }
 }

--
Gitblit v1.9.3