鞍钢鲅鱼圈能源管控系统后端代码
liriming
6 天以前 e3b86d096f5fef3adb42dec3f9803de9f1840cf1
新增计划修正接口
已添加6个文件
已重命名5个文件
已删除3个文件
已复制1个文件
已修改3个文件
768 ■■■■■ 文件已修改
ansteel-api/src/main/java/com/iailab/module/api/mcs/AnSteelApi.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/McsServiceImpl.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/McsController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/AlarmMessageRespDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/ApiPointValueDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PlanChartDTO.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PlanDataChartReqVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PlanDataChartRespVO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerRunStateDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataChartRespVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataViewDTO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/DataApi.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/DataServiceImpl.java 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/rpc/config/RpcConfiguration.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/resources/application-dev.yaml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-api/src/main/java/com/iailab/module/api/mcs/AnSteelApi.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/McsServiceImpl.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java
对比新文件
@@ -0,0 +1,50 @@
package com.iailab.module.ansteel.api.controller.admin;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.module.ansteel.api.dto.PlanDataChartReqVO;
import com.iailab.module.ansteel.api.dto.PowerRunStateDTO;
import com.iailab.module.ansteel.api.dto.PreDataChartRespVO;
import com.iailab.module.ansteel.api.service.DataApi;
import com.iailab.module.model.api.mcs.dto.PreDataSingleChartReqVO;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import static com.iailab.framework.common.pojo.CommonResult.success;
/**
 * @author: lirm
 * @date: 2025/03/17
 **/
