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() : BaseExceptionResult() {
|
|
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
|
|
|
// 获取去重后的监测因子类型
|
val factorList = exceptions.map { it.first }.distinct()
|
pollutedData = PollutedData(exceptions, eType)
|
pollutedArea = PollutedArea(pollutedData!!, config, windLevelCondition)
|
|
}
|
|
/**
|
* @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!!)
|
}
|
}
|
}
|