鞍钢鲅鱼圈能源管控系统后端代码
liriming
2025-03-18 b43fec7153e8874afab91302a4a42d25a4b71bcb
预测数据接口
已添加11个文件
已重命名2个文件
已删除3个文件
已修改5个文件
732 ■■■■■ 文件已修改
ansteel-api/pom.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/api/mcs/AnSteelApi.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/AlarmMessageRespDTO.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/ApiPointValueDTO.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PowerRunStateDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PreDataChartRespVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PreDataViewDTO.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/api/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/enums/ApiConstants.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/enums/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/sms/api/AnSteelApi.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/sms/api/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/sms/enums/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/McsServiceImpl.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/McsController.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/ItemVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/enums/PreLineTypeEnum.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/util/ApiSecurityUtils.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/pom.xml
@@ -42,6 +42,13 @@
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.iailab</groupId>
            <artifactId>iailab-module-model-api</artifactId>
            <version>1.0.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
ansteel-api/src/main/java/com/iailab/module/api/mcs/AnSteelApi.java
对比新文件
@@ -0,0 +1,36 @@
package com.iailab.module.api.mcs;
import com.iailab.module.api.mcs.dto.PowerRunStateDTO;
import com.iailab.module.api.mcs.dto.PreDataChartRespVO;
import com.iailab.module.enums.ApiConstants;
import com.iailab.module.model.api.mcs.dto.PreDataSingleChartReqVO;
import com.iailab.module.model.api.mcs.dto.PreDataSingleChartRespVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
 * @author lirm
 * @Description
 * @createTime 2025年03月17日
 */
@FeignClient(name = ApiConstants.NAME)
@Tag(name = "RPC 服务 - 信息接口")
public interface AnSteelApi {
    String PREFIX = ApiConstants.PREFIX + "/api/mcs";
    @GetMapping(PREFIX + "/power-run-state/list")
    @Operation(summary = "发电厂机组运行情况")
    List<PowerRunStateDTO> getPowerRunState();
    @PostMapping(PREFIX + "/predict-data/charts")
    @Operation(summary = "预测数据图表T+30/60/120")
    PreDataChartRespVO getPreDataChart(@RequestBody PreDataSingleChartReqVO reqVO);
}
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/AlarmMessageRespDTO.java
对比新文件
@@ -0,0 +1,70 @@
package com.iailab.module.api.mcs.dto;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年08月29日
 */
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年08月29日
 */
