From c05d056f5b9c59db46fe1577136cd18f7cd94551 Mon Sep 17 00:00:00 2001
From: liriming <1343021927@qq.com>
Date: 星期一, 31 三月 2025 15:27:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java  |    5 
 ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/DecimalUtil.java             |   52 ++++++++++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java |   86 +++++++++++++++++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/ItemVO.java                        |    7 +
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferDetRespVO.java        |   30 ++++++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java           |   38 +++++++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferReqVO.java            |   30 ++++++
 7 files changed, 245 insertions(+), 3 deletions(-)

diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java
index ab1b968..169a5b3 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java
@@ -7,11 +7,11 @@
 import com.iailab.module.ansteel.api.service.DataApi;
 import com.iailab.module.model.api.mcs.dto.PreDataSingleChartReqVO;
 import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import static com.iailab.framework.common.pojo.CommonResult.success;
 
@@ -19,6 +19,7 @@
  * @author: lirm
  * @date: 2025/03/17
  **/
+@Slf4j
 @RestController
 @RequestMapping("/ansteel/api/mcs")
 public class DataController {
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
new file mode 100644
index 0000000..1503e7a
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java
@@ -0,0 +1,86 @@
+package com.iailab.module.ansteel.api.controller.admin;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.iailab.framework.common.exception.enums.GlobalErrorCodeConstants;
+import com.iailab.framework.common.pojo.CommonResult;
+import com.iailab.module.ansteel.api.vo.PowerTransferDetRespVO;
+import com.iailab.module.ansteel.api.vo.PowerTransferReqVO;
+import com.iailab.module.ansteel.api.vo.PowerTransferRespVO;
+import com.iailab.module.ansteel.common.utils.DecimalUtil;
+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 io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.*;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年03月31日
+ */
+@Slf4j
+@RestController
+@RequestMapping("/ansteel/api/model")
+public class ModelController {
+
+    @Autowired
+    private MdkApi mdkApi;
+
+    @PostMapping("/power-transfer")
+    @Operation(summary = "异常工况下的负荷移植")
+    public CommonResult<PowerTransferRespVO> scheduleEleLoad(@RequestBody PowerTransferReqVO reqVO) {
+        log.info("异常工况下的负荷移植");
+        PowerTransferRespVO result = new PowerTransferRespVO();
+        List<PowerTransferDetRespVO> adviceList = 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());
+            dto.setScheduleCode("AnSteelpowertransfer");
+            Map<String, String> dynamicSettings = new HashMap<>();
+            Integer[] xiufengOrder = {reqVO.getBfg(),
+                    reqVO.getStart(),
+                    reqVO.getMins()};
+            dynamicSettings.put("xiufeng_order", JSONArray.toJSONString(xiufengOrder));
+            dynamicSettings.put("jiaohua_BFG_down", reqVO.getLimit().toString());
+            dto.setDynamicSettings(dynamicSettings);
+
+            log.info("调度方案开始执行," + JSONObject.toJSONString(dto));
+            MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto);
+            log.info("调度方案执行完成," + mdkScheduleRespDTO);
+
+            Map<String, Object> data = mdkScheduleRespDTO.getResult();
+            result.setBestTotalPower(DecimalUtil.toBigDecimal(data.get("best_total_power")));
+            result.setBfgAdvice(DecimalUtil.toBigDecimal(data.get("BFGAdvice")));
+            result.setDemandAdvice(DecimalUtil.toBigDecimal(data.get("DemandAdvice")));
+            result.setJiaohuaAdviceTime(DecimalUtil.toBigDecimal(data.get("jiaohuaAdvice"), 0).intValue());
+            result.setJiaohuaAdviceAmount(DecimalUtil.toBigDecimal(data.get("jiaohuaAdvice"), 1).intValue());
+
+            adviceList.add(DecimalUtil.toPowerTransferDetRespVO("中板工序", data.get("zhongabnAdvice")));
+            adviceList.add(DecimalUtil.toPowerTransferDetRespVO("厚板工序", data.get("houbanAdvice")));
+            adviceList.add(DecimalUtil.toPowerTransferDetRespVO("热轧工序", data.get("rezhaAdvice")));
+            adviceList.add(DecimalUtil.toPowerTransferDetRespVO("白灰工序", data.get("baihuiAdvice")));
+            adviceList.add(DecimalUtil.toPowerTransferDetRespVO("3#制氧机", data.get("zhiyangAdvice")));
+            adviceList.add(DecimalUtil.toPowerTransferDetRespVO("1#LF炉", data.get("1LFAdvice")));
+            adviceList.add(DecimalUtil.toPowerTransferDetRespVO("2#LF炉", data.get("2LFAdvice")));
+            adviceList.add(DecimalUtil.toPowerTransferDetRespVO("B系列烧结", data.get("shaojieAdvice")));
+            adviceList.add(DecimalUtil.toPowerTransferDetRespVO("CCPP", data.get("CCPPAdvice")));
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return CommonResult.error(GlobalErrorCodeConstants.UNKNOWN.getCode(), ex.getMessage());
+        }
+        return CommonResult.success(result);
+    }
+}
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/ItemVO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/ItemVO.java
index 4362d09..a24c120 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/ItemVO.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/ItemVO.java
@@ -1,7 +1,9 @@
 package com.iailab.module.ansteel.api.vo;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -9,8 +11,11 @@
  * @Description
  * @createTime 2024年09月01日
  */
