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