Riku
2024-07-07 00ec64bdf38a52b979f709de2e82e9994ed17749
1. 新增走航报告异常数据所经路段查询功能
已修改5个文件
78 ■■■■■ 文件已修改
src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/BaseExceptionAnalysis.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionResult.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/domain/repository/SegmentInfoRep.kt 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/templates/report-underway.ftl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)
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,8 +54,20 @@
        taskList.forEach { it.onDone() }
        taskList.forEach {
            // 查询异常周边可能污染源
            it.resultList.forEach { r->
                // 查询异常周边可能污染源
                nearBy(r, config)
                // 查询时段所在路段
                road(r)
            }
            // 存储分析结果
            result.addAll(it.resultList)
        }
        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)
@@ -66,10 +83,30 @@
                    }
                }
            }
            // 存储分析结果
            result.addAll(it.resultList)
    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}"
        }
        running = false
        return result
            } else if (i == size - 1 && i >= 2) {
                ",至${s?.street}"
            } else {
                if (i == 1) {
                    ",经${s?.street}"
                } else {
                    "、${s?.street}"
                }
            }
        }
        r.road = txt
    }
}
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
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")
        }))
    }
}
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>