@RestController
@RequestMapping("/ansteel/api/mcs")
public class DataController {
    @Autowired
    private DataApi dataApi;
    @GetMapping("/power-run-state/list")
    @Operation(summary = "发电厂机组运行情况")
    public CommonResult<List<PowerRunStateDTO>> getPowerRunState(@RequestParam Map<String, Object> params) {
        List<PowerRunStateDTO> list = dataApi.getPowerRunState();
        return success(list);
    }
    @PostMapping("/predict-data/charts")
    @Operation(summary = "预测数据图表")
    public CommonResult<PreDataChartRespVO> getPreDataChart(@RequestBody PreDataSingleChartReqVO reqVO) {
        PreDataChartRespVO respVO = dataApi.getPreDataChart(reqVO);
        return CommonResult.success(respVO);
    }
    @PostMapping("/plan-data/charts")
    @Operation(summary = "计划数据图表")
    public CommonResult<Map<String, Object>> getPlanDataChart(@RequestBody PlanDataChartReqVO reqVO) {
        Map<String, Object> tMap = dataApi.getPlanDataChart(reqVO);
        return CommonResult.success(tMap);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/McsController.java
文件已删除
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/AlarmMessageRespDTO.java
文件名从 ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/AlarmMessageRespDTO.java 修改
@@ -1,4 +1,4 @@
package com.iailab.module.api.mcs.dto;
package com.iailab.module.ansteel.api.dto;
/**
 * @author PanZhibao
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/ApiPointValueDTO.java
文件名从 ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/ApiPointValueDTO.java 修改
@@ -1,4 +1,4 @@
package com.iailab.module.api.mcs.dto;
package com.iailab.module.ansteel.api.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PlanChartDTO.java
对比新文件
@@ -0,0 +1,69 @@
package com.iailab.module.ansteel.api.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月03日
 */
public class PlanChartDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String itemNo;
    private List<String> itemNos;
    private Integer granularity;
    @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 String getItemNo() {
        return itemNo;
    }
    public void setItemNo(String itemNo) {
        this.itemNo = itemNo;
    }
    public List<String> getItemNos() {
        return itemNos;
    }
    public void setItemNos(List<String> itemNos) {
        this.itemNos = itemNos;
    }
    public Integer getGranularity() {
        return granularity;
    }
    public void setGranularity(Integer granularity) {
        this.granularity = granularity;
    }
    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;
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PlanDataChartReqVO.java
对比新文件
@@ -0,0 +1,30 @@
package com.iailab.module.ansteel.api.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;
/**
 * @author lirm
 * @Description
 * @createTime 2025年03月26日
 */
@Data
public class PlanDataChartReqVO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "图标编码")
    private String chartCode;
    @Schema(description = "开始时间")
    private String startTime;
    @Schema(description = "结束时间")
    private String endTime;
    @Schema(description = "预测时间")
    private String predictTime;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PlanDataChartRespVO.java
copy from ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PreDataChartRespVO.java copy to ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PlanDataChartRespVO.java
文件从 ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PreDataChartRespVO.java 复制
@@ -1,4 +1,4 @@
package com.iailab.module.api.mcs.dto;
package com.iailab.module.ansteel.api.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.iailab.module.model.api.mcs.dto.PreDataViewRespDTO;
@@ -15,7 +15,7 @@
 * @createTime 2024年11月18日
 */
@Data
public class PreDataChartRespVO implements Serializable {
public class PlanDataChartRespVO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "预测时间")
@@ -35,8 +35,6 @@
    @Schema(description = "X轴数据")
    private List<String> categories;
    private PreDataViewRespDTO dataView;
    private PreDataViewDTO preDataView;
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerRunStateDTO.java
文件名从 ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PowerRunStateDTO.java 修改
@@ -1,4 +1,4 @@
package com.iailab.module.api.mcs.dto;
package com.iailab.module.ansteel.api.dto;
import lombok.Data;
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataChartRespVO.java
文件名从 ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PreDataChartRespVO.java 修改
@@ -1,4 +1,4 @@
package com.iailab.module.api.mcs.dto;
package com.iailab.module.ansteel.api.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.iailab.module.model.api.mcs.dto.PreDataViewRespDTO;
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataViewDTO.java
文件名从 ansteel-api/src/main/java/com/iailab/module/api/mcs/dto/PreDataViewDTO.java 修改
@@ -1,7 +1,6 @@
package com.iailab.module.api.mcs.dto;
package com.iailab.module.ansteel.api.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;
@@ -81,9 +80,4 @@
    @Schema(description = "历史预测值")
    private List<Object[]> preData;
    @Schema(description = "预警信息")
    private String alarmMessage;
    @Schema(description = "展示线类型")
    private String lineType;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/DataApi.java
对比新文件
@@ -0,0 +1,24 @@
package com.iailab.module.ansteel.api.service;
import com.iailab.module.ansteel.api.dto.PlanDataChartReqVO;
import com.iailab.module.ansteel.api.dto.PlanDataChartRespVO;
import com.iailab.module.ansteel.api.dto.PowerRunStateDTO;
import com.iailab.module.ansteel.api.dto.PreDataChartRespVO;
import com.iailab.module.model.api.mcs.dto.PreDataSingleChartReqVO;
import java.util.List;
import java.util.Map;
/**
 * @author lirm
 * @Description
 * @createTime 2025年03月17日
 */
public interface DataApi {
    List<PowerRunStateDTO> getPowerRunState();
    PreDataChartRespVO getPreDataChart(PreDataSingleChartReqVO reqVO);
    Map<String, Object> getPlanDataChart(PlanDataChartReqVO reqVO);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/DataServiceImpl.java
对比新文件
@@ -0,0 +1,289 @@
package com.iailab.module.ansteel.api.service.impl;
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.api.dto.*;
import com.iailab.module.ansteel.api.service.DataApi;
import com.iailab.module.ansteel.common.constant.CommonConstant;
import com.iailab.module.data.api.plan.PlanItemApi;
import com.iailab.module.data.api.plan.dto.ApiPlanDataDTO;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
import com.iailab.module.data.common.ApiDataQueryDTO;
import com.iailab.module.model.api.mcs.McsApi;
import com.iailab.module.model.api.mcs.dto.*;
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.*;
import java.util.stream.Collectors;
@Slf4j
@Service
public class DataServiceImpl implements DataApi {
    @Autowired
    private DataPointApi dataPointApi;
    @Autowired
    private McsApi mcsApi;
    @Autowired
    private PlanItemApi planItemApi;
    @Autowired
    private PowerRunStateDao powerRunStateDao;
    @Override
    public List<PowerRunStateDTO> getPowerRunState() {
        List<PowerRunStateDTO> list = ConvertUtils.sourceToTarget(powerRunStateDao.selectList(new QueryWrapper<>()), PowerRunStateDTO.class);
        if (!CollectionUtils.isEmpty(list)) {
            list.stream().map(item -> {
                StringBuffer sb = new StringBuffer();
                sb.append(item.getQhRate());
                sb.append(",");
                sb.append(item.getFhRate());
                sb.append(",");
                sb.append(item.getGasTotal());
                sb.append(",");
                sb.append(item.getGasCost());
                sb.append(",");
                sb.append(item.getGasSurplus());
                sb.append(",");
                sb.append(item.getBfg());
                sb.append(",");
                sb.append(item.getLdg());
                sb.append(",");
                sb.append(item.getCog());
                String[] arr = sb.toString().split(",");
                Map<String, Object> adjValue = dataPointApi.queryPointsRealValue(Arrays.asList(arr));
                item.setQhRate(ObjectUtils.isEmpty(adjValue.get(arr[0])) ? "0" : new BigDecimal(adjValue.get(arr[0]).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                item.setFhRate(ObjectUtils.isEmpty(adjValue.get(arr[1])) ? "0" : new BigDecimal(adjValue.get(arr[1]).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                item.setGasTotal(ObjectUtils.isEmpty(adjValue.get(arr[2])) ? "0" : new BigDecimal(adjValue.get(arr[2]).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                item.setGasCost(ObjectUtils.isEmpty(adjValue.get(arr[3])) ? "0" : new BigDecimal(adjValue.get(arr[3]).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                item.setGasSurplus(ObjectUtils.isEmpty(adjValue.get(arr[4])) ? "0" : new BigDecimal(adjValue.get(arr[4]).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                item.setBfg(ObjectUtils.isEmpty(adjValue.get(arr[5])) ? "0" : new BigDecimal(adjValue.get(arr[5]).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                item.setLdg(ObjectUtils.isEmpty(adjValue.get(arr[6])) ? "0" : new BigDecimal(adjValue.get(arr[6]).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                item.setCog(ObjectUtils.isEmpty(adjValue.get(arr[7])) ? "0" : new BigDecimal(adjValue.get(arr[7]).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                return item;
            }).collect(Collectors.toList());
        }
        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);
        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();
        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 startTime = timeArray[1];
        Date endTime = timeArray[2];
        PreDataSingleChartRespVO resultOld = mcsApi.getPreDataSingleChart(reqVO);
        PreDataChartRespVO result = ConvertUtils.sourceToTarget(resultOld, PreDataChartRespVO.class);
        PreDataViewDTO preDataView = ConvertUtils.sourceToTarget(resultOld.getDataView(), PreDataViewDTO.class);
        if(trendsDataH != null) {
            ApiPointValueQueryDTO pointValueQueryDTO = new ApiPointValueQueryDTO();
            pointValueQueryDTO.setPointNo(trendsDataH);
            List<ApiPointValueDTO> trendsDataHList = ConvertUtils.sourceToTarget(dataPointApi.queryPointHistoryValue(pointValueQueryDTO), ApiPointValueDTO.class);
            List<Object[]> newList = new ArrayList<>();
            trendsDataHList.forEach(item -> {
                Object[] dataItem = new Object[2];
                dataItem[0] = item.getT();
                dataItem[1] = item.getV();
                newList.add(dataItem);
            });
            preDataView.setTrendsDataH(newList);
        }
        if(trendsDataL != null) {
            ApiPointValueQueryDTO pointValueQueryDTO = new ApiPointValueQueryDTO();
            pointValueQueryDTO.setPointNo(trendsDataL);
            List<ApiPointValueDTO> trendsDataLList = ConvertUtils.sourceToTarget(dataPointApi.queryPointHistoryValue(pointValueQueryDTO), ApiPointValueDTO.class);
            List<Object[]> newList = new ArrayList<>();
            trendsDataLList.forEach(item -> {
                Object[] dataItem = new Object[2];
                dataItem[0] = item.getT();
                dataItem[1] = item.getV();
                newList.add(dataItem);
            });
            preDataView.setTrendsDataL(newList);
        }
        MmItemOutputDTO outputDTO = mcsApi.getItemOutputByItemid(predictItem.getId(), resultStr, resultIndex);
        PreItemResultReqVO preItemResultReqVO = new PreItemResultReqVO();
        preItemResultReqVO.setOutputid(outputDTO.getId());
        preItemResultReqVO.setStartTime(startTime);
        preItemResultReqVO.setEndTime(endTime);
        preItemResultReqVO.setTimeFormat(timeFormat);
        preDataView.setPreData(resultOld.getDataView().getPreDataL());
        result.setPreDataView(preDataView);
        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;
    }
    /**
     *  查询原始计划、修正计划数据
     */
    @Override
    public Map<String, Object> getPlanDataChart(PlanDataChartReqVO reqVO) {
        Map<String, Object> result = new HashMap<>(2);
        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 planCode = tMap.get(CommonConstant.PLAN_CODE);
        if (planCode == null) {
            return null;
        }
        Date startTime = DateUtils.parse(reqVO.getStartTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        Date endTime = DateUtils.parse(reqVO.getEndTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        Date predictTime = DateUtils.parse(reqVO.getPredictTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        // 原始计划数据
        LinkedHashMap<String, List<String[]>> planData = getRealPlanData(planCode, startTime, endTime, predictTime);
        // 修正计划数据
        LinkedHashMap<String, List<String[]>> predData = new LinkedHashMap<>();
        predData.put(reqVO.getChartCode(), getPrePlanData(reqVO.getChartCode(), predictTime, endTime));
        result.put("planData", planData);
        result.put("predData", predData);
        return result;
    }
    //原始计划
    public LinkedHashMap<String, List<String[]>> getRealPlanData(String planCode, Date startTime, Date endTime, Date predictTime) {
        LinkedHashMap<String, List<String[]>> result = new LinkedHashMap<>();
        ApiDataQueryDTO apiDataQueryDTO = new ApiDataQueryDTO();
        apiDataQueryDTO.setItemNo(planCode);
        apiDataQueryDTO.setStart(startTime);
        apiDataQueryDTO.setEnd(endTime);
        LinkedHashMap<String, List<ApiPlanDataDTO>> planData = planItemApi.queryPlanItemRecordValue(apiDataQueryDTO);
        planData.forEach((key, value) -> {
            List<String[]> recods = new ArrayList<>();
            if (!CollectionUtils.isEmpty(value)) {
                value.forEach(item -> {
                    String[] ri = new String[3];
                    ri[0] = DateUtils.format(DateUtils.parse(item.getStartTime(), DateUtils.DATE_TIME_PATTERN_STRING), "yyyy-MM-dd HH:mm:00");
                    ri[1] = DateUtils.format(DateUtils.parse(item.getEndTime(), DateUtils.DATE_TIME_PATTERN_STRING), "yyyy-MM-dd HH:mm:00");
                    ri[2] = "2";
                    if (DateUtils.parse(item.getStartTime(), "yyyyMMddHHmmss").getTime() < predictTime.getTime()) {
                        ri[2] = "1";
                    }
                    recods.add(ri);
                });
            }
            result.put(key, recods);
        });
        return result;
    }
    //修正计划
    public List<String[]> getPrePlanData(String charCode, Date startTime, Date endTime) {
        List<String[]> result = new ArrayList<>();
        PreDataSingleChartReqVO queryDto = new PreDataSingleChartReqVO();
        queryDto.setChartCode(charCode);
        queryDto.setStartTime(startTime);
        queryDto.setEndTime(startTime);
        PreDataSingleChartRespVO chartData = mcsApi.getPreDataSingleChart(queryDto);
        if (CollectionUtils.isEmpty(chartData.getDataView().getPreDataN())) {
            return result;
        }
        double lastValue = 0;
        for (int i = 0; i < chartData.getDataView().getPreDataN().size(); i++) {
            Object[] dataItem = chartData.getDataView().getPreDataN().get(i);
            double cv = new BigDecimal(dataItem[1].toString()).doubleValue();
            if (cv == 1 && cv != lastValue) {
                String[] sa = new String[3];
                sa[0] = (String) dataItem[0];
                sa[1] = getEndTime(chartData.getDataView().getPreDataN(), i);
                sa[2] = "2";
                result.add(sa);
            }
            lastValue = cv;
        }
        return result;
    }
    private String getEndTime(List<Object[]> preDataN, int startIndex) {
        String endTime = "";
        double lastValue = 1;
        for (int i = startIndex; i < preDataN.size(); i++) {
            Object[] dataItem = preDataN.get(i);
            double cv = new BigDecimal(dataItem[1].toString()).doubleValue();
            if (cv == 0 && cv != lastValue) {
                return (String) dataItem[0];
            }
            lastValue = cv;
        }
        return endTime;
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/package-info.java
对比新文件
@@ -0,0 +1 @@
package com.iailab.module.ansteel.api.service;
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java
@@ -38,6 +38,8 @@
    String ITEM_CODE = "ITEM_CODE";
    String PLAN_CODE = "PLAN_CODE";
    String ALARM_OBJ = "ALARM_OBJ";
    String PLAN_ITEM_LIST = "PLAN_ITEM_LIST";
ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/rpc/config/RpcConfiguration.java
@@ -1,5 +1,6 @@
package com.iailab.module.ansteel.framework.rpc.config;
import com.iailab.module.data.api.plan.PlanItemApi;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.infra.api.config.ConfigApi;
import com.iailab.module.infra.api.db.DataSourceConfigServiceApi;
@@ -12,6 +13,6 @@
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, DataSourceConfigServiceApi.class, ConfigApi.class, TenantApi.class, McsApi.class, MdkApi.class, DataPointApi.class})
@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, DataSourceConfigServiceApi.class, ConfigApi.class, TenantApi.class, McsApi.class, MdkApi.class, DataPointApi.class, PlanItemApi.class})
public class RpcConfiguration {
}
ansteel-biz/src/main/resources/application-dev.yaml
@@ -35,7 +35,7 @@
      primary: master
      datasource:
        master:
          url: jdbc:mysql://172.16.8.100:3306/iailab_fast_tenant_ansteel?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
          url: jdbc:mysql://127.0.0.1:3306/iailab_fast_tenant_ansteel?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
          username: root
          password: 123456
        slave: # 模拟从库,可根据自己需要修改
@@ -57,10 +57,10 @@
  access-log: # 访问日志的配置项
    enable: false
  token:
    base-url: http://127.0.0.1:48080/admin-api/system
    tenant-id: 176
    client-id: ansteel
    client-secret: ansteel111111111111111
    base-url: http://127.0.0.1:48080/admin-api #平台接口url,使用时需修改成真实的ip和端口
    tenant-id: 176 #租户id
    client-id: ansteel #租户OAuth2客户端id
    client-secret: q3vY7K9PmFjW1xLbN6rTtZz2cV4B5sD0 #租户OAuth2客户端密钥
    username: ansteel
    password: 123456