From d92e08c8ac93c45d6b852e5fc192c1a3bd4963ed Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期日, 27 四月 2025 17:41:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java                       |  161 +++++++++++++++++++++++
 /dev/null                                                                                                 |  139 -------------------
 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingProcessMainDTO.java                  |   40 +++++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java            |   25 ++-
 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java |   16 ++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java                  |    3 
 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java          |    4 
 7 files changed, 235 insertions(+), 153 deletions(-)

diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/CokingProcessMainDTO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/CokingProcessMainDTO.java
deleted file mode 100644
index 7460c20..0000000
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/CokingProcessMainDTO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.iailab.module.ansteel.api.dto;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * @author PanZhibao
- * @Description
- * @createTime 2025年04月11日
- */
-@Schema(description = "焦化工序-主工序指标")
-@Data
-public class CokingProcessMainDTO implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    @Schema(description = "ID")
-    private String id;
-
-    @Schema(description = "类别(日:day,班:class)")
-    private String category;
-
-    @Schema(description = "查询时间")
-    private String clock;
-
-    @Schema(description = "信息类型(0:生产情况,1:能源发生,2:能源消耗)")
-    private String infoType;
-
-    @Schema(description = "指标名称")
-    private String indName;
-
-    @Schema(description = "历史平均")
-    private String avgValue;
-
-    @Schema(description = "理论值")
-    private String theoryValue;
-
-    @Schema(description = "实际值")
-    private String actualValue;
-
-    @Schema(description = "基准值")
-    private String standValue;
-
-    @Schema(description = "实时数据")
-    private String realValue;
-
-    @Schema(description = "排序")
-    private Integer sort;
-}
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java
index 1bada57..4807f22 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java
@@ -6,6 +6,7 @@
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -47,7 +48,7 @@
     /**
      * 值
      */
-    private String indValue;
+    private BigDecimal indValue;
 
     /**
      * 单位
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingProcessMainDTO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingProcessMainDTO.java
new file mode 100644
index 0000000..5a0c232
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingProcessMainDTO.java
@@ -0,0 +1,40 @@
+package com.iailab.module.ansteel.coking.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年04月11日
+ */
+@Data
+public class CokingProcessMainDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String category;
+
+    private String clock;
+
+    private String infoType;
+
+    private String indCode;
+
+    private String indName;
+    // 实际值
+    private BigDecimal realValue;
+    // 基准值
+    private BigDecimal standValue;
+    // 理论值
+    private BigDecimal theoryValue;
+    // 历史平均
+    private BigDecimal avgValue;
+    // 历史最优
+    private BigDecimal baseValue;
+    // 月累计
+    private BigDecimal monthValue;
+
+    private Integer sort;
+}
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java
index 71ca890..5c45fa4 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java
@@ -6,6 +6,7 @@
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @author PanZhibao
@@ -26,17 +27,21 @@
 
     private String infoType;
 
+    private String indCode;
+
     private String indName;
-
-    private String avgValue;
-
-    private String theoryValue;
-
-    private String actualValue;
-
-    private String standValue;
-
-    private String realValue;
+    // 实际值
+    private BigDecimal realValue;
+    // 基准值
+    private BigDecimal standValue;
+    // 理论值
+    private BigDecimal theoryValue;
+    // 历史平均
+    private BigDecimal avgValue;
+    // 历史最优
+    private BigDecimal baseValue;
+    // 月累计
+    private BigDecimal monthValue;
 
     private Integer sort;
 }
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java
index ad55e87..d0e9e98 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java
@@ -14,7 +14,9 @@
 
     List<CokingProcessMainEntity> list(Map<String, Object> params);
 
-    void save(CokingProcessMainEntity cokingProcessMainEntity);
+    List<CokingProcessMainEntity> historyList(String start, String end, String category, String indCode);
+
+    void save(List<CokingProcessMainEntity> list);
 
     void deleteByClock(String clock);
 }
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java
index 42fa27f..8de2f5c 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java
@@ -30,6 +30,7 @@
     @Override
     public List<CokingProcessMainEntity> list(Map<String, Object> params) {
         String category = (String) params.get("category");
+        String infoType = (String) params.get("infoType");
         String clock = (String) params.get("clock");
         if (StringUtils.isBlank(category)) {
             return new ArrayList<>();
@@ -41,14 +42,25 @@
         }
         QueryWrapper<CokingProcessMainEntity> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("category", category)
+                .eq("info_type", infoType)
                 .eq("clock", clock)
                 .orderByAsc("sort");
         return cokingProcessMainDao.selectList(queryWrapper);
     }
 
     @Override
