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