liusuyi
2025-03-04 16fd4235f692777cfd9cceff5090e5450e2173b3
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -1,33 +1,31 @@
package com.ard.tianyu.service.impl;
import com.ard.common.utils.ByteUtils;
import com.ard.tianyu.aspect.annotation.RequireUavControl;
import com.ard.tianyu.config.TyConfiguration;
import com.ard.tianyu.http.TyClient;
import com.ard.tianyu.model.cache.TyTcpServerCache;
import com.ard.tianyu.model.cache.UavSignalInfoCache;
import com.ard.tianyu.model.cache.UavStateCache;
import com.ard.tianyu.model.cache.UavTelemetryDataCache;
import com.ard.tianyu.model.dto.BoxHistoryDTO;
import com.ard.tianyu.model.dto.BoxPhotosDTO;
import com.ard.tianyu.model.dto.BoxSettingsDTO;
import com.ard.tianyu.model.dto.camera.*;
import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.model.dto.control.AngleControlDTO;
import com.ard.tianyu.model.dto.control.SpeedControlDTO;
import com.ard.tianyu.model.dto.converter.realdata.UavSignalInfoConverter;
import com.ard.tianyu.model.dto.converter.realdata.UavStateConverter;
import com.ard.tianyu.model.dto.converter.realdata.UavTelemetryDataConverter;
import com.ard.tianyu.model.dto.converter.wayline.PlanLineDataConverter;
import com.ard.tianyu.model.dto.manual.*;
import com.ard.tianyu.model.dto.settings.ReturnHeightSettingDTO;
import com.ard.tianyu.model.dto.settings.ReturnPointSettingDTO;
import com.ard.tianyu.model.dto.settings.VideoStreamSettingDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.speaker.*;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.model.dto.wayline.*;
import com.ard.tianyu.model.receiver.*;
import com.ard.tianyu.domain.dto.camera.*;
import com.ard.tianyu.domain.dto.manual.*;
import com.ard.tianyu.domain.dto.speaker.*;
import com.ard.tianyu.domain.dto.wayline.*;
import com.ard.tianyu.domain.receiver.*;
import com.ard.tianyu.forest.TyClient;
import com.ard.tianyu.domain.cache.TyTcpServerCache;
import com.ard.tianyu.domain.cache.UavSignalInfoCache;
import com.ard.tianyu.domain.cache.UavStateCache;
import com.ard.tianyu.domain.cache.UavTelemetryDataCache;
import com.ard.tianyu.domain.dto.BoxHistoryDTO;
import com.ard.tianyu.domain.dto.BoxPhotosDTO;
import com.ard.tianyu.domain.dto.BoxSettingsDTO;
import com.ard.tianyu.domain.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.domain.dto.control.AngleControlDTO;
import com.ard.tianyu.domain.dto.control.SpeedControlDTO;
import com.ard.tianyu.domain.dto.converter.wayline.PlanLineDataConverter;
import com.ard.tianyu.domain.dto.settings.ReturnHeightSettingDTO;
import com.ard.tianyu.domain.dto.settings.ReturnPointSettingDTO;
import com.ard.tianyu.domain.dto.settings.VideoStreamSettingDTO;
import com.ard.tianyu.domain.dto.signal.SignalInfo;
import com.ard.tianyu.domain.dto.state.UavState;
import com.ard.tianyu.domain.dto.telemetry.TelemetryData;
import com.ard.tianyu.netty.command.*;
import com.ard.tianyu.netty.TyNettyTcpClient;
import com.ard.tianyu.netty.command.camera.*;
@@ -48,7 +46,9 @@
import com.ard.tianyu.netty.handler.ErrorCodeEnum;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import com.ard.tianyu.service.ITyService;
import com.ard.tianyu.websocket.domain.UavControlType;
import com.ard.tianyu.websocket.utils.WebSocketUtil;
import com.ard.vtdu.service.IMediaService;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import lombok.extern.slf4j.Slf4j;
@@ -76,6 +76,8 @@
    @Resource
    private TyConfiguration tyConfiguration;
    @Resource
    private IMediaService mediaService;
    /**
     * 获取天宇token信息
@@ -96,7 +98,7 @@
    public List<BoxInfoReceiver> getBoxList() {
        //请求云盒列表
        try {
            TyHttpCommonReceiver<List<BoxInfoReceiver>> boxListReveiver = tyClient.getBoxList(tyConfiguration.getAccessToken().convertFromDTO());
            TyHttpCommonReceiver<List<BoxInfoReceiver>> boxListReveiver = tyClient.getBoxList();
            return boxListReveiver.getContent();
        } catch (Exception e) {
            log.error("获取云盒列表失败:{}", e.getMessage());
@@ -112,7 +114,7 @@
    @Override
    public BoxStreamUrlReceiver getBoxLiveUrl(String boxSn) {
        TyHttpCommonReceiver<BoxStreamUrlReceiver> boxLiveUrl = tyClient.getBoxLiveUrl(boxSn, tyConfiguration.getAccessToken().convertFromDTO());
        TyHttpCommonReceiver<BoxStreamUrlReceiver> boxLiveUrl = tyClient.getBoxLiveUrl(boxSn);
        return boxLiveUrl.getContent();
    }
@@ -123,7 +125,7 @@
     */
    @Override
    public List<BoxHistoryReceiver> getBoxHistory(BoxHistoryDTO boxHistoryDTO) {
        TyHttpCommonReceiver<List<BoxHistoryReceiver>> boxHistory = tyClient.getBoxHistory(boxHistoryDTO, tyConfiguration.getAccessToken().convertFromDTO());
        TyHttpCommonReceiver<List<BoxHistoryReceiver>> boxHistory = tyClient.getBoxHistory(boxHistoryDTO);
        return boxHistory.getContent();
    }
