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/socket/processor/UnderwayProcessor.kt | 63 +++++++++++++++++++++++-------- 1 files changed, 46 insertions(+), 17 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..a649598 100644 --- a/src/main/kotlin/com/flightfeather/uav/socket/processor/UnderwayProcessor.kt +++ b/src/main/kotlin/com/flightfeather/uav/socket/processor/UnderwayProcessor.kt @@ -1,12 +1,20 @@ package com.flightfeather.uav.socket.processor +import com.flightfeather.uav.biz.FactorFilter +import com.flightfeather.uav.biz.sourcetrace.RealTimeExceptionAnalysisController +import com.flightfeather.uav.common.location.LocationRoadNearby +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.RealTimeDataRep +import com.flightfeather.uav.domain.repository.SegmentInfoRep 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.FactorType import com.flightfeather.uav.socket.eunm.UWDeviceType +import com.flightfeather.uav.socket.handler.UnderwayWebSocketServerHandler import io.netty.channel.ChannelHandlerContext import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @@ -21,16 +29,17 @@ */ @Component -class UnderwayProcessor : BaseProcessor() { +class UnderwayProcessor( + private val airDataRep: AirDataRep, + private val realTimeDataRep: RealTimeDataRep, + private val locationRoadNearby: LocationRoadNearby, + private val segmentInfoRep: SegmentInfoRep, + private val underwayWebSocketServerHandler: UnderwayWebSocketServerHandler, +) : 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 +47,24 @@ // 鏁版嵁棰勫鐞嗗嚱鏁� private val dataProcessMap = mutableMapOf<String?, EPWDataPrep>() - @PostConstruct - fun init() { - instance = this - } + // 瀹炴椂璧拌埅姹℃煋婧簮澶勭悊鍣� + private val realTimeExceptionAnalysisController = + RealTimeExceptionAnalysisController( + realTimeDataRep, + locationRoadNearby, + segmentInfoRep, + underwayWebSocketServerHandler, + FactorFilter.builder() +// .withMain(FactorType.NO2) + .withMain(FactorType.CO) +// .withMain(FactorType.H2S) +// .withMain(FactorType.SO2) +// .withMain(FactorType.O3) + .withMain(FactorType.PM25) + .withMain(FactorType.PM10) + .withMain(FactorType.VOC) + .create() + ) override var tag: String = "璧拌埅鐩戞祴" @@ -53,7 +76,11 @@ //淇濆瓨 deviceSession.saveDevice(packageData.deviceCode, ctx) saveToTxt(msg) - saveToDataBase(packageData) + saveToDataBase(packageData)?.takeIf { it.isNotEmpty() }?.get(0)?.let { + // 灏嗚蛋鑸暟鎹紶鍏ュ紓甯稿鐞嗗櫒 + realTimeExceptionAnalysisController.addOneData(it) + } + } else { println("------${TAG}鏁版嵁BCC鏍¢獙澶辫触锛岃垗寮� [${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]") } @@ -62,21 +89,23 @@ /** * 淇濆瓨鑷虫暟鎹簱 */ - fun saveToDataBase(dataPackage: AirDataPackage) { + fun saveToDataBase(dataPackage: AirDataPackage): List<BaseRealTimeData>? { when (dataPackage.commandUnit) { AirCommandUnit.AirData.value -> { // 浠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 { + return dataProcessMap[dataPackage.deviceCode]?.run { val list = this.mDataPrep2(dataPackage)// 鏁版嵁骞虫粦澶勭悊 - instance.airDataRepository.savePrepData2(list)// 鎸夌収璁惧绫诲瀷瀛樺偍鑷冲搴旀暟鎹〃 + airDataRep.savePrepData2(list)// 鎸夌収璁惧绫诲瀷瀛樺偍鑷冲搴旀暟鎹〃 } } + + else -> return emptyList() } } @@ -108,7 +137,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() } -- Gitblit v1.9.3