From cec65038e8b9b80dca71b017ef18d0f027b47891 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期三, 26 十一月 2025 13:46:03 +0800
Subject: [PATCH] 新增企业微信的接口

---
 src/main/java/com/gs/xky/service/WorkWXService.java |  113 ++++++++++------------
 src/test/java/com/gs/xky/XkyApplicationTests.java   |  134 --------------------------
 2 files changed, 52 insertions(+), 195 deletions(-)

diff --git a/src/main/java/com/gs/xky/service/WorkWXService.java b/src/main/java/com/gs/xky/service/WorkWXService.java
index 70b63fc..300521d 100644
--- a/src/main/java/com/gs/xky/service/WorkWXService.java
+++ b/src/main/java/com/gs/xky/service/WorkWXService.java
@@ -97,77 +97,65 @@
         }
     }
 
-    public String getUserIdByMobile(String mobile) throws IOException {
-        String accessToken = getContactAccessToken();
-        String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserid?access_token=%s", accessToken);
-
-        Map<String, Object> requestBody = new HashMap<>();
-        requestBody.put("mobile", mobile);
-
-        MediaType mediaType = MediaType.parse("application/json; charset=UTF-8");
-        String jsonBody = objectMapper.writeValueAsString(requestBody);
-        RequestBody body = RequestBody.create(mediaType, jsonBody);
-
-        Request request = new Request.Builder()
-                .url(url)
-                .post(body)
-                .addHeader("Content-Type", "application/json; charset=UTF-8")
-                .build();
-
-        try (Response response = client.newCall(request).execute()) {
-            if (!response.isSuccessful()) {
-                log.error("閫氳繃鎵嬫満鍙疯幏鍙杣serid澶辫触锛孒TTP鐘舵�佺爜: {}", response.code());
-                throw new IOException("鑾峰彇userid澶辫触: " + response.message());
-            }
-
-            String responseBody = response.body().string();
-            log.info("閫氳繃鎵嬫満鍙疯幏鍙杣serid鍝嶅簲: {}", responseBody);
-
-            WorkWXUserIdResponse userIdResponse = objectMapper.readValue(responseBody, WorkWXUserIdResponse.class);
-
-            if (userIdResponse.getErrcode() != 0) {
-                log.error("閫氳繃鎵嬫満鍙疯幏鍙杣serid澶辫触锛岄敊璇爜: {}, 閿欒淇℃伅: {}",
-                        userIdResponse.getErrcode(), userIdResponse.getErrmsg());
-                throw new IOException("鑾峰彇userid澶辫触: " + userIdResponse.getErrmsg());
-            }
-
-            log.info("鎴愬姛閫氳繃鎵嬫満鍙� {} 鑾峰彇userid: {}", mobile, userIdResponse.getUserid());
-            return userIdResponse.getUserid();
-        }
-    }
 
     public List<WorkWXUser> getUserList() throws IOException {
         String accessToken = getContactAccessToken();
         String url = String.format(
-                "https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=%s&department_id=1&fetch_child=1",
+                "https://qyapi.weixin.qq.com/cgi-bin/user/list_id?access_token=%s",
                 accessToken);
 
-        Request request = new Request.Builder()
-                .url(url)
-                .get()
-                .build();
+        List<WorkWXUser> allUsers = new ArrayList<>();
+        String cursor = null;
 
-        try (Response response = client.newCall(request).execute()) {
-            if (!response.isSuccessful()) {
-                log.error("鑾峰彇浼佷笟寰俊鐢ㄦ埛鍒楄〃澶辫触锛孒TTP鐘舵�佺爜: {}", response.code());
-                throw new IOException("鑾峰彇鐢ㄦ埛鍒楄〃澶辫触: " + response.message());
+        do {
+            Map<String, Object> requestBody = new HashMap<>();
+            requestBody.put("limit", 10000);
+            if (cursor != null) {
+                requestBody.put("cursor", cursor);
             }
 
-            String responseBody = response.body().string();
-            log.info("鑾峰彇鐢ㄦ埛鍒楄〃鍝嶅簲: {}", responseBody);
+            MediaType mediaType = MediaType.parse("application/json; charset=UTF-8");
+            String jsonBody = objectMapper.writeValueAsString(requestBody);
+            RequestBody body = RequestBody.create(mediaType, jsonBody);
 
-            WorkWXUserListResponse userListResponse = objectMapper.readValue(responseBody, WorkWXUserListResponse.class);
+            Request request = new Request.Builder()
+                    .url(url)
+                    .post(body)
+                    .addHeader("Content-Type", "application/json; charset=UTF-8")
+                    .build();
 
-            if (userListResponse.getErrcode() != 0) {
-                log.error("鑾峰彇浼佷笟寰俊鐢ㄦ埛鍒楄〃澶辫触锛岄敊璇爜: {}, 閿欒淇℃伅: {}",
-                        userListResponse.getErrcode(), userListResponse.getErrmsg());
-                throw new IOException("鑾峰彇鐢ㄦ埛鍒楄〃澶辫触: " + userListResponse.getErrmsg());
+            try (Response response = client.newCall(request).execute()) {
+                if (!response.isSuccessful()) {
+                    log.error("鑾峰彇浼佷笟寰俊鐢ㄦ埛鍒楄〃澶辫触锛孒TTP鐘舵�佺爜: {}", response.code());
+                    throw new IOException("鑾峰彇鐢ㄦ埛鍒楄〃澶辫触: " + response.message());
+                }
+
+                String responseBody = response.body().string();
+                log.info("鑾峰彇鐢ㄦ埛鍒楄〃鍝嶅簲: {}", responseBody);
+
+                WorkWXUserListIdResponse userListResponse = objectMapper.readValue(responseBody, WorkWXUserListIdResponse.class);
+
+                if (userListResponse.getErrcode() != 0) {
+                    log.error("鑾峰彇浼佷笟寰俊鐢ㄦ埛鍒楄〃澶辫触锛岄敊璇爜: {}, 閿欒淇℃伅: {}",
+                            userListResponse.getErrcode(), userListResponse.getErrmsg());
+                    throw new IOException("鑾峰彇鐢ㄦ埛鍒楄〃澶辫触: " + userListResponse.getErrmsg());
+                }
+
+                if (userListResponse.getDeptUser() != null && !userListResponse.getDeptUser().isEmpty()) {
+                    allUsers.addAll(userListResponse.getDeptUser());
+                }
+
+                cursor = userListResponse.getNextCursor();
+
+            } catch (IOException e) {
+                log.error("瑙f瀽鐢ㄦ埛鍒楄〃鍝嶅簲澶辫触", e);
+                throw e;
             }
 
-            log.info("鎴愬姛鑾峰彇浼佷笟寰俊鐢ㄦ埛鍒楄〃锛岀敤鎴锋暟閲�: {}",
-                    userListResponse.getUserlist() != null ? userListResponse.getUserlist().size() : 0);
-            return userListResponse.getUserlist();
-        }
+        } while (cursor != null && !cursor.isEmpty());
+
+        log.info("鎴愬姛鑾峰彇浼佷笟寰俊鐢ㄦ埛鍒楄〃锛岀敤鎴锋暟閲�: {}", allUsers.size());
+        return allUsers;
     }
 
     public List<CheckinData> getCheckinDataByQwStaff(long startTime, long endTime) throws IOException {
@@ -281,17 +269,20 @@
     }
 
     @Data
-    private static class WorkWXUserListResponse {
+    private static class WorkWXUserListIdResponse {
         private Integer errcode;
         private String errmsg;
-        private List<WorkWXUser> userlist;
+        @JsonProperty("next_cursor")
+        private String nextCursor;
+        @JsonProperty("dept_user")
+        private List<WorkWXUser> deptUser;
     }
 
     @Data
     public static class WorkWXUser {
         private String userid;
-        private String name;
         private List<Integer> department;
+        private String name;
         @JsonProperty("open_userid")
         private String openUserid;
     }
diff --git a/src/test/java/com/gs/xky/XkyApplicationTests.java b/src/test/java/com/gs/xky/XkyApplicationTests.java
index 4e485e0..6fd5e4f 100644
--- a/src/test/java/com/gs/xky/XkyApplicationTests.java
+++ b/src/test/java/com/gs/xky/XkyApplicationTests.java
@@ -7,7 +7,6 @@
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
 
 @SpringBootTest
@@ -43,139 +42,6 @@
 //            System.out.println("鉁� 瀵煎嚭骞跺彂閫佹椂鍙戠敓寮傚父: " + e.getMessage());
 //            e.printStackTrace();
 //        }
-
-        System.out.println("=== 娴嬭瘯缁撴潫 ===");
-    }
-
-    /**
-     * 娴嬭瘯鑾峰彇浼佷笟寰俊access_token
-     * 鍔熻兘锛氳皟鐢ㄤ紒涓氬井淇PI鑾峰彇access_token
-     */
-    @Test
-    void testGetWorkWXAccessToken() {
-        System.out.println("=== 寮�濮嬫祴璇曡幏鍙栦紒涓氬井淇ccess_token ===");
-
-        try {
-            String accessToken = workWXService.getAccessToken();
-
-            if (accessToken != null && !accessToken.isEmpty()) {
-                System.out.println("鉁� 鎴愬姛鑾峰彇浼佷笟寰俊access_token");
-                System.out.println("  - access_token: " + accessToken);
-                System.out.println("  - token闀垮害: " + accessToken.length());
-            } else {
-                System.out.println("鉁� 鑾峰彇鐨刟ccess_token涓虹┖");
-            }
-        } catch (IOException e) {
-            System.out.println("鉁� 鑾峰彇access_token澶辫触: " + e.getMessage());
-            e.printStackTrace();
-        }
-
-        System.out.println("=== 娴嬭瘯缁撴潫 ===");
-    }
-
-    /**
-     * 娴嬭瘯閫氳繃鎵嬫満鍙疯幏鍙杣serid
-     * 鍔熻兘锛氳皟鐢ㄤ紒涓氬井淇PI閫氳繃鎵嬫満鍙锋煡璇serid
-     */
-    @Test
-    void testGetUserIdByMobile() {
-        System.out.println("=== 寮�濮嬫祴璇曢�氳繃鎵嬫満鍙疯幏鍙杣serid ===");
-
-        try {
-            String mobile = "13335712023";
-            String userid = workWXService.getUserIdByMobile(mobile);
-
-            if (userid != null && !userid.isEmpty()) {
-                System.out.println("鉁� 鎴愬姛閫氳繃鎵嬫満鍙疯幏鍙杣serid");
-                System.out.println("  - 鎵嬫満鍙�: " + mobile);
-                System.out.println("  - userid: " + userid);
-            } else {
-                System.out.println("鉁� 鑾峰彇鐨剈serid涓虹┖");
-            }
-        } catch (IOException e) {
-            System.out.println("鉁� 鑾峰彇userid澶辫触: " + e.getMessage());
-            e.printStackTrace();
-        }
-
-        System.out.println("=== 娴嬭瘯缁撴潫 ===");
-    }
-
-    /**
-     * 娴嬭瘯鑾峰彇浼佷笟寰俊鐢ㄦ埛鍒楄〃
-     * 鍔熻兘锛氳皟鐢ㄤ紒涓氬井淇PI鑾峰彇鎵�鏈夌敤鎴风殑userid鍜岄儴闂ㄤ俊鎭�
-     */
-    @Test
-    void testGetWorkWXUserList() {
-        System.out.println("=== 寮�濮嬫祴璇曡幏鍙栦紒涓氬井淇$敤鎴峰垪琛� ===");
-
-        try {
-            List<WorkWXService.WorkWXUser> userList = workWXService.getUserList();
-
-            if (userList != null && !userList.isEmpty()) {
-                System.out.println("鉁� 鎴愬姛鑾峰彇浼佷笟寰俊鐢ㄦ埛鍒楄〃");
-                System.out.println("  - 鐢ㄦ埛鎬绘暟: " + userList.size());
-                System.out.println("  - 鍓�5鏉℃暟鎹�:");
-                userList.stream().limit(5).forEach(user -> {
-                    System.out.println("    * userid: " + user.getUserid() +
-                            ", name: " + user.getName() +
-                            ", department: " + user.getDepartment());
-                });
-            } else {
-                System.out.println("鉁� 鑾峰彇鐨勭敤鎴峰垪琛ㄤ负绌�");
-            }
-        } catch (IOException e) {
-            System.out.println("鉁� 鑾峰彇鐢ㄦ埛鍒楄〃澶辫触: " + e.getMessage());
-            e.printStackTrace();
-        }
-
-        System.out.println("=== 娴嬭瘯缁撴潫 ===");
-    }
-
-    /**
-     * 娴嬭瘯鑾峰彇浼佷笟寰俊鎵撳崱鏁版嵁
-     * 鍔熻兘锛氳幏鍙栨寚瀹氭椂闂磋寖鍥村唴鐨勫憳宸ユ墦鍗¤褰�
-     */
-    @Test
-    void testGetCheckinData() {
-        System.out.println("=== 寮�濮嬫祴璇曡幏鍙栦紒涓氬井淇℃墦鍗℃暟鎹� ===");
-
-        try {
-            List<WorkWXService.WorkWXUser> userList = workWXService.getUserList();
-
-            if (userList == null || userList.isEmpty()) {
-                System.out.println("鉁� 鏈幏鍙栧埌鐢ㄦ埛鍒楄〃锛屾棤娉曠户缁祴璇�");
-                return;
-            }
-
-            List<String> useridList = new ArrayList<>();
-            userList.forEach(user -> useridList.add(user.getUserid()));
-
-            long endTime = System.currentTimeMillis() / 1000;
-            long startTime = endTime - 86400;
-
-            System.out.println("  - 鐢ㄦ埛鎬绘暟: " + useridList.size());
-            System.out.println("  - 寮�濮嬫椂闂�: " + new java.util.Date(startTime * 1000));
-            System.out.println("  - 缁撴潫鏃堕棿: " + new java.util.Date(endTime * 1000));
-
-            List<WorkWXService.CheckinData> checkinDataList = workWXService.getCheckinData(startTime, endTime, useridList);
-
-            if (checkinDataList != null && !checkinDataList.isEmpty()) {
-                System.out.println("鉁� 鎴愬姛鑾峰彇鎵撳崱鏁版嵁");
-                System.out.println("  - 鎵撳崱璁板綍鎬绘暟: " + checkinDataList.size());
-                System.out.println("  - 鍓�3鏉℃暟鎹�:");
-                checkinDataList.stream().limit(3).forEach(data -> {
-                    System.out.println("    * userid: " + data.getUserid() +
-                            ", 鎵撳崱鏃堕棿: " + new java.util.Date(data.getCheckinTime() * 1000) +
-                            ", 鎵撳崱绫诲瀷: " + data.getCheckinType() +
-                            ", 鍦扮偣: " + data.getLocationDetail());
-                });
-            } else {
-                System.out.println("鉁� 鑾峰彇鐨勬墦鍗℃暟鎹负绌�");
-            }
-        } catch (IOException e) {
-            System.out.println("鉁� 鑾峰彇鎵撳崱鏁版嵁澶辫触: " + e.getMessage());
-            e.printStackTrace();
-        }
 
         System.out.println("=== 娴嬭瘯缁撴潫 ===");
     }

--
Gitblit v1.9.3