From ba8b1496ba9881719e522d0a60a8c86baa7be08b Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 20 Dec 2025 10:34:23 +0800
Subject: [PATCH] 优化飞行状态
---
ard-work/src/main/java/com/ard/work/domain/dto/state/CameraState.java | 5 +
ard-work/src/main/java/com/ard/work/domain/dto/state/PtzState.java | 5 +
ard-work/src/main/java/com/ard/work/domain/dto/state/PointData.java | 50 ++++++++++++----
ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java | 5 +
ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskPartServiceImpl.java | 6 +-
ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryState.java | 6 +
ard-admin/src/main/java/com/ard/web/controller/work/UavBaseController.java | 4
ard-work/src/main/java/com/ard/work/service/IArdFlightTaskPartService.java | 2
ard-work/src/main/java/com/ard/work/domain/dto/state/HmsAlarmData.java | 5 +
ard-work/src/main/java/com/ard/work/domain/dto/state/MissionState.java | 5 +
ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java | 8 +-
ard-work/src/main/java/com/ard/work/domain/dto/UavFlightStateDTO.java | 5 +
ard-work/src/main/java/com/ard/work/domain/dto/state/FlightControllerState.java | 5 +
ard-work/src/main/java/com/ard/work/domain/dto/state/AvoidanceData.java | 5 +
ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryStateInfo.java | 7 +
15 files changed, 86 insertions(+), 37 deletions(-)
diff --git a/ard-admin/src/main/java/com/ard/web/controller/work/UavBaseController.java b/ard-admin/src/main/java/com/ard/web/controller/work/UavBaseController.java
index 0c5821c..626e421 100644
--- a/ard-admin/src/main/java/com/ard/web/controller/work/UavBaseController.java
+++ b/ard-admin/src/main/java/com/ard/web/controller/work/UavBaseController.java
@@ -6,6 +6,7 @@
import com.ard.work.domain.dto.BoxHistoryDTO;
import com.ard.work.domain.dto.BoxPhotosDTO;
import com.ard.work.domain.dto.BoxSettingsDTO;
+import com.ard.work.domain.dto.UavFlightStateDTO;
import com.ard.work.domain.dto.telemetry.TelemetryData;
import com.ard.work.domain.entity.ArdFlightTask;
import com.ard.work.domain.entity.ArdFlightTaskPart;
@@ -89,8 +90,7 @@
@ApiOperationSupport(order = 4)
@GetMapping("/getCompleteFlightData")
public TableDataInfo getCompleteFlightData(ArdFlightTaskPart ardFlightTaskPart){
- startPage();
- List<TelemetryData> completeFlightData = ardFlightTaskPartService.getCompleteFlightData(ardFlightTaskPart);
+ List<UavFlightStateDTO> completeFlightData = ardFlightTaskPartService.getCompleteFlightData(ardFlightTaskPart);
return getDataTable(completeFlightData);
}
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/UavFlightStateDTO.java b/ard-work/src/main/java/com/ard/work/domain/dto/UavFlightStateDTO.java
index f176a20..721f28d 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/UavFlightStateDTO.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/UavFlightStateDTO.java
@@ -6,6 +6,8 @@
import lombok.Data;
import lombok.NoArgsConstructor;
+import java.io.Serializable;
+
/**
* Description: 无人机飞行状态DTO
* Author: lsy
@@ -14,7 +16,8 @@
@Data
@AllArgsConstructor
@NoArgsConstructor
-public class UavFlightStateDTO {
+public class UavFlightStateDTO implements Serializable {
+ private static final long serialVersionUID = 1L;
private UavState uavState;
private TelemetryData telemetryData;
}
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/AvoidanceData.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/AvoidanceData.java
index fa6c176..5a15289 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/AvoidanceData.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/AvoidanceData.java
@@ -2,9 +2,12 @@
import lombok.Data;
+import java.io.Serializable;
+
// 避障数据类
@Data
-public class AvoidanceData {
+public class AvoidanceData implements Serializable {
+ private static final long serialVersionUID = 1L;
private int downHealth; // 下方健康状态
private float down; // 距下障碍物的距离(单位:米),downHealth 为 1 时值有效
private int frontHealth; // 前方健康状态
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryState.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryState.java
index 4e54884..a77e1ea 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryState.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryState.java
@@ -5,12 +5,14 @@
import lombok.Data;
import lombok.NoArgsConstructor;
+import java.io.Serializable;
+
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
-public class BatteryState {
-
+public class BatteryState implements Serializable {
+ private static final long serialVersionUID = 1L;
private int batteryNum; // 电池数量
private String batteryPower; // 电池电量,多个电池用下划线分割
private String batteryVoltage; // 电池电压,多个电池用下划线分割(单位: V)
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryStateInfo.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryStateInfo.java
index 98c407a..e376189 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryStateInfo.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/BatteryStateInfo.java
@@ -4,6 +4,8 @@
import lombok.Data;
import lombok.NoArgsConstructor;
+import java.io.Serializable;
+
/**
* BatteryStateDto
*
@@ -13,8 +15,9 @@
@Data
@AllArgsConstructor
@NoArgsConstructor
-public class BatteryStateInfo {
- private int isBatteryEmbed; // 电池插入飞机状态:0=插入,1=未插入
+public class BatteryStateInfo implements Serializable {
+ private static final long serialVersionUID = 1L;
+ private int isBatteryEmbed; // 电池插入飞机状态:0=插入,1=未插入
private int batteryCapacityPercent; // 电池电量百分比
private int currentVoltage; // 电池电压 (单位: mV)
private int currentElectric; // 当前电池电流 (单位: mA)
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/CameraState.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/CameraState.java
index d061e74..dc7abf6 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/CameraState.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/CameraState.java
@@ -2,9 +2,12 @@
import lombok.Data;
+import java.io.Serializable;
+
// 相机状态类
@Data
-public class CameraState {
+public class CameraState implements Serializable {
+ private static final long serialVersionUID = 1L;
private int mode; // 相机模式:1=拍照模式,2=录像模式,0=未知
private int isRecording; // 是否录制中:1=录制中,0=未录制
private int recordDuration; // 录制时长(单位:秒)
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/FlightControllerState.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/FlightControllerState.java
index 6b3a6bb..5452459 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/FlightControllerState.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/FlightControllerState.java
@@ -2,8 +2,11 @@
import lombok.Data;
+import java.io.Serializable;
+
@Data
-public class FlightControllerState {
+public class FlightControllerState implements Serializable {
+ private static final long serialVersionUID = 1L;
private int satelliteCount; // 卫星计数
private int gpsSignalLevel; // GPS信号级别 (0-5)
private int flightMode; // 飞行模式
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/HmsAlarmData.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/HmsAlarmData.java
index 2cc36eb..937f7ba 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/HmsAlarmData.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/HmsAlarmData.java
@@ -2,9 +2,12 @@
import lombok.Data;
+import java.io.Serializable;
+
// Hms报警信息类
@Data
-public class HmsAlarmData {
+public class HmsAlarmData implements Serializable {
+ private static final long serialVersionUID = 1L;
private int alarmId; // 报警信息ID
private int reportLevel; // 等级 [1/2-警告 3/4/5-错误]
private String alarmMssInfo; // 报警信息描述(支持中文和英文版本,默认中文,如需切换请联系技术支持)
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/MissionState.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/MissionState.java
index 6c7ea44..b1d0036 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/MissionState.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/MissionState.java
@@ -2,9 +2,12 @@
import lombok.Data;
+import java.io.Serializable;
+
// 任务状态类
@Data
-public class MissionState {
+public class MissionState implements Serializable {
+ private static final long serialVersionUID = 1L;
private int isPause; // 航线是否暂停中:0=未暂停,1=暂停中
private int targetWaypointIndex; // 目标航点下标
private int isWaypointFinished; // 是否航点完成:1完成、0未完成(此值废弃)
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/PointData.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/PointData.java
index daab7cc..42a1bd8 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/PointData.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/PointData.java
@@ -3,28 +3,40 @@
import com.ard.work.domain.dto.wayline.PointAction;
import lombok.Data;
+import java.io.Serializable;
import java.util.List;
// 假设 PointData 类定义如下
@Data
-public class PointData {
-
- /** 纬度 */
+public class PointData implements Serializable {
+ private static final long serialVersionUID = 1L;
+ /**
+ * 纬度
+ */
private double lat;
- /** 经度 */
+ /**
+ * 经度
+ */
private double lng;
- /** 高度(单位:米,范围0~遥控器限高) */
+ /**
+ * 高度(单位:米,范围0~遥控器限高)
+ */
private float height;
- /** 速度(单位:米/秒,范围0~15),默认8 */
+ /**
+ * 速度(单位:米/秒,范围0~15),默认8
+ */
private float speed;
- /** 动作数组 */
+ /**
+ * 动作数组
+ */
private List<PointAction> actions;
- /** 航线飞行模式:
+ /**
+ * 航线飞行模式:
* 1=直线飞行,
* 2=协调转弯,
* 3=曲线飞行(停),
@@ -32,16 +44,20 @@
*/
private int flightPathMode;
- /** 转弯半径(仅协调转弯模式下有效),取值范围1~655.35单位:米 */
+ /**
+ * 转弯半径(仅协调转弯模式下有效),取值范围1~655.35单位:米
+ */
private float dampingDistance;
- /** 是否为安全返航点
+ /**
+ * 是否为安全返航点
* 0=不是,
* 1=是
*/
private int safeGohomeFlag;
- /** 偏航模式
+ /**
+ * 偏航模式
* 0=自动,
* 1=锁定,
* 2=遥控器控制,
@@ -51,13 +67,19 @@
*/
private int headingMode;
- /** 航点偏航 -180~180 */
+ /**
+ * 航点偏航 -180~180
+ */
private float heading;
- /** 兴趣点下标,默认-1 */
+ /**
+ * 兴趣点下标,默认-1
+ */
private int interestIndex;
- /** 组下标 */
+ /**
+ * 组下标
+ */
private int groupIndex;
}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/PtzState.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/PtzState.java
index 7232105..663f7b1 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/PtzState.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/PtzState.java
@@ -2,9 +2,12 @@
import lombok.Data;
+import java.io.Serializable;
+
// 云台状态类
@Data
-public class PtzState {
+public class PtzState implements Serializable {
+ private static final long serialVersionUID = 1L;
private float pitch; // 俯仰角,范围:-120° ~ 30°
private float roll; // 横滚角,范围:-90° ~ 60°
private float yaw; // 偏航角,范围:-180° ~ 180°
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java
index 5caf6b6..2050bfe 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java
@@ -3,6 +3,7 @@
import com.ard.work.util.CameraUtil;
import lombok.*;
+import java.io.Serializable;
import java.util.List;
@Data
@@ -10,8 +11,8 @@
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
-public class UavState {
-
+public class UavState implements Serializable {
+ private static final long serialVersionUID = 1L;
private FlightControllerState flightControllerState; // 飞控状态
private BatteryState batteryState; // 电池状态
private PtzState ptzState; // 云台状态
diff --git a/ard-work/src/main/java/com/ard/work/service/IArdFlightTaskPartService.java b/ard-work/src/main/java/com/ard/work/service/IArdFlightTaskPartService.java
index 2dbf3c2..c906ed2 100644
--- a/ard-work/src/main/java/com/ard/work/service/IArdFlightTaskPartService.java
+++ b/ard-work/src/main/java/com/ard/work/service/IArdFlightTaskPartService.java
@@ -22,6 +22,6 @@
/**
* 获取完整轨迹(合并所有分片)
*/
- List<TelemetryData> getCompleteFlightData(ArdFlightTaskPart ardFlightTaskPart);
+ List<UavFlightStateDTO> getCompleteFlightData(ArdFlightTaskPart ardFlightTaskPart);
}
diff --git a/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
index 78e3352..053cfa6 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
@@ -320,11 +320,12 @@
String redisKey = CacheConstants.UAV_ONLINE_KEY + boxSn;
boolean currentOnline = remote.getOnLine() == 1;
- // 获取上次状态
- boolean lastOnline = redisCache.getCacheObject(redisKey) != null;
+ ArdDroneInfo local = localMap.get(boxSn);
+ boolean dbOnline = local != null && local.getOnLine() == 1;
+ boolean needUpdate = (dbOnline != currentOnline);
// 如果状态变化才更新
- if (lastOnline != currentOnline) {
+ if (needUpdate){
// 更新 Redis
if (currentOnline) {
redisCache.setCacheObject(redisKey, remote);
@@ -334,7 +335,6 @@
// 发布事件
eventPublisher.publishEvent(new DeviceStatusEvent(boxSn, currentOnline));
// 更新数据库
- ArdDroneInfo local = localMap.get(boxSn);
if (local != null) {
local.setOnLine(currentOnline ? 1 : 0);
updateArdDrone(local);
diff --git a/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskPartServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskPartServiceImpl.java
index 9985e7e..b7ca8e4 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskPartServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskPartServiceImpl.java
@@ -123,13 +123,13 @@
* 获取完整航线轨迹(合并所有分片)
*/
@Override
- public List<TelemetryData> getCompleteFlightData(ArdFlightTaskPart ardFlightTaskPart) {
- List<TelemetryData> allData = new ArrayList<>();
+ public List<UavFlightStateDTO> getCompleteFlightData(ArdFlightTaskPart ardFlightTaskPart) {
+ List<UavFlightStateDTO> allData = new ArrayList<>();
String boxSn = ardFlightTaskPart.getBoxSn();
List<ArdFlightTaskPart> parts = ardflightTaskPartMapper.selectByTaskStartTime(ardFlightTaskPart);
for (ArdFlightTaskPart part : parts) {
try {
- List<TelemetryData> partData = SerializeUtil.deserialize(part.getDataPart());
+ List<UavFlightStateDTO> partData = SerializeUtil.deserialize(part.getDataPart());
allData.addAll(partData);
} catch (Exception e) {
log.error("反序列化 boxSn={} 分片数据失败", boxSn, e);
--
Gitblit v1.9.3