From 538ba7a3bbc682f4537f1dd34f93feb2cf56b08e Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期二, 14 十月 2025 17:32:04 +0800 Subject: [PATCH] 2025.10.14 1. 新增数据统计颗粒度选项,可选秒级数据、分钟数据进行数据统计 2. 典型隐患区域统计新增按照污染溯源区域进行分类统计的功能 --- src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt | 29 ++++++++++++++++++++++++++--- 1 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt b/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt index 53989b5..1066c78 100644 --- a/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt +++ b/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt @@ -10,6 +10,7 @@ import java.math.BigDecimal import java.time.LocalDateTime import java.time.ZoneId +import java.time.temporal.ChronoUnit import java.util.* import javax.persistence.Column import javax.persistence.GeneratedValue @@ -332,11 +333,33 @@ /** * 璁$畻瀹炴椂鐩戞祴鏁版嵁鍒楄〃鐨勭粺璁′俊鎭� * 涓烘瘡绉嶇幆澧冨洜瀛愯绠楁渶灏忓�笺�佹渶澶у�煎拰骞冲潎鍊� - * + * @param granularity 鏁版嵁棰楃矑搴︼紝鍙�夊�间负SECOND, MINUTE, HOUR, 榛樿MINUTE * @return 鍖呭惈鍚勭幆澧冨洜瀛愮粺璁′俊鎭殑FactorStatistics鍒楄〃 * 姣忎釜FactorStatistics瀵硅薄鍖呭惈鍥犲瓙绫诲瀷銆佹渶灏忓�笺�佹渶澶у�煎拰骞冲潎鍊� */ -fun List<BaseRealTimeData>.calDataStatistics(): List<FactorStatistics> { +fun List<BaseRealTimeData>.calDataStatistics(granularity: String): List<FactorStatistics> { + + // 妫�鏌ラ绮掑害鏄惁鏈夋晥 + if (granularity !in listOf("SECOND", "MINUTE", "HOUR")) { + throw IllegalArgumentException("鏃犳晥鐨勯绮掑害鍙傛暟锛屽彲閫夊�间负SECOND, MINUTE, HOUR") + } + + val groupedData = when (granularity) { + "SECOND" -> this + "MINUTE" -> groupBy { it.dataTime?.toInstant()?.truncatedTo(ChronoUnit.MINUTES) }.mapValues { + it.value.avg().apply { + dataTime = Date.from(it.key) + createTime = dataTime + } + }.values.toList() + "HOUR" -> groupBy { it.dataTime?.toInstant()?.truncatedTo(ChronoUnit.HOURS) }.mapValues { + it.value.avg().apply { + dataTime = Date.from(it.key) + createTime = dataTime + } + }.values.toList() + else -> throw IllegalArgumentException("鏃犳晥鐨勯绮掑害鍙傛暟锛屽彲閫夊�间负SECOND, MINUTE, HOUR") + } // 鍒濆鍖栧悇鐜鍥犲瓙鐨勭粺璁″璞″垪琛� val statistics = mutableListOf<FactorStatistics>() @@ -357,7 +380,7 @@ ).forEach { statistics.add(FactorStatistics(it)) } // 璁$畻骞冲潎鍊煎苟鍚屾椂鏇存柊鍚勫洜瀛愮殑鏈�灏忓�煎拰鏈�澶у�� - val avgData = avg { item -> + val avgData = groupedData.avg { item -> // 鏇存柊姣忎釜鍥犲瓙鐨勬渶灏忓拰鏈�澶у�� statistics[0].updateMinAndMaxValue(item.no2) statistics[1].updateMinAndMaxValue(item.co) -- Gitblit v1.9.3