| | |
| | | */ |
| | | 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 |
| | | // 起始数据与末尾数据间隔 |
| | | open var durationCount = 1 |
| | | private var existException = false |
| | | |
| | | /** |
| | | * 判断是否满足异常条件 |
| | |
| | | abstract fun judgeDuration(sIndex: Int, eIndex: Int): Boolean |
| | | |
| | | override fun init() { |
| | | super.init() |
| | | startData = null |
| | | lastData = null |
| | | sIndex = 0 |
| | | eIndex = -1 |
| | | existException = false |
| | | } |
| | | |
| | | override fun onNextData(data: DustSiteData) { |
| | |
| | | startData = data |
| | | } |
| | | // 判断相邻数据是否连续并且是否满足异常判断 |
| | | if (!(isContinuous(lastData, data) && judgeException(lastData, data))) { |
| | | if (!isContinuous(lastData, data)) { |
| | | checkResult() |
| | | sIndex = eIndex |
| | | startData = data |
| | | if (eIndex - sIndex >= durationCount) { |
| | | sIndex = eIndex |
| | | startData = data |
| | | } |
| | | } else { |
| | | if (judgeException(lastData, data)) { |
| | | existException = true |
| | | } else { |
| | | checkResult() |
| | | if (eIndex - sIndex >= durationCount) { |
| | | sIndex = eIndex |
| | | startData = data |
| | | } |
| | | } |
| | | } |
| | | // if (!(isContinuous(lastData, data) && judgeException(lastData, data))) { |
| | | // |
| | | // } |
| | | lastData = data |
| | | } |
| | | |
| | |
| | | * 检查连续异常结束时,是否符合异常存储条件 |
| | | */ |
| | | private fun checkResult() { |
| | | if (judgeDuration(sIndex, eIndex)) { |
| | | resultList.add(newResult(lastData, startData!!)) |
| | | if (existException && judgeDuration(sIndex, eIndex)) { |
| | | startData?.let { |
| | | resultList.add(newResult(it, lastData)) |
| | | } |
| | | existException = false |
| | | } |
| | | } |
| | | } |