鞍钢鲅鱼圈能源管控系统后端代码
795e5520707c53c993ee3f8faf12e44d23dbcab1..a01eec9f761ffcc11d42da0a82595e720427dd68
3 天以前 潘志宝
望铁关口触发边界
a01eec 对比 | 目录
3 天以前 潘志宝
负荷移植建议与方案
452666 对比 | 目录
3 天以前 潘志宝
Merge remote-tracking branch 'origin/master'
58604b 对比 | 目录
3 天以前 潘志宝
负荷移植建议与方案
8f1bbc 对比 | 目录
3 天以前 dengzedong
化产蒸汽消耗 建议保存 干熄焦产蒸汽 建议保存
60967a 对比 | 目录
3 天以前 潘志宝
负荷移植建议与方案 修改
c508cb 对比 | 目录
3 天以前 潘志宝
Merge branch 'master' of http://dlindusit.com:53929/r/ansteel
5a46fc 对比 | 目录
3 天以前 潘志宝
负荷移植建议与方案 修改
c27e45 对比 | 目录
3 天以前 dengzedong
多个指标/测点历史数据
d2b382 对比 | 目录
3 天以前 dengzedong
log.info("datas:" + params.get("datas").toString());
4f5f53 对比 | 目录
3 天以前 dengzedong
多个指标/测点历史数据
ea6292 对比 | 目录
3 天以前 潘志宝
Merge remote-tracking branch 'origin/master'
e648e9 对比 | 目录
3 天以前 潘志宝
负荷移植建议与方案 修改
13ec40 对比 | 目录
3 天以前 liriming
文档新增135机组指标趋势线接口
077ab5 对比 | 目录
3 天以前 liriming
135机组指标趋势线接口修改
00762d 对比 | 目录
3 天以前 dengzedong
焦化 月作业率
2fc73b 对比 | 目录
3 天以前 dengzedong
焦化 概况 脱硝、运行时间、作业率
774a2b 对比 | 目录
3 天以前 dengzedong
焦化 概况 脱硝、运行时间、作业率
7eaaab 对比 | 目录
3 天以前 潘志宝
修正计划 展示T+N
4b7487 对比 | 目录
3 天以前 潘志宝
修正计划
8b9087 对比 | 目录
3 天以前 潘志宝
功率因数异常报警与溯源
78aae5 对比 | 目录
3 天以前 潘志宝
修正计划 左侧T+L,右侧当前
3f67cc 对比 | 目录
3 天以前 潘志宝
Merge branch 'master' of http://dlindusit.com:53929/r/ansteel
be0e4b 对比 | 目录
4 天以前 liriming
新增135机组指标趋势线接口
c79bc0 对比 | 目录
4 天以前 liriming
syncEmsTask删除多余引用包
43f2b9 对比 | 目录
4 天以前 liriming
135机组接口说明
ce758c 对比 | 目录
已修改20个文件
已添加5个文件
694 ■■■■ 文件已修改
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PlantController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/DataServiceImpl.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferDetRespVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferReqVO.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewDTO.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewEntity.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/enums/SubProcessTypeEnum.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunDayScheduleModuleTask.java 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunScheduleModuleTask.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/SyncEmsTask.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/page/service/PageParamService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/page/service/impl/PageParamServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/dao/PlantChartConfDao.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/entity/PlantChartConfEntity.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/PlantChartConfService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/impl/PlantChartConfServiceImpl.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/vo/PlantChartDataVO.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/鞍钢数据接口文档_master.doc 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java
@@ -1,5 +1,8 @@
package com.iailab.module.ansteel.api.controller.admin;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.module.ansteel.api.dto.*;
import com.iailab.module.ansteel.api.service.DataService;
@@ -10,6 +13,7 @@
import com.iailab.module.model.api.mcs.dto.StAlarmAndSuggestReqVO;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@@ -77,6 +81,27 @@
        return success(dataService.getHistoryValue(params));
    }
    @PostMapping("/datas/history-value")
    @Operation(summary = "多个指标/测点历史数据")
    public CommonResult<Map<String,List<Object[]>>> getDatasHistoryValue(@RequestBody Map<String, Object> params) {
        Map<String,List<Object[]>> result = new HashMap<>();
        if (!params.containsKey("datas") || StringUtils.isBlank(params.get("datas").toString())) {
            return success(result);
        }
        JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(params.get("datas")));
        for (Object data : jsonArray) {
            Map<String, Object> param = new HashMap<>();
            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(data));
            param.put("dataType",jsonObject.get("dataType"));
            param.put("dataNo",jsonObject.get("dataNo"));
            param.put("startTime",params.get("startTime"));
            param.put("endTime",params.get("endTime"));
            List<Object[]> historyValue = dataService.getHistoryValue(param);
            result.put(jsonObject.get("dataNo").toString(),historyValue);
        }
        return success(result);
    }
    @PostMapping("/write-point-value")
    @Operation(summary = "写入测点值")
    public CommonResult writePointRealValue(@RequestBody ApiPointValueWriteDTO writeDTO) {
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java
@@ -11,6 +11,7 @@
import com.iailab.module.ansteel.common.enums.TransferTypeEnum;
import com.iailab.module.ansteel.common.utils.DecimalUtil;
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.PredictTnValueReqVO;
import com.iailab.module.model.api.mdk.MdkApi;
import com.iailab.module.model.api.mdk.dto.MdkPredictDataDTO;
@@ -20,6 +21,7 @@
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -27,6 +29,7 @@
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import static com.iailab.framework.common.pojo.CommonResult.success;
@@ -42,8 +45,11 @@
    @Autowired
    private MdkApi mdkApi;
    @Autowired
    private McsApi mcsApi;
    private String RPH_SCHEDULE_CODE = "AnSteelGasSchedule";
    /**
     * 负荷移植-负荷移植建议与方案
@@ -55,7 +61,6 @@
    @Operation(summary = "负荷移植-负荷移植建议与方案")
    public CommonResult<PowerTransferRespVO> scheduleEleLoad(@RequestBody PowerTransferReqVO reqVO) {
        log.info("异常工况下的负荷移植");
        reqVO.setLimit(new BigDecimal(170000));
        if (reqVO.getTingjiZhong() == null) {
            reqVO.setTingjiZhong(0);
        }
@@ -65,32 +70,115 @@
        if (reqVO.getTingjiRezha()== null) {
            reqVO.setTingjiRezha(0);
        }
        if (reqVO.getIsReduceCog() == null) {
            return CommonResult.error(GlobalErrorCodeConstants.UNKNOWN.getCode(), "IsReduceCog is null");
        }
        MdkScheduleReqDTO fhyzDto = new MdkScheduleReqDTO();
        PowerTransferRespVO result = new PowerTransferRespVO();
        List<PowerTransferDetRespVO> adviceList = new ArrayList<>();
        List<PowerTransferDetRespVO> demandAdviceList = new ArrayList<>();
        List<PowerTransferDetRespVO> gasAdviceList = new ArrayList<>();
        try {
            log.info("PowerTransferReqVO=" + JSONObject.toJSONString(reqVO));
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.SECOND,0);
            calendar.set(Calendar.MILLISECOND,0);
            MdkScheduleReqDTO dto = new MdkScheduleReqDTO();
            dto.setScheduleTime(calendar.getTime());
            // 0 建议编码
            List<ChartParamDTO> demandParamList = mcsApi.getChartParamList(com.iailab.module.ansteel.common.constant.CommonConstant.FHYZ_DEMAND_ADVICE);
            Map<String, ChartParamDTO> demandAdviceCodeMap = new HashMap<>();
            List<String> demandAdviceCodeList = new ArrayList<>();
            if (demandParamList != null) {
                for (ChartParamDTO chartParamDTO : demandParamList) {
                    demandAdviceCodeMap.put(chartParamDTO.getParamCode(), chartParamDTO);
                    demandAdviceCodeList.add(chartParamDTO.getParamCode());
                }
            }
            List<ChartParamDTO> gasParamList = mcsApi.getChartParamList(com.iailab.module.ansteel.common.constant.CommonConstant.FHYZ_GAS_ADVICE);
            Map<String, ChartParamDTO> gasAdviceCodeMap = new HashMap<>();
            List<String> gasAdviceCodeList = new ArrayList<>();
            if (gasParamList != null) {
                for (ChartParamDTO chartParamDTO : gasParamList) {
                    gasAdviceCodeMap.put(chartParamDTO.getParamCode(), chartParamDTO);
                    gasAdviceCodeList.add(chartParamDTO.getParamCode());
                }
            }
            String nowH = DateUtils.format(calendar.getTime(), "hh:mm");
            switch (TransferTypeEnum.getEumByCode(reqVO.getType())) {
                case XF:
                    // 1 日平衡
                    /*日平衡动态参数
                    zhiling_params  [休风高炉,休风时长]
                    jiaohua_params  [是否减焦化BFG,下限]
                    testlist   [热轧,厚板,中板,A系列烧结,B系列烧结]
                                        GASrezhaAdvice
                                        GAShoubanAdvice
                                        GASzhongbanAdvice
                                        GASAshaojieAdvice
                                        GASBshaojieAdvice
                    */
                    MdkScheduleReqDTO rphScheduleReqDTO = new MdkScheduleReqDTO();
                    rphScheduleReqDTO.setScheduleTime(calendar.getTime());
                    rphScheduleReqDTO.setScheduleCode(RPH_SCHEDULE_CODE);
                    Map<String, String> rphSettings = new HashMap<>();
                    List<Integer> zhilingParams = new ArrayList<>();
                    zhilingParams.add(reqVO.getBfg());
                    zhilingParams.add(reqVO.getMins());
                    rphSettings.put("zhiling_params", JSONArray.toJSONString(zhilingParams));
                    List<Integer> jiaohuaParams = new ArrayList<>();
                    jiaohuaParams.add(reqVO.getIsReduceCog() == 0 ? 0 : 1);
                    jiaohuaParams.add(reqVO.getLimit().intValue());
                    rphSettings.put("jiaohua_params", JSONArray.toJSONString(jiaohuaParams));
                    List<Integer> loadChangeState = new ArrayList<>();
                    String[] loadChangeArr = {"GASrezhaAdvice", "GAShoubanAdvice", "GASzhongbanAdvice", "GASAshaojieAdvice", "GASBshaojieAdvice"};
                    for (int i = 0; i < loadChangeArr.length; i++) {
                        loadChangeState.add(reqVO.getAdviceCodeList().contains(loadChangeArr[i]) ? 1 : 0);
                    }
                    rphSettings.put("testlist", JSONArray.toJSONString(loadChangeState));
                    rphScheduleReqDTO.setDynamicSettings(rphSettings);
                    log.info("负荷移植调用日平衡开始执行," + JSONObject.toJSONString(rphScheduleReqDTO));
                    MdkScheduleRespDTO rphRespDTO = mdkApi.doSchedule(rphScheduleReqDTO);
                    log.info("负荷移植调用日平衡执行完成," + rphRespDTO);
                    String rphStatusCode = rphRespDTO.getStatusCode();
                    if (!CommonConstant.MDK_STATUS_100.equals(rphStatusCode)) {
                        log.info("rphStatusCode=" + rphStatusCode);
                        return CommonResult.error(GlobalErrorCodeConstants.UNKNOWN.getCode(), "负荷移植调用日平衡,无计算结果");
                    }
                    String gasUseAllnNew = rphRespDTO.getResult().get("Gas_Use_All_new").toString();
                    log.info("gasUseAllnNew=" + gasUseAllnNew);
                    // 高炉休风
                    dto.setScheduleCode("AnSteelpowertransfer");
                    fhyzDto.setScheduleTime(calendar.getTime());
                    fhyzDto.setScheduleCode("AnSteelpowertransfer");
                    Map<String, String> dynamicSettings = new HashMap<>();
                    Integer[] xiufengOrder = {
                            reqVO.getBfg(),
                            reqVO.getNow() == null ? Integer.parseInt(nowH) : reqVO.getNow(),
                            reqVO.getStart(),
                            reqVO.getMins()};
                    // 煤气日平衡输出
                    dynamicSettings.put("Gas_Use_All_new", gasUseAllnNew);
                    // 休风指令信息
                    dynamicSettings.put("xiufeng_order", JSONArray.toJSONString(xiufengOrder));
                    // 焦化保生产所需高炉煤气
                    dynamicSettings.put("jiaohua_BFG_down", reqVO.getLimit().toString());
                    // 停机时间
                    Integer[] tingjiOrder = {reqVO.getTingjiZhong(), reqVO.getTingjiHou(), reqVO.getTingjiRezha()};
                    dynamicSettings.put("tingji_order", JSONArray.toJSONString(tingjiOrder));
                    dto.setDynamicSettings(dynamicSettings);
                    // 选择建议编码, 不选默认[-1]
                    List<Integer> choiceParams = new ArrayList<>();
                    if (CollectionUtils.isEmpty(reqVO.getAdviceCodeList())) {
                        choiceParams.add(-1);
                    } else {
                        for(String adviceCode : reqVO.getAdviceCodeList()) {
                            choiceParams.add(Integer.parseInt(demandAdviceCodeMap.get(adviceCode).getParamValue()));
                        }
                    }
                    dynamicSettings.put("choice_params", JSONArray.toJSONString(choiceParams));
                    fhyzDto.setDynamicSettings(dynamicSettings);
                    break;
                case JX:
                    // 产线检修
@@ -99,8 +187,8 @@
                    return CommonResult.error(GlobalErrorCodeConstants.NOT_FOUND, "Type参数错误");
            }
            log.info("调度方案开始执行," + JSONObject.toJSONString(dto));
            MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto);
            log.info("调度方案开始执行," + JSONObject.toJSONString(fhyzDto));
            MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(fhyzDto);
            log.info("调度方案执行完成," + mdkScheduleRespDTO);
            String statusCode = mdkScheduleRespDTO.getStatusCode();
