From 95fa8f7f6e3dbc4f13c0a9b15515f4040fa05f03 Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期六, 26 四月 2025 11:16:46 +0800
Subject: [PATCH] 焦化概况 能流图指标数据

---
 ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java |  158 ++++++++++++++++++++++++++++++++++------------------
 1 files changed, 103 insertions(+), 55 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 0e2da10..870e040 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,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;
@@ -23,9 +20,9 @@
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * 备煤工序-概况
@@ -44,13 +41,15 @@
     @Resource
     private CokingOverviewService cokingOverviewService;
     @Resource
+    private CokingOverviewIndService cokingOverviewIndService;
+    @Resource
     private DataPointApi dataPointApi;
     @Resource
     private IndItemApi indItemApi;
     @Resource
     private CokingTraceReportService cokingTraceReportService;
     @Resource
-    private CokingTraceChartService cokingTraceChartService;
+    private CokingTraceDataService cokingTraceDataService;
 
     @Override
     public void run(String processTypes) {
@@ -64,8 +63,8 @@
                 queryParams.setIndType(processType);
                 List<CokingProcessConfEntity> list = cokingProcessConfService.list(queryParams);
                 if (CollectionUtils.isEmpty(list)) {
-                    logger.info("ConfLis is Empty");
-                    return;
+                    logger.info("ConfList is Empty");
+                    continue;
                 }
 
                 Calendar calendar = Calendar.getInstance();
@@ -83,13 +82,20 @@
                 reportEntity.setReportName(ProcessTypeEnum.getEumByCode(processType).getReportName());
                 reportEntity.setAnalyDate(clock);
                 reportEntity.setClock(clock);
+                reportEntity.setCreateDate(new Date());
                 cokingTraceReportService.save(reportEntity);
+
+                // 清理旧数据
+                cokingOverviewService.deleteByProcessType(processType, clock);
+                cokingTraceDataService.deleteByExObj(processType+"_AD", clock);
+                cokingOverviewIndService.deleteByProcessType(processType, clock);
 
                 // 整体情况
                 // 筛选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());
+                List<CokingTraceDataEntity> exDatalist = new ArrayList<>();
 
                 for (Map.Entry<String, List<CokingProcessConfEntity>> entry : processTypeMap.entrySet()) {
                     Map<String,Double> values = new HashMap<>(entry.getValue().size());
@@ -102,27 +108,37 @@
                             logger.info("PointNo is Empty");
                             continue;
                         }
-                        Double value = 0.0;
-                        switch (ProcessConfDataTypeEnum.getEumByCode(conf.getDataType())) {
-                            case DATAPOINT:
-                                List<String> points = new ArrayList<>();
-                                points.add(conf.getPointNo());
-                                Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points);
-                                value = Double.valueOf(pointsRealValue.get(conf.getPointNo()).toString());
-                                break;
-                            case IND:
-                                List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(conf.getPointNo());
-                                if (!CollectionUtils.isEmpty(indValues)) {
-                                    value = Double.valueOf(indValues.get(indValues.size() - 1).getDataValue().toString());
-                                }
-                                break;
-                            case MODEL:
-                                break;
-                            default:
-                                break;
 
-                        }
+                        Double value = getConfValue(conf);
+
                         values.put(conf.getExt1(),value);
+
+                        // 异常数据处理
+                        String content = null;
+                        if (value != null) {
+                            if (value.equals(0.0)) {
+                                content = clock + " " + conf.getIndName() + "数据异常(数据为0)";
+                            }else if (value.compareTo(Double.valueOf(conf.getExt3())) > 0) {
+                                content = clock + " " + conf.getIndName() + "数据异常(超上限)";
+                            }else if (value.compareTo(Double.valueOf(conf.getExt4())) < 0) {
+                                content = clock + " " + conf.getIndName() + "数据异常(超下限)";
+                            }
+                        }else {
+                            content = clock + " " + conf.getIndName() + "数据异常(无数据)";
+                        }
+                        if (StringUtils.isNotBlank(content)) {
+                            CokingTraceDataEntity ctd = new CokingTraceDataEntity();
+                            ctd.setId(UUID.randomUUID().toString());
+                            ctd.setRelId(relId);
+                            ctd.setProcess(ProcessTypeEnum.getEumByCode(conf.getIndType()).getReportName());
+                            ctd.setClock(clock);
+                            ctd.setExObj(processType+"_AD");
+                            ctd.setExTime(calendar.getTime());
+                            ctd.setExType(content);
+                            ctd.setCreateDate(new Date());
+                            exDatalist.add(ctd);
+                        }
+
                     }
                     CokingOverviewEntity overviewEntity = new CokingOverviewEntity();
                     BeanUtil.fillBeanWithMap(values,overviewEntity,true);
