| | |
| | | package com.gs.xky.service; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.gs.xky.config.DataAcquisitionConfiguration; |
| | | import com.gs.xky.entity.QwStaff; |
| | | import com.gs.xky.mapper.QwStaffMapper; |
| | | import lombok.Data; |
| | | import lombok.RequiredArgsConstructor; |
| | | import okhttp3.*; |
| | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | | @RequiredArgsConstructor |
| | |
| | | .build(); |
| | | |
| | | private final ObjectMapper objectMapper = new ObjectMapper(); |
| | | |
| | | private final QwStaffMapper qwStaffMapper; |
| | | |
| | | public String getAccessToken() throws IOException { |
| | | String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s", |
| | |
| | | } |
| | | } |
| | | |
| | | public String getContactAccessToken() throws IOException { |
| | | String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s", |
| | | DataAcquisitionConfiguration.CORPID, |
| | | DataAcquisitionConfiguration.TXL_CORPSECRET); |
| | | |
| | | Request request = new Request.Builder() |
| | | .url(url) |
| | | .get() |
| | | .build(); |
| | | |
| | | try (Response response = client.newCall(request).execute()) { |
| | | if (!response.isSuccessful()) { |
| | | log.error("获取企业微信通讯录access_token失败,HTTP状态码: {}", response.code()); |
| | | throw new IOException("获取通讯录access_token失败: " + response.message()); |
| | | } |
| | | |
| | | String responseBody = response.body().string(); |
| | | WorkWXTokenResponse tokenResponse = objectMapper.readValue(responseBody, WorkWXTokenResponse.class); |
| | | |
| | | if (tokenResponse.getErrcode() != 0) { |
| | | log.error("获取企业微信通讯录access_token失败,错误码: {}, 错误信息: {}", |
| | | tokenResponse.getErrcode(), tokenResponse.getErrmsg()); |
| | | throw new IOException("获取通讯录access_token失败: " + tokenResponse.getErrmsg()); |
| | | } |
| | | |
| | | log.info("成功获取企业微信通讯录access_token,有效期: {}秒", tokenResponse.getExpiresIn()); |
| | | return tokenResponse.getAccessToken(); |
| | | } |
| | | } |
| | | |
| | | public String getUserIdByMobile(String mobile) throws IOException { |
| | | String accessToken = getAccessToken(); |
| | | 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<>(); |
| | |
| | | } |
| | | |
| | | public List<WorkWXUser> getUserList() throws IOException { |
| | | String accessToken = getAccessToken(); |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | public List<CheckinData> getCheckinDataByQwStaff(long startTime, long endTime) throws IOException { |
| | | List<QwStaff> qwStaffList = qwStaffMapper.selectList(new LambdaQueryWrapper<QwStaff>()); |
| | | |
| | | if (qwStaffList == null || qwStaffList.isEmpty()) { |
| | | log.warn("QW_STAFF表中没有数据"); |
| | | return new ArrayList<>(); |
| | | } |
| | | |
| | | List<String> useridList = qwStaffList.stream() |
| | | .map(QwStaff::getAccount) |
| | | .filter(account -> account != null && !account.isEmpty()) |
| | | .collect(Collectors.toList()); |
| | | |
| | | if (useridList.isEmpty()) { |
| | | log.warn("QW_STAFF表中没有有效的account数据"); |
| | | return new ArrayList<>(); |
| | | } |
| | | |
| | | log.info("从QW_STAFF表获取到 {} 个用户account", useridList.size()); |
| | | return getCheckinData(startTime, endTime, useridList); |
| | | } |
| | | |
| | | public List<CheckinData> getCheckinData(long startTime, long endTime, List<String> useridList) throws IOException { |
| | | String accessToken = getAccessToken(); |
| | | String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckindata?access_token=%s", accessToken); |