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); } }