@@ -134,7 +136,7 @@
     */
    @Override
    public List<BoxPhotosReceiver> getBoxPhotos(BoxPhotosDTO boxPhotosDTO) {
        TyHttpCommonReceiver<List<BoxPhotosReceiver>> boxPhotos = tyClient.getBoxPhotos(boxPhotosDTO, tyConfiguration.getAccessToken().convertFromDTO());
        TyHttpCommonReceiver<List<BoxPhotosReceiver>> boxPhotos = tyClient.getBoxPhotos(boxPhotosDTO);
        return boxPhotos.getContent();
    }
@@ -143,7 +145,7 @@
     */
    @Override
    public Boolean updateBoxSettings(BoxSettingsDTO boxSettingsDTO) {
        TyHttpCommonReceiver<?> result = tyClient.updateBoxSettings(boxSettingsDTO, tyConfiguration.getAccessToken().convertFromDTO());
        TyHttpCommonReceiver<?> result = tyClient.updateBoxSettings(boxSettingsDTO);
        return result.getState() == 1;
    }
@@ -151,34 +153,37 @@
     * 设置返航高度
     */
    @Override
    public void updateReturnHeight(ReturnHeightSettingDTO returnHeightSettingDTO) {
    public Boolean updateReturnHeight(ReturnHeightSettingDTO returnHeightSettingDTO) {
        ReturnHeightSettingCmd returnHeightSettingCmd = new ReturnHeightSettingCmd(returnHeightSettingDTO);
        this.sendMessage(tyConfiguration.getIpPort(), returnHeightSettingCmd);
        return true;
    }
    /**
     * 设置返航点
     */
    @Override
    public void updateReturnPoint(ReturnPointSettingDTO returnPointSettingDTO) {
    public Boolean updateReturnPoint(ReturnPointSettingDTO returnPointSettingDTO) {
        ReturnPointSettingCmd returnPointSettingCmd = new ReturnPointSettingCmd(returnPointSettingDTO);
        this.sendMessage(tyConfiguration.getIpPort(), returnPointSettingCmd);
        return true;
    }
    /**
     * 设置视频码流
     */
    @Override
    public void updateVideoStream(VideoStreamSettingDTO videoStreamSettingDTO) {
    public Boolean updateVideoStream(VideoStreamSettingDTO videoStreamSettingDTO) {
        VideoStreamSettingCmd videoStreamSettingCmd = new VideoStreamSettingCmd(videoStreamSettingDTO);
        this.sendMessage(tyConfiguration.getIpPort(), videoStreamSettingCmd);
        return true;
    }
    /**
     * 注册天宇平台
     */
    @Override
    public void registerMessage() {
    public Boolean registerMessage() {
        try {
            AccessTokenReceiver tyToken = tyConfiguration.getAccessToken();
            RegisterCmd registerMessage = new RegisterCmd(tyToken.getCompanyId(), tyToken.getAccessToken().getBytes());
@@ -186,59 +191,68 @@
        } catch (Exception e) {
            log.error("注册天宇平台失败:{}", e.getMessage());
        }
        return true;
    }
    /**
     * 云台控制基于角度
     */
    @RequireUavControl(UavControlType.PAYLOAD)
    @Override
    public void angleControl(AngleControlDTO angleControlDto) {
    public Boolean angleControl(AngleControlDTO angleControlDto) {
        AngleControlCmd controlAngleCommand = new AngleControlCmd(angleControlDto);
        this.sendMessage(tyConfiguration.getIpPort(), controlAngleCommand);
        return true;
    }
    /**
     * 云台绝对值控制(基于角度)
     */
    @RequireUavControl(UavControlType.PAYLOAD)
    @Override
    public void absAngleControl(AbsAngleControlDTO absAngleControlDto) {
    public Boolean absAngleControl(AbsAngleControlDTO absAngleControlDto) {
        AbsAngleControlCmd absAngleControlCommand = new AbsAngleControlCmd(absAngleControlDto);
        this.sendMessage(tyConfiguration.getIpPort(), absAngleControlCommand);
        return true;
    }
    /**
     * 云台转动(基于速度)
     */
    @RequireUavControl(UavControlType.PAYLOAD)
    @Override
    public void speedControl(SpeedControlDTO speedControlDto) {
    public Boolean speedControl(SpeedControlDTO speedControlDto) {
        SpeedControlCmd speedControlCommand = new SpeedControlCmd(speedControlDto);
        this.sendMessage(tyConfiguration.getIpPort(), speedControlCommand);
        return true;
    }
    /**
     * 设置相机模式
     */
    @Override
    public void updateCameraMode(CameraModeDTO cameraModeDTO) {
    public Boolean updateCameraMode(CameraModeDTO cameraModeDTO) {
        CameraModeCmd cameraModeCommand = new CameraModeCmd(cameraModeDTO);
        this.sendMessage(tyConfiguration.getIpPort(), cameraModeCommand);
        return true;
    }
    /**
     * 拍照
     */
    @Override
    public void capturePic(CapturePicDTO capturePicDto) {
    public Boolean capturePic(CapturePicDTO capturePicDto) {
        updateCameraMode(CameraModeDTO.builder().boxSn(capturePicDto.getBoxSn()).actionParam((byte) 0x01).build());
        CapturePicCmd capturePicCommand = new CapturePicCmd(capturePicDto);
        this.sendMessage(tyConfiguration.getIpPort(), capturePicCommand);
        return true;
    }
    /**
     * 录像
     */
    @Override
    public void record(RecordDTO recordDto) {
    public Boolean record(RecordDTO recordDto) {
        BaseCmd baseCmd;
        if (recordDto.getIsRecord()) {
            updateCameraMode(CameraModeDTO.builder().boxSn(recordDto.getBoxSn()).actionParam((byte) 0x02).build());
@@ -247,150 +261,168 @@
            baseCmd = new RecordStopCmd(recordDto);
        }
        this.sendMessage(tyConfiguration.getIpPort(), baseCmd);
        return true;
    }
    /**
     * 变倍
     */
    @Override
    public void zoom(ZoomDTO zoomDTO) {
    public Boolean zoom(ZoomDTO zoomDTO) {
        ZoomCmd zoomCommand = new ZoomCmd(zoomDTO);
        this.sendMessage(tyConfiguration.getIpPort(), zoomCommand);
        return true;
    }
    /**
     * 变倍到指定倍数
     */
    @Override
    public void zoomToLevel(ZoomToLevelDTO zoomToLevelDTO) {
    public Boolean zoomToLevel(ZoomToLevelDTO zoomToLevelDTO) {
        ZoomToLevelCmd zoomToLevelCommand = new ZoomToLevelCmd(zoomToLevelDTO);
        this.sendMessage(tyConfiguration.getIpPort(), zoomToLevelCommand);
        return true;
    }
    /**
     * 切换摄像头
     */
    @Override
    public void switchCamera(SwitchCameraDTO switchCameraDTO) {
    public Boolean switchCamera(SwitchCameraDTO switchCameraDTO) {
        SwitchCameraCmd switchCameraCmd = new SwitchCameraCmd(switchCameraDTO);
        this.sendMessage(tyConfiguration.getIpPort(), switchCameraCmd);
        return true;
    }
    /**
     * 切换视频源
     */
    @Override
    public void switchSource(SwitchSourceDTO switchSourceDTO) {
    public Boolean switchSource(SwitchSourceDTO switchSourceDTO) {
        SwitchSourceCmd switchSourceCmd = new SwitchSourceCmd(switchSourceDTO);
        this.sendMessage(tyConfiguration.getIpPort(), switchSourceCmd);
        return true;
    }
    /**
     * 打开或关闭照片回传
     */
    @Override
    public void photoReturnToggle(PhotoReturnToggleDTO photoReturnToggleDTO) {
    public Boolean photoReturnToggle(PhotoReturnToggleDTO photoReturnToggleDTO) {
        PhotoReturnToggleCmd photoReturnToggleCmd = new PhotoReturnToggleCmd(photoReturnToggleDTO);
        this.sendMessage(tyConfiguration.getIpPort(), photoReturnToggleCmd);
        return true;
    }
    /**
     * 切换无人机控制权
     */
    @Override
    public void switchUavControl(SwitchUavControlDTO switchUavControlDTO) {
    public Boolean switchUavControl(SwitchUavControlDTO switchUavControlDTO) {
        SwitchUavControlCmd switchUavControlCmd = new SwitchUavControlCmd(switchUavControlDTO);
        this.sendMessage(tyConfiguration.getIpPort(), switchUavControlCmd);
        return true;
    }
    /**
     * 起飞
     */
    @RequireUavControl(UavControlType.FLY)
    @Override
    public void takeOff(TakeOffDTO takeOffDTO) {
    public Boolean takeOff(TakeOffDTO takeOffDTO) {
        TakeOffCmd takeOffCmd = new TakeOffCmd(takeOffDTO);
        this.sendMessage(tyConfiguration.getIpPort(), takeOffCmd);
        return true;
    }
    /**
     * 返航
     */
    @Override
    public void returnHome(ReturnHomeDTO returnHomeDTO) {
    public Boolean returnHome(ReturnHomeDTO returnHomeDTO) {
        ReturnHomeCmd returnHomeCmd = new ReturnHomeCmd(returnHomeDTO);
        this.sendMessage(tyConfiguration.getIpPort(), returnHomeCmd);
        return true;
    }
    /**
     * 取消返航
     */
    @Override
    public void returnHomeCancel(ReturnHomeCancelDTO returnHomeCancelDTO) {
    public Boolean returnHomeCancel(ReturnHomeCancelDTO returnHomeCancelDTO) {
        ReturnHomeCancelCmd returnHomeCancelCmd = new ReturnHomeCancelCmd(returnHomeCancelDTO);
        this.sendMessage(tyConfiguration.getIpPort(), returnHomeCancelCmd);
        return true;
    }
    /**
     * 降落
     */
    @Override
    public void land(LandDTO landDTO) {
    public Boolean land(LandDTO landDTO) {
        LandCmd landCmd = new LandCmd(landDTO);
        this.sendMessage(tyConfiguration.getIpPort(), landCmd);
        return true;
    }
    /**
     * 取消降落
     */
    @Override
    public void landCancel(LandCancelDTO landCancelDTO) {
    public Boolean landCancel(LandCancelDTO landCancelDTO) {
        LandCancelCmd landCancelCmd = new LandCancelCmd(landCancelDTO);
        this.sendMessage(tyConfiguration.getIpPort(), landCancelCmd);
        return true;
    }
    /**
     * 强制降落
     */
    @Override
    public void landForced(LandForcedDTO landForcedDTO) {
    public Boolean landForced(LandForcedDTO landForcedDTO) {
        LandForcedCmd landForcedCmd = new LandForcedCmd(landForcedDTO);
        this.sendMessage(tyConfiguration.getIpPort(), landForcedCmd);
        return true;
    }
    /**
     * 方向控制
     */
    @Override
    public void flyControl(FlyControlDTO flyControlDTO) {
    public Boolean flyControl(FlyControlDTO flyControlDTO) {
        FlyControlCmd flyControlCmd = new FlyControlCmd(flyControlDTO);
        this.sendMessage(tyConfiguration.getIpPort(), flyControlCmd);
        return true;
    }
    /**
     * 指点飞行控制
     */
    @Override
    public void flyPointControl(FlyPointControlDTO flyPointControlDTO) {
    public Boolean flyPointControl(FlyPointControlDTO flyPointControlDTO) {
        FlyPointControlCmd flyPointControlCmd = new FlyPointControlCmd(flyPointControlDTO);
        this.sendMessage(tyConfiguration.getIpPort(), flyPointControlCmd);
        return true;
    }
    /**
     * 停止指点飞行控制
     */
    @Override
    public void flyPointControlCancel(FlyPointControlCancelDTO flyPointControlCancelDTO) {
    public Boolean flyPointControlCancel(FlyPointControlCancelDTO flyPointControlCancelDTO) {
        FlyPointControlCancelCmd flyPointControlCancelCmd = new FlyPointControlCancelCmd(flyPointControlCancelDTO);
        this.sendMessage(tyConfiguration.getIpPort(), flyPointControlCancelCmd);
        return true;
    }
    /**
     * 紧急制动
     */
    @Override
    public void emeragencyBrake(EmeragencyBrakeDTO emeragencyBrakeDTO) {
    public Boolean emeragencyBrake(EmeragencyBrakeDTO emeragencyBrakeDTO) {
        EmergencyBrakeCmd emergencyBrakeCmd = new EmergencyBrakeCmd(emeragencyBrakeDTO);
        this.sendMessage(tyConfiguration.getIpPort(), emergencyBrakeCmd);
        return true;
    }
    /**
@@ -783,4 +815,5 @@
            log.error("发送消息异常:{}", e.getMessage());
        }
    }
}