feiyu02
2024-05-31 da431c25dfe5122e4ed70372da36ede3e4eaec4a
src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
@@ -1,5 +1,7 @@
package com.flightfeather.uav.socket.eunm
import com.flightfeather.uav.biz.dataanalysis.BaseExceptionAnalysis
/**
 * @author riku
 * Date: 2020/6/10
@@ -14,14 +16,35 @@
    PM10(7, "PM10",3),
    TEMPERATURE(8,"TEMPERATURE",3),
    HUMIDITY(9, "HUMIDITY",3),
    VOC(10, "VOC",3),
    NOI(11, "NOI",3),//负氧离子
    LNG(12,"LNG",3),//经度
    LAT(13,"LAT",3);//纬度
    VOC(10, "VOC",6),
    NOI(11, "NOI",6),//负氧离子
    LNG(12,"LNG",6),//经度
    LAT(13,"LAT",5),//纬度
    VELOCITY(14, "VELOCITY", 3),//速度
    TIME(15, "TIME", 6),//时间
    WIND_SPEED(16, "WIND_SPEED", 3),
    WIND_DIRECTION(17, "WIND_DIRECTION", 2),
    HEIGHT(18, "HEIGHT", 3);
    companion object {
        /**
         * 通过索引获取枚举类型,用于数据分析
         * @see [BaseExceptionAnalysis]
         */
        fun getByIndex(index: Int): FactorType? = when (index) {
            0 -> NO2
            1 -> CO
            2 -> H2S
            3 -> SO2
            4 -> O3
            5 -> PM25
            6 -> PM10
            7 -> VOC
            else -> null
        }
        fun getByValue(value: Int): FactorType? = when (value) {
            NO2.value -> NO2
            CO.value -> CO
            H2S.value -> H2S
@@ -35,7 +58,116 @@
            NOI.value -> NOI
            LNG.value -> LNG
            LAT.value -> LAT
            VELOCITY.value -> VELOCITY
            TIME.value -> TIME
            WIND_SPEED.value -> WIND_SPEED
            WIND_DIRECTION.value -> WIND_DIRECTION
            HEIGHT.value -> HEIGHT
            else -> null
        }
        fun getByName(name: String?): FactorType? = when (name) {
            NO2.des -> NO2
            CO.des -> CO
            H2S.des -> H2S
            SO2.des -> SO2
            O3.des -> O3
            PM25.des -> PM25
            PM10.des -> PM10
            TEMPERATURE.des -> TEMPERATURE
            HUMIDITY.des -> HUMIDITY
            VOC.des -> VOC
            NOI.des -> NOI
            LNG.des -> LNG
            LAT.des -> LAT
            VELOCITY.des -> VELOCITY
            TIME.des -> TIME
            WIND_SPEED.des -> WIND_SPEED
            WIND_DIRECTION.des -> WIND_DIRECTION
            HEIGHT.des -> HEIGHT
            else -> null
        }
        fun getRange(name: String?): Pair<Double, Double>? {
            getByName(name)?.let {
                return getRange(it)
            }
            return null
        }
        /**
         * 获取监测因子的合理范围
         */
        fun getRange(type: FactorType): Pair<Double, Double>? = when (type) {
            NO2 -> Pair(0.1, 1000.0)
            CO -> Pair(1.0, 5000.0)
            H2S -> Pair(0.1, 1000.0)
            SO2 -> Pair(0.1, 1000.0)
            O3 -> Pair(0.1, 2000.0)
            PM25 -> Pair(0.1, 5000.0)
            PM10 -> Pair(0.1, 10000.0)
            TEMPERATURE -> Pair(-20.0, 70.0)
            HUMIDITY -> Pair(0.0, 110.0)
            VOC -> Pair(1.0, 5000.0)
            NOI -> Pair(0.1, 1000.0)
            LNG -> Pair(0.0, 180.0)
            LAT -> Pair(0.0, 90.0)
            VELOCITY -> Pair(0.0, 500.0)
            TIME -> null
            WIND_SPEED -> Pair(0.0, 100.0)
            WIND_DIRECTION -> Pair(0.0, 360.0)
            HEIGHT -> Pair(0.0, 1000.0)
            else -> null
        }
        fun getVMax(name: String?): Double? {
            getByName(name)?.let {
                return getVMax(it)
            }
            return null
        }
        /**
         * 不处理低于此值的值
         */
        fun getVMax(type: FactorType): Double? = when (type) {
            NO2 -> 10.0
            CO -> 100.0
            H2S -> 10.0
            SO2 -> 10.0
            O3 -> 10.0
            PM25 -> 10.0
            PM10 -> 10.0
            TEMPERATURE -> 10.0
            HUMIDITY -> 10.0
            VOC -> 10.0
            NOI -> 10.0
            LNG -> 0.0
            LAT -> 0.0
            VELOCITY -> 0.0
            TIME -> 0.0
            WIND_SPEED -> 2.0
            WIND_DIRECTION -> 0.0
            HEIGHT -> 0.0
            else -> null
        }
        fun outputFactor(factorName: String?): Boolean {
            return when (factorName) {
                NO2.des,
                CO.des,
                H2S.des,
                SO2.des,
                O3.des,
                PM25.des,
                PM10.des,
                TEMPERATURE.des,
                HUMIDITY.des,
                VOC.des,
                WIND_SPEED.des,
                WIND_DIRECTION.des -> true
                else -> false
            }
        }
    }
}