package com.yuanchu.mom.util; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.log.Log; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.UserMapper; import com.yuanchu.mom.pojo.AuthApi; import com.yuanchu.mom.pojo.Company; import com.yuanchu.mom.pojo.Person; import com.yuanchu.mom.pojo.User; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; import java.util.Objects; 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(ob.getStatus().equals("enabled")) return true; return false; }).collect(Collectors.toList()); } 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()); } return person.stream().filter(ob->{ if(Objects.equals(ob.getStatus(), "enabled")) { ob.setIsLive(userMapper.selectCount(Wrappers.lambdaQuery().eq(User::getAccount, ob.getEmployeeID()))); return true; } return false; }).collect(Collectors.toList()); } 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(); } }