feiyu02
2025-08-28 ddaa44400aa478058ffe9349d59904a130b7ce9c
src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt
@@ -5,11 +5,14 @@
import com.flightfeather.uav.lightshare.bean.DataVo
import com.flightfeather.uav.socket.bean.AirData
import com.flightfeather.uav.socket.eunm.FactorType
import java.io.Serializable
import java.math.BigDecimal
import java.time.LocalDateTime
import java.time.ZoneId
import java.util.*
import javax.persistence.Column
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id
import kotlin.math.atan
import kotlin.math.cos
@@ -19,8 +22,9 @@
/**
 * 实时监测数据基类
 */
open class BaseRealTimeData {
open class BaseRealTimeData : Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Int? = null
    @Column(name = "device_code")
@@ -69,6 +73,9 @@
    @Column(name = "NOI")
    var noi: Float? = null
    @Column(name = "NO")
    var no: Float? = null
    var velocity: Float? = null
    @Column(name = "wind_speed")
@@ -108,20 +115,7 @@
            add(AirData().apply { setData(FactorType.WIND_SPEED, windSpeed) })
            add(AirData().apply { setData(FactorType.WIND_DIRECTION, windDirection) })
            add(AirData().apply { setData(FactorType.HEIGHT, height) })
        }
    }
    fun getByFactorIndex(i: Int): Float? {
        return when (i) {
            0 -> no2
            1 -> co
            2 -> h2s
            3 -> so2
            4 -> o3
            5 -> pm25
            6 -> pm10
            7 -> voc
            else -> null
            add(AirData().apply { setData(FactorType.NO, no) })
        }
    }
@@ -141,10 +135,11 @@
            FactorType.LNG -> longitude?.toFloat()
            FactorType.LAT -> latitude?.toFloat()
            FactorType.VELOCITY -> velocity
//            FactorType.TIME -> noi
//            FactorType.TIME -> dataTime?.time?.toFloat()
            FactorType.WIND_SPEED -> windSpeed
            FactorType.WIND_DIRECTION -> windDirection
            FactorType.HEIGHT -> height
            FactorType.NO -> no
            else -> null
        }
    }
@@ -152,6 +147,9 @@
}
fun List<BaseRealTimeData>.avg(): BaseRealTimeData {
    if (isEmpty()) {
        return BaseRealTimeData()
    }
    //风向采用单位矢量法求取均值
    var u = .0//东西方位分量总和
    var v = .0//南北方位分量总和
@@ -159,7 +157,7 @@
    //除风向外的其他因子采用算术平均法求取均值
    val tmpList = mutableListOf<AvgPair>()
    repeat(17) {
    repeat(18) {
        tmpList.add(AvgPair(0f, 0))
    }
@@ -274,10 +272,18 @@
                this.c++
            }
        }
        tmpList[17].apply {
            it.no?.let {
                t += it
                this.c++
            }
        }
    }
    return RealTimeDataGridMin().apply {
        val time = LocalDateTime.ofInstant(get(0).dataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0)
        val time = LocalDateTime
            .ofInstant(get(0).dataTime?.toInstant() ?: Date().toInstant(), ZoneId.systemDefault())
            .withSecond(0)
        deviceCode = get(0).deviceCode
        dataTime = Date.from(time.atZone(ZoneId.systemDefault()).toInstant())
        createTime = dataTime
@@ -298,6 +304,7 @@
        velocity = tmpList[14].avg()
        windSpeed = tmpList[15].avg()
        height = tmpList[16].avg()
        no = tmpList[17].avg()
        if (c != 0) {
            val avgU = u / c