鞍钢鲅鱼圈能源管控系统后端代码
潘志宝
2 天以前 0781f1208d3b6a8781e7573a1c4a5e883c7fec8d
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java
@@ -2,19 +2,16 @@
import cn.hutool.core.bean.BeanUtil;
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.module.ansteel.coking.entity.CokingOverviewEntity;
import com.iailab.module.ansteel.coking.entity.CokingProcessConfEntity;
import com.iailab.module.ansteel.coking.entity.CokingTraceChartEntity;
import com.iailab.module.ansteel.coking.entity.CokingTraceReportEntity;
import com.iailab.module.ansteel.coking.service.CokingOverviewService;
import com.iailab.module.ansteel.coking.service.CokingProcessConfService;
import com.iailab.module.ansteel.coking.service.CokingTraceChartService;
import com.iailab.module.ansteel.coking.service.CokingTraceReportService;
import com.iailab.module.ansteel.coking.entity.*;
import com.iailab.module.ansteel.coking.service.*;
import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum;
import com.iailab.module.ansteel.common.enums.ProcessTypeEnum;
import com.iailab.module.data.api.ind.IndItemApi;
import com.iailab.module.data.api.ind.dto.ApiIndItemQueryDTO;
import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO;
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;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -25,7 +22,6 @@
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * 备煤工序-概况
@@ -51,6 +47,10 @@
    private CokingTraceReportService cokingTraceReportService;
    @Resource
    private CokingTraceChartService cokingTraceChartService;
    @Resource
    private CokingTraceSuggestService cokingTraceSuggestService;
    @Resource
    private CokingTraceDataService cokingTraceDataService;
    @Override
    public void run(String processTypes) {
@@ -83,6 +83,7 @@
                reportEntity.setReportName(ProcessTypeEnum.getEumByCode(processType).getReportName());
                reportEntity.setAnalyDate(clock);
                reportEntity.setClock(clock);
                reportEntity.setCreateDate(new Date());
                cokingTraceReportService.save(reportEntity);
                // 整体情况
@@ -132,12 +133,18 @@
                    overviewEntity.setSubProcessType(entry.getKey());
                    overviewEntity.setClock(clock);
                    result.add(overviewEntity);
                    // 清理旧数据
                    cokingOverviewService.deleteByProcessType(processType, clock);
                    cokingTraceDataService.deleteByExObj(processType, clock);
                }
                cokingOverviewService.insert(result);
                // 指标运行趋势
                List<CokingProcessConfEntity> indRunTrend = list.stream().filter(e -> e.getInfoType().equals("1")).collect(Collectors.toList());
                List<CokingTraceChartEntity> cokingTraceChartEntityList = new ArrayList<>(indRunTrend.size());
                // List<CokingTraceSuggestEntity> suggestEntitieList = new ArrayList<>();
                List<CokingTraceDataEntity> exDatalist = new ArrayList<>(indRunTrend.size());
                indRunTrend.forEach(e -> {
                    CokingTraceChartEntity cokingTraceChartEntity = new CokingTraceChartEntity();
                    cokingTraceChartEntity.setRelId(relId);
@@ -156,15 +163,105 @@
                    cokingTraceChartEntity.setStartTime(clone.getTime());
                    cokingTraceChartEntity.setCreateDate(new Date());
                    cokingTraceChartEntityList.add(cokingTraceChartEntity);
                    // 异常数据处理
                    exDatalist.addAll(handleAbnormalData(e, cokingTraceChartEntity.getStartTime(), cokingTraceChartEntity.getEndTime(),relId,clock));
                });
                cokingTraceChartService.insert(cokingTraceChartEntityList);
                // cokingTraceSuggestService.insert(suggestEntitieList);
                cokingTraceDataService.insertList(exDatalist);
            }
        } catch (Exception ex) {
            logger.error("runCokingOverviewTask运行异常");
            ex.printStackTrace();
            logger.error("runCokingOverviewTask运行异常",ex);
        }
        logger.info("runCokingOverviewTask运行完成");
    }
    private List<CokingTraceDataEntity> handleAbnormalData(CokingProcessConfEntity e, Date startTime, Date endTime, String relId, String clock) {
        List<CokingTraceDataEntity> suggestEntities = new ArrayList<>();
        switch (ProcessConfDataTypeEnum.getEumByCode(e.getDataType())) {
            case DATAPOINT:
                ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO();
                queryDTO.setPointNo(e.getPointNo());
                queryDTO.setStart(startTime);
                queryDTO.setEnd(endTime);
                List<ApiPointValueDTO> pointValues = dataPointApi.queryPointHistoryValue(queryDTO);
                Map<Date, Double> pointValueMap = pointValues.stream().collect(Collectors.toMap(ApiPointValueDTO::getT, ApiPointValueDTO::getV, (e1, e2) -> e1));
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(startTime);
                while (!calendar.getTime().after(endTime)) {
                    String content = null;
                    if (pointValueMap.containsKey(calendar.getTime())) {
                        Double value = pointValueMap.get(calendar.getTime());
                        if (value.equals(0.0)) {
                            content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(数据为0)";
                        }else if (value.compareTo(Double.valueOf(e.getExt3())) > 0) {
                            content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(超上限)";
                        }else if (value.compareTo(Double.valueOf(e.getExt4())) < 0) {
                            content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(超下限)";
                        }
                    }else {
                        content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(无数据)";
                    }
                    if (StringUtils.isNotBlank(content)) {
                        CokingTraceDataEntity ctd = new CokingTraceDataEntity();
                        ctd.setId(UUID.randomUUID().toString());
                        ctd.setRelId(relId);
                        ctd.setProcess(ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName());
                        ctd.setClock(clock);
                        ctd.setExObj(e.getIndType()+"_AD");
                        ctd.setExTime(calendar.getTime());
                        ctd.setExType(content);
                        suggestEntities.add(ctd);
                    }
                    calendar.add(Calendar.DAY_OF_YEAR,1);
                }
                break;
            case IND:
                ApiIndItemQueryDTO query = new ApiIndItemQueryDTO();
                query.setItemNo(e.getPointNo());
                query.setStart(startTime);
                query.setEnd(endTime);
                List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemHistoryValue(query);
                Map<String, Double> indValueMap = indValues.stream().collect(Collectors.toMap(ApiIndItemValueDTO::getDataTime, ind -> Double.valueOf(ind.getDataValue().toString()), (e1, e2) -> e1));
                Calendar intCalendar = Calendar.getInstance();
                intCalendar.setTime(startTime);
                while (!intCalendar.getTime().after(endTime)) {
                    String content = null;
                    String time = DateUtils.format(intCalendar.getTime());
                    if (indValueMap.containsKey(time)) {
                        Double value = indValueMap.get(time);
                        if (value.equals(0.0)) {
                            content = time + " " + e.getIndName() + "数据异常(数据为0)";
                        }else if (value.compareTo(Double.valueOf(e.getExt3())) > 0) {
                            content = time + " " + e.getIndName() + "数据异常(超上限)";
                        }else if (value.compareTo(Double.valueOf(e.getExt4())) < 0) {
                            content = time + " " + e.getIndName() + "数据异常(超下限)";
                        }
                    }else {
                        content = time + " " + e.getIndName() + "数据异常(无数据)";
                    }
                    if (StringUtils.isNotBlank(content)) {
                        CokingTraceDataEntity ctd = new CokingTraceDataEntity();
                        ctd.setId(UUID.randomUUID().toString());
                        ctd.setRelId(relId);
                        ctd.setProcess(ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName());
                        ctd.setClock(clock);
                        ctd.setExObj(e.getIndType()+"_AD");
                        ctd.setExTime(intCalendar.getTime());
                        ctd.setExType(content);
                        suggestEntities.add(ctd);
                        // suggestEntities.add(new CokingTraceSuggestEntity(UUID.randomUUID().toString(),relId,ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName(),e.getIndType()+"_AD",clock,content,new Date()));
                    }
                    intCalendar.add(Calendar.DAY_OF_YEAR,1);
                }
                break;
            default:
                break;
        }
        return suggestEntities;
    }
}