From 2359f47c2f89a9867e72aa9b171cb118b874afec Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 13 三月 2026 10:29:21 +0800
Subject: [PATCH] 代码提交

---
 ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java |   82 +++++++++++++++++++++++++++-------------
 1 files changed, 55 insertions(+), 27 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..4e6e151 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
@@ -5,17 +5,23 @@
 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.dingtalk.api.request.OapiGettokenRequest;
+import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
+import com.dingtalk.api.request.OapiUserListidRequest;
+import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
+import com.dingtalk.api.response.OapiGettokenResponse;
+import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
+import com.dingtalk.api.response.OapiUserListidResponse;
+import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.core.domain.AjaxResult;
 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;
@@ -23,10 +29,12 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestParam;
 
 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;
@@ -53,6 +61,9 @@
 
     @Autowired
     private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private DingTalkProxyClient dingTalkProxyClient;
 
     @Override
     public Boolean sendNotification(DingTalkReqVo dingTalkReqVo) {
@@ -174,17 +185,36 @@
      */
     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);
+            // 澶嶇敤鍚屼竴涓� accessToken锛岄伩鍏嶉噸澶嶈姹�
+            String accessToken = dingTalkProxyClient.getAccessToken();
+
+            // 绗竴姝ワ細authCode 鎹� userid
+            String params = "access_token=" + accessToken + "&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;
+            if (!Integer.valueOf(0).equals(map.get("errcode"))) {
+                throw new BaseException("閽夐拤鐧诲綍澶辫触锛�" + map.get("errmsg"));
+            }
+            Map<String, Object> resultMap = (Map<String, Object>) map.get("result");
+            String userid = (String) resultMap.get("userid");
+
+            // 绗簩姝ワ細userid 鎹㈢敤鎴疯鎯咃紙鍚墜鏈哄彿锛�
+            String params2 = "access_token=" + accessToken + "&userid=" + userid + "&language=zh_CN";
+            String result2 = HttpUtils.sendPost("https://oapi.dingtalk.com/topapi/v2/user/get", params2);
+            Map<String, Object> map2 = objectMapper.readValue(result2, Map.class);
+            if (!Integer.valueOf(0).equals(map2.get("errcode"))) {
+                throw new BaseException("鑾峰彇鐢ㄦ埛璇︽儏澶辫触锛�" + map2.get("errmsg"));
+            }
+            Map<String, Object> userDetail = (Map<String, Object>) map2.get("result");
+
+            return userDetail;
+        } catch (BaseException e) {
+            throw e;
         } catch (Exception e) {
-            log.error(e.getMessage());
-            new BaseException("鐧诲綍鍑哄紓甯镐簡锛岃鑱旂郴绠$悊鍛樺鐞�");
+            log.error("noLogin 寮傚父锛歿}", e);
+            throw new BaseException("鐧诲綍鍑哄紓甯镐簡锛岃鑱旂郴绠$悊鍛樺鐞�");
         }
-        return null;
     }
 
     @Override
@@ -193,13 +223,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 +246,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)) {
@@ -262,5 +291,4 @@
         OapiGettokenResponse response = client.execute(request);
         return response.getAccessToken();
     }
-
 }

--
Gitblit v1.9.3