CacheHelper.java 5.35 KB
package com.sincre.springboot.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sincre.springboot.ApiModel.TuYaResResult;
import com.sincre.springboot.ApiModel.TuYaResTokenObj;
import com.sincre.springboot.ApiPlatform.TuYaCloudService;
import com.sincre.springboot.ApiPlatform.YinShiServiceConfig;
import com.sincre.springboot.common.EhcacheUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class CacheHelper {

    static EhcacheUtil ehcacheUtil = new EhcacheUtil();
    static String TuYaTokenKey = "TuYa_Token";
    static String TuYaRefreshTokenKey = "TuYa_Re_Token";


    private static void setTuYaToken(){

        String apiUrl = "/v1.0/token?grant_type=1";
        Long t = System.currentTimeMillis();
        //Token获取前的签名
        String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+t,TuYaCloudService.Secret);
        Map<String,String> map = new HashMap();
        map.put("client_id", TuYaCloudService.ClientId);
        map.put("sign",sign);
        map.put("sign_method",TuYaCloudService.Sign_method);
        map.put("t",t.toString());
        String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map);
        System.out.println(result);
        TuYaResResult<TuYaResTokenObj> resResult ;
        try{
            ObjectMapper objectMapper = new ObjectMapper();
            resResult = objectMapper.readValue(result,new TypeReference<TuYaResResult<TuYaResTokenObj>>(){});

            String access_Token = resResult.getResult().getAccess_token(); //存储第一次获取的Token
            String refresh_Token = resResult.getResult().getRefresh_token();
               // 第一次缓存数据的时候,不刷新,后期刷新
            if(StringUtils.isNotBlank(ehcacheUtil.get(TuYaTokenKey))){
                TuYaRefresh(resResult.getResult());
            }else {
                ehcacheUtil.setex(TuYaTokenKey, access_Token, resResult.getResult().getExpire_time()); //  储存二个小时
                ehcacheUtil.setex(TuYaRefreshTokenKey,refresh_Token,60 * 60); //  储存一个小时
                System.out.println("获取Token:"+ access_Token);
                System.out.println("刷新Token:"+ refresh_Token);

            }
        } catch(Exception ex){
            System.out.println(ex.getMessage());
        }
    }

    /**
     * 获取涂鸦Api 访问的Token
     * @return
     */
    public static String getTuYaToken(){

        if(StringUtils.isBlank(ehcacheUtil.get(TuYaRefreshTokenKey))){
            setTuYaToken();
        }

        return  ehcacheUtil.get(TuYaTokenKey);
    }

    private static void TuYaRefresh(TuYaResTokenObj tuYaResTokenObj){

        String apiUrl = "/v1.0/token/"+tuYaResTokenObj.getRefresh_token();
        Long t = System.currentTimeMillis();

        String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+t,TuYaCloudService.Secret);
        Map<String,String> map = new HashMap();
        map.put("client_id", TuYaCloudService.ClientId);
        map.put("sign",sign);
        map.put("sign_method",TuYaCloudService.Sign_method);
        map.put("t",t.toString());
        String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map);

        TuYaResResult<TuYaResTokenObj> resResult;
        try{
            ObjectMapper objectMapper = new ObjectMapper();
            TypeReference<TuYaResResult<TuYaResTokenObj>> reference = new TypeReference<TuYaResResult<TuYaResTokenObj>>(){};
            resResult = objectMapper.readValue(result,reference);
            String re_access_Token = resResult.getResult().getAccess_token(); //重新刷新后获取的Token
            String refresh_Token = resResult.getResult().getRefresh_token();
            System.out.println("刷新后的Token:"+re_access_Token);
            ehcacheUtil.setex(TuYaTokenKey,re_access_Token,resResult.getResult().getExpire_time()); //  储存两个小时
            ehcacheUtil.setex(TuYaRefreshTokenKey,refresh_Token,60 * 60); //储存一个小时
        } catch(Exception ex){
            System.out.println(ex.getMessage());
        }
    }

    /**
     * 获取萤石云token
     * @return
     */
    public static String getYingshiYunToken(){
        return ehcacheUtil.get(YinShiServiceConfig.accessToken);
    }

    /**
     * 设置萤石云token
     * @param token
     * @param time
     */
    public static void putYingshiYunToken(String token,int time){
        ehcacheUtil.setex(YinShiServiceConfig.accessToken,token,time);
    }

    /**
     * 获得萤石管理权限的Token
     */
    public static void GetYinShiToken() {
        String appKey = YinShiServiceConfig.appKey;
        String appSecret = YinShiServiceConfig.appSecret;

        String url = YinShiServiceConfig.HostUrl + "lapp/token/get";
        Map<String, Object> map = new HashMap<>();

        map.put("appKey", appKey);
        map.put("appSecret", appSecret);
        String result = ApiHelper.doPost(url, new HashMap<String, String>(), map);
        JSONObject jsonObject = new JSONObject(result);
        JSONObject data = jsonObject.optJSONObject("data");
        YinShiServiceConfig.AccessToken = data.optString("accessToken");
    }

}