From 1571cd0f137ced4345fa8785e166a29dc31b6ad1 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期二, 13 五月 2025 17:42:39 +0800 Subject: [PATCH] 1. 新增动态污染溯源的数据异常判断逻辑 2. 新增动态污染溯源websocket连接功能 --- src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt | 80 +--------------------------------------- 1 files changed, 2 insertions(+), 78 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt index 4023fec..54e05f4 100644 --- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt +++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt @@ -1,93 +1,17 @@ package com.flightfeather.uav.biz.dataanalysis import com.flightfeather.uav.biz.FactorFilter -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.common.utils.DateUtil import com.flightfeather.uav.domain.entity.BaseRealTimeData -import com.flightfeather.uav.domain.entity.avg -import com.flightfeather.uav.socket.eunm.FactorType -import java.time.Duration /** * 鐩戞祴鏁版嵁寮傚父鍒嗘瀽鍩虹被 */ -abstract class BaseExceptionAnalysis(config: DataAnalysisConfig) : - BaseDataAnalysis<BaseRealTimeData, DataAnalysisConfig, ExceptionResult>(config) { +abstract class BaseExceptionAnalysis<V : BaseAnalysisConfig, Y : BaseExceptionResult>(config: V) : + BaseDataAnalysis<BaseRealTimeData, V, Y>(config) { /** * 纭畾寮傚父绫诲瀷 */ abstract fun getExceptionType(): ExceptionType - - /** - * 鍒ゆ柇鐩搁偦鏁版嵁鏄惁杩炵画 - */ - open fun isContinuous(d1: BaseRealTimeData?, d2: BaseRealTimeData?): Boolean { - if (d1 == null || d2 == null) return true - - val t1 = d1.dataTime - val t2 = d2.dataTime - return Duration.between(t1?.toInstant(), t2?.toInstant()).toMillis() <= (20 * 1000) - } - - /** - * 鐢熸垚涓�鏉″紓甯稿垎鏋愮粨鏋� - */ - open fun newResult( - start: BaseRealTimeData, end: BaseRealTimeData?, factor: FactorFilter.SelectedFactor, - exceptionData: List<BaseRealTimeData>, - ): ExceptionResult { - val eType = getExceptionType() - return ExceptionResult().apply { - missionCode = config.mission.missionCode - deviceCode = start.deviceCode - exception = eType.des - exceptionType = eType.value - factorId = factor.main.value - factorName = factor.main.des - subFactorId = factor.subs.map { it.value } - subFactorName = factor.subs.map { it.des } - selectedFactor = factor - startDate = start.dataTime - endDate = end?.dataTime - startTime = DateUtil.instance.dateToString(start.dataTime, DateUtil.DateStyle.HH_MM_SS) - endTime = DateUtil.instance.dateToString(end?.dataTime, DateUtil.DateStyle.HH_MM_SS) ?: startTime - startData = start.getByFactorType(factor.main) - endData = end?.getByFactorType(factor.main) ?: startData - - val avgData = exceptionData.avg() - // 姹傚彇姹℃煋鏁版嵁鐨勪腑蹇冨潗鏍� - longitude = avgData.longitude - latitude = avgData.latitude - // 姹傚彇涓绘薄鏌撳洜瀛愮殑鍧囧�煎拰鑼冨洿 - val s = dataSummary(exceptionData, factor.main) - avg = s.first - min = s.second - max = s.third - - exceptionData.forEach { dataList.add(it) } - } - } - - private fun dataSummary(exceptionData: List<BaseRealTimeData?>, factorType: FactorType): Triple<Float, Float, Float> { - var min = -1f - var max = -1f - var total = 0f - var count = 0 - exceptionData.forEach { - val value = it?.getByFactorType(factorType) ?: return@forEach - if (min == -1f || min > value) { - min = value - } - if (max == -1f || max < value) { - max = value - } - total += value - count++ - } - val avg = if (count == 0) 0f else total / count - return Triple(avg, min, max) - } } \ No newline at end of file -- Gitblit v1.9.3