From 19c90b219bd80f82bfcf799a7adfd03fd469c0b7 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期三, 28 五月 2025 17:24:13 +0800
Subject: [PATCH] 1. 新增动态污染溯源新的判定逻辑(待完成)

---
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/DistanceType.kt                  |   13 ++++
 src/main/kotlin/com/flightfeather/uav/common/utils/MapUtil.kt                                |    6 +-
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt                  |   10 +++
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt                  |   35 +++++++++++
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/RealTimeExceptionAnalysisController.kt |   32 +++++++---
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt                |   12 ++++
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt                  |   18 ++++++
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/RealTimeExceptionResult.kt       |    2 
 src/main/kotlin/com/flightfeather/uav/socket/handler/UnderwayWebSocketServerHandler.kt       |   14 +++-
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt               |   10 +++
 10 files changed, 133 insertions(+), 19 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/RealTimeExceptionAnalysisController.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/RealTimeExceptionAnalysisController.kt
index 4c47d28..4670667 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/RealTimeExceptionAnalysisController.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/RealTimeExceptionAnalysisController.kt
@@ -43,7 +43,7 @@
                     .withMain(FactorType.VOC)
                     .create()
             )
-        initTask(config)
+        initTask()
     }
 
     constructor(sceneInfoRep: SceneInfoRep) : this(sceneInfoRep, null)
@@ -55,7 +55,7 @@
 
     private val taskList = mutableListOf<BaseExceptionAnalysis<RealTimeAnalysisConfig, RealTimeExceptionResult>>()
 
