package com.flightfeather.monitor.analysis.dust
|
|
import com.flightfeather.monitor.domain.ds1.entity.DustExceptionSetting
|
import com.flightfeather.monitor.domain.ds1.entity.DustSiteData
|
|
/**
|
* 连续类型的异常分析基类
|
*/
|
abstract class BaseExceptionContinuous(config: DustExceptionSetting) : BaseDustExceptionAnalysis(config) {
|
|
private var sIndex = 0
|
private var startData: DustSiteData? = null
|
private var eIndex = -1
|
private var lastData: DustSiteData? = null
|
|
/**
|
* 判断是否满足异常条件
|
*/
|
abstract fun judgeException(p: DustSiteData?, n: DustSiteData): Boolean
|
|
/**
|
* 判断异常出现的连续时长是否满足条件
|
*/
|
abstract fun judgeDuration(sIndex: Int, eIndex: Int): Boolean
|
|
override fun init() {
|
startData = null
|
lastData = null
|
sIndex = 0
|
eIndex = -1
|
}
|
|
override fun onNextData(data: DustSiteData) {
|
eIndex++
|
if (lastData == null) {
|
startData = data
|
}
|
// 判断相邻数据是否连续并且是否满足异常判断
|
if (!(isContinuous(lastData, data) && judgeException(lastData, data))) {
|
checkResult()
|
sIndex = eIndex
|
startData = data
|
}
|
lastData = data
|
}
|
|
override fun onDone() {
|
checkResult()
|
}
|
|
/**
|
* 检查连续异常结束时,是否符合异常存储条件
|
*/
|
private fun checkResult() {
|
if (judgeDuration(sIndex, eIndex)) {
|
resultList.add(newResult(lastData, startData!!))
|
}
|
}
|
}
|