From b097f7539a7429a85cdda7959c9ecb83a37a2918 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Thu, 11 Jun 2026 14:49:28 +0800
Subject: [PATCH] 架次关联航线
---
ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceImpl.java | 16 ++++++++++++++++
ard-work/src/main/resources/mapper/ArdFlightTaskMapper.xml | 12 ++++++++++++
ard-work/src/main/java/com/ard/work/domain/entity/ArdFlightTask.java | 9 +++++++++
ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskPartServiceImpl.java | 8 +++++++-
4 files changed, 44 insertions(+), 1 deletions(-)
diff --git a/ard-work/src/main/java/com/ard/work/domain/entity/ArdFlightTask.java b/ard-work/src/main/java/com/ard/work/domain/entity/ArdFlightTask.java
index 0556aba..fbbf3f4 100644
--- a/ard-work/src/main/java/com/ard/work/domain/entity/ArdFlightTask.java
+++ b/ard-work/src/main/java/com/ard/work/domain/entity/ArdFlightTask.java
@@ -30,6 +30,15 @@
private Float aveSpeed; // 平均速度
private Float maxSpeed; // 最大速度
private String serverId; // 服务器ID
+ private Integer flightMode; // 飞行模式(来自飞控遥测)
+ private String routeId; // 关联航线ID(ard_route_info.id),非空即为航线飞行
+
+ /**
+ * 判断是否为航线飞行
+ */
+ public boolean isRouteFlight() {
+ return routeId != null && !routeId.isEmpty();
+ }
// 计算持续时长,单位:秒
public Long getDuration() {
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 dc2658d..3544e79 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
@@ -2,8 +2,10 @@
import cn.hutool.core.util.SerializeUtil;
import com.ard.common.utils.DateUtils;
+
import com.ard.work.domain.cache.UavStateCache;
import com.ard.work.domain.cache.UavTelemetryDataCache;
+import com.ard.work.domain.cache.UavWaylineCache;
import com.ard.work.domain.dto.UavFlightStateDTO;
import com.ard.work.domain.dto.state.UavState;
import com.ard.work.domain.dto.telemetry.TelemetryData;
@@ -77,7 +79,11 @@
log.debug("设备 {} 当前状态为:{}", boxSn, currentStatus);
// 只有飞行中才添加缓存
if (currentStatus == 2) {
- log.warn("设备 {} 当前状态为飞行中,添加遥测数据到缓存", boxSn);
+ int flightMode = telemetryData.getFlightMode();
+ if (flightMode != 14) {
+ // 非航线模式 → 清理航线缓存,避免手动飞行被错绑 routeId
+ UavWaylineCache.remove(boxSn);
+ }
UavFlightStateDTO dto = new UavFlightStateDTO(uavState, telemetryData, dataTs);
addTelemetryData(dto);
}
diff --git a/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceImpl.java
index 35a510a..32c149a 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceImpl.java
@@ -5,6 +5,10 @@
import com.ard.common.core.redis.RedisCache;
import com.ard.common.utils.DateUtils;
import com.ard.work.component.forest.TyClient;
+import com.ard.work.domain.cache.UavTelemetryDataCache;
+import com.ard.work.domain.cache.UavWaylineCache;
+import com.ard.work.domain.dto.telemetry.TelemetryData;
+import com.ard.work.domain.dto.wayline.WaylineInfo;
import com.ard.work.domain.dto.BoxHistoryDTO;
import com.ard.work.domain.entity.ArdFlightTask;
import com.ard.work.domain.receiver.BoxHistoryReceiver;
@@ -130,6 +134,18 @@
.maxSpeed(boxHistoryReceiver.getMaxSpeed())
.build();
+ // 从遥测缓存和航线缓存直接获取 flightMode 和 routeId
+ // UavWaylineCache 在飞行中持续有效,仅在飞行中 flightMode!=14 时被清除
+ String boxSn = flightTask.getBoxSn();
+ WaylineInfo waylineInfo = UavWaylineCache.get(boxSn);
+ if (waylineInfo != null && waylineInfo.getWaylineId() != null) {
+ flightTask.setRouteId(waylineInfo.getWaylineId());
+ }
+ TelemetryData telemetryData = UavTelemetryDataCache.get(boxSn);
+ if (telemetryData != null && telemetryData.getFlightMode() > 0) {
+ flightTask.setFlightMode(telemetryData.getFlightMode());
+ }
+
Long flyUserId = uavControlService.getCurrentController(flightTask.getBoxSn(), "fly");
if (flyUserId != null) {
SysUser flyUser = redisCache.getCacheMapValue(CacheConstants.SYS_USER, flyUserId.toString());
diff --git a/ard-work/src/main/resources/mapper/ArdFlightTaskMapper.xml b/ard-work/src/main/resources/mapper/ArdFlightTaskMapper.xml
index 906d113..910a082 100644
--- a/ard-work/src/main/resources/mapper/ArdFlightTaskMapper.xml
+++ b/ard-work/src/main/resources/mapper/ArdFlightTaskMapper.xml
@@ -19,6 +19,8 @@
<result property="aveSpeed" column="ave_speed"/>
<result property="maxSpeed" column="max_speed"/>
<result property="serverId" column="server_id"/>
+ <result property="flightMode" column="flight_mode"/>
+ <result property="routeId" column="route_id"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
@@ -42,6 +44,8 @@
aft.ave_speed,
aft.max_speed,
aft.server_id,
+ aft.flight_mode,
+ aft.route_id,
aft.create_by,
aft.create_time,
aft.update_by,
@@ -57,6 +61,8 @@
<if test="startTime != null">AND aft.start_time >= #{startTime}</if>
<if test="endTime != null">AND aft.end_time <= #{endTime}</if>
<if test="serverId != null">AND aft.server_id = #{serverId}</if>
+ <if test="routeId != null">AND aft.route_id = #{routeId}</if>
+ <if test="flightMode != null">AND aft.flight_mode = #{flightMode}</if>
<if test="params.beginTime != null"><!-- 开始时间检索 -->
AND aft.create_time >= #{params.beginTime}
</if>
@@ -86,6 +92,8 @@
<if test="aveSpeed != null">ave_speed,</if>
<if test="maxSpeed != null">max_speed,</if>
<if test="serverId != null">server_id,</if>
+ <if test="flightMode != null">flight_mode,</if>
+ <if test="routeId != null">route_id,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
@@ -107,6 +115,8 @@
<if test="aveSpeed != null">#{aveSpeed},</if>
<if test="maxSpeed != null">#{maxSpeed},</if>
<if test="serverId != null">#{serverId},</if>
+ <if test="flightMode != null">#{flightMode},</if>
+ <if test="routeId != null">#{routeId},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
@@ -132,6 +142,8 @@
<if test="aveSpeed != null">ave_speed = #{aveSpeed},</if>
<if test="maxSpeed != null">max_speed = #{maxSpeed},</if>
<if test="serverId != null">server_id = #{serverId},</if>
+ <if test="flightMode != null">flight_mode = #{flightMode},</if>
+ <if test="routeId != null">route_id = #{routeId},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
--
Gitblit v1.9.3