houzhongjian
2025-03-12 e08eccd6e5855891694cad5490c00d62750cf41f
Merge remote-tracking branch 'origin/master'
已添加10个文件
已修改2个文件
578 ■■■■■ 文件已修改
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java 131 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/exception/ErrorCode.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/exception/enums/GlobalErrorCodeConstants.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/exception/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/pojo/CommonResult.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/pojo/PageParam.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/pojo/PageResult.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/dto/ApiPointsValueQueryDTO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/dto/StAlarmAndSuggestPageReqDTO.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/dto/StAlarmAndSuggestRespDTO.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java
@@ -3,7 +3,12 @@
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.common.exception.enums.GlobalErrorCodeConstants;
import com.iailab.sdk.auth.client.common.pojo.CommonResult;
import com.iailab.sdk.auth.client.common.pojo.PageResult;
import com.iailab.sdk.auth.client.dto.ApiPointsValueQueryDTO;
import com.iailab.sdk.auth.client.dto.StAlarmAndSuggestPageReqDTO;
import com.iailab.sdk.auth.client.dto.StAlarmAndSuggestRespDTO;
import com.iailab.sdk.auth.client.dto.TokenDTO;
import com.iailab.sdk.auth.config.SdkAutoConfiguration;
import com.iailab.sdk.auth.constants.SdkErrorCodeConstants;
@@ -70,6 +75,7 @@
    public static Long expireTime;
    private static final String RESP_CODE = "code";
    private static final String RESP_MSG = "msg";
    private static final String RESP_DATA = "data";
    /**
@@ -98,17 +104,17 @@
        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)) {
        if (SdkErrorCodeConstants.AUTH_BAD_CREDENTIALS.getCode().equals(code)) {
            throw exception(SdkErrorCodeConstants.AUTH_BAD_CREDENTIALS);
        } else if(SdkErrorCodeConstants.AUTH_LOGIN_BAD_CREDENTIALS.getCode().equals(code)) {
        } 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)) {
        } 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)) {
        } 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)) {
        } 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)) {
        } else if (SdkErrorCodeConstants.OAUTH2_CLIENT_DISABLE.getCode().equals(code)) {
            throw exception(SdkErrorCodeConstants.OAUTH2_CLIENT_DISABLE);
        }
        accessToken = authMap.get("access_token").toString();
@@ -150,6 +156,7 @@
    /**
     * 平台http请求封装
     *
     * @param method
     * @param url
     * @param params
@@ -159,9 +166,9 @@
    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)) {
        if ("GET".equals(upperMethod)) {
            response = IailabHttpUtils.doGet(url, params, CHARSET);
        } else if("POST".equals(upperMethod)) {
        } else if ("POST".equals(upperMethod)) {
            ObjectMapper objectMapper = new ObjectMapper();
            response = IailabHttpUtils.doPost(url, objectMapper.writeValueAsString(params), CHARSET);
        }
@@ -177,35 +184,22 @@
        headers.set("tenant-id", TENANT_ID.toString());
    }
    // 统一处理响应
    /**
     * 统一处理响应
     *
     * @param response
     * @param <T>
     * @return
     */
    private static <T> TokenDTO handleResponse(ResponseEntity<T> response) {
        Assert.isTrue(response.getStatusCode().is2xxSuccessful(), "响应必须是 200 成功");
        System.out.println(response);
        TokenDTO authTokenDTO = new TokenDTO();
        Map<String, Object> authMap = (Map<String, Object>)response.getBody();
        Map<String, Object> authMap = (Map<String, Object>) response.getBody();
        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;
    }
    /**
     * 查询计划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;
    }
    /**
@@ -214,16 +208,77 @@
     * @param pointNos
     * @return
     */
    public Map<String, Object> queryPointsRealValue(List<String> pointNos) throws Exception {
    public CommonResult<Map<String, Object>> queryPointsRealValue(List<String> pointNos) {
        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;
        try {
            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 CommonResult.error(GlobalErrorCodeConstants.EMPTY_RESP);
            }
            JSONObject jsonObject = JSON.parseObject(resp);
            Integer respCode = jsonObject.getInteger(RESP_CODE);
            if (!GlobalErrorCodeConstants.SUCCESS.getCode().equals(respCode)) {
                CommonResult.error(respCode, jsonObject.getString(RESP_MSG));
            }
            data = jsonObject.getJSONObject(RESP_DATA).toJavaObject(Map.class);
        } catch (Exception ex) {
            return CommonResult.error(GlobalErrorCodeConstants.UNKNOWN.getCode(), ex.getMessage());
        }
        JSONObject jsonObject = JSON.parseObject(resp);
        data = jsonObject.getJSONObject(RESP_DATA).toJavaObject(Map.class);
        return data;
        return CommonResult.success(data);
    }
    /**
     * 查询多个测点历史值
     *
     * @param queryDto
     * @return
     */
    public CommonResult<Map<String, List<Map<String, Object>>>> queryPointsHistoryValue(ApiPointsValueQueryDTO queryDto) {
        Map<String, List<Map<String, Object>>> data = new HashMap<>();
        try {
            String url = BASE_URL + "/data/api/query-points/history-value";
            String resp = IailabHttpUtils.doPost(url, JSON.toJSONString(queryDto), "UTF-8");
            if (StringUtils.isEmpty(resp)) {
                return CommonResult.error(GlobalErrorCodeConstants.EMPTY_RESP);
            }
            JSONObject jsonObject = JSON.parseObject(resp);
            Integer respCode = jsonObject.getInteger(RESP_CODE);
            if (!GlobalErrorCodeConstants.SUCCESS.getCode().equals(respCode)) {
                CommonResult.error(respCode, jsonObject.getString(RESP_MSG));
            }
            data = jsonObject.getJSONObject(RESP_DATA).toJavaObject(Map.class);
        } catch (Exception ex) {
            return CommonResult.error(GlobalErrorCodeConstants.UNKNOWN.getCode(), ex.getMessage());
        }
        return CommonResult.success(data);
    }
    /**
     * 获取预警信息和调度建议分页列表
     *
     * @param reqVO
     * @return
     */
    public CommonResult<PageResult<StAlarmAndSuggestRespDTO>> getAlarmAndSuggestPage(StAlarmAndSuggestPageReqDTO reqVO) {
        PageResult<StAlarmAndSuggestRespDTO> data = new PageResult<>();
        try {
            String url = BASE_URL + "/model/api/mcs/alarm-suggest/page";
            String resp = IailabHttpUtils.doPost(url, JSON.toJSONString(reqVO), "UTF-8");
            if (StringUtils.isEmpty(resp)) {
                return CommonResult.error(GlobalErrorCodeConstants.EMPTY_RESP);
            }
            JSONObject jsonObject = JSON.parseObject(resp);
            Integer respCode = jsonObject.getInteger(RESP_CODE);
            if (!GlobalErrorCodeConstants.SUCCESS.getCode().equals(respCode)) {
                CommonResult.error(respCode, jsonObject.getString(RESP_MSG));
            }
            Long total = Long.parseLong(jsonObject.getJSONObject(RESP_DATA).get("total").toString());
            List<StAlarmAndSuggestRespDTO> list = jsonObject.getJSONObject(RESP_DATA).getJSONArray("list").toJavaList(StAlarmAndSuggestRespDTO.class);
            data = new PageResult<>(list, total);
        } catch (Exception ex) {
            return CommonResult.error(GlobalErrorCodeConstants.UNKNOWN.getCode(), ex.getMessage());
        }
        return CommonResult.success(data);
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/exception/ErrorCode.java
对比新文件
@@ -0,0 +1,28 @@
package com.iailab.sdk.auth.client.common.exception;
import lombok.Data;
/**
 * 错误码对象
 *
 *
 * TODO 错误码设计成对象的原因,为未来的 i18 国际化做准备
 */
@Data
public class ErrorCode {
    /**
     * 错误码
     */
    private final Integer code;
    /**
     * 错误提示
     */
    private final String msg;
    public ErrorCode(Integer code, String message) {
        this.code = code;
        this.msg = message;
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/exception/enums/GlobalErrorCodeConstants.java
对比新文件
@@ -0,0 +1,44 @@
package com.iailab.sdk.auth.client.common.exception.enums;
import com.iailab.sdk.auth.client.common.exception.ErrorCode;
/**
 * 全局错误码枚举
 * 0-999 系统异常编码保留
 *
 * 一般情况下,使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
 * 虽然说,HTTP 响应状态码作为业务使用表达能力偏弱,但是使用在系统层面还是非常不错的
 * 比较特殊的是,因为之前一直使用 0 作为成功,就不使用 200 啦。
 *
 * @author iailab
 */
public interface GlobalErrorCodeConstants {
    ErrorCode SUCCESS = new ErrorCode(0, "成功");
    // ========== 客户端错误段 ==========
    ErrorCode BAD_REQUEST = new ErrorCode(400, "请求参数不正确");
    ErrorCode UNAUTHORIZED = new ErrorCode(401, "账号未登录");
    ErrorCode FORBIDDEN = new ErrorCode(403, "没有该操作权限");
    ErrorCode NOT_FOUND = new ErrorCode(404, "请求未找到");
    ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "请求方法不正确");
    ErrorCode DATA_REPETITION = new ErrorCode(406, "数据库存在重复数据");
    ErrorCode LOCKED = new ErrorCode(423, "请求失败,请稍后重试"); // 并发请求,不允许
    ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁,请稍后重试");
    // ========== 服务端错误段 ==========
    ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常");
    ErrorCode NOT_IMPLEMENTED = new ErrorCode(501, "功能未实现/未开启");
    ErrorCode ERROR_CONFIGURATION = new ErrorCode(502, "错误的配置项");
    // ========== 自定义错误段 ==========
    ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "重复请求,请稍后重试"); // 重复请求
    ErrorCode DEMO_DENY = new ErrorCode(901, "演示模式,禁止写操作");
    ErrorCode EMPTY_RESP = new ErrorCode(992, "结果为空");
    ErrorCode UNKNOWN = new ErrorCode(999, "未知错误");
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/exception/package-info.java
对比新文件
@@ -0,0 +1 @@
package com.iailab.sdk.auth.client.common.exception;
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/package-info.java
对比新文件
@@ -0,0 +1 @@
package com.iailab.sdk.auth.client.common;
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/pojo/CommonResult.java
对比新文件
@@ -0,0 +1,55 @@
package com.iailab.sdk.auth.client.common.pojo;
import com.iailab.sdk.auth.client.common.exception.ErrorCode;
import com.iailab.sdk.auth.client.common.exception.enums.GlobalErrorCodeConstants;
import lombok.Data;
import java.io.Serializable;
/**
 * 通用返回
 *
 * @param <T> 数据泛型
 */
@Data
public class CommonResult<T> implements Serializable {
    /**
     * 错误码
     *
     * @see ErrorCode#getCode()
     */
    private Integer code;
    /**
     * 返回数据
     */
    private T data;
    /**
     * 错误提示,用户可阅读
     *
     * @see ErrorCode#getMsg() ()
     */
    private String msg;
    public static <T> CommonResult<T> error(Integer code, String message) {
        CommonResult<T> result = new CommonResult<>();
        result.code = code;
        result.msg = message;
        return result;
    }
    public static <T> CommonResult<T> error(ErrorCode errorCode) {
        return error(errorCode.getCode(), errorCode.getMsg());
    }
    public static <T> CommonResult<T> success(T data) {
        CommonResult<T> result = new CommonResult<>();
        result.code = GlobalErrorCodeConstants.SUCCESS.getCode();
        result.data = data;
        result.msg = "";
        return result;
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/pojo/PageParam.java
对比新文件
@@ -0,0 +1,39 @@
package com.iailab.sdk.auth.client.common.pojo;
import java.io.Serializable;
/**
 * 分页参数
 */
public class PageParam implements Serializable {
    private static final Integer PAGE_NO = 1;
    private static final Integer PAGE_SIZE = 10;
    /**
     * 每页条数 - 不分页
     *
     * 例如说,导出接口,可以设置 {@link #pageSize} 为 -1 不分页,查询所有数据。
     */
    public static final Integer PAGE_SIZE_NONE = -1;
    private Integer pageNo = PAGE_NO;
    private Integer pageSize = PAGE_SIZE;
    public Integer getPageNo() {
        return pageNo;
    }
    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }
    public Integer getPageSize() {
        return pageSize;
    }
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/common/pojo/PageResult.java
对比新文件
@@ -0,0 +1,49 @@
package com.iailab.sdk.auth.client.common.pojo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public final class PageResult<T> implements Serializable {
    private List<T> list;
    private Long total;
    public PageResult() {
    }
    public PageResult(List<T> list, Long total) {
        this.list = list;
        this.total = total;
    }
    public PageResult(Long total) {
        this.list = new ArrayList<>();
        this.total = total;
    }
    public static <T> PageResult<T> empty() {
        return new PageResult<>(0L);
    }
    public static <T> PageResult<T> empty(Long total) {
        return new PageResult<>(total);
    }
    public List<T> getList() {
        return list;
    }
    public void setList(List<T> list) {
        this.list = list;
    }
    public Long getTotal() {
        return total;
    }
    public void setTotal(Long total) {
        this.total = total;
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/dto/ApiPointsValueQueryDTO.java
对比新文件
@@ -0,0 +1,48 @@
package com.iailab.sdk.auth.client.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年11月24日
 */
public class ApiPointsValueQueryDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private List<String> pointNos;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date start;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date end;
    public List<String> getPointNos() {
        return pointNos;
    }
    public void setPointNos(List<String> pointNos) {
        this.pointNos = pointNos;
    }
    public Date getStart() {
        return start;
    }
    public void setStart(Date start) {
        this.start = start;
    }
    public Date getEnd() {
        return end;
    }
    public void setEnd(Date end) {
        this.end = end;
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/dto/StAlarmAndSuggestPageReqDTO.java
对比新文件
@@ -0,0 +1,83 @@
package com.iailab.sdk.auth.client.dto;
import com.iailab.sdk.auth.client.common.pojo.PageParam;
import java.util.List;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年01月07日
 */
public class StAlarmAndSuggestPageReqDTO extends PageParam {
    private static final long serialVersionUID = 1L;
    /**
     * 查询对象
     */
    private String obj;
    /**
     * 查询对象列表
     */
    private List<String> objList;
    /**
     * 类型(alarm:预警,suggest:建议)
     */
    private String type;
    /**
     * 开始时间
     * yyyy-MM-dd HH:mm:ss
     */
    private String startTime;
    /**
     * 结束时间
     * yyyy-MM-dd HH:mm:ss
     */
    private String endTime;
    public String getObj() {
        return obj;
    }
    public void setObj(String obj) {
        this.obj = obj;
    }
    public List<String> getObjList() {
        return objList;
    }
    public void setObjList(List<String> objList) {
        this.objList = objList;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getStartTime() {
        return startTime;
    }
    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }
    public String getEndTime() {
        return endTime;
    }
    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }
}
iailab-plat-sdk/src/main/java/com/iailab/sdk/auth/client/dto/StAlarmAndSuggestRespDTO.java
对比新文件
@@ -0,0 +1,81 @@
package com.iailab.sdk.auth.client.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年01月07日
 */
public class StAlarmAndSuggestRespDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 类型(预警:alarm,建议:suggest)
     */
    private String type;
    /**
     * 标题
     */
    private String title;
    /**
     * 内容
     */
    private String content;
    /**
     * 对象
     */
    private String obj;
    /**
     * 时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date time;
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getObj() {
        return obj;
    }
    public void setObj(String obj) {
        this.obj = obj;
    }
    public Date getTime() {
        return time;
    }
    public void setTime(Date time) {
        this.time = time;
    }
}
iailab-plat-sdk/src/test/java/com/iailab/sdk/IailabClientTest.java
@@ -1,6 +1,7 @@
package com.iailab.sdk;
import com.iailab.sdk.auth.client.IailabAuthClient;
import com.iailab.sdk.auth.client.common.pojo.CommonResult;
import com.iailab.sdk.auth.client.dto.ApiDataQueryDTO;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -48,23 +49,10 @@
    }
    @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 {
    public void testQueryPointsRealValue() {
        List<String> pointNos = new ArrayList<>();
        pointNos.add("111");
        Map<String, Object> stringObjectMap = IailabAuthClient.getInstance().queryPointsRealValue(pointNos);
        CommonResult<Map<String, Object>> stringObjectMap = IailabAuthClient.getInstance().queryPointsRealValue(pointNos);
        System.out.println(stringObjectMap);
    }