value
2024-05-16 ef91628ec82aec198e61bd50bc56413692a8aa44
user-server/src/main/java/com/yuanchu/mom/util/HeaderToken.java
@@ -2,23 +2,25 @@
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
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.Post;
import com.yuanchu.mom.pojo.Person;
import com.yuanchu.mom.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.Duration;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
public class HeaderToken {
@@ -26,129 +28,74 @@
    @Resource
    private RedisTemplate redisTemplate;
    public static void main(String[] args) {
        HttpRequest request = HttpRequest.post("https://ztt-sso.asuncloud.net/oauth2/token")
                .header("Content-Type", "application/x-www-form-urlencoded")
                .form("grant_type", "client_credentials")
                .form("client_id", "8b2f2c7e-2ab9-4718-8193-c0c636dceba8")
                .form("client_secret", "db59b70d28ab1865aafe4008f59d4760");
        HttpResponse response = request.execute();
        System.out.println(response.body());
    }
    @Resource
    private UserMapper userMapper;
    public String fetchNewAccessToken() {
        HttpRequest request = HttpRequest.post("https://ztt-sso.asuncloud.net/oauth2/token")
        HttpRequest request = HttpRequest.post(AuthApi.code)
                .header("Content-Type", "application/x-www-form-urlencoded")
                .form("grant_type", "client_credentials")
                .form("client_id", "8b2f2c7e-2ab9-4718-8193-c0c636dceba8")
                .form("client_secret", "db59b70d28ab1865aafe4008f59d4760");
                .form("client_id", AuthApi.appId)
                .form("client_secret", AuthApi.appSecret);
        HttpResponse response = request.execute();
        System.out.println(response.body());
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = null;
        JsonNode jsonNode;
        try {
            jsonNode = objectMapper.readTree(response.body());
            String accessToken = jsonNode.get("access_token").asText();
            redisTemplate.opsForValue().set("access_token",accessToken);
            redisTemplate.expire("access_token", dataTime("access_token"), TimeUnit.SECONDS);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            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());
        }
        return null;
    }
        private String accessToken ;
    //判断是否过期
    //判断是否存在
    public String getAccessToken() {
        accessToken=(String) redisTemplate.opsForValue().get("access_token");
        if (accessToken == null) {
        String accessToken;
        if (!redisTemplate.hasKey("access_token")) {
            accessToken = fetchNewAccessToken();
        }else{
            accessToken = redisTemplate.opsForValue().get("access_token")+"";
        }
        return accessToken;
    }
    //判断 token 是否已存在
    public String getToken(String token) {
        String o = redisTemplate.opsForValue().get(token).toString();
        if (o != null && !o.isEmpty()) {
            return o;
        }else{
            redisTemplate.expire(token,dataTime("access_token"),TimeUnit.SECONDS);
            String tokens = redisTemplate.opsForValue().get(token).toString();
            return tokens;
        }
        // 获取 token
//        accessToken = fetchNewAccessToken();
//        return accessToken;
    }
    //获取token过期时间
    public Long dataTime(String token){
        Long access_token = redisTemplate.getExpire(token);
        if(access_token != null && access_token >60) {
            redisTemplate.expire(token, access_token - 60 ,TimeUnit.SECONDS);
            return access_token - 60;
        }//就直接调用
        return null;
    }
    //调用
    public List<Company>  companyUrl() {
    public List<Company> companyUrl() {
        String accessToken = getAccessToken();
        String getToken= getToken(accessToken);
        String apiUrl =AuthApi.companies; // 替换为实际的API端点URL
        HttpRequest request = HttpRequest.get(apiUrl)
        HttpRequest request = HttpRequest.get(AuthApi.companies)
                .header("Authorization", "Bearer " + accessToken);
        HttpResponse response = request.execute();
        ObjectMapper objectMapper = new ObjectMapper();
        String body = response.body();
        List<Company> companies = null;
        List<Company> companies;
        try {
            companies = objectMapper.readValue(body, new TypeReference<List<Company>>(){});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            companies = JSON.parseArray(request.execute().body(), Company.class);
        }catch (Exception e){
            throw new ErrorException(e.getMessage());
        }
        return companies;
        return companies.stream().filter(ob->{
            if(ob.getStatus().equals("enabled")) return true;
            return false;
        }).collect(Collectors.toList());
    }
    public List<Post>  postUrl(String companyId) {
    public List<Person> userUrl(String companyId) {
        String accessToken = getAccessToken();
        String token = getToken(accessToken);
        String apiUrl =AuthApi.post+companyId; // 替换为实际的API端点URL
        HttpRequest request = HttpRequest.get(apiUrl)
                .header("Authorization", "Bearer " + accessToken);
        HttpResponse response = request.execute();
        ObjectMapper objectMapper = new ObjectMapper();
        String body = response.body();
        List<Post> posts = null;
        try {
            posts=objectMapper.readValue(body, new TypeReference<List<Post>>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return posts;
    }
    public List<User>  userUrl(String companyId) {
        String accessToken = getAccessToken();
        String token = getToken(accessToken);
        String apiUrl =AuthApi.simple+companyId; // 替换为实际的API端点URL
        HttpRequest request = HttpRequest.get(apiUrl)
        HttpRequest request = HttpRequest.get(AuthApi.simple+companyId)
                .header("Authorization", "Bearer " + accessToken)
                .header("Content-Type", "application/form-data");
        HttpResponse response = request.execute();
        ObjectMapper objectMapper = new ObjectMapper();
        String body = response.body();
        List<User> user=null;
        List<Person> person;
        try {
            user= objectMapper.readValue(body,new TypeReference<List<User>>(){});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            person = JSON.parseArray(request.execute().body(), Person.class);
        }catch (Exception e){
            throw new ErrorException(e.getMessage());
        }
        return user;
        return person.stream().filter(ob->{
            if(Objects.equals(ob.getStatus(), "enabled")) {
                ob.setIsLive(userMapper.selectCount(Wrappers.<User>lambdaQuery().eq(User::getAccount, ob.getEmployeeID())));
                return true;
            }
            return false;
        }).collect(Collectors.toList());
    }
}