From 4a976d3763be8a7bed743faf24abf2718ae18e31 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期三, 15 十月 2025 17:34:14 +0800 Subject: [PATCH] 2025.10.15 1. 走航季度报告相关数据计算逻辑调整 --- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/DataAnalysisServiceImpl.kt | 86 ++++++++++++++++++++++++++++++++++++++---- 1 files changed, 77 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/DataAnalysisServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/DataAnalysisServiceImpl.kt index 3e20de7..31c44cd 100644 --- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/DataAnalysisServiceImpl.kt +++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/DataAnalysisServiceImpl.kt @@ -23,7 +23,6 @@ import com.flightfeather.uav.socket.eunm.FactorType import com.flightfeather.uav.socket.sender.MsgType import org.springframework.stereotype.Service -import tk.mybatis.mapper.entity.Example import java.util.* /** @@ -43,7 +42,7 @@ private val sourceTraceRep: SourceTraceRep, private val sceneInfoRep: SceneInfoRep, private val satelliteGridRep: SatelliteGridRep, - private val satelliteDataCalculateService: SatelliteDataCalculateService + private val satelliteDataCalculateService: SatelliteDataCalculateService, ) : DataAnalysisService { /** @@ -108,6 +107,18 @@ return summary } + override fun generateMissionSummary(missionCode: String): MissionSummary.Summary { + val mission = missionRep.findOne(missionCode) ?: throw BizException("璧拌埅浠诲姟涓嶅瓨鍦�") + val clues = sourceTraceRep.fetchList( + mission.deviceCode, + mission.startTime, + mission.endTime, + MsgType.PolClue + ) as List<PollutedClue?> + val summary = MissionSummary().execute(mission.startTime, mission.endTime, listOf(mission), clues) + return summary + } + /** * 鐢熸垚璧拌埅浠诲姟娓呭崟锛堟寜鏃堕棿鍜屽尯鍩熺瓫閫夛級 * 鏍规嵁鏃堕棿鑼冨洿鍜岃鏀垮尯鍒掓煡璇㈣蛋鑸换鍔★紝骞跺叧鑱旀薄鏌撶嚎绱㈡暟鎹敓鎴愪换鍔″垪琛� @@ -166,11 +177,17 @@ * @param startTime 鏌ヨ璧峰鏃堕棿锛堝寘鍚級 * @param endTime 鏌ヨ缁撴潫鏃堕棿锛堝寘鍚級 * @param areaVo 鍖哄煙鍙傛暟锛屽寘鍚渷銆佸競銆佸尯缂栫爜 + * @param granularity 鏁版嵁棰楃矑搴︼紝鍙�夊�间负SECOND, MINUTE, HOUR, 榛樿MINUTE * @return 浠诲姟璇︽儏鍒楄〃锛屾瘡涓厓绱犲寘鍚换鍔″畬鏁翠俊鎭�佹薄鏌撶嚎绱㈠強瀹炴椂鐩戞祴鏁版嵁 * @see MissionRep.findByAreaAndTime 鍖哄煙鏃堕棿绛涢�夋暟鎹簮 * @see realTimeDataRep.fetchData 瀹炴椂鏁版嵁鑾峰彇鎺ュ彛 */ - override fun generateMissionDetail(startTime: Date, endTime: Date, areaVo: AreaVo): List<MissionInventory.MissionDetail> { + override fun generateMissionDetail( + startTime: Date, + endTime: Date, + areaVo: AreaVo, + granularity: String?, + ): List<MissionInventory.MissionDetail> { val missionCluesData = missionRep.findByAreaAndTime(areaVo, startTime, endTime).filterNotNull().map { Triple( it, @@ -185,7 +202,26 @@ SceneType.TYPE21.value ) ) - return generateMissionDetail(keyScenes, missionCluesData) + return generateMissionDetail(keyScenes, missionCluesData, granularity ?: "MINUTE") + } + + override fun generateMissionDetail(missionCode: String, granularity: String?): MissionInventory.MissionDetail { + val mission = missionRep.findOne(missionCode) ?: throw BizException("浠诲姟涓嶅瓨鍦�") + val missionClues = sourceTraceRep.fetchList( + mission.deviceCode, + mission.startTime, + mission.endTime, + MsgType.PolClue + ) as List<PollutedClue?> + val realTimeData = realTimeDataRep.fetchData(mission) + val keyScenes = sceneInfoRep.findBySceneTypes( + listOf( + SceneType.TYPE19.value, + SceneType.TYPE20.value, + SceneType.TYPE21.value + ) + ) + return MissionInventory().generateMissionDetail(keyScenes, mission, missionClues, realTimeData, granularity ?: "MINUTE") } /** @@ -199,9 +235,10 @@ override fun generateMissionDetail( keyScenes: List<SceneInfo?>, missionCluesData: List<Triple<Mission, List<PollutedClue?>, List<BaseRealTimeData>>>, + granularity: String, ): List<MissionInventory.MissionDetail> { return missionCluesData.map { - MissionInventory().generateMissionDetail(keyScenes, it.first, it.second, it.third) + MissionInventory().generateMissionDetail(keyScenes, it.first, it.second, it.third, granularity) } } @@ -209,6 +246,8 @@ startTime: Date, endTime: Date, areaVo: AreaVo, + removeOtherDistrict: Boolean, + removeNoPollutedSource: Boolean, ): List<MissionRiskArea.ClueByArea> { val clues = mutableListOf<PollutedClue?>() missionRep.findByAreaAndTime(areaVo, startTime, endTime).onEach { @@ -216,6 +255,34 @@ val clue = sourceTraceRep.fetchList(it.deviceCode, it.startTime, it.endTime, MsgType.PolClue) as List<PollutedClue?> clues.addAll(clue) } + if (removeOtherDistrict) { + clues.removeIf { + !areaVo.districtName.isNullOrBlank() && + (it?.pollutedArea?.address.isNullOrBlank() + || !it!!.pollutedArea!!.address!!.contains(areaVo.districtName!!)) + } + } + if (removeNoPollutedSource) { + clues.removeIf { it?.pollutedSource?.sceneList.isNullOrEmpty() } + } +// val keyScenes = sceneInfoRep.findBySceneTypes( +// listOf( +// SceneType.TYPE19.value, +// SceneType.TYPE20.value, +// SceneType.TYPE21.value +// ) +// ) + return MissionRiskArea().generateClueByRiskArea(clues) + } + + override fun generateClueByRiskArea(missionCode: String): List<MissionRiskArea.ClueByArea> { + val mission = missionRep.findOne(missionCode) ?: throw BizException("浠诲姟涓嶅瓨鍦�") + val pollutedClues = sourceTraceRep.fetchList( + mission.deviceCode, + mission.startTime, + mission.endTime, + MsgType.PolClue + ) as List<PollutedClue?> val keyScenes = sceneInfoRep.findBySceneTypes( listOf( SceneType.TYPE19.value, @@ -223,14 +290,14 @@ SceneType.TYPE21.value ) ) - return generateClueByRiskArea(keyScenes, clues) + return generateClueByRiskArea(keyScenes, pollutedClues) } override fun generateClueByRiskArea( keyScenes: List<SceneInfo?>, pollutedClues: List<PollutedClue?>, ): List<MissionRiskArea.ClueByArea> { - return MissionRiskArea().generateClueByRiskArea(keyScenes, pollutedClues) + return MissionRiskArea().generateClueByKeyRiskScene(keyScenes, pollutedClues) } override fun generateGridFusion( @@ -257,8 +324,9 @@ val gridDataDetailList = missionGroups.mapNotNull { (degree, missionList) -> // 绛涢�夊嚭鏈夌綉鏍艰瀺鍚堟暟鎹殑璧拌埅浠诲姟(鍚屾椂鑾峰彇瀵瑰簲鐨勮瀺鍚堟暟鎹甶d鍒楄〃) val gridDataIds = mutableListOf<Int>() - val validMissions = missionList.filter {mission -> - val gridData = satelliteGridRep.fetchGridData(GridData().apply { missionCode = mission?.missionCode }).firstOrNull() + val validMissions = missionList.filter { mission -> + val gridData = + satelliteGridRep.fetchGridData(GridData().apply { missionCode = mission?.missionCode }).firstOrNull() val res = gridData != null if (res) gridDataIds.add(gridData?.id ?: 0) res -- Gitblit v1.9.3