| | |
| | | import com.flightfeather.uav.biz.FactorFilter |
| | | import com.flightfeather.uav.biz.dataanalysis.BaseExceptionAnalysis |
| | | import com.flightfeather.uav.biz.dataanalysis.model.DataAnalysisConfig |
| | | import com.flightfeather.uav.biz.dataanalysis.model.ExceptionResult |
| | | import com.flightfeather.uav.biz.dataanalysis.model.ExceptionType |
| | | import com.flightfeather.uav.domain.entity.BaseRealTimeData |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | |
| | | /** |
| | | * 滑动平均值突变异常 |
| | | */ |
| | | class ExceptionSlideAverage(config: DataAnalysisConfig) : BaseExceptionAnalysis(config) { |
| | | class ExceptionSlideAverage(config: DataAnalysisConfig) : |
| | | BaseExceptionAnalysis<DataAnalysisConfig, ExceptionResult>(config) { |
| | | |
| | | private val historyDataList = mutableListOf<BaseRealTimeData>() |
| | | private val tempDataList = mutableListOf<BaseRealTimeData>() |
| | |
| | | var sIndex = 0 |
| | | |
| | | // 起始数据对象 |
| | | var startData :BaseRealTimeData? = null |
| | | var startData: BaseRealTimeData? = null |
| | | |
| | | // 末尾数据下标 |
| | | var eIndex = -1 |
| | |
| | | var exceptionData = mutableListOf<BaseRealTimeData>() |
| | | |
| | | // 是否存在异常 |
| | | var existException = false |
| | | var exceptionExisted = false |
| | | |
| | | fun refreshAfterCheckResult(data: BaseRealTimeData) { |
| | | // 判断并更新起始点位置 |
| | |
| | | lastData = null |
| | | |
| | | tagMap.clear() |
| | | config.factorFilter.mainList().forEach {f-> |
| | | config.factorFilter.mainList().forEach { f -> |
| | | tagMap[f] = Tag() |
| | | } |
| | | // avgListReverse.clear() |
| | |
| | | if (tempDataList.size > config.changeTrendGroup) { |
| | | tempDataList.removeAt(0) |
| | | } |
| | | config.factorFilter.selectedList.forEach {s-> |
| | | config.factorFilter.selectedList.forEach { s -> |
| | | val f = s.main |
| | | tagMap[f]?.let { |
| | | it.eIndex++ |
| | |
| | | if (tempDataList.size == config.changeTrendGroup) { |
| | | calAvg(f, tempDataList) |
| | | if (checkSlideAvg(f)) { |
| | | it.existException = true |
| | | it.exceptionExisted = true |
| | | it.exceptionData.add(data) |
| | | } else { |
| | | checkResult(s) |
| | |
| | | private fun checkResult(factor: FactorFilter.SelectedFactor? = null) { |
| | | val tag = tagMap[factor?.main] |
| | | if (factor != null && tag != null) { |
| | | if (tag.existException) { |
| | | if (tag.exceptionExisted) { |
| | | tag.startData?.let { |
| | | resultList.add(newResult(it, lastData, factor, tag.exceptionData)) |
| | | resultList.add(newResult(it, tag.endData, factor, tag.exceptionData)) |
| | | } |
| | | tag.existException = false |
| | | tag.exceptionExisted = false |
| | | } |
| | | } else { |
| | | config.factorFilter.selectedList.forEach { f -> |
| | | val tag1 = tagMap[f.main] ?: return@forEach |
| | | if (tag1.existException) { |
| | | if (tag1.exceptionExisted) { |
| | | tag1.startData?.let { |
| | | resultList.add(newResult(it, lastData, f, tag1.exceptionData)) |
| | | resultList.add(newResult(it, tag1.endData, f, tag1.exceptionData)) |
| | | } |
| | | tag1.existException = false |
| | | tag1.exceptionExisted = false |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | fun newResult( |
| | | start: BaseRealTimeData, |
| | | end: BaseRealTimeData?, |
| | | factor: FactorFilter.SelectedFactor, |
| | | exceptionData: List<BaseRealTimeData>, |
| | | ): ExceptionResult { |
| | | val eType = getExceptionType() |
| | | return ExceptionResult(start, end, factor, exceptionData, config.mission.missionCode, eType) |
| | | } |
| | | } |