feiyu02
2025-08-14 b10c22af595bd995e56946bff63b8f2f984b13e8
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/config/RTExcWindLevelConfig.kt
@@ -3,6 +3,7 @@
import com.flightfeather.uav.biz.FactorFilter
import com.flightfeather.uav.biz.dataanalysis.BaseAnalysisConfig
import com.flightfeather.uav.biz.sourcetrace.model.DistanceType
import com.flightfeather.uav.socket.eunm.FactorType
/**
 *
@@ -16,13 +17,25 @@
        val mutationRate: Pair<Double, Double>,
        val distanceType: DistanceType,
        val countLimit: Int,
    )
    ){
}
    // 是否联网查找对应路段地址信息
    var isSearchAddress = true
    // 限定距离内(单位:米)
    var distanceLimit = 3000
    // 限定时间内(单位:分钟)
    var timeLimit = 3
    // 溯源扩散偏移角度(单位:度)
    var sourceTraceDegOffset = 120.0
    // 定时线索分析时间间隔(单位:分钟)
    var analysisPeriod = 5
    // 定时分析间隔中,立即进行线索分析的最小线索量(单位:个)
    var analysisCount = 4
    /****数据突变*****************************************************************************/
    // 0 - 1级风
    var windLevelCondition1 = WindLevelCondition(
        .0 to 1.5,
@@ -44,8 +57,8 @@
        1.6 to 7.9,
        0.2 to Double.MAX_VALUE,
        DistanceType.TYPE3,
//        3
        1
        2
//        1
    )
    // 5 - 6级风
