From d649f734c44541641158aec2d6b10d630f5a0827 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 25 十二月 2025 17:25:16 +0800
Subject: [PATCH] 2025.12.19 1. 动态溯源相关分析逻辑调整; 2. 走航报告接口参数调整;

---
 src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt |  133 ++++++++++++++++++++++---------------------
 1 files changed, 68 insertions(+), 65 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 c6c2a83..f06e332 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/web/DataAnalysisController.kt
@@ -1,15 +1,13 @@
 package com.flightfeather.uav.lightshare.web
 
-import com.fasterxml.jackson.annotation.JsonFormat
-import com.flightfeather.uav.lightshare.bean.AreaVo
+import com.flightfeather.uav.common.exception.BizException
+import com.flightfeather.uav.lightshare.bean.AnalysisOption
 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.*
 
@@ -23,37 +21,38 @@
 @RequestMapping("air/analysis")
 class DataAnalysisController(private val dataAnalysisService: DataAnalysisService) {
 
+    @Deprecated("璇ユ帴鍙e凡搴熷純锛屼娇鐢�/report/missionSummary/one鎺ュ彛")
     @ApiOperation(value = "姹℃煋婧簮鍒嗘瀽")
     @GetMapping("/pollution/trace")
     fun pollutionTrace(
         @ApiParam("璧拌埅浠诲姟缂栧彿") @RequestParam missionCode: String,
-//        @RequestParam("page", required = false) page: Int?,
-//        @RequestParam("per_page", required = false) perPage: Int?,
     ) = resPack { dataAnalysisService.pollutionTrace(missionCode) }
 
     @ApiOperation(value = "鑾峰彇鍘嗗彶姹℃煋婧簮缁撴灉")
     @GetMapping("/pollution/trace/history")
     fun fetchHistory(
         @ApiParam("璧拌埅浠诲姟缂栧彿") @RequestParam missionCode: String,
-    ) = resPack { dataAnalysisService.fetchHistory(missionCode) }
+        @ApiParam("鏈�灏忔薄鏌撶櫨鍒嗘瘮锛岀敤浜庣瓫閫夊紓甯告暟鎹偣锛堝彲閫夛級") @RequestParam(required = false) minPer: Double? = null,
+    ) = resPack { dataAnalysisService.fetchHistory(missionCode, minPer) }
 
     @ApiOperation(value = "鐢熸垚璧拌埅浠诲姟姹囨�荤粺璁�")
     @PostMapping("/report/missionSummary")
     fun generateMissionSummary(
-        @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("鍖哄煙") @RequestBody areaVo: AreaVo,
+        @ApiParam("鍒嗘瀽閫夐」") @RequestBody analysisOption: AnalysisOption,
     ) = resPack {
+        if (analysisOption.startTime == null || analysisOption.endTime == null || analysisOption.area == null)
+            throw BizException("鍙傛暟閿欒, startTime, endTime, area涓嶈兘涓虹┖")
+        val startTime = analysisOption.startTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val endTime = analysisOption.endTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val areaVo = analysisOption.area!!
+
         dataAnalysisService.generateMissionSummary(
             Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
             Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
-            areaVo
+            areaVo,
+            analysisOption.removeOtherDistrict,
+            analysisOption.removeNoPollutedSource,
+            analysisOption.minPer,
         )
     }
 
@@ -61,47 +60,49 @@
     @GetMapping("/report/missionSummary/one")
     fun generateOneMissionSummary(
         @ApiParam("浠诲姟缂栧彿") @RequestParam missionCode: String,
-    ) = resPack { dataAnalysisService.generateMissionSummary(missionCode) }
+        @ApiParam("鏈�灏忔薄鏌撶櫨鍒嗘瘮锛岀敤浜庣瓫閫夊紓甯告暟鎹偣锛堝彲閫夛級") @RequestParam(required = false) minPer: Double? = null,
+    ) = resPack { dataAnalysisService.generateMissionSummary(missionCode, minPer) }
 
     @ApiOperation(value = "鐢熸垚璧拌埅浠诲姟娓呭崟")
     @PostMapping("/report/missionList")
     fun generateMissionList(
-        @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("鍖哄煙") @RequestBody areaVo: AreaVo,
+        @ApiParam("鍒嗘瀽閫夐」") @RequestBody analysisOption: AnalysisOption,
     ) = resPack {
+        if (analysisOption.startTime == null || analysisOption.endTime == null || analysisOption.area == null)
+            throw BizException("鍙傛暟閿欒, startTime, endTime, area涓嶈兘涓虹┖")
+        val startTime = analysisOption.startTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val endTime = analysisOption.endTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val areaVo = analysisOption.area!!
+
         dataAnalysisService.generateMissionList(
             Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
             Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
-            areaVo
+            areaVo,
+            analysisOption.removeOtherDistrict,
+            analysisOption.removeNoPollutedSource,
+            analysisOption.minPer,
         )
     }
 
     @ApiOperation(value = "鐢熸垚璧拌埅浠诲姟璇︽儏")
     @PostMapping("/report/missionDetail")
     fun generateMissionDetail(
-        @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("鏁版嵁棰楃矑搴�", allowableValues = "SECOND, MINUTE, HOUR") @RequestParam(required = false)
-        granularity: String?,
-        @ApiParam("鍖哄煙") @RequestBody areaVo: AreaVo,
+        @ApiParam("鍒嗘瀽閫夐」") @RequestBody analysisOption: AnalysisOption,
     ) = resPack {
+        if (analysisOption.startTime == null || analysisOption.endTime == null || analysisOption.area == null)
+            throw BizException("鍙傛暟閿欒, startTime, endTime, area涓嶈兘涓虹┖")
+        val startTime = analysisOption.startTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val endTime = analysisOption.endTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val areaVo = analysisOption.area!!
+        val granularity = analysisOption.granularity
+
         dataAnalysisService.generateMissionDetail(
             Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
             Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
-            areaVo,granularity
+            areaVo,granularity,
+            analysisOption.removeOtherDistrict,
+            analysisOption.removeNoPollutedSource,
+            analysisOption.minPer,
         )
     }
 
