From a01eec9f761ffcc11d42da0a82595e720427dd68 Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期二, 24 六月 2025 23:15:52 +0800
Subject: [PATCH] 望铁关口触发边界

---
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java |  158 ++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 109 insertions(+), 49 deletions(-)

diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java
index 448b5aa..a1acee7 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java
+++ b/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:

--
Gitblit v1.9.3