-    private fun initTask(config: RealTimeAnalysisConfig) {
+    fun initTask() {
         taskList.clear()
         taskList.apply {
             add(
@@ -139,9 +139,11 @@
 
         // 鏇存柊涓棿鐐逛俊鎭�
         ex.midData = avgData.apply {
+            dataTime = midData.dataTime
+            createTime = midData.createTime
             longitude = midData.longitude
             latitude = midData.latitude
-        }
+        }.toDataVo()
         // 鏇存柊婧簮鑼冨洿鍐呯殑姹℃煋鍦烘櫙淇℃伅
         ex.relatedSceneList = result
     }
@@ -164,14 +166,24 @@
         val eDeg = windDir + defaultDegOffset
         val distance = windSpeed * durationMin * 60
 
-        // 宸︿晶锛堥�嗘椂閽堜晶锛夐《鐐�
-        val p1 = MapUtil.getPointByLen(center, distance, sDeg * PI / 180)
-        // 椋庡悜鍙嶅悜椤剁偣
-        val p2 = MapUtil.getPointByLen(center, distance, windDir * PI / 180)
-        // 鍙充晶锛堥『鏃堕拡渚э級椤剁偣
-        val p3 = MapUtil.getPointByLen(center, distance, eDeg * PI / 180)
+        val result = mutableListOf(center)
+        var startDeg = sDeg
+        while (startDeg < eDeg) {
+            val p = MapUtil.getPointByLen(center, distance, startDeg * PI / 180)
+            result.add(p)
+            startDeg++
+        }
 
-        return listOf(center, p1, p2, p3)
+        return result
+
+//        // 宸︿晶锛堥�嗘椂閽堜晶锛夐《鐐�
+//        val p1 = MapUtil.getPointByLen(center, distance, sDeg * PI / 180)
+//        // 椋庡悜鍙嶅悜椤剁偣
+//        val p2 = MapUtil.getPointByLen(center, distance, windDir * PI / 180)
+//        // 鍙充晶锛堥『鏃堕拡渚э級椤剁偣
+//        val p3 = MapUtil.getPointByLen(center, distance, eDeg * PI / 180)
+//
+//        return listOf(center, p1, p2, p3)
     }
 
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/DistanceType.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/DistanceType.kt
new file mode 100644
index 0000000..4f7af43
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/DistanceType.kt
@@ -0,0 +1,13 @@
+package com.flightfeather.uav.biz.sourcetrace.model
+
+/**
+ * 鍔ㄦ�佹函婧愮嚎绱㈣窛绂荤被鍨�
+ * @date 2025/5/28
+ * @author feiyu02
+ */
+enum class DistanceType(val des: String) {
+    TYPE1("50绫�"),
+    TYPE2("50绫� - 500绫�"),
+    TYPE3("50绫� - 1鍏噷"),
+    TYPE4("50绫� - 2鍏噷")
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt
new file mode 100644
index 0000000..bcfe4e2
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt
@@ -0,0 +1,18 @@
+package com.flightfeather.uav.biz.sourcetrace.model
+
+/**
+ * 鍔ㄦ�佹函婧愭薄鏌撳尯鍩�
+ * 閫氳繃鍦板浘鍧愭爣鐐瑰舰鎴愬杈瑰舰鏉ユ弿杩颁竴鍧楁薄鏌撳尯鍩�
+ * @date 2025/5/27
+ * @author feiyu02
+ */
+class PollutedArea {
+
+    var name: String? = null
+
+    // 姹℃煋鑼冨洿鍖哄煙(缁忕含搴﹀杈瑰舰)
+    var polygon: List<Pair<Double, Double>>? = null
+
+    // 姹℃煋鍙兘鐨勫彂鐢熻窛绂�
+    var distanceType: DistanceType? = null
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt
new file mode 100644
index 0000000..9893656
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt
@@ -0,0 +1,10 @@
+package com.flightfeather.uav.biz.sourcetrace.model
+
+/**
+ * 姹℃煋绾跨储
+ * 鏍规嵁
+ * @date 2025/5/27
+ * @author feiyu02
+ */
+class PollutedClue {
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt
new file mode 100644
index 0000000..8ae7734
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt
@@ -0,0 +1,35 @@
+package com.flightfeather.uav.biz.sourcetrace.model
+
+import com.flightfeather.uav.domain.entity.BaseRealTimeData
+import com.flightfeather.uav.lightshare.bean.DataVo
+
+/**
+ * 姹℃煋鏁版嵁
+ * @date 2025/5/27
+ * @author feiyu02
+ */
+class PollutedData {
+
+    /**
+     *
+     * 1. 杞1.5m/s鍙婁互涓嬶紝
+     * 	鍓嶅悗鍊间笂鍗囧箙搴﹀湪50%浠ヤ笂1娆★紝璁や负鏄复杩戝彂鐢�(50绫�)
+     * 	鍓嶅悗鍊间笂鍗囧箙搴﹀湪20%浠ヤ笂1娆★紝璁や负鏄繙璺濈鍙戠敓锛�50绫� - 500绫筹級
+     * 	1.5 m/s鍙婁互涓嬶紝闈欑ǔ澶╂皵锛屼复杩戝彂鐢�(50绫�)
+     * 2. 1.6 - 7.9 m/s锛屽墠鍚庡�间笂鍗囧箙搴﹀湪20%浠ヤ笂3娆★紝璁や负鏄繙璺濈鍙戠敓锛�50绫� - 1鍏噷锛�
+     * 3. 8 - 13.8 m/s 浠ヤ笂锛屽墠鍚庡�间笂鍗囧箙搴﹀湪10%浠ヤ笂3娆★紝璁や负鏄繙璺濈鍙戠敓(50绫� - 2鍏噷)
+     */
+
+    // 椋庨��
+    var windSpeed: Float? = null
+
+    // 鍥犲瓙閲忕骇鍙樺寲骞呭害
+    var percentage: Float? = null
+
+    // 鍙戠敓娆℃暟
+    var times: Int? = null
+
+    // 寮傚父鐩戞祴鏁版嵁
+    var dataList: MutableList<BaseRealTimeData> = mutableListOf()
+    var dataVoList: MutableList<DataVo> = mutableListOf()
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt
new file mode 100644
index 0000000..d0e3fd0
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt
@@ -0,0 +1,12 @@
+package com.flightfeather.uav.biz.sourcetrace.model
+
+/**
+ * 姹℃煋鏉ユ簮
+ * 绯荤粺鍐呴儴鐨勬薄鏌撳満鏅�佺數瀛愬湴鍥炬悳绱㈠緱鍒扮殑瀹為檯璺璺彛绛夋爣蹇椾俊鎭�
+ * @date 2025/5/27
+ * @author feiyu02
+ */
+class PollutedSource {
+
+
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..e4eed40
--- /dev/null
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt
@@ -0,0 +1,10 @@
+package com.flightfeather.uav.biz.sourcetrace.model
+
+/**
+ * 姹℃煋鎯呭喌姹囨��
+ * 閽堝鍗曟璧拌埅锛屽畾鏃剁粺璁″凡鏈夋薄鏌撶嚎绱紝鎸夌収绛栫暐缁欏嚭璧拌埅寤鸿
+ * @date 2025/5/27
+ * @author feiyu02
+ */
+class PollutedSummary {
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/RealTimeExceptionResult.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/RealTimeExceptionResult.kt
index 7a4251f..e9d93e5 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/RealTimeExceptionResult.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/RealTimeExceptionResult.kt
@@ -49,7 +49,7 @@
     var latitude: BigDecimal? = null
 
     // 涓棿鏁版嵁鐐瑰潗鏍�
-    var midData: BaseRealTimeData? = null
+    var midData: DataVo? = null
 //    var midLongitude: BigDecimal? = null
 //    var midLatitude: BigDecimal? = null
 
diff --git a/src/main/kotlin/com/flightfeather/uav/common/utils/MapUtil.kt b/src/main/kotlin/com/flightfeather/uav/common/utils/MapUtil.kt
index 5ae24c7..a565a72 100644
--- a/src/main/kotlin/com/flightfeather/uav/common/utils/MapUtil.kt
+++ b/src/main/kotlin/com/flightfeather/uav/common/utils/MapUtil.kt
@@ -260,9 +260,9 @@
             val sqrtmagic = sqrt(magic);
             dlat = (dlat * 180.0) / (((a * (1 - ee)) / (magic * sqrtmagic)) * PI);
             dlng = (dlng * 180.0) / ((a / sqrtmagic) * cos(radlat) * PI);
-            val mglat = Math.round((lat * 2 - lat - dlat) * 1000000) / 1000000;
-            val mglng = Math.round((lng * 2 - lng - dlng) * 1000000) / 1000000;
-            return mglng.toDouble() to mglat.toDouble()
+            val mglat = Math.round((lat * 2 - lat - dlat) * 1000000).toDouble() / 1000000;
+            val mglng = Math.round((lng * 2 - lng - dlng) * 1000000).toDouble() / 1000000;
+            return mglng to mglat
         }
     }
 
diff --git a/src/main/kotlin/com/flightfeather/uav/socket/handler/UnderwayWebSocketServerHandler.kt b/src/main/kotlin/com/flightfeather/uav/socket/handler/UnderwayWebSocketServerHandler.kt
index 3c5b0fa..fef4d1a 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/handler/UnderwayWebSocketServerHandler.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/handler/UnderwayWebSocketServerHandler.kt
@@ -40,11 +40,15 @@
 
                 // Test
                 try {
-                    val data = GsonUtils.parserJsonToArrayBeans(msgTxt, DataVo::class.java)
-                    data.forEach {
-                        realTimeExceptionAnalysisController.addOneData(
-                            it.toBaseRealTimeData(BaseRealTimeData::class.java)
-                        )
+                    if (msgTxt == "start") {
+                        realTimeExceptionAnalysisController.initTask()
+                    } else {
+                        val data = GsonUtils.parserJsonToArrayBeans(msgTxt, DataVo::class.java)
+                        data.forEach {
+                            realTimeExceptionAnalysisController.addOneData(
+                                it.toBaseRealTimeData(BaseRealTimeData::class.java)
+                            )
+                        }
                     }
                 } catch (e: Exception) {
 //                    ctx?.channel()?.writeAndFlush(TextWebSocketFrame("褰撳墠涓烘祴璇曠姸鎬侊紝浼犺緭鐨勬暟鎹笉鏄蛋鑸暟鎹牸寮�"))

--
Gitblit v1.9.3