From 20b8d870efbbb89564b599561fc69202ba41223f Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 10 四月 2026 13:36:42 +0800
Subject: [PATCH] 2026.4.10 1. 修复采样时间超过当前时间的数据依旧能存入数据库的bug

---
 src/main/kotlin/com/flightfeather/uav/socket/processor/UnderwayProcessor.kt |   68 ++++++++++++++++++++++++----------
 1 files changed, 48 insertions(+), 20 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/socket/processor/UnderwayProcessor.kt b/src/main/kotlin/com/flightfeather/uav/socket/processor/UnderwayProcessor.kt
index 48ac7bb..48bee10 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/processor/UnderwayProcessor.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/processor/UnderwayProcessor.kt
@@ -1,18 +1,24 @@
 package com.flightfeather.uav.socket.processor
 
+import com.flightfeather.uav.biz.sourcetrace.SourceTraceController
+import com.flightfeather.uav.domain.entity.BaseRealTimeData
 import com.flightfeather.uav.model.epw.EPWDataPrep
-import com.flightfeather.uav.repository.AirDataRepository
+import com.flightfeather.uav.domain.repository.AirDataRep
+import com.flightfeather.uav.domain.repository.SceneInfoRep
+import com.flightfeather.uav.domain.repository.SourceTraceRep
+import com.flightfeather.uav.lightshare.bean.DataVo
 import com.flightfeather.uav.socket.bean.AirDataPackage
 import com.flightfeather.uav.socket.decoder.AirDataDecoder
 import com.flightfeather.uav.socket.decoder.DataPackageDecoder
 import com.flightfeather.uav.socket.eunm.AirCommandUnit
 import com.flightfeather.uav.socket.eunm.UWDeviceType
 import io.netty.channel.ChannelHandlerContext
-import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.format.annotation.DateTimeFormat
 import org.springframework.stereotype.Component
 import java.text.SimpleDateFormat
+import java.time.LocalDateTime
+import java.time.format.DateTimeFormatter
 import java.util.*
-import javax.annotation.PostConstruct
 
 /**
  * 澶勭悊socket鎺ユ敹鐨勬秷鎭�
@@ -21,16 +27,15 @@
  */
 
 @Component
-class UnderwayProcessor : BaseProcessor() {
+class UnderwayProcessor(
+    private val airDataRep: AirDataRep,
+    private val sceneInfoRep: SceneInfoRep,
+    private val sourceTraceRep: SourceTraceRep
+) : BaseProcessor() {
 
     companion object {
-        private lateinit var instance: UnderwayProcessor
-
         private const val TAG = "UAV"
     }
-
-    @Autowired
-    lateinit var airDataRepository: AirDataRepository
 
     private val airDataDecoder = AirDataDecoder.instance
     private val dataPackageDecoder = DataPackageDecoder()
@@ -38,10 +43,8 @@
     // 鏁版嵁棰勫鐞嗗嚱鏁�
     private val dataProcessMap = mutableMapOf<String?, EPWDataPrep>()
 
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
+    // 瀹炴椂璧拌埅姹℃煋婧簮澶勭悊鍣�
+    private val sourceTraceMap = mutableMapOf<String?, SourceTraceController>()
 
     override var tag: String = "璧拌埅鐩戞祴"
 
@@ -53,7 +56,17 @@
             //淇濆瓨
             deviceSession.saveDevice(packageData.deviceCode, ctx)
             saveToTxt(msg)
-            saveToDataBase(packageData)
+            val res = saveToDataBase(packageData)
+            println("----鍐欏叆瀹屾垚")
+            res?.takeIf { it.isNotEmpty() }?.get(0)?.let {
+                // 姣忓彴璁惧鏈夊悇鑷崟鐙殑寮傚父鏁版嵁澶勭悊鍣�
+                if (!sourceTraceMap.containsKey(it.deviceCode)) {
+                    sourceTraceMap[it.deviceCode] = SourceTraceController(sceneInfoRep, sourceTraceRep)
+                }
+                // 灏嗚蛋鑸暟鎹紶鍏ュ紓甯稿鐞嗗櫒
+                sourceTraceMap[it.deviceCode]?.addOneData(it)
+                println("----鍔ㄦ�佹函婧愬畬鎴�")
+            }
         } else {
             println("------${TAG}鏁版嵁BCC鏍¢獙澶辫触锛岃垗寮� [${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]")
         }
@@ -62,21 +75,26 @@
     /**
      * 淇濆瓨鑷虫暟鎹簱
      */
-    fun saveToDataBase(dataPackage: AirDataPackage) {
+    fun saveToDataBase(dataPackage: AirDataPackage): List<BaseRealTimeData>? {
         when (dataPackage.commandUnit) {
             AirCommandUnit.AirData.value -> {
+                val dataVo = dataPackage.toDataVo()
+                // 瀛樺偍鍓嶅垽鏂暟鎹槸鍚︽湁鏁�
+                if (!isValid(dataVo)) return null
                 // 浠son鏍煎紡瀛樺偍鍘熷鏁版嵁
-                instance.airDataRepository.saveAirData(dataPackage)
+                airDataRep.saveAirData(dataPackage)
                 // 杩涜棰勫鐞嗗悗锛屽瓨鍌ㄨ嚦瀵瑰簲鏁版嵁琛�
                 if (!dataProcessMap.containsKey(dataPackage.deviceCode)) {
                     // 姣忓彴璁惧鏈夊崟鐙殑鏁版嵁棰勫鐞嗗璞�
                     dataProcessMap[dataPackage.deviceCode] = EPWDataPrep(UWDeviceType.getType(dataPackage.deviceCode))
                 }
-                dataProcessMap[dataPackage.deviceCode]?.run {
-                    val list = this.mDataPrep2(dataPackage)// 鏁版嵁骞虫粦澶勭悊
-                    instance.airDataRepository.savePrepData2(list)// 鎸夌収璁惧绫诲瀷瀛樺偍鑷冲搴旀暟鎹〃
+                return dataProcessMap[dataPackage.deviceCode]?.run {
+                    val list = this.mDataPrep2(dataVo)// 鏁版嵁骞虫粦澶勭悊
+                    airDataRep.savePrepData2(list)// 鎸夌収璁惧绫诲瀷瀛樺偍鑷冲搴旀暟鎹〃
                 }
             }
+
+            else -> return emptyList()
         }
     }
 
@@ -108,7 +126,7 @@
     fun encodeToBytes(msg: String): ByteArray {
         val list = msg.split(" ")
         val bytes = ByteArray(list.size)
-        for (i in 0 until list.size) {
+        for (i in list.indices) {
             bytes[i] = list[i].toInt(16).toByte()
         }
 
@@ -136,4 +154,14 @@
 
         return sb.toString()
     }
+
+    /**
+     * 鏁版嵁鏈夋晥鎬у垽鏂�
+     */
+    private fun isValid(dataVo: DataVo): Boolean {
+        if (dataVo.time == null) return false
+        val check1 = LocalDateTime.parse(dataVo.time!!, DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm:ss"))
+            .isBefore(LocalDateTime.now())
+        return check1
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3