@Schema(description = "RPC 模型 - 预警消息 DTO")
@Data
public class AlarmMessageRespDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "ID")
    private String id;
    @Schema(description = "配置ID")
    private String configId;
    @Schema(description = "消息标题")
    private String title;
    @Schema(description = "消息内容")
    private String content;
    @Schema(description = "监控对象")
    private String alarmObj;
    @Schema(description = "监控点位ID")
    private String pointId;
    @Schema(description = "预测项ID")
    private String itemId;
    @Schema(description = "当前值")
    private BigDecimal currentValue;
    @Schema(description = "超出时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date outTime;
    @Schema(description = "超出值")
    private BigDecimal outValue;
    @Schema(description = "预警类型")
    private String alarmType;
    @Schema(description = "预警时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date alarmTime;
    @Schema(description = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
}
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/ApiPointValueDTO.java
对比新文件
@@ -0,0 +1,22 @@
package com.iailab.module.api.mcs.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年08月19日
 */
@Data
public class ApiPointValueDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date t;
    private double v;
}
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PowerRunStateDTO.java
文件名从 ansteel-api/src/main/java/com/iailab/module/sms/api/dto/PowerRunStateDTO.java 修改
@@ -1,4 +1,4 @@
package com.iailab.module.sms.api.dto;
package com.iailab.module.api.mcs.dto;
import lombok.Data;
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PreDataChartRespVO.java
对比新文件
@@ -0,0 +1,40 @@
package com.iailab.module.api.mcs.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年11月18日
 */
@Data
public class PreDataChartRespVO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "预测时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date predictTime;
    @Schema(description = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @Schema(description = "结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
    @Schema(description = "图例")
    private List<String> legend;
    @Schema(description = "X轴数据")
    private List<String> categories;
    private PreDataViewDTO dataView;
}
ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PreDataViewDTO.java
对比新文件
@@ -0,0 +1,116 @@
package com.iailab.module.api.mcs.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.iailab.module.model.api.mcs.dto.AlarmMessageRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年08月26日
 */
@Schema(description = "RPC 模型 - 预测数据 DTO")
@Data
public class PreDataViewDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "预测项ID")
    private String itemId;
    @Schema(description = "预测项名称")
    private String itemName;
    @Schema(description = "输出ID")
    private String outId;
    @Schema(description = "输出结果")
    private String resultstr;
    @Schema(description = "输出结果")
    private String resultName;
    @Schema(description = "预测时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date predictTime;
    @Schema(description = "量程上限")
    private BigDecimal rangeH;
    @Schema(description = "量程下限")
    private BigDecimal rangeL;
    @Schema(description = "柜位上限")
    private BigDecimal deadLineH;
    @Schema(description = "柜位下限")
    private BigDecimal deadLineL;
    @Schema(description = "运行上限")
    private BigDecimal limitH;
    @Schema(description = "运行下限")
    private BigDecimal limitL;
    @Schema(description = "动态上限")
    private List<ApiPointValueDTO> trendsDataH;
    @Schema(description = "动态下限")
    private List<ApiPointValueDTO> trendsDataL;
    @Schema(description = "当前")
    private BigDecimal currValue;
    @Schema(description = "最大值")
    private BigDecimal maxValue;
    @Schema(description = "最小值")
    private BigDecimal minValue;
    @Schema(description = "历史最大值")
    private BigDecimal hisMax;
    @Schema(description = "历史最小值")
    private BigDecimal hisMin;
    @Schema(description = "历史最大值")
    private BigDecimal hisCumulant;
    @Schema(description = "预测最大值")
    private BigDecimal preMax;
    @Schema(description = "预测最小值")
    private BigDecimal preMin;
    @Schema(description = "预测最后一个值")
    private BigDecimal preLast;
    @Schema(description = "预测累计值")
    private BigDecimal preCumulant;
    @Schema(description = "真实值")
    private List<Object[]> realData;
    @Schema(description = "T+L/N预测值")
    private List<Object[]> preData;
    @Schema(description = "预警信息")
    private List<AlarmMessageRespDTO> alarmList;
    @Schema(description = "预警信息")
    private String alarmMessage;
    @Schema(description = "展示线类型")
    private String lineType;
    @Schema(description = "累计真实值")
    private List<Object[]> cumulantRealData;
    @Schema(description = "累计预测值")
    private List<Object[]> cumulantPreData;
}
ansteel-api/src/main/java/com/iailab/module/api/package-info.java
对比新文件
@@ -0,0 +1 @@
package com.iailab.module.api;
ansteel-api/src/main/java/com/iailab/module/enums/ApiConstants.java
文件名从 ansteel-api/src/main/java/com/iailab/module/sms/enums/ApiConstants.java 修改
@@ -1,4 +1,4 @@
package com.iailab.module.sms.enums;
package com.iailab.module.enums;
import com.iailab.framework.common.enums.RpcConstants;
@@ -13,9 +13,8 @@
     *
     * 注意,需要保证和 spring.application.name 保持一致
     */
    public static final String NAME = "model-server";
    public static final String NAME = "ansteel-server";
    public static final String PREFIX = RpcConstants.RPC_API_PREFIX +  "/model";
    public static final String PREFIX = RpcConstants.RPC_API_PREFIX +  "/ansteel";
    public static final String VERSION = "1.0.0";
}
ansteel-api/src/main/java/com/iailab/module/enums/package-info.java
对比新文件
@@ -0,0 +1 @@
package com.iailab.module.enums;
ansteel-api/src/main/java/com/iailab/module/sms/api/AnSteelApi.java
文件已删除
ansteel-api/src/main/java/com/iailab/module/sms/api/package-info.java
文件已删除
ansteel-api/src/main/java/com/iailab/module/sms/enums/package-info.java
文件已删除
ansteel-biz/pom.xml
@@ -21,11 +21,6 @@
        <!-- 依赖服务 -->
        <dependency>
            <groupId>com.iailab</groupId>
            <artifactId>ansteel-api</artifactId>
            <version>${revision}</version>
        </dependency>
        <dependency>
            <groupId>com.iailab</groupId>
            <artifactId>iailab-module-infra-api</artifactId>
            <version>${revision}</version>
        </dependency>
