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/coking/dao/CokingOverviewIndDao.java                  |   14 ++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewIndServiceImpl.java |   57 +++++++++
 ansteel-biz/db/mysql.sql                                                                                  |   16 ++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java                   |   92 +++++++++++----
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java            |   11 +
 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java                  |   61 ++++++++++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewIndEntity.java            |   62 ++++++++++
 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewIndService.java          |   20 +++
 8 files changed, 307 insertions(+), 26 deletions(-)

diff --git a/ansteel-biz/db/mysql.sql b/ansteel-biz/db/mysql.sql
index 20d02e8..6d4f6fb 100644
--- a/ansteel-biz/db/mysql.sql
+++ b/ansteel-biz/db/mysql.sql
@@ -673,4 +673,18 @@
     `sort`      varchar(50) DEFAULT NULL COMMENT '排序',
     PRIMARY KEY (`id`),
     UNIQUE key uk_code (code)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='调整后的功率因数与无功倒送量';
\ No newline at end of file
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='调整后的功率因数与无功倒送量';
+
+CREATE TABLE `t_coking_overview_ind` (
+                                         `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id',
+                                         `rel_id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '关联ID',
+                                         `process_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '工序类型',
+                                         `clock` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '查询时间',
+                                         `ind_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '指标编码',
+                                         `ind_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '指标名称',
+                                         `ind_unit` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '指标单位',
+                                         `ind_value` decimal(20,4) DEFAULT NULL COMMENT '指标值',
+                                         `create_date` datetime DEFAULT NULL COMMENT '创建时间',
+                                         PRIMARY KEY (`id`) USING BTREE,
+                                         KEY `idx_rel_id` (`rel_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='焦化工序概况指标数据结果';
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java
index 5178b82..384e390 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java
@@ -63,6 +63,8 @@
 
     @Autowired
     private CokingOverviewService cokingOverviewService;
+    @Autowired
+    private CokingOverviewIndService cokingOverviewIndService;
 
     @Autowired
     private CokingTraceSuggestService cokingTraceSuggestService;
@@ -159,12 +161,19 @@
 
 
     @GetMapping("/overview/list")
-    @Operation(summary = "各工序-概况数据")
+    @Operation(summary = "各工序-概况-整体数据")
     public CommonResult<Map<String,List<CokingOverviewDTO>>> getOverviewList(@RequestParam Map<String, Object> params) {
         Map<String,List<CokingOverviewDTO>> result = cokingOverviewService.list(params);
         return success(result);
     }
 
+    @GetMapping("/overview/indList")
+    @Operation(summary = "各工序-概况-能流图指标数据")
+    public CommonResult<List<CokingOverviewIndEntity>> getOverviewIndList(@RequestParam Map<String, Object> params) {
+        List<CokingOverviewIndEntity> list = cokingOverviewIndService.list(params);
+        return success(list);
+    }
+
     @GetMapping("/overview/abnormal-data")
     @Operation(summary = "各工序-异常数据")
     public CommonResult<List<CokingTraceDataDTO>> getAbnormalData(@RequestParam Map<String, Object> params) {
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dao/CokingOverviewIndDao.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dao/CokingOverviewIndDao.java
new file mode 100644
index 0000000..5c63828
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dao/CokingOverviewIndDao.java
@@ -0,0 +1,14 @@
+package com.iailab.module.ansteel.coking.dao;
+
+import com.iailab.framework.common.dao.BaseDao;
+import com.iailab.module.ansteel.coking.entity.CokingOverviewIndEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @description:
+ * @author: dzd
+ * @date: 2025/4/26 10:54
+ **/
+@Mapper
+public interface CokingOverviewIndDao extends BaseDao<CokingOverviewIndEntity> {
+}
\ 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
new file mode 100644
index 0000000..1bada57
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java
@@ -0,0 +1,61 @@
+package com.iailab.module.ansteel.coking.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @description: 焦化工序概况指标数据结果
+ * @author: dzd 
+ * @date: 2025/4/26 10:49
+ **/
+@Data
+@TableName("t_coking_overview_ind")
+public class CokingOverviewIndDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_UUID)
+    private String id;
+
+    /**
+     * 关联ID
+     */
+    private String relId;
+
+    /**
+     * 工序类型
+     */
+    private String processType;
+
+    /**
+     * 查询时间
+     */
+    private String clock;
+    /**
+     * 编码
+     */
+    private String indCode;
+    /**
+     * 名称
+     */
+    private String indName;
+
+    /**
+     * 值
+     */
+    private String indValue;
+
+    /**
+     * 单位
+     */
+    private String indUnit;
+
+    /**
+     * 创建时间
+     */
+    private Date createDate;
+}
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewIndEntity.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewIndEntity.java
new file mode 100644
index 0000000..1e0e01d
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewIndEntity.java
@@ -0,0 +1,62 @@
+package com.iailab.module.ansteel.coking.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @description: 焦化工序概况指标数据结果
+ * @author: dzd 
+ * @date: 2025/4/26 10:49
+ **/
+@Data
+@TableName("t_coking_overview_ind")
+public class CokingOverviewIndEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_UUID)
+    private String id;
+
+    /**
+     * 关联ID
+     */
+    private String relId;
+
+    /**
+     * 工序类型
+     */
+    private String processType;
+
+    /**
+     * 查询时间
+     */
+    private String clock;
+    /**
+     * 编码
+     */
+    private String indCode;
+    /**
+     * 名称
+     */
+    private String indName;
+
+    /**
+     * 值
+     */
+    private BigDecimal indValue;
+
+    /**
+     * 单位
+     */
+    private String indUnit;
+
+    /**
+     * 创建时间
+     */
+    private Date createDate;
+}
\ No newline at end of file
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewIndService.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewIndService.java
new file mode 100644
index 0000000..7869296
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewIndService.java
@@ -0,0 +1,20 @@
+package com.iailab.module.ansteel.coking.service;
+
+import com.iailab.module.ansteel.coking.entity.CokingOverviewIndEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: dzd
+ * @date: 2025/4/26 10:52
+ **/
+public interface CokingOverviewIndService {
+
+    List<CokingOverviewIndEntity> list(Map<String, Object> params);
+
+    void save(List<CokingOverviewIndEntity> entityList);
+
+    void deleteByProcessType(String processType, String clock);
+}
diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewIndServiceImpl.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewIndServiceImpl.java
new file mode 100644
index 0000000..b2f5403
--- /dev/null
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewIndServiceImpl.java
@@ -0,0 +1,57 @@
+package com.iailab.module.ansteel.coking.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.iailab.framework.common.util.date.DateUtils;
+import com.iailab.module.ansteel.coking.dao.CokingOverviewIndDao;
+import com.iailab.module.ansteel.coking.entity.CokingOverviewEntity;
+import com.iailab.module.ansteel.coking.entity.CokingOverviewIndEntity;
+import com.iailab.module.ansteel.coking.service.CokingOverviewIndService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+@Slf4j
+@Service
+public class CokingOverviewIndServiceImpl implements CokingOverviewIndService {
+
+    @Resource
+    private CokingOverviewIndDao cokingOverviewIndDao;
+
+    @Override
+    public List<CokingOverviewIndEntity> list(Map<String, Object> params) {
+
+        String processType = (String) params.get("processType");
+        if (StringUtils.isBlank(processType)) {
+            return new ArrayList<>();
+        }
+
+        String clock = (String) params.get("clock");
+        if (StringUtils.isBlank(clock)) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.DAY_OF_YEAR, -1);
+            clock = DateUtils.format(calendar.getTime(), "yyyy-MM-dd");
+        }
+
+        QueryWrapper<CokingOverviewIndEntity> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("clock",clock);
+        queryWrapper.eq("process_type",processType);
+
+        return cokingOverviewIndDao.selectList(queryWrapper);
+    }
+
+    @Override
+    public void save(List<CokingOverviewIndEntity> entityList) {
+        cokingOverviewIndDao.insert(entityList);
+    }
+
+    @Override
+    public void deleteByProcessType(String processType, String clock) {
+        QueryWrapper<CokingOverviewIndEntity> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("process_type", processType);
+        queryWrapper.eq("clock", clock);
+        cokingOverviewIndDao.delete(queryWrapper);
+    }
+}
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 9eebb07..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
@@ -20,6 +20,7 @@
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -39,6 +40,8 @@
     private CokingProcessConfService cokingProcessConfService;
     @Resource
     private CokingOverviewService cokingOverviewService;
