From 698f8f0f22af4c66581ce284407e986ca036aec6 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 23 一月 2025 17:10:26 +0800
Subject: [PATCH] 1. 网格细分逻辑(编写中)

---
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt |   57 ++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 46 insertions(+), 11 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt
index ae74aed..8648d99 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt
@@ -1,19 +1,20 @@
 package com.flightfeather.uav.lightshare.service.impl
 
-import com.flightfeather.uav.common.exception.ResponseErrorException
+import com.flightfeather.uav.common.exception.BizException
 import com.flightfeather.uav.common.scaleMap
 import com.flightfeather.uav.common.utils.DateUtil
 import com.flightfeather.uav.common.utils.ExcelUtil
 import com.flightfeather.uav.common.utils.FileExchange
-import com.flightfeather.uav.common.utils.GsonUtils
-import com.flightfeather.uav.dataprocess.AverageUtil
+import com.flightfeather.uav.biz.dataprocess.AverageUtil
 import com.flightfeather.uav.domain.entity.*
 import com.flightfeather.uav.domain.mapper.*
+import com.flightfeather.uav.domain.repository.MissionRep
+import com.flightfeather.uav.domain.repository.RealTimeDataRep
+import com.flightfeather.uav.domain.repository.SegmentInfoRep
 import com.flightfeather.uav.lightshare.bean.*
 import com.flightfeather.uav.lightshare.service.RealTimeDataService
 import com.flightfeather.uav.model.epw.EPWDataPrep
-import com.flightfeather.uav.repository.AirDataRepository
-import com.flightfeather.uav.socket.bean.AirData
+import com.flightfeather.uav.domain.repository.AirDataRep
 import com.flightfeather.uav.socket.eunm.UWDeviceType
 import com.github.pagehelper.PageHelper
 import org.apache.poi.xssf.streaming.SXSSFWorkbook
@@ -30,19 +31,21 @@
 import java.time.format.DateTimeFormatter
 import java.util.*
 import javax.servlet.http.HttpServletResponse
-import javax.swing.text.DateFormatter
 import kotlin.math.sqrt
 
 @Service
 class RealTimeDataServiceImpl(
     private val realTimeDataMapper: RealTimeDataMapper,
-    private val airDataRepository: AirDataRepository,
+    private val airDataRep: AirDataRep,
     private val realTimeDataVehicleMapper: RealTimeDataVehicleMapper,
     private val realTimeDataUavMapper: RealTimeDataUavMapper,
     private val realTimeDataGridMapper: RealTimeDataGridMapper,
     private val realTimeDataGridOptMapper: RealTimeDataGridOptMapper,
     private val realTimeDataGridMinMapper: RealTimeDataGridMinMapper,
     private val missionMapper: MissionMapper,
+    private val missionRep: MissionRep,
+    private val realTimeDataRep: RealTimeDataRep,
+    private val segmentInfoRep: SegmentInfoRep,
 ) : RealTimeDataService {
 
     @Value("\${filePath}")
@@ -53,6 +56,7 @@
     private val fileExchange = FileExchange()
 
     override fun getSecondData(
+        deviceType: String?,
         deviceCode: String?,
         startTime: String?,
         endTime: String?,
@@ -69,7 +73,12 @@
         var pages = 0
         val result = mutableListOf<DataVo>()
 
-        when (UWDeviceType.getType(deviceCode)) {
+        val _deviceType = if (deviceType != null) {
+            UWDeviceType.fromValue(deviceType)
+        } else {
+            UWDeviceType.getType(deviceCode)
+        }
+        when (_deviceType) {
             UWDeviceType.VEHICLE -> {
                 val pageInfo = PageHelper.startPage<RealTimeDataVehicle>(_page, _perPage)
                 realTimeDataVehicleMapper.selectByExample(Example(RealTimeDataVehicle::class.java).apply {
@@ -184,6 +193,31 @@
         example.orderBy("dataTime")
     }
 
+    override fun getSegmentData(missionCode: String): List<List<DataVo>> {
+        val mission = missionRep.findOne(missionCode) ?: throw BizException("浠诲姟涓嶅瓨鍦�")
+        val data = realTimeDataRep.fetchData(mission)
+
+        val segInfo = SegmentInfo().apply { this.missionCode = missionCode }
+        val segList = segmentInfoRep.findList(segInfo)
+//        return TrackSegment.segmentWithRoad(data).map { it.map { b -> b.toDataVo() } }
+        val res = mutableListOf<MutableList<DataVo>>()
+        res.add(mutableListOf())
+        var index = 0
+        data.forEach {
+            if (it.dataTime == null) return@forEach
+            if (it.dataTime!! <= segList[index]?.endTime) {
+                res[index].add(it.toDataVo())
+                if (it.dataTime!! == segList[index]?.endTime) {
+                    index++
+                    res.add(mutableListOf())
+                }
+            }
+        }
+        // 绉婚櫎鏈�鍚庝竴涓┖闆嗗悎
+        if (res.last().isEmpty()) res.removeLast()
+        return res
+    }
+
     override fun importData(file: MultipartFile): BaseResponse<DataImportResult> {
         val f = ByteArrayInputStream(file.bytes)
         fileExchange.exchangeBoatData("0c0000000001", f).forEach {
@@ -194,6 +228,7 @@
 
     override fun importJinanData(code: String, file: MultipartFile): DataImportResult {
         val f = ByteArrayInputStream(file.bytes)
+//        val result = fileExchange.exchangeVehicleData(code, f)
         val result = fileExchange.exchangeJinanData(code, f)
         if (result.isNotEmpty()) {
             val first = result.first()
@@ -205,7 +240,7 @@
                 deviceType = UWDeviceType.getType(code)?.value
                 deviceCode = code
             }
-            missionMapper.selectOne(mission)?.run { throw ResponseErrorException("璇ヨ澶囪鏃舵浠诲姟宸插瓨鍦紝鏃犳硶閲嶅瀵煎叆") }
+            missionMapper.selectOne(mission)?.run { throw BizException("璇ヨ澶囪鏃舵浠诲姟宸插瓨鍦紝鏃犳硶閲嶅瀵煎叆") }
             mission.apply {
                 startTime = first.dataTime
                 endTime = last.dataTime
@@ -360,7 +395,7 @@
             println("褰撳墠椤垫暟锛�$page")
             val dataList = res.data ?: emptyList()
             val result = epwDataPrep.mDataPrep2(dataList)
-            count += airDataRepository.savePrepData2(result)
+            count += airDataRep.savePrepData2(result)
             page++
         }
 
@@ -376,7 +411,7 @@
         val averageUtil = AverageUtil<RealTimeDataGridOpt, RealTimeDataGridMin>({ d ->
             minFormatter.format(d.dataTime)
         }, { list ->
-            list.avg()
+            list.avg() as RealTimeDataGridMin
         })
 
         while (total == -1 || page <= total) {

--
Gitblit v1.9.3