2025.7.4
1. 新增动态污染溯源新的判定逻辑
| | |
| | | import com.flightfeather.uav.biz.sourcetrace.RealTimeAnalysisConfig |
| | | import com.flightfeather.uav.biz.sourcetrace.config.RTExcWindLevelConfig |
| | | import com.flightfeather.uav.biz.sourcetrace.exceptiontype.* |
| | | import com.flightfeather.uav.biz.sourcetrace.model.AnalysisResult |
| | | import com.flightfeather.uav.biz.sourcetrace.model.PollutedClue |
| | | import com.flightfeather.uav.biz.sourcetrace.model.PollutedSummary |
| | | import com.flightfeather.uav.common.utils.GsonUtils |
| | | import com.flightfeather.uav.domain.entity.BaseRealTimeData |
| | | import com.flightfeather.uav.domain.repository.SceneInfoRep |
| | | import com.flightfeather.uav.domain.repository.SourceTraceRep |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | | import com.flightfeather.uav.socket.sender.MsgType |
| | | import com.flightfeather.uav.socket.sender.UnderwayWebSocketSender |
| | |
| | | * æ¯ä¸å»é对åå²çº¿ç´¢è¿è¡ç»è®¡ï¼æåºä¼å建议ï¼ç¦»æ±¡ææºè¾è¿ãæ±¡ææºæ°éãåºç°æ¬¡æ°ï¼ãèµ°èªè·¯çº¿è°æ´å»ºè®®ï¼ç¦»æ±¡ææºè¾è¿ãèµ°èªè½¨è¿¹æªæ¥è¿æº¯æºåºæ¯ï¼ |
| | | */ |
| | | |
| | | constructor(sceneInfoRep: SceneInfoRep, factorFilter: FactorFilter?) { |
| | | constructor(sceneInfoRep: SceneInfoRep, sourceTraceRep: SourceTraceRep, factorFilter: FactorFilter?) { |
| | | this.sceneInfoRep = sceneInfoRep |
| | | this.config = if (factorFilter != null) |
| | | this.sourceTraceRep = sourceTraceRep |
| | | this.config = if (factorFilter != null) { |
| | | RTExcWindLevelConfig(factorFilter) |
| | | else |
| | | } else { |
| | | RTExcWindLevelConfig( |
| | | FactorFilter.builder() |
| | | // .withMain(FactorType.NO2) |
| | |
| | | .withMain(FactorType.VOC) |
| | | .create() |
| | | ) |
| | | } |
| | | pollutedSummary = PollutedSummary(config) { summaryCallback(it) } |
| | | newTask() |
| | | } |
| | | |
| | | constructor(sceneInfoRep: SceneInfoRep) : this(sceneInfoRep, null) |
| | | constructor(sceneInfoRep: SceneInfoRep, sourceTraceRep: SourceTraceRep) : this(sceneInfoRep, sourceTraceRep, null) |
| | | |
| | | private val pollutedSummary: PollutedSummary |
| | | |
| | | private val sceneInfoRep: SceneInfoRep |
| | | |
| | | private val sourceTraceRep: SourceTraceRep |
| | | private val config: RTExcWindLevelConfig |
| | | |
| | | private val taskList = mutableListOf<BaseExceptionAnalysis<RTExcWindLevelConfig, PollutedClue>>() |
| | |
| | | private fun exceptionCallback(ex: PollutedClue) { |
| | | // æº¯æºæ±¡ææºä¿¡æ¯ |
| | | ex.searchScenes(sceneInfoRep) |
| | | ex.msgType = MsgType.PolClue.value |
| | | |
| | | // å¹¿ææ±¡ææº¯æºå¼å¸¸ç»æ |
| | | UnderwayWebSocketSender.broadcast(MsgType.PolClue.value, ex) |
| | | sourceTraceRep.insert(MsgType.PolClue, ex) |
| | | |
| | | // è®°å½æ±¡æçº¿ç´¢ |
| | | pollutedSummary.addClue(ex) |
| | |
| | | private fun dataChangeCallback(ex: PollutedClue) { |
| | | // æº¯æºæ±¡ææºä¿¡æ¯ |
| | | ex.searchScenes(sceneInfoRep) |
| | | ex.msgType = MsgType.DataChange.value |
| | | |
| | | // å¹¿ææ°æ®ååæé |
| | | UnderwayWebSocketSender.broadcast(MsgType.DataChange.value, ex) |
| | | sourceTraceRep.insert(MsgType.DataChange, ex) |
| | | } |
| | | |
| | | private fun summaryCallback(ex: PollutedSummary.AnalysisResult) { |
| | | private fun summaryCallback(ex: AnalysisResult) { |
| | | ex.msgType = MsgType.AnaResult.value |
| | | // å¹¿ææ±¡ææº¯æºå¼å¸¸ç»æ |
| | | UnderwayWebSocketSender.broadcast(MsgType.AnaResult.value, ex) |
| | | sourceTraceRep.insert(ex) |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.biz.sourcetrace.model |
| | | |
| | | import com.flightfeather.uav.biz.dataanalysis.BaseExceptionResult |
| | | import com.flightfeather.uav.common.net.AMapService |
| | | import com.flightfeather.uav.domain.entity.SceneInfo |
| | | import com.flightfeather.uav.socket.sender.MsgType |
| | | import java.util.* |
| | | |
| | | /** |
| | | * åæç»æ |
| | | * @date 2025/7/4 |
| | | * @author feiyu02 |
| | | */ |
| | | class AnalysisResult : BaseExceptionResult() { |
| | | /** |
| | | * @see [MsgType] |
| | | */ |
| | | var msgType: Int? = null |
| | | |
| | | var deviceCode: String? = null |
| | | |
| | | // æç
§è¢«æ«ææ¬¡æ°éåºæåçæ±¡ææºå表 |
| | | var sortedSceneList: List<Pair<SceneInfo?, Int>>? = null |
| | | var time: Date? = null |
| | | var advice: String? = null |
| | | var direction: AMapService.AMapDirection? = null |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.biz.sourcetrace.model |
| | | import com.flightfeather.uav.socket.sender.MsgType |
| | | |
| | | /** |
| | | * å¨ææº¯æºä¿¡æ¯ |
| | | * @date 2025/7/4 |
| | | * @author feiyu02 |
| | | * å
嫿¶æ¯çç±»å为[MsgType] |
| | | * 对åºçæ°æ®ç»æå
æ¬[PollutedClue],[AnalysisResult] |
| | | */ |
| | | interface BasePollutedMsg |
| | |
| | | * @author feiyu02 |
| | | */ |
| | | enum class DistanceType(val des: String, val disRange: Pair<Double, Double>) { |
| | | TYPE1("50ç±³", .0 to 50.0), |
| | | TYPE1("100ç±³", .0 to 100.0), |
| | | TYPE2("50ç±³ - 500ç±³", 50.0 to 500.0), |
| | | TYPE3("50ç±³ - 1å
Ž", 50.0 to 1000.0), |
| | | TYPE4("50ç±³ - 2å
Ž", 50.0 to 2000.0); |
| | |
| | | import com.flightfeather.uav.domain.entity.BaseRealTimeData |
| | | import com.flightfeather.uav.domain.entity.SceneInfo |
| | | import com.flightfeather.uav.domain.repository.SceneInfoRep |
| | | import com.flightfeather.uav.socket.sender.MsgType |
| | | |
| | | /** |
| | | * 污æçº¿ç´¢ |
| | |
| | | // ) |
| | | { |
| | | if (tag.exceptionData.isEmpty()) return |
| | | deviceCode = tag.startData?.deviceCode |
| | | pollutedData = PollutedData( |
| | | tag.startData!!, tag.endData, factor, tag.exceptionData, tag.historyData, eType, windLevelCondition |
| | | ) |
| | |
| | | * 6. å±ç¤ºæ°æ®ååæ
åµï¼ä¸åéççç |
| | | */ |
| | | |
| | | /** |
| | | * @see [MsgType] |
| | | */ |
| | | var msgType: Int? = null |
| | | |
| | | var deviceCode: String? = null |
| | | |
| | | var pollutedData: PollutedData? = null |
| | | |
| | | var pollutedArea: PollutedArea? = null |
| | |
| | | import com.flightfeather.uav.common.utils.DateUtil |
| | | import com.flightfeather.uav.domain.entity.BaseRealTimeData |
| | | import com.flightfeather.uav.lightshare.bean.DataVo |
| | | import java.util.Date |
| | | |
| | | /** |
| | | * æ±¡ææ°æ® |
| | |
| | | subFactorName = factor.subs.map { it.des } |
| | | selectedFactor = factor |
| | | |
| | | startTime = DateUtil.instance.dateToString(start.dataTime, DateUtil.DateStyle.HH_MM_SS) |
| | | endTime = DateUtil.instance.dateToString(end?.dataTime, DateUtil.DateStyle.HH_MM_SS) ?: startTime |
| | | startTime = start.dataTime |
| | | endTime = end?.dataTime |
| | | // startData = start.getByFactorType(factor.main) |
| | | // endData = end?.getByFactorType(factor.main) ?: startData |
| | | startData = start |
| | |
| | | var subFactorName: List<String>? = null |
| | | var selectedFactor: FactorFilter.SelectedFactor? = null |
| | | |
| | | var startTime: String? = null |
| | | var endTime: String? = null |
| | | var startTime: Date? = null |
| | | var endTime: Date? = null |
| | | |
| | | var startData: BaseRealTimeData? = null |
| | | var endData: BaseRealTimeData? = null |
| | |
| | | |
| | | import com.flightfeather.uav.biz.sourcetrace.config.RTExcWindLevelConfig |
| | | import com.flightfeather.uav.common.net.AMapService |
| | | import com.flightfeather.uav.common.utils.DateUtil |
| | | import com.flightfeather.uav.common.utils.MapUtil |
| | | import com.flightfeather.uav.domain.entity.BaseRealTimeData |
| | | import com.flightfeather.uav.domain.entity.SceneInfo |
| | |
| | | import java.util.TimerTask |
| | | |
| | | // å¼å¸¸æ°æ®çæåè°ç±» |
| | | typealias NewPolluteSummaryCallback = (ex: PollutedSummary.AnalysisResult) -> Unit |
| | | typealias NewPolluteSummaryCallback = (ex: AnalysisResult) -> Unit |
| | | |
| | | /** |
| | | * 污ææ
嵿±æ» |
| | |
| | | * 5. æ±¡ææºçè¢«æ«ææ¬¡æ° |
| | | * æ¯ä¸å»é对åå²çº¿ç´¢è¿è¡ç»è®¡ï¼æåºä¼å建议ï¼ç¦»æ±¡ææºè¾è¿ãæ±¡ææºæ°éãåºç°æ¬¡æ°ï¼ãèµ°èªè·¯çº¿è°æ´å»ºè®®ï¼ç¦»æ±¡ææºè¾è¿ãèµ°èªè½¨è¿¹æªæ¥è¿æº¯æºåºæ¯ï¼ |
| | | */ |
| | | |
| | | /** |
| | | * åæç»æ |
| | | */ |
| | | inner class AnalysisResult { |
| | | // æç
§è¢«æ«ææ¬¡æ°éåºæåçæ±¡ææºå表 |
| | | var sortedSceneList: List<Pair<SceneInfo?, Int>>? = null |
| | | var time: Date? = null |
| | | var advice: String? = null |
| | | var direction: AMapService.AMapDirection? = null |
| | | } |
| | | |
| | | /** |
| | | * 宿¶ç»è®¡ |
| | |
| | | */ |
| | | private fun analysis() { |
| | | if (clueList.isEmpty()) return |
| | | val result = AnalysisResult() |
| | | val result = AnalysisResult().apply { deviceCode = clueList.first().deviceCode } |
| | | // å
±æå¤å°ç¸å
³æ±¡ææºï¼åªäºæ±¡ææºè¢«æ«ææ¬¡æ°è¾å¤ |
| | | val sceneMap = mutableMapOf<String?, Pair<SceneInfo?, Int>>() |
| | | clueList.forEach { c -> |
| | |
| | | |
| | | // å½åçèµ°èªæ°æ®çå®ä½åæ±¡ææºè·ç¦»æ¯å¦æ¯éæ¸æ¥è¿ï¼è¥èµ°èªè¿ç¦»äºä¸»è¦æ±¡ææºï¼æç¤ºç¨æ·è°æ´èµ°èªè·¯çº¿ |
| | | if (!result.sortedSceneList.isNullOrEmpty()) { |
| | | val sT = clueList.first().pollutedData?.startTime |
| | | val eT = clueList.last().pollutedData?.endTime |
| | | val sT = DateUtil.instance.dateToString(clueList.first().pollutedData?.startTime, DateUtil.DateStyle.HH_MM_SS) |
| | | val eT = DateUtil.instance.dateToString(clueList.last().pollutedData?.endTime, DateUtil.DateStyle.HH_MM_SS) |
| | | val closetScene = result.sortedSceneList?.first() |
| | | // èµ°èªè·¯çº¿è°æ´å»ºè®® |
| | | result.advice = |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.domain.repository |
| | | |
| | | import com.flightfeather.uav.biz.dataanalysis.BaseExceptionResult |
| | | import com.flightfeather.uav.biz.sourcetrace.model.AnalysisResult |
| | | import com.flightfeather.uav.biz.sourcetrace.model.BasePollutedMsg |
| | | import com.flightfeather.uav.biz.sourcetrace.model.PollutedClue |
| | | import com.flightfeather.uav.biz.sourcetrace.model.PollutedSummary |
| | | import com.flightfeather.uav.common.utils.GsonUtils |
| | | import com.flightfeather.uav.domain.entity.SourceTraceMsg |
| | | import com.flightfeather.uav.domain.mapper.SourceTraceMsgMapper |
| | | import com.flightfeather.uav.socket.sender.MsgType |
| | | import org.springframework.stereotype.Repository |
| | | import tk.mybatis.mapper.entity.Example |
| | | import java.util.* |
| | | |
| | | /** |
| | | * å¨ææ±¡ææº¯æºæ°æ®åºæä½ |
| | | * @date 2025/7/4 |
| | | * @author feiyu02 |
| | | */ |
| | | @Repository |
| | | class SourceTraceRep(private val sourceTraceMsgMapper: SourceTraceMsgMapper) { |
| | | |
| | | /** |
| | | * æå
¥æº¯æºä¿¡æ¯åæéä¿¡æ¯ |
| | | */ |
| | | fun insert(msgType: MsgType, obj: PollutedClue): Int { |
| | | val stm = SourceTraceMsg().apply { |
| | | deviceCode = obj.deviceCode |
| | | factorName = obj.pollutedData?.factorName |
| | | exceptionType = obj.pollutedData?.exceptionType |
| | | 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) |
| | | } else { |
| | | 0 |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æå
¥çº¿ç´¢ä¿¡æ¯ |
| | | */ |
| | | 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) |
| | | } else { |
| | | 0 |
| | | } |
| | | } |
| | | |
| | | fun fetchOneExist(stm: SourceTraceMsg): SourceTraceMsg? { |
| | | val res = sourceTraceMsgMapper.selectByExample(Example(SourceTraceMsg::class.java).apply { |
| | | createCriteria().andEqualTo("deviceCode", stm.deviceCode) |
| | | .andEqualTo("msgType", stm.msgType) |
| | | .andEqualTo("exceptionType", stm.exceptionType) |
| | | .andEqualTo("factorName", stm.factorName) |
| | | .andEqualTo("startTime", stm.startTime) |
| | | .andEqualTo("endTime", stm.endTime) |
| | | }) |
| | | 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 -> |
| | | when (stm?.msgType) { |
| | | MsgType.PolClue.value, |
| | | MsgType.DataChange.value, |
| | | -> { |
| | | GsonUtils.gson.fromJson(stm.content, PollutedClue::class.java) |
| | | } |
| | | |
| | | MsgType.AnaResult.value -> { |
| | | GsonUtils.gson.fromJson(stm.content, AnalysisResult::class.java) |
| | | } |
| | | |
| | | else -> null |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | package com.flightfeather.uav.lightshare.service |
| | | |
| | | import com.flightfeather.uav.biz.dataanalysis.BaseExceptionResult |
| | | import com.flightfeather.uav.biz.dataanalysis.model.ExceptionResult |
| | | import com.flightfeather.uav.biz.sourcetrace.model.BasePollutedMsg |
| | | |
| | | /** |
| | | * |
| | |
| | | * @param missionCode èµ°èªä»»å¡ç¼å· |
| | | */ |
| | | fun pollutionTrace(missionCode: String): List<ExceptionResult> |
| | | |
| | | fun fetchHistory(missionCode: String): String |
| | | } |
| | |
| | | package com.flightfeather.uav.lightshare.service.impl |
| | | |
| | | import com.flightfeather.uav.biz.FactorFilter |
| | | import com.flightfeather.uav.biz.dataanalysis.BaseExceptionResult |
| | | import com.flightfeather.uav.biz.dataanalysis.ExceptionAnalysisController |
| | | import com.flightfeather.uav.biz.dataanalysis.model.ExceptionResult |
| | | import com.flightfeather.uav.biz.sourcetrace.model.BasePollutedMsg |
| | | import com.flightfeather.uav.common.exception.BizException |
| | | import com.flightfeather.uav.common.location.LocationRoadNearby |
| | | import com.flightfeather.uav.common.utils.GsonUtils |
| | | import com.flightfeather.uav.domain.repository.MissionRep |
| | | import com.flightfeather.uav.domain.repository.RealTimeDataRep |
| | | import com.flightfeather.uav.domain.repository.SegmentInfoRep |
| | | import com.flightfeather.uav.domain.repository.SourceTraceRep |
| | | import com.flightfeather.uav.lightshare.service.DataAnalysisService |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | | import org.springframework.stereotype.Service |
| | |
| | | private val realTimeDataRep: RealTimeDataRep, |
| | | private val locationRoadNearby: LocationRoadNearby, |
| | | private val segmentInfoRep: SegmentInfoRep, |
| | | private val sourceTraceRep: SourceTraceRep |
| | | ) : DataAnalysisService { |
| | | |
| | | override fun pollutionTrace(missionCode: String): List<ExceptionResult> { |
| | |
| | | .create() |
| | | ) |
| | | } |
| | | |
| | | override fun fetchHistory(missionCode: String): String { |
| | | val mission = missionRep.findOne(missionCode) ?: throw BizException("èµ°èªä»»å¡ä¸åå¨") |
| | | |
| | | val res = sourceTraceRep.fetchList(mission.deviceCode, mission.startTime, mission.endTime) |
| | | return GsonUtils.gson.toJson(res) |
| | | } |
| | | } |
| | |
| | | // @RequestParam("per_page", required = false) perPage: Int?, |
| | | ) = resPack { dataAnalysisService.pollutionTrace(missionCode) } |
| | | |
| | | @ApiOperation(value = "è·åå岿±¡ææº¯æºç»æ") |
| | | @GetMapping("/pollution/trace/history") |
| | | fun fetchHistory( |
| | | @ApiParam("èµ°èªä»»å¡ç¼å·") @RequestParam missionCode: String, |
| | | ) = resPack { dataAnalysisService.fetchHistory(missionCode) } |
| | | |
| | | } |
| | |
| | | package com.flightfeather.uav.socket |
| | | |
| | | import com.flightfeather.uav.domain.repository.SceneInfoRep |
| | | import com.flightfeather.uav.domain.repository.SourceTraceRep |
| | | import com.flightfeather.uav.socket.handler.ServerHandler |
| | | import com.flightfeather.uav.socket.handler.UnderwayWebSocketServerHandler |
| | | import com.flightfeather.uav.socket.processor.BaseProcessor |
| | |
| | | * *******************************************************************************/ |
| | | @Component |
| | | class UnderwaySocketServer( |
| | | private val sceneInfoRep: SceneInfoRep |
| | | private val sceneInfoRep: SceneInfoRep, |
| | | private val sourceTraceRep: SourceTraceRep |
| | | ) { |
| | | |
| | | private val bossGroup = NioEventLoopGroup() |
| | |
| | | ?.addLast(HttpServerCodec()) |
| | | ?.addLast(HttpObjectAggregator(65535)) |
| | | ?.addLast(WebSocketServerProtocolHandler("/ws")) |
| | | ?.addLast(UnderwayWebSocketServerHandler(sceneInfoRep)) |
| | | ?.addLast(UnderwayWebSocketServerHandler(sceneInfoRep, sourceTraceRep)) |
| | | } |
| | | }) |
| | | } |
| | |
| | | import com.flightfeather.uav.common.utils.GsonUtils |
| | | import com.flightfeather.uav.domain.entity.BaseRealTimeData |
| | | 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.sender.UnderwayWebSocketSender |
| | | import io.netty.channel.ChannelHandlerContext |
| | |
| | | * @date 2025/5/13 |
| | | * @author feiyu02 |
| | | */ |
| | | class UnderwayWebSocketServerHandler(sceneInfoRep: SceneInfoRep) : BaseHandler() { |
| | | class UnderwayWebSocketServerHandler(sceneInfoRep: SceneInfoRep, sourceTraceRep: SourceTraceRep) : BaseHandler() { |
| | | |
| | | private val sourceTraceController = SourceTraceController(sceneInfoRep) |
| | | private val sourceTraceController = SourceTraceController(sceneInfoRep, sourceTraceRep) |
| | | |
| | | override var tag: String = "UAV-WS" |
| | | |
| | |
| | | import com.flightfeather.uav.model.epw.EPWDataPrep |
| | | 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.socket.bean.AirDataPackage |
| | | import com.flightfeather.uav.socket.decoder.AirDataDecoder |
| | | import com.flightfeather.uav.socket.decoder.DataPackageDecoder |
| | |
| | | class UnderwayProcessor( |
| | | private val airDataRep: AirDataRep, |
| | | private val sceneInfoRep: SceneInfoRep, |
| | | private val sourceTraceRep: SourceTraceRep |
| | | ) : BaseProcessor() { |
| | | |
| | | companion object { |
| | |
| | | saveToDataBase(packageData)?.takeIf { it.isNotEmpty() }?.get(0)?.let { |
| | | // æ¯å°è®¾å¤æåèªåç¬çå¼å¸¸æ°æ®å¤çå¨ |
| | | if (!sourceTraceMap.containsKey(it.deviceCode)) { |
| | | sourceTraceMap[it.deviceCode] = SourceTraceController(sceneInfoRep) |
| | | sourceTraceMap[it.deviceCode] = SourceTraceController(sceneInfoRep, sourceTraceRep) |
| | | } |
| | | // å°èµ°èªæ°æ®ä¼ å
¥å¼å¸¸å¤çå¨ |
| | | sourceTraceMap[it.deviceCode]?.addOneData(it) |
| | |
| | | |
| | | /** |
| | | * 污æåæç»æ |
| | | * @see [PollutedSummary.AnalysisResult] |
| | | * @see [AnalysisResult] |
| | | */ |
| | | AnaResult(2), |
| | | |
| | |
| | | </javaClientGenerator> |
| | | <!-- è¦çæç表 tableNameæ¯æ°æ®åºä¸ç表åæè§å¾å domainObjectNameæ¯å®ä½ç±»å--> |
| | | <!-- <table tableName="air_real_time_data" domainObjectName="RealTimeData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> |
| | | <table tableName="mission" domainObjectName="Mission" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/> |
| | | <!-- <table tableName="mission" domainObjectName="Mission" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> |
| | | <!-- <table tableName="el_minutevalue" domainObjectName="ElectricMinuteValue" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> |
| | | <!-- <table tableName="el_company_device" domainObjectName="CompanyDevice" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> |
| | | <!-- <table tableName="co_complaint" domainObjectName="Complaint" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> |
| | |
| | | <!-- <table tableName="grid_cell" domainObjectName="GridCell" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> |
| | | <!-- <table tableName="grid_data" domainObjectName="GridData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> |
| | | <!-- <table tableName="grid_data_detail" domainObjectName="GridDataDetail" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>--> |
| | | <table tableName="source_trace_msg" domainObjectName="SourceTraceMsg" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/> |
| | | </context> |
| | | </generatorConfiguration> |