feiyu02
2024-07-02 bf3bf9ff25ac106b556b2427cc382c8fcca63bff
src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt
@@ -2,10 +2,12 @@
import com.flightfeather.uav.biz.FactorFilter
import com.flightfeather.uav.biz.dataanalysis.exceptiontype.ExceptionDataExceed
import com.flightfeather.uav.biz.dataanalysis.exceptiontype.ExceptionSlideAverage
import com.flightfeather.uav.biz.dataanalysis.exceptiontype.ExceptionValueMutation
import com.flightfeather.uav.biz.dataanalysis.model.DataAnalysisConfig
import com.flightfeather.uav.biz.dataanalysis.model.ExceptionResult
import com.flightfeather.uav.biz.dataanalysis.model.ExceptionSetting
import com.flightfeather.uav.common.location.LocationRoadNearby
import com.flightfeather.uav.domain.entity.Mission
import com.flightfeather.uav.domain.repository.RealTimeDataRep
import org.springframework.stereotype.Component
@@ -16,6 +18,7 @@
@Component
class ExceptionAnalysisController(
    private val realTimeDataRep: RealTimeDataRep,
    private val locationRoadNearby: LocationRoadNearby,
) {
    var running = false
@@ -27,12 +30,13 @@
        taskList.apply {
            add(ExceptionDataExceed(config))
            add(ExceptionValueMutation(config))
            add(ExceptionSlideAverage(config))
        }
    }
    fun run(mission: Mission, factorFilter: FactorFilter): List<ExceptionResult> {
        running = true
        val config = DataAnalysisConfig(mission, ExceptionSetting(), 8, factorFilter)
        val config = DataAnalysisConfig(mission, ExceptionSetting(), factorFilter)
        initTask(config)
        val result = mutableListOf<ExceptionResult>()
@@ -43,8 +47,26 @@
        }
        // 各个异常分析分别结束
        taskList.forEach { it.onDone() }
        // 存储分析结果
        taskList.forEach {
            // 查询异常周边可能污染源
            it.resultList.forEach { r->
                if (r.longitude != null && r.latitude != null) {
                    val sceneList = locationRoadNearby.searchByRadius(
                        r.longitude!!.toDouble() to r.latitude!!.toDouble(), config.radius)
                    if (sceneList.isNotEmpty()) {
                        val idList = mutableListOf<String>()
                        val nameList = mutableListOf<String>()
                        sceneList.forEach { s->
                            idList.add(s?.guid?:"")
                            nameList.add(s?.name ?: "")
                        }
                        r.relatedSceneId = idList
                        r.relatedSceneName = nameList
                    }
                }
            }
            // 存储分析结果
            result.addAll(it.resultList)
        }
        running = false