| src/main/java/com/gs/xky/service/WorkWXService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/test/java/com/gs/xky/XkyApplicationTests.java | ●●●●● 补丁 | 查看 | 原始文档 | 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("=== 测试结束 ==="); }