liusuyi
2026-06-11 b097f7539a7429a85cdda7959c9ecb83a37a2918
架次关联航线
4 files modified
45 ■■■■■ changed files
ard-work/src/main/java/com/ard/work/domain/entity/ArdFlightTask.java 9 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskPartServiceImpl.java 8 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/service/impl/ArdFlightTaskServiceImpl.java 16 ●●●●● patch | view | raw | blame | history
ard-work/src/main/resources/mapper/ArdFlightTaskMapper.xml 12 ●●●●● patch | view | raw | blame | history
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 &gt;= #{startTime}</if>
                <if test="endTime != null">AND aft.end_time &lt;= #{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 &gt;= #{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>