From 13ec40d641f489b0e30e198326737de2d6610ec8 Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期二, 24 六月 2025 15:13:10 +0800
Subject: [PATCH] 负荷移植建议与方案 修改

---
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java |    3 -
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java |   88 ++++++++++++++++++++++++++++++++++++++++---
 ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java       |    3 +
 ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java         |    1 
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferDetRespVO.java        |    3 +
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java           |    6 +++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferReqVO.java            |    7 +++
 7 files changed, 101 insertions(+), 10 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..d47bdd4 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);
         }
@@ -66,6 +71,7 @@
             reqVO.setTingjiRezha(0);
         }
 
+        MdkScheduleReqDTO fhyzDto = new MdkScheduleReqDTO();
         PowerTransferRespVO result = new PowerTransferRespVO();
         List<PowerTransferDetRespVO> adviceList = new ArrayList<>();
         try {
@@ -73,24 +79,92 @@
             Calendar calendar = Calendar.getInstance();
             calendar.set(Calendar.SECOND,0);
             calendar.set(Calendar.MILLISECOND,0);
-            MdkScheduleReqDTO dto = new MdkScheduleReqDTO();
-            dto.setScheduleTime(calendar.getTime());
+
             String nowH = DateUtils.format(calendar.getTime(), "hh:mm");
             switch (TransferTypeEnum.getEumByCode(reqVO.getType())) {
                 case XF:
+                    // 0 建议编码
+                    List<ChartParamDTO> chartParamList = mcsApi.getChartParamList(com.iailab.module.ansteel.common.constant.CommonConstant.FHYZ_ADVICE_CODE);
+                    Map<String, Integer> fhyzAdviceCodeMap = new HashMap<>();
+                    List<String> fhyzAdviceCodeList = new ArrayList<>();
+                    if (chartParamList != null) {
+                        for (ChartParamDTO chartParamDTO : chartParamList) {
+                            fhyzAdviceCodeMap.put(chartParamDTO.getParamCode(), Integer.parseInt(chartParamDTO.getParamValue()));
+                            fhyzAdviceCodeList.add(chartParamDTO.getParamCode());
+                        }
+                    }
+
+                    // 1 日平衡
+                    /*日平衡动态参数
+                    zhiling_params  [休风高炉,休风时长]
+                    jiaohua_params  [是否减焦化BFG,下限]
+                    load_change_state   [热轧,厚板,中板,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(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 < loadChangeState.size(); i++) {
+                        loadChangeState.add(reqVO.getAdviceCodeList().contains(loadChangeArr[i]) ? 1 : 0);
+                    }
+                    rphSettings.put("load_change_state", 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(fhyzAdviceCodeMap.get(adviceCode));
+                        }
+                    }
+                    dynamicSettings.put("choice_params", JSONArray.toJSONString(choiceParams));
+                    fhyzDto.setDynamicSettings(dynamicSettings);
                     break;
                 case JX:
                     // 产线检修
@@ -99,8 +173,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();
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
index 1215dfa..5211007 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
+++ b/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");
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferDetRespVO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferDetRespVO.java
index cd5c38d..d991ee9 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferDetRespVO.java
+++ b/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;
 
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferReqVO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferReqVO.java
index 08da801..0513755 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferReqVO.java
+++ b/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
@@ -34,6 +35,9 @@
     @Schema(description = "焦化消耗高炉煤气下限(大于0)")
     private BigDecimal limit;
 
+    @Schema(description = "是否减焦化BFG(0:否,1:是)")
+    private Integer isReduceCog;
+
     @Schema(description = "中板停机时长")
     private Integer tingjiZhong;
 
@@ -42,4 +46,7 @@
 
     @Schema(description = "热轧停机时长")
     private Integer tingjiRezha;
+
+    @Schema(description = "先择的建议编码列表")
+    private List<String> adviceCodeList;
 }
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java
index c397f56..e7995ba 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java
@@ -24,9 +24,15 @@
     @Schema(description = "煤气送管网缺口")
     private BigDecimal bfgGap;
 
+    @Schema(description = "煤气缺口")
+    private BigDecimal gasGap;
+
     @Schema(description = "需量缺口")
     private Object demand;
 
+    @Schema(description = "发电")
+    private String fadian;
+
     @Schema(description = "焦化减高炉煤气-时间")
     private Integer cogGapTime;
 
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java
index 20cf818..662f1ab 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java
@@ -86,4 +86,7 @@
 
     //电容器编码
     String POWER_CODE = "POWER_CODE";
+
+    //负荷移植建议编码
+    String FHYZ_ADVICE_CODE = "FHYZ_ADVICE_CODE";
 }
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java
index 1391c11..b06e18b 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java
@@ -46,6 +46,7 @@
     @Autowired
     private McsApi mcsApi;
 
+    // 望铁关口触发边界
     private final static double LIM = -20d;
 
     private final static String POINT_NO = "C0000201107";

--
Gitblit v1.9.3