tjx
2025-11-26 cec65038e8b9b80dca71b017ef18d0f027b47891
新增企业微信的接口
已修改2个文件
213 ■■■■ 文件已修改
src/main/java/com/gs/xky/service/WorkWXService.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/gs/xky/XkyApplicationTests.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/WorkWXService.java
@@ -97,12 +97,22 @@
        }
    }
    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);
    public List<WorkWXUser> getUserList() throws IOException {
        String accessToken = getContactAccessToken();
        String url = String.format(
                "https://qyapi.weixin.qq.com/cgi-bin/user/list_id?access_token=%s",
                accessToken);
        List<WorkWXUser> allUsers = new ArrayList<>();
        String cursor = null;
        do {
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("mobile", mobile);
            requestBody.put("limit", 10000);
            if (cursor != null) {
                requestBody.put("cursor", cursor);
            }
        MediaType mediaType = MediaType.parse("application/json; charset=UTF-8");
        String jsonBody = objectMapper.writeValueAsString(requestBody);
@@ -116,39 +126,6 @@
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                log.error("通过手机号获取userid失败,HTTP状态码: {}", response.code());
                throw new IOException("获取userid失败: " + response.message());
            }
            String responseBody = response.body().string();
            log.info("通过手机号获取userid响应: {}", responseBody);
            WorkWXUserIdResponse userIdResponse = objectMapper.readValue(responseBody, WorkWXUserIdResponse.class);
            if (userIdResponse.getErrcode() != 0) {
                log.error("通过手机号获取userid失败,错误码: {}, 错误信息: {}",
                        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",
                accessToken);
        Request request = new Request.Builder()
                .url(url)
                .get()
                .build();
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                log.error("获取企业微信用户列表失败,HTTP状态码: {}", response.code());
                throw new IOException("获取用户列表失败: " + response.message());
            }
@@ -156,7 +133,7 @@
            String responseBody = response.body().string();
            log.info("获取用户列表响应: {}", responseBody);
            WorkWXUserListResponse userListResponse = objectMapper.readValue(responseBody, WorkWXUserListResponse.class);
                WorkWXUserListIdResponse userListResponse = objectMapper.readValue(responseBody, WorkWXUserListIdResponse.class);
            if (userListResponse.getErrcode() != 0) {
                log.error("获取企业微信用户列表失败,错误码: {}, 错误信息: {}",
@@ -164,10 +141,21 @@
                throw new IOException("获取用户列表失败: " + userListResponse.getErrmsg());
            }
            log.info("成功获取企业微信用户列表,用户数量: {}",
                    userListResponse.getUserlist() != null ? userListResponse.getUserlist().size() : 0);
            return userListResponse.getUserlist();
                if (userListResponse.getDeptUser() != null && !userListResponse.getDeptUser().isEmpty()) {
                    allUsers.addAll(userListResponse.getDeptUser());
        }
                cursor = userListResponse.getNextCursor();
            } catch (IOException e) {
                log.error("解析用户列表响应失败", e);
                throw e;
            }
        } 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;
    }
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
     * 功能:调用企业微信API获取access_token
     */
    @Test
    void testGetWorkWXAccessToken() {
        System.out.println("=== 开始测试获取企业微信access_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("✗ 获取的access_token为空");
            }
        } catch (IOException e) {
            System.out.println("✗ 获取access_token失败: " + e.getMessage());
            e.printStackTrace();
        }
        System.out.println("=== 测试结束 ===");
    }
    /**
     * 测试通过手机号获取userid
     * 功能:调用企业微信API通过手机号查询userid
     */
    @Test
    void testGetUserIdByMobile() {
        System.out.println("=== 开始测试通过手机号获取userid ===");
        try {
            String mobile = "13335712023";
            String userid = workWXService.getUserIdByMobile(mobile);
            if (userid != null && !userid.isEmpty()) {
                System.out.println("✓ 成功通过手机号获取userid");
                System.out.println("  - 手机号: " + mobile);
                System.out.println("  - userid: " + userid);
            } else {
                System.out.println("✗ 获取的userid为空");
            }
        } catch (IOException e) {
            System.out.println("✗ 获取userid失败: " + e.getMessage());
            e.printStackTrace();
        }
        System.out.println("=== 测试结束 ===");
    }
    /**
     * 测试获取企业微信用户列表
     * 功能:调用企业微信API获取所有用户的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("=== 测试结束 ===");
    }