From 8c6e742562d0c8647e0ee8deff01a3eb176d677b Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 02 九月 2025 17:30:47 +0800
Subject: [PATCH] 2025.9.2 1. 新增走航任务统计功能(待完成)

---
 src/main/kotlin/com/flightfeather/uav/domain/repository/SourceTraceRep.kt          |    1 
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt        |    2 
 src/test/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceControllerTest.kt |   26 +++++++-----
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt      |    3 +
 src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt     |   82 +++++++++++++++++++++++++++--------------
 5 files changed, 73 insertions(+), 41 deletions(-)

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
index 266ed2a..d5e9614 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt
@@ -84,7 +84,7 @@
                 avgPer = calPer(f.main)
                 avgRate = calRate(f.main)
 
-                val s = dataSummary(exceptionData, f.main)
+                val s = dataSummary(dataList, f.main)
                 avg = s.first
                 min = s.second
                 max = s.third
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
index d25f252..4b4adee 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt
@@ -62,13 +62,14 @@
             val closePolygonTmp = pollutedArea.closePolygon!!
             val closeFb = MapUtil.calFourBoundaries(closePolygonTmp)
             val closeSceneList = sceneInfoRep.findByCoordinateRange(closeFb)
-            // 2. 鍐嶇簿纭垽鏂槸鍚﹀湪鍙嶅悜婧簮鍖哄煙澶氳竟褰㈠唴閮�
             closeSceneList.forEach {
                 val point = it!!.longitude.toDouble() to it.latitude.toDouble()
                 if (MapUtil.isPointInPolygon(point, closePolygonTmp)) {
                     result.add(it)
                 }
             }
+            // 鍘婚噸
+            result = result.distinctBy { it.guid }.toMutableList()
 
             // 鏍规嵁姹℃煋鍥犲瓙鐨勯噺绾э紝璁$畻涓昏鐨勬薄鏌撳満鏅被鍨嬶紝绛涢�夌粨鏋�
             val mainSceneType = calSceneType(pollutedData)
diff --git a/src/main/kotlin/com/flightfeather/uav/domain/repository/SourceTraceRep.kt b/src/main/kotlin/com/flightfeather/uav/domain/repository/SourceTraceRep.kt
index 23f46e0..f726760 100644
--- a/src/main/kotlin/com/flightfeather/uav/domain/repository/SourceTraceRep.kt
+++ b/src/main/kotlin/com/flightfeather/uav/domain/repository/SourceTraceRep.kt
@@ -134,6 +134,7 @@
                 .andGreaterThanOrEqualTo("startTime", mission.startTime)
                 .andLessThanOrEqualTo("endTime", mission.endTime)
         }).map { it?.id }
+        if (idList.isEmpty()) return 0
         sourceTraceMsgMapper.deleteByExample(Example(SourceTraceMsg::class.java).apply {
             createCriteria().andIn("id", idList)
         })
diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt
index f1f7957..ea3ca27 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt
@@ -8,6 +8,8 @@
 import io.swagger.annotations.ApiParam
 import org.springframework.format.annotation.DateTimeFormat
 import org.springframework.web.bind.annotation.*
