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