潘志宝
2025-03-07 651111e80d84333cbaf9907d2ee1f90c3dfc62e4
Merge remote-tracking branch 'origin/master'
已添加1个文件
已删除1个文件
已修改9个文件
210 ■■■■ 文件已修改
iailab-cloud/iailab-gateway/src/main/resources/application.yaml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/pom.xml 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/constants/SdkErrorCodeConstants.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/enums/ErrorCodeConstants.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/HttpClientFactory.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-cloud/iailab-gateway/src/main/resources/application.yaml
@@ -122,6 +122,13 @@
            - Path=/admin-api/shasteel/**
          filters:
            - RewritePath=/admin-api/shasteel/v3/api-docs, /v3/api-docs
        ## ansteel 服务
        - id: ansteel-admin-api # 路由的编号
          uri: grayLb://ansteel-server
          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
            - Path=/admin-api/ansteel/**
          filters:
            - RewritePath=/admin-api/ansteel/v3/api-docs, /v3/api-docs
        ## xmcpms 服务
        - id: xmcpms-admin-api # 路由的编号
          uri: grayLb://xmcpms-server
@@ -195,4 +202,4 @@
# 日志文件配置
logging:
  level:
    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java
@@ -722,9 +722,11 @@
            }
            MmItemOutputEntity outPut = mmItemOutputService.getByItemid(predictItem.getId(), itemNo[1], itemNo[2]);
            String outputId = outPut.getId();
            // 如果第5个参数为1,则取累计值
            if ("1".equals(itemNo[4])){
                outputId = outPut.getId() + CommonDict.CUMULANT_SUFFIX;
            // 判断是否有第五个参数,如果有第5个参数为1,则取累计值
            if (itemNo.length >= 5){
                if (StringUtils.isNotBlank(itemNo[4]) && "1".equals(itemNo[4])){
                    outputId = outPut.getId() + CommonDict.CUMULANT_SUFFIX;
                }
            }
            Date predictTime = predictItem.getLastTime();
            List<Object[]> curData = mmItemResultJsonService.getData(outputId, predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java
@@ -42,12 +42,13 @@
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictResult.getPredictTime());
            for (Integer i = 0; i < rows; i++) {
                // 从下个时间粒度开始
                calendar.add(Calendar.SECOND, predictResult.getGranularity());
                DataValueVO predictData = new DataValueVO();
                predictData.setDataTime(calendar.getTime());
                predictData.setDataValue(Double.valueOf(entry.getValue()[i]));
                predictDataList.add(predictData);
                calendar.add(Calendar.SECOND, predictResult.getGranularity());
            }
            resultMap.put(entry.getKey().getId(), predictDataList);
            predictLists.put(entry.getKey().getResultstr(), predictDataList);
@@ -59,7 +60,7 @@
                    // 时间 预测时间+预测长度*粒度
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(predictResult.getPredictTime());
                    calendar.add(Calendar.SECOND, predictResult.getGranularity() * (rows - 1));
                    calendar.add(Calendar.SECOND, predictResult.getGranularity() * rows);
                    predictData.setDataTime(calendar.getTime());
                    //值 所有值相加/除数
                    BigDecimal sum = BigDecimal.valueOf(Arrays.stream(entry.getValue()).sum());
@@ -85,12 +86,13 @@
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictResult.getPredictTime());
            for (Integer i = 0; i < rows; i++) {
                // 从下个时间粒度开始
                calendar.add(Calendar.SECOND, predictResult.getGranularity());
                DataValueVO predictData = new DataValueVO();
                predictData.setDataTime(calendar.getTime());
                predictData.setDataValue(Double.valueOf(entry.getValue()[i]));
                predictDataList.add(predictData);
                calendar.add(Calendar.SECOND, predictResult.getGranularity());
            }
            predictLists.put(entry.getKey().getResultstr(), predictDataList);
        }
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java
@@ -78,20 +78,18 @@
     */
    protected Date getStartTime(ColumnItem columnItem, Date originalTime) {
        Date dateTime = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(originalTime);
        switch (ModelParamType.getEumByCode(columnItem.getParamType())) {
            case DATAPOINT:
            case PLAN:
                dateTime = calculateTime(originalTime, true, columnItem.getDataLength(), columnItem.getGranularity());
                dateTime = calculateTime(originalTime, true, columnItem.getDataLength() + 1, columnItem.getGranularity());
                break;
            case IND:
            case IND_ASCII:
                dateTime = calculateTime(originalTime, true, columnItem.getDataLength()-1, columnItem.getGranularity());
                dateTime = calculateTime(originalTime, true, columnItem.getDataLength(), columnItem.getGranularity());
                break;
            case NORMALITEM:
            case MERGEITEM:
                dateTime = calendar.getTime();
                dateTime = calculateTime(originalTime, false, 1, columnItem.getGranularity());
                break;
            default:
                break;
@@ -113,14 +111,14 @@
        calendar.setTime(originalTime);
        switch (ModelParamType.getEumByCode(columnItem.getParamType())) {
            case DATAPOINT:
            case PLAN:
            case IND:
            case IND_ASCII:
            case PLAN:
                dateTime = calendar.getTime();
                dateTime = calculateTime(originalTime, true, 1, columnItem.getGranularity());
                break;
            case NORMALITEM:
            case MERGEITEM:
                dateTime = calculateTime(originalTime, false, columnItem.getDataLength(), columnItem.getGranularity());
                dateTime = calculateTime(originalTime, false, columnItem.getDataLength() + 1, columnItem.getGranularity());
                break;
            default:
                break;
iailab-plat-sdk/pom.xml
@@ -55,17 +55,49 @@
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.6.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptorRefs>
                                <!-- 使用预定义的打包方式:将所有内容合并到 JAR 中 -->
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                            </descriptorRefs>
                            <!-- 指定主类 -->
                            <archive>
                                <manifest>
                                    <mainClass>com.iailab.sdk.IailabPlatSdkMain</mainClass>
                                </manifest>
                            </archive>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
<!--    <build>-->
<!--        <plugins>-->
<!--            <plugin>-->
<!--                <groupId>org.apache.maven.plugins</groupId>-->
<!--                <artifactId>maven-jar-plugin</artifactId>-->
<!--                <version>3.3.0</version>-->
<!--                <configuration>-->
<!--                    <archive>-->
<!--                        <manifest>-->
<!--                            <addClasspath>true</addClasspath>-->
<!--                            <classpathPrefix>lib/</classpathPrefix>-->
<!--                            <mainClass>com.iailab.sdk.IailabPlatSdkMain</mainClass>-->
<!--                        </manifest>-->
<!--                    </archive>-->
<!--                </configuration>-->
<!--            </plugin>-->
<!--        </plugins>-->
<!--    </build>-->
</project>
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java
@@ -1,9 +1,11 @@
package com.iailab.sdk.auth.client;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iailab.sdk.auth.client.dto.TokenDTO;
import com.iailab.sdk.auth.client.vo.AuthLoginReqVO;
import com.iailab.sdk.auth.config.AuthProperties;
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;
@@ -16,9 +18,7 @@
import java.nio.charset.StandardCharsets;
import java.util.*;
import static com.iailab.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
import static com.iailab.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.iailab.sdk.auth.enums.ErrorCodeConstants.*;
/**
 * @author Houzhongjian
@@ -40,6 +40,8 @@
    private static final String GRAND_TYPE = "password";
    private static final String SCOPE = "user.read user.write";
    private static final String CHARSET = "utf-8";
    // 鉴权token
    public static String accessToken;
@@ -72,13 +74,22 @@
                new HttpEntity<>(headers),
                new ParameterizedTypeReference<Map<String, Object>>() {
                });
        Map<String, Object> authMap = exchange.getBody();
        if(AUTH_BAD_CREDENTIALS.getCode().equals(authMap.get("code"))) {
            throw exception(AUTH_BAD_CREDENTIALS);
        } else if(AUTH_LOGIN_BAD_CREDENTIALS.getCode().equals(authMap.get("code"))) {
            throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
        }
        Assert.isTrue(exchange.getStatusCode().is2xxSuccessful(), "响应必须是 200 成功");
        Map<String, Object> authMap = exchange.getBody();
        Object code = authMap.get("code");
        if(SdkErrorCodeConstants.AUTH_BAD_CREDENTIALS.getCode().equals(code)) {
            throw exception(SdkErrorCodeConstants.AUTH_BAD_CREDENTIALS);
        } else if(SdkErrorCodeConstants.AUTH_LOGIN_BAD_CREDENTIALS.getCode().equals(code)) {
            throw exception(SdkErrorCodeConstants.AUTH_LOGIN_BAD_CREDENTIALS);
        } else if(SdkErrorCodeConstants.OAUTH2_CLIENT_REDIRECT_URI_NOT_MATCH.getCode().equals(code)) {
            throw exception(SdkErrorCodeConstants.OAUTH2_CLIENT_REDIRECT_URI_NOT_MATCH);
        } else if(SdkErrorCodeConstants.OAUTH2_CLIENT_CLIENT_SECRET_ERROR.getCode().equals(code)) {
            throw exception(SdkErrorCodeConstants.OAUTH2_CLIENT_CLIENT_SECRET_ERROR);
        } else if(SdkErrorCodeConstants.OAUTH2_CLIENT_NOT_EXISTS.getCode().equals(code)) {
            throw exception(SdkErrorCodeConstants.OAUTH2_CLIENT_NOT_EXISTS);
        } else if(SdkErrorCodeConstants.OAUTH2_CLIENT_DISABLE.getCode().equals(code)) {
            throw exception(SdkErrorCodeConstants.OAUTH2_CLIENT_DISABLE);
        }
        accessToken = authMap.get("access_token").toString();
        refreshToken = authMap.get("refresh_token").toString();
        expireTime = Long.valueOf(authMap.get("expires_time").toString());
@@ -107,13 +118,33 @@
            if (code == 401) {
                authenticate();
            } else {
                throw exception(AUTH_REFRESH_TOKEN_ERROR);
                throw exception(SdkErrorCodeConstants.AUTH_REFRESH_TOKEN_ERROR);
            }
        } else {
            accessToken = authMap.get("access_token").toString();
            expireTime = Long.valueOf(authMap.get("expires_time").toString());
        }
        return handleResponse(exchange);
    }
    /**
     * 平台http请求封装
     * @param method
     * @param url
     * @param params
     * @return
     * @throws Exception
     */
    public static String doHttp(String method, String url, Map<String, Object> params) throws Exception {
        String response = null;
        String upperMethod = method.toUpperCase();
        if("GET".equals(upperMethod)) {
            response = IailabHttpUtils.doGet(url, params, CHARSET);
        } else if("POST".equals(upperMethod)) {
            ObjectMapper objectMapper = new ObjectMapper();
            response = IailabHttpUtils.doPost(url, objectMapper.writeValueAsString(params), CHARSET);
        }
        return response;
    }
    private static void addClientHeader(HttpHeaders headers) {
@@ -131,10 +162,9 @@
        System.out.println(response);
        TokenDTO authTokenDTO = new TokenDTO();
        Map<String, Object> authMap = (Map<String, Object>)response.getBody();
        Map<String, Object> tokenData = (Map<String, Object>)authMap.get("data");
        authTokenDTO.setAccessToken(tokenData.get("accessToken").toString());
        authTokenDTO.setRefreshToken(tokenData.get("refreshToken").toString());
        authTokenDTO.setExpiresTime(Long.valueOf(tokenData.get("expiresTime").toString()));
        authTokenDTO.setAccessToken(authMap.get("access_token").toString());
        authTokenDTO.setRefreshToken(authMap.get("refresh_token").toString());
        authTokenDTO.setExpiresTime(Long.valueOf(authMap.get("expires_time").toString()));
        return authTokenDTO;
    }
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/constants/SdkErrorCodeConstants.java
对比新文件
@@ -0,0 +1,17 @@
package com.iailab.sdk.auth.constants;
import com.iailab.framework.common.exception.ErrorCode;
public class SdkErrorCodeConstants {
    // ========== AUTH 模块 1-002-000-000 ==========
    public static final ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_002_000_000, "登录失败,账号密码不正确");
    public static final ErrorCode AUTH_BAD_CREDENTIALS = new ErrorCode(400, "client_id 或 client_secret 未正确传递");
    public static final ErrorCode AUTH_REFRESH_TOKEN_ERROR = new ErrorCode(1_002_000_001, "刷新token失败");
    public static final ErrorCode OAUTH2_CLIENT_NOT_EXISTS = new ErrorCode(1_002_020_000, "OAuth2 客户端不存在");
    public static final ErrorCode OAUTH2_CLIENT_DISABLE = new ErrorCode(1_002_020_002, "OAuth2 客户端已禁用");
    public static final ErrorCode OAUTH2_CLIENT_REDIRECT_URI_NOT_MATCH = new ErrorCode(1_002_020_005, "无效 redirect_uri: {}");
    public static final ErrorCode OAUTH2_CLIENT_CLIENT_SECRET_ERROR = new ErrorCode(1_002_020_006, "无效 client_secret: {}");
    private SdkErrorCodeConstants() {}
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/enums/ErrorCodeConstants.java
文件已删除
iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/HttpClientFactory.java
@@ -149,7 +149,7 @@
        return null;
    }
    private static   void safeClose(Closeable closeable,String errMsg){
    private static void safeClose(Closeable closeable,String errMsg){
        try{
            if(closeable!=null)
            closeable.close();
iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java
@@ -31,7 +31,7 @@
     * @param charset
     * @return
     */
    public static String doGet(String url, Map<String, String> map, String charset) throws Exception {
    public static String doGet(String url, Map<String, Object> map, String charset) throws Exception {
        System.out.println("start doGet url: " + url);
        checkToken();
        org.apache.http.client.HttpClient httpClient = null;
@@ -48,7 +48,7 @@
                }
                map.forEach((k, v) -> {
                    try {
                        sb.append(k + "=" + URLEncoder.encode(v, charset) + "&");
                        sb.append(k + "=" + URLEncoder.encode(v.toString(), charset) + "&");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
@@ -62,7 +62,6 @@
            httpGet.addHeader("Content-Type", "application/json;charset=UTF-8");
            httpGet.addHeader("Authorization", "Bearer " + IailabAuthClient.accessToken);
            httpGet.addHeader("Tenant-Id", String.valueOf(authProperties.getTenantId()));
            HttpResponse response = httpClient.execute(httpGet);
            if (response != null) {
                HttpEntity resEntity = response.getEntity();
iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java
@@ -7,6 +7,10 @@
import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -17,7 +21,7 @@
public class IailabClientTest extends BaseMockitoUnitTest {
    @Test
    public void testLogin() throws Exception {
    public void testLogin() {
        IailabAuthClient.authenticate();
    }
@@ -27,5 +31,18 @@
        IailabAuthClient.refreshToken();
    }
    @Test
    public void testDoHttp() throws Exception {
        Map<String, Object> params = new HashMap<String, Object>();
        List<String> itemNos = new ArrayList<String>();
        params.put("start", "2024-06-11 07:24:00");
        params.put("end", "2024-06-13 00:00:00");
        itemNos.add("P0000100010");
        params.put("itemNos", itemNos);
        // 准备参数
        String s = IailabAuthClient.doHttp("POST", "http://172.16.8.100/admin-api/data/api/query-plans/chart", params);
        System.out.println(s);
    }
}