liusuyi
2025-10-28 cf08f4a77150c905c5a578be678259013361b661
ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java
@@ -23,6 +23,7 @@
import com.ard.work.component.netty.command.wayline.*;
import com.ard.work.component.netty.handler.ErrorCodeEnum;
import com.ard.work.component.netty.protobuf.TelemetryDataPB;
import com.ard.work.component.websocket.utils.WebSocketUtil;
import com.ard.work.domain.cache.UavSignalInfoCache;
import com.ard.work.domain.cache.UavStateCache;
import com.ard.work.domain.cache.UavTelemetryDataCache;
@@ -45,6 +46,8 @@
import com.ard.work.domain.dto.wayline.*;
import com.ard.work.domain.entity.ArdDroneInfo;
import com.ard.work.domain.entity.ArdServerInfo;
import com.ard.work.domain.message.BaseMessage;
import com.ard.work.domain.message.ServerReplyMessage;
import com.ard.work.domain.message.UavControlType;
import com.ard.work.domain.receiver.*;
import com.ard.work.service.IArdDroneInfoService;
@@ -52,6 +55,7 @@
import com.ard.work.service.ITyService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
@@ -93,6 +97,7 @@
        List<ArdServerInfo> ardServerInfos = ardServerService.selectArdServerInfoList(new ArdServerInfo());
        return getBoxList(ardServerInfos);
    }
    /**
     * 获取指定服务器云盒列表
     *
@@ -101,8 +106,9 @@
    @Override
    public List<BoxInfoReceiver> getBoxList(String serverId) {
        TyHttpCommonReceiver<List<BoxInfoReceiver>> boxList = tyClient.getBoxList(serverId);
        return boxList.getContent();
        return boxList == null ? null : boxList.getContent();
    }
    /**
     * 获取直播地址
     *
@@ -111,12 +117,13 @@
    @Override
    public BoxStreamUrlReceiver getBoxLiveUrl(String boxSn) {
        ArdDroneInfo ardDroneInfo = ardDroneService.selectArdDroneByboxSn(boxSn);
        if(ardDroneInfo== null){
            log.warn("未找到对应的飞行器信息,boxSn:{}",boxSn);
        if (ardDroneInfo == null) {
            log.warn("未找到对应的飞行器信息,boxSn:{}", boxSn);
            return null;
        }
        TyHttpCommonReceiver<BoxStreamUrlReceiver> boxLiveUrl = tyClient.getBoxLiveUrl(ardDroneInfo.getServerId(),boxSn);
        return boxLiveUrl.getContent();
        TyHttpCommonReceiver<BoxStreamUrlReceiver> boxLiveUrl = tyClient.getBoxLiveUrl(ardDroneInfo.getServerId(),
                boxSn);
        return boxLiveUrl == null ? null : boxLiveUrl.getContent();
    }
    /**
@@ -129,7 +136,7 @@
        ArdDroneInfo ardDroneInfo = ardDroneService.selectArdDroneByboxSn(boxHistoryDTO.getBoxSn());
        TyHttpCommonReceiver<List<BoxHistoryReceiver>> boxHistory = tyClient.getBoxHistory(ardDroneInfo.getServerId(),
                boxHistoryDTO);
        return boxHistory.getContent();
        return boxHistory == null ? null : boxHistory.getContent();
    }
    /**
@@ -140,8 +147,9 @@
    @Override
    public List<BoxPhotosReceiver> getBoxPhotos(BoxPhotosDTO boxPhotosDTO) {
        ArdDroneInfo ardDroneInfo = ardDroneService.selectArdDroneByboxSn(boxPhotosDTO.getBoxSn());
        TyHttpCommonReceiver<List<BoxPhotosReceiver>> boxPhotos = tyClient.getBoxPhotos(ardDroneInfo.getServerId(),boxPhotosDTO);
        return boxPhotos.getContent();
        TyHttpCommonReceiver<List<BoxPhotosReceiver>> boxPhotos = tyClient.getBoxPhotos(ardDroneInfo.getServerId(),
                boxPhotosDTO);
        return boxPhotos == null ? null : boxPhotos.getContent();
    }
    /**
@@ -150,7 +158,7 @@
    @Override
    public Boolean updateBoxSettings(BoxSettingsDTO boxSettingsDTO) {
        ArdDroneInfo ardDroneInfo = ardDroneService.selectArdDroneByboxSn(boxSettingsDTO.getBoxSn());
        TyHttpCommonReceiver<?> result = tyClient.updateBoxSettings(ardDroneInfo.getServerId(),boxSettingsDTO);
        TyHttpCommonReceiver<?> result = tyClient.updateBoxSettings(ardDroneInfo.getServerId(), boxSettingsDTO);
        return result.getState() == 1;
    }
@@ -476,7 +484,7 @@
     */
    @Override
    public UavState getUavState(String boxSn) {
        return UavStateCache.getUavState(boxSn);
        return UavStateCache.get(boxSn);
    }
    /**
@@ -484,7 +492,7 @@
     */
    @Override
    public TelemetryData getUavTelemetryData(String boxSn) {
        return UavTelemetryDataCache.getUavTelemetryData(boxSn);
        return UavTelemetryDataCache.get(boxSn);
    }
    /**
@@ -492,7 +500,7 @@
     */
    @Override
    public SignalInfo getSignalInfo(String boxSn) {
        return UavSignalInfoCache.getUavSignalInfo(boxSn);
        return UavSignalInfoCache.get(boxSn);
    }
    /**
@@ -673,8 +681,8 @@
                break;
            case 0x02:
                // 处理注册消息
                 HeartbeatReplyCmd heartbeatReplyCmd = (HeartbeatReplyCmd) tyCommand;
                 logPrint("心跳消息", heartbeatReplyCmd.getTimestamp());
                HeartbeatReplyCmd heartbeatReplyCmd = (HeartbeatReplyCmd) tyCommand;
                logPrint("心跳消息", heartbeatReplyCmd.getTimestamp());
                break;
            case 0x03:
                // 处理订阅消息
@@ -695,14 +703,14 @@
            case (byte) 0xA8:
                // 处理无人机状态消息
                UavStateCmd uavStateCmd = (UavStateCmd) tyCommand;
                UavStateCache.putUavState(uavStateCmd.getUavState());
                UavStateCache.put(uavStateCmd.getUavState());
                //logPrint("无人机状态", uavStateCmd.getUavState().getBoxSn());
                // WebSocketUtil.sendMessageAll(uavStateCmd.getUavState());
                break;
            case (byte) 0xA9:
                // 处理无人机遥测消息
                UavTelemetryDataCmd uavTelemetryDataCmd = (UavTelemetryDataCmd) tyCommand;
                UavTelemetryDataCache.putUavTelemetryData(uavTelemetryDataCmd.getTelemetryData());
                UavTelemetryDataCache.put(uavTelemetryDataCmd.getTelemetryData());
                //logPrint("无人机遥测", uavTelemetryDataCmd.getTelemetryData().getBoxSn());
                //WebSocketUtil.sendMessageAll(uavTelemetryDataCmd.getTelemetryData());
                break;
@@ -710,7 +718,7 @@
            case (byte) 0x0C:
                // 处理无人机信道质量数据
                SignalInfoCmd signalInfoCmd = (SignalInfoCmd) tyCommand;
                UavSignalInfoCache.putUavSignalInfoCache(signalInfoCmd.getSignalInfo());
                UavSignalInfoCache.put(signalInfoCmd.getSignalInfo());
                //logPrint("无人机信道质量", signalInfoCmd.getSignalInfo().getBoxSn());
                break;
            case (byte) 0xD1:
@@ -896,21 +904,29 @@
    //公共日志打印
    private void logPrint(String message, Object obj) {
        log.debug("收到{}回复{}", message, obj);
        String text = String.format("收到%s回复%s", message, obj);
        ServerReplyMessage serverReplyMessage = ServerReplyMessage.builder().message(text).build();
        WebSocketUtil.sendMessage("reply", serverReplyMessage);
        log.info(text);
    }
    //公共日志打印
    private void logPrint(String message, byte result, Integer errorCode) {
        log.info("收到{}回复:{} 错误码:{}【{}】",
        String text = String.format(
                "收到%s回复:%s 错误码:%d【%s】",
                message,
                ByteUtils.byteToHex(result),
                errorCode,
                ErrorCodeEnum.getDescByCode(errorCode));
                ErrorCodeEnum.getDescByCode(errorCode)
        );
        ServerReplyMessage serverReplyMessage = ServerReplyMessage.builder().message(text).build();
        WebSocketUtil.sendMessage("reply", serverReplyMessage);
        log.info(text);
    }
    /**
     * 发送消息
     * 发送tcp消息
     */
    private void sendMessage(String key, BaseCmd msg) {
        TcpClientUtil.sendMessage(key, msg);