From 6c1e7c5ac983301c34f003415cda2ef7c7e176a6 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 09 一月 2025 17:34:11 +0800
Subject: [PATCH] 1. 新增卫星遥测网格4个顶点坐标计算逻辑

---
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteTelemetryServiceImpl.kt |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 58 insertions(+), 2 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 db1be82..3e24c07 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
@@ -1,5 +1,7 @@
 package com.flightfeather.uav.lightshare.service.impl
 
+import com.flightfeather.uav.biz.satellite.SatelliteDataMix
+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
@@ -14,6 +16,7 @@
 import com.flightfeather.uav.lightshare.service.SatelliteTelemetryService
 import com.github.pagehelper.PageHelper
 import org.springframework.stereotype.Service
+import org.springframework.transaction.annotation.Transactional
 import org.springframework.web.multipart.MultipartFile
 import java.io.ByteArrayInputStream
 import java.io.File
@@ -21,6 +24,7 @@
 import java.time.ZoneId
 import java.util.*
 import javax.servlet.http.HttpServletResponse
+import kotlin.math.round
 
 /**
  *
@@ -28,7 +32,10 @@
  * @author feiyu02
  */
 @Service
-class SatelliteTelemetryServiceImpl(private val satelliteGridRep: SatelliteGridRep) : SatelliteTelemetryService {
+class SatelliteTelemetryServiceImpl(
+    private val satelliteGridRep: SatelliteGridRep,
+    private val satelliteDataMix: SatelliteDataMix,
+) : SatelliteTelemetryService {
 
     private val fileExchange = FileExchange()
     override fun fetchGridGroup(areaVo: AreaVo, page: Int?, perPage: Int?): Pair<DataHead, List<GridGroup?>> {
@@ -50,7 +57,27 @@
     }
 
     override fun fetchGridDataDetail(dataId: Int, groupId: Int?, cellId: Int?): List<GridDataDetail?> {
-        return satelliteGridRep.fetchGridDataDetail(dataId, groupId, cellId)
+        val res =  satelliteGridRep.fetchGridDataDetail(dataId, groupId, cellId)
+        res.forEach {
+            if (it?.pm25 != null) {
+                it.pm25 = round(it.pm25 * 100) / 100
+            }
+        }
+        return res
+    }
+
+    @Transactional
+    override fun mixGridData(dataIdList: List<Int>): List<GridData?> {
+        if (dataIdList.isEmpty()) throw BizException("铻嶅悎鎵�闇�鏁版嵁id涓嶈兘涓虹┖")
+        // 1. 鏍规嵁鏁版嵁涓婚敭id鏁扮粍锛屾煡璇㈣缁勫悎涓嬫槸鍚﹀凡鏈夋暟鎹瀺鍚堣褰�
+        val exist = satelliteGridRep.fetchGridData(GridData().apply {
+            type = 1
+            mixDataId = dataIdList.joinToString(",")
+        })
+        // 2. 鑻ヨ瀺鍚堟暟鎹凡瀛樺湪锛岀洿鎺ヨ繑鍥�
+        return exist.ifEmpty {
+            listOf(satelliteDataMix.mixData(dataIdList).first)
+        }
     }
 
     override fun importGridData(groupId: Int, dataTime: LocalDateTime?, update: Boolean, file: MultipartFile): GridDataImportResult? {
@@ -178,4 +205,33 @@
         }
         return true
     }
+
+    override fun calGridVertex(groupId: Int): List<GridCell?> {
+        val cellList = satelliteGridRep.fetchGridCell(groupId)
+        val vertexList = SatelliteGridManage.calGridVertex(cellList.map {
+            if (it?.longitude == null || it.latitude == null) {
+                throw BizException("鍗槦閬ユ祴缃戞牸璁$畻椤剁偣鍧愭爣鐐瑰け璐ワ紝瀛樺湪涓績鐐瑰潗鏍囦负绌虹殑鎯呭喌")
+            }
+            it.longitude?.toDouble()!! to it.latitude?.toDouble()!!
+        })
+
+        cellList.forEachIndexed { i, c ->
+            val v = vertexList[i]
+            c?.point1Lon = v.point1Lon.toBigDecimal()
+            c?.point1Lat = v.point1Lat.toBigDecimal()
+
+            c?.point2Lon = v.point2Lon.toBigDecimal()
+            c?.point2Lat = v.point2Lat.toBigDecimal()
+
+            c?.point3Lon = v.point3Lon.toBigDecimal()
+            c?.point3Lat = v.point3Lat.toBigDecimal()
+
+            c?.point4Lon = v.point4Lon.toBigDecimal()
+            c?.point4Lat = v.point4Lat.toBigDecimal()
+        }
+
+        satelliteGridRep.updateGridCellBatch(cellList)
+
+        return cellList
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3