3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | dengzedong | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | dengzedong | ![]() |
3 天以前 | dengzedong | ![]() |
3 天以前 | dengzedong | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | liriming | ![]() |
3 天以前 | liriming | ![]() |
3 天以前 | dengzedong | ![]() |
3 天以前 | dengzedong | ![]() |
3 天以前 | dengzedong | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
3 天以前 | 潘志宝 | ![]() |
4 天以前 | liriming | ![]() |
4 天以前 | liriming | ![]() |
4 天以前 | liriming | ![]() |
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/DataController.java
@@ -1,5 +1,8 @@ package com.iailab.module.ansteel.api.controller.admin; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.iailab.framework.common.pojo.CommonResult; import com.iailab.module.ansteel.api.dto.*; import com.iailab.module.ansteel.api.service.DataService; @@ -10,6 +13,7 @@ import com.iailab.module.model.api.mcs.dto.StAlarmAndSuggestReqVO; import io.swagger.v3.oas.annotations.Operation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; @@ -77,6 +81,27 @@ return success(dataService.getHistoryValue(params)); } @PostMapping("/datas/history-value") @Operation(summary = "多个指标/测点历史数据") public CommonResult<Map<String,List<Object[]>>> getDatasHistoryValue(@RequestBody Map<String, Object> params) { Map<String,List<Object[]>> result = new HashMap<>(); if (!params.containsKey("datas") || StringUtils.isBlank(params.get("datas").toString())) { return success(result); } JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(params.get("datas"))); for (Object data : jsonArray) { Map<String, Object> param = new HashMap<>(); JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(data)); param.put("dataType",jsonObject.get("dataType")); param.put("dataNo",jsonObject.get("dataNo")); param.put("startTime",params.get("startTime")); param.put("endTime",params.get("endTime")); List<Object[]> historyValue = dataService.getHistoryValue(param); result.put(jsonObject.get("dataNo").toString(),historyValue); } return success(result); } @PostMapping("/write-point-value") @Operation(summary = "写入测点值") public CommonResult writePointRealValue(@RequestBody ApiPointValueWriteDTO writeDTO) { 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: ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PlantController.java
@@ -1,19 +1,19 @@ package com.iailab.module.ansteel.api.controller.admin; import com.iailab.framework.common.pojo.CommonResult; import com.iailab.module.ansteel.plant.service.PlantChartConfService; import com.iailab.module.ansteel.plant.service.PlantConfService; import com.iailab.module.ansteel.plant.service.PlantIndexConfService; import com.iailab.module.ansteel.plant.vo.PlantChartDataVO; import com.iailab.module.ansteel.plant.vo.PlantDataVO; import com.iailab.module.ansteel.plant.vo.PlantIndexDataVO; 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.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; import static com.iailab.framework.common.pojo.CommonResult.success; @@ -33,6 +33,9 @@ @Autowired private PlantIndexConfService plantIndexConfService; @Autowired private PlantChartConfService plantChartConfService; @GetMapping("/data") @Operation(summary = "135机组数据") public CommonResult<List<PlantDataVO>> getPlantData(@RequestParam("businessType") String businessType) { @@ -46,4 +49,11 @@ List<PlantIndexDataVO> result = plantIndexConfService.getPlantIndexData(businessType); return success(result); } @PostMapping("/chart-data") @Operation(summary = "135机组指标趋势数据") public CommonResult<PlantChartDataVO> getPlantChartData(@RequestBody Map tMap) { PlantChartDataVO result = plantChartConfService.getPlantChartData(tMap); return success(result); } } 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"); ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/DataServiceImpl.java
@@ -324,7 +324,7 @@ // 修正计划数据 LinkedHashMap<String, List<String[]>> predData = new LinkedHashMap<>(); for (int i = 0; i < reqVO.getPlanCodes().size(); i++) { predData.put(reqVO.getPlanCodes().get(i), getPrePlanData(reqVO.getPlanPreds().get(i), predictTime, endTime)); predData.put(reqVO.getPlanCodes().get(i), getPrePlanData(reqVO.getPlanPreds().get(i), startTime, endTime, predictTime)); } result.put("planData", planData); result.put("predData", predData); @@ -366,25 +366,61 @@ } //修正计划 public List<String[]> getPrePlanData(String charCode, Date startTime, Date endTime) { public List<String[]> getPrePlanData(String charCode, Date startTime, Date endTime, Date predictTime) { List<String[]> result = new ArrayList<>(); PreDataSingleChartReqVO queryDto = new PreDataSingleChartReqVO(); queryDto.setChartCode(charCode); queryDto.setStartTime(startTime); queryDto.setEndTime(endTime); PreDataSingleChartRespVO chartData = mcsApi.getPreDataSingleChart(queryDto); if (CollectionUtils.isEmpty(chartData.getDataView().getPreDataN())) { if (CollectionUtils.isEmpty(chartData.getDataView().getCurData())) { return result; } String lineType = chartData.getDataView().getLineType(); List<Object[]> preData = new ArrayList<>(); if ("1".equals(lineType)) { // 两部分组成,左侧T+L,右侧当前 if(!CollectionUtils.isEmpty(chartData.getDataView().getPreDataL())) { for (int i = 0; i < chartData.getDataView().getPreDataL().size(); i++) { Object[] dataItem = chartData.getDataView().getPreDataL().get(i); Date t = DateUtils.parse(dataItem[0].toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); if (t.getTime() <= predictTime.getTime()) { preData.add(dataItem); } } } if(!CollectionUtils.isEmpty(chartData.getDataView().getCurData())) { for (int i = 0; i < chartData.getDataView().getCurData().size(); i++) { Object[] dataItem = chartData.getDataView().getCurData().get(i); preData.add(dataItem); } } } else if ("2".equals(lineType)) { // 展示当前值 if(!CollectionUtils.isEmpty(chartData.getDataView().getCurData())) { for (int i = 0; i < chartData.getDataView().getCurData().size(); i++) { Object[] dataItem = chartData.getDataView().getCurData().get(i); preData.add(dataItem); } } } else { // 展示T+N if(!CollectionUtils.isEmpty(chartData.getDataView().getPreDataN())) { for (int i = 0; i < chartData.getDataView().getPreDataN().size(); i++) { Object[] dataItem = chartData.getDataView().getPreDataN().get(i); preData.add(dataItem); } } } double lastValue = 0; for (int i = 0; i < chartData.getDataView().getPreDataN().size(); i++) { Object[] dataItem = chartData.getDataView().getPreDataN().get(i); for (int i = 0; i < preData.size(); i++) { Object[] dataItem = preData.get(i); double cv = new BigDecimal(dataItem[1].toString()).doubleValue(); if (cv == 1 && cv != lastValue) { String[] sa = new String[3]; sa[0] = (String) dataItem[0]; sa[1] = getEndTime(chartData.getDataView().getPreDataN(), i); sa[1] = getEndTime(preData, i); sa[2] = "2"; result.add(sa); } @@ -393,11 +429,11 @@ return result; } private String getEndTime(List<Object[]> preDataN, int startIndex) { private String getEndTime(List<Object[]> preData, int startIndex) { String endTime = ""; double lastValue = 1; for (int i = startIndex; i < preDataN.size(); i++) { Object[] dataItem = preDataN.get(i); for (int i = startIndex; i < preData.size(); i++) { Object[] dataItem = preData.get(i); double cv = new BigDecimal(dataItem[1].toString()).doubleValue(); if (cv == 0 && cv != lastValue) { return (String) dataItem[0]; 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; 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 @@ -22,7 +23,7 @@ @Schema(description = "当前时间") private Integer now; @Schema(description = "休风开始时间") @Schema(description = "休风时间") private Integer start; @Schema(description = "休风时长") @@ -30,6 +31,9 @@ @Schema(description = "休风高炉(1/2)") private Integer bfg; @Schema(description = "是否减焦化BFG(0:否,1:是)") private Integer isReduceCog; @Schema(description = "焦化消耗高炉煤气下限(大于0)") private BigDecimal limit; @@ -42,4 +46,7 @@ @Schema(description = "热轧停机时长") private Integer tingjiRezha; @Schema(description = "先择的建议编码列表") private List<String> adviceCodeList; } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerTransferRespVO.java
@@ -4,7 +4,6 @@ import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.util.List; /** @@ -18,24 +17,18 @@ private static final long serialVersionUID = 1L; @Schema(description = "负荷调整总量") private BigDecimal bestTotalPower; @Schema(description = "煤气送管网缺口") private BigDecimal bfgGap; @Schema(description = "需量缺口") private Object demand; @Schema(description = "焦化减高炉煤气-时间") private Integer cogGapTime; @Schema(description = "煤气缺口") private Object gasGap; @Schema(description = "焦化减高炉煤气-数量") private Integer cogGapAmount; @Schema(description = "发电") private Object fadian; @Schema(description = "BFG剩余") private BigDecimal bfgShengyue; @Schema(description = "工序需量管控建议") private List<PowerTransferDetRespVO> demandAdviceList; @Schema(description = "建议列表") private List<PowerTransferDetRespVO> adviceList; @Schema(description = "工序煤气管控建议") private List<PowerTransferDetRespVO> gasAdviceList; } ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewDTO.java
@@ -85,6 +85,14 @@ */ private BigDecimal idleTime; /** * 运行时间 */ private BigDecimal runTime; /** * 作业率 */ private BigDecimal workRatio; /** * BFG消耗/总耗 */ private BigDecimal bfgC; ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewEntity.java
@@ -79,6 +79,14 @@ */ private BigDecimal idleTime; /** * 运行时间 */ private BigDecimal runTime; /** * 作业率 */ private BigDecimal workRatio; /** * BFG消耗/总耗 */ private BigDecimal bfgC; ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewServiceImpl.java
@@ -72,7 +72,7 @@ QueryWrapper<CokingOverviewEntity> queryWrapperMonth = new QueryWrapper<>(); queryWrapperMonth.eq("process_type", processType); queryWrapperMonth.between("clock", monthStartClock,clock); queryWrapperMonth.select("sub_process_type","ROUND(AVG(steam_p)*30, 2) as steam_p","ROUND(AVG(dj_steam_p)*30, 2) as dj_steam_p","ROUND(AVG(steam_c)*30, 2) as steam_c","ROUND(AVG(steam_only_c)*30, 2) as steam_only_c","ROUND(AVG(steam_v)*30, 2) as steam_v","ROUND(AVG(gas_p)*30, 2) as gas_p","ROUND(AVG(gas_c)*30, 2) as gas_c","ROUND(AVG(power_c)*30, 2) as power_c","ROUND(AVG(power_only_c)*30, 2) as power_only_c","ROUND(AVG(power_c_standard)*30, 2) as power_c_standard","ROUND(AVG(idle_time)*30, 0) as idle_time","ROUND(AVG(bfg_c)*30, 2) as bfg_c","ROUND(AVG(cog_p)*30, 2) as cog_p","ROUND(AVG(cog_c)*30, 2) as cog_c","ROUND(AVG(bfg_only_c)*30, 2) as bfg_only_c","ROUND(AVG(cog_only_c)*30, 2) as cog_only_c","ROUND(AVG(gxls)*30, 0) as gxls") queryWrapperMonth.select("sub_process_type","ROUND(AVG(steam_p)*30, 2) as steam_p","ROUND(AVG(dj_steam_p)*30, 2) as dj_steam_p","ROUND(AVG(steam_c)*30, 2) as steam_c","ROUND(AVG(steam_only_c)*30, 2) as steam_only_c","ROUND(AVG(steam_v)*30, 2) as steam_v","ROUND(AVG(gas_p)*30, 2) as gas_p","ROUND(AVG(gas_c)*30, 2) as gas_c","ROUND(AVG(power_c)*30, 2) as power_c","ROUND(AVG(power_only_c)*30, 2) as power_only_c","ROUND(AVG(power_c_standard)*30, 2) as power_c_standard","ROUND(AVG(idle_time)*30, 0) as idle_time","ROUND(AVG(bfg_c)*30, 2) as bfg_c","ROUND(AVG(cog_p)*30, 2) as cog_p","ROUND(AVG(cog_c)*30, 2) as cog_c","ROUND(AVG(bfg_only_c)*30, 2) as bfg_only_c","ROUND(AVG(cog_only_c)*30, 2) as cog_only_c","ROUND(AVG(gxls)*30, 0) as gxls","ROUND(AVG(run_time)*30, 0) as run_time","ROUND(AVG(work_ratio), 2) as work_ratio") .groupBy("sub_process_type"); List<CokingOverviewEntity> monthList = cokingOverviewDao.selectList(queryWrapperMonth); ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java
@@ -86,4 +86,10 @@ //电容器编码 String POWER_CODE = "POWER_CODE"; //负荷移植-工序需量管控 String FHYZ_DEMAND_ADVICE = "FHYZ_DEMAND_ADVICE"; //负荷移植-工序煤气管控 String FHYZ_GAS_ADVICE = "FHYZ_GAS_ADVICE"; } ansteel-biz/src/main/java/com/iailab/module/ansteel/common/enums/SubProcessTypeEnum.java
@@ -20,6 +20,8 @@ PSJ("PSJ", "破碎机"), JL_12("JL_12", "1#2#焦炉"), JL_34("JL_34", "3#4#焦炉"), TX_12("TX_12", "1#2#脱硝"), TX_34("TX_34", "3#4#脱硝"), GL("GL", "鼓冷"), LA("LA", "硫铵"), CB("CB", "粗苯"), ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunDayScheduleModuleTask.java
@@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** @@ -25,6 +26,8 @@ private Logger logger = LoggerFactory.getLogger(getClass()); private String AnStellCOAL = "AnStellCOAL"; //焦化备煤管控 private String AnSteelCDQTrackImplv3 = "AnSteelCDQTrackImplv3"; //焦化干熄焦产蒸汽模型 private String AnSteelChemProSteamTrack = "AnSteelChemProSteamTrack"; //焦化化产蒸汽消耗模型 @Autowired private MdkApi mdkApi; @@ -36,17 +39,29 @@ public void run(String params) { logger.info("runDayScheduleModuleTask定时任务正在执行,参数为:{}", params); try { String[] split = params.split(","); String code; String day = "0"; if (split.length > 1) { code = split[0]; day = split[1]; }else { code = split[0]; } Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.MINUTE,0); calendar.set(Calendar.HOUR_OF_DAY,0); calendar.add(Calendar.DAY_OF_YEAR,Integer.parseInt(day)); MdkScheduleReqDTO dto = new MdkScheduleReqDTO(); dto.setScheduleTime(calendar.getTime()); dto.setScheduleCode(params); dto.setScheduleCode(code); MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto); logger.info(params + "调度方案执行完成," + mdkScheduleRespDTO); logger.info(code + "调度方案执行完成," + mdkScheduleRespDTO); logger.info("调度方案结果开始下发"); if (mdkApi.scheduleModelOut(mdkScheduleRespDTO)) { logger.info("调度方案结果下发成功"); @@ -55,26 +70,68 @@ } //焦化备煤建议保存 if (AnStellCOAL.equals(params)) { if (AnStellCOAL.equals(code)) { Object equipOperationInfo = mdkScheduleRespDTO.getResult().get("EquipOperationInfo"); if(equipOperationInfo != null && StringUtils.isNotBlank(equipOperationInfo.toString())) { JSONArray jsonArray = JSON.parseArray(equipOperationInfo.toString()); if (jsonArray.size() > 0) { for (Object suggest : jsonArray) { ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO(); suggestDto.setTitle("焦化备煤建议"); suggestDto.setContent(suggest.toString()); suggestDto.setScheduleObj("COAL"); suggestDto.setScheduleTime(dto.getScheduleTime()); suggestDto.setCreateTime(calendar.getTime()); mcsApi.createScheduleSuggest(suggestDto); } } ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO(); suggestDto.setTitle("焦化备煤建议"); suggestDto.setContent(equipOperationInfo.toString()); suggestDto.setScheduleObj("COAL"); suggestDto.setScheduleTime(dto.getScheduleTime()); suggestDto.setCreateTime(new Date()); mcsApi.createScheduleSuggest(suggestDto); } } //干熄焦产蒸汽 建议保存 if (AnSteelCDQTrackImplv3.equals(code)) { Object finalResultStr = mdkScheduleRespDTO.getResult().get("finalResultStr"); if(finalResultStr != null && StringUtils.isNotBlank(finalResultStr.toString())) { ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO(); suggestDto.setTitle("干熄焦产蒸汽建议"); suggestDto.setContent(finalResultStr.toString()); suggestDto.setScheduleObj("GXJCZQ"); suggestDto.setScheduleTime(dto.getScheduleTime()); suggestDto.setCreateTime(new Date()); mcsApi.createScheduleSuggest(suggestDto); } Object resultList = mdkScheduleRespDTO.getResult().get("resultList"); if(resultList != null && StringUtils.isNotBlank(resultList.toString())) { ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO(); suggestDto.setTitle("干熄焦产蒸汽异常溯源"); suggestDto.setContent(resultList.toString()); suggestDto.setScheduleObj("GXJCZQ_YCSY"); suggestDto.setScheduleTime(dto.getScheduleTime()); suggestDto.setCreateTime(new Date()); mcsApi.createScheduleSuggest(suggestDto); } } //化产蒸汽消耗 建议保存 if (AnSteelChemProSteamTrack.equals(code)) { Object finalResultStr = mdkScheduleRespDTO.getResult().get("finalResultStr"); if(finalResultStr != null && StringUtils.isNotBlank(finalResultStr.toString())) { ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO(); suggestDto.setTitle("化产蒸汽消耗建议"); suggestDto.setContent(finalResultStr.toString()); suggestDto.setScheduleObj("HCZQXH"); suggestDto.setScheduleTime(dto.getScheduleTime()); suggestDto.setCreateTime(new Date()); mcsApi.createScheduleSuggest(suggestDto); } Object resultList = mdkScheduleRespDTO.getResult().get("resultList"); if(resultList != null && StringUtils.isNotBlank(resultList.toString())) { ScheduleSuggestRespDTO suggestDto = new ScheduleSuggestRespDTO(); suggestDto.setTitle("化产蒸汽消耗异常溯源"); suggestDto.setContent(resultList.toString()); suggestDto.setScheduleObj("HCZQXH_YCSY"); suggestDto.setScheduleTime(dto.getScheduleTime()); suggestDto.setCreateTime(new Date()); mcsApi.createScheduleSuggest(suggestDto); } } } catch (Exception ex) { logger.error("runDayScheduleModuleTask运行异常"); ex.printStackTrace(); logger.error("runDayScheduleModuleTask运行异常",ex); } logger.info("runDayScheduleModuleTask运行完成"); } ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java
@@ -1,5 +1,6 @@ package com.iailab.module.ansteel.job.task; import com.iailab.module.ansteel.page.service.PageParamService; import com.iailab.module.data.api.point.DataPointApi; import com.iailab.module.data.api.point.dto.ApiPointValueDTO; import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; @@ -46,7 +47,8 @@ @Autowired private McsApi mcsApi; private final static double LIM = -20d; @Autowired private PageParamService pageParamService; private final static String POINT_NO = "C0000201107"; @@ -54,11 +56,17 @@ public void run(String params) { logger.info("RunOnPowerOptimTask定时任务正在执行,参数为:{}", params); try { // 查询配置参数 // 触发频率 Integer cfpl = Integer.parseInt(pageParamService.getValue("")); // 望铁关口触发边界 Double wtbj = Double.parseDouble(pageParamService.getValue("")); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); Date endTime = calendar.getTime(); calendar.add(Calendar.MINUTE, -5); calendar.add(Calendar.MINUTE, cfpl * -1); Date startTime = calendar.getTime(); ApiPointValueQueryDTO pointValueQueryDTO = new ApiPointValueQueryDTO(); @@ -71,7 +79,7 @@ flag = false; } for (ApiPointValueDTO apiPointValueDTO : valueList) { if (apiPointValueDTO.getV() < LIM) { if (apiPointValueDTO.getV() < wtbj) { flag = false; break; } ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunScheduleModuleTask.java
@@ -250,8 +250,7 @@ } } catch (Exception ex) { logger.error("runScheduleModuleTask运行异常"); ex.printStackTrace(); logger.error("runScheduleModuleTask运行异常",ex); } logger.info("runScheduleModuleTask运行完成"); } ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/SyncEmsTask.java
@@ -3,9 +3,6 @@ import com.iailab.module.ansteel.ems.entity.ByqlzAdsEntity; import com.iailab.module.ansteel.ems.service.ByqlzAdsService; import com.iailab.module.ansteel.sync.service.SyncLogService; 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 org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -14,9 +11,9 @@ import java.sql.*; import java.text.SimpleDateFormat; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.Date; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * 同步ems.byqlz_ads_wh_cl_jh01_byq表定时任务 ansteel-biz/src/main/java/com/iailab/module/ansteel/page/service/PageParamService.java
@@ -1,6 +1,5 @@ package com.iailab.module.ansteel.page.service; import com.iailab.module.ansteel.page.entity.PageParamEntity; import com.iailab.module.ansteel.page.vo.PageParamRespVO; import com.iailab.module.ansteel.page.vo.PageParamValueReqVO; @@ -13,6 +12,8 @@ */ public interface PageParamService { String getValue(String paramCode); List<PageParamRespVO> list(String paramType); void updateValue(PageParamValueReqVO reqVO); ansteel-biz/src/main/java/com/iailab/module/ansteel/page/service/impl/PageParamServiceImpl.java
@@ -29,6 +29,15 @@ private PageParamDao pageParamDao; @Override public String getValue(String paramCode) { PageParamEntity entity = pageParamDao.selectOne(new QueryWrapper<PageParamEntity>().eq("param_code", paramCode)); if (entity == null) { return null; } return entity.getParamValue(); } @Override public List<PageParamRespVO> list(String paramType) { if (StringUtils.isBlank(paramType)) { return new ArrayList<>(); ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/dao/PlantChartConfDao.java
对比新文件 @@ -0,0 +1,14 @@ package com.iailab.module.ansteel.plant.dao; import com.iailab.framework.common.dao.BaseDao; import com.iailab.module.ansteel.plant.entity.PlantChartConfEntity; import org.apache.ibatis.annotations.Mapper; /** * @description: * @author: lirm * @date: 2025/6/20 13:59 **/ @Mapper public interface PlantChartConfDao extends BaseDao<PlantChartConfEntity> { } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/entity/PlantChartConfEntity.java
对比新文件 @@ -0,0 +1,42 @@ package com.iailab.module.ansteel.plant.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; /** * @description: * @author: lirm * @date: 2025/6/20 13:59 **/ @Data @TableName("t_plant_chart_conf") public class PlantChartConfEntity implements Serializable { private static final long serialVersionUID = 1L; /** * id */ @TableId(type = IdType.ASSIGN_UUID) private String id; private String indType; private String indCode; private String indName; private String indAvg; private String indTheory; private String indOptimal; private String indReal; private String indPower; } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/PlantChartConfService.java
对比新文件 @@ -0,0 +1,15 @@ package com.iailab.module.ansteel.plant.service; import com.iailab.module.ansteel.plant.vo.PlantChartDataVO; import java.util.Map; /** * @description: * @author: lirm * @date: 2025/6/20 13:59 **/ public interface PlantChartConfService { PlantChartDataVO getPlantChartData(Map tMap); } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/impl/PlantChartConfServiceImpl.java
对比新文件 @@ -0,0 +1,131 @@ package com.iailab.module.ansteel.plant.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.module.ansteel.plant.dao.PlantChartConfDao; import com.iailab.module.ansteel.plant.entity.PlantChartConfEntity; import com.iailab.module.ansteel.plant.service.PlantChartConfService; import com.iailab.module.ansteel.plant.vo.PlantChartDataVO; import com.iailab.module.data.api.point.DataPointApi; import com.iailab.module.data.api.point.dto.ApiPointsValueQueryDTO; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; /** * @description: * @author: lirm * @date: 2025/6/20 13:59 **/ @Slf4j @Service public class PlantChartConfServiceImpl implements PlantChartConfService { private Logger logger = LoggerFactory.getLogger(getClass()); @Resource private PlantChartConfDao plantChartConfDao; @Resource private DataPointApi dataPointApi; private String timeFormat = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @Override public PlantChartDataVO getPlantChartData(Map tMap) { int granularity = 60; PlantChartDataVO result = new PlantChartDataVO(); if (ObjectUtils.isEmpty(tMap.get("indType")) || ObjectUtils.isEmpty(tMap.get("indCode"))) { logger.info("输入参数为空"); return result; } QueryWrapper<PlantChartConfEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("ind_type", tMap.get("indType")); queryWrapper.eq("ind_code", tMap.get("indCode")); List<PlantChartConfEntity> plantChartConfList = plantChartConfDao.selectList(queryWrapper); if (CollectionUtils.isEmpty(plantChartConfList)) { log.info("plantChartConfList is null"); return result; } if("year".equals(tMap.get("indType"))){ granularity = 60*1440; } Date[] timeArray = calResultTime(tMap.get("indType").toString()); Date startTime = timeArray[0]; Date endTime = timeArray[1]; List<String> categories = DateUtils.getTimeScale(startTime, endTime, granularity, timeFormat); PlantChartConfEntity plantChartConfEntity = plantChartConfList.get(0); result.setIndType(tMap.get("indType").toString()); result.setIndCode(plantChartConfEntity.getIndCode()); result.setIndName(plantChartConfEntity.getIndName()); result.setStartTime(startTime); result.setEndTime(endTime); result.setCategories(categories); // 筛选DATAPOINT一次性查询出全部 List<String> pointNos = Stream.of(plantChartConfEntity.getIndAvg(), plantChartConfEntity.getIndTheory(), plantChartConfEntity.getIndOptimal(), plantChartConfEntity.getIndReal(), plantChartConfEntity.getIndPower()).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(pointNos)) { ApiPointsValueQueryDTO queryDTO = new ApiPointsValueQueryDTO(); queryDTO.setPointNos(pointNos); Map<String, List<Map<String, Object>>> pointsHisValues = dataPointApi.queryPointsHistoryValue(queryDTO); if (CollectionUtils.isEmpty(pointsHisValues)) { log.info("pointsHisValues is null"); return result; } result.setIndAvgHisList(pointsHisValues.get(plantChartConfEntity.getIndAvg())); result.setIndTheoryHisList(pointsHisValues.get(plantChartConfEntity.getIndTheory())); result.setIndOptimalHisList(pointsHisValues.get(plantChartConfEntity.getIndOptimal())); result.setIndRealHisList(pointsHisValues.get(plantChartConfEntity.getIndReal())); result.setIndPowerHisList(pointsHisValues.get(plantChartConfEntity.getIndPower())); } return result; } private Date[] calResultTime(String indType) { Date[] result = new Date[2]; Date startTime = null; Date endTime = null; if("day".equals(indType)) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.add(Calendar.HOUR_OF_DAY, -8); startTime = calendar.getTime(); calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); endTime = calendar.getTime(); }else if("year".equals(indType)) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.DAY_OF_MONTH, 1); startTime = calendar.getTime(); calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR_OF_DAY, 0); endTime = calendar.getTime(); } result[0] = startTime; result[1] = endTime; return result; } } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/vo/PlantChartDataVO.java
对比新文件 @@ -0,0 +1,44 @@ package com.iailab.module.ansteel.plant.vo; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; import java.util.Date; import java.util.List; import java.util.Map; /** * @description: * @author: lirm * @date: 2025/6/23 **/ @Data public class PlantChartDataVO implements Serializable { private static final long serialVersionUID = 1L; private String indType; private String indCode; private String indName; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date startTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date endTime; List<String> categories; private List<Map<String, Object>> indAvgHisList; private List<Map<String, Object>> indTheoryHisList; private List<Map<String, Object>> indOptimalHisList; private List<Map<String, Object>> indRealHisList; private List<Map<String, Object>> indPowerHisList; } doc/鞍钢数据接口文档_master.docBinary files differ