+    @Resource
+    private CokingOverviewIndService cokingOverviewIndService;
     @Resource
     private DataPointApi dataPointApi;
     @Resource
@@ -82,6 +85,11 @@
                 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));
@@ -100,26 +108,9 @@
                             logger.info("PointNo is Empty");
                             continue;
                         }
-                        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;
 
-                        }
+                        Double value = getConfValue(conf);
+
                         values.put(conf.getExt1(),value);
 
                         // 异常数据处理
@@ -141,7 +132,7 @@
                             ctd.setRelId(relId);
                             ctd.setProcess(ProcessTypeEnum.getEumByCode(conf.getIndType()).getReportName());
                             ctd.setClock(clock);
-                            ctd.setExObj(conf.getIndType()+"_AD");
+                            ctd.setExObj(processType+"_AD");
                             ctd.setExTime(calendar.getTime());
                             ctd.setExType(content);
                             ctd.setCreateDate(new Date());
@@ -157,17 +148,70 @@
                     overviewEntity.setSubProcessType(entry.getKey());
                     overviewEntity.setClock(clock);
                     result.add(overviewEntity);
-
-                    // 清理旧数据
-                    cokingOverviewService.deleteByProcessType(processType, clock);
-                    cokingTraceDataService.deleteByExObj(processType, clock);
                 }
                 cokingOverviewService.insert(result);
                 cokingTraceDataService.insertList(exDatalist);
+
+                // 能流图指标数据
+                // 筛选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;
+                    }
+                    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);
         }
         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