From c56e1e74426238939f229f0005828d05089715ff Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 03 七月 2025 17:30:58 +0800
Subject: [PATCH] 2025.7.3 1. 新增动态污染溯源新的判定逻辑

---
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt |   45 +++++++++++++++++++++++++--------------------
 1 files changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt
index 5b3c06a..53532f6 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt
@@ -31,11 +31,11 @@
     /**
      * 鍒嗘瀽缁撴灉
      */
-    inner class AnalysisResult{
+    inner class AnalysisResult {
         // 鎸夌収琚壂鎻忔鏁伴檷搴忔帓鍒楃殑姹℃煋婧愬垪琛�
         var sortedSceneList: List<Pair<SceneInfo?, Int>>? = null
         var time: Date? = null
-        var advice:String?= null
+        var advice: String? = null
         var direction: AMapService.AMapDirection? = null
     }
 
@@ -60,7 +60,7 @@
     private var analysisTimer: Timer? = null
 
     // 瀹氭椂姹℃煋鍒嗘瀽浠诲姟
-    private var lastAnalysisOnTimeTask:TimerTask? = null
+    private var lastAnalysisOnTimeTask: TimerTask? = null
 
     // 瀹氭椂姹℃煋鍒嗘瀽浠诲姟杩愯鐘舵��
     private var analysisTaskIsRunning = false
@@ -128,8 +128,8 @@
         val statistic = AnalysisStatistic()
         // 鍏辨湁澶氬皯鐩稿叧姹℃煋婧愶紝鍝簺姹℃煋婧愯鎵弿娆℃暟杈冨
         val sceneMap = mutableMapOf<String?, Pair<SceneInfo?, Int>>()
-        clueList.forEach {c->
-            c.pollutedSource?.sceneList?.forEach { s->
+        clueList.forEach { c ->
+            c.pollutedSource?.sceneList?.forEach { s ->
                 if (!sceneMap.containsKey(s?.guid)) {
                     sceneMap[s?.guid] = s to 1
                 } else {
@@ -145,11 +145,12 @@
      * 绾跨储鍒嗘瀽
      */
     private fun analysis() {
+        if (clueList.isEmpty()) return
         val result = AnalysisResult()
         // 鍏辨湁澶氬皯鐩稿叧姹℃煋婧愶紝鍝簺姹℃煋婧愯鎵弿娆℃暟杈冨
         val sceneMap = mutableMapOf<String?, Pair<SceneInfo?, Int>>()
-        clueList.forEach {c->
-            c.pollutedSource?.sceneList?.forEach { s->
+        clueList.forEach { c ->
+            c.pollutedSource?.sceneList?.forEach { s ->
                 if (!sceneMap.containsKey(s?.guid)) {
                     sceneMap[s?.guid] = s to 1
                 } else {
@@ -157,37 +158,41 @@
                 }
             }
         }
-        val res = sceneMap.entries.sortedBy { it.value.second }
+        val res = sceneMap.entries.sortedByDescending { it.value.second }
         result.sortedSceneList = res.map { it.value }
 
         // 褰撳墠鐨勮蛋鑸暟鎹殑瀹氫綅鍜屾薄鏌撴簮璺濈鏄惁鏄�愭笎鎺ヨ繎锛岃嫢璧拌埅杩滅浜嗕富瑕佹薄鏌撴簮锛屾彁绀虹敤鎴疯皟鏁磋蛋鑸矾绾�
         if (!result.sortedSceneList.isNullOrEmpty()) {
             val sT = clueList.first().pollutedData?.startTime
+            val eT = clueList.last().pollutedData?.endTime
             val closetScene = result.sortedSceneList?.first()
-            result.advice = "鏍规嵁${sT}璧风殑${clueList.size}鏉℃渶鏂版薄鏌撶嚎绱紝姹℃煋婧怺${closetScene?.first?.name}]琚娆℃函婧愶紝鍏锋湁杈冮珮姹℃煋椋庨櫓锛岀幇鎻愪緵鏂扮殑璧拌埅鎺ㄨ崘璺嚎锛屽彲缁忚繃璇ユ薄鏌撴簮銆�"
-
+            // 璧拌埅璺嚎璋冩暣寤鸿
+            result.advice =
+                "鏍规嵁${sT}鑷�${eT}鐨�${clueList.size}鏉℃函婧愬垏鐗囷紝椋庨櫓婧愩��" +
+                        "${closetScene?.first?.name}銆戣澶氭婧簮锛屽叿鏈夎緝楂樻薄鏌撻闄╋紝鐜版彁渚涙柊鐨勮蛋鑸帹鑽愯矾绾匡紝鍙粡杩囪姹℃煋婧愩��"
 
             val lastP = realTimeDataList.last()
+            // 寤鸿瀵瑰簲鐨勬暟鎹噰鏍锋椂闂�
+            result.time = lastP.dataTime
             if (lastP.longitude != null && lastP.latitude != null &&
                 lastP.longitude!! > BigDecimal.ZERO && lastP.latitude!! > BigDecimal.ZERO
                 && closetScene?.first?.longitude != null && closetScene.first?.latitude != null &&
-                closetScene.first?.longitude!! > BigDecimal.ZERO && closetScene.first?.latitude!! > BigDecimal.ZERO) {
+                closetScene.first?.longitude!! > BigDecimal.ZERO && closetScene.first?.latitude!! > BigDecimal.ZERO
+            ) {
 
                 val origin = MapUtil.wgs84ToGcj02(lastP.longitude!!.toDouble() to lastP.latitude!!.toDouble())
                 val destination = closetScene.first!!.longitude.toDouble() to closetScene.first!!.latitude.toDouble()
 
+                // 寤鸿鐨勮蛋鑸矾绾�
                 result.direction = AMapService.directionDriving(origin, destination)
             }
+            // 绾跨储鍒嗘瀽瀹屾垚鍚庯紝绉诲姩鑷冲巻鍙茬嚎绱㈠垪琛�
+            historyClueList.addAll(clueList)
+            clueList.clear()
+            realTimeDataList.clear()
+
+            callback(result)
         }
-
-
-        result.time = realTimeDataList.last().dataTime
-        // 绾跨储鍒嗘瀽瀹屾垚鍚庯紝绉诲姩鑷冲巻鍙茬嚎绱㈠垪琛�
-        historyClueList.addAll(clueList)
-        clueList.clear()
-        realTimeDataList.clear()
-
-        callback(result)
 //        TODO()
     }
 

--
Gitblit v1.9.3