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); } 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; } 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; // 前方健康状态 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) 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) 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; // 录制时长(单位:秒) 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; // 飞行模式 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; // 报警信息描述(支持中文和英文版本,默认中文,如需切换请联系技术支持) 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未完成(此值废弃) 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; } 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° 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; // 云台状态 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); } 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); 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);