|
@@ -2552,6 +2552,83 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Async("taskExecutor")
|
|
|
+ public void getUserByCompanyIdAndTransferLicenseBatch(Integer companyId, List<String> takeoverIdList) throws Exception {
|
|
|
+ if (takeoverIdList.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ String providerAccessToken = getProviderAccessToken();
|
|
|
+ String url = "https://qyapi.weixin.qq.com/cgi-bin/license/get_active_info_by_user?provider_access_token=" + providerAccessToken;
|
|
|
+
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
|
|
|
+ List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active", 0));
|
|
|
+
|
|
|
+ // 被转移的人
|
|
|
+ if (!users.isEmpty() && wxCorpInfo != null && wxCorpInfo.getSaasSyncContact().equals(1)) {
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ RestTemplate restTemplate = new RestTemplate();
|
|
|
+ headers.setContentType(MediaType.APPLICATION_JSON);
|
|
|
+ headers.add("Accept", MediaType.APPLICATION_JSON.toString());
|
|
|
+
|
|
|
+ for (String takeoverId : takeoverIdList) {
|
|
|
+ for (Iterator<User> iterator = users.iterator(); iterator.hasNext(); ) {
|
|
|
+ User item = iterator.next();
|
|
|
+ JSONObject requestMap = new JSONObject();
|
|
|
+ requestMap.put("corpid", wxCorpInfo.getCorpid());
|
|
|
+ requestMap.put("userid", item.getCorpwxUserid());
|
|
|
+ HttpEntity<JSONObject> entity = new HttpEntity<>(requestMap, headers);
|
|
|
+
|
|
|
+ try {
|
|
|
+ ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, entity, String.class);
|
|
|
+ if (responseEntity.getStatusCode() == HttpStatus.OK) {
|
|
|
+ String resp = responseEntity.getBody();
|
|
|
+ if (resp != null) {
|
|
|
+ JSONObject respJson = JSONObject.parseObject(resp);
|
|
|
+ if (respJson.getInteger("errcode") == 0) {
|
|
|
+ Integer status = respJson.getInteger("active_status");
|
|
|
+ if (status.equals(1)) {
|
|
|
+ String handoverId = item.getCorpwxUserid(); // 要转移的成员
|
|
|
+ String url1 = "https://qyapi.weixin.qq.com/cgi-bin/license/batch_transfer_license?provider_access_token=" + providerAccessToken;
|
|
|
+
|
|
|
+ JSONObject requestMap1 = new JSONObject();
|
|
|
+ requestMap1.put("corpid", wxCorpInfo.getCorpid());
|
|
|
+ ArrayList<HashMap<String, String>> list1 = new ArrayList<>();
|
|
|
+ HashMap<String, String> map1 = new HashMap<>();
|
|
|
+ map1.put("handover_userid", handoverId);
|
|
|
+ map1.put("takeover_userid", takeoverId);
|
|
|
+ list1.add(map1);
|
|
|
+ requestMap1.put("transfer_list", list1);
|
|
|
+
|
|
|
+ HttpEntity<JSONObject> entity1 = new HttpEntity<>(requestMap1, headers);
|
|
|
+ ResponseEntity<String> responseEntity1 = restTemplate.postForEntity(url1, entity1, String.class);
|
|
|
+ if (responseEntity1.getStatusCode() == HttpStatus.OK) {
|
|
|
+ String body = responseEntity1.getBody();
|
|
|
+ if (body != null) {
|
|
|
+ JSONObject respJson1 = JSONObject.parseObject(body);
|
|
|
+ if (respJson1.getInteger("errcode") == 0) {
|
|
|
+ log.info("转移成功");
|
|
|
+ iterator.remove(); // 直接移除已转移的用户
|
|
|
+ break; // 退出内层循环,避免对同一用户重复请求
|
|
|
+ } else {
|
|
|
+ log.info("转移失败:" + respJson1.toJSONString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception e) {
|
|
|
+ log.error("请求失败", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 企业微信账号继承
|
|
|
* @param handoverId
|