From 1571cd0f137ced4345fa8785e166a29dc31b6ad1 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 13 五月 2025 17:42:39 +0800
Subject: [PATCH] 1. 新增动态污染溯源的数据异常判断逻辑 2. 新增动态污染溯源websocket连接功能

---
 src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/model/ExceptionResult.kt |   65 +++++++++++++++++++++++++++++++-
 1 files changed, 63 insertions(+), 2 deletions(-)

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 9d80c20..2929675 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
@@ -1,16 +1,20 @@
 package com.flightfeather.uav.biz.dataanalysis.model
 
 import com.flightfeather.uav.biz.FactorFilter
+import com.flightfeather.uav.biz.dataanalysis.BaseExceptionResult
+import com.flightfeather.uav.common.utils.DateUtil
 import com.flightfeather.uav.domain.entity.BaseRealTimeData
 import com.flightfeather.uav.domain.entity.SceneInfo
+import com.flightfeather.uav.domain.entity.avg
 import com.flightfeather.uav.lightshare.bean.DataVo
+import com.flightfeather.uav.socket.eunm.FactorType
 import java.math.BigDecimal
 import java.util.*
 
 /**
  * 寮傚父缁撴灉
  */
-open class ExceptionResult {
+open class ExceptionResult(): BaseExceptionResult() {
     var missionCode: String? = null
     var deviceCode: String? = null
     var exception: String? = null
@@ -40,7 +44,64 @@
     // 鐩稿叧浼佷笟鍚嶇О锛堝悕绉颁箣闂�;鍒嗛殧锛�
     var relatedSceneName: List<String>? = null
     var relatedSceneList: List<SceneInfo?>? = null
-    // 寮傚父鏁版嵁锛屽ご灏惧彲鑳藉寘鍚竴瀹氶噺鐨勫亸绉�
+    // 寮傚父鏁版嵁
     var dataList: MutableList<BaseRealTimeData> = mutableListOf()
     var dataVoList: List<DataVo>? = null
+
+    constructor(
+        start: BaseRealTimeData,
+        end: BaseRealTimeData?,
+        factor: FactorFilter.SelectedFactor,
+        exceptionData: List<BaseRealTimeData>,
+        missionCode: String?,
+        eType: ExceptionType,
+    ) : this() {
+        this.missionCode = missionCode
+        deviceCode = start.deviceCode
+        exception = eType.des
+        exceptionType = eType.value
+        factorId = factor.main.value
+        factorName = factor.main.des
+        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)
+        endData = end?.getByFactorType(factor.main) ?: startData
+
+        val avgData = exceptionData.avg()
+        // 姹傚彇姹℃煋鏁版嵁鐨勪腑蹇冨潗鏍�
+        longitude = avgData.longitude
+        latitude = avgData.latitude
+        // 姹傚彇涓绘薄鏌撳洜瀛愮殑鍧囧�煎拰鑼冨洿
+        val s = dataSummary(exceptionData, factor.main)
+        avg = s.first
+        min = s.second
+        max = s.third
+
+        exceptionData.forEach { dataList.add(it) }
+    }
+
+    private fun dataSummary(exceptionData: List<BaseRealTimeData?>, factorType: FactorType): Triple<Float, Float, Float> {
+        var min = -1f
+        var max = -1f
+        var total = 0f
+        var count = 0
+        exceptionData.forEach {
+            val value = it?.getByFactorType(factorType) ?: return@forEach
+            if (min == -1f || min > value) {
+                min = value
+            }
+            if (max == -1f || max < value) {
+                max = value
+            }
+            total += value
+            count++
+        }
+        val avg = if (count == 0) 0f else total / count
+        return Triple(avg, min, max)
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3