From 77894e68af1bffbcc73150dc56f969fda0b31d7e Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期一, 07 四月 2025 13:40:42 +0800
Subject: [PATCH] 累计测点 添加累计单位

---
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java             |    3 +
 iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql                                                               |    4 +
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaPointDTO.java                    |    3 +
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaCumulatePointDTO.java            |    3 +
 iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml                                    |    1 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointExcelVO.java                 |    4 ++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java |   10 +++-
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/common/PointCumulateUnitEnum.java      |   73 ++++++++++++++++++++++++++++++++++++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/DaCumulatePointEntity.java      |    5 ++
 9 files changed, 102 insertions(+), 4 deletions(-)

diff --git a/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql b/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql
index 31bcd5a..78635e5 100644
--- a/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql
+++ b/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql
@@ -442,4 +442,6 @@
                                  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                                  PRIMARY KEY (`id`),
                                  UNIQUE KEY `uk_code` (`code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='定时归档设置表';
\ No newline at end of file
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='定时归档设置表';
+
+ALTER TABLE `t_da_cumulate_point` ADD COLUMN `cumulate_unit` varchar(10) DEFAULT 'min' COMMENT '累计单位';
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java
index c6fb0f2..932746a 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CumulateHandle.java
@@ -9,6 +9,7 @@
 import com.iailab.module.data.influxdb.pojo.InfluxPointValuePOJO;
 import com.iailab.module.data.point.collection.PointCollector;
 import com.iailab.module.data.point.collection.utils.GenInfluxPointValueUtils;
+import com.iailab.module.data.point.common.PointCumulateUnitEnum;
 import com.iailab.module.data.point.dto.DaPointDTO;
 import com.iailab.module.data.point.service.DaPointService;
 import lombok.extern.slf4j.Slf4j;
@@ -101,12 +102,15 @@
             }
             return CommonConstant.BAD_VALUE;
         }
+
+        // 动态长度
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(collectTime);
-        calendar.add(Calendar.MINUTE, -1);
+        calendar.add(Calendar.SECOND, -1 * DataPointFreqEnum.getEumByCode(dto.getMinfreqid()).getValue());
         Date endTime = calendar.getTime();
-        calendar.add(Calendar.MINUTE, dto.getLength() * -1);
-        Date startTime = calendar.getTime();
+        Date startTime = PointCumulateUnitEnum.getStartTime(calendar,dto.getLength(),dto.getCumulateUnit());
+
+
         ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO();
         queryDto.setStart(startTime);
         queryDto.setEnd(endTime);
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/common/PointCumulateUnitEnum.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/common/PointCumulateUnitEnum.java
new file mode 100644
index 0000000..ee49986
--- /dev/null
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/common/PointCumulateUnitEnum.java
@@ -0,0 +1,73 @@
+package com.iailab.module.data.point.common;
+
+import com.iailab.framework.common.util.date.DateUtils;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.function.BiFunction;
+
+/**
+ * 累计测点累计单位
+ */
+@Getter
+@AllArgsConstructor
+public enum PointCumulateUnitEnum {
+    MIN("min", (end, length) -> {
+        Calendar cal = (Calendar) end.clone();
+        cal.add(Calendar.MINUTE, -length);
+        return cal;
+    }),
+    HOUR("hour", (end, length) -> {
+        Calendar cal = (Calendar) end.clone();
+        cal.add(Calendar.HOUR_OF_DAY, -length);
+        return cal;
+    }),
+    DAY("day", (end, length) -> {
+        Calendar cal = (Calendar) end.clone();
+        cal.add(Calendar.DAY_OF_MONTH, -length);
+        return cal;
+    }),
+    THIS_MONTH("this_month", (end, length) -> {
+        Calendar cal = (Calendar) end.clone();
+        cal.set(Calendar.DAY_OF_MONTH, 1);
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+        return cal;
+    });
+
+    private final String code;
+    private final BiFunction<Calendar, Integer, Calendar> calculator;
+
+    public Calendar calculate(Calendar endTime, Integer length) {
+        return calculator.apply(endTime, length);
+    }
+
+    public static PointCumulateUnitEnum fromCode(String code) {
+        for (PointCumulateUnitEnum unit : values()) {
+            if (unit.code.equals(code)) {
+                return unit;
+            }
+        }
+        return null;
+    }
+
+    public static Date getStartTime(Calendar endTime, Integer length, String cumulateUnit) {
+
+        PointCumulateUnitEnum unit = PointCumulateUnitEnum.fromCode(cumulateUnit);
+
+        if (unit == null) {
+            return endTime.getTime();
+        }else if (unit != THIS_MONTH) {
+            if (length == null || length <= 0) {
+                return endTime.getTime();
+            }
+        }
+
+        Calendar startCal = unit.calculate(endTime, length);
+        return startCal.getTime();
+    }
+}
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaCumulatePointDTO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaCumulatePointDTO.java
index 55c078d..b790bd5 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaCumulatePointDTO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaCumulatePointDTO.java
@@ -34,6 +34,9 @@
     @Schema(description = "累计长度", required = true)
     private Integer length;
 
+    @Schema(description = "累计单位", required = true)
+    private String cumulateUnit;
+
     @Schema(description = "除数", required = true)
     private Integer divisor;
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaPointDTO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaPointDTO.java
index 55a1c57..1a48545 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaPointDTO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dto/DaPointDTO.java
@@ -114,6 +114,9 @@
     @Schema(description = "累计长度")
     private Integer length;
 
+    @Schema(description = "累计单位")
+    private String cumulateUnit;
+
     @Schema(description = "除数")
     private Integer divisor;
 
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/DaCumulatePointEntity.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/DaCumulatePointEntity.java
index 7b5954d..1a5706f 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/DaCumulatePointEntity.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/DaCumulatePointEntity.java
@@ -41,6 +41,11 @@
     private Integer length;
 
     /**
+     * 累计单位
+     */
+    private String cumulateUnit;
+
+    /**
      * 除数
      */
     private Integer divisor;
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointExcelVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointExcelVO.java
index 2c019df..92eab10 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointExcelVO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/DaPointExcelVO.java
@@ -93,6 +93,10 @@
     @ExcelProperty("累计长度")
     private Integer length;
 
+    @Schema(description = "累计单位")
+    @ExcelProperty("累计单位")
+    private String cumulateUnit;
+
     @Schema(description = "除数")
     @ExcelProperty("除数")
     private Integer divisor;
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java
index 902d3f7..ca3af46 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java
@@ -92,6 +92,9 @@
     @ExcelProperty("累计长度")
     private Integer length;
 
+    @ExcelProperty("累计单位")
+    private String cumulateUnit;
+
     @ExcelProperty("除数")
     private Integer divisor;
 
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml b/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml
index 2b625f4..6a37163 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml
+++ b/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/point/DaPointDao.xml
@@ -274,6 +274,7 @@
         t1.minfreqid,
         t2.moment_point,
         t2.length,
+        t2.cumulate_unit,
         t2.divisor
         FROM t_da_point t1
         LEFT JOIN t_da_cumulate_point t2 ON t2.point_id = t1.id

--
Gitblit v1.9.3