From bde043c8fd1a076f44c402dd56c62d401afbfb16 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 27 三月 2025 17:29:48 +0800
Subject: [PATCH] 1. 新增卫星遥测网格热力图计算逻辑

---
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/SatelliteDataCalculateServiceImpl.kt |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 53 insertions(+), 6 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 a765aa6..c260d11 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
@@ -1,11 +1,11 @@
 package com.flightfeather.uav.lightshare.service.impl
 
+import com.flightfeather.uav.biz.satellite.GridGroupOption
 import com.flightfeather.uav.biz.satellite.SatelliteGridManage
+import com.flightfeather.uav.biz.satellite.SatelliteGridUtil
 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.common.utils.TimeUtil
+import com.flightfeather.uav.domain.entity.*
 import com.flightfeather.uav.domain.repository.MissionRep
 import com.flightfeather.uav.domain.repository.RealTimeDataRep
 import com.flightfeather.uav.domain.repository.SatelliteGridRep
@@ -138,9 +138,11 @@
         val mission = missionRep.findOne(missionCode) ?: throw BizException("浠诲姟涓嶅瓨鍦�")
         val data = realTimeDataRep.fetchData(mission)
 
+        // 鏌ユ壘鏄惁宸叉湁璧拌埅铻嶅悎璁板綍
         val oldGridDataList = satelliteGridRep.fetchGridData(GridData().apply {
             this.groupId = groupId
             mixDataId = missionCode
+            this.type = SatelliteDataType.Monitor.value.toByte()
         })
 
         if (oldGridDataList.isEmpty()) {
@@ -149,7 +151,23 @@
                 this.groupId = groupId
                 dataTime = mission.startTime
                 type = SatelliteDataType.Monitor.value.toByte()
-                mixDataId = mission.missionCode
+                this.missionCode = mission.missionCode
+                // Fixme 2025.3.27: 琛屾斂鍖哄垝鍦ㄨ蛋鑸换鍔℃坊鍔犲搴斿瓧娈靛悗杩涜璧嬪��
+                provinceCode
+                provinceName
+                cityCode
+                cityName
+                districtCode
+                districtName = mission.districtName
+                // Fixme 2025.3.27: 鎵�灞炵洃娴嬬偣鍖哄煙鐩墠闇�瑕侀�氳繃鐢ㄦ埛閫夋嫨纭畾
+                zone
+                pollutionDegreeIndex
+                pollutionDegree
+
+                val period = TimeUtil.getDayTimeTag(mission.startTime, mission.endTime)
+                dayTimePeriod = period?.first
+                dayTimePeriodStart = period?.second
+                dayTimePeriodEnd = period?.third
             }
             satelliteGridRep.insertGridData(newGridData)
 
@@ -181,8 +199,37 @@
         }
     }
 
-    override fun buildHeatmap(groupId: Int, gridDataDetail: List<GridDataDetail>): List<GridDataDetail> {
+    override fun buildHeatmap(groupId: Int, gridDataDetailList: List<GridDataDetail>, searchLength:Int): List<GridDataDetail> {
         val gridCellList = satelliteGridRep.fetchGridCell(groupId)
+        val originCellIdList = gridDataDetailList.map { it.cellId }
+        // Fixme 2025.3.24: 姝ゅ鏍规嵁鐜版湁鐨勭綉鏍间俊鎭璁℃柟寮忥紝浣跨敤涓存椂鐨勫弬鏁帮紝鍚庣画灏嗙綉鏍奸�氳繃浜岀淮鍧愭爣褰㈠紡琛ㄧず锛屾澶勫弬鏁板幓闄�
+        val option = GridGroupOption(120, 90, 10, 10)
 
+        val resMap = mutableMapOf<Int, MutableList<GridDataDetail>>()
+
+        // 寰幆璁$畻姣忎釜缃戞牸鐨勫懆杈规墿鏁g綉鏍肩粨鏋�
+        gridDataDetailList.forEach {gdd ->
+            SatelliteGridManage.heatMap(gdd, gridCellList, option, searchLength).forEach {r ->
+                if (!originCellIdList.contains(r.cellId)) {
+                    if (!resMap.containsKey(r.cellId)) {
+                        resMap[r.cellId] = mutableListOf()
+                    }
+                    resMap[r.cellId]?.add(r)
+                }
+            }
+        }
+
+        // 灏嗘墍鏈夌粨鏋滄牸寮忓寲锛屽悓鏃堕噸鍙犵綉鏍艰繘琛岀洃娴嬫暟鎹潎鍊艰绠�
+        val result = mutableListOf<GridDataDetail>()
+        resMap.forEach { (_, v) ->
+            result.add(v.avg().apply {
+                this.dataId = v.first().dataId
+                this.groupId = v.first().groupId
+                this.cellId = v.first().cellId
+            })
+        }
+        result.addAll(gridDataDetailList)
+
+        return result
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3