From 00ec64bdf38a52b979f709de2e82e9994ed17749 Mon Sep 17 00:00:00 2001 From: Riku <risaku@163.com> Date: 星期日, 07 七月 2024 21:40:17 +0800 Subject: [PATCH] 1. 新增走航报告异常数据所经路段查询功能 --- src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionResult.kt | 5 ++ src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt | 2 + src/main/resources/templates/report-underway.ftl | 2 src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt | 67 ++++++++++++++++++++++++++------- src/main/kotlin/com/flightfeather/uav/domain/repository/SegmentInfoRep.kt | 22 +++++++++++ 5 files changed, 82 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt index 41323f0..4023fec 100644 --- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt +++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt @@ -50,6 +50,8 @@ subFactorId = factor.subs.map { it.value } subFactorName = factor.subs.map { it.des } selectedFactor = factor + startDate = start.dataTime + endDate = end?.dataTime startTime = DateUtil.instance.dateToString(start.dataTime, DateUtil.DateStyle.HH_MM_SS) endTime = DateUtil.instance.dateToString(end?.dataTime, DateUtil.DateStyle.HH_MM_SS) ?: startTime startData = start.getByFactorType(factor.main) diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt index 5080123..f7d5760 100644 --- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt +++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt @@ -10,7 +10,11 @@ import com.flightfeather.uav.common.location.LocationRoadNearby import com.flightfeather.uav.domain.entity.Mission import com.flightfeather.uav.domain.repository.RealTimeDataRep +import com.flightfeather.uav.domain.repository.SegmentInfoRep import org.springframework.stereotype.Component +import java.time.LocalDateTime +import java.time.ZoneId +import java.time.format.DateTimeFormatter /** * 鏁版嵁寮傚父鍒嗘瀽鎺у埗鍣� @@ -19,6 +23,7 @@ class ExceptionAnalysisController( private val realTimeDataRep: RealTimeDataRep, private val locationRoadNearby: LocationRoadNearby, + private val segmentInfoRep: SegmentInfoRep, ) { var running = false @@ -49,22 +54,11 @@ taskList.forEach { it.onDone() } taskList.forEach { - // 鏌ヨ寮傚父鍛ㄨ竟鍙兘姹℃煋婧� it.resultList.forEach { r-> - if (r.longitude != null && r.latitude != null) { - val sceneList = locationRoadNearby.searchByRadius( - r.longitude!!.toDouble() to r.latitude!!.toDouble(), config.radius) - if (sceneList.isNotEmpty()) { - val idList = mutableListOf<String>() - val nameList = mutableListOf<String>() - sceneList.forEach { s-> - idList.add(s?.guid?:"") - nameList.add(s?.name ?: "") - } - r.relatedSceneId = idList - r.relatedSceneName = nameList - } - } + // 鏌ヨ寮傚父鍛ㄨ竟鍙兘姹℃煋婧� + nearBy(r, config) + // 鏌ヨ鏃舵鎵�鍦ㄨ矾娈� + road(r) } // 瀛樺偍鍒嗘瀽缁撴灉 result.addAll(it.resultList) @@ -72,4 +66,47 @@ running = false return result } + + private fun nearBy(r: ExceptionResult, config: DataAnalysisConfig) { + if (r.longitude != null && r.latitude != null) { + val sceneList = locationRoadNearby.searchByRadius( + r.longitude!!.toDouble() to r.latitude!!.toDouble(), config.radius) + if (sceneList.isNotEmpty()) { + val idList = mutableListOf<String>() + val nameList = mutableListOf<String>() + sceneList.forEach { s-> + idList.add(s?.guid?:"") + nameList.add(s?.name ?: "") + } + r.relatedSceneId = idList + r.relatedSceneName = nameList + } + } + } + + private fun road(r: ExceptionResult) { + val sT = LocalDateTime.ofInstant(r.startDate?.toInstant(), ZoneId.systemDefault()) + val eT = LocalDateTime.ofInstant(r.endDate?.toInstant(), ZoneId.systemDefault()) + val segments = segmentInfoRep.findPeriod(sT, eT) + var txt = "" + val size = segments.size + segments.forEachIndexed { i, s -> + txt += if (i == 0) { + if (size == 1) { + "鍦�${s?.street}" + } else { + "浠�${s?.street}" + } + } else if (i == size - 1 && i >= 2) { + "锛岃嚦${s?.street}" + } else { + if (i == 1) { + "锛岀粡${s?.street}" + } else { + "銆�${s?.street}" + } + } + } + r.road = txt + } } \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionResult.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionResult.kt index 92a406a..66a9322 100644 --- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionResult.kt +++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionResult.kt @@ -3,6 +3,7 @@ import com.flightfeather.uav.biz.FactorFilter import com.flightfeather.uav.domain.entity.BaseRealTimeData import java.math.BigDecimal +import java.util.* /** * 寮傚父缁撴灉 @@ -18,6 +19,8 @@ var subFactorId: List<Int>? = null var subFactorName: List<String>? = null var selectedFactor: FactorFilter.SelectedFactor? = null + var startDate: Date? = null + var endDate: Date? = null var startTime: String? = null var endTime: String? = null var startData: Float? = null @@ -25,6 +28,8 @@ var avg: Float? = null var min: Float? = null var max: Float? = null + // 閫旂粡璺 + var road: String? = null // 涓績鐐圭粡绾害 var longitude: BigDecimal? = null var latitude: BigDecimal? = null diff --git a/src/main/kotlin/com/flightfeather/uav/domain/repository/SegmentInfoRep.kt b/src/main/kotlin/com/flightfeather/uav/domain/repository/SegmentInfoRep.kt index b5daa84..de6ef79 100644 --- a/src/main/kotlin/com/flightfeather/uav/domain/repository/SegmentInfoRep.kt +++ b/src/main/kotlin/com/flightfeather/uav/domain/repository/SegmentInfoRep.kt @@ -3,6 +3,8 @@ import com.flightfeather.uav.domain.entity.SegmentInfo import com.flightfeather.uav.domain.mapper.SegmentInfoMapper import org.springframework.stereotype.Repository +import tk.mybatis.mapper.entity.Example +import java.time.LocalDateTime /** * 杞ㄨ抗鍒嗛殧鏁版嵁搴撴搷浣� @@ -19,4 +21,24 @@ fun findList(segmentInfo: SegmentInfo): List<SegmentInfo?> { return segmentInfoMapper.select(segmentInfo) } + + /** + * 鏌ヨ鏃舵鎵�娑夊強鐨勬墍鏈夎矾娈� + * + */ + fun findPeriod(sTime: LocalDateTime?, eTime: LocalDateTime?): List<SegmentInfo?> { + return segmentInfoMapper.selectByExample((Example(SegmentInfo::class.java).apply { + createCriteria().andLessThanOrEqualTo("startTime", sTime) + .andGreaterThanOrEqualTo("endTime", sTime) + or( + createCriteria().andLessThanOrEqualTo("startTime", eTime) + .andGreaterThanOrEqualTo("endTime", eTime) + ) + or( + createCriteria().andGreaterThanOrEqualTo("startTime", sTime) + .andLessThanOrEqualTo("endTime", eTime) + ) + orderBy("startTime") + })) + } } \ No newline at end of file diff --git a/src/main/resources/templates/report-underway.ftl b/src/main/resources/templates/report-underway.ftl index 0077dd0..0a6bf78 100644 --- a/src/main/resources/templates/report-underway.ftl +++ b/src/main/resources/templates/report-underway.ftl @@ -1252,7 +1252,7 @@ <w:szCs w:val="28" /> <w:lang w:val="en-US" w:eastAsia="zh-CN" /> </w:rPr> - <w:t>${item_index + 1}. 浠�${item.startTime}鑷�${item.endTime}锛�${item.factorName}鍑虹幇${item.exception}<#if item.relatedSceneName??>锛岀粨鍚堢洃娴嬫暟鎹彉鍖栧拰鍙楃偣鍙嶅悜婧簮锛�<#list item.relatedSceneName as scene><#if (scene_index > 0)>銆�</#if>${scene}</#list>绛夊彲鑳藉瓨鍦ㄦ薄鏌撻闄┿��<#else>銆�</#if></w:t> + <w:t>${item_index + 1}. 浠�${item.startTime}鑷�${item.endTime}锛�${item.road}锛�${item.factorName}鍑虹幇${item.exception}<#if item.relatedSceneName??>锛岀粨鍚堢洃娴嬫暟鎹彉鍖栧拰鍙楃偣鍙嶅悜婧簮锛�<#list item.relatedSceneName as scene><#if (scene_index > 0)>銆�</#if>${scene}</#list>绛夊彲鑳藉瓨鍦ㄦ薄鏌撻闄┿��<#else>銆�</#if></w:t> </w:r> </w:p> <w:p> -- Gitblit v1.9.3