From 176d7d8283e66ccf63878c9ab823e900df94b748 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期二, 05 八月 2025 17:20:58 +0800 Subject: [PATCH] 2025.8.5 1. 动态溯源模块添加延迟数据周期异常合并功能 --- src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt | 90 ++++++++++++++++++++++++++++++++++---------- 1 files changed, 69 insertions(+), 21 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt index c87812e..6035ec5 100644 --- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt +++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt @@ -18,39 +18,87 @@ * @date 2025/5/27 * @author feiyu02 */ -class PollutedClue() : BaseExceptionResult(){ +class PollutedClue() : BaseExceptionResult() { // constructor( -// start: BaseRealTimeData, -// end: BaseRealTimeData?, -// factor: FactorFilter.SelectedFactor, -// exceptionData: List<BaseRealTimeData>, -// eType: ExceptionType, -// config: RTExcWindLevelConfig, +// tag: ExceptionTag, factor: FactorFilter.SelectedFactor, eType: ExceptionType, config: RTExcWindLevelConfig, // windLevelCondition: RTExcWindLevelConfig.WindLevelCondition?, // ) : this() { -// if (exceptionData.isEmpty()) return -// pollutedData = PollutedData(start, end, factor, exceptionData, eType, windLevelCondition) -// pollutedArea = PollutedArea(exceptionData, config, windLevelCondition) +// if (tag.exceptionData.isEmpty()) return +// deviceCode = tag.startData?.deviceCode +// pollutedData = PollutedData( +// tag.startData!!, tag.endData, factor, tag.exceptionData, tag.historyData, eType, windLevelCondition +// ) +// pollutedArea = PollutedArea(tag.historyData, tag.exceptionData, config, windLevelCondition) // } constructor( - tag: ExceptionTag, factor: FactorFilter.SelectedFactor, eType: ExceptionType, config: RTExcWindLevelConfig, + exceptions: List<Pair<FactorFilter.SelectedFactor, ExceptionTag>>, + eType: ExceptionType, + config: RTExcWindLevelConfig, windLevelCondition: RTExcWindLevelConfig.WindLevelCondition?, - ) : this() -// this( -// tag.startData!!, tag.endData, factor, tag.exceptionData, eType, config, -// windLevelCondition -// ) - { - if (tag.exceptionData.isEmpty()) return - deviceCode = tag.startData?.deviceCode + ) : this() { + if (exceptions.isEmpty() || exceptions[0].second.exceptionData.isEmpty()) return + deviceCode = exceptions[0].second.startData?.deviceCode + var startData: BaseRealTimeData? = null + var endData: BaseRealTimeData? = null + var exceptionData = mutableListOf<BaseRealTimeData>() + var historyData = mutableListOf<BaseRealTimeData>() + exceptions.forEach { e -> + // 灏嗛噰鏍锋椂闂存渶鏃╃殑浣滀负寮�濮嬫暟鎹� + if (startData == null) { + startData = e.second.startData + } else { + if (e.second.startData?.dataTime!! < startData!!.dataTime) { + startData = e.second.startData + } + } + + // 灏嗛噰鏍锋椂闂存渶鏅氱殑浣滀负缁撴潫鏁版嵁 + if (endData == null) { + endData = e.second.endData + } else { + if (e.second.endData?.dataTime!! > endData!!.dataTime) { + endData = e.second.endData + } + } + + // 灏嗘墍鏈夊紓甯告暟鎹幓閲嶅悎骞� + if (exceptionData.isEmpty()) { + exceptionData = e.second.exceptionData + } else { + e.second.exceptionData.forEach { + if (exceptionData.find { d -> d.dataTime == it.dataTime } == null) { + exceptionData.add(it) + } + } + } + + // 灏嗘墍鏈夊巻鍙叉暟鎹幓閲嶅悎骞� + if (historyData.isEmpty()) { + historyData = e.second.historyData + } else { + e.second.historyData.forEach { + if (historyData.find { d -> d.dataTime == it.dataTime } == null) { + historyData.add(it) + } + } + } + } + // 鎸夌収閲囨牱鏃堕棿鍗囧簭鎺掑垪 + exceptionData.sortBy { it.dataTime } + historyData.sortBy { it.dataTime } + + // 鑾峰彇鍘婚噸鍚庣殑鐩戞祴鍥犲瓙绫诲瀷 + val factorList = exceptions.map { it.first }.distinct() pollutedData = PollutedData( - tag.startData!!, tag.endData, factor, tag.exceptionData, tag.historyData, eType, windLevelCondition + startData!!, endData, factorList, exceptionData, historyData, eType, windLevelCondition ) - pollutedArea = PollutedArea(tag.historyData, tag.exceptionData, config, windLevelCondition) + pollutedArea = PollutedArea(historyData, exceptionData, config, windLevelCondition) + } + /** * 6. 灞曠ず鏁版嵁鍙樺寲鎯呭喌锛屼笂鍗囬�熺巼绛夌瓑 */ -- Gitblit v1.9.3