From d185f87b74ae43ed649bcec3ea9fcb3bad6e428a Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期三, 23 四月 2025 15:38:05 +0800
Subject: [PATCH] 焦化总图-异常数据

---
 ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java |  148 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 137 insertions(+), 11 deletions(-)

diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java
index 0b9df33..88d6168 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java
@@ -2,17 +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.CokingTraceReportEntity;
-import com.iailab.module.ansteel.coking.service.CokingOverviewService;
-import com.iailab.module.ansteel.coking.service.CokingProcessConfService;
-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;
@@ -46,6 +45,12 @@
     private IndItemApi indItemApi;
     @Resource
     private CokingTraceReportService cokingTraceReportService;
+    @Resource
+    private CokingTraceChartService cokingTraceChartService;
+    @Resource
+    private CokingTraceSuggestService cokingTraceSuggestService;
+    @Resource
+    private CokingTraceDataService cokingTraceDataService;
 
     @Override
     public void run(String processTypes) {
@@ -66,9 +71,11 @@
                 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.add(Calendar.DAY_OF_YEAR, -1);
                 String clock = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
-                // 插入溯源报告
+                // 溯源报告
                 CokingTraceReportEntity reportEntity = new CokingTraceReportEntity();
                 String relId = UUID.randomUUID().toString();
                 reportEntity.setId(relId);
@@ -76,10 +83,12 @@
                 reportEntity.setReportName(ProcessTypeEnum.getEumByCode(processType).getReportName());
                 reportEntity.setAnalyDate(clock);
                 reportEntity.setClock(clock);
+                reportEntity.setCreateDate(new Date());
                 cokingTraceReportService.save(reportEntity);
 
-                // 按照子工序类型分组
-                Map<String, List<CokingProcessConfEntity>> processTypeMap = list.stream().collect(Collectors.groupingBy(CokingProcessConfEntity::getExt2));
+                // 整体情况
+                // 筛选info_type = 2,按照子工序类型分组
+                Map<String, List<CokingProcessConfEntity>> processTypeMap = list.stream().filter(e -> e.getInfoType().equals("2")).collect(Collectors.groupingBy(CokingProcessConfEntity::getExt2));
                 // 结果 <子工序类型,<数据key,数据value>>
                 List<CokingOverviewEntity> result = new ArrayList<>(processTypeMap.size());
 
@@ -126,12 +135,129 @@
                     result.add(overviewEntity);
                 }
                 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);
+                    cokingTraceChartEntity.setName(e.getIndName());
+                    cokingTraceChartEntity.setClock(clock);
+                    cokingTraceChartEntity.setDataNo(e.getPointNo());
+                    cokingTraceChartEntity.setDataType(e.getDataType());
+
+                    Calendar clone = (Calendar) calendar.clone();
+                    cokingTraceChartEntity.setEndTime(clone.getTime());
+                    if (e.getExt2().equals("month")) {
+                        clone.add(Calendar.MONTH,-1 * Integer.parseInt(e.getExt1()));
+                    } else if (e.getExt2().equals("day")) {
+                        clone.add(Calendar.DAY_OF_YEAR,-1 * Integer.parseInt(e.getExt1()));
+                    }
+                    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;
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3