鞍钢鲅鱼圈能源管控系统后端代码
潘志宝
7 天以前 eb23bc41da0a27d1aada95744e0262e8cb4f0385
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingTraceModelHCTask.java
@@ -1,28 +1,21 @@
package com.iailab.module.ansteel.job.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.module.ansteel.coking.entity.*;
import com.iailab.module.ansteel.coking.service.*;
import com.iailab.module.ansteel.common.constant.CommonConstant;
import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum;
import com.iailab.module.data.api.ind.IndItemApi;
import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.ansteel.common.enums.TraceProcessTypeEnum;
import com.iailab.module.model.api.mcs.McsApi;
import com.iailab.module.model.api.mcs.dto.ChartParamDTO;
import org.apache.commons.lang3.StringUtils;
import com.iailab.module.model.api.mdk.MdkApi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
/**
 * 化产工序异常溯源
@@ -56,7 +49,10 @@
    @Autowired
    private McsApi mcsApi;
    private final static String process = "化产工序";
    @Autowired
    private MdkApi mdkApi;
    private final static String process = TraceProcessTypeEnum.HC.getProcess();
    private final static String reportName = "化产工序异常溯源";
@@ -64,30 +60,23 @@
    private final static String indType = "化产工序异常溯源";
    private static final HashMap<String, Object> chemProdColoumMap = new HashMap<String, Object>() {{
        put("chemProdFirstColoum0", "一级指标-偏差值");
        put("chemProdFirstColoum1", "二级指标-偏差值");
        put("chemProdFirstColoum2", "影响因素1-偏差值");
    }};
    private final static String row = "chemProdRow";
    private static final HashMap<String, Object> historyPointMap = new HashMap<String, Object>() {{
        put("F0000101006", "蒸汽消耗");
        put("F0000101006", "初冷器出口煤气温度");
        put("F0000101006", "洗苯塔后煤气含苯");
        put("F0000101006", "脱硫后H2S含量");
    }};
    private final static String total = "chemProdTotal";
    private static final String jsonStr = "{\n" +
            "\"result\":{\n" +
            "\"chemProdSteam\":[[33836,33925]],  \n" +
            "\"chemProdIndex\":[[352,355],[68,66.3],[82.5,87.6],[50.7,56.5],[73.5,73.1]],\n" +
            "\"chemProdTotal\":\"蒸汽消耗量异常,当前值1342,经模型计算,指标1异常,当前值1342,建议调整指标1至区间[90,110],指标2异常,当前值1342,建议调整指标2至区间[50,80]\",\n" +
            "\"chemProdFirstColoum0\":[[0,42]],\n" + "      \"chemProdFirstColoum1\":[[5,1342],[7,1342],[9,1342]],\n" +
            "\"chemProdFirstColoum2\":[[5,10,1342],[5,16,1342],[7,18,1342]],\n" +
            "\"chemProdHomePage\":[[9,1342],[9,1342]],\n" +
            "\"chemProdHomeIndex\":[[90.4,90.2],[80.3,78],[103,100],[280,270]],\n" +
            "\"chemProdHomeIndexInfo\":\"2月18日甲班:化产蒸汽消耗量异常\",\n" +
            "\"chemProdHomeErr\":\"2月18日化产蒸汽消耗量数据异常(无数据)\"\n" +  " }" + "}";
            "\"chemProdHomePage\":[1782.7,0.8]," +
            "\"chemProdElec\":[794680.52]," +
            "\"chemProdIndex\":[16.3,2.57,0.017,0.745,658731.5]," +
            "\"chemProdRow0\":[[0.0,42.3],[5.0,1342.5],[10.0,122.5]]," +
            "\"chemProdRow1\":[[0.0,42.3],[7.0,12.5],[9.0,17.45]]," +
            "\"chemProdRow2\":[[0.0,42.3],[12.0,23.5],[35.0,54.33]]," +
            "\"chemProdSteam\":[46.3]," +
            "\"chemProdTotal\":\"蒸汽消耗量异常,经模型计算,原因和调整建议如下:电捕绝缘箱温度异常,当前值190,建议调整电捕绝缘箱温度至区间[80,110], 蒸氨塔塔顶温度异常,当前值190,建议调整蒸氨塔塔顶温度至区间[101,103]\"," +
            "\"chemProdHomeIndexInfo\":\"化产蒸汽消耗量异常\""+
            " }" +
            "}";
    @Override
    public void run(String params) {
@@ -97,34 +86,12 @@
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MINUTE, 0);
            int hour = calendar.get(Calendar.HOUR_OF_DAY);
            Date startDate = calendar.getTime();
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            Date endDate = calendar.getTime();
            String clock = "";
            String analyClass = "";
            if (hour >= 8 && hour < 16) {
                calendar.set(Calendar.HOUR_OF_DAY, 0);
                startDate = calendar.getTime();
                calendar.add(Calendar.HOUR_OF_DAY, 8);
                endDate = calendar.getTime();
                clock = DateUtils.format(startDate).concat("-").concat("A");
                analyClass = "甲班";
            } else if (hour >= 16 && hour < 24) {
                calendar.set(Calendar.HOUR_OF_DAY, 8);
                startDate = calendar.getTime();
                calendar.add(Calendar.HOUR_OF_DAY, 8);
                endDate = calendar.getTime();
                clock = DateUtils.format(startDate).concat("-").concat("B");
                analyClass = "乙班";
            } else if (hour >= 0 && hour < 8) {
                calendar.add(Calendar.DAY_OF_YEAR, -1);
                calendar.set(Calendar.HOUR_OF_DAY, 16);
                startDate = calendar.getTime();
                calendar.add(Calendar.HOUR_OF_DAY, 8);
                endDate = calendar.getTime();
                clock = DateUtils.format(startDate).concat("-").concat("B");
                analyClass = "丙班";
            }
            calendar.add(Calendar.DAY_OF_YEAR, -1);
            Date startDate = calendar.getTime();
            String clock = DateUtils.format(startDate);
            // 调用模型
            JSONObject jsonObject = JSONObject.parseObject(jsonStr);
@@ -137,17 +104,18 @@
            // 保存报告
            String analyDate = DateUtils.format(startDate);
            String analyContent = result.getString("chemProdHomeIndexInfo");
            String relId = cokingTraceReportService.save(process, reportName, analyDate, analyClass, clock, analyContent);
            String analyContent = clock + " " + result.getString("chemProdHomeIndexInfo");
            String content = result.getString(total);
            String relId = cokingTraceReportService.save(process, reportName, analyDate, clock, analyContent);
            // 保存一级分析指标
            saveAnalyInd(relId, process, analyDate, analyClass, analyContent);
            cokingAnalyIndService.saveAnalyInd(relId, process, analyDate, analyContent);
            // 保存优化建议
            saveTraceSuggest(relId, process, clock, result);
            cokingTraceSuggestService.saveTraceSuggest(relId, process, clock, content, SugObj);
            // 保存偏差值
            saveTraceDeviation(relId, process, clock, result);
            cokingTraceDeviationService.saveTraceDeviation(relId, process, clock, result, CommonConstant.COKE_INDEX_CHARTCODE, row, SugObj);
            // 保存溯源指标
            cokingTraceIndService.saveTraceInd(relId, indType, clock);
@@ -160,68 +128,5 @@
            ex.printStackTrace();
        }
        logger.info("RunCokingTraceModelHCTask运行完成");
    }
    public void saveTraceSuggest(String relId, String process, String clock, JSONObject result) {
        String chemProdTotal = result.get("chemProdTotal").toString();
        if (StringUtils.isBlank(chemProdTotal)) {
            logger.info("coalPrepElecTotal1 is null");
            return;
        }
        CokingTraceSuggestEntity suggestEntity = new CokingTraceSuggestEntity();
        suggestEntity.setRelId(relId);
        suggestEntity.setProcess(process);
        suggestEntity.setSugObj(SugObj);
        suggestEntity.setClock(clock);
        suggestEntity.setContent(chemProdTotal);
        suggestEntity.setCreateDate(new Date());
        cokingTraceSuggestService.save(suggestEntity);
    }
    @Transactional
    public void saveTraceDeviation(String relId, String process, String clock, JSONObject result) {
        List<ChartParamDTO> list = mcsApi.getChartParamList(CommonConstant.CHEMPROD_INDEX_CHARTCODE);
        Map<String, String> steamIndexMaps = list.stream().collect(Collectors.toMap(ChartParamDTO::getParamCode, e -> e.getParamName()));
        for (int i = 0; i <= 2; i++) {
            String chemProdFirstColoum = result.get("chemProdFirstColoum" + i).toString();
            if (StringUtils.isNotBlank(chemProdFirstColoum)) {
                JSONArray responseArr = JSON.parseArray(chemProdFirstColoum);
                List<CokingTraceDeviationEntity> cokingTraceDeviationEntities = new ArrayList<>();
                for (int j = 0; j < responseArr.size(); j++) {
                    JSONArray element = JSON.parseArray(responseArr.get(j).toString());
                    CokingTraceDeviationEntity deviationEntity = new CokingTraceDeviationEntity();
                    deviationEntity.setRelId(relId);
                    deviationEntity.setProcess(process);
                    deviationEntity.setClock(clock);
                    deviationEntity.setSugObj(SugObj);
                    deviationEntity.setGroupName(chemProdColoumMap.get("chemProdFirstColoum" + i).toString());
                    deviationEntity.setIndName(steamIndexMaps.get(element.get(0).toString()));
                    deviationEntity.setIndValue(element.get(1).toString());
                    deviationEntity.setCreateDate(new Date());
                    cokingTraceDeviationEntities.add(deviationEntity);
                }
                cokingTraceDeviationService.save(cokingTraceDeviationEntities);
            }
        }
    }
    public void saveAnalyInd(String relId, String process, String analyDate, String analyClass, String analyContent) {
        if (StringUtils.isBlank(analyContent)) {
            logger.info("analyContent is null");
            return;
        }
        String[] analyContentArr = analyContent.split(";");
        List<CokingAnalyIndEntity> entityList = new ArrayList<>();
        for (int i = 0; i < analyContentArr.length; i++) {
            CokingAnalyIndEntity analyIndEntity = new CokingAnalyIndEntity();
            analyIndEntity.setRelId(relId);
            analyIndEntity.setAnalyType(process);
            analyIndEntity.setAnalyDate(analyDate);
            analyIndEntity.setAnalyClass(analyClass);
            analyIndEntity.setAnalyContent(analyContentArr[i]);
            analyIndEntity.setSort(i + 1);
            entityList.add(analyIndEntity);
        }
        cokingAnalyIndService.save(entityList);
    }
}