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