@@ -134,36 +150,68 @@
                     result.add(overviewEntity);
                 }
                 cokingOverviewService.insert(result);
+                cokingTraceDataService.insertList(exDatalist);
 
-                // 指标运行趋势
-                List<CokingProcessConfEntity> indRunTrend = list.stream().filter(e -> e.getInfoType().equals("1")).collect(Collectors.toList());
-                List<CokingTraceChartEntity> cokingTraceChartEntityList = 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());
-
-                    cokingTraceChartEntity.setEndTime(calendar.getTime());
-                    if (e.getExt2().equals("month")) {
-                        calendar.add(Calendar.MONTH,-1 * Integer.parseInt(e.getExt1()));
-                    } else if (e.getExt2().equals("day")) {
-                        calendar.add(Calendar.DAY_OF_YEAR,-1 * Integer.parseInt(e.getExt1()));
+                // 能流图指标数据
+                // 筛选info_type = 1
+                List<CokingProcessConfEntity> indList = list.stream().filter(e -> e.getInfoType().equals("1")).collect(Collectors.toList());
+                if (CollectionUtils.isEmpty(indList)) {
+                    return;
+                }
+                List<CokingOverviewIndEntity> overviewIndEntities = new ArrayList<>(indList.size());
+                for (CokingProcessConfEntity conf : indList) {
+                    if (StringUtils.isBlank(conf.getDataType())) {
+                        logger.info("DataType is Empty");
+                        continue;
                     }
-                    cokingTraceChartEntity.setStartTime(calendar.getTime());
-                    cokingTraceChartEntity.setCreateDate(new Date());
-                    cokingTraceChartEntityList.add(cokingTraceChartEntity);
-                });
-                cokingTraceChartService.insert(cokingTraceChartEntityList);
-
+                    if (StringUtils.isBlank(conf.getPointNo())) {
+                        logger.info("PointNo is Empty");
+                        continue;
+                    }
+                    Double value = getConfValue(conf);
+                    CokingOverviewIndEntity entity = new CokingOverviewIndEntity();
+                    entity.setId(UUID.randomUUID().toString());
+                    entity.setRelId(relId);
+                    entity.setProcessType(processType);
+                    entity.setClock(clock);
+                    entity.setIndCode(conf.getIndCode());
+                    entity.setIndName(conf.getIndName());
+                    entity.setIndUnit(conf.getIndUnit());
+                    if (value != null) {
+                        entity.setIndValue(BigDecimal.valueOf(value));
+                    }
+                    entity.setCreateDate(new Date());
+                    overviewIndEntities.add(entity);
+                }
+                cokingOverviewIndService.save(overviewIndEntities);
             }
         } catch (Exception ex) {
-            logger.error("runCokingOverviewTask运行异常");
-            ex.printStackTrace();
+            logger.error("runCokingOverviewTask运行异常",ex);
         }
         logger.info("runCokingOverviewTask运行完成");
+    }
 
+    private Double getConfValue(CokingProcessConfEntity conf) {
+        Double value = null;
+        switch (ProcessConfDataTypeEnum.getEumByCode(conf.getDataType())) {
+            case DATAPOINT:
+                List<String> points = new ArrayList<>();
+                points.add(conf.getPointNo());
+                Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points);
+                value = Double.valueOf(pointsRealValue.get(conf.getPointNo()).toString());
+                break;
+            case IND:
+                List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(conf.getPointNo());
+                if (!CollectionUtils.isEmpty(indValues)) {
+                    value = Double.valueOf(indValues.get(indValues.size() - 1).getDataValue().toString());
+                }
+                break;
+            case MODEL:
+                break;
+            default:
+                break;
+
+        }
+        return value;
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3