feiyu02
2024-08-29 e6cc379fbef57277568ee667ec07a508b3dcc479
src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt
@@ -1,18 +1,20 @@
package com.flightfeather.uav.domain.entity
import com.flightfeather.uav.biz.dataprocess.AvgPair
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.*
import kotlin.math.atan
import kotlin.math.cos
import kotlin.math.round
import kotlin.math.sin
/**
 * 实时监测数据基类
@@ -67,6 +69,9 @@
    @Column(name = "NOI")
    var noi: Float? = null
    @Column(name = "NO")
    var no: Float? = null
    var velocity: Float? = null
    @Column(name = "wind_speed")
@@ -106,11 +111,38 @@
            add(AirData().apply { setData(FactorType.WIND_SPEED, windSpeed) })
            add(AirData().apply { setData(FactorType.WIND_DIRECTION, windDirection) })
            add(AirData().apply { setData(FactorType.HEIGHT, height) })
            add(AirData().apply { setData(FactorType.NO, no) })
        }
    }
    fun getByFactorType(type: FactorType?): Float? {
        return when (type) {
            FactorType.NO2 -> no2
            FactorType.CO -> co
            FactorType.H2S -> h2s
            FactorType.SO2 -> so2
            FactorType.O3 -> o3
            FactorType.PM25 -> pm25
            FactorType.PM10 -> pm10
            FactorType.TEMPERATURE -> temperature
            FactorType.HUMIDITY -> humidity
            FactorType.VOC -> voc
            FactorType.NOI -> noi
            FactorType.LNG -> longitude?.toFloat()
            FactorType.LAT -> latitude?.toFloat()
            FactorType.VELOCITY -> velocity
//            FactorType.TIME -> dataTime?.time?.toFloat()
            FactorType.WIND_SPEED -> windSpeed
            FactorType.WIND_DIRECTION -> windDirection
            FactorType.HEIGHT -> height
            FactorType.NO -> no
            else -> null
        }
    }
}
fun List<BaseRealTimeData>.avg(): RealTimeDataGridMin {
fun List<BaseRealTimeData>.avg(): BaseRealTimeData {
    //风向采用单位矢量法求取均值
    var u = .0//东西方位分量总和
    var v = .0//南北方位分量总和
@@ -118,7 +150,7 @@
    //除风向外的其他因子采用算术平均法求取均值
    val tmpList = mutableListOf<AvgPair>()
    repeat(17) {
    repeat(18) {
        tmpList.add(AvgPair(0f, 0))
    }
@@ -233,6 +265,12 @@
                this.c++
            }
        }
        tmpList[17].apply {
            it.no?.let {
                t += it
                this.c++
            }
        }
    }
    return RealTimeDataGridMin().apply {
@@ -257,6 +295,7 @@
        velocity = tmpList[14].avg()
        windSpeed = tmpList[15].avg()
        height = tmpList[16].avg()
        no = tmpList[17].avg()
        if (c != 0) {
            val avgU = u / c