feiyu02
2023-10-20 3371ed856d8712732b3f46e30e41e652ff5d7781
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.flightfeather.monitor.analysis.dust
 
import com.flightfeather.monitor.analysis.BaseDataAnalysis
import com.flightfeather.monitor.domain.ds1.entity.DustExceptionData
import com.flightfeather.monitor.domain.ds1.entity.DustExceptionSetting
import com.flightfeather.monitor.domain.ds1.entity.DustSiteData
import com.flightfeather.monitor.enumration.dust.ExceptionType
import java.time.Duration
 
/**
 * 扬尘监测数据异常分析基类
 */
abstract class BaseDustExceptionAnalysis(config: DustExceptionSetting) :
    BaseDataAnalysis<DustSiteData, DustExceptionSetting, DustExceptionData>(config) {
 
    /**
     * 确定异常类型
     */
    abstract fun getExceptionType(): ExceptionType
 
    /**
     * 判断相邻数据是否连续
     */
    open fun isContinuous(d1: DustSiteData?, d2: DustSiteData): Boolean {
        if (d1 == null) return true
 
        val t1 = d1.lst
        val t2 = d2.lst
        return Duration.between(t1?.toInstant(), t2.toInstant()).toMinutes() <= 30
    }
 
    /**
     * 生成一条异常分析结果
     */
    protected fun newResult(p: DustSiteData?, n: DustSiteData): DustExceptionData {
        val eType = getExceptionType()
        return DustExceptionData().apply {
            mnCode = n.mnCode
            exception = eType.des
            exceptionType = eType.value
            region = config.region
            beginTime = if (p == null) n.lst else p.lst
            endTime = n.lst
        }
    }
}