| | |
| | | |
| | | 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.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 |
| | | import com.flightfeather.uav.lightshare.bean.GridDataDetailMixVo |
| | | import com.flightfeather.uav.lightshare.eunm.GridType |
| | | import com.flightfeather.uav.lightshare.eunm.SatelliteDataType |
| | | import com.flightfeather.uav.lightshare.service.SatelliteDataCalculateService |
| | |
| | | } |
| | | |
| | | @Transactional |
| | | override fun splitData(groupId: Int, dataId:Int): List<GridDataDetail?> { |
| | | override fun splitData(groupId: Int, dataId: Int): List<GridDataDetail?> { |
| | | // 检查是否是细分网格类型 |
| | | val gridGroup = satelliteGridRep.fetchGridGroup(groupId) ?: throw BizException("该网格组不存在,无法进行细分网格数据映射") |
| | | val gridGroup = |
| | | satelliteGridRep.fetchGridGroup(groupId) ?: throw BizException("该网格组不存在,无法进行细分网格数据映射") |
| | | if (gridGroup.type != GridType.Sub.name.lowercase()) throw BizException("该网格组不是细分网格类型存在,无法进行细分网格数据映射") |
| | | |
| | | val subGridCellList = satelliteGridRep.fetchGridCell(groupId) |
| | | val originGridData = satelliteGridRep.fetchGridData(dataId) |
| | | val originGridDataDetailList = satelliteGridRep.fetchGridDataDetail(dataId, null, null) |
| | | val originGridDataDetailList = satelliteGridRep.fetchGridDataDetail(dataId) |
| | | |
| | | val subGridData = GridData().apply { |
| | | this.groupId = groupId |
| | |
| | | return gridDataDetailList |
| | | } else { |
| | | val oldGridData = oldGridDataList.first() |
| | | val oldGridDataDetailList = satelliteGridRep.fetchGridDataDetail(oldGridData?.id, oldGridData?.groupId, |
| | | null) |
| | | val oldGridDataDetailList = satelliteGridRep.fetchGridDataDetail(oldGridData?.id, oldGridData?.groupId) |
| | | // 查询网格单元格信息 |
| | | val gridCellList = satelliteGridRep.fetchGridCell(groupId) |
| | | // 将走航数据和卫星网格进行融合计算 |
| | |
| | | } |
| | | } |
| | | |
| | | override fun buildHeatmap(groupId: Int, gridDataDetailList: List<GridDataDetail>, searchLength:Int): List<GridDataDetail> { |
| | | override fun mixGridData(groupId: Int, dataIdList: List<Int>): List<GridDataDetailMixVo> { |
| | | // 获取所使用的网格组网格信息 |
| | | val gridCellList = satelliteGridRep.fetchGridCell(groupId) |
| | | |
| | | val gridDataDetailMap = mutableMapOf<Int?, MutableList<GridDataDetail>>() |
| | | |
| | | // 归集所有相同单元网格的数据 |
| | | dataIdList.forEach { id -> |
| | | satelliteGridRep.fetchGridDataDetail(id, groupId).forEach gdd@{ gdd -> |
| | | if (gdd == null) return@gdd |
| | | if (!gridDataDetailMap.containsKey(gdd.cellId)) { |
| | | gridDataDetailMap[gdd.cellId] = mutableListOf() |
| | | } |
| | | gridDataDetailMap[gdd.cellId]?.add(gdd) |
| | | } |
| | | } |
| | | |
| | | // 将所有结果格式化,同时重叠网格进行监测数据均值计算 |
| | | val result = mutableListOf<GridDataDetailMixVo>() |
| | | gridDataDetailMap.forEach { (_, v) -> |
| | | val target = GridDataDetailMixVo() |
| | | if (v.size == 1) { |
| | | BeanUtils.copyProperties(v[0], target) |
| | | } else { |
| | | BeanUtils.copyProperties(v.avg(), target) |
| | | target.mixData = true |
| | | target.originDataList = v |
| | | } |
| | | target.apply { |
| | | this.dataId = v.first().dataId |
| | | this.groupId = v.first().groupId |
| | | this.cellId = v.first().cellId |
| | | } |
| | | result.add(target) |
| | | } |
| | | result.sortBy { it.pm25 } |
| | | result.forEachIndexed { index, d -> |
| | | d.rank = index + 1 |
| | | } |
| | | result.sortBy { it.cellId } |
| | | |
| | | return result |
| | | } |
| | | |
| | | 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 resMap = mutableMapOf<Int, MutableList<GridDataDetail>>() |
| | | |
| | | // 循环计算每个网格的周边扩散网格结果 |
| | | gridDataDetailList.forEach {gdd -> |
| | | SatelliteGridManage.heatMap(gdd, gridCellList, option, searchLength).forEach {r -> |
| | | 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() |