From bde043c8fd1a076f44c402dd56c62d401afbfb16 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期四, 27 三月 2025 17:29:48 +0800 Subject: [PATCH] 1. 新增卫星遥测网格热力图计算逻辑 --- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt | 62 ++++++++++++++++++++++++++++-- 1 files changed, 57 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt index 248b091..c260d11 100644 --- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt +++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt @@ -1,11 +1,11 @@ package com.flightfeather.uav.lightshare.service.impl +import com.flightfeather.uav.biz.satellite.GridGroupOption import com.flightfeather.uav.biz.satellite.SatelliteGridManage +import com.flightfeather.uav.biz.satellite.SatelliteGridUtil import com.flightfeather.uav.common.exception.BizException -import com.flightfeather.uav.domain.entity.GridCell -import com.flightfeather.uav.domain.entity.GridData -import com.flightfeather.uav.domain.entity.GridDataDetail -import com.flightfeather.uav.domain.entity.GridGroup +import com.flightfeather.uav.common.utils.TimeUtil +import com.flightfeather.uav.domain.entity.* import com.flightfeather.uav.domain.repository.MissionRep import com.flightfeather.uav.domain.repository.RealTimeDataRep import com.flightfeather.uav.domain.repository.SatelliteGridRep @@ -138,9 +138,11 @@ val mission = missionRep.findOne(missionCode) ?: throw BizException("浠诲姟涓嶅瓨鍦�") val data = realTimeDataRep.fetchData(mission) + // 鏌ユ壘鏄惁宸叉湁璧拌埅铻嶅悎璁板綍 val oldGridDataList = satelliteGridRep.fetchGridData(GridData().apply { this.groupId = groupId mixDataId = missionCode + this.type = SatelliteDataType.Monitor.value.toByte() }) if (oldGridDataList.isEmpty()) { @@ -149,7 +151,23 @@ this.groupId = groupId dataTime = mission.startTime type = SatelliteDataType.Monitor.value.toByte() - mixDataId = mission.missionCode + this.missionCode = mission.missionCode + // Fixme 2025.3.27: 琛屾斂鍖哄垝鍦ㄨ蛋鑸换鍔℃坊鍔犲搴斿瓧娈靛悗杩涜璧嬪�� + provinceCode + provinceName + cityCode + cityName + districtCode + districtName = mission.districtName + // Fixme 2025.3.27: 鎵�灞炵洃娴嬬偣鍖哄煙鐩墠闇�瑕侀�氳繃鐢ㄦ埛閫夋嫨纭畾 + zone + pollutionDegreeIndex + pollutionDegree + + val period = TimeUtil.getDayTimeTag(mission.startTime, mission.endTime) + dayTimePeriod = period?.first + dayTimePeriodStart = period?.second + dayTimePeriodEnd = period?.third } satelliteGridRep.insertGridData(newGridData) @@ -180,4 +198,38 @@ return gridDataDetailList } } + + override fun buildHeatmap(groupId: Int, gridDataDetailList: List<GridDataDetail>, searchLength:Int): List<GridDataDetail> { + val gridCellList = satelliteGridRep.fetchGridCell(groupId) + val originCellIdList = gridDataDetailList.map { it.cellId } + // Fixme 2025.3.24: 姝ゅ鏍规嵁鐜版湁鐨勭綉鏍间俊鎭璁℃柟寮忥紝浣跨敤涓存椂鐨勫弬鏁帮紝鍚庣画灏嗙綉鏍奸�氳繃浜岀淮鍧愭爣褰㈠紡琛ㄧず锛屾澶勫弬鏁板幓闄� + val option = GridGroupOption(120, 90, 10, 10) + + val resMap = mutableMapOf<Int, MutableList<GridDataDetail>>() + + // 寰幆璁$畻姣忎釜缃戞牸鐨勫懆杈规墿鏁g綉鏍肩粨鏋� + gridDataDetailList.forEach {gdd -> + SatelliteGridManage.heatMap(gdd, gridCellList, option, searchLength).forEach {r -> + if (!originCellIdList.contains(r.cellId)) { + if (!resMap.containsKey(r.cellId)) { + resMap[r.cellId] = mutableListOf() + } + resMap[r.cellId]?.add(r) + } + } + } + + // 灏嗘墍鏈夌粨鏋滄牸寮忓寲锛屽悓鏃堕噸鍙犵綉鏍艰繘琛岀洃娴嬫暟鎹潎鍊艰绠� + val result = mutableListOf<GridDataDetail>() + resMap.forEach { (_, v) -> + result.add(v.avg().apply { + this.dataId = v.first().dataId + this.groupId = v.first().groupId + this.cellId = v.first().cellId + }) + } + result.addAll(gridDataDetailList) + + return result + } } \ No newline at end of file -- Gitblit v1.9.3