package com.ruoyi.web.controller.system.api; import cn.hutool.core.bean.BeanUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.log.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.Person; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.system.mapper.UserMapper; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Component public class HeaderToken { @Resource private RedisTemplate redisTemplate; @Resource private UserMapper userMapper; public String fetchNewAccessToken() { HttpRequest request = HttpRequest.post(AuthApi.code) .header("Content-Type", "application/x-www-form-urlencoded") .form("grant_type", "client_credentials") .form("client_id", AuthApi.appId) .form("client_secret", AuthApi.appSecret); HttpResponse response = request.execute(); ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode; try { jsonNode = objectMapper.readTree(response.body()); String accessToken = jsonNode.get("access_token").asText(); Log.get().info("获取人事系统token:"+accessToken); redisTemplate.opsForValue().set("access_token",accessToken,jsonNode.get("expires_in").asInt() - 60,TimeUnit.SECONDS); return accessToken; } catch (Exception e) { throw new ErrorException(e.getMessage()); } } //判断是否存在 public String getAccessToken() { String accessToken; if (!redisTemplate.hasKey("access_token")) { accessToken = fetchNewAccessToken(); }else{ accessToken = redisTemplate.opsForValue().get("access_token")+""; } return accessToken; } //调用 public List companyUrl() { String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.companies) .header("Authorization", "Bearer " + accessToken); List companies; try { companies = JSON.parseArray(request.execute().body(), Company.class); }catch (Exception e){ throw new ErrorException(e.getMessage()); } return companies.stream().filter(ob->{ if(Objects.equals(ob.getStatus(), "enabled")) return true; return false; }).collect(Collectors.toList()); // return companies; } public List userUrl(String companyId) { String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.simple+companyId) .header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/form-data"); List person; try { person = JSON.parseArray(request.execute().body(), Person.class); }catch (Exception e){ throw new ErrorException(e.getMessage()); } List department = getDepartment(companyId); return person.stream().filter(ob->{ if(Objects.equals(ob.getStatus(), "enabled")) { ob.setIsLive(userMapper.selectCount(Wrappers.lambdaQuery().eq(User::getAccount, ob.getEmployeeID()))); ob.setDepartment(getDepartmentStr(department, ob.getDepartmentCode()).replaceFirst("/", "")); return true; } return false; }).collect(Collectors.toList()); } public String getDepartmentStr(List department, String code){ String str = ""; Optional depart = department.stream().filter(a -> code.equals(a.get("departmentCode"))).findFirst(); str = "/" + depart.get().get("departmentName") + str; if(depart.get().get("parentDepartmentCode") != null){ str = getDepartmentStr(department, depart.get().get("parentDepartmentCode").toString()) + str; } return str; } public String getPassword(String employeeId) { String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.password + employeeId) .header("Authorization", "Bearer " + accessToken); System.out.println(AuthApi.password + employeeId); System.out.println(request.execute().body()); return JSON.parseObject(request.execute().body()).get("originalPwd").toString(); } public List getDepartment(String companyId){ String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.department.replace("companyId", companyId)) .header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/form-data"); List list; try { list = JSON.parseArray(request.execute().body()); }catch (Exception e){ throw new ErrorException(e.getMessage()); } return list.stream().filter(ob->{ if(Objects.equals(ob.get("status"), "enabled")) return true; return false; }).collect(Collectors.toList()); } public Person selectPersonUser(String code){ String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.person + code) .header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/form-data"); Person person; try { person = JSON.parseObject(request.execute().body(), Person.class); if(BeanUtil.isEmpty(person))return null; }catch (Exception e){ throw new ErrorException(e.getMessage()); } List department = getDepartment(person.getCompanyId()); person.setDepartment(getDepartmentStr(department, person.getDepartmentCode()).replaceFirst("/", "")); person.setIsLive(userMapper.selectCount(Wrappers.lambdaQuery().eq(User::getAccount, person.getEmployeeID()))); return person; } // 获取所有人员信息 public List getEmployees() { // 获取token String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.employees).header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/form-data"); String body = request.execute().body(); List maps = JSONArray.parseArray(body, Map.class); return maps; } // 获取人员信息 public Map getEmployee(String employeeId) { // 获取token String accessToken = getAccessToken(); System.out.println("token " + accessToken); String url = AuthApi.employees + "/" + employeeId; HttpRequest request = HttpRequest.get(url).header("Authorization", "Bearer " + accessToken); String body = request.execute().body(); ObjectMapper objectMapper = new ObjectMapper(); Map map = new HashMap<>(); try { map = objectMapper.readValue(body, Map.class); } catch (JsonProcessingException e) { throw new RuntimeException(e); } return map; } }