From 651111e80d84333cbaf9907d2ee1f90c3dfc62e4 Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期五, 07 三月 2025 13:48:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 /dev/null                                                                                                               |   16 ----
 iailab-plat-sdk/pom.xml                                                                                                 |   50 ++++++++++--
 iailab-cloud/iailab-gateway/src/main/resources/application.yaml                                                         |    9 ++
 iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/HttpClientFactory.java                                           |    2 
 iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java                                             |    5 
 iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/constants/SdkErrorCodeConstants.java                                  |   17 ++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java |   14 +--
 iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java                                          |   58 +++++++++++---
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java |   12 +-
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java                   |    8 +
 iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java                                                      |   19 ++++
 11 files changed, 149 insertions(+), 61 deletions(-)

diff --git a/iailab-cloud/iailab-gateway/src/main/resources/application.yaml b/iailab-cloud/iailab-gateway/src/main/resources/application.yaml
index 3f5f03f..c0946b9 100644
--- a/iailab-cloud/iailab-gateway/src/main/resources/application.yaml
+++ b/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 提示
\ No newline at end of file
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java
index a08edd1..3c80215 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java
+++ b/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);
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java
index a6cac8e..bea9b0a 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java
+++ b/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);
         }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java
index ce08ee6..ba11c8b 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java
+++ b/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;
diff --git a/iailab-plat-sdk/pom.xml b/iailab-plat-sdk/pom.xml
index af4e3d0..e43ea81 100644
--- a/iailab-plat-sdk/pom.xml
+++ b/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>
diff --git a/iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java b/iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java
index 388ff67..17c088b 100644
--- a/iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java
+++ b/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;
     }
 
diff --git a/iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/constants/SdkErrorCodeConstants.java b/iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/constants/SdkErrorCodeConstants.java
new file mode 100644
index 0000000..dbbdfea
--- /dev/null
+++ b/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() {}
+}
diff --git a/iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/enums/ErrorCodeConstants.java b/iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/enums/ErrorCodeConstants.java
deleted file mode 100644
index 46af76a..0000000
--- a/iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/enums/ErrorCodeConstants.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.iailab.sdk.auth.enums;
-
-import com.iailab.framework.common.exception.ErrorCode;
-
-/**
- * System 错误码枚举类
- *
- * system 系统,使用 1-002-000-000 段
- */
-public interface ErrorCodeConstants {
-
-    // ========== AUTH 模块 1-002-000-000 ==========
-    ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_002_000_000, "登录失败,账号密码不正确");
-    ErrorCode AUTH_BAD_CREDENTIALS = new ErrorCode(400, "client_id 或 client_secret 未正确传递");
-    ErrorCode AUTH_REFRESH_TOKEN_ERROR = new ErrorCode(1_002_000_001, "刷新token失败");
-}
diff --git a/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/HttpClientFactory.java b/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/HttpClientFactory.java
index d775d70..8a43f41 100644
--- a/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/HttpClientFactory.java
+++ b/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();
diff --git a/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java b/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java
index 9c1eda9..f59f119 100644
--- a/iailab-plat-sdk/src/main/java/com/iailab/sdk/util/http/IailabHttpUtils.java
+++ b/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();
diff --git a/iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java b/iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java
index 6ca996c..9ca7867 100644
--- a/iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java
+++ b/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);
+    }
+
 
 }

--
Gitblit v1.9.3