@@ -111,25 +112,26 @@
         @ApiParam("浠诲姟缂栧彿") @RequestParam missionCode: String,
         @ApiParam("鏁版嵁棰楃矑搴�", allowableValues = "SECOND, MINUTE, HOUR") @RequestParam(required = false)
         granularity: String?,
-    ) = resPack { dataAnalysisService.generateMissionDetail(missionCode, granularity) }
+        @ApiParam("鏈�灏忔薄鏌撶櫨鍒嗘瘮锛岀敤浜庣瓫閫夊紓甯告暟鎹偣锛堝彲閫夛級") @RequestParam(required = false) minPer: Double? = null,
+    ) = resPack { dataAnalysisService.generateMissionDetail(missionCode, granularity, minPer) }
 
     @ApiOperation(value = "璧拌埅鍏稿瀷闅愭偅鍖哄煙缁熻")
     @PostMapping("/report/clueByRiskArea")
     fun generateClueByRiskArea(
-        @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("鍖哄煙") @RequestBody areaVo: AreaVo,
+        @ApiParam("鍒嗘瀽閫夐」") @RequestBody analysisOption: AnalysisOption,
     ) = resPack {
+        if (analysisOption.startTime == null || analysisOption.endTime == null || analysisOption.area == null)
+            throw BizException("鍙傛暟閿欒, startTime, endTime, area涓嶈兘涓虹┖")
+        val startTime = analysisOption.startTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val endTime = analysisOption.endTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val areaVo = analysisOption.area!!
         dataAnalysisService.generateClueByRiskArea(
             Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
             Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
-            areaVo
+            areaVo,
+            analysisOption.removeOtherDistrict,
+            analysisOption.removeNoPollutedSource,
+            analysisOption.minPer,
         )
     }
 
@@ -137,28 +139,29 @@
     @GetMapping("/report/clueByRiskArea/one")
     fun generateOneClueByRiskArea(
         @ApiParam("浠诲姟缂栧彿") @RequestParam missionCode: String,
-    ) = resPack { dataAnalysisService.generateClueByRiskArea(missionCode) }
+        @ApiParam("鏈�灏忔薄鏌撶櫨鍒嗘瘮锛岀敤浜庣瓫閫夊紓甯告暟鎹偣锛堝彲閫夛級") @RequestParam(required = false) minPer: Double? = null,
+    ) = resPack { dataAnalysisService.generateClueByRiskArea(missionCode, minPer) }
 
     @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,
+        @ApiParam("鍒嗘瀽閫夐」") @RequestBody analysisOption: AnalysisOption,
     ) = resPack {
+        if (analysisOption.startTime == null || analysisOption.endTime == null || analysisOption.area == null || analysisOption.factorTypes == null)
+            throw BizException("鍙傛暟閿欒, startTime, endTime, area, factorTypes涓嶈兘涓虹┖")
+        val startTime = analysisOption.startTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val endTime = analysisOption.endTime!!.atZone(ZoneId.systemDefault()).toInstant()
+        val areaVo = analysisOption.area!!
+        val factorTypes = analysisOption.factorTypes!!.map { FactorType.valueOf(it) }
+
         dataAnalysisService.generateGridFusion(
-            factorTypes.split(",").map { FactorType.valueOf(it) },
+            factorTypes,
             Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
             Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()),
-            areaVo
+            areaVo,
+            analysisOption.removeOtherDistrict,
+            analysisOption.removeNoPollutedSource,
+            analysisOption.minPer,
         )
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3