From e133600480d5f688a8375db7708fe531b4726f4a Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期五, 07 二月 2025 17:38:38 +0800 Subject: [PATCH] 1. 新增卫星网格拆分、遥测数据拆分映射功能 --- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt | 83 ++++++++++++++++++++++++++++++++++++++++- 1 files changed, 80 insertions(+), 3 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 9fcf324..d69174c 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 @@ -3,12 +3,21 @@ import com.flightfeather.uav.biz.satellite.SatelliteGridManage 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.domain.repository.SatelliteGridRep +import com.flightfeather.uav.lightshare.eunm.GridType +import com.flightfeather.uav.lightshare.eunm.SatelliteDataType import com.flightfeather.uav.lightshare.service.SatelliteDataCalculateService +import org.springframework.beans.BeanUtils import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional +import java.util.Date +import kotlin.math.round /** - * + * 鍗槦缃戞牸鍧愭爣鍙婄洃娴嬫暟鎹簩娆¤绠� * @date 2025/1/15 * @author feiyu02 */ @@ -45,7 +54,75 @@ return cellList } - override fun splitGrid(groupId: Int): List<GridCell?> { - TODO("Not yet implemented") + override fun splitGrid(groupId: Int, scale: Int): List<GridCell?> { + // 妫�鏌ヨ缃戞牸灞炴�ф槸鍚﹀悎瑙� + val gridGroup = + satelliteGridRep.fetchGridGroup(groupId) ?: throw BizException("璇ョ綉鏍肩粍涓嶅瓨鍦紝鏃犳硶杩涜缃戞牸缁嗗垎") + if (gridGroup.length == null) throw BizException("璇ョ綉鏍肩粍娌℃湁璁惧畾缃戞牸杈归暱锛屾棤娉曡繘琛岀綉鏍肩粏鍒�") + + // 妫�鏌ヨ缃戞牸涓嬭绉嶇被鐨勭粏鍒嗙綉鏍兼槸鍚﹀瓨鍦紝鑻ヤ笉瀛樺湪锛屽垯鏂板缓 + val searchGridGroup = GridGroup().apply { + type = GridType.Sub.name.lowercase() + fatherGroupId = gridGroup.id + length = round(gridGroup.length / scale) + } + val subGridGroupList = satelliteGridRep.fetchGridGroup(searchGridGroup) + // 鑻ョ粏鍒嗙綉鏍艰褰曡秴杩�1涓紝璇存槑涓氬姟閫昏緫瀛樺湪闂锛岀浉鍚岃竟闀跨殑缁嗗垎缃戞牸搴旇鍙湁1涓� + if (subGridGroupList.size > 1) { + throw BizException("璇ョ綉鏍肩粍涓�${searchGridGroup.length}绫宠竟闀跨殑缃戞牸璁板綍瓒呰繃1涓紝鏃犳硶鍐嶈繘琛岀綉鏍肩粏鍒嗭紝骞朵笖璇锋鏌ョ敓鎴愰�昏緫鏄惁闂") + } + // 鑻ョ粏鍒嗙綉鏍艰褰曟湁涓斿彧鏈�1涓紝鍒欐棤闇�鍐嶆缁嗗垎锛岀洿鎺ヨ繑鍥炲凡鏈夌粨鏋� + else if (subGridGroupList.size == 1) { + val g = subGridGroupList.first() + ?: throw BizException("璇ョ綉鏍肩粍涓嬬殑缁嗗垎缃戞牸璁板綍宸叉崯鍧忥紝鏃犳硶浣跨敤锛岃妫�鏌ユ暟鎹簱璁板綍") + return satelliteGridRep.fetchGridCell(g.id) + } + // 褰撴病鏈夎褰曟椂锛屾墽琛岀敓鎴愰�昏緫 + + // 鐢熸垚鏂扮殑缁嗗垎缃戞牸缁勮褰� + val newGridGroup = GridGroup() + BeanUtils.copyProperties(gridGroup, newGridGroup) + newGridGroup.apply { + id = null + name += "${searchGridGroup.length.toInt()}绫崇粏鍒�" + createTime = Date() + length = searchGridGroup.length + type = GridType.Sub.name.lowercase() + fatherGroupId = groupId + } + satelliteGridRep.insertGridGroup(newGridGroup) + + // 鑾峰彇鍏蜂綋缃戞牸淇℃伅 + val cellList = satelliteGridRep.fetchGridCell(groupId) + // 鎸夌収缁欏畾鐨勬媶鍒嗙郴鏁拌繘琛屾媶鍒� + val subCellList = SatelliteGridManage.splitGrid(cellList, scale, newGridGroup.id) + satelliteGridRep.insertGridCell(subCellList) + + return subCellList + } + + @Transactional + override fun splitData(groupId: Int, dataId:Int): List<GridDataDetail?> { + // 妫�鏌ユ槸鍚︽槸缁嗗垎缃戞牸绫诲瀷 + 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 subGridData = GridData().apply { + this.groupId = groupId + dataTime = originGridData?.dataTime + type = SatelliteDataType.Sub.value.toByte() + } + satelliteGridRep.insertGridData(subGridData) + + val subGridDataDetailList = + SatelliteGridManage.splitData(subGridCellList, subGridData, originGridDataDetailList) + + satelliteGridRep.insertGridDataDetail(subGridDataDetailList) + + return subGridDataDetailList } } \ No newline at end of file -- Gitblit v1.9.3