From 707b00a0ca6604c249a110b376ac1e44e408e624 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期四, 04 九月 2025 18:24:39 +0800 Subject: [PATCH] 2025.9.4 1. 新增走航任务统计功能(待完成) --- src/main/kotlin/com/flightfeather/uav/domain/entity/ExpandFun.kt | 208 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 205 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 46d5633..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,9 +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 /** * 鏁版嵁搴撹〃瀹炰綋鎵╁睍鏂规硶 @@ -16,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(鐗╃悊閲�)") @@ -41,13 +48,20 @@ } 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) } } return row.toTypedArray() } + +fun RealTimeData.toDataVo() = DataVo( + DateUtil.instance.dateToString(dataTime, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS), + deviceCode, + GsonUtils.parserJsonToArrayBeans(factors, AirData::class.java), + longitude?.toDouble(), latitude?.toDouble() +) fun ElectricMinuteValue.toAirData(): List<AirData> { return listOf( @@ -97,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