@@ -129,7 +124,6 @@
            <groupId>com.iailab</groupId>
            <artifactId>ansteel-api</artifactId>
            <version>1.0.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/McsServiceImpl.java
@@ -1,21 +1,32 @@
package com.iailab.module.ansteel.api;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.iailab.module.ansteel.api.dao.PowerRunStateDao;
import com.iailab.module.ansteel.common.constant.CommonConstant;
import com.iailab.module.ansteel.common.enums.PreLineTypeEnum;
import com.iailab.module.api.mcs.AnSteelApi;
import com.iailab.module.api.mcs.dto.ApiPointValueDTO;
import com.iailab.module.api.mcs.dto.PowerRunStateDTO;
import com.iailab.module.api.mcs.dto.PreDataChartRespVO;
import com.iailab.module.api.mcs.dto.PreDataViewDTO;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.model.api.mcs.AnSteelApi;
import com.iailab.module.sms.api.dto.PowerRunStateDTO;
import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
import com.iailab.module.model.api.mcs.McsApi;
import com.iailab.module.model.api.mcs.dto.ChartParamDTO;
import com.iailab.module.model.api.mcs.dto.MmItemOutputDTO;
import com.iailab.module.model.api.mcs.dto.PreDataSingleChartReqVO;
import com.iailab.module.model.api.mcs.dto.PredictItemVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@@ -24,6 +35,9 @@
    @Autowired
    private DataPointApi dataPointApi;
    @Autowired
    private McsApi mcsApi;
    @Autowired
    private PowerRunStateDao powerRunStateDao;
