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