鞍钢鲅鱼圈能源管控系统后端代码
潘志宝
2025-03-28 09409f08aa0368ac2cdb823746ce38f30afaaa39
异常工况下的负荷移植
已添加4个文件
已修改2个文件
222 ■■■■■ 文件已修改
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/McsController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/ItemVO.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferDetRespVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferReqVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/DecimalUtil.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/McsController.java
@@ -1,16 +1,26 @@
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.common.utils.DecimalUtil;
import com.iailab.module.ansteel.api.vo.PowerTransferRespVO;
import com.iailab.module.api.mcs.AnSteelApi;
import com.iailab.module.api.mcs.dto.PowerRunStateDTO;
import com.iailab.module.api.mcs.dto.PreDataChartRespVO;
import com.iailab.module.model.api.mcs.dto.PreDataSingleChartReqVO;
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.*;
import java.util.List;
import java.util.Map;
import java.util.*;
import static com.iailab.framework.common.pojo.CommonResult.success;
@@ -18,12 +28,16 @@
 * @author: lirm
 * @date: 2025/03/17
 **/
@Slf4j
@RestController
@RequestMapping("/ansteel/api/mcs")
public class McsController {
    @Autowired
    private AnSteelApi anSteelApi;
    @Autowired
    private MdkApi mdkApi;
    @GetMapping("/power-run-state/list")
    @Operation(summary = "发电厂机组运行情况")
@@ -39,4 +53,51 @@
        return CommonResult.success(respVO);
    }
    @PostMapping("/schedule/power-transfer")
    @Operation(summary = "异常工况下的负荷移植")
    public CommonResult<PowerTransferRespVO> scheduleEleLoad(@RequestBody PowerTransferReqVO reqVO) {
        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);
            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);
    }
}
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;
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;
}
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;
}
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;
}
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;
    }
}