From e5bdf2e02090357cbd580d54e6cd2406dd541760 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期五, 21 三月 2025 17:39:30 +0800
Subject: [PATCH] 1. 新增卫星遥测网格热力图计算逻辑(待完成)

---
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteTelemetryServiceImpl.kt |   64 +++++++++++++++++++++++++------
 1 files changed, 51 insertions(+), 13 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteTelemetryServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteTelemetryServiceImpl.kt
index 3e24c07..4038e82 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteTelemetryServiceImpl.kt
+++ b/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,10 +35,15 @@
 ) : 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
+    }
+
+    override fun deleteGridGroup(groupId: Int) {
+        satelliteGridRep.deleteGridGroup(groupId)
     }
 
     override fun fetchGridCell(groupId: Int): List<GridCell?> {
@@ -52,18 +54,46 @@
         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 {
             if (it?.pm25 != null) {
-                it.pm25 = round(it.pm25 * 100) / 100
+                it.pm25 = round(it.pm25 * 10) / 10
             }
         }
         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
@@ -72,7 +102,7 @@
         // 1. 鏍规嵁鏁版嵁涓婚敭id鏁扮粍锛屾煡璇㈣缁勫悎涓嬫槸鍚﹀凡鏈夋暟鎹瀺鍚堣褰�
         val exist = satelliteGridRep.fetchGridData(GridData().apply {
             type = 1
-            mixDataId = dataIdList.joinToString(",")
+            mixDataId = dataIdList.sorted().joinToString(",")
         })
         // 2. 鑻ヨ瀺鍚堟暟鎹凡瀛樺湪锛岀洿鎺ヨ繑鍥�
         return exist.ifEmpty {
@@ -234,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)
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3