@@ -65,4 +79,111 @@
        }
        return list;
    }
    @Override
    public PreDataChartRespVO getPreDataChart(PreDataSingleChartReqVO reqVO) {
        Map<String, String> tMap = new HashMap<>();
        List<ChartParamDTO> list = mcsApi.getChartParamList(reqVO.getChartCode());
        if (CollectionUtils.isEmpty(list)) {
            return null;
        }
        list.forEach(item -> {
            tMap.put(item.getParamCode(), item.getParamValue());
        });
        String itemCode = tMap.get(CommonConstant.ITEM_CODE);
        if (itemCode == null) {
            return null;
        }
        String resultStr = tMap.get(CommonConstant.RESULT_STR);
        if (resultStr == null) {
            return null;
        }
        String resultIndex = tMap.get(CommonConstant.RESULT_INDEX);
        if (resultIndex == null) {
            return null;
        }
        PredictItemVO predictItem = mcsApi.getPredictItemByItemNo(itemCode);
        if (predictItem == null || predictItem.getLastTime() == null) {
            return null;
        }
        String timeFormat = StringUtils.isBlank(reqVO.getTimeFormat()) ? DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND : reqVO.getTimeFormat();
        PreLineTypeEnum lineType = tMap.get(CommonConstant.LINE_TYPE) == null ? PreLineTypeEnum.TN : PreLineTypeEnum.getEumByCode(tMap.get(CommonConstant.LINE_TYPE));
        int lengthLeft = tMap.get(CommonConstant.LENGTH_LEFT) == null ? predictItem.getPredictLength() : new BigDecimal(tMap.get(CommonConstant.LENGTH_LEFT)).intValue();
        int lengthRight = tMap.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(tMap.get(CommonConstant.LENGTH_RIGHT)).intValue();
        String trendsDataH = tMap.get(CommonConstant.TRENDSDATA_H) == null ? null : tMap.get(CommonConstant.TRENDSDATA_H);
        String trendsDataL = tMap.get(CommonConstant.TRENDSDATA_L) == null ? null : tMap.get(CommonConstant.TRENDSDATA_L);
        Date[] timeArray = calResultTime(predictItem, reqVO.getStartTime(), reqVO.getEndTime(), lengthLeft, lengthRight);
        Date predictTime = timeArray[0];
        Date startTime = timeArray[1];
        Date endTime = timeArray[2];
        PreDataChartRespVO result = ConvertUtils.sourceToTarget(mcsApi.getPreDataSingleChart(reqVO), PreDataChartRespVO.class);
        PreDataViewDTO dataView = result.getDataView();
        if(trendsDataH != null) {
            ApiPointValueQueryDTO pointValueQueryDTO = new ApiPointValueQueryDTO();
            pointValueQueryDTO.setPointNo(trendsDataH);
            List<ApiPointValueDTO> trendsDataHList = ConvertUtils.sourceToTarget(dataPointApi.queryPointHistoryValue(pointValueQueryDTO), ApiPointValueDTO.class);
            dataView.setTrendsDataH(trendsDataHList);
        }
        if(trendsDataL != null) {
            ApiPointValueQueryDTO pointValueQueryDTO = new ApiPointValueQueryDTO();
            pointValueQueryDTO.setPointNo(trendsDataL);
            List<ApiPointValueDTO> trendsDataLList = ConvertUtils.sourceToTarget(dataPointApi.queryPointHistoryValue(pointValueQueryDTO), ApiPointValueDTO.class);
            dataView.setTrendsDataL(trendsDataLList);
        }
        MmItemOutputDTO outputDTO = mcsApi.getItemOutputByItemid(predictItem.getId(), resultStr, resultIndex);
        switch (lineType) {
            case TN:
                if(reqVO.getChartCode().equals(CommonConstant.LDG_CHARRCODE)){
                    dataView.setPreData(mcsApi.getItemResult(outputDTO.getId(), predictTime, endTime, timeFormat));
                }else{
                    dataView.setPreData(mcsApi.getItemResult(outputDTO.getId(), startTime, endTime, timeFormat));
                }
                break;
            case TL:
                if(reqVO.getChartCode().equals(CommonConstant.LDG_CHARRCODE)){
                    dataView.setPreData(mcsApi.getItemResultLastPoint(outputDTO.getId(), predictTime, endTime, timeFormat));
                }else{
                    dataView.setPreData(mcsApi.getItemResultLastPoint(outputDTO.getId(), startTime, endTime, timeFormat));
                }
                break;
            default:
                break;
        }
        result.setDataView(dataView);
        return result;
    }
    private Date[] calResultTime(PredictItemVO predictItem, Date startTimeReq, Date endTimeReq, int lengthLeft, int lengthRight) {
        Date[] result = new Date[3];
        Date predictTime = predictItem.getLastTime();
        Integer granularity = predictItem.getGranularity();
        Date startTime = startTimeReq;
        if (startTime == null) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictItem.getLastTime());
            calendar.add(Calendar.SECOND, -1 * lengthLeft * granularity);
            startTime = calendar.getTime();
        }
        Date endTime = endTimeReq;
        if (endTime == null) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictItem.getLastTime());
            calendar.add(Calendar.SECOND, lengthRight * granularity);
            endTime = calendar.getTime();
        }
        if (endTime.getTime() <= startTime.getTime()) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(startTime);
            calendar.add(Calendar.SECOND, lengthRight * granularity);
            endTime = calendar.getTime();
        }
        result[0] = predictTime;
        result[1] = startTime;
        result[2] = endTime;
        return result;
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/McsController.java
@@ -1,15 +1,21 @@
package com.iailab.module.ansteel.api.controller;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.module.model.api.mcs.AnSteelApi;
import com.iailab.module.sms.api.dto.PowerRunStateDTO;
import com.iailab.module.ansteel.util.ApiSecurityUtils;
import com.iailab.module.api.mcs.AnSteelApi;
import com.iailab.module.api.mcs.dto.PowerRunStateDTO;
import com.iailab.module.api.mcs.dto.PreDataChartRespVO;
import com.iailab.module.model.api.mcs.dto.PreDataItemChartReqVO;
import com.iailab.module.model.api.mcs.dto.PreDataItemChartRespVO;
import com.iailab.module.model.api.mcs.dto.PreDataSingleChartReqVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@@ -21,16 +27,28 @@
 **/
