feiyu02
2025-10-21 eb3dd00b0b7fcda477229d518d250f9c842b790b
src/main/kotlin/com/flightfeather/uav/biz/report/MissionRiskArea.kt
@@ -5,6 +5,7 @@
import com.flightfeather.uav.domain.entity.SceneInfo
import com.flightfeather.uav.domain.entity.avg
import com.flightfeather.uav.socket.eunm.AggregatedFactorType
import com.flightfeather.uav.socket.eunm.FactorType
/**
 * 走航典型隐患区域
@@ -13,6 +14,7 @@
 */
class MissionRiskArea {
    // 按区域分类的污染线索
    class ClueByArea {
        var sceneInfo: SceneInfo? = null
        // 所属街镇
@@ -23,10 +25,24 @@
        var roadinter:String? = null
        var clueByFactorList: MutableList<ClueByFactor>? = null
    }
    // 按因子分类的污染线索
    class ClueByFactor {
        var factor: String? = null
        var clues: MutableList<PollutedClue>? = null
    }
    // 分类线索
    class ClassifyClue {
        // 按所在街镇分类
        var township:String? = null
        // 按因子类型分类
        var factorTag: String? = null
        // 实际包含的因子类型
        var factors: List<FactorType>? = null
        // 按所在道路分类
        var street: String? = null
        // 线索
        var clue: PollutedClue? = null
    }
    /**
@@ -101,43 +117,70 @@
     * @param pollutedClues 污染线索列表
     * @return 按区域和因子分组的污染线索
     */
    fun generateClueByRiskArea(pollutedClues: List<PollutedClue?>): List<ClueByArea> {
        val result = mutableListOf<ClueByArea>()
    fun generateClueByRiskArea(pollutedClues: List<PollutedClue?>): List<ClassifyClue> {
        val clues =  pollutedClues.map { pollutedClue ->
            ClassifyClue().apply {
                this.township = pollutedClue?.pollutedArea?.township
        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 factorTypes = pollutedClue?.pollutedData?.statisticMap?.keys ?: emptyList()
                val firstFactorType = factorTypes.firstOrNull()
                // 聚合因子类型
                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)
                }
                this.factorTag = afType?.des ?: firstFactorType?.des
                this.factors = factorTypes.toList()
                // 按所在道路分类
                this.street = pollutedClue?.pollutedArea?.street
                clueByFactor.clues?.add(pollutedClue)
                this.clue = pollutedClue
            }
        }
        // 统计每条道路下的线索数量
        val streetClueCount = clues.groupingBy { it.street }.eachCount()
        // 筛选出道路下线索数量超过1条的
        val validStreets = streetClueCount.filter { it.value > 1 }.keys
        // 筛选出有效道路下的线索
        val validClues = clues.filter { it.street in validStreets }
        return validClues
        return result
//        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
//                // 使用直接的因子类型
//                val factorName = 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
    }
}