houzhongjian
2025-03-12 e03505135d9816c8b6ea67a91a7e1f493e662b6f
修改Client封装方式
已添加3个文件
已删除2个文件
已修改6个文件
286 ■■■■ 文件已修改
iailab-plat-sdk/pom.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/IailabPlatSdkMain.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/dto/ApiDataQueryDTO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/config/AuthProperties.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/config/SdkAutoConfiguration.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/factory/YamlPropertySourceFactory.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/resources/application.yaml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/resources/auth.yaml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/pom.xml
@@ -42,8 +42,14 @@
            <artifactId>hibernate-validator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.iailab</groupId>
            <artifactId>iailab-common-test</artifactId>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
iailab-plat-sdk/src/main/java/com/iailab/sdk/IailabPlatSdkMain.java
@@ -1,10 +1,13 @@
package com.iailab.sdk;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * 项目的主类
 *
 * @author iailab
 */
@SpringBootApplication
public class IailabPlatSdkMain {
    public static void main(String[] args) {
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java
@@ -1,18 +1,19 @@
package com.iailab.sdk.auth.client;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iailab.sdk.auth.client.dto.ApiDataQueryDTO;
import com.iailab.sdk.auth.client.dto.TokenDTO;
import com.iailab.sdk.auth.config.AuthProperties;
import com.iailab.sdk.auth.config.SdkAutoConfiguration;
import com.iailab.sdk.auth.constants.SdkErrorCodeConstants;
import com.iailab.sdk.util.http.IailabHttpUtils;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.Base64Utils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
@@ -25,17 +26,28 @@
 * @Description
 * @createTime 2025年02月18日
 */
@Component
@Service
public class IailabAuthClient {
    private static final RestTemplate restTemplate = new RestTemplate();
    private static AuthProperties authProperties;
    public static void setAuthProperties(AuthProperties properties) {
        authProperties = properties;
    }
    /**
     * 平台地址
     */
    public static String BASE_URL = SdkAutoConfiguration.BASE_URL;
    /**
     * 租户编号
     */
    public static Long TENANT_ID = SdkAutoConfiguration.TENANT_ID;
    /**
     * 客户端信息
     */
    private static String CLIENT_ID = SdkAutoConfiguration.CLIENT_ID;
    private static String CLIENT_SECRET = SdkAutoConfiguration.CLIENT_SECRET;
    private static String USERNAME = SdkAutoConfiguration.USERNAME;
    private static String PASSWORD = SdkAutoConfiguration.PASSWORD;
    private static final String GRAND_TYPE = "password";
@@ -43,12 +55,22 @@
    private static final String CHARSET = "utf-8";
    private static final IailabAuthClient iailabAuthClient = new IailabAuthClient();
    public static IailabAuthClient getInstance() {
        return iailabAuthClient;
    }
    // 鉴权token
    public static String accessToken;
    // 刷新token
    public static String refreshToken;
    // 鉴权token过期时间
    public static Long expireTime;
    private static final String RESP_CODE = "code";
    private static final String RESP_DATA = "data";
    /**
     * 用户名密码方式获取平台token
@@ -60,12 +82,11 @@
        addClientHeader(headers);
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        // 1.2 构建authenticate请求URL
        // 1.2 构建authenticate请求URL
        String authenticateUrl = authProperties.getBaseUrl() + "/system/oauth2/token?"
        String authenticateUrl = BASE_URL + "/system/oauth2/token?"
                // 密码模式的参数
                + "&grant_type=" + GRAND_TYPE
                + "&username=" + authProperties.getUsername()
                + "&password=" + authProperties.getPassword()
                + "&username=" + USERNAME
                + "&password=" + PASSWORD
                + "&scope=" + SCOPE;
        // 2. 执行请求
        ResponseEntity<Map<String, Object>> exchange = restTemplate.exchange(
@@ -102,7 +123,7 @@
        HttpHeaders headers = new HttpHeaders();
        addClientHeader(headers);
        // 1.2 构建authenticate请求URL
        String authenticateUrl = authProperties.getBaseUrl() + "/system/auth/client-refresh-token?refreshToken=" + refreshToken+ "&clientId=" + authProperties.getClientId();
        String authenticateUrl = BASE_URL + "/system/auth/client-refresh-token?refreshToken=" + refreshToken + "&clientId=" + CLIENT_ID;
        // 2. 执行请求
        ResponseEntity<Map<String, Object>> exchange = restTemplate.exchange(
                authenticateUrl,
@@ -149,11 +170,11 @@
    private static void addClientHeader(HttpHeaders headers) {
        // client 拼接,需要 BASE64 编码
        String client = authProperties.getClientId() + ":" + authProperties.getClientSecret();
        String client = CLIENT_ID + ":" + CLIENT_SECRET;
        client = Base64Utils.encodeToString(client.getBytes(StandardCharsets.UTF_8));
        headers.add("Authorization", "Basic " + client);
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        headers.set("tenant-id", authProperties.getTenantId());
        headers.set("tenant-id", TENANT_ID.toString());
    }
    // 统一处理响应
@@ -168,4 +189,41 @@
        return authTokenDTO;
    }
    /**
     * 查询计划chart (测试用)
     * @param apiDataQueryDTO
     * @return
     * @throws Exception
     */
    public Map<String, Object> queryPlanChart(ApiDataQueryDTO apiDataQueryDTO) throws Exception {
        Map<String, Object> data = new HashMap<>();
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = objectMapper.writeValueAsString(apiDataQueryDTO);
        String resp = IailabHttpUtils.doPost(BASE_URL + "/data/api/query-plans/chart", jsonString, "utf-8");
        if (StringUtils.isEmpty(resp)) {
            return data;
        }
        JSONObject jsonObject = JSON.parseObject(resp);
        data = jsonObject.getJSONObject(RESP_DATA).toJavaObject(Map.class);
        return data;
    }
    /**
     * 查询多个测点当前值
     *
     * @param pointNos
     * @return
     */
    public Map<String, Object> queryPointsRealValue(List<String> pointNos) throws Exception {
        Map<String, Object> data = new HashMap<>();
        String url = BASE_URL + "/data/api/query-points/real-value";
        String resp = IailabHttpUtils.doPost(url, JSON.toJSONString(pointNos), "UTF-8");
        if (StringUtils.isEmpty(resp)) {
            return data;
        }
        JSONObject jsonObject = JSON.parseObject(resp);
        data = jsonObject.getJSONObject(RESP_DATA).toJavaObject(Map.class);
        return data;
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/dto/ApiDataQueryDTO.java
对比新文件
@@ -0,0 +1,36 @@
package com.iailab.sdk.auth.client.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年11月03日
 */
@Data
public class ApiDataQueryDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @NotNull(message="itemNo不能为空")
    private String itemNo;
    @NotNull(message="itemNo不能为空")
    private List<String> itemNos;
    @NotNull(message="粒度不能为空")
    private Integer granularity;
    @NotNull(message="start不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date start;
    @NotNull(message="end不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date end;
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/config/AuthProperties.java
文件已删除
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/config/SdkAutoConfiguration.java
@@ -1,28 +1,67 @@
package com.iailab.sdk.auth.config;
import com.iailab.sdk.auth.client.IailabAuthClient;
import com.iailab.sdk.auth.factory.YamlPropertySourceFactory;
import com.iailab.sdk.util.http.IailabHttpUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
/**
 * SDK配置文件
 */
@Configuration
@EnableConfigurationProperties(AuthProperties.class)
@PropertySource(
        value = "classpath:auth.yaml",
        factory = YamlPropertySourceFactory.class  // 使用自定义加载器
)
public class SdkAutoConfiguration {
    private final AuthProperties authProperties;
    @Value("${iailab.token.base-url}")
    private String baseUrl;
    public SdkAutoConfiguration(AuthProperties authProperties) {
        this.authProperties = authProperties;
    }
    @Value("${iailab.token.tenant-id}")
    public Long tenantId;
    @Value("${iailab.token.client-id}")
    public String clientId;
    @Value("${iailab.token.client-secret}")
    public String clientSecret;
    @Value("${iailab.token.username}")
    public String username;
    @Value("${iailab.token.password}")
    public String password;
    public static String BASE_URL;
    public static Long TENANT_ID;
    public static String CLIENT_ID;
    public static String CLIENT_SECRET;
    public static String USERNAME;
    public static String PASSWORD;
    @PostConstruct
    public void init() {
        IailabAuthClient.setAuthProperties(authProperties);
        IailabHttpUtils.setAuthProperties(authProperties);
    public void initUrl() {
        BASE_URL = this.baseUrl;
        TENANT_ID = this.tenantId;
        CLIENT_ID = this.clientId;
        CLIENT_SECRET = this.clientSecret;
        USERNAME = this.username;
        PASSWORD = this.password;
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/factory/YamlPropertySourceFactory.java
对比新文件
@@ -0,0 +1,16 @@
package com.iailab.sdk.auth.factory;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import java.io.IOException;
public class YamlPropertySourceFactory implements PropertySourceFactory {
    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
        return loader.load(resource.getResource().getFilename(), resource.getResource()).get(0);
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java
@@ -1,7 +1,7 @@
package com.iailab.sdk.util.http;
import com.iailab.sdk.auth.client.IailabAuthClient;
import com.iailab.sdk.auth.config.AuthProperties;
import com.iailab.sdk.auth.config.SdkAutoConfiguration;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
@@ -17,12 +17,6 @@
public class IailabHttpUtils {
    private static AuthProperties authProperties;
    public static void setAuthProperties(AuthProperties properties) {
        authProperties = properties;
    }
    /**
     *
@@ -61,7 +55,7 @@
            httpGet.addHeader("Accept", "application/json");
            httpGet.addHeader("Content-Type", "application/json;charset=UTF-8");
            httpGet.addHeader("Authorization", "Bearer " + IailabAuthClient.accessToken);
            httpGet.addHeader("Tenant-Id", String.valueOf(authProperties.getTenantId()));
            httpGet.addHeader("Tenant-Id", SdkAutoConfiguration.TENANT_ID.toString());
            HttpResponse response = httpClient.execute(httpGet);
            if (response != null) {
                HttpEntity resEntity = response.getEntity();
@@ -95,7 +89,7 @@
            httpPost.addHeader("Accept", "application/json");
            httpPost.addHeader("Content-Type", "application/json;charset=UTF-8");
            httpPost.addHeader("Authorization", "Bearer " + IailabAuthClient.accessToken);
            httpPost.addHeader("Tenant-Id", String.valueOf(authProperties.getTenantId()));
            httpPost.addHeader("Tenant-Id", SdkAutoConfiguration.TENANT_ID.toString());
            StringEntity stringEntity = new StringEntity(json);
            stringEntity.setContentEncoding("UTF-8");
            stringEntity.setContentType("application/json");
iailab-plat-sdk/src/main/resources/application.yaml
文件已删除
iailab-plat-sdk/src/main/resources/auth.yaml
对比新文件
@@ -0,0 +1,10 @@
# 平台配置项,设置当前项目所有自定义的配置,token中的配置需要事先在平台配置好
iailab:
  token:
    base-url: http://172.16.8.100/admin-api #平台接口url,使用时需修改成真实的ip和端口
    tenant-id: 172 #租户id
    client-id: shasteel #租户OAuth2客户端id
    client-secret: shasteel111111111111111 #租户OAuth2客户端密钥
    username: shasteel #租户登录账号
    password: 123456 #租户登录密码
iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java
@@ -1,12 +1,13 @@
package com.iailab.sdk;
import com.iailab.framework.test.core.ut.BaseMockitoUnitTest;
import com.iailab.sdk.auth.client.IailabAuthClient;
import com.iailab.sdk.auth.client.dto.TokenDTO;
import com.iailab.sdk.auth.client.vo.AuthLoginReqVO;
import org.junit.jupiter.api.Test;
import com.iailab.sdk.auth.client.dto.ApiDataQueryDTO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -18,7 +19,9 @@
 *
 * @author iailab
 */
public class IailabClientTest extends BaseMockitoUnitTest {
@RunWith(SpringRunner.class)
@SpringBootTest
public class IailabClientTest {
    @Test
    public void testLogin() {
@@ -44,5 +47,25 @@
        System.out.println(s);
    }
    @Test
    public void testQueryPlanChart() throws Exception {
        ApiDataQueryDTO apiDataQueryDTO = new ApiDataQueryDTO();
        List<String> itemNos = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        apiDataQueryDTO.setStart(sdf.parse("2024-06-11 07:24:00"));
        apiDataQueryDTO.setEnd(sdf.parse("2024-06-13 00:00:00"));
        itemNos.add("P0000100010");
        apiDataQueryDTO.setItemNos(itemNos);
        Map<String, Object> stringObjectMap = IailabAuthClient.getInstance().queryPlanChart(apiDataQueryDTO);
        System.out.println(stringObjectMap);
    }
    @Test
    public void testQueryPointsRealValue() throws Exception {
        List<String> pointNos = new ArrayList<>();
        pointNos.add("111");
        Map<String, Object> stringObjectMap = IailabAuthClient.getInstance().queryPointsRealValue(pointNos);
        System.out.println(stringObjectMap);
    }
}