From 8fc27dba6719041402e3e3c099e2f3e01d9d52c7 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期三, 16 七月 2025 17:30:56 +0800 Subject: [PATCH] 2025.7.16 1. 修改动态溯源异常判断逻辑 --- src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 114 insertions(+), 2 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 9893656..19eedc2 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 @@ -1,10 +1,122 @@ package com.flightfeather.uav.biz.sourcetrace.model +import com.flightfeather.uav.biz.FactorFilter +import com.flightfeather.uav.biz.dataanalysis.BaseExceptionResult +import com.flightfeather.uav.biz.dataanalysis.model.ExceptionTag +import com.flightfeather.uav.biz.dataanalysis.model.ExceptionType +import com.flightfeather.uav.biz.sourcetrace.config.RTExcWindLevelConfig +import com.flightfeather.uav.common.utils.DateUtil +import com.flightfeather.uav.common.utils.MapUtil +import com.flightfeather.uav.domain.entity.BaseRealTimeData +import com.flightfeather.uav.domain.entity.SceneInfo +import com.flightfeather.uav.domain.repository.SceneInfoRep +import com.flightfeather.uav.socket.sender.MsgType + /** * 姹℃煋绾跨储 - * 鏍规嵁 + * 閫氳繃姹℃煋鏁版嵁[PollutedData],姹℃煋鍖哄煙[PollutedArea],姹℃煋鏉ユ簮[PollutedSource]锛屽舰鎴愪竴鏉℃薄鏌撴函婧愮嚎绱� * @date 2025/5/27 * @author feiyu02 */ -class PollutedClue { +class PollutedClue() : BaseExceptionResult() { + +// constructor( +// tag: ExceptionTag, factor: FactorFilter.SelectedFactor, eType: ExceptionType, config: RTExcWindLevelConfig, +// windLevelCondition: RTExcWindLevelConfig.WindLevelCondition?, +// ) : this() { +// 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( + exceptions: List<Pair<FactorFilter.SelectedFactor, ExceptionTag>>, + eType: ExceptionType, + config: RTExcWindLevelConfig, + windLevelCondition: RTExcWindLevelConfig.WindLevelCondition?, + ) : 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 } + pollutedData = PollutedData( + startData!!, endData, factorList, exceptionData, historyData, eType, windLevelCondition + ) + pollutedArea = PollutedArea(historyData, exceptionData, config, windLevelCondition) + + } + + + /** + * 6. 灞曠ず鏁版嵁鍙樺寲鎯呭喌锛屼笂鍗囬�熺巼绛夌瓑 + */ + + /** + * @see [MsgType] + */ + var msgType: Int? = null + + var deviceCode: String? = null + + var pollutedData: PollutedData? = null + + var pollutedArea: PollutedArea? = null + + var pollutedSource: PollutedSource? = null + + /** + * 鏌ユ壘绯荤粺鍐呴儴婧簮鑼冨洿鍐呯殑姹℃煋浼佷笟 + */ + fun searchScenes(sceneInfoRep: SceneInfoRep) { + if (pollutedArea == null || pollutedData == null) return + pollutedSource = PollutedSource().also { + it.searchScenes(pollutedArea!!, sceneInfoRep, pollutedData!!) + } + } } \ No newline at end of file -- Gitblit v1.9.3