feiyu02
2025-03-21 e5bdf2e02090357cbd580d54e6cd2406dd541760
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt
@@ -6,6 +6,8 @@
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.domain.repository.MissionRep
import com.flightfeather.uav.domain.repository.RealTimeDataRep
import com.flightfeather.uav.domain.repository.SatelliteGridRep
import com.flightfeather.uav.lightshare.eunm.GridType
import com.flightfeather.uav.lightshare.eunm.SatelliteDataType
@@ -22,7 +24,11 @@
 * @author feiyu02
 */
@Service
class SatelliteDataCalculateServiceImpl(private val satelliteGridRep: SatelliteGridRep) : SatelliteDataCalculateService {
class SatelliteDataCalculateServiceImpl(
    private val satelliteGridRep: SatelliteGridRep,
    private val realTimeDataRep: RealTimeDataRep,
    private val missionRep: MissionRep,
) : SatelliteDataCalculateService {
    override fun calGridVertex(groupId: Int): List<GridCell?> {
@@ -125,4 +131,58 @@
        return subGridDataDetailList
    }
    @Transactional
    override fun dataFusion(missionCode: String, groupId: Int): List<GridDataDetail?> {
        // 查询走航任务及对应走航监测数据
        val mission = missionRep.findOne(missionCode) ?: throw BizException("任务不存在")
        val data = realTimeDataRep.fetchData(mission)
        val oldGridDataList = satelliteGridRep.fetchGridData(GridData().apply {
            this.groupId = groupId
            mixDataId = missionCode
        })
        if (oldGridDataList.isEmpty()) {
            // 创建融合数据索引对象
            val newGridData = GridData().apply {
                this.groupId = groupId
                dataTime = mission.startTime
                type = SatelliteDataType.Monitor.value.toByte()
                mixDataId = mission.missionCode
            }
            satelliteGridRep.insertGridData(newGridData)
            // 查询网格单元格信息
            val gridCellList = satelliteGridRep.fetchGridCell(groupId)
            // 将走航数据和卫星网格进行融合计算
            val gridDataDetailList = SatelliteGridManage.dataFusion(data, newGridData, gridCellList)
            satelliteGridRep.insertGridDataDetail(gridDataDetailList)
            return gridDataDetailList
        } else {
            val oldGridData = oldGridDataList.first()
            val oldGridDataDetailList = satelliteGridRep.fetchGridDataDetail(oldGridData?.id, oldGridData?.groupId,
                null)
            // 查询网格单元格信息
            val gridCellList = satelliteGridRep.fetchGridCell(groupId)
            // 将走航数据和卫星网格进行融合计算
            val gridDataDetailList = SatelliteGridManage.dataFusion(data, oldGridData, gridCellList)
            // 将已有的数据id赋值给新的融合结果,两组结果均以根据cellId顺序排列,所以直接循环赋值
            gridDataDetailList.forEachIndexed { index, gridDataDetail ->
                gridDataDetail.id = oldGridDataDetailList[index]?.id
            }
            satelliteGridRep.updateGridDataDetail(gridDataDetailList)
            return gridDataDetailList
        }
    }
    override fun buildHeatmap(groupId: Int, gridDataDetail: List<GridDataDetail>): List<GridDataDetail> {
        val gridCellList = satelliteGridRep.fetchGridCell(groupId)
    }
}