From dac47617b37ccfb834cd73ce0ee725e1101de214 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 14 八月 2025 17:25:51 +0800
Subject: [PATCH] 2025.8.14 1. 动态溯源模块添加滑动平均异常计算(调试中)

---
 src/main/kotlin/com/flightfeather/uav/domain/repository/SourceTraceRep.kt |   48 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 34 insertions(+), 14 deletions(-)

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 17a9a7e..b8c4c4c 100644
--- a/src/main/kotlin/com/flightfeather/uav/domain/repository/SourceTraceRep.kt
+++ b/src/main/kotlin/com/flightfeather/uav/domain/repository/SourceTraceRep.kt
@@ -8,9 +8,12 @@
 import com.flightfeather.uav.common.utils.GsonUtils
 import com.flightfeather.uav.domain.entity.Mission
 import com.flightfeather.uav.domain.entity.SourceTraceMsg
+import com.flightfeather.uav.domain.entity.SourceTraceMsgBlob
+import com.flightfeather.uav.domain.mapper.SourceTraceMsgBlobMapper
 import com.flightfeather.uav.domain.mapper.SourceTraceMsgMapper
 import com.flightfeather.uav.socket.sender.MsgType
 import org.springframework.stereotype.Repository
+import org.springframework.transaction.annotation.Transactional
 import tk.mybatis.mapper.entity.Example
 import java.util.*
 
@@ -20,11 +23,22 @@
  * @author feiyu02
  */
 @Repository
-class SourceTraceRep(private val sourceTraceMsgMapper: SourceTraceMsgMapper) {
+class SourceTraceRep(
+    private val sourceTraceMsgMapper: SourceTraceMsgMapper,
+    private val sourceTraceMsgBlobMapper: SourceTraceMsgBlobMapper,
+) {
+
+    private fun insertBlob(stm: SourceTraceMsg, json: String) {
+        sourceTraceMsgBlobMapper.insert(SourceTraceMsgBlob().apply {
+            msgId = stm.id
+            content = json
+        })
+    }
 
     /**
      * 鎻掑叆婧簮淇℃伅鍜屾彁閱掍俊鎭�
      */
+    @Transactional
     fun insert(msgType: MsgType, obj: PollutedClue): Int {
         val stm = SourceTraceMsg().apply {
             deviceCode = obj.deviceCode
@@ -33,11 +47,12 @@
             startTime = obj.pollutedData?.startTime
             endTime = obj.pollutedData?.endTime
             this.msgType = msgType.value
-            content = GsonUtils.gson.toJson(obj)
             createTime = Date()
         }
         return if (fetchOneExist(stm) == null) {
-            sourceTraceMsgMapper.insert(stm)
+            val c = sourceTraceMsgMapper.insert(stm)
+            insertBlob(stm, GsonUtils.gson.toJson(obj))
+            c
         } else {
             0
         }
@@ -54,17 +69,19 @@
     /**
      * 鎻掑叆绾跨储淇℃伅
      */
+    @Transactional
     fun insert(res: AnalysisResult): Int {
         val stm = SourceTraceMsg().apply {
             deviceCode = res.deviceCode
             startTime = res.time
             endTime = res.time
             this.msgType = MsgType.AnaResult.value
-            content = GsonUtils.gson.toJson(res)
             createTime = Date()
         }
         return if (fetchOneExist(stm) == null) {
-            sourceTraceMsgMapper.insert(stm)
+            val c = sourceTraceMsgMapper.insert(stm)
+            insertBlob(stm, GsonUtils.gson.toJson(res))
+            c
         } else {
             0
         }
@@ -83,21 +100,17 @@
     }
 
     fun fetchList(deviceCode: String, startTime: Date, endTime: Date): List<BaseExceptionResult?> {
-        return sourceTraceMsgMapper.selectByExample(Example(SourceTraceMsg::class.java).apply {
-            createCriteria().andEqualTo("deviceCode", deviceCode)
-                .andGreaterThanOrEqualTo("startTime", startTime)
-                .andLessThanOrEqualTo("endTime", endTime)
-            orderBy("id").desc()
-        }).map { stm ->
+        return sourceTraceMsgBlobMapper.selectWithBlob(deviceCode, startTime, endTime)
+            .map { stm ->
             when (stm?.msgType) {
                 MsgType.PolClue.value,
                 MsgType.DataChange.value,
                     -> {
-                    GsonUtils.gson.fromJson(stm.content, PollutedClue::class.java)
+                    GsonUtils.gson.fromJson(stm.blobContent, PollutedClue::class.java)
                 }
 
                 MsgType.AnaResult.value -> {
-                    GsonUtils.gson.fromJson(stm.content, AnalysisResult::class.java)
+                    GsonUtils.gson.fromJson(stm.blobContent, AnalysisResult::class.java)
                 }
 
                 else -> null
@@ -105,11 +118,18 @@
         }
     }
 
+    @Transactional
     fun delete(mission: Mission): Int {
-        return sourceTraceMsgMapper.deleteByExample(Example(SourceTraceMsg::class.java).apply {
+        val idList = sourceTraceMsgMapper.selectByExample(Example(SourceTraceMsg::class.java).apply {
             createCriteria().andEqualTo("deviceCode", mission.deviceCode)
                 .andGreaterThanOrEqualTo("startTime", mission.startTime)
                 .andLessThanOrEqualTo("endTime", mission.endTime)
+        }).map { it?.id }
+        sourceTraceMsgMapper.deleteByExample(Example(SourceTraceMsg::class.java).apply {
+            createCriteria().andIn("id", idList)
+        })
+        return sourceTraceMsgBlobMapper.deleteByExample(Example(SourceTraceMsgBlob::class.java).apply {
+            createCriteria().andIn("msgId", idList)
         })
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3