From 29383149f7040d89ae00ad48dc48bbcf46587946 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期一, 01 九月 2025 17:32:53 +0800
Subject: [PATCH] 2025.9.1 1. 新增走航任务统计功能(待完成)

---
 src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/MissionServiceImpl.kt |   76 +++++++++++++++++++++++++++++++++----
 1 files changed, 67 insertions(+), 9 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/MissionServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/MissionServiceImpl.kt
index f88d392..c8ace2f 100644
--- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/MissionServiceImpl.kt
+++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/MissionServiceImpl.kt
@@ -1,17 +1,34 @@
 package com.flightfeather.uav.lightshare.service.impl
 
+import com.flightfeather.uav.biz.FactorFilter
+import com.flightfeather.uav.biz.mission.MissionUtil
+import com.flightfeather.uav.biz.report.MissionReport
+import com.flightfeather.uav.common.exception.BizException
 import com.flightfeather.uav.domain.entity.Mission
+import com.flightfeather.uav.domain.entity.RealTimeDataVehicle
 import com.flightfeather.uav.domain.mapper.MissionMapper
+import com.flightfeather.uav.domain.mapper.RealTimeDataVehicleMapper
+import com.flightfeather.uav.domain.repository.MissionRep
+import com.flightfeather.uav.domain.repository.RealTimeDataRep
 import com.flightfeather.uav.lightshare.bean.BaseResponse
 import com.flightfeather.uav.lightshare.bean.DataHead
 import com.flightfeather.uav.lightshare.service.MissionService
 import com.github.pagehelper.PageHelper
 import org.springframework.stereotype.Service
 import tk.mybatis.mapper.entity.Example
+import java.io.File
+import java.util.*
+import javax.servlet.http.HttpServletResponse
 
 @Service
-class MissionServiceImpl(private val missionMapper: MissionMapper) : MissionService {
-    override fun getMission(type: String?, page: Int?, perPage: Int?): BaseResponse<List<Mission>> {
+class MissionServiceImpl(
+    private val missionMapper: MissionMapper,
+    private val realTimeDataVehicleMapper: RealTimeDataVehicleMapper,
+    private val missionReport: MissionReport,
+    private val missionRep: MissionRep,
+    private val realTimeDataRep: RealTimeDataRep
+) : MissionService {
+    override fun getMission(type: String?, page: Int?, perPage: Int?): Pair<DataHead, List<Mission>> {
         val _perPage = perPage ?: 60
         val _page = page ?: 1
         val pageInfo = PageHelper.startPage<Mission>(_page, _perPage)
@@ -22,21 +39,62 @@
             }
             orderBy("startTime").desc()
         }).forEach { it?.let { result.add(it) } }
-        return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages),data = result)
+//        return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages),data = result)
+        return DataHead(pageInfo.pageNum, pageInfo.pages) to result
     }
 
-    override fun createMission(mission: Mission): BaseResponse<Boolean> {
+    @Synchronized
+    override fun createMission(mission: Mission): Boolean {
         missionMapper.selectByPrimaryKey(mission.missionCode)?.run {
-            return BaseResponse(false, "浠诲姟缂栧彿宸插瓨鍦�")
+//            return BaseResponse(false, "浠诲姟缂栧彿宸插瓨鍦�")
+            throw BizException("浠诲姟缂栧彿宸插瓨鍦�")
         }
         missionMapper.insert(mission).let {
-            return BaseResponse(it == 1)
+            return it == 1
         }
     }
 
-    override fun deleteMission(missionCode: String): BaseResponse<Boolean> {
-        missionMapper.deleteByPrimaryKey(missionCode).let {
-            return BaseResponse(it == 1)
+    override fun updateMission(mission: Mission): Boolean {
+        missionMapper.updateByPrimaryKey(mission).let {
+            return it == 1
         }
     }
+
+    override fun deleteMission(missionCode: String): Boolean {
+        missionMapper.deleteByPrimaryKey(missionCode).let {
+            return it == 1
+        }
+    }
+
+    override fun deleteMissionAndData(missionCode: String): Boolean {
+        val mission = missionMapper.selectByPrimaryKey(missionCode) ?: throw BizException("浠诲姟涓嶅瓨鍦�")
+        missionMapper.deleteByPrimaryKey(missionCode)
+        realTimeDataVehicleMapper.deleteByExample(Example(RealTimeDataVehicle::class.java).apply {
+            createCriteria().andEqualTo("deviceCode", mission.deviceCode)
+                .andBetween("dataTime", mission.startTime, mission.endTime)
+        })
+        return true
+    }
+
+    override fun getReport(missionCode: String, response: HttpServletResponse) {
+        val path = missionReport.execute(missionCode, FactorFilter.default())
+        val pathArr = path.split("/")
+        val file = File(path)
+        if (file.exists()) {
+            response.contentType = "application/vnd.ms-excel;charset=UTF-8"
+            val name = Base64.getEncoder().encodeToString(pathArr.last().toByteArray())
+            response.setHeader("fileName", name)
+            response.outputStream.write(file.readBytes())
+        }
+        return
+    }
+
+    override fun calMissionInfo(missionCode: String): Boolean {
+        val mission = missionRep.findOne(missionCode) ?: throw BizException("璧拌埅浠诲姟涓嶅瓨鍦�")
+        val data = realTimeDataRep.fetchData(mission)
+        mission.kilometres = MissionUtil.calKilometres(data).toFloat()
+        // todo: 璁$畻璧拌埅浠诲姟鎵�鍦ㄤ腑蹇冨尯鍩�
+        mission.region = MissionUtil.calRegion(data)
+        return updateMission(mission)
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3