From b00edf4891b49f400263601492c3dc819cb7c8a9 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期一, 22 十二月 2025 09:04:48 +0800
Subject: [PATCH] 新增企业微信的接口
---
src/main/java/com/gs/xky/service/WorkWXService.java | 167 +++++++++++++++++++++++++++++++++++--------------------
1 files changed, 106 insertions(+), 61 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..7264696 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 {
@@ -190,6 +178,38 @@
log.info("浠嶲W_STAFF琛ㄨ幏鍙栧埌 {} 涓敤鎴穉ccount", useridList.size());
return getCheckinData(startTime, endTime, useridList);
+ }
+
+ public WorkWXUserDetail getUserDetail(String userid) throws IOException {
+ String accessToken = getContactAccessToken();
+ String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s",
+ accessToken, userid);
+
+ Request request = new Request.Builder()
+ .url(url)
+ .get()
+ .build();
+
+ 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);
+
+ WorkWXUserDetailResponse userDetailResponse = objectMapper.readValue(responseBody, WorkWXUserDetailResponse.class);
+
+ if (userDetailResponse.getErrcode() != 0) {
+ log.error("鑾峰彇鐢ㄦ埛璇︽儏澶辫触锛岄敊璇爜: {}, 閿欒淇℃伅: {}",
+ userDetailResponse.getErrcode(), userDetailResponse.getErrmsg());
+ throw new IOException("鑾峰彇鐢ㄦ埛璇︽儏澶辫触: " + userDetailResponse.getErrmsg());
+ }
+
+ log.info("鎴愬姛鑾峰彇鐢ㄦ埛 {} 鐨勮鎯�", userid);
+ return userDetailResponse;
+ }
}
public List<CheckinData> getCheckinData(long startTime, long endTime, List<String> useridList) throws IOException {
@@ -281,19 +301,36 @@
}
@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 Integer department;
private String name;
- private List<Integer> department;
@JsonProperty("open_userid")
private String openUserid;
+ }
+
+ @Data
+ public static class WorkWXUserDetail {
+ private Integer errcode;
+ private String errmsg;
+ private String userid;
+ private String name;
+ private String mobile;
+ private String position;
+ }
+
+ @Data
+ private static class WorkWXUserDetailResponse extends WorkWXUserDetail {
}
@Data
@@ -323,5 +360,13 @@
private String mediaids;
private Double lat;
private Double lng;
+ @JsonProperty("sch_checkin_time")
+ private Long schCheckinTime;
+ private Integer groupid;
+ @JsonProperty("schedule_id")
+ private Integer scheduleId;
+ @JsonProperty("timeline_id")
+ private Integer timelineId;
+ private String deviceid;
}
}
--
Gitblit v1.9.3