Riku
2025-10-15 53857f42f777e2b9753b8f00cce1a60ce3dcb8fd
src/main/kotlin/com/flightfeather/uav/biz/report/MissionRiskArea.kt
@@ -15,6 +15,12 @@
    class ClueByArea {
        var sceneInfo: SceneInfo? = null
        // 所属街镇
        var township:String? = null
        // 格式化地址
        var address: String? = null
        // 交叉路段信息
        var roadinter:String? = null
        var clueByFactorList: MutableList<ClueByFactor>? = null
    }
@@ -23,7 +29,13 @@
        var clues: MutableList<PollutedClue>? = null
    }
    fun generateClueByRiskArea(keyScenes: List<SceneInfo?>, pollutedClues: List<PollutedClue?>): List<ClueByArea> {
    /**
     * 生成走航典型隐患区域,根据关键场景列表进行分组
     * @param keyScenes 关键场景列表
     * @param pollutedClues 污染线索列表
     * @return 按区域和因子分组的污染线索
     */
    fun generateClueByKeyRiskScene(keyScenes: List<SceneInfo?>, pollutedClues: List<PollutedClue?>): List<ClueByArea> {
        val result = mutableListOf<ClueByArea>()
        
        pollutedClues.forEach { pollutedClue ->
@@ -83,4 +95,49 @@
        
        return result
    }
    /**
     * 生成走航典型隐患区域,根据污染线索溯源地址进行分组
     * @param pollutedClues 污染线索列表
     * @return 按区域和因子分组的污染线索
     */
    fun generateClueByRiskArea(pollutedClues: List<PollutedClue?>): List<ClueByArea> {
        val result = mutableListOf<ClueByArea>()
        pollutedClues.forEach { pollutedClue ->
            if (pollutedClue == null) return@forEach
            val dataList = pollutedClue.pollutedData?.dataList ?: emptyList()
            if (dataList.isEmpty()) return@forEach
            // 按污染溯源地址街镇和因子分组线索
            pollutedClue.pollutedArea?.township?.let { township ->
                var clueByArea = result.find { it.township == township }
                if (clueByArea == null) {
                    clueByArea = ClueByArea().apply {
                        this.township = township
                        this.address = pollutedClue.pollutedArea?.address
                        this.roadinter = pollutedClue.pollutedArea?.roadinter
                        this.clueByFactorList = mutableListOf()
                    }
                    result.add(clueByArea)
                }
                val firstFactorType = pollutedClue.pollutedData?.statisticMap?.keys?.first()
                val afType =  AggregatedFactorType.getAFType(firstFactorType)
                val factorName = afType?.des ?: firstFactorType?.des
                var clueByFactor = clueByArea.clueByFactorList?.find { it.factor == factorName }
                if (clueByFactor == null) {
                    clueByFactor = ClueByFactor().apply {
                        this.factor = factorName
                        this.clues = mutableListOf()
                    }
                    clueByArea.clueByFactorList?.add(clueByFactor)
                }
                clueByFactor.clues?.add(pollutedClue)
            }
        }
        return result
    }
}