-    public void save(CokingProcessMainEntity cokingProcessMainEntity) {
-        cokingProcessMainDao.insert(cokingProcessMainEntity);
+    public List<CokingProcessMainEntity> historyList(String start, String end, String category, String indCode) {
+        QueryWrapper<CokingProcessMainEntity> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("category", category)
+                .eq("ind_code",indCode)
+                .between("clock", start,end)
+                .orderByAsc("sort");
+        return cokingProcessMainDao.selectList(queryWrapper);
+    }
+
+    @Override
+    public void save(List<CokingProcessMainEntity> list) {
+        cokingProcessMainDao.insert(list);
     }
 
     @Override
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainDayTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainDayTask.java
deleted file mode 100644
index 184046e..0000000
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainDayTask.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.iailab.module.ansteel.job.task;
-
-import com.iailab.framework.common.util.date.DateUtils;
-import com.iailab.module.ansteel.coking.entity.CokingProcessConfEntity;
-import com.iailab.module.ansteel.coking.entity.CokingProcessMainEntity;
-import com.iailab.module.ansteel.coking.service.CokingProcessConfService;
-import com.iailab.module.ansteel.coking.service.CokingProcessMainService;
-import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum;
-import com.iailab.module.ansteel.common.enums.ProcessIndDataTypeEnum;
-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 org.apache.commons.lang3.ObjectUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
-
-/**
- * @author HouZhongjian
- * @Description
- * @createTime 2025年04月12日
- */
-@Component("runCokingMainDayTask")
-public class RunCokingMainDayTask implements ITask {
-
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Resource
-    private CokingProcessConfService cokingProcessConfService;
-
-    @Resource
-    private CokingProcessMainService cokingProcessMainService;
-
-    @Resource
-    private DataPointApi dataPointApi;
-
-    @Resource
-    private IndItemApi indItemApi;
-
-    @Override
-    public void run(String params) {
-        logger.info("RunCokingMainDayTask,参数为:{}", params);
-        try {
-            Calendar calendar = Calendar.getInstance();
-            calendar.set(Calendar.MILLISECOND, 0);
-            calendar.set(Calendar.SECOND, 0);
-            calendar.add(Calendar.DAY_OF_YEAR, -1);
-            String clock = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
-            CokingProcessConfEntity queryParams = new CokingProcessConfEntity();
-            queryParams.setIndType("main");
-            List<CokingProcessConfEntity> list = cokingProcessConfService.list(queryParams);
-            if (CollectionUtils.isEmpty(list)) {
-                logger.info("ConfLis is Empty");
-                return;
-            }
-            // 先建立ext1到sort的映射关系
-            Map<String, Integer> ext1ToSort = list.stream()
-                    .collect(Collectors.toMap(
-                            CokingProcessConfEntity::getExt1,
-                            CokingProcessConfEntity::getSort,
-                            (oldValue, newValue) -> oldValue));
-
-            // 然后按这个关系排序分组
-            Map<String, List<CokingProcessConfEntity>> groupMap = list.stream()
-                    .sorted(Comparator.comparing(CokingProcessConfEntity::getSort))
-                    .collect(Collectors.collectingAndThen(
-                            Collectors.groupingBy(CokingProcessConfEntity::getExt1),
-                            map -> map.entrySet().stream()
-                                    .sorted(Comparator.comparingInt(
-                                            e -> ext1ToSort.get(e.getKey())))  // 按ext1对应的sort值排序
-                                    .collect(Collectors.toMap(
-                                            Map.Entry::getKey,
-                                            Map.Entry::getValue,
-                                            (a, b) -> a,
-                                            LinkedHashMap::new))));
-
-            logger.info("清理旧数据");
-            cokingProcessMainService.deleteByClock(clock);
-
-            //计数器
-            AtomicReference<Integer> counter = new AtomicReference<>(1);
-            groupMap.forEach((group, confList) -> {
-                CokingProcessMainEntity cokingProcessMainEntity = new CokingProcessMainEntity();
-                cokingProcessMainEntity.setInfoType("0");
-                cokingProcessMainEntity.setSort(counter.getAndSet(counter.get() + 1));
-                cokingProcessMainEntity.setCategory("day");
-                CokingProcessConfEntity cokingProcessConfEntity = confList.get(0);
-                cokingProcessMainEntity.setIndName(cokingProcessConfEntity.getExt3());
-                cokingProcessMainEntity.setClock(clock);
-                confList.forEach(conf -> {
-                    String value = "";
-                    switch (ProcessConfDataTypeEnum.getEumByCode(conf.getDataType())) {
-                        case DATAPOINT:
-                            List<String> points = new ArrayList<>();
-                            points.add(conf.getPointNo());
-                            Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points);
-                            value = pointsRealValue.get(conf.getPointNo()).toString();
-                            break;
-                        case IND:
-                            List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(conf.getPointNo());
-                            if (!CollectionUtils.isEmpty(indValues)) {
-                                value = indValues.get(indValues.size() - 1).getDataValue().toString();
-                            }
-                            break;
-                        default:
-                            break;
-                    }
-                    //保存数据
-                    if(ObjectUtils.isNotEmpty(value)) {
-                        if(conf.getExt2().equals(ProcessIndDataTypeEnum.LSPJ.getCode())) {
-                            cokingProcessMainEntity.setAvgValue(value.toString());
-                        } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.LLZ.getCode())) {
-                            cokingProcessMainEntity.setTheoryValue(value.toString());
-                        } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.SJZ.getCode())) {
-                            cokingProcessMainEntity.setActualValue(value.toString());
-                        } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.JZZ.getCode())) {
-                            cokingProcessMainEntity.setStandValue(value.toString());
-                        } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.SSSJ.getCode())) {
-                            cokingProcessMainEntity.setRealValue(value.toString());
-                        }
-                    }
-                });
-                cokingProcessMainService.save(cokingProcessMainEntity);
-            });
-
-        } catch (Exception ex) {
-            logger.error("RunCokingMainDayTask运行异常");
-            ex.printStackTrace();
-        }
-        logger.info("RunCokingMainDayTask运行完成");
-
-    }
-}
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java
new file mode 100644
index 0000000..254e305
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java
@@ -0,0 +1,161 @@
+package com.iailab.module.ansteel.job.task;
+
+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.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 lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @description: 主图主工序指标
+ * @author: dzd
+ * @date: 2025/4/27 13:56
+ **/
+@Slf4j
+@Component("runCokingMainTask")
+public class RunCokingMainTask implements ITask{
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Resource
+    private CokingProcessConfService cokingProcessConfService;
+    @Resource
+    private DataPointApi dataPointApi;
+    @Resource
+    private IndItemApi indItemApi;
+    @Resource
+    private CokingProcessMainService cokingProcessMainService;
+
+    @Override
+    public void run(String processTypes) {
+        logger.info("runCokingMainTask,参数为:{}", processTypes);
+        try {
+
+            String[] split = processTypes.split(",");
+
+            for (String processType : split) {
+                CokingProcessConfEntity queryParams = new CokingProcessConfEntity();
+                queryParams.setIndType(processType);
+                List<CokingProcessConfEntity> list = cokingProcessConfService.list(queryParams);
+                if (CollectionUtils.isEmpty(list)) {
+                    logger.info("ConfList is Empty");
+                    continue;
+                }
+
+                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);
+
+                // 清理旧数据
+                cokingProcessMainService.deleteByClock(clock);
+
+                // 主工序指标 筛选info_type = 0
+                List<CokingProcessConfEntity> indList = list.stream().filter(e -> e.getInfoType().equals("0")).collect(Collectors.toList());
+                if (CollectionUtils.isEmpty(indList)) {
+                    continue;
+                }
+                List<CokingProcessMainEntity> processMainEntities = new ArrayList<>(indList.size());
+                for (CokingProcessConfEntity conf : indList) {
+                    if (StringUtils.isBlank(conf.getDataType())) {
+                        logger.info("DataType is Empty");
+                        continue;
+                    }
+                    if (StringUtils.isBlank(conf.getPointNo())) {
+                        logger.info("PointNo is Empty");
+                        continue;
+                    }
+                    CokingProcessMainEntity processMainEntity = new CokingProcessMainEntity();
+                    processMainEntity.setId(UUID.randomUUID().toString());
+                    processMainEntity.setCategory("day");
+                    processMainEntity.setClock(clock);
+                    processMainEntity.setInfoType(conf.getInfoType());
+                    processMainEntity.setIndCode(conf.getIndCode());
+                    processMainEntity.setIndName(conf.getIndName());
+                    processMainEntity.setSort(conf.getSort());
+                    // 日实际值
+                    Double value = getConfValue(conf.getDataType(),conf.getPointNo());
+                    processMainEntity.setRealValue(value == null ? BigDecimal.ZERO : BigDecimal.valueOf(value));
+
+                    // 基准值、理论值 来源模型下发结果
+                    Double standValue = getConfValue("DATAPOINT",conf.getExt1());
+                    processMainEntity.setStandValue(standValue == null ? BigDecimal.ZERO : BigDecimal.valueOf(standValue));
+                    Double theoryValue = getConfValue("DATAPOINT",conf.getExt2());
+                    processMainEntity.setTheoryValue(theoryValue == null ? BigDecimal.ZERO : BigDecimal.valueOf(theoryValue));
+
+                    // 计算 月累计
+                    calendar.add(Calendar.DAY_OF_YEAR, -29);
+                    String clock_30 = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
+                    List<CokingProcessMainEntity> historyList_30 = cokingProcessMainService.historyList(clock_30, clock, "day",conf.getIndCode());
+                    historyList_30.add(processMainEntity);
+                    double monthValue = historyList_30.stream().mapToDouble(e -> e.getRealValue().doubleValue()).sum();
+                    processMainEntity.setMonthValue(BigDecimal.valueOf(monthValue));
+
+                    // 计算 历史平均
+                    calendar.add(Calendar.DAY_OF_YEAR, -60);
+                    String clock_90 = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
+                    List<CokingProcessMainEntity> historyList_90 = cokingProcessMainService.historyList(clock_90, clock, "day",conf.getIndCode());
+                    historyList_90.add(processMainEntity);
+                    double avgValue = historyList_90.stream().mapToDouble(e -> e.getRealValue().doubleValue()).average().orElse(0.0);
+                    processMainEntity.setAvgValue(BigDecimal.valueOf(avgValue));
+                    // 历史最优
+                    double baseValue = 0.0;
+                    if (Double.valueOf(conf.getExt3()) > 0.0) {
+                        baseValue = historyList_90.stream().mapToDouble(e -> e.getRealValue().doubleValue()).max().orElse(0.0);
+                    }else {
+                        baseValue = historyList_90.stream().mapToDouble(e -> e.getRealValue().doubleValue()).min().orElse(0.0);
+                    }
+                    processMainEntity.setBaseValue(BigDecimal.valueOf(baseValue));
+
+
+                    processMainEntities.add(processMainEntity);
+                }
+                cokingProcessMainService.save(processMainEntities);
+            }
+        } catch (Exception ex) {
+            logger.error("runCokingMainTask运行异常",ex);
+        }
+        logger.info("runCokingMainTask运行完成");
+    }
+
+    private Double getConfValue(String dataType, String pointNo) {
+        Double value = null;
+        switch (ProcessConfDataTypeEnum.getEumByCode(dataType)) {
+            case DATAPOINT:
+                List<String> points = new ArrayList<>();
+                points.add(pointNo);
+                Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points);
+                if (pointsRealValue.containsKey(pointNo)) {
+                    value = Double.valueOf(pointsRealValue.get(pointNo).toString());
+                }
+                break;
+            case IND:
+                List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(pointNo);
+                if (!CollectionUtils.isEmpty(indValues)) {
+                    value = Double.valueOf(indValues.get(0).getDataValue().toString());
+                }
+                break;
+            case MODEL:
+                break;
+            default:
+                break;
+
+        }
+        return value;
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3