From 74ffc8ebf3a25d2e3cee758954ce6efc163cb864 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 02 十二月 2021 16:11:57 +0800
Subject: [PATCH] 1. 用电量日分析
---
src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 210 insertions(+), 0 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 1255efa..2c6cc71 100644
--- a/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt
+++ b/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt
@@ -1,9 +1,18 @@
package com.flightfeather.uav.domain.entity
+import com.flightfeather.uav.common.utils.DateUtil
+import com.flightfeather.uav.dataprocess.AvgPair
+import com.flightfeather.uav.lightshare.bean.DataVo
+import com.flightfeather.uav.socket.bean.AirData
+import com.flightfeather.uav.socket.eunm.FactorType
import java.math.BigDecimal
+import java.time.LocalDateTime
+import java.time.ZoneId
+import java.time.ZoneOffset
import java.util.*
import javax.persistence.Column
import javax.persistence.Id
+import kotlin.math.*
/**
* 瀹炴椂鐩戞祴鏁版嵁鍩虹被
@@ -67,4 +76,205 @@
var windDirection: Float? = null
var height: Float? = null
+
+ fun toDataVo() = DataVo().apply {
+ this.time = DateUtil.instance.dateToString(dataTime, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS)
+ this.deviceCode = this@BaseRealTimeData.deviceCode
+ this.lng = longitude?.toDouble()
+ this.lat = latitude?.toDouble()
+ this.values = mutableListOf<AirData>().apply {
+ add(AirData().apply { setData(FactorType.NO2, no2) })
+ add(AirData().apply { setData(FactorType.CO, co) })
+ add(AirData().apply { setData(FactorType.H2S, h2s) })
+ add(AirData().apply { setData(FactorType.SO2, so2) })
+ add(AirData().apply { setData(FactorType.O3, o3) })
+
+ add(AirData().apply { setData(FactorType.PM25, pm25) })
+ add(AirData().apply { setData(FactorType.PM10, pm10) })
+ add(AirData().apply { setData(FactorType.TEMPERATURE, temperature) })
+ add(AirData().apply { setData(FactorType.HUMIDITY, humidity) })
+ add(AirData().apply { setData(FactorType.VOC, voc) })
+
+ add(AirData().apply { setData(FactorType.NOI, noi) })
+ add(AirData().apply { setData(FactorType.LNG, lng) })
+ add(AirData().apply { setData(FactorType.LAT, lat) })
+ add(AirData().apply { setData(FactorType.VELOCITY, velocity) })
+ add(AirData().apply {
+ setData(FactorType.TIME, dataTime?.time?.toDouble())
+ statusList = listOf(time ?: "")
+ })
+ add(AirData().apply { setData(FactorType.WIND_SPEED, windSpeed) })
+ add(AirData().apply { setData(FactorType.WIND_DIRECTION, windDirection) })
+ add(AirData().apply { setData(FactorType.HEIGHT, height) })
+ }
+ }
+}
+
+fun List<BaseRealTimeData>.avg(): RealTimeDataGridMin {
+ //椋庡悜閲囩敤鍗曚綅鐭㈤噺娉曟眰鍙栧潎鍊�
+ var u = .0//涓滆タ鏂逛綅鍒嗛噺鎬诲拰
+ var v = .0//鍗楀寳鏂逛綅鍒嗛噺鎬诲拰
+ var c = 0//椋庡悜鏁版嵁璁℃暟
+
+ //闄ら鍚戝鐨勫叾浠栧洜瀛愰噰鐢ㄧ畻鏈钩鍧囨硶姹傚彇鍧囧��
+ val tmpList = mutableListOf<AvgPair>()
+ repeat(17) {
+ tmpList.add(AvgPair(0f, 0))
+ }
+
+ forEach {
+ //椋庡悜
+ it.windDirection?.let {w ->
+ val r = Math.toRadians(w.toDouble())
+ u += sin(r)
+ v += cos(r)
+ c++
+ }
+ //鍏朵綑鍥犲瓙
+ tmpList[0].apply {
+ it.latitude?.let {
+ t += it.toFloat()
+ this.c++
+ }
+ }
+ tmpList[1].apply {
+ it.longitude?.let {
+ t += it.toFloat()
+ this.c++
+ }
+ }
+ tmpList[2].apply {
+ it.altitude?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[3].apply {
+ it.no2?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[4].apply {
+ it.co?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[5].apply {
+ it.h2s?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[6].apply {
+ it.so2?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[7].apply {
+ it.o3?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[8].apply {
+ it.pm25?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[9].apply {
+ it.pm10?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[10].apply {
+ it.temperature?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[11].apply {
+ it.humidity?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[12].apply {
+ it.voc?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[13].apply {
+ it.noi?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[14].apply {
+ it.velocity?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[15].apply {
+ it.windSpeed?.let {
+ t += it
+ this.c++
+ }
+ }
+ tmpList[16].apply {
+ it.height?.let {
+ t += it
+ this.c++
+ }
+ }
+ }
+
+ return RealTimeDataGridMin().apply {
+ val time = LocalDateTime.ofInstant(get(0).dataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0)
+ deviceCode = get(0).deviceCode
+ dataTime = Date.from(time.atZone(ZoneId.systemDefault()).toInstant())
+ createTime = dataTime
+ latitude = tmpList[0].avg().toBigDecimal()
+ longitude = tmpList[1].avg().toBigDecimal()
+ altitude = tmpList[2].avg()
+ no2 = tmpList[3].avg()
+ co = tmpList[4].avg()
+ h2s = tmpList[5].avg()
+ so2 = tmpList[6].avg()
+ o3 = tmpList[7].avg()
+ pm25 = tmpList[8].avg()
+ pm10 = tmpList[9].avg()
+ temperature = tmpList[10].avg()
+ humidity = tmpList[11].avg()
+ voc = tmpList[12].avg()
+ noi = tmpList[13].avg()
+ velocity = tmpList[14].avg()
+ windSpeed = tmpList[15].avg()
+ height = tmpList[16].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())
+ }
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3