@@ -53,45 +66,141 @@
        8.0 to 13.8,
        0.1 to Double.MAX_VALUE,
        DistanceType.TYPE4,
        3
        2
    )
    // 溯源扩散偏移角度(单位:度)
    var sourceTraceDegOffset = 120.0
    /****数据快速上升*****************************************************************************/
    // 在风速处于0 - 1.5 m/s 之间时
    var changeRateUp1 = mutableMapOf(
        // PM2.5在一个监测周期(4秒)上升量级大于等于4μg/m³,连续发生2次
        FactorType.PM25 to WindLevelCondition(
            .0 to 1.5,
            4.0 to Double.MAX_VALUE,
            DistanceType.TYPE1,
//            fixme: 2025.7.24 因为低风速下数据变化次数设置过多,导致遗漏识别
//            3
            2
        ),
        // PM10在一个监测周期(4秒)上升量级大于等于4μg/m³,连续发生2次
        FactorType.PM10 to WindLevelCondition(
            .0 to 1.5,
            4.0 to Double.MAX_VALUE,
            DistanceType.TYPE1,
            2
        ),
        // VOC在一个监测周期(4秒)上升量级大于等于6μg/m³,连续发生1次
        FactorType.VOC to WindLevelCondition(
            .0 to 1.5,
            6.0 to Double.MAX_VALUE,
            DistanceType.TYPE1,
            1
        ),
    )
    // 在风速处于1.6 - 7.9 m/s 之间时
    var changeRateUp2 = mutableMapOf(
        // PM2.5在一个监测周期(4秒)上升量级大于等于4μg/m³,连续发生3次
        FactorType.PM25 to WindLevelCondition(
            1.6 to 7.9,
            4.0 to Double.MAX_VALUE,
            DistanceType.TYPE3,
            2
        ),
        // PM10在一个监测周期(4秒)上升量级大于等于4μg/m³,连续发生3次
        FactorType.PM10 to WindLevelCondition(
            1.6 to 7.9,
            4.0 to Double.MAX_VALUE,
            DistanceType.TYPE3,
            2
        ),
        // VOC在一个监测周期(4秒)上升量级大于等于6μg/m³,连续发生1次
        FactorType.VOC to WindLevelCondition(
            1.6 to 7.9,
            6.0 to Double.MAX_VALUE,
            DistanceType.TYPE3,
            1
        ),
    )
    // 在风速处于8.0 - 13.8 m/s 之间时
    var changeRateUp3 = mutableMapOf(
        // PM2.5在一个监测周期(4秒)上升量级大于等于4μg/m³,连续发生3次
        FactorType.PM25 to WindLevelCondition(
            8.0 to 13.8,
            4.0 to Double.MAX_VALUE,
            DistanceType.TYPE4,
            2
        ),
        // PM10在一个监测周期(4秒)上升量级大于等于4μg/m³,连续发生3次
        FactorType.PM10 to WindLevelCondition(
            8.0 to 13.8,
            4.0 to Double.MAX_VALUE,
            DistanceType.TYPE4,
            2
        ),
        // VOC在一个监测周期(4秒)上升量级大于等于6μg/m³,连续发生1次
        FactorType.VOC to WindLevelCondition(
            8.0 to 13.8,
            6.0 to Double.MAX_VALUE,
            DistanceType.TYPE4,
            1
        ),
    )
    // 定时线索分析时间间隔(单位:分钟)
    var analysisPeriod = 15
    // 定时分析间隔中,立即进行线索分析的最小线索量(单位:个)
    var analysisCount = 2
    /****数据快速下降提醒*****************************************************************************/
    var changeRateWarnDown = mutableMapOf(
        // PM2.5在一个监测周期(4秒)内下降量级大于等于2μg/m³,连续发生3次
        FactorType.PM25 to WindLevelCondition(
            .0 to Double.MAX_VALUE,
            -Double.MAX_VALUE to -2.0,
            DistanceType.TYPE1,
            3
        ),
        // PM10在一个监测周期(4秒)内下降量级大于等于2μg/m³,连续发生3次
        FactorType.PM10 to WindLevelCondition(
            .0 to Double.MAX_VALUE,
            -Double.MAX_VALUE to -2.0,
            DistanceType.TYPE1,
            3
        ),
        // VOC在一个监测周期(4秒)内下降量级大于等于3μg/m³,连续发生3次
        FactorType.VOC to WindLevelCondition(
            .0 to Double.MAX_VALUE,
            -Double.MAX_VALUE to -3.0,
            DistanceType.TYPE1,
            3
        ),
    )
    /****数据有上升趋势提醒*****************************************************************************/
    var changeRateWarnUp = mutableMapOf(
        // PM2.5在一个监测周期(4秒)上升量级在2 - 4μg/m³之间,连续发生3次
        FactorType.PM25 to WindLevelCondition(
            .0 to Double.MAX_VALUE,
            2.0 to 4.0,
            DistanceType.TYPE1,
            2
        ),
        // PM10在一个监测周期(4秒)上升量级在2 - 4μg/m³之间,连续发生3次
        FactorType.PM10 to WindLevelCondition(
            .0 to Double.MAX_VALUE,
            2.0 to 4.0,
            DistanceType.TYPE1,
            2
        ),
        // VOC在一个监测周期(4秒)上升量级在3 - 6μg/m³之间,连续发生2次
        FactorType.VOC to WindLevelCondition(
            .0 to Double.MAX_VALUE,
            3.0 to 6.0,
            DistanceType.TYPE1,
            2
        ),
    )
//    // 0 - 1级风
//    var windLevelCondition1 = WindLevelCondition(
//        .0 to 1.5,
//        listOf(0.5 to DistanceType.TYPE1, 0.2 to DistanceType.TYPE2,),
//        listOf(1, 1)
//    )
//
//    // 0 - 1级风
//    var windLevelCondition1_1 = WindLevelCondition(
//        .0 to 1.5,
//        0.2 to DistanceType.TYPE2,
//        1
//    )
//
//    // 2 - 4级风
//    var windLevelCondition2 = WindLevelCondition(
//        1.6 to 7.9,
//        listOf(0.2 to DistanceType.TYPE3),
////        listOf(3)
//        listOf(1)
//    )
//
//    // 5 - 6级风
//    var windLevelCondition3 = WindLevelCondition(
//        8.0 to 13.8,
//        listOf(0.1 to DistanceType.TYPE4),
//        listOf(3)
//    )
    /****滑动平均值异常*****************************************************************************/
    // 求滑动平均值的数据组个数
    var changeTrendGroup = 12
    // 滑动平均值连续
    var changeTrendInterval = 12
    var changeTrendRate = .2
    // 滑动平均值变化率异常连续次数
    var changeTrendTimes = 3
}