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() { 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); } 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()); 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>