feiyu02
2025-03-07 db447bb757b51f8d03e62d6ae4f183b4608723ef
卫星遥测系统相关接口新增及调整
已修改10个文件
已添加1个文件
334 ■■■■ 文件已修改
src/main/kotlin/com/flightfeather/uav/biz/satellite/SatelliteGridManage.kt 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/domain/repository/SatelliteGridRep.kt 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/service/SatelliteTelemetryService.kt 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/service/SceneService.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteTelemetryServiceImpl.kt 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SceneServiceImpl.kt 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/web/SatelliteTelemetryController.kt 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/lightshare/web/SceneController.kt 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/kotlin/com/flightfeather/uav/SatelliteDebugData.kt 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImplTest.kt 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/satellite/SatelliteGridManage.kt
@@ -229,7 +229,7 @@
     */
    fun dataFusion(
        realTimeDataList: List<BaseRealTimeData>,
        gridData: GridData,
        gridData: GridData?,
        gridCellList: List<GridCell?>,
    ): List<GridDataDetail> {
        // éåŽ†èµ°èˆªç›‘æµ‹æ•°æ®ï¼Œè®¡ç®—æ¯ä¸ªç‚¹æ‰€åœ¨ç½‘æ ¼
@@ -251,7 +251,7 @@
        dataMap.forEach { (k, v) ->
            val avgData = v.avg()
            val dataDetail = GridDataDetail().apply {
                dataId = gridData.id
                dataId = gridData?.id
                groupId = k.groupId
                cellId = k.cellIndex
                pm25 = avgData.pm25
@@ -260,6 +260,12 @@
            gridDataDetailList.add(dataDetail)
        }
        gridDataDetailList.sortBy { it.pm25 }
        gridDataDetailList.forEachIndexed { index, d ->
            d.rank = index + 1
        }
        gridDataDetailList.sortBy { it.cellId }
        return gridDataDetailList
    }
src/main/kotlin/com/flightfeather/uav/domain/repository/SatelliteGridRep.kt
@@ -28,13 +28,14 @@
    private val gridAodDetailMapper: GridAodDetailMapper,
) {
    fun fetchGridGroup(areaVo: AreaVo): List<GridGroup?> {
    fun fetchGridGroup(areaVo: AreaVo, type: String?): List<GridGroup?> {
        return gridGroupMapper.selectByExample(Example(GridGroup::class.java).apply {
            createCriteria()
                .andEqualTo("provinceCode", areaVo.provinceCode).andEqualTo("provinceName", areaVo.provinceName)
                .andEqualTo("cityCode", areaVo.cityCode).andEqualTo("cityName", areaVo.cityName)
                .andEqualTo("districtCode", areaVo.districtCode).andEqualTo("districtName", areaVo.districtName)
                .andEqualTo("townCode", areaVo.townCode).andEqualTo("townName", areaVo.townName)
                .andEqualTo("type", type)
        })
    }
@@ -66,6 +67,8 @@
        }
    }
    /*****************************************************************/
    fun fetchGridCell(groupId: Int): List<GridCell?> {
        return gridCellMapper.selectByExample(Example(GridCell::class.java).apply {
            createCriteria().andEqualTo("groupId", groupId)
@@ -76,6 +79,8 @@
    fun insertGridCell(gridCellList: List<GridCell?>): Int {
        return gridCellMapper.insertList(gridCellList)
    }
    /*****************************************************************/
    fun fetchGridData(groupId: Int, dataTime: LocalDateTime?, type: Int?): List<GridData?> {
        return gridDataMapper.selectByExample(Example(GridData::class.java).apply {
@@ -101,7 +106,15 @@
        return gridDataDetailMapper.insertList(gridDataDetails)
    }
    fun fetchGridDataDetail(dataId: Int, groupId: Int?, cellId: Int?): List<GridDataDetail?> {
    fun updateGridDataDetail(gridDataDetails: List<GridDataDetail?>): Int {
        var res = 0
        gridDataDetails.forEach {
            res += gridDataDetailMapper.updateByPrimaryKey(it)
        }
        return res
    }
    fun fetchGridDataDetail(dataId: Int?, groupId: Int?, cellId: Int?): List<GridDataDetail?> {
        return gridDataDetailMapper.selectByExample(Example(GridDataDetail::class.java).apply {
            createCriteria().andEqualTo("dataId", dataId)
                .andEqualTo("groupId", groupId)
@@ -123,6 +136,7 @@
        gridDataDetailMapper.updatePM25Batch(gridDataDetails)
    }
    /*****************************************************************/
    //    aod ç›¸å…³æ“ä½œ
    fun fetchGridAod(groupId: Int, dataTime: LocalDateTime?): List<GridAod?> {
src/main/kotlin/com/flightfeather/uav/lightshare/service/SatelliteTelemetryService.kt
@@ -2,6 +2,7 @@
import com.flightfeather.uav.common.exception.BizException
import com.flightfeather.uav.domain.entity.GridAod
import com.flightfeather.uav.domain.entity.GridAodDetail
import com.flightfeather.uav.domain.entity.GridCell
import com.flightfeather.uav.domain.entity.GridData
import com.flightfeather.uav.domain.entity.GridDataDetail
@@ -20,7 +21,7 @@
 */
interface SatelliteTelemetryService {
    fun fetchGridGroup(areaVo: AreaVo, page: Int?, perPage: Int?): Pair<DataHead, List<GridGroup?>>
    fun fetchGridGroup(areaVo: AreaVo, type: String?, page: Int?, perPage: Int?): Pair<DataHead, List<GridGroup?>>
    fun deleteGridGroup(groupId: Int)
@@ -29,6 +30,12 @@
    fun fetchGridData(groupId: Int, dataTime: LocalDateTime?, type: Int?): List<GridData?>
    fun fetchGridDataDetail(dataId: Int, groupId: Int?, cellId: Int?): List<GridDataDetail?>
    fun createGridDataAndDataDetail(
        groupId: Int,
        dataTime: LocalDateTime?,
        gridDataDetail: List<GridDataDetail>,
    ): Boolean
    /**
     * æ•°æ®èžåˆ
@@ -40,8 +47,6 @@
    fun downloadTemplate(response: HttpServletResponse): Boolean
    fun fetchGridAod(groupId: Int, dataTime: LocalDateTime?): List<GridAod?>
    @Throws(BizException::class)
    fun importGridAOD(groupId: Int, dataTime: LocalDateTime?, update: Boolean, file: MultipartFile): GridDataImportResult?
@@ -52,4 +57,10 @@
     * @param groupId ç½‘格组索引id
     */
    fun calGridVertex(groupId: Int): List<GridCell?>
    /**AOD数据相关**************************************************************/
    fun fetchGridAod(groupId: Int, dataTime: LocalDateTime?): List<GridAod?>
    fun fetchGridAODDetail(aodId: Int, groupId: Int?, cellId: Int?): List<GridAodDetail?>
}
src/main/kotlin/com/flightfeather/uav/lightshare/service/SceneService.kt
@@ -1,5 +1,6 @@
package com.flightfeather.uav.lightshare.service
import com.flightfeather.uav.domain.entity.GridCell
import com.flightfeather.uav.domain.entity.SceneInfo
import com.flightfeather.uav.lightshare.bean.AreaVo
@@ -8,4 +9,6 @@
    fun searchScene(areaVo: AreaVo, page: Int?, perPage: Int?): List<SceneInfo?>
    fun searchByCoordinate(lng: Double, lat: Double, radius: Double): List<SceneInfo?>
    fun searchByGrid(gridCell: GridCell): List<SceneInfo?>
}
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt
@@ -138,21 +138,46 @@
        val mission = missionRep.findOne(missionCode) ?: throw BizException("任务不存在")
        val data = realTimeDataRep.fetchData(mission)
        // åˆ›å»ºèžåˆæ•°æ®ç´¢å¼•对象
        val newGridData = GridData().apply {
        val oldGridDataList = satelliteGridRep.fetchGridData(GridData().apply {
            this.groupId = groupId
            dataTime = mission.startTime
            type = SatelliteDataType.Monitor.value.toByte()
            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
        }
        satelliteGridRep.insertGridData(newGridData)
        // æŸ¥è¯¢ç½‘格单元格信息
        val gridCellList = satelliteGridRep.fetchGridCell(groupId)
        // å°†èµ°èˆªæ•°æ®å’Œå«æ˜Ÿç½‘格进行融合计算
        val gridDataDetailList = SatelliteGridManage.dataFusion(data, newGridData, gridCellList)
        satelliteGridRep.insertGridDataDetail(gridDataDetailList)
        return gridDataDetailList
    }
}
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteTelemetryServiceImpl.kt
@@ -4,15 +4,12 @@
import com.flightfeather.uav.biz.satellite.SatelliteGridManage
import com.flightfeather.uav.common.exception.BizException
import com.flightfeather.uav.common.utils.FileExchange
import com.flightfeather.uav.domain.entity.GridAod
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.domain.entity.*
import com.flightfeather.uav.domain.repository.SatelliteGridRep
import com.flightfeather.uav.lightshare.bean.AreaVo
import com.flightfeather.uav.lightshare.bean.DataHead
import com.flightfeather.uav.lightshare.bean.GridDataImportResult
import com.flightfeather.uav.lightshare.eunm.SatelliteDataType
import com.flightfeather.uav.lightshare.service.SatelliteTelemetryService
import com.github.pagehelper.PageHelper
import org.springframework.stereotype.Service
@@ -38,9 +35,10 @@
) : SatelliteTelemetryService {
    private val fileExchange = FileExchange()
    override fun fetchGridGroup(areaVo: AreaVo, page: Int?, perPage: Int?): Pair<DataHead, List<GridGroup?>> {
    override fun fetchGridGroup(areaVo: AreaVo, type: String?, page: Int?, perPage: Int?): Pair<DataHead,
            List<GridGroup?>> {
        val pageInfo = PageHelper.startPage<GridGroup>(page ?: 1, perPage ?: 100)
        val res = satelliteGridRep.fetchGridGroup(areaVo)
        val res = satelliteGridRep.fetchGridGroup(areaVo, type)
        return DataHead(pageInfo.pageNum, pageInfo.pages) to res
    }
@@ -56,10 +54,6 @@
        return satelliteGridRep.fetchGridData(groupId, dataTime, type)
    }
    override fun fetchGridAod(groupId: Int, dataTime: LocalDateTime?): List<GridAod?> {
        return satelliteGridRep.fetchGridAod(groupId, dataTime)
    }
    override fun fetchGridDataDetail(dataId: Int, groupId: Int?, cellId: Int?): List<GridDataDetail?> {
        val res =  satelliteGridRep.fetchGridDataDetail(dataId, groupId, cellId)
        res.forEach {
@@ -68,6 +62,38 @@
            }
        }
        return res
    }
    @Transactional
    override fun createGridDataAndDataDetail(
        groupId: Int,
        dataTime: LocalDateTime?,
        gridDataDetail: List<GridDataDetail>,
    ): Boolean {
        // ä¿å­˜æ‹Ÿåˆçš„卫星遥测数据 type始终为0
        val type = SatelliteDataType.Original.value
        // æŸ¥æ‰¾æ˜¯å¦æœ‰åŽ†å²è®°å½•
        val gridData = satelliteGridRep.fetchGridData(groupId, dataTime, type)
        // æ— åŽ†å²è®°å½•åˆ™åˆ›å»ºæ•°æ®ç´¢å¼•GridData,之后再存入拟合的数据
        if (gridData.isEmpty()) {
            val gridDataEntity = GridData()
            gridDataEntity.groupId = groupId
            gridDataEntity.dataTime = dataTime?.atZone(ZoneId.systemDefault())?.toInstant()?.toEpochMilli()
                ?.let { Date(it) }
            gridDataEntity.type = type.toByte()
            satelliteGridRep.insertGridDataAndDetail(gridDataEntity, gridDataDetail)
        }
        // æ›´æ–°åŽ†å²æ•°æ®
        else {
            gridDataDetail.forEach {
                it.dataId = gridData[0]?.id
                it.groupId = gridData[0]?.groupId
            }
            satelliteGridRep.updatePM25Batch(gridDataDetail)
        }
        return true
    }
    @Transactional
@@ -238,4 +264,12 @@
        return cellList
    }
    override fun fetchGridAod(groupId: Int, dataTime: LocalDateTime?): List<GridAod?> {
        return satelliteGridRep.fetchGridAod(groupId, dataTime)
    }
    override fun fetchGridAODDetail(aodId: Int, groupId: Int?, cellId: Int?): List<GridAodDetail?> {
        return satelliteGridRep.fetchGridAodDetail(aodId, groupId, cellId)
    }
}
src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SceneServiceImpl.kt
@@ -1,6 +1,7 @@
package com.flightfeather.uav.lightshare.service.impl
import com.flightfeather.uav.common.location.LocationRoadNearby
import com.flightfeather.uav.domain.entity.GridCell
import com.flightfeather.uav.domain.entity.SceneInfo
import com.flightfeather.uav.domain.repository.SceneInfoRep
import com.flightfeather.uav.lightshare.bean.AreaVo
@@ -21,4 +22,10 @@
    override fun searchByCoordinate(lng: Double, lat: Double, radius: Double): List<SceneInfo?> {
        return locationRoadNearby.searchByRadius(Pair(lng, lat), radius)
    }
    override fun searchByGrid(gridCell: GridCell): List<SceneInfo?> {
        // é¦–先用网格中心点以及网格对角线的长度求取四至范围,筛选该范围内的场景点位
        // å†é€šè¿‡è®¡ç®—坐标点是否落在多边形内
        TODO()
    }
}
src/main/kotlin/com/flightfeather/uav/lightshare/web/SatelliteTelemetryController.kt
@@ -1,7 +1,8 @@
package com.flightfeather.uav.lightshare.web
import com.fasterxml.jackson.annotation.JsonFormat
import com.flightfeather.uav.domain.entity.GridDataDetail
import com.flightfeather.uav.lightshare.bean.AreaVo
import com.flightfeather.uav.lightshare.service.SatelliteDataCalculateService
import com.flightfeather.uav.lightshare.service.SatelliteTelemetryService
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
@@ -21,15 +22,19 @@
@Api(tags = ["卫星遥测API接口"])
@RestController
@RequestMapping("air/satellite")
class SatelliteTelemetryController(private val satelliteTelemetryService: SatelliteTelemetryService) {
class SatelliteTelemetryController(
    private val satelliteTelemetryService: SatelliteTelemetryService,
    private val satelliteDataCalculateService: SatelliteDataCalculateService
) {
    @ApiOperation(value = "获取网格组信息")
    @PostMapping("/grid/group")
    fun fetchGridGroup(
        @RequestBody areaVo: AreaVo,
        @RequestParam(required = false) type: String?,
        @RequestParam("page", required = false) page: Int?,
        @RequestParam("per_page", required = false) perPage: Int?
    ) = resPack { satelliteTelemetryService.fetchGridGroup(areaVo, page, perPage) }
    ) = resPack { satelliteTelemetryService.fetchGridGroup(areaVo, type, page, perPage) }
    @ApiOperation(value = "获取网格组内具体网格信息")
    @GetMapping("/grid/cell")
@@ -54,11 +59,24 @@
        @ApiParam("网格单元格id") @RequestParam(required = false) cellId: Int?,
    ) = resPack { satelliteTelemetryService.fetchGridDataDetail(dataId, groupId, cellId) }
    @ApiOperation(value = "保存拟合生成的卫星遥测PM2.5结果数据")
    @PostMapping("/grid/data/create")
    fun createGridDataAndDataDetail(
        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("遥测数据时间")
        @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dateTime: LocalDateTime,
        @RequestBody gridDataDetail: List<GridDataDetail>
    ) = resPack {
        satelliteTelemetryService.createGridDataAndDataDetail(groupId, dateTime, gridDataDetail)
    }
    @ApiOperation(value = "多次走航数据进行融合计算")
    @PostMapping("/grid/data/mix")
    fun mixGridData(
        @ApiParam("原始数据id数组") @RequestBody dataIdList: List<Int>
    ) = resPack { satelliteTelemetryService.mixGridData(dataIdList) }
    @ApiOperation(value = "导入卫星遥测PM2.5结果数据")
    @PostMapping("/import/grid/data")
@@ -76,14 +94,6 @@
    @GetMapping("/import/grid/data/download/template")
    fun downloadTemplate(@ApiIgnore response: HttpServletResponse) = satelliteTelemetryService.downloadTemplate(response)
    @ApiOperation(value = "获取网格组下的卫星遥测aod数据")
    @GetMapping("/grid/aod")
    fun fetchGridAod(
        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("遥测数据时间")
        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dataTime: LocalDateTime?,
    ) = resPack { satelliteTelemetryService.fetchGridAod(groupId, dataTime) }
    @ApiOperation(value = "导入卫星遥测Aod结果数据")
    @PostMapping("/import/grid/aod")
    fun importGridAOD(
@@ -99,4 +109,41 @@
    @ApiOperation(value = "下载卫星遥测Aod结果数据导入模板")
    @GetMapping("/import/grid/aod/download/template")
    fun downloadAODTemplate(@ApiIgnore response: HttpServletResponse) = satelliteTelemetryService.downloadAODTemplate(response)
    /**AOD数据相关**************************************************************/
    @ApiOperation(value = "获取网格组下的卫星遥测aod数据")
    @GetMapping("/grid/aod")
    fun fetchGridAod(
        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("遥测数据时间")
        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dataTime: LocalDateTime?,
    ) = resPack { satelliteTelemetryService.fetchGridAod(groupId, dataTime) }
//    @ApiOperation(value = "获取网格组下的卫星遥测AOD数据")
//    @GetMapping("/aod/data")
//    fun fetchGridAOD(
//        @ApiParam("网格组id") @RequestParam groupId: Int,
//        @ApiParam("AOD数据时间")
//        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dataTime: LocalDateTime?,
//    ) = resPack { satelliteTelemetryService.fetchGridAOD(groupId, dataTime) }
    @ApiOperation(value = "获取网格组下的卫星遥测AOD具体数据")
    @GetMapping("/aod/data/detail")
    fun fetchGridAODDetail(
        @ApiParam("AOD数据id") @RequestParam aodId: Int,
        @ApiParam("网格组id") @RequestParam(required = false) groupId: Int?,
        @ApiParam("网格单元格id") @RequestParam(required = false) cellId: Int?,
    ) = resPack { satelliteTelemetryService.fetchGridAODDetail(aodId, groupId, cellId) }
    /**遥测产品制作相关**************************************************************/
    @ApiOperation(value = "生成走航融合产品")
    @GetMapping("/product/underway/build")
    fun buildUnderwayProduct(
        @ApiParam("走航任务编号") @RequestParam missionCode: String,
        @ApiParam("网格组id") @RequestParam groupId: Int,
    ) = resPack { satelliteDataCalculateService.dataFusion(missionCode, groupId) }
}
src/main/kotlin/com/flightfeather/uav/lightshare/web/SceneController.kt
@@ -1,5 +1,6 @@
package com.flightfeather.uav.lightshare.web
import com.flightfeather.uav.domain.entity.GridCell
import com.flightfeather.uav.lightshare.bean.AreaVo
import com.flightfeather.uav.lightshare.service.SceneService
import io.swagger.annotations.Api
@@ -24,4 +25,10 @@
        @RequestParam("lat") lat: Double,
        @RequestParam("radius") radius: Double,
    ) = resPack { sceneService.searchByCoordinate(lng, lat, radius) }
    @ApiOperation(value = "根据卫星网格找到范围内的场景")
    @PostMapping("/find/grid")
    fun searchByGrid(
        @RequestBody gridCell: GridCell,
    ) = resPack { sceneService.searchByGrid(gridCell) }
}
src/test/kotlin/com/flightfeather/uav/SatelliteDebugData.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.flightfeather.uav
import com.flightfeather.uav.domain.entity.GridAod
import com.flightfeather.uav.domain.entity.GridAodDetail
import com.flightfeather.uav.domain.entity.GridData
import com.flightfeather.uav.domain.entity.GridDataDetail
import com.flightfeather.uav.domain.mapper.GridAodDetailMapper
import com.flightfeather.uav.domain.mapper.GridAodMapper
import com.flightfeather.uav.domain.mapper.GridDataDetailMapper
import com.flightfeather.uav.domain.mapper.GridDataMapper
import com.flightfeather.uav.lightshare.eunm.GridType
import com.flightfeather.uav.lightshare.eunm.SatelliteDataType
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner
import org.springframework.transaction.annotation.Transactional
/**
 * å«æ˜Ÿé¥æµ‹æµ‹è¯•数据管理
 * @date 2025/3/2
 * @author feiyu02
 */
@RunWith(SpringRunner::class)
@SpringBootTest
class SatelliteDebugData {
    @Autowired
    lateinit var gridDataMapper: GridDataMapper
    @Autowired
    lateinit var gridDataDetailMapper: GridDataDetailMapper
    @Autowired
    lateinit var gridAodMapper: GridAodMapper
    @Autowired
    lateinit var gridAodDetailMapper: GridAodDetailMapper
    /**
     * åå‘生成AOD数据
     */
    @Test
    fun createAODData() {
        gridDataMapper.select(GridData().apply { type = SatelliteDataType.Original.value.toByte() }).forEach {gridData ->
            val gridAod = GridAod().apply {
                groupId = gridData?.groupId
                dataTime = gridData?.dataTime
            }
            gridAodMapper.insert(gridAod)
            gridDataDetailMapper.select(GridDataDetail().apply {
                dataId = gridData?.id
            }).forEach { gridDataDetail->
                val girdAodDetail = GridAodDetail().apply {
                    aodId = gridAod.id
                    groupId = gridAod.groupId
                    cellId = gridDataDetail?.cellId
                    aod = gridDataDetail?.pm25?.div(2)
                }
                gridAodDetailMapper.insert(girdAodDetail)
            }
        }
    }
}
src/test/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImplTest.kt
@@ -26,7 +26,7 @@
     */
    @Test
    fun refreshDataRank() {
        for (i in 51..51) {
        for (i in 64..69) {
            val dataDetailList = gridDataDetailMapper.selectByExample(Example(GridDataDetail::class.java).apply {
                createCriteria().andEqualTo("dataId", i)
                orderBy("pm25").desc()
@@ -47,13 +47,29 @@
    @Test
    fun splitData() {
        val res = satelliteDataCalculateService.splitData(4, 25)
//        println(res)
        val groupIdList = listOf(2, 4)
        val dataId = listOf(34, 29, 25, 18, 8)
        groupIdList.forEach {g ->
            dataId.forEach { d ->
                satelliteDataCalculateService.splitData(g, d)
            }
        }
//        val res = satelliteDataCalculateService.splitData(2, 25)
    }
    @Test
    fun dataFusion() {
        val res = satelliteDataCalculateService.dataFusion("SH-CN-20241216", 3)
//        println(res)
        val missionList =
            listOf("SH-CN-20241202", "SH-CN-20241127", "SH-CN-20241126-1", "SH-CN-20241126-2", "SH-CN-20241108", "SH-CN-20240823")
        missionList.forEach { m ->
            satelliteDataCalculateService.dataFusion(m, 3)
        }
//        val res = satelliteDataCalculateService.dataFusion("SH-CN-20241216", 3)
    }
    @Test
    fun splitDataAndDataFusion() {
    }
}