@@ -115,50 +203,22 @@
            switch (TransferTypeEnum.getEumByCode(reqVO.getType())) {
                case XF:
                    // 高炉休风
                    result.setBestTotalPower(DecimalUtil.toBigDecimal(data.get("best_total_power")));//负荷调整总量
                    result.setBfgGap(DecimalUtil.toBigDecimal(data.get("bfg_gap")));//煤气送管网缺口
                    result.setDemand(data.get("demand"));//需量缺口
                    result.setCogGapTime(data.get("cog_gap") == null ? 0 : DecimalUtil.toBigDecimal(data.get("cog_gap"), 0).intValue()); //焦化减高炉煤气-时间
                    result.setCogGapAmount(data.get("cog_gap") == null ? 0 : DecimalUtil.toBigDecimal(data.get("cog_gap"), 1).intValue());//焦化减高炉煤气-数量
                    result.setBfgShengyue(DecimalUtil.toBigDecimal(data.get("BFG_shengyu")));
                    result.setDemand(data.get("demand"));
                    result.setGasGap(data.get("gas_gap"));
                    result.setFadian(data.get("fadian"));
                    if (data.get("zhongbanAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("中板工序", data.get("zhongbanAdvice")));
                    for (String adviceCode : demandAdviceCodeList) {
                        if (data.get(adviceCode) != null) {
                            demandAdviceList.add(DecimalUtil.toPowerTransferDetRespVO(demandAdviceCodeMap.get(adviceCode).getParamName(), data.get(adviceCode)));
                        }
                    }
                    if (data.get("houbanAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("厚板工序", data.get("houbanAdvice")));
                    result.setDemandAdviceList(demandAdviceList);
                    for (String adviceCode : gasAdviceCodeList) {
                        if (data.get(adviceCode) != null) {
                            gasAdviceList.add(DecimalUtil.toPowerTransferDetRespVO(gasAdviceCodeMap.get(adviceCode).getParamName(), data.get(adviceCode)));
                        }
                    }
                    if (data.get("rezhaAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("热轧工序", data.get("rezhaAdvice")));
                    }
                    if (data.get("baihuiAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("白灰工序", data.get("baihuiAdvice")));
                    }
                    if (data.get("3#zhiyangAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("3#制氧机", data.get("3#zhiyangAdvice")));
                    }
                    if (data.get("1#LFAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("1#LF炉", data.get("1#LFAdvice")));
                    }
                    if (data.get("2#LFAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("2#LF炉", data.get("2#LFAdvice")));
                    }
                    if (data.get("shaojieAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("B系列烧结", data.get("shaojieAdvice")));
                    }
                    if (data.get("CCPPAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("CCPP", data.get("CCPPAdvice")));
                    }
                    if (data.get("135Advice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("135机组", data.get("135Advice")));
                    }
                    if (data.get("1#2#zhiyangAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("1#2#制氧机", data.get("1#2#zhiyangAdvice")));
                    }
                    if (data.get("2#lianganglianzhuAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("2#炼钢连铸", data.get("2#lianganglianzhuAdvice")));
                    }
                    result.setAdviceList(adviceList);
                    result.setGasAdviceList(gasAdviceList);
                    log.info("XFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXF");
                    break;
               case JX:
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PlantController.java
@@ -1,19 +1,19 @@
package com.iailab.module.ansteel.api.controller.admin;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.module.ansteel.plant.service.PlantChartConfService;
import com.iailab.module.ansteel.plant.service.PlantConfService;
import com.iailab.module.ansteel.plant.service.PlantIndexConfService;
import com.iailab.module.ansteel.plant.vo.PlantChartDataVO;
import com.iailab.module.ansteel.plant.vo.PlantDataVO;
import com.iailab.module.ansteel.plant.vo.PlantIndexDataVO;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
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 java.util.List;
import java.util.Map;
import static com.iailab.framework.common.pojo.CommonResult.success;
@@ -33,6 +33,9 @@
    @Autowired
     private PlantIndexConfService plantIndexConfService;
    @Autowired
    private PlantChartConfService plantChartConfService;
    @GetMapping("/data")
    @Operation(summary = "135机组数据")
    public CommonResult<List<PlantDataVO>> getPlantData(@RequestParam("businessType") String businessType) {
@@ -46,4 +49,11 @@
        List<PlantIndexDataVO> result = plantIndexConfService.getPlantIndexData(businessType);
        return success(result);
    }
    @PostMapping("/chart-data")
    @Operation(summary = "135机组指标趋势数据")
    public CommonResult<PlantChartDataVO> getPlantChartData(@RequestBody Map tMap) {
        PlantChartDataVO result = plantChartConfService.getPlantChartData(tMap);
        return success(result);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
@@ -1841,9 +1841,6 @@
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        if (!CollectionUtils.isEmpty(powerFactorReqVO.getContentList())) {
        }
        MdkScheduleReqDTO dto = new MdkScheduleReqDTO();
        dto.setScheduleTime(calendar.getTime());
        dto.setScheduleCode("AnsteelOffPowerAC");
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/DataServiceImpl.java
@@ -324,7 +324,7 @@
        // 修正计划数据
        LinkedHashMap<String, List<String[]>> predData = new LinkedHashMap<>();
        for (int i = 0; i < reqVO.getPlanCodes().size(); i++) {
            predData.put(reqVO.getPlanCodes().get(i), getPrePlanData(reqVO.getPlanPreds().get(i), predictTime, endTime));
            predData.put(reqVO.getPlanCodes().get(i), getPrePlanData(reqVO.getPlanPreds().get(i), startTime, endTime, predictTime));
        }
        result.put("planData", planData);
        result.put("predData", predData);
@@ -366,25 +366,61 @@
    }
    //修正计划
    public List<String[]> getPrePlanData(String charCode, Date startTime, Date endTime) {
    public List<String[]> getPrePlanData(String charCode, Date startTime, Date endTime, Date predictTime) {
        List<String[]> result = new ArrayList<>();
        PreDataSingleChartReqVO queryDto = new PreDataSingleChartReqVO();
        queryDto.setChartCode(charCode);
        queryDto.setStartTime(startTime);
        queryDto.setEndTime(endTime);
        PreDataSingleChartRespVO chartData = mcsApi.getPreDataSingleChart(queryDto);
        if (CollectionUtils.isEmpty(chartData.getDataView().getPreDataN())) {
        if (CollectionUtils.isEmpty(chartData.getDataView().getCurData())) {
            return result;
        }
        String lineType = chartData.getDataView().getLineType();
        List<Object[]> preData = new ArrayList<>();
        if ("1".equals(lineType)) {
            // 两部分组成,左侧T+L,右侧当前
            if(!CollectionUtils.isEmpty(chartData.getDataView().getPreDataL())) {
                for (int i = 0; i < chartData.getDataView().getPreDataL().size(); i++) {
                    Object[] dataItem = chartData.getDataView().getPreDataL().get(i);
                    Date t = DateUtils.parse(dataItem[0].toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
                    if (t.getTime() <= predictTime.getTime()) {
                        preData.add(dataItem);
                    }
                }
            }
            if(!CollectionUtils.isEmpty(chartData.getDataView().getCurData())) {
                for (int i = 0; i < chartData.getDataView().getCurData().size(); i++) {
                    Object[] dataItem = chartData.getDataView().getCurData().get(i);
                    preData.add(dataItem);
                }
            }
        } else if ("2".equals(lineType)) {
            // 展示当前值
            if(!CollectionUtils.isEmpty(chartData.getDataView().getCurData())) {
                for (int i = 0; i < chartData.getDataView().getCurData().size(); i++) {
                    Object[] dataItem = chartData.getDataView().getCurData().get(i);
                    preData.add(dataItem);
                }
            }
        } else {
            // 展示T+N
            if(!CollectionUtils.isEmpty(chartData.getDataView().getPreDataN())) {
                for (int i = 0; i < chartData.getDataView().getPreDataN().size(); i++) {
                    Object[] dataItem = chartData.getDataView().getPreDataN().get(i);
                    preData.add(dataItem);
                }
            }
        }
        double lastValue = 0;
        for (int i = 0; i < chartData.getDataView().getPreDataN().size(); i++) {
            Object[] dataItem = chartData.getDataView().getPreDataN().get(i);
        for (int i = 0; i < preData.size(); i++) {
            Object[] dataItem = preData.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[1] = getEndTime(preData, i);
                sa[2] = "2";
                result.add(sa);
            }
@@ -393,11 +429,11 @@
        return result;
    }
    private String getEndTime(List<Object[]> preDataN, int startIndex) {
    private String getEndTime(List<Object[]> preData, int startIndex) {
        String endTime = "";
        double lastValue = 1;
        for (int i = startIndex; i < preDataN.size(); i++) {
            Object[] dataItem = preDataN.get(i);
        for (int i = startIndex; i < preData.size(); i++) {
            Object[] dataItem = preData.get(i);
            double cv = new BigDecimal(dataItem[1].toString()).doubleValue();
            if (cv == 0 && cv != lastValue) {
                return (String) dataItem[0];
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferDetRespVO.java
@@ -16,6 +16,9 @@
public class PowerTransferDetRespVO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "建议编码")
    private String adviceCode;
    @Schema(description = "标题")
    private String title;
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferReqVO.java
@@ -5,6 +5,7 @@
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
 * @author PanZhibao
@@ -22,7 +23,7 @@
    @Schema(description = "当前时间")
    private Integer now;
    @Schema(description = "休风开始时间")
    @Schema(description = "休风时间")
    private Integer start;
    @Schema(description = "休风时长")
@@ -30,6 +31,9 @@
    @Schema(description = "休风高炉(1/2)")
    private Integer bfg;
    @Schema(description = "是否减焦化BFG(0:否,1:是)")
    private Integer isReduceCog;
    @Schema(description = "焦化消耗高炉煤气下限(大于0)")
    private BigDecimal limit;
@@ -42,4 +46,7 @@
    @Schema(description = "热轧停机时长")
    private Integer tingjiRezha;
    @Schema(description = "先择的建议编码列表")
    private List<String> adviceCodeList;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java
@@ -4,7 +4,6 @@
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -18,24 +17,18 @@
    private static final long serialVersionUID = 1L;
    @Schema(description = "负荷调整总量")
    private BigDecimal bestTotalPower;
    @Schema(description = "煤气送管网缺口")
    private BigDecimal bfgGap;
    @Schema(description = "需量缺口")
    private Object demand;
    @Schema(description = "焦化减高炉煤气-时间")
    private Integer cogGapTime;
    @Schema(description = "煤气缺口")
    private Object gasGap;
    @Schema(description = "焦化减高炉煤气-数量")
    private Integer cogGapAmount;
    @Schema(description = "发电")
    private Object fadian;
    @Schema(description = "BFG剩余")
    private BigDecimal bfgShengyue;
    @Schema(description = "工序需量管控建议")
    private List<PowerTransferDetRespVO> demandAdviceList;
    @Schema(description = "建议列表")
    private List<PowerTransferDetRespVO> adviceList;
    @Schema(description = "工序煤气管控建议")
    private List<PowerTransferDetRespVO> gasAdviceList;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewDTO.java
@@ -85,6 +85,14 @@
     */
    private BigDecimal idleTime;
    /**
     * 运行时间
     */
    private BigDecimal runTime;
    /**
     * 作业率
     */
    private BigDecimal workRatio;
    /**
     * BFG消耗/总耗
     */
    private BigDecimal bfgC;
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewEntity.java
@@ -79,6 +79,14 @@
     */
    private BigDecimal idleTime;
    /**
     * 运行时间
     */
    private BigDecimal runTime;
    /**
     * 作业率
     */
    private BigDecimal workRatio;
    /**
     * BFG消耗/总耗
     */
    private BigDecimal bfgC;
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewServiceImpl.java
@@ -72,7 +72,7 @@
        QueryWrapper<CokingOverviewEntity> queryWrapperMonth = new QueryWrapper<>();
        queryWrapperMonth.eq("process_type", processType);
        queryWrapperMonth.between("clock", monthStartClock,clock);
        queryWrapperMonth.select("sub_process_type","ROUND(AVG(steam_p)*30, 2) as steam_p","ROUND(AVG(dj_steam_p)*30, 2) as dj_steam_p","ROUND(AVG(steam_c)*30, 2) as steam_c","ROUND(AVG(steam_only_c)*30, 2) as steam_only_c","ROUND(AVG(steam_v)*30, 2) as steam_v","ROUND(AVG(gas_p)*30, 2) as gas_p","ROUND(AVG(gas_c)*30, 2) as gas_c","ROUND(AVG(power_c)*30, 2) as power_c","ROUND(AVG(power_only_c)*30, 2) as power_only_c","ROUND(AVG(power_c_standard)*30, 2) as power_c_standard","ROUND(AVG(idle_time)*30, 0) as idle_time","ROUND(AVG(bfg_c)*30, 2) as bfg_c","ROUND(AVG(cog_p)*30, 2) as cog_p","ROUND(AVG(cog_c)*30, 2) as cog_c","ROUND(AVG(bfg_only_c)*30, 2) as bfg_only_c","ROUND(AVG(cog_only_c)*30, 2) as cog_only_c","ROUND(AVG(gxls)*30, 0) as gxls")
        queryWrapperMonth.select("sub_process_type","ROUND(AVG(steam_p)*30, 2) as steam_p","ROUND(AVG(dj_steam_p)*30, 2) as dj_steam_p","ROUND(AVG(steam_c)*30, 2) as steam_c","ROUND(AVG(steam_only_c)*30, 2) as steam_only_c","ROUND(AVG(steam_v)*30, 2) as steam_v","ROUND(AVG(gas_p)*30, 2) as gas_p","ROUND(AVG(gas_c)*30, 2) as gas_c","ROUND(AVG(power_c)*30, 2) as power_c","ROUND(AVG(power_only_c)*30, 2) as power_only_c","ROUND(AVG(power_c_standard)*30, 2) as power_c_standard","ROUND(AVG(idle_time)*30, 0) as idle_time","ROUND(AVG(bfg_c)*30, 2) as bfg_c","ROUND(AVG(cog_p)*30, 2) as cog_p","ROUND(AVG(cog_c)*30, 2) as cog_c","ROUND(AVG(bfg_only_c)*30, 2) as bfg_only_c","ROUND(AVG(cog_only_c)*30, 2) as cog_only_c","ROUND(AVG(gxls)*30, 0) as gxls","ROUND(AVG(run_time)*30, 0) as run_time","ROUND(AVG(work_ratio), 2) as work_ratio")
                .groupBy("sub_process_type");
        List<CokingOverviewEntity> monthList = cokingOverviewDao.selectList(queryWrapperMonth);
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java
@@ -86,4 +86,10 @@
    //电容器编码
    String POWER_CODE = "POWER_CODE";
    //负荷移植-工序需量管控
    String FHYZ_DEMAND_ADVICE = "FHYZ_DEMAND_ADVICE";
    //负荷移植-工序煤气管控
    String FHYZ_GAS_ADVICE = "FHYZ_GAS_ADVICE";
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/enums/SubProcessTypeEnum.java
@@ -20,6 +20,8 @@
    PSJ("PSJ", "破碎机"),
    JL_12("JL_12", "1#2#焦炉"),
    JL_34("JL_34", "3#4#焦炉"),
    TX_12("TX_12", "1#2#脱硝"),
    TX_34("TX_34", "3#4#脱硝"),
    GL("GL", "鼓冷"),
    LA("LA", "硫铵"),
    CB("CB", "粗苯"),
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunDayScheduleModuleTask.java
@@ -15,6 +15,7 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
@@ -25,6 +26,8 @@
    private Logger logger = LoggerFactory.getLogger(getClass());
    private String AnStellCOAL = "AnStellCOAL"; //焦化备煤管控
    private String AnSteelCDQTrackImplv3 = "AnSteelCDQTrackImplv3"; //焦化干熄焦产蒸汽模型
    private String AnSteelChemProSteamTrack = "AnSteelChemProSteamTrack"; //焦化化产蒸汽消耗模型
    @Autowired
    private MdkApi mdkApi;
@@ -36,17 +39,29 @@
    public void run(String params) {
        logger.info("runDayScheduleModuleTask定时任务正在执行,参数为:{}", params);
        try {
            String[] split = params.split(",");
            String code;
            String day = "0";
            if (split.length > 1) {
                code = split[0];
                day = split[1];
            }else {
                code = split[0];
            }
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.MINUTE,0);
            calendar.set(Calendar.HOUR_OF_DAY,0);
            calendar.add(Calendar.DAY_OF_YEAR,Integer.parseInt(day));
            MdkScheduleReqDTO dto = new MdkScheduleReqDTO();
            dto.setScheduleTime(calendar.getTime());
            dto.setScheduleCode(params);
            dto.setScheduleCode(code);
            MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto);
            logger.info(params + "调度方案执行完成," + mdkScheduleRespDTO);
            logger.info(code + "调度方案执行完成," + mdkScheduleRespDTO);
            logger.info("调度方案结果开始下发");
            if (mdkApi.scheduleModelOut(mdkScheduleRespDTO)) {
                logger.info("调度方案结果下发成功");
@@ -55,26 +70,68 @@
            }
            //焦化备煤建议保存
            if (AnStellCOAL.equals(params)) {
            if (AnStellCOAL.equals(code)) {
                Object equipOperationInfo =  mdkScheduleRespDTO.getResult().get("EquipOperationInfo");
                if(equipOperationInfo != null && StringUtils.isNotBlank(equipOperationInfo.toString())) {
                    JSONArray jsonArray = JSON.parseArray(equipOperationInfo.toString());
                    if (jsonArray.size() > 0) {
                        for (Object suggest : jsonArray) {
                            ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO();
                            suggestDto.setTitle("焦化备煤建议");
                            suggestDto.setContent(suggest.toString());
                            suggestDto.setScheduleObj("COAL");
                            suggestDto.setScheduleTime(dto.getScheduleTime());
                            suggestDto.setCreateTime(calendar.getTime());
                            mcsApi.createScheduleSuggest(suggestDto);
                        }
                    }
                    ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO();
                    suggestDto.setTitle("焦化备煤建议");
                    suggestDto.setContent(equipOperationInfo.toString());
                    suggestDto.setScheduleObj("COAL");
                    suggestDto.setScheduleTime(dto.getScheduleTime());
                    suggestDto.setCreateTime(new Date());
                    mcsApi.createScheduleSuggest(suggestDto);
                }
            }
            //干熄焦产蒸汽 建议保存
            if (AnSteelCDQTrackImplv3.equals(code)) {
                Object finalResultStr =  mdkScheduleRespDTO.getResult().get("finalResultStr");
                if(finalResultStr != null && StringUtils.isNotBlank(finalResultStr.toString())) {
                    ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO();
                    suggestDto.setTitle("干熄焦产蒸汽建议");
                    suggestDto.setContent(finalResultStr.toString());
                    suggestDto.setScheduleObj("GXJCZQ");
                    suggestDto.setScheduleTime(dto.getScheduleTime());
                    suggestDto.setCreateTime(new Date());
                    mcsApi.createScheduleSuggest(suggestDto);
                }
                Object resultList =  mdkScheduleRespDTO.getResult().get("resultList");
                if(resultList != null && StringUtils.isNotBlank(resultList.toString())) {
                    ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO();
                    suggestDto.setTitle("干熄焦产蒸汽异常溯源");
                    suggestDto.setContent(resultList.toString());
                    suggestDto.setScheduleObj("GXJCZQ_YCSY");
                    suggestDto.setScheduleTime(dto.getScheduleTime());
                    suggestDto.setCreateTime(new Date());
                    mcsApi.createScheduleSuggest(suggestDto);
                }
            }
            //化产蒸汽消耗 建议保存
            if (AnSteelChemProSteamTrack.equals(code)) {
                Object finalResultStr =  mdkScheduleRespDTO.getResult().get("finalResultStr");
                if(finalResultStr != null && StringUtils.isNotBlank(finalResultStr.toString())) {
                    ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO();
                    suggestDto.setTitle("化产蒸汽消耗建议");
                    suggestDto.setContent(finalResultStr.toString());
                    suggestDto.setScheduleObj("HCZQXH");
                    suggestDto.setScheduleTime(dto.getScheduleTime());
                    suggestDto.setCreateTime(new Date());
                    mcsApi.createScheduleSuggest(suggestDto);
                }
                Object resultList =  mdkScheduleRespDTO.getResult().get("resultList");
                if(resultList != null && StringUtils.isNotBlank(resultList.toString())) {
                    ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO();
                    suggestDto.setTitle("化产蒸汽消耗异常溯源");
                    suggestDto.setContent(resultList.toString());
                    suggestDto.setScheduleObj("HCZQXH_YCSY");
                    suggestDto.setScheduleTime(dto.getScheduleTime());
                    suggestDto.setCreateTime(new Date());
                    mcsApi.createScheduleSuggest(suggestDto);
                }
            }
        } catch (Exception ex) {
            logger.error("runDayScheduleModuleTask运行异常");
            ex.printStackTrace();
            logger.error("runDayScheduleModuleTask运行异常",ex);
        }
        logger.info("runDayScheduleModuleTask运行完成");
    }
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java
@@ -1,5 +1,6 @@
package com.iailab.module.ansteel.job.task;
import com.iailab.module.ansteel.page.service.PageParamService;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.data.api.point.dto.ApiPointValueDTO;
import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
@@ -46,7 +47,8 @@
    @Autowired
    private McsApi mcsApi;
    private final static double LIM = -20d;
    @Autowired
    private PageParamService pageParamService;
    private final static String POINT_NO = "C0000201107";
@@ -54,11 +56,17 @@
    public void run(String params) {
        logger.info("RunOnPowerOptimTask定时任务正在执行,参数为:{}", params);
        try {
            // 查询配置参数
            // 触发频率
            Integer cfpl = Integer.parseInt(pageParamService.getValue(""));
            // 望铁关口触发边界
            Double wtbj = Double.parseDouble(pageParamService.getValue(""));
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.SECOND, 0);
            Date endTime = calendar.getTime();
            calendar.add(Calendar.MINUTE, -5);
            calendar.add(Calendar.MINUTE, cfpl * -1);
            Date startTime = calendar.getTime();
            ApiPointValueQueryDTO pointValueQueryDTO = new ApiPointValueQueryDTO();
@@ -71,7 +79,7 @@
                flag = false;
            }
            for (ApiPointValueDTO apiPointValueDTO : valueList) {
                if (apiPointValueDTO.getV() < LIM) {
                if (apiPointValueDTO.getV() < wtbj) {
                    flag = false;
                    break;
                }
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunScheduleModuleTask.java
@@ -250,8 +250,7 @@
            }
        } catch (Exception ex) {
            logger.error("runScheduleModuleTask运行异常");
            ex.printStackTrace();
            logger.error("runScheduleModuleTask运行异常",ex);
        }
        logger.info("runScheduleModuleTask运行完成");
    }
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/SyncEmsTask.java
@@ -3,9 +3,6 @@
import com.iailab.module.ansteel.ems.entity.ByqlzAdsEntity;
import com.iailab.module.ansteel.ems.service.ByqlzAdsService;
import com.iailab.module.ansteel.sync.service.SyncLogService;
import com.iailab.module.model.api.mdk.MdkApi;
import com.iailab.module.model.api.mdk.dto.MdkScheduleReqDTO;
import com.iailab.module.model.api.mdk.dto.MdkScheduleRespDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,9 +11,9 @@
import java.sql.*;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
 * 同步ems.byqlz_ads_wh_cl_jh01_byq表定时任务
ansteel-biz/src/main/java/com/iailab/module/ansteel/page/service/PageParamService.java
@@ -1,6 +1,5 @@
package com.iailab.module.ansteel.page.service;
import com.iailab.module.ansteel.page.entity.PageParamEntity;
import com.iailab.module.ansteel.page.vo.PageParamRespVO;
import com.iailab.module.ansteel.page.vo.PageParamValueReqVO;
@@ -13,6 +12,8 @@
 */
public interface PageParamService {
    String getValue(String paramCode);
    List<PageParamRespVO> list(String paramType);
    void updateValue(PageParamValueReqVO reqVO);
ansteel-biz/src/main/java/com/iailab/module/ansteel/page/service/impl/PageParamServiceImpl.java
@@ -29,6 +29,15 @@
    private PageParamDao pageParamDao;
    @Override
    public String getValue(String paramCode) {
        PageParamEntity entity = pageParamDao.selectOne(new QueryWrapper<PageParamEntity>().eq("param_code", paramCode));
        if (entity == null) {
            return null;
        }
        return entity.getParamValue();
    }
    @Override
    public List<PageParamRespVO> list(String paramType) {
        if (StringUtils.isBlank(paramType)) {
            return new ArrayList<>();
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/dao/PlantChartConfDao.java
对比新文件
@@ -0,0 +1,14 @@
package com.iailab.module.ansteel.plant.dao;
import com.iailab.framework.common.dao.BaseDao;
import com.iailab.module.ansteel.plant.entity.PlantChartConfEntity;
import org.apache.ibatis.annotations.Mapper;
/**
 * @description:
 * @author: lirm
 * @date: 2025/6/20 13:59
 **/
@Mapper
public interface PlantChartConfDao extends BaseDao<PlantChartConfEntity> {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/entity/PlantChartConfEntity.java
对比新文件
@@ -0,0 +1,42 @@
package com.iailab.module.ansteel.plant.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * @description:
 * @author: lirm
 * @date: 2025/6/20 13:59
 **/
@Data
@TableName("t_plant_chart_conf")
public class PlantChartConfEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    private String indType;
    private String indCode;
    private String indName;
    private String indAvg;
    private String indTheory;
    private String indOptimal;
    private String indReal;
    private String indPower;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/PlantChartConfService.java
对比新文件
@@ -0,0 +1,15 @@
package com.iailab.module.ansteel.plant.service;
import com.iailab.module.ansteel.plant.vo.PlantChartDataVO;
import java.util.Map;
/**
 * @description:
 * @author: lirm
 * @date: 2025/6/20 13:59
 **/
public interface PlantChartConfService {
    PlantChartDataVO getPlantChartData(Map tMap);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/impl/PlantChartConfServiceImpl.java
对比新文件
@@ -0,0 +1,131 @@
package com.iailab.module.ansteel.plant.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.module.ansteel.plant.dao.PlantChartConfDao;
import com.iailab.module.ansteel.plant.entity.PlantChartConfEntity;
import com.iailab.module.ansteel.plant.service.PlantChartConfService;
import com.iailab.module.ansteel.plant.vo.PlantChartDataVO;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.data.api.point.dto.ApiPointsValueQueryDTO;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * @description:
 * @author: lirm
 * @date: 2025/6/20 13:59
 **/
@Slf4j
@Service
public class PlantChartConfServiceImpl implements PlantChartConfService {
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Resource
    private PlantChartConfDao plantChartConfDao;
    @Resource
    private DataPointApi dataPointApi;
    private String timeFormat = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
    @Override
    public PlantChartDataVO getPlantChartData(Map tMap) {
        int granularity = 60;
        PlantChartDataVO result = new PlantChartDataVO();
        if (ObjectUtils.isEmpty(tMap.get("indType")) || ObjectUtils.isEmpty(tMap.get("indCode"))) {
            logger.info("输入参数为空");
            return result;
        }
        QueryWrapper<PlantChartConfEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("ind_type", tMap.get("indType"));
        queryWrapper.eq("ind_code", tMap.get("indCode"));
        List<PlantChartConfEntity> plantChartConfList = plantChartConfDao.selectList(queryWrapper);
        if (CollectionUtils.isEmpty(plantChartConfList)) {
            log.info("plantChartConfList is null");
            return result;
        }
        if("year".equals(tMap.get("indType"))){
            granularity = 60*1440;
        }
        Date[] timeArray = calResultTime(tMap.get("indType").toString());
        Date startTime = timeArray[0];
        Date endTime = timeArray[1];
        List<String> categories = DateUtils.getTimeScale(startTime, endTime, granularity, timeFormat);
        PlantChartConfEntity plantChartConfEntity = plantChartConfList.get(0);
        result.setIndType(tMap.get("indType").toString());
        result.setIndCode(plantChartConfEntity.getIndCode());
        result.setIndName(plantChartConfEntity.getIndName());
        result.setStartTime(startTime);
        result.setEndTime(endTime);
        result.setCategories(categories);
        // 筛选DATAPOINT一次性查询出全部
        List<String> pointNos = Stream.of(plantChartConfEntity.getIndAvg(), plantChartConfEntity.getIndTheory(), plantChartConfEntity.getIndOptimal(), plantChartConfEntity.getIndReal(), plantChartConfEntity.getIndPower()).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(pointNos)) {
            ApiPointsValueQueryDTO queryDTO = new ApiPointsValueQueryDTO();
            queryDTO.setPointNos(pointNos);
            Map<String, List<Map<String, Object>>> pointsHisValues = dataPointApi.queryPointsHistoryValue(queryDTO);
            if (CollectionUtils.isEmpty(pointsHisValues)) {
                log.info("pointsHisValues is null");
                return result;
            }
            result.setIndAvgHisList(pointsHisValues.get(plantChartConfEntity.getIndAvg()));
            result.setIndTheoryHisList(pointsHisValues.get(plantChartConfEntity.getIndTheory()));
            result.setIndOptimalHisList(pointsHisValues.get(plantChartConfEntity.getIndOptimal()));
            result.setIndRealHisList(pointsHisValues.get(plantChartConfEntity.getIndReal()));
            result.setIndPowerHisList(pointsHisValues.get(plantChartConfEntity.getIndPower()));
        }
        return result;
    }
    private Date[] calResultTime(String indType) {
        Date[] result = new Date[2];
        Date startTime = null;
        Date endTime = null;
        if("day".equals(indType)) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.add(Calendar.HOUR_OF_DAY, -8);
            startTime = calendar.getTime();
            calendar = Calendar.getInstance();
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.SECOND, 0);
            endTime = calendar.getTime();
        }else if("year".equals(indType)) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            startTime = calendar.getTime();
            calendar = Calendar.getInstance();
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            endTime = calendar.getTime();
        }
        result[0] = startTime;
        result[1] = endTime;
        return result;
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/vo/PlantChartDataVO.java
对比新文件
@@ -0,0 +1,44 @@
package com.iailab.module.ansteel.plant.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @description:
 * @author: lirm
 * @date: 2025/6/23
 **/
@Data
public class PlantChartDataVO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String indType;
    private String indCode;
    private String indName;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
    List<String> categories;
    private List<Map<String, Object>> indAvgHisList;
    private List<Map<String, Object>> indTheoryHisList;
    private List<Map<String, Object>> indOptimalHisList;
    private List<Map<String, Object>> indRealHisList;
    private List<Map<String, Object>> indPowerHisList;
}
doc/鞍钢数据接口文档_master.doc
Binary files differ