From 94fee0b511279679b43e210878d3d36e5a14384b Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 30 九月 2025 09:14:10 +0800
Subject: [PATCH] 2025.9.30 1. 新增走航任务统计功能

---
 src/main/kotlin/com/flightfeather/uav/domain/repository/SourceTraceRep.kt |   60 +++++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 45 insertions(+), 15 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..f726760 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
         }
@@ -82,22 +99,27 @@
         return if (res.isEmpty()) null else res[0]
     }
 
-    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 ->
+    fun fetchList(
+        deviceCode: String,
+        startTime: Date,
+        endTime: Date,
+        msgType: MsgType? = null,
+    ): List<BaseExceptionResult?> {
+        var res = sourceTraceMsgBlobMapper.selectWithBlob(deviceCode, startTime, endTime)
+        if (msgType !== null) {
+            res = res.filter { it?.msgType == msgType.value }
+        }
+
+        return res.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 +127,19 @@
         }
     }
 
+    @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 }
+        if (idList.isEmpty()) return 0
+        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