+import java.time.LocalDateTime
+import java.time.ZoneId
 import java.util.*
 
 /**
@@ -38,55 +40,79 @@
     @PostMapping("/report/missionSummary")
     fun generateMissionSummary(
         @ApiParam("寮�濮嬫椂闂�") @RequestParam
-        @JsonFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        @DateTimeFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        startTime: Date,
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        startTime: LocalDateTime,
         @ApiParam("缁撴潫鏃堕棿") @RequestParam
-        @JsonFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        @DateTimeFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        endTime: Date,
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        endTime: LocalDateTime,
         @ApiParam("鍖哄煙") @RequestBody areaVo: AreaVo,
-    ) = resPack { dataAnalysisService.generateMissionSummary(startTime, endTime, areaVo) }
+    ) = resPack {
+        dataAnalysisService.generateMissionSummary(
+            Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
+            Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
+            areaVo
+        )
+    }
 
     @ApiOperation(value = "鐢熸垚璧拌埅浠诲姟娓呭崟")
     @PostMapping("/report/missionList")
     fun generateMissionList(
         @ApiParam("寮�濮嬫椂闂�") @RequestParam
-        @JsonFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        @DateTimeFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        startTime: Date,
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        startTime: LocalDateTime,
         @ApiParam("缁撴潫鏃堕棿") @RequestParam
-        @JsonFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        @DateTimeFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        endTime: Date,
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        endTime: LocalDateTime,
         @ApiParam("鍖哄煙") @RequestBody areaVo: AreaVo,
-    ) = resPack { dataAnalysisService.generateMissionList(startTime, endTime, areaVo) }
+    ) = resPack {
+        dataAnalysisService.generateMissionList(
+            Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
+            Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
+            areaVo
+        )
+    }
 
     @ApiOperation(value = "鐢熸垚璧拌埅浠诲姟璇︽儏")
     @PostMapping("/report/missionDetail")
     fun generateMissionDetail(
         @ApiParam("寮�濮嬫椂闂�") @RequestParam
-        @JsonFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        @DateTimeFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        startTime: Date,
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        startTime: LocalDateTime,
         @ApiParam("缁撴潫鏃堕棿") @RequestParam
-        @JsonFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        @DateTimeFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        endTime: Date,
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        endTime: LocalDateTime,
         @ApiParam("鍖哄煙") @RequestBody areaVo: AreaVo,
-    ) = resPack { dataAnalysisService.generateMissionDetail(startTime, endTime, areaVo) }
+    ) = resPack {
+        dataAnalysisService.generateMissionDetail(
+            Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
+            Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
+            areaVo
+        )
+    }
 
     @ApiOperation(value = "璧拌埅鍏稿瀷闅愭偅鍖哄煙缁熻")
     @PostMapping("/report/clueByRiskArea")
     fun generateClueByRiskArea(
         @ApiParam("寮�濮嬫椂闂�") @RequestParam
-        @JsonFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        @DateTimeFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        startTime: Date,
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        startTime: LocalDateTime,
         @ApiParam("缁撴潫鏃堕棿") @RequestParam
-        @JsonFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        @DateTimeFormat(pattern = "YYYY-MM-DD HH:mm:ss")
-        endTime: Date,
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        endTime: LocalDateTime,
         @ApiParam("鍖哄煙") @RequestBody areaVo: AreaVo,
-    ) = resPack { dataAnalysisService.generateClueByRiskArea(startTime, endTime, areaVo) }
+    ) = resPack {
+        dataAnalysisService.generateClueByRiskArea(
+            Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
+            Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
+            areaVo
+        )
+    }
 }
\ No newline at end of file
diff --git a/src/test/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceControllerTest.kt b/src/test/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceControllerTest.kt
index c7ea7e8..8210d7f 100644
--- a/src/test/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceControllerTest.kt
+++ b/src/test/kotlin/com/flightfeather/uav/biz/sourcetrace/SourceTraceControllerTest.kt
@@ -38,7 +38,7 @@
 
     @Test
     fun autoSourceTrace() {
-        val sourceTraceController = SourceTraceController(sceneInfoRep, sourceTraceRep, false)
+        val sourceTraceController = SourceTraceController(sceneInfoRep, sourceTraceRep, true)
 //        val mCode = listOf(
 //            "SH-CN-20241227", "SH-CN-20241127", "SH-CN-20240906", "SH-CN-20240830(05)",
 //            "SH-CN-20240830(04)", "SH-CN-20240823",
@@ -108,16 +108,20 @@
 
     @Test
     fun deleteSourceTrace() {
-        val mCode = listOf(
-            "SH-CN-20241227", "SH-CN-20241127", "SH-CN-20240906", "SH-CN-20240830(05)",
-            "SH-CN-20240830(04)", "SH-CN-20240823",
-            "SH-CN-20240723(02)",
-//            "SH-CN-20250723(01)"
-        )
-        mCode.forEach { c ->
-            missionRep.findOne(c)?.let {
-                sourceTraceRep.delete(it)
-            }
+//        val mCode = listOf(
+//            "SH-CN-20241227", "SH-CN-20241127", "SH-CN-20240906", "SH-CN-20240830(05)",
+//            "SH-CN-20240830(04)", "SH-CN-20240823",
+//            "SH-CN-20240723(02)",
+////            "SH-CN-20250723(01)"
+//        )
+        val startTime = LocalDateTime.of(2025, 7, 1, 0, 0, 0).atZone(ZoneId.systemDefault()).toInstant()
+        val endTime = LocalDateTime.of(2025, 9, 30, 23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()
+        val missions = missionMapper.selectByExample(Example(Mission::class.java).apply {
+            createCriteria().andBetween("startTime", startTime, endTime)
+        })
+        missions.forEach { m ->
+            m ?: return@forEach
+            sourceTraceRep.delete(m)
         }
     }
 

--
Gitblit v1.9.3