@Tag(name = "发电厂机组运行情况")
@RestController
@RequestMapping("/mcs/power-run-state")
@RequestMapping("/ansteel/api/mcs")
public class McsController {
    @Autowired
    private AnSteelApi anSteelApi;
    @GetMapping("list")
    @Resource
    private ApiSecurityUtils apiSecurityUtils;
    @GetMapping("/power-run-state/list")
    public CommonResult<List<PowerRunStateDTO>> list(@RequestParam Map<String, Object> params) {
        List<PowerRunStateDTO> list = anSteelApi.getPowerRunState();
        return success(list);
    }
    @PostMapping("/predict-data/charts")
    @Operation(summary = "预测数据图表")
    public CommonResult<PreDataChartRespVO> getPreDataChart(HttpServletResponse response, HttpServletRequest
            request, @RequestBody PreDataSingleChartReqVO reqVO) throws Exception {
        apiSecurityUtils.validate(request);
        PreDataChartRespVO respVO = anSteelApi.getPreDataChart(reqVO);
        return CommonResult.success(respVO);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/ItemVO.java
对比新文件
@@ -0,0 +1,41 @@
package com.iailab.module.ansteel.api.vo;
import lombok.Data;
import java.util.Date;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年09月01日
 */
@Data
public class ItemVO {
    private String id;
    private String itemNo;
    private String itemName;
    private String itemType;
    private Integer predictLength;
    private Integer granularity;
    private Integer status;
    private Integer isFuse;
    private Integer predictPhase;
    private Integer workChecked;
    private Integer isDisplay;
    private Integer unitTransFactor;
    /**
     * 保留的预测点位 (T+2 则n=2, T+30则n=30, T+n则表示从最后点位开始,n=预测长度;n由系统配置得出)
     */
    private String saveIndex;
    /**
     * 项目id
     */
    private String mpkProjectId;
    /**
     * 最后运行时间
     */
    private Date lastTime;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java
对比新文件
@@ -0,0 +1,72 @@
package com.iailab.module.ansteel.common.constant;
import java.math.BigDecimal;
/**
 * @Description: 通用常量
 */
public interface CommonConstant {
    int IS_ENABLE = 1;
    BigDecimal BAD_VALUE = new BigDecimal("-2");
    BigDecimal ZERO_VALUE = new BigDecimal("0");
    String MDK_SUFFIX = ".miail";
    String MDK_RESULT = "result";
    String MDK_STATUS_CODE = "status_code";
    String MDK_STATUS_100 = "100";
    String MDK_STATUS_500 = "500 ";
    String RANGE_H = "RANGE_H";
    String RANGE_L = "RANGE_L";
    String LIMIT_H = "LIMIT_H";
    String LIMIT_L = "LIMIT_L";
    String TRENDSDATA_H = "TRENDSDATA_H";
    String TRENDSDATA_L = "TRENDSDATA_L";
    String ITEM_CODE = "ITEM_CODE";
    String ALARM_OBJ = "ALARM_OBJ";
    String PLAN_ITEM_LIST = "PLAN_ITEM_LIST";
    String RESULT_STR = "RESULT_STR";
    String RESULT_INDEX = "RESULT_INDEX";
    String LENGTH_LEFT = "LENGTH_LEFT";
    String LENGTH_RIGHT = "LENGTH_RIGHT";
    String ADJ_VALUE_POINT = "ADJ_VALUE_POINT";
    String ADJ_VALUE_ARR_POINT = "ADJ_VALUE_ARR_POINT";
    // 趋势预测曲线类型,0:展示T+N,1:展示T+L,
    String LINE_TYPE = "LINE_TYPE";
    // 模型输出预测值
    String OUT_PREDICT_VALUES = "predictValues";
    // 模型输出优化值
    String OUT_OPT_VALUES = "optValues";
    // 模型输出调整值
    String OUT_ADJUST_VALUES = "adjustValues";
    String BFG_CHARRCODE = "BFG_PRED01";
    String COG_CHARRCODE = "COG_PRED01";
    String LDG_CHARRCODE = "LDG_PRED01";
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/enums/PreLineTypeEnum.java
对比新文件
@@ -0,0 +1,33 @@
package com.iailab.module.ansteel.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年11月18日
 */
@Getter
@AllArgsConstructor
public enum PreLineTypeEnum {
    TN("0", "T+N"),
    TL("1", "T+L"),
    CD("2", "curData");
    private String code;
    private String desc;
    public static PreLineTypeEnum getEumByCode(String code) {
        if (code == null) {
            return null;
        }
        for (PreLineTypeEnum statusEnum : PreLineTypeEnum.values()) {
            if (statusEnum.getCode().equals(code)) {
                return statusEnum;
            }
        }
        return null;
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/util/ApiSecurityUtils.java
对比新文件
@@ -0,0 +1,82 @@
package com.iailab.module.ansteel.util;
import com.iailab.framework.common.constant.Constant;
import com.iailab.framework.tenant.core.context.TenantContextHolder;
import com.iailab.module.system.api.user.AdminUserApi;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.regex.Pattern;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2023年12月06日 15:55:00
 */
@Component
public class ApiSecurityUtils {
    /*@Resource
    private ApiAppService apiAppService;*/
    @Resource
    private AdminUserApi adminUserApi;
    private Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
    private String getRequestToken(HttpServletRequest httpRequest) {
        //从header中获取token
        String token = httpRequest.getHeader(Constant.TOKEN_HEADER);
        //如果header中不存在token,则从参数中获取token
        if (StringUtils.isBlank(token)) {
            token = httpRequest.getParameter(Constant.TOKEN_HEADER);
        }
        return token;
    }
    private void setTenantId(HttpServletRequest httpRequest) {
        String tenantId = httpRequest.getHeader(Constant.HEAD_TENANT_ID);
        if (StringUtils.isNotBlank(tenantId)) {
            TenantContextHolder.setTenantId(Long.parseLong(tenantId));
        }
    }
    public void validate(HttpServletRequest httpRequest) throws Exception {
        setTenantId(httpRequest);
        /*String token = getRequestToken(httpRequest);
        if (StringUtils.isBlank(token)) {
            throw new Exception("token 不能为空!");
        }
        LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
        if (ObjectUtils.isEmpty(loginUser)) {
            throw new RuntimeException("用户不能为空");
        }
        CommonResult<AdminUserRespDTO> user = adminUserApi.getUser(loginUser.getId());
        if(ObjectUtils.isEmpty(user)) {
            throw new RuntimeException("用户不存在");
        }
        AdminUserRespDTO userData = user.getData();
        String username = userData.getUsername();*/
        /*ApiAppEntity appInfo = apiAppService.getInfoByAppKey(username);
        if (appInfo == null) {
            throw new RuntimeException("应用未授权");
        }*/
        //TODO 验证签名
//        if(!com.iailab.common.utils.JwtUtils.verify(token, appInfo.getAppSecret())){
//            throw new RuntimeException("签名错误");
//        }
    }
    private boolean isInteger(String str) {
        return pattern.matcher(str).matches();
    }
}
pom.xml
@@ -11,7 +11,7 @@
        快速开发框架,默认基础system,data,model
    </description>
    <modules>
<!--        <module>ansteel-api</module>-->
        <module>ansteel-api</module>
        <module>ansteel-biz</module>
    </modules>