+@Schema(description="预测项查询")
 @Data
-public class ItemVO {
+public class ItemVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     private String id;
     private String itemNo;
     private String itemName;
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
new file mode 100644
index 0000000..cd5c38d
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferDetRespVO.java
@@ -0,0 +1,30 @@
+package com.iailab.module.ansteel.api.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年03月27日
+ */
+@Schema(description="异常工况下的负荷移植")
+@Data
+public class PowerTransferDetRespVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "标题")
+    private String title;
+
+    @Schema(description = "开始")
+    private Integer start;
+
+    @Schema(description = "时长")
+    private Integer mins;
+
+    @Schema(description = "负荷变化")
+    private BigDecimal amount;
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..62b3546
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferReqVO.java
@@ -0,0 +1,30 @@
+package com.iailab.module.ansteel.api.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年03月26日
+ */
+@Schema(description="休风指令")
+@Data
+public class PowerTransferReqVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "休风时间开始(901)")
+    private Integer start;
+
+    @Schema(description = "休风时长")
+    private Integer mins;
+
+    @Schema(description = "休风高炉(1/2)")
+    private Integer bfg;
+
+    @Schema(description = "上限")
+    private BigDecimal limit;
+}
\ 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
new file mode 100644
index 0000000..f59fa27
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java
@@ -0,0 +1,38 @@
+package com.iailab.module.ansteel.api.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年03月27日
+ */
+@Schema(description="异常工况下的负荷移植")
+@Data
+public class PowerTransferRespVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "负荷调整总量")
+    private BigDecimal bestTotalPower;
+
+    @Schema(description = "煤气送管网缺口")
+    private BigDecimal bfgAdvice;
+
+    @Schema(description = "需量缺口")
+    private BigDecimal demandAdvice;
+
+    @Schema(description = "焦化减高炉煤气-时间")
+    private Integer jiaohuaAdviceTime;
+
+    @Schema(description = "焦化减高炉煤气-数量")
+    private Integer jiaohuaAdviceAmount;
+
+    @Schema(description = "焦化减高炉煤气-数量")
+    private List<PowerTransferDetRespVO> adviceList;
+}
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/DecimalUtil.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/DecimalUtil.java
new file mode 100644
index 0000000..1d22f81
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/DecimalUtil.java
@@ -0,0 +1,52 @@
+package com.iailab.module.ansteel.common.utils;
+
+import com.alibaba.fastjson.JSONArray;
+import com.iailab.module.ansteel.api.vo.PowerTransferDetRespVO;
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigDecimal;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年03月28日
+ */
+public class DecimalUtil {
+
+    public static BigDecimal toBigDecimal(Object o) {
+        if (o == null) {
+            return null;
+        }
+        if (StringUtils.isBlank(o.toString())) {
+            return null;
+        }
+        return new BigDecimal(o.toString());
+    }
+
+    public static BigDecimal toBigDecimal(Object o, int index) {
+        if (o == null) {
+            return null;
+        }
+        if (StringUtils.isBlank(o.toString())) {
+            return null;
+        }
+        JSONArray array = JSONArray.parseArray(o.toString());
+        if (array.size() <= index) {
+            return null;
+        }
+        Object obj = array.get(index);
+        return DecimalUtil.toBigDecimal(obj);
+    }
+
+    public static PowerTransferDetRespVO toPowerTransferDetRespVO(String title, Object o) {
+        PowerTransferDetRespVO respVO = new PowerTransferDetRespVO();
+        if (o == null) {
+            return null;
+        }
+        respVO.setTitle(title);
+        respVO.setStart(toBigDecimal(o, 0).intValue());
+        respVO.setMins(toBigDecimal(o, 1).intValue());
+        respVO.setAmount(toBigDecimal(o, 2));
+        return respVO;
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3