| | |
| | | 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 |
| | | |
| | | /** |
| | | * 走航典型隐患区域 |
| | |
| | | */ |
| | | class MissionRiskArea { |
| | | |
| | | // 按区域分类的污染线索 |
| | | class ClueByArea { |
| | | var sceneInfo: SceneInfo? = null |
| | | // 所属街镇 |
| | |
| | | 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 |
| | | } |
| | | |
| | | /** |
| | |
| | | * @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 |
| | | } |
| | | } |