From 0bb9f6c3e894e56ff58d335110fbe4cfa87b64b2 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期三, 28 一月 2026 14:17:19 +0800
Subject: [PATCH] 代码提交
---
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java | 149 ++++++++++++++++++++++---------------------------
1 files changed, 67 insertions(+), 82 deletions(-)
diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java
index 99fb158..9974eb6 100644
--- a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java
+++ b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java
@@ -3,19 +3,14 @@
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.dingtalk.api.DefaultDingTalkClient;
-import com.dingtalk.api.DingTalkClient;
-import com.dingtalk.api.request.*;
-import com.dingtalk.api.response.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
-import com.ruoyi.project.domain.vo.DingDetpInfoVo;
import com.ruoyi.project.domain.vo.DingTalkReqVo;
-import com.ruoyi.project.domain.vo.DingUserInfoVo;
import com.ruoyi.project.service.DingTalkService;
+import com.ruoyi.project.utils.DingTalkProxyClient;
import com.ruoyi.system.mapper.SysUserMapper;
import com.taobao.api.ApiException;
import lombok.extern.log4j.Log4j;
@@ -27,6 +22,7 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -54,6 +50,9 @@
@Autowired
private SysUserMapper sysUserMapper;
+ @Autowired
+ private DingTalkProxyClient dingTalkProxyClient;
+
@Override
public Boolean sendNotification(DingTalkReqVo dingTalkReqVo) {
String body = null;
@@ -63,37 +62,32 @@
String accessToken = null;
try {
- accessToken = getAccessToken();
+ accessToken = dingTalkProxyClient.getAccessToken();
} catch (ApiException e) {
e.printStackTrace();
}
if (StringUtils.isNotEmpty(dingTalkReqVo.getNumber())) {
- DingTalkClient clientT = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile");
- OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
- req.setMobile(dingTalkReqVo.getNumber());
- OapiV2UserGetbymobileResponse rsp = null;
+ // 浣跨敤浠g悊瀹㈡埛绔皟鐢ㄨ幏鍙栫敤鎴稩D鎺ュ彛
+ Map<String, String> params = new HashMap<>();
+ params.put("access_token", accessToken);
+ params.put("mobile", dingTalkReqVo.getNumber());
try {
- rsp = clientT.execute(req, accessToken);
- body = rsp.getBody();
+ body = dingTalkProxyClient.executeGet("/topapi/v2/user/getbymobile", params);
String jsonObject = JSONObject.parseObject(body).getJSONObject("result").get("userid").toString();
userIdlist.add(jsonObject);
-
} catch (ApiException e) {
e.printStackTrace();
}
} else {
- DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
-
- OapiUserListidRequest request2 = new OapiUserListidRequest();
- request2.setDeptId(dingTalkReqVo.getDeptId()); // 璁剧疆瑕佽幏鍙栫殑閮ㄩ棬 ID锛岃繖閲屼互鏍归儴闂ㄤ负渚�675909059L
- // 璁剧疆閮ㄩ棬 ID锛屽鏋滆幏鍙栨墍鏈夊憳宸ユ墜鏈哄彿锛屽彲浠ヨ缃负鏍归儴闂ㄧ殑 ID
- OapiUserListidResponse response2 = null;
+ // 浣跨敤浠g悊瀹㈡埛绔皟鐢ㄨ幏鍙栭儴闂ㄧ敤鎴稩D鍒楄〃鎺ュ彛
+ Map<String, String> params = new HashMap<>();
+ params.put("access_token", accessToken);
+ params.put("dept_id", String.valueOf(dingTalkReqVo.getDeptId()));
try {
- response2 = client3.execute(request2, accessToken);
+ body = dingTalkProxyClient.executeGet("/topapi/user/listid", params);
} catch (ApiException e) {
e.printStackTrace();
}
- body = response2.getBody();
// 瑙f瀽涓篔SONObject
JSONObject jsonObject = JSONObject.parseObject(body);
if (jsonObject != null) {
@@ -108,60 +102,62 @@
//userid鏁扮粍
for (String urid : userIdlist) {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
- OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
- request.setUseridList(urid);
- request.setAgentId(agentId);
- request.setToAllUser(false);
+ // 鏋勫缓鍙戦�佹秷鎭殑瀹屾暣JSON瀵硅薄锛岀鍚堥拤閽堿PI鏍煎紡
+ Map<String, Object> messageData = new HashMap<>();
+ messageData.put("userid_list", urid);
+ messageData.put("agent_id", agentId);
+ messageData.put("to_all_user", false);
//鍙戦�佸唴瀹瑰鐞�
List<ConcurrentHashMap<String, Object>> contents = dingTalkReqVo.getContents();
- ArrayList<OapiMessageCorpconversationAsyncsendV2Request.Form> objects = new ArrayList<>();
+ List<Map<String, Object>> objects = new ArrayList<>();
for (int i = 0; i < contents.size(); i++) {
ConcurrentHashMap<String, Object> map = contents.get(i);
for (Map.Entry<String, Object> entry : map.entrySet()) {
- OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form();
- formSeverityDesc.setKey(entry.getKey());
+ Map<String, Object> formItem = new HashMap<>();
+ formItem.put("key", entry.getKey());
if (entry.getKey().contains("瀹℃壒鏃堕棿")) {
Date date = (Date) entry.getValue();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String format = simpleDateFormat.format(date);
- formSeverityDesc.setValue(format);
+ formItem.put("value", format);
} else {
if (entry.getValue() != null) {
- formSeverityDesc.setValue(entry.getValue().toString());
+ formItem.put("value", entry.getValue().toString());
+ } else {
+ formItem.put("value", "");
}
}
- objects.add(formSeverityDesc);
+ objects.add(formItem);
}
}
- OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
- msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());
- msg.getOa().setMessageUrl(dingTalkReqVo.getUrl());
- msg.getOa().setPcMessageUrl(dingTalkReqVo.getUrl());
- msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());
- // msg.getOa().getHead().setText("浣犲湪璇村暐鍛㈢粧椤舵浛鑻涘ず闃挎柉钂傝姮闃挎柉钂傝姮");
- msg.getOa().getHead().setBgcolor("00409eff");
- msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body());
- msg.getOa().getBody().setTitle(dingTalkReqVo.getTitle());
- // msg.getOa().getBody().setContent("寰呭鐞�:" + "123" + "鏉�");
+ Map<String, Object> msg = new HashMap<>();
+ Map<String, Object> oa = new HashMap<>();
+ oa.put("message_url", dingTalkReqVo.getUrl());
+ oa.put("pc_message_url", dingTalkReqVo.getUrl());
+ Map<String, Object> head = new HashMap<>();
+ head.put("bgcolor", "00409eff");
+ oa.put("head", head);
+ Map<String, Object> bodyContent = new HashMap<>();
+ bodyContent.put("title", dingTalkReqVo.getTitle());
+ bodyContent.put("form", objects);
+ oa.put("body", bodyContent);
+ msg.put("oa", oa);
+ msg.put("msgtype", "oa");
+ messageData.put("msg", msg);
- msg.getOa().getBody().setForm(objects);
- msg.setMsgtype("oa");
- request.setMsg(msg);
- // log.info("鑾峰彇鍙戦�侀�氱煡娑堟伅浣撳拰鑾峰彇鍙戦�侀�氱煡浜哄畬鎴�");
- OapiMessageCorpconversationAsyncsendV2Response response = null;
+ // 灏哸ccess_token浣滀负URL鍙傛暟浼犻��
+ String messageJson = JSONObject.toJSONString(messageData);
try {
- response = client.execute(request, accessToken);
+ // 浣跨敤浠g悊瀹㈡埛绔彂閫丳OST璇锋眰
+ body = dingTalkProxyClient.executePost("/topapi/message/corpconversation/asyncsend_v2?access_token=" + accessToken, messageJson);
+ JSONObject response = JSONObject.parseObject(body);
+ result = response.getInteger("errcode") == 0;
} catch (ApiException e) {
- e.getErrMsg();
+ log.error("鍙戦�侀拤閽夋秷鎭け璐�: " + e.getErrMsg());
}
- // log.info("娑堟伅浠诲姟ID"+response.getTaskId());
- System.out.println(response.getTaskId());
-
- result = response.isSuccess();
}
return result;
}
@@ -174,9 +170,8 @@
*/
public Map<String, Object> noLogin(String authCode) {
try {
- String urlString = "https://oapi.dingtalk.com/topapi/v2/user/getuserinfo";
- String params = "access_token=" + getAccessToken() + "&code=" + authCode;
- String result = HttpUtils.sendPost(urlString, params);
+ String params = "access_token=" + dingTalkProxyClient.getAccessToken() + "&code=" + authCode;
+ String result = HttpUtils.sendPost("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo", params);
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> map = objectMapper.readValue(result, Map.class);
return map;
@@ -193,13 +188,13 @@
//鏍规嵁浼犺繃鏉ョ殑閮ㄩ棬ID锛屽幓鑾峰彇璇ラ儴闂ㄤ笅鐨勭敤鎴蜂俊鎭�
if (begin != 1) DingUserInfoList(deptID);
//鑾峰彇瀛愰儴闂ㄧ殑dept_id
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
- OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
- req.setDeptId(deptID);
- req.setLanguage("zh_CN");
- OapiV2DepartmentListsubResponse rsp = client.execute(req, getAccessToken());
+ Map<String, String> params = new HashMap<>();
+ params.put("access_token", dingTalkProxyClient.getAccessToken());
+ params.put("dept_id", deptID.toString());
+ params.put("language", "zh_CN");
+ String rspBody = dingTalkProxyClient.executeGet("/topapi/v2/department/listsub", params);
ObjectMapper objectMapper = new ObjectMapper();
- Map<String, Object> map = objectMapper.readValue(rsp.getBody(), Map.class);
+ Map<String, Object> map = objectMapper.readValue(rspBody, Map.class);
if (ObjectUtils.isNotEmpty(map)) {
List<Map<String, Object>> dingDetpInfoList = (List<Map<String, Object>>) map.get("result");
if (Integer.valueOf(map.get("errcode").toString()) == 0) {
@@ -216,18 +211,17 @@
}
public void DingUserInfoList(Long deptId) {
- DingTalkClient client = null;
try {
- client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/list?access_token=" + getAccessToken());
- OapiV2UserListRequest req = new OapiV2UserListRequest();
- req.setDeptId(deptId);
- req.setCursor(0L);
- req.setSize(100L);
- req.setLanguage("zh_CN");
- OapiV2UserListResponse rsp = client.execute(req, "");
+ Map<String, String> params = new HashMap<>();
+ params.put("access_token", dingTalkProxyClient.getAccessToken());
+ params.put("dept_id", deptId.toString());
+ params.put("cursor", "0");
+ params.put("size", "100");
+ params.put("language", "zh_CN");
+ String rspBody = dingTalkProxyClient.executeGet("/topapi/v2/user/list", params);
//鑾峰彇resp閲岀殑鐢ㄦ埛淇℃伅闆嗗悎
ObjectMapper objectMapper = new ObjectMapper();
- Map<String, Object> map = objectMapper.readValue(rsp.getBody(), Map.class);
+ Map<String, Object> map = objectMapper.readValue(rspBody, Map.class);
Map<String, Object> mapResult = (Map<String, Object>) map.get("result");
List<Map<String, Object>> userInfoMapList = (List<Map<String, Object>>) mapResult.get("list");
if (!CollectionUtils.isEmpty(userInfoMapList)) {
@@ -251,16 +245,7 @@
* 鑾峰彇 access_token
*/
private String getAccessToken() throws ApiException {
- DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
- OapiGettokenRequest request = new OapiGettokenRequest();
- //Appkey
- request.setAppkey(dingAppid);
- //Appsecret
- request.setAppsecret(dingAppSecret);
- /*璇锋眰鏂瑰紡*/
- request.setHttpMethod("GET");
- OapiGettokenResponse response = client.execute(request);
- return response.getAccessToken();
+ return dingTalkProxyClient.getAccessToken();
}
}
--
Gitblit v1.9.3