From 94fee0b511279679b43e210878d3d36e5a14384b Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 30 九月 2025 09:14:10 +0800
Subject: [PATCH] 2025.9.30 1. 新增走航任务统计功能

---
 src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt |   69 +++++++++++++++++++++++++++++++++-
 1 files changed, 67 insertions(+), 2 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 f33ac6f..53989b5 100644
--- a/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt
+++ b/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt
@@ -3,6 +3,7 @@
 import com.flightfeather.uav.biz.dataprocess.AvgPair
 import com.flightfeather.uav.common.utils.DateUtil
 import com.flightfeather.uav.lightshare.bean.DataVo
+import com.flightfeather.uav.lightshare.bean.FactorStatistics
 import com.flightfeather.uav.socket.bean.AirData
 import com.flightfeather.uav.socket.eunm.FactorType
 import java.io.Serializable
@@ -146,7 +147,7 @@
 
 }
 
-fun List<BaseRealTimeData>.avg(): BaseRealTimeData {
+fun List<BaseRealTimeData>.avg(onEach: (BaseRealTimeData) -> Unit = {  }): BaseRealTimeData {
     if (isEmpty()) {
         return BaseRealTimeData()
     }
@@ -162,8 +163,9 @@
     }
 
     forEach {
+        onEach(it)
         //椋庡悜
-        it.windDirection?.let {w ->
+        it.windDirection?.let { w ->
             val r = Math.toRadians(w.toDouble())
             u += sin(r)
             v += cos(r)
@@ -325,4 +327,67 @@
             windDirection = round(a.toFloat())
         }
     }
+}
+
+/**
+ * 璁$畻瀹炴椂鐩戞祴鏁版嵁鍒楄〃鐨勭粺璁′俊鎭�
+ * 涓烘瘡绉嶇幆澧冨洜瀛愯绠楁渶灏忓�笺�佹渶澶у�煎拰骞冲潎鍊�
+ *
+ * @return 鍖呭惈鍚勭幆澧冨洜瀛愮粺璁′俊鎭殑FactorStatistics鍒楄〃
+ *         姣忎釜FactorStatistics瀵硅薄鍖呭惈鍥犲瓙绫诲瀷銆佹渶灏忓�笺�佹渶澶у�煎拰骞冲潎鍊�
+ */
+fun List<BaseRealTimeData>.calDataStatistics(): List<FactorStatistics> {
+
+    // 鍒濆鍖栧悇鐜鍥犲瓙鐨勭粺璁″璞″垪琛�
+    val statistics = mutableListOf<FactorStatistics>()
+    listOf(
+        FactorType.NO2,
+        FactorType.CO,
+        FactorType.H2S,
+        FactorType.SO2,
+        FactorType.O3,
+        FactorType.PM25,
+        FactorType.PM10,
+        FactorType.VOC,
+        FactorType.NOI,
+        FactorType.VELOCITY,
+        FactorType.WIND_SPEED,
+        FactorType.HEIGHT,
+        FactorType.NO
+    ).forEach { statistics.add(FactorStatistics(it)) }
+
+    // 璁$畻骞冲潎鍊煎苟鍚屾椂鏇存柊鍚勫洜瀛愮殑鏈�灏忓�煎拰鏈�澶у��
+    val avgData = avg { item ->
+        // 鏇存柊姣忎釜鍥犲瓙鐨勬渶灏忓拰鏈�澶у��
+        statistics[0].updateMinAndMaxValue(item.no2)
+        statistics[1].updateMinAndMaxValue(item.co)
+        statistics[2].updateMinAndMaxValue(item.h2s)
+        statistics[3].updateMinAndMaxValue(item.so2)
+        statistics[4].updateMinAndMaxValue(item.o3)
+        statistics[5].updateMinAndMaxValue(item.pm25)
+        statistics[6].updateMinAndMaxValue(item.pm10)
+        statistics[7].updateMinAndMaxValue(item.voc)
+        statistics[8].updateMinAndMaxValue(item.noi)
+        statistics[9].updateMinAndMaxValue(item.velocity)
+        statistics[10].updateMinAndMaxValue(item.windSpeed)
+        statistics[11].updateMinAndMaxValue(item.height)
+        statistics[12].updateMinAndMaxValue(item.no)
+    }
+
+    // 灏嗚绠楀緱鍒扮殑骞冲潎鍊艰缃埌瀵瑰簲鐨勭粺璁″璞′腑
+    statistics[0].avgValue = avgData.no2 ?: 0f
+    statistics[1].avgValue = avgData.co ?: 0f
+    statistics[2].avgValue = avgData.h2s ?: 0f
+    statistics[3].avgValue = avgData.so2 ?: 0f
+    statistics[4].avgValue = avgData.o3 ?: 0f
+    statistics[5].avgValue = avgData.pm25 ?: 0f
+    statistics[6].avgValue = avgData.pm10 ?: 0f
+    statistics[7].avgValue = avgData.voc ?: 0f
+    statistics[8].avgValue = avgData.noi ?: 0f
+    statistics[9].avgValue = avgData.velocity ?: 0f
+    statistics[10].avgValue = avgData.windSpeed ?: 0f
+    statistics[11].avgValue = avgData.height ?: 0f
+    statistics[12].avgValue = avgData.no ?: 0f
+
+    return statistics
 }
\ No newline at end of file

--
Gitblit v1.9.3