From 29f287cf6e4869d7bbc283991458e09a03b59c52 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期三, 21 一月 2026 14:29:55 +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