From 94fee0b511279679b43e210878d3d36e5a14384b Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 30 九月 2025 09:14:10 +0800
Subject: [PATCH] 2025.9.30 1. 新增走航任务统计功能

---
 src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt |  124 ++++++++++++++++++++++++++++++++---------
 1 files changed, 96 insertions(+), 28 deletions(-)

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..5bd3414 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt
@@ -3,11 +3,14 @@
 import com.fasterxml.jackson.annotation.JsonFormat
 import com.flightfeather.uav.lightshare.bean.AreaVo
 import com.flightfeather.uav.lightshare.service.DataAnalysisService
+import com.flightfeather.uav.socket.eunm.FactorType
 import io.swagger.annotations.Api
 import io.swagger.annotations.ApiOperation
 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 +41,120 @@
     @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 = "鐢熸垚璧拌埅浠诲姟姹囨�荤粺璁�")
+    @GetMapping("/report/missionSummary/one")
+    fun generateOneMissionSummary(
+        @ApiParam("浠诲姟缂栧彿") @RequestParam missionCode: String,
+    ) = resPack { dataAnalysisService.generateMissionSummary(missionCode) }
 
     @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 = "鐢熸垚璧拌埅浠诲姟璇︽儏")
+    @GetMapping("/report/missionDetail/one")
+    fun generateOneMissionDetail(
+        @ApiParam("浠诲姟缂栧彿") @RequestParam missionCode: String,
+    ) = resPack { dataAnalysisService.generateMissionDetail(missionCode) }
 
     @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
+        )
+    }
+
+    @ApiOperation(value = "璧拌埅鍏稿瀷闅愭偅鍖哄煙缁熻")
+    @GetMapping("/report/clueByRiskArea/one")
+    fun generateOneClueByRiskArea(
+        @ApiParam("浠诲姟缂栧彿") @RequestParam missionCode: String,
+    ) = resPack { dataAnalysisService.generateClueByRiskArea(missionCode) }
+
+    @ApiOperation(value = "鍙犲姞铻嶅悎鍒嗘瀽")
+    @PostMapping("/report/gridFusion")
+    fun generateGridFusion(
+        @ApiParam("寮�濮嬫椂闂�") @RequestParam
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        startTime: LocalDateTime,
+        @ApiParam("缁撴潫鏃堕棿") @RequestParam
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        endTime: LocalDateTime,
+        @ApiParam("闇�瑕佺粺璁$殑鐩戞祴鍥犲瓙", example = "NO2, CO") @RequestParam
+        factorTypes: String,
+        @ApiParam("鍖哄煙") @RequestBody areaVo: AreaVo,
+    ) = resPack {
+        dataAnalysisService.generateGridFusion(
+            factorTypes.split(",").map { FactorType.valueOf(it) },
+            Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
+            Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
+            areaVo
+        )
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3