鞍钢鲅鱼圈能源管控系统后端代码
潘志宝
4 天以前 a01eec9f761ffcc11d42da0a82595e720427dd68
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,32 +61,124 @@
    @Operation(summary = "负荷移植-负荷移植建议与方案")
    public CommonResult<PowerTransferRespVO> scheduleEleLoad(@RequestBody PowerTransferReqVO reqVO) {
        log.info("异常工况下的负荷移植");
        reqVO.setLimit(new BigDecimal(170000));
        if (reqVO.getTingjiZhong() == null) {
            reqVO.setTingjiZhong(0);
        }
        if (reqVO.getTingjiHou()== null) {
            reqVO.setTingjiHou(0);
        }
        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:
                    // 产线检修
@@ -89,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();
@@ -105,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("zhongabnAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("中板工序", data.get("zhongabnAdvice")));
                    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:
@@ -171,7 +241,8 @@
    @PostMapping("/predict-data/tn-value")
    @Operation(summary = "获取T+N预测数据")
    public CommonResult<List<MdkPredictDataDTO>> getPredictTnValue(PredictTnValueReqVO reqVO) {
    public CommonResult<List<MdkPredictDataDTO>> getPredictTnValue(@RequestBody PredictTnValueReqVO reqVO) {
        log.info("PredictTnValueReqVO:"+reqVO);
        List<MdkPredictDataDTO> list = mcsApi.getPredictTnValue(reqVO);
        return success(list);
    }