| | |
| | | package com.flightfeather.uav.biz.sourcetrace.exceptiontype |
| | | |
| | | import com.flightfeather.uav.biz.FactorFilter |
| | | import com.flightfeather.uav.biz.dataanalysis.model.ExceptionTag |
| | | import com.flightfeather.uav.biz.dataanalysis.model.ExceptionType |
| | | import com.flightfeather.uav.biz.sourcetrace.RealTimeAnalysisConfig |
| | | import com.flightfeather.uav.common.utils.MapUtil |
| | |
| | | * @date 2025/5/13 |
| | | * @author feiyu02 |
| | | */ |
| | | class RealTimeExceptionValueMutation : RealTimeExceptionContinuous { |
| | | @Deprecated("2025.5.29, 逻辑与业务不匹配,后续删除") |
| | | class RealTimeExceptionValueMutation : BaseRealTimeException<ExceptionTag> { |
| | | |
| | | constructor(config: RealTimeAnalysisConfig) : super(config) |
| | | constructor(config: RealTimeAnalysisConfig) : super(config, ExceptionTag::class.java) |
| | | |
| | | constructor(config: RealTimeAnalysisConfig, callback: NewExceptionCallback) : super(config, callback) |
| | | constructor(config: RealTimeAnalysisConfig, callback: NewExceptionCallback) : super(config, callback, ExceptionTag::class.java) |
| | | |
| | | /** |
| | | * 本异常的连续发生次数会根据异常的程度变化 |
| | |
| | | override fun getExceptionType(): ExceptionType { |
| | | return ExceptionType.TYPE4 |
| | | } |
| | | |
| | | override var judgeMethod: JudgeMethod = JudgeMethod.M2 |
| | | |
| | | override fun judgeException(p: BaseRealTimeData?, n: BaseRealTimeData): MutableMap<FactorType, Boolean> { |
| | | val res = mutableMapOf<FactorType, Boolean>() |
| | |
| | | return res |
| | | } |
| | | |
| | | override fun judgeExceptionCount(tag: Tag): Boolean { |
| | | // 首个数据没有前一个数据参照,不算异常值,最后一个数据是判断结束的正常值,因此异常数据个数的计算下标为sIndex和eIndex |
| | | val sIndex = tag.sIndex |
| | | val eIndex = tag.eIndex - 1 |
| | | override fun judgeExceptionCount(tag: ExceptionTag, factorType: FactorType?): Boolean { |
| | | val count = tag.exceptionData.size |
| | | |
| | | val b1 = special && (eIndex - sIndex) >= (config.mutationNum / 2) |
| | | val b2 = (eIndex - sIndex) >= config.mutationNum |
| | | val b1 = special && count >= (config.mutationNum / 2) |
| | | val b2 = count >= config.mutationNum |
| | | special = false |
| | | return b1 || b2 |
| | | } |
| | | |
| | | override fun needCut(tag: Tag): Boolean { |
| | | override fun needCut(tag: ExceptionTag, hasException: Boolean?, data: BaseRealTimeData): Boolean { |
| | | // 按照时长和距离限制将异常截取 |
| | | if (tag.exceptionData.isEmpty()) return false |
| | | |
| | | val se = tag.exceptionData.first() |
| | | val ee = tag.exceptionData.last() |
| | | val ee = data |
| | | |
| | | val sTime = LocalDateTime.ofInstant(se.dataTime?.toInstant(), ZoneId.systemDefault()) |
| | | val eTime = LocalDateTime.ofInstant(ee.dataTime?.toInstant(), ZoneId.systemDefault()) |