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 + "×tamp=" + 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