Riku
2025-05-14 cf160e28026ed1ed8bea82701d66e79a1085c503
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/exceptiontype/BaseRealTimeException.kt
@@ -2,9 +2,11 @@
import com.flightfeather.uav.biz.FactorFilter
import com.flightfeather.uav.biz.dataanalysis.BaseExceptionContinuous
import com.flightfeather.uav.biz.dataanalysis.model.ExceptionTag
import com.flightfeather.uav.biz.sourcetrace.RealTimeAnalysisConfig
import com.flightfeather.uav.biz.sourcetrace.model.RealTimeExceptionResult
import com.flightfeather.uav.domain.entity.BaseRealTimeData
import com.flightfeather.uav.lightshare.eunm.ExceptionStatusType
// 异常数据生成回调类
typealias NewExceptionCallback = (ex: RealTimeExceptionResult) -> Unit
@@ -15,10 +17,10 @@
 * @date 2025/5/13
 * @author feiyu02
 */
abstract class BaseRealTimeException(config: RealTimeAnalysisConfig) :
    BaseExceptionContinuous<RealTimeAnalysisConfig, RealTimeExceptionResult>(config) {
abstract class BaseRealTimeException<T : ExceptionTag>(config: RealTimeAnalysisConfig, tagClz: Class<T>) :
    BaseExceptionContinuous<T, RealTimeAnalysisConfig, RealTimeExceptionResult>(config, tagClz) {
    constructor(config: RealTimeAnalysisConfig, callback: NewExceptionCallback) : this(config){
    constructor(config: RealTimeAnalysisConfig, callback: NewExceptionCallback, tagClz: Class<T>) : this(config, tagClz){
        this.callback = callback
    }
@@ -34,19 +36,18 @@
                // 起始数据
                it.endData = data
                if (it.startData == null) {
                    it.refreshAfterCheckResult(data)
                    it.refreshWithNextException(data)
                }
                // 判断相邻数据是否连续或者是否满足自定义截取条件
                if (!isContinue || needCut(it)) {
                    // 记录异常,结束异常的实时状态播报
                    recordException(s, it, data)
                } else {
                    if (hasException[f] == true) {
                        it.existException = true
                        it.exceptionData.add(data)
                    }
                    // 移除了父类原有逻辑,改为当满足异常条件时,需要实时推送播报异常的状态变化,但不截取异常
                    if (hasException[f] == true) {
                        it.addExceptionData(data)
                    checkResult(s)
                    }
                }
            }
        }
@@ -63,11 +64,11 @@
        return RealTimeExceptionResult(start, end, factor, exceptionData, eType)
    }
    override fun onNewException(tag: Tag, factor: FactorFilter.SelectedFactor) {
        super.onNewException(tag, factor)
    override fun onNewException(tag: T, factor: FactorFilter.SelectedFactor, exceptionStatus: ExceptionStatusType) {
        super.onNewException(tag, factor, exceptionStatus)
        callback?.let { func ->
            val exc = resultList.last()
            func.invoke(exc)
            val exc = tag.exceptionResult.last()
            func.invoke(exc as RealTimeExceptionResult)
        }
    }
}