From eb3dd00b0b7fcda477229d518d250f9c842b790b Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 21 十月 2025 17:45:44 +0800
Subject: [PATCH] 2025.10.21 1. 走航季度报告相关数据计算逻辑调整
---
src/main/kotlin/com/flightfeather/uav/domain/entity/ExpandFun.kt | 200 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 197 insertions(+), 3 deletions(-)
diff --git a/src/main/kotlin/com/flightfeather/uav/domain/entity/ExpandFun.kt b/src/main/kotlin/com/flightfeather/uav/domain/entity/ExpandFun.kt
index eb613f4..0fa5483 100644
--- a/src/main/kotlin/com/flightfeather/uav/domain/entity/ExpandFun.kt
+++ b/src/main/kotlin/com/flightfeather/uav/domain/entity/ExpandFun.kt
@@ -1,10 +1,16 @@
package com.flightfeather.uav.domain.entity
+import com.flightfeather.uav.biz.dataprocess.AvgPair
import com.flightfeather.uav.common.utils.DateUtil
import com.flightfeather.uav.common.utils.GsonUtils
import com.flightfeather.uav.lightshare.bean.DataVo
import com.flightfeather.uav.socket.bean.AirData
import com.flightfeather.uav.socket.eunm.FactorType
+import com.flightfeather.uav.socket.eunm.FactorType.*
+import kotlin.math.atan
+import kotlin.math.cos
+import kotlin.math.round
+import kotlin.math.sin
/**
* 鏁版嵁搴撹〃瀹炰綋鎵╁睍鏂规硶
@@ -17,7 +23,7 @@
list.add("绾害")
val values = GsonUtils.parserJsonToArrayBeans(factors, AirData::class.java)
values.forEach {
- if (FactorType.outputFactor(it.factorName)) {
+ if (FactorType.isOutputFactor(it.factorName)) {
val name = it.factorName ?: ""
list.add(name)
// list.add("$name(鐗╃悊閲�)")
@@ -42,7 +48,7 @@
}
val values = GsonUtils.parserJsonToArrayBeans(factors, AirData::class.java)
values.forEach {
- if (FactorType.outputFactor(it.factorName)) {
+ if (FactorType.isOutputFactor(it.factorName)) {
row.add(it.factorData ?: -1.0)
// row.add(it.physicalQuantity ?: -1.0)
}
@@ -105,4 +111,192 @@
factorData = mvPowerC
},
)
-}
\ No newline at end of file
+}
+
+
+/** GridDataDetail-start ********************************************************************/
+/**
+ * 鏍规嵁鐩戞祴鍥犲瓙绫诲瀷璧嬪��
+ */
+fun GridDataDetail.setFactorValue(type: FactorType?, value: Float) {
+ when (type) {
+ NO -> no = value
+ NO2 -> no2 = value
+ CO -> co = value
+ H2S -> h2s = value
+ SO2 -> so2 = value
+ O3 -> o3 = value
+ PM25 -> pm25 = value
+ PM10 -> pm10 = value
+ TEMPERATURE -> temperature = value
+ HUMIDITY -> humidity = value
+ VOC -> voc = value
+ NOI -> noi = value
+ WIND_SPEED -> windSpeed = value
+ WIND_DIRECTION -> windDirection = value
+ LNG -> TODO("no such factor")
+ LAT -> TODO("no such factor")
+ VELOCITY -> TODO("no such factor")
+ TIME -> TODO("no such factor")
+ HEIGHT -> TODO("no such factor")
+ else -> TODO("no such factor")
+ }
+}
+
+fun GridDataDetail.getByFactorType(type: FactorType?): Float? {
+ return when (type) {
+ NO2 -> no2
+ CO -> co
+ H2S -> h2s
+ SO2 -> so2
+ O3 -> o3
+ PM25 -> pm25
+ PM10 -> pm10
+ TEMPERATURE -> temperature
+ HUMIDITY -> humidity
+ VOC -> voc
+ NOI -> noi
+ WIND_SPEED -> windSpeed
+ WIND_DIRECTION -> windDirection
+ NO -> no
+ else -> null
+ }
+}
+
+fun List<GridDataDetail>.avg(): GridDataDetail {
+ //椋庡悜閲囩敤鍗曚綅鐭㈤噺娉曟眰鍙栧潎鍊�
+ var u = .0//涓滆タ鏂逛綅鍒嗛噺鎬诲拰
+ var v = .0//鍗楀寳鏂逛綅鍒嗛噺鎬诲拰
+ var c = 0//椋庡悜鏁版嵁璁℃暟
+
+ //闄ら鍚戝鐨勫叾浠栧洜瀛愰噰鐢ㄧ畻鏈钩鍧囨硶姹傚彇鍧囧��
+ val tmpList = mutableListOf<AvgPair>()
+ repeat(18) {
+ tmpList.add(AvgPair(0f, 0))
+ }
+
+ forEach { f ->
+ //椋庡悜
+ f.windDirection?.let { w ->
+ val r = Math.toRadians(w.toDouble())
+ u += sin(r)
+ v += cos(r)
+ c++
+ }
+ //鍏朵綑鍥犲瓙
+ tmpList[0].apply {
+ f.no2?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[1].apply {
+ f.co?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[2].apply {
+ f.h2s?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[3].apply {
+ f.so2?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[4].apply {
+ f.o3?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[5].apply {
+ f.pm25?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[6].apply {
+ f.pm10?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[7].apply {
+ f.temperature?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[8].apply {
+ f.humidity?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[9].apply {
+ f.voc?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[10].apply {
+ f.noi?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[11].apply {
+ f.windSpeed?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[12].apply {
+ f.no?.let {
+ t += it
+ this.c++
+ }
+ }
+ }
+
+ return GridDataDetail().apply {
+ no2 = tmpList[0].avg()
+ co = tmpList[1].avg()
+ h2s = tmpList[2].avg()
+ so2 = tmpList[3].avg()
+ o3 = tmpList[4].avg()
+ pm25 = tmpList[5].avg()
+ pm10 = tmpList[6].avg()
+ temperature = tmpList[7].avg()
+ humidity = tmpList[8].avg()
+ voc = tmpList[9].avg()
+ noi = tmpList[10].avg()
+ windSpeed = tmpList[11].avg()
+ no = tmpList[12].avg()
+
+ if (c != 0) {
+ val avgU = u / c
+ val avgV = v / c
+ var a = atan(avgU / avgV)
+ a = Math.toDegrees(a)
+ /**
+ * avgU>0;avgV>0: 鐪熷疄瑙掑害澶勪簬绗竴璞¢檺锛屼慨姝e�间负+0掳
+ * avgU>0;avgV<0: 鐪熷疄瑙掑害澶勪簬绗簩璞¢檺锛屼慨姝e�间负+180掳
+ * avgU<0;avgV<0: 鐪熷疄瑙掑害澶勪簬绗笁璞¢檺锛屼慨姝e�间负+180掳
+ * avgU<0;avgV>0: 鐪熷疄瑙掑害澶勪簬绗洓璞¢檺锛屼慨姝e�间负+360掳
+ */
+ a += if (avgV > 0) {
+ if (avgU > 0) 0 else 360
+ } else {
+ 180
+ }
+ windDirection = round(a.toFloat())
+ }
+ }
+}
+/** GridDataDetail-over ********************************************************************/
\ No newline at end of file
--
Gitblit v1.9.3