liusuyi
2025-03-04 16fd4235f692777cfd9cceff5090e5450e2173b3
优化包结构、增加载荷飞控权限
13 files added
65 files modified
6 files deleted
84 files renamed
2059 ■■■■■ changed files
ard-generator/src/main/resources/vm/java/controller.java.vm 11 ●●●●● patch | view | raw | blame | history
ard-generator/src/main/resources/vm/java/serviceImpl.java.vm 6 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/aspect/ControlAuthorityAspect.java 89 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/aspect/UavControlAspect.java 93 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/aspect/annotation/CheckControlAuthority.java 9 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/aspect/annotation/RequireUavControl.java 17 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java 8 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/config/WebSocketConfig.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java 14 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java 18 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavControlController.java 57 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java 19 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavPermissionsController.java 57 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java 21 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java 14 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavSpeakerController.java 9 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavVideoController.java 34 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavWayLineController.java 5 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/uav/UavBoxController.java 113 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/UavBox.java 68 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/cache/TyTcpServerCache.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/cache/UavSignalInfoCache.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/cache/UavStateCache.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/cache/UavTelemetryDataCache.java 5 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxHistoryDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxPhotosDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxSettingsDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/TokenDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CameraModeDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CapturePicDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/PhotoReturnToggleDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/RecordDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchCameraDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchSourceDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomToLevelDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AbsAngleControlDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AngleControlDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/control/SpeedControlDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavSignalInfoConverter.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavStateConverter.java 5 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavTelemetryDataConverter.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/HangarPointConverter.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/NormalModelConverter.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PlanLineDataConverter.java 12 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointActionConverter.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointDataConverter.java 6 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/SurroundModelConverter.java 6 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/init/UavInitInfo.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/EmeragencyBrakeDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyControlDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlCancelDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandCancelDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandForcedDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeCancelDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/SwitchUavControlDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/TakeOffDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnHeightSettingDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnPointSettingDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/VideoStreamSettingDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/signal/SignalInfo.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/LoopSettingDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RealSpeakDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RecordSpeakDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/SpeakModeSwitchDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/StopSpeakDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/TextSpeakDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/VolumeSettingDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/AvoidanceData.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryState.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryStateInfo.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/CameraState.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/FlightControllerState.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/HmsAlarmData.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/MissionState.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PointData.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PtzState.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/UavState.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/telemetry/TelemetryData.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/HangarPoint.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/NormalModel.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PlanLineData.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PointAction.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/SurroundModel.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineBeginDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineEndDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLinePauseDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineResumeDTO.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineUploadDTO.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/receiver/AccessTokenReceiver.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxHistoryReceiver.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxInfoReceiver.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxPhotosReceiver.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxStreamUrlReceiver.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/domain/receiver/TyHttpCommonReceiver.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/forest/TokenInterceptor.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/forest/TyClient.java 13 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/forest/TyConst.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/mapper/UavBoxMapper.java 62 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/TyNettyTcpClient.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeReplyCmd.java 1 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyControlCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCancelCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCancelCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandForcedCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java 1 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/LoopSettingCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RealSpeakCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RecordSpeakCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/SpeakModeSwitchCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/StopSpeakCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/TextSpeakCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/VolumeSettingCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginCmd.java 6 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginReplyCmd.java 1 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineEndCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLinePauseCmd.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineResumeCmd.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadCmd.java 6 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadReplyCmd.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java 14 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/ITyService.java 40 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/IUavBoxService.java 64 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/control/UavControlService.java 188 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/control/WebSocketService.java 48 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java 72 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/impl/UavBoxServiceImpl.java 140 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java 158 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/stream/UavStreamManager.java 18 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/websocket/domain/BaseMessage.java 7 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/websocket/domain/ControlAuthorityDTO.java 18 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlMessage.java 15 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlType.java 29 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavStreamMessage.java 4 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java 39 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/websocket/utils/WebSocketUtil.java 15 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/vtdu/service/impl/MediaServiceImpl.java 7 ●●●●● patch | view | raw | blame | history
ard-work/src/main/resources/mapper/UavBoxMapper.xml 108 ●●●●● patch | view | raw | blame | history
ard-generator/src/main/resources/vm/java/controller.java.vm
@@ -1,6 +1,9 @@
package ${packageName}.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,16 +33,18 @@
 * @author ${author}
 * @date ${datetime}
 */
@Api(tags = "${functionName}")
@RestController
@RequestMapping("/${moduleName}/${businessName}")
public class ${ClassName}Controller extends BaseController
{
    @Autowired
    @Resource
    private I${ClassName}Service ${className}Service;
    /**
     * 查询${functionName}列表
     */
    @ApiOperation("查询${functionName}列表")
    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
    @GetMapping("/list")
#if($table.crud || $table.sub)
@@ -73,6 +78,7 @@
    /**
     * 获取${functionName}详细信息
     */
    @ApiOperation("获取${functionName}详细信息")
    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')")
    @GetMapping(value = "/{${pkColumn.javaField}}")
    public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField})
@@ -83,6 +89,7 @@
    /**
     * 新增${functionName}
     */
    @ApiOperation("新增${functionName}")
    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')")
    @Log(title = "${functionName}", businessType = BusinessType.INSERT)
    @PostMapping
@@ -94,6 +101,7 @@
    /**
     * 修改${functionName}
     */
    @ApiOperation("修改${functionName}")
    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')")
    @Log(title = "${functionName}", businessType = BusinessType.UPDATE)
    @PutMapping
@@ -105,6 +113,7 @@
    /**
     * 删除${functionName}
     */
    @ApiOperation("删除${functionName}")
    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')")
    @Log(title = "${functionName}", businessType = BusinessType.DELETE)
    @DeleteMapping("/{${pkColumn.javaField}s}")
ard-generator/src/main/resources/vm/java/serviceImpl.java.vm
@@ -17,7 +17,9 @@
#end
import ${packageName}.mapper.${ClassName}Mapper;
import ${packageName}.domain.${ClassName};
import ${packageName}.service.I${ClassName}Service;
import
import javax.annotation.Resource; ${packageName}.service.I${ClassName}Service;
/**
 * ${functionName}Service业务层处理
@@ -28,7 +30,7 @@
@Service
public class ${ClassName}ServiceImpl implements I${ClassName}Service 
{
    @Autowired
    @Resource
    private ${ClassName}Mapper ${className}Mapper;
    /**
ard-work/src/main/java/com/ard/tianyu/aspect/ControlAuthorityAspect.java
File was deleted
ard-work/src/main/java/com/ard/tianyu/aspect/UavControlAspect.java
New file
@@ -0,0 +1,93 @@
package com.ard.tianyu.aspect;
import com.ard.common.exception.NoPermissionException;
import com.ard.common.utils.SecurityUtils;
import com.ard.tianyu.aspect.annotation.RequireUavControl;
import com.ard.tianyu.service.control.UavControlService;
import com.ard.tianyu.websocket.domain.UavControlType;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.lang.reflect.Field;
/**
 * AOP 切面:拦截 @RequireUavControl,检查用户是否拥有 UAV 控制权限
 */
@Aspect
@Component
public class UavControlAspect {
    @Resource
    private UavControlService uavControlService;
    /**
     * 拦截 @RequireUavControl 注解的方法
     */
    @Before("@annotation(requireUavControl)")
    public void checkUavControl(JoinPoint joinPoint, RequireUavControl requireUavControl) {
        // 获取当前用户 ID
        Long userId = SecurityUtils.getUserId();
        // 获取控制类型
        UavControlType controlType = requireUavControl.value();
        // 获取方法参数
        Object[] args = joinPoint.getArgs();
        // 遍历参数,使用反射获取每个参数中的 boxSn
        for (Object arg : args) {
            String boxSn = getBoxSn(arg);  // 调用之前实现的 getBoxSn 方法
            if (boxSn != null) {
                // 检查当前用户是否拥有该设备的控制权限
                Long currentController = uavControlService.getCurrentController(boxSn,
                        controlType.name().toLowerCase());
                if (currentController == null || !currentController.equals(userId)) {
                    throw new NoPermissionException("无权执行该操作,需要 " + controlType + " 控制权限");
                }
            }
        }
    }
    /**
     * 通过反射获取对象中的 boxSn 字段
     *
     * @param dto 要反射的对象
     * @return boxSn 字段的值,如果没有找到则返回 null
     */
    public static String getBoxSn(Object dto) {
        if (dto == null) {
            return null; // 如果对象为空,直接返回 null
        }
        try {
            // 获取类的所有字段
            Field[] fields = dto.getClass().getDeclaredFields();
            for (Field field : fields) {
                // 设置字段可访问
                field.setAccessible(true);
                // 判断是否是 boxSn 字段
                if ("boxSn".equals(field.getName())) {
                    // 检查字段类型是否是 String 类型
                    if (field.getType().equals(String.class)) {
                        // 获取并返回 boxSn 字段的值
                        return (String) field.get(dto);
                    } else {
                        // 如果字段类型不是 String,返回 null
                        return null;
                    }
                }
            }
        } catch (IllegalAccessException e) {
            // 捕获异常并打印日志
            System.err.println("反射访问失败: " + e.getMessage());
            e.printStackTrace();
        }
        return null; // 如果没有找到 boxSn 字段,返回 null
    }
}
ard-work/src/main/java/com/ard/tianyu/aspect/annotation/CheckControlAuthority.java
File was deleted
ard-work/src/main/java/com/ard/tianyu/aspect/annotation/RequireUavControl.java
New file
@@ -0,0 +1,17 @@
package com.ard.tianyu.aspect.annotation;
import com.ard.tianyu.websocket.domain.UavControlType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 自定义注解:用于方法拦截,检查 UAV 控制权限
 */
@Target(ElementType.METHOD)   // 作用于方法
@Retention(RetentionPolicy.RUNTIME) // 运行时生效
public @interface RequireUavControl {
    UavControlType value(); // 控制类型:"fly"、"payload"、"both"
}
ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java
@@ -1,9 +1,9 @@
package com.ard.tianyu.config;
import com.ard.tianyu.http.TyClient;
import com.ard.tianyu.model.dto.TokenDTO;
import com.ard.tianyu.model.receiver.AccessTokenReceiver;
import com.ard.tianyu.model.receiver.TyHttpCommonReceiver;
import com.ard.tianyu.forest.TyClient;
import com.ard.tianyu.domain.dto.TokenDTO;
import com.ard.tianyu.domain.receiver.AccessTokenReceiver;
import com.ard.tianyu.domain.receiver.TyHttpCommonReceiver;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
ard-work/src/main/java/com/ard/tianyu/config/WebSocketConfig.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/websocket/config/WebSocketConfig.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.websocket.config;
package com.ard.tianyu.config;
import com.ard.tianyu.websocket.handler.TyMessageHandler;
import com.ard.tianyu.websocket.interceptor.TyHandshakeInterceptor;
ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java
@@ -1,13 +1,13 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
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.receiver.BoxHistoryReceiver;
import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
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.receiver.BoxHistoryReceiver;
import com.ard.tianyu.domain.receiver.BoxPhotosReceiver;
import com.ard.tianyu.domain.receiver.BoxInfoReceiver;
import com.ard.tianyu.domain.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSort;
ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java
@@ -1,30 +1,14 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
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.manual.SwitchUavControlDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.domain.dto.camera.*;
import com.ard.tianyu.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * UavCameraController
ard-work/src/main/java/com/ard/tianyu/controller/UavControlController.java
New file
@@ -0,0 +1,57 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
import com.ard.tianyu.service.control.UavControlService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Api(tags = "无人机控制权接口")
@RestController
@RequestMapping("/uav/control")
public class UavControlController {
    @Resource
    private UavControlService uavControlService;
    /**
     * 申请控制权(请求通过 WebSocket 发送给当前控制者)
     */
    @ApiOperation("申请控制权")
    @PostMapping("/request")
    public AjaxResult requestControl(@RequestParam String boxSn, @RequestParam String type) {
        return AjaxResult.success(uavControlService.requestControl(boxSn, type));
    }
    /**
     * 处理控制请求(当前控制者同意/拒绝)
     */
    @ApiOperation("处理控制请求")
    @PostMapping("/handle")
    public AjaxResult handleControlRequest(
            @RequestParam String boxSn,
            @RequestParam String type,
            @RequestParam boolean approve) {
        return AjaxResult.success(uavControlService.handleControlResponse(boxSn, approve, type));
    }
    /**
     * 释放控制权
     */
    @ApiOperation("释放控制权")
    @PostMapping("/release")
    public AjaxResult releaseControl(@RequestParam String boxSn, @RequestParam String type) {
        return AjaxResult.success(uavControlService.releaseControl(boxSn, type));
    }
    /**
     * 获取当前控制者
     */
    @ApiOperation("获取当前控制者")
    @GetMapping("/current")
    public AjaxResult getCurrentController(@RequestParam String boxSn, @RequestParam String type) {
        return AjaxResult.success(uavControlService.getCurrentController(boxSn, type));
    }
}
ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java
@@ -1,21 +1,9 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
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.manual.SwitchUavControlDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
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.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
@@ -24,7 +12,6 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * UavGimbalController
ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java
@@ -1,7 +1,7 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
import com.ard.tianyu.model.dto.manual.*;
import com.ard.tianyu.domain.dto.manual.*;
import com.ard.tianyu.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
ard-work/src/main/java/com/ard/tianyu/controller/UavPermissionsController.java
File was deleted
ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java
@@ -1,30 +1,15 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
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.manual.SwitchUavControlDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
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.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * UavRealDataController
ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java
@@ -1,16 +1,9 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
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.settings.ReturnHeightSettingDTO;
import com.ard.tianyu.model.dto.settings.ReturnPointSettingDTO;
import com.ard.tianyu.model.dto.settings.VideoStreamSettingDTO;
import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
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.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSort;
@@ -19,7 +12,6 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * UavBaseController
ard-work/src/main/java/com/ard/tianyu/controller/UavSpeakerController.java
@@ -1,12 +1,9 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.speaker.SpeakModeSwitchDTO;
import com.ard.tianyu.model.dto.speaker.StopSpeakDTO;
import com.ard.tianyu.model.dto.speaker.TextSpeakDTO;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.domain.dto.speaker.SpeakModeSwitchDTO;
import com.ard.tianyu.domain.dto.speaker.StopSpeakDTO;
import com.ard.tianyu.domain.dto.speaker.TextSpeakDTO;
import com.ard.tianyu.service.ITyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
ard-work/src/main/java/com/ard/tianyu/controller/UavVideoController.java
File was deleted
ard-work/src/main/java/com/ard/tianyu/controller/UavWayLineController.java
@@ -1,10 +1,7 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
import com.ard.tianyu.model.dto.speaker.SpeakModeSwitchDTO;
import com.ard.tianyu.model.dto.speaker.StopSpeakDTO;
import com.ard.tianyu.model.dto.speaker.TextSpeakDTO;
import com.ard.tianyu.model.dto.wayline.*;
import com.ard.tianyu.domain.dto.wayline.*;
import com.ard.tianyu.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
ard-work/src/main/java/com/ard/tianyu/controller/uav/UavBoxController.java
New file
@@ -0,0 +1,113 @@
package com.ard.tianyu.controller.uav;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import com.ard.tianyu.domain.UavBox;
import com.ard.tianyu.service.IUavBoxService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ard.common.annotation.Log;
import com.ard.common.core.controller.BaseController;
import com.ard.common.core.domain.AjaxResult;
import com.ard.common.enums.BusinessType;
import com.ard.common.utils.poi.ExcelUtil;
import com.ard.common.core.page.TableDataInfo;
/**
 * 无人机盒子Controller
 *
 * @author ruoyi
 * @date 2025-03-04
 */
@Api(tags = "无人机盒子")
@RestController
@RequestMapping("/uav/box")
public class UavBoxController extends BaseController
{
    @Resource
    private IUavBoxService uavBoxService;
    /**
     * 查询无人机盒子列表
     */
    @ApiOperation("查询无人机盒子列表")
    @PreAuthorize("@ss.hasPermi('uav:box:list')")
    @GetMapping("/list")
    public TableDataInfo list(UavBox uavBox)
    {
        startPage();
        List<UavBox> list = uavBoxService.selectUavBoxList(uavBox);
        return getDataTable(list);
    }
    /**
     * 导出无人机盒子列表
     */
    @PreAuthorize("@ss.hasPermi('uav:box:export')")
    @Log(title = "无人机盒子", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, UavBox uavBox)
    {
        List<UavBox> list = uavBoxService.selectUavBoxList(uavBox);
        ExcelUtil<UavBox> util = new ExcelUtil<UavBox>(UavBox.class);
        util.exportExcel(response, list, "无人机盒子数据");
    }
    /**
     * 获取无人机盒子详细信息
     */
    @ApiOperation("获取无人机盒子详细信息")
    @PreAuthorize("@ss.hasPermi('uav:box:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(uavBoxService.selectUavBoxById(id));
    }
    /**
     * 新增无人机盒子
     */
    @ApiOperation("新增无人机盒子")
    @PreAuthorize("@ss.hasPermi('uav:box:add')")
    @Log(title = "无人机盒子", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody UavBox uavBox)
    {
        return toAjax(uavBoxService.insertUavBox(uavBox));
    }
    /**
     * 修改无人机盒子
     */
    @ApiOperation("修改无人机盒子")
    @PreAuthorize("@ss.hasPermi('uav:box:edit')")
    @Log(title = "无人机盒子", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody UavBox uavBox)
    {
        return toAjax(uavBoxService.updateUavBox(uavBox));
    }
    /**
     * 删除无人机盒子
     */
    @ApiOperation("删除无人机盒子")
    @PreAuthorize("@ss.hasPermi('uav:box:remove')")
    @Log(title = "无人机盒子", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(uavBoxService.deleteUavBoxByIds(ids));
    }
}
ard-work/src/main/java/com/ard/tianyu/domain/UavBox.java
New file
@@ -0,0 +1,68 @@
package com.ard.tianyu.domain;
import com.ard.common.annotation.Excel;
import com.ard.common.core.domain.BaseEntity;
import com.ard.tianyu.domain.receiver.BoxInfoReceiver;
import lombok.*;
import java.util.Objects;
/**
 * 无人机盒子对象 uav_box
 *
 * @author ruoyi
 * @date 2025-03-04
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UavBox extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** 主键 */
    private Long id;
    /** 盒子编码 */
    @Excel(name = "盒子编码")
    private String boxSn;
    /** 盒子名称 */
    @Excel(name = "盒子名称")
    private String boxName;
    /** 盒子版本 */
    @Excel(name = "盒子版本")
    private String boxVersion;
    /** 在线状态 */
    @Excel(name = "在线状态")
    private Integer onLine;
    /** 最后任务id */
    @Excel(name = "最后任务id")
    private Integer lastTaskId;
    /** 用户ID */
    @Excel(name = "用户ID")
    private Long userId;
    /** 部门ID */
    @Excel(name = "部门ID")
    private Long deptId;
    /**
     * 判断两个无人机对象的属性是否相同
     */
    public boolean isSameAs(BoxInfoReceiver other) {
        return Objects.equals(this.boxName, other.getBoxName()) &&
                Objects.equals(this.boxVersion, other.getBoxVersion()) &&
                Objects.equals(this.lastTaskId, other.getLastTaskId()) &&
                Objects.equals(this.onLine, other.getOnLine());
        // 对比其他属性
    }
}
ard-work/src/main/java/com/ard/tianyu/domain/cache/TyTcpServerCache.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/cache/TyTcpServerCache.java
@@ -1,6 +1,4 @@
package com.ard.tianyu.model.cache;
import com.ard.tianyu.model.dto.signal.SignalInfo;
package com.ard.tianyu.domain.cache;
import java.util.concurrent.ConcurrentHashMap;
ard-work/src/main/java/com/ard/tianyu/domain/cache/UavSignalInfoCache.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/cache/UavSignalInfoCache.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.model.cache;
package com.ard.tianyu.domain.cache;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.domain.dto.signal.SignalInfo;
import java.util.concurrent.ConcurrentHashMap;
ard-work/src/main/java/com/ard/tianyu/domain/cache/UavStateCache.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/cache/UavStateCache.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.model.cache;
package com.ard.tianyu.domain.cache;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.domain.dto.state.UavState;
import java.util.concurrent.ConcurrentHashMap;
/**
ard-work/src/main/java/com/ard/tianyu/domain/cache/UavTelemetryDataCache.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/cache/UavTelemetryDataCache.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.model.cache;
package com.ard.tianyu.domain.cache;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.domain.dto.telemetry.TelemetryData;
import java.util.concurrent.ConcurrentHashMap;
ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxHistoryDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/BoxHistoryDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto;
package com.ard.tianyu.domain.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxPhotosDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/BoxPhotosDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto;
package com.ard.tianyu.domain.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxSettingsDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/BoxSettingsDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto;
package com.ard.tianyu.domain.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
ard-work/src/main/java/com/ard/tianyu/domain/dto/TokenDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/TokenDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto;
package com.ard.tianyu.domain.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CameraModeDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.camera;
package com.ard.tianyu.domain.dto.camera;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CapturePicDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.camera;
package com.ard.tianyu.domain.dto.camera;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/PhotoReturnToggleDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/PhotoReturnToggleDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.camera;
package com.ard.tianyu.domain.dto.camera;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/RecordDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.camera;
package com.ard.tianyu.domain.dto.camera;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchCameraDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.camera;
package com.ard.tianyu.domain.dto.camera;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchSourceDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchSourceDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.camera;
package com.ard.tianyu.domain.dto.camera;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.camera;
package com.ard.tianyu.domain.dto.camera;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomToLevelDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomToLevelDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.camera;
package com.ard.tianyu.domain.dto.camera;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AbsAngleControlDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.control;
package com.ard.tianyu.domain.dto.control;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AngleControlDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.control;
package com.ard.tianyu.domain.dto.control;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/control/SpeedControlDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.control;
package com.ard.tianyu.domain.dto.control;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavSignalInfoConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavSignalInfoConverter.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.model.dto.converter.realdata;
package com.ard.tianyu.domain.dto.converter.realdata;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.domain.dto.signal.SignalInfo;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import org.springframework.beans.BeanUtils;
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavStateConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavStateConverter.java
@@ -1,6 +1,7 @@
package com.ard.tianyu.model.dto.converter.realdata;
package com.ard.tianyu.domain.dto.converter.realdata;
import com.ard.tianyu.model.dto.state.*;
import com.ard.tianyu.domain.dto.state.*;
import com.ard.tianyu.domain.model.dto.state.*;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import org.springframework.beans.BeanUtils;
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavTelemetryDataConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavTelemetryDataConverter.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.model.dto.converter.realdata;
package com.ard.tianyu.domain.dto.converter.realdata;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.domain.dto.telemetry.TelemetryData;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import org.springframework.beans.BeanUtils;
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/HangarPointConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/HangarPointConverter.java
@@ -1,7 +1,7 @@
package com.ard.tianyu.model.dto.converter.wayline;
package com.ard.tianyu.domain.dto.converter.wayline;
import com.ard.common.utils.bean.BeanUtils;
import com.ard.tianyu.model.dto.wayline.HangarPoint;
import com.ard.tianyu.domain.dto.wayline.HangarPoint;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
public class HangarPointConverter {
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/NormalModelConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/NormalModelConverter.java
@@ -1,7 +1,7 @@
package com.ard.tianyu.model.dto.converter.wayline;
package com.ard.tianyu.domain.dto.converter.wayline;
import com.ard.common.utils.bean.BeanUtils;
import com.ard.tianyu.model.dto.wayline.NormalModel;
import com.ard.tianyu.domain.dto.wayline.NormalModel;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
public class NormalModelConverter {
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PlanLineDataConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PlanLineDataConverter.java
@@ -1,11 +1,11 @@
package com.ard.tianyu.model.dto.converter.wayline;
package com.ard.tianyu.domain.dto.converter.wayline;
import com.ard.common.utils.bean.BeanUtils;
import com.ard.tianyu.model.dto.state.PointData;
import com.ard.tianyu.model.dto.wayline.HangarPoint;
import com.ard.tianyu.model.dto.wayline.NormalModel;
import com.ard.tianyu.model.dto.wayline.PlanLineData;
import com.ard.tianyu.model.dto.wayline.SurroundModel;
import com.ard.tianyu.domain.dto.state.PointData;
import com.ard.tianyu.domain.dto.wayline.HangarPoint;
import com.ard.tianyu.domain.dto.wayline.NormalModel;
import com.ard.tianyu.domain.dto.wayline.PlanLineData;
import com.ard.tianyu.domain.dto.wayline.SurroundModel;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import java.util.List;
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointActionConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointActionConverter.java
@@ -1,7 +1,7 @@
package com.ard.tianyu.model.dto.converter.wayline;
package com.ard.tianyu.domain.dto.converter.wayline;
import com.ard.common.utils.bean.BeanUtils;
import com.ard.tianyu.model.dto.wayline.PointAction;
import com.ard.tianyu.domain.dto.wayline.PointAction;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
public class PointActionConverter {
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointDataConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointDataConverter.java
@@ -1,8 +1,8 @@
package com.ard.tianyu.model.dto.converter.wayline;
package com.ard.tianyu.domain.dto.converter.wayline;
import com.ard.common.utils.bean.BeanUtils;
import com.ard.tianyu.model.dto.state.PointData;
import com.ard.tianyu.model.dto.wayline.PointAction;
import com.ard.tianyu.domain.dto.state.PointData;
import com.ard.tianyu.domain.dto.wayline.PointAction;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import java.util.List;
ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/SurroundModelConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/SurroundModelConverter.java
@@ -1,8 +1,8 @@
package com.ard.tianyu.model.dto.converter.wayline;
package com.ard.tianyu.domain.dto.converter.wayline;
import com.ard.common.utils.bean.BeanUtils;
import com.ard.tianyu.model.dto.state.PointData;
import com.ard.tianyu.model.dto.wayline.SurroundModel;
import com.ard.tianyu.domain.dto.state.PointData;
import com.ard.tianyu.domain.dto.wayline.SurroundModel;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import java.util.List;
ard-work/src/main/java/com/ard/tianyu/domain/dto/init/UavInitInfo.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/init/UavInitInfo.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.init;
package com.ard.tianyu.domain.dto.init;
import lombok.Builder;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/EmeragencyBrakeDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/EmeragencyBrakeDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyControlDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyControlDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlCancelDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlCancelDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandCancelDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandCancelDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandForcedDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandForcedDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeCancelDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeCancelDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/SwitchUavControlDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/TakeOffDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.manual;
package com.ard.tianyu.domain.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnHeightSettingDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnHeightSettingDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.settings;
package com.ard.tianyu.domain.dto.settings;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnPointSettingDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnPointSettingDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.settings;
package com.ard.tianyu.domain.dto.settings;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/VideoStreamSettingDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/settings/VideoStreamSettingDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.settings;
package com.ard.tianyu.domain.dto.settings;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/signal/SignalInfo.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/signal/SignalInfo.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.signal;
package com.ard.tianyu.domain.dto.signal;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/LoopSettingDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/LoopSettingDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.speaker;
package com.ard.tianyu.domain.dto.speaker;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RealSpeakDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RealSpeakDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.speaker;
package com.ard.tianyu.domain.dto.speaker;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RecordSpeakDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RecordSpeakDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.speaker;
package com.ard.tianyu.domain.dto.speaker;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/SpeakModeSwitchDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/SpeakModeSwitchDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.speaker;
package com.ard.tianyu.domain.dto.speaker;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/StopSpeakDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/StopSpeakDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.speaker;
package com.ard.tianyu.domain.dto.speaker;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/TextSpeakDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/TextSpeakDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.speaker;
package com.ard.tianyu.domain.dto.speaker;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/VolumeSettingDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/VolumeSettingDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.speaker;
package com.ard.tianyu.domain.dto.speaker;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/AvoidanceData.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/AvoidanceData.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryState.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryState.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryStateInfo.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryStateInfo.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import lombok.AllArgsConstructor;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/CameraState.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/CameraState.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/FlightControllerState.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/FlightControllerState.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/HmsAlarmData.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/HmsAlarmData.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/MissionState.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/MissionState.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PointData.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/PointData.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import com.ard.tianyu.model.dto.wayline.PointAction;
import com.ard.tianyu.domain.dto.wayline.PointAction;
import lombok.Data;
import java.util.List;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PtzState.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/PtzState.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/state/UavState.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/UavState.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.state;
package com.ard.tianyu.domain.dto.state;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/telemetry/TelemetryData.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/telemetry/TelemetryData.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.telemetry;
package com.ard.tianyu.domain.dto.telemetry;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/HangarPoint.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/HangarPoint.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/NormalModel.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/NormalModel.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import com.ard.tianyu.model.dto.state.PointData;
import com.ard.tianyu.domain.dto.state.PointData;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PlanLineData.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PlanLineData.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import com.ard.tianyu.model.dto.state.PointData;
import com.ard.tianyu.domain.dto.state.PointData;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PointAction.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PointAction.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/SurroundModel.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/SurroundModel.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import com.ard.tianyu.model.dto.state.PointData;
import com.ard.tianyu.domain.dto.state.PointData;
import lombok.Data;
import java.util.List;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineBeginDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineBeginDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineEndDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineEndDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLinePauseDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLinePauseDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineResumeDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineResumeDTO.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import lombok.AllArgsConstructor;
import lombok.Builder;
ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineUploadDTO.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineUploadDTO.java
@@ -1,6 +1,5 @@
package com.ard.tianyu.model.dto.wayline;
package com.ard.tianyu.domain.dto.wayline;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/domain/receiver/AccessTokenReceiver.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/AccessTokenReceiver.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.receiver;
package com.ard.tianyu.domain.receiver;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxHistoryReceiver.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxHistoryReceiver.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.receiver;
package com.ard.tianyu.domain.receiver;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxInfoReceiver.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxInfoReceiver.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.receiver;
package com.ard.tianyu.domain.receiver;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxPhotosReceiver.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxPhotosReceiver.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.receiver;
package com.ard.tianyu.domain.receiver;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxStreamUrlReceiver.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxStreamUrlReceiver.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.receiver;
package com.ard.tianyu.domain.receiver;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
ard-work/src/main/java/com/ard/tianyu/domain/receiver/TyHttpCommonReceiver.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/TyHttpCommonReceiver.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.receiver;
package com.ard.tianyu.domain.receiver;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
ard-work/src/main/java/com/ard/tianyu/forest/TokenInterceptor.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/http/TokenInterceptor.java
@@ -1,7 +1,7 @@
package com.ard.tianyu.http;
package com.ard.tianyu.forest;
import com.ard.tianyu.config.TyConfiguration;
import com.ard.tianyu.model.receiver.AccessTokenReceiver;
import com.ard.tianyu.domain.receiver.AccessTokenReceiver;
import com.dtflys.forest.http.ForestRequest;
import com.dtflys.forest.interceptor.Interceptor;
import lombok.extern.slf4j.Slf4j;
ard-work/src/main/java/com/ard/tianyu/forest/TyClient.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/http/TyClient.java
@@ -1,14 +1,13 @@
package com.ard.tianyu.http;
package com.ard.tianyu.forest;
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.TokenDTO;
import com.ard.tianyu.model.receiver.*;
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.TokenDTO;
import com.ard.tianyu.domain.receiver.*;
import com.dtflys.forest.annotation.*;
import java.util.List;
import java.util.Map;
/**
 * TYClient
ard-work/src/main/java/com/ard/tianyu/forest/TyConst.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/http/TyConst.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.http;
package com.ard.tianyu.forest;
public class TyConst {
    public static final String POST_TOKEN = "/eapi/auth/getToken";
ard-work/src/main/java/com/ard/tianyu/mapper/UavBoxMapper.java
New file
@@ -0,0 +1,62 @@
package com.ard.tianyu.mapper;
import com.ard.tianyu.domain.UavBox;
import java.util.List;
/**
 * 无人机盒子Mapper接口
 *
 * @author ruoyi
 * @date 2025-03-04
 */
public interface UavBoxMapper
{
    /**
     * 查询无人机盒子
     *
     * @param id 无人机盒子主键
     * @return 无人机盒子
     */
    public UavBox selectUavBoxById(Long id);
    /**
     * 查询无人机盒子列表
     *
     * @param uavBox 无人机盒子
     * @return 无人机盒子集合
     */
    public List<UavBox> selectUavBoxList(UavBox uavBox);
    /**
     * 新增无人机盒子
     *
     * @param uavBox 无人机盒子
     * @return 结果
     */
    public int insertUavBox(UavBox uavBox);
    /**
     * 修改无人机盒子
     *
     * @param uavBox 无人机盒子
     * @return 结果
     */
    public int updateUavBox(UavBox uavBox);
    /**
     * 删除无人机盒子
     *
     * @param id 无人机盒子主键
     * @return 结果
     */
    public int deleteUavBoxById(Long id);
    /**
     * 批量删除无人机盒子
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteUavBoxByIds(Long[] ids);
}
ard-work/src/main/java/com/ard/tianyu/netty/TyNettyTcpClient.java
@@ -1,7 +1,7 @@
package com.ard.tianyu.netty;
import com.ard.tianyu.config.TyConfiguration;
import com.ard.tianyu.model.cache.TyTcpServerCache;
import com.ard.tianyu.domain.cache.TyTcpServerCache;
import com.ard.tianyu.netty.handler.ClientHandler;
import com.ard.tianyu.netty.handler.MessageProtocolDecoder;
import com.ard.tianyu.netty.handler.MessageProtocolEncoder;
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.camera;
import com.ard.tianyu.model.dto.camera.CameraModeDTO;
import com.ard.tianyu.domain.dto.camera.CameraModeDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.camera;
import com.ard.tianyu.model.dto.camera.CapturePicDTO;
import com.ard.tianyu.domain.dto.camera.CapturePicDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.camera;
import com.ard.tianyu.model.dto.camera.PhotoReturnToggleDTO;
import com.ard.tianyu.domain.dto.camera.PhotoReturnToggleDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.camera;
import com.ard.tianyu.model.dto.camera.RecordDTO;
import com.ard.tianyu.domain.dto.camera.RecordDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.camera;
import com.ard.tianyu.model.dto.camera.RecordDTO;
import com.ard.tianyu.domain.dto.camera.RecordDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.camera;
import com.ard.tianyu.model.dto.camera.SwitchCameraDTO;
import com.ard.tianyu.domain.dto.camera.SwitchCameraDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.camera;
import com.ard.tianyu.model.dto.camera.SwitchCameraDTO;
import com.ard.tianyu.model.dto.camera.SwitchSourceDTO;
import com.ard.tianyu.domain.dto.camera.SwitchSourceDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.camera;
import com.ard.tianyu.model.dto.camera.ZoomDTO;
import com.ard.tianyu.domain.dto.camera.ZoomDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.camera;
import com.ard.tianyu.model.dto.camera.ZoomToLevelDTO;
import com.ard.tianyu.domain.dto.camera.ZoomToLevelDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.control;
import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.domain.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.control;
import com.ard.tianyu.model.dto.control.AngleControlDTO;
import com.ard.tianyu.domain.dto.control.AngleControlDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.control;
import com.ard.tianyu.model.dto.control.SpeedControlDTO;
import com.ard.tianyu.domain.dto.control.SpeedControlDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.EmeragencyBrakeDTO;
import com.ard.tianyu.domain.dto.manual.EmeragencyBrakeDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeReplyCmd.java
@@ -1,6 +1,5 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.EmeragencyBrakeDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyControlCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.FlyControlDTO;
import com.ard.tianyu.domain.dto.manual.FlyControlDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCancelCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.FlyPointControlCancelDTO;
import com.ard.tianyu.domain.dto.manual.FlyPointControlCancelDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.FlyPointControlDTO;
import com.ard.tianyu.domain.dto.manual.FlyPointControlDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCancelCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.LandCancelDTO;
import com.ard.tianyu.model.dto.manual.LandDTO;
import com.ard.tianyu.domain.dto.manual.LandCancelDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.LandDTO;
import com.ard.tianyu.model.dto.manual.ReturnHomeCancelDTO;
import com.ard.tianyu.domain.dto.manual.LandDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandForcedCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.LandCancelDTO;
import com.ard.tianyu.model.dto.manual.LandForcedDTO;
import com.ard.tianyu.domain.dto.manual.LandForcedDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.ReturnHomeCancelDTO;
import com.ard.tianyu.model.dto.manual.ReturnHomeDTO;
import com.ard.tianyu.domain.dto.manual.ReturnHomeCancelDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java
@@ -1,10 +1,8 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.ReturnHomeDTO;
import com.ard.tianyu.model.dto.manual.TakeOffDTO;
import com.ard.tianyu.domain.dto.manual.ReturnHomeDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
/**
 * 返航指令
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java
@@ -1,6 +1,5 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.ReturnHomeDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.camera.SwitchSourceDTO;
import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
import com.ard.tianyu.domain.dto.manual.SwitchUavControlDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.TakeOffDTO;
import com.ard.tianyu.domain.dto.manual.TakeOffDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java
@@ -1,8 +1,7 @@
package com.ard.tianyu.netty.command.real;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.domain.dto.signal.SignalInfo;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java
@@ -1,8 +1,7 @@
package com.ard.tianyu.netty.command.real;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.domain.dto.state.UavState;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java
@@ -1,8 +1,7 @@
package com.ard.tianyu.netty.command.real;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.domain.dto.telemetry.TelemetryData;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java
@@ -1,9 +1,8 @@
package com.ard.tianyu.netty.command.settings;
import com.ard.tianyu.model.dto.settings.ReturnHeightSettingDTO;
import com.ard.tianyu.domain.dto.settings.ReturnHeightSettingDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
/**
 * 修改返航高度指令
ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.settings;
import com.ard.tianyu.model.dto.settings.ReturnHeightSettingDTO;
import com.ard.tianyu.model.dto.settings.ReturnPointSettingDTO;
import com.ard.tianyu.domain.dto.settings.ReturnPointSettingDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.settings;
import com.ard.tianyu.model.dto.settings.ReturnPointSettingDTO;
import com.ard.tianyu.model.dto.settings.VideoStreamSettingDTO;
import com.ard.tianyu.domain.dto.settings.VideoStreamSettingDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/LoopSettingCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.speaker;
import com.ard.tianyu.model.dto.speaker.LoopSettingDTO;
import com.ard.tianyu.model.dto.speaker.VolumeSettingDTO;
import com.ard.tianyu.domain.dto.speaker.LoopSettingDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RealSpeakCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.speaker;
import com.ard.tianyu.model.dto.speaker.RealSpeakDTO;
import com.ard.tianyu.model.dto.speaker.TextSpeakDTO;
import com.ard.tianyu.domain.dto.speaker.RealSpeakDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RecordSpeakCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.speaker;
import com.ard.tianyu.model.dto.speaker.RealSpeakDTO;
import com.ard.tianyu.model.dto.speaker.RecordSpeakDTO;
import com.ard.tianyu.domain.dto.speaker.RecordSpeakDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/SpeakModeSwitchCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.speaker;
import com.ard.tianyu.model.dto.manual.EmeragencyBrakeDTO;
import com.ard.tianyu.model.dto.speaker.SpeakModeSwitchDTO;
import com.ard.tianyu.domain.dto.speaker.SpeakModeSwitchDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/StopSpeakCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.speaker;
import com.ard.tianyu.model.dto.speaker.RealSpeakDTO;
import com.ard.tianyu.model.dto.speaker.StopSpeakDTO;
import com.ard.tianyu.domain.dto.speaker.StopSpeakDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/TextSpeakCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.speaker;
import com.ard.tianyu.model.dto.speaker.TextSpeakDTO;
import com.ard.tianyu.domain.dto.speaker.TextSpeakDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/VolumeSettingCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.speaker;
import com.ard.tianyu.model.dto.speaker.SpeakModeSwitchDTO;
import com.ard.tianyu.model.dto.speaker.VolumeSettingDTO;
import com.ard.tianyu.domain.dto.speaker.VolumeSettingDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginCmd.java
@@ -1,11 +1,7 @@
package com.ard.tianyu.netty.command.wayline;
import com.ard.tianyu.model.dto.converter.wayline.PlanLineDataConverter;
import com.ard.tianyu.model.dto.wayline.PlanLineData;
import com.ard.tianyu.model.dto.wayline.WayLineBeginDTO;
import com.ard.tianyu.model.dto.wayline.WayLineUploadDTO;
import com.ard.tianyu.domain.dto.wayline.WayLineBeginDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import io.netty.buffer.ByteBuf;
/**
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginReplyCmd.java
@@ -1,6 +1,5 @@
package com.ard.tianyu.netty.command.wayline;
import com.ard.tianyu.model.dto.wayline.WayLineBeginDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineEndCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.wayline;
import com.ard.tianyu.model.dto.wayline.WayLineBeginDTO;
import com.ard.tianyu.model.dto.wayline.WayLineEndDTO;
import com.ard.tianyu.domain.dto.wayline.WayLineEndDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLinePauseCmd.java
@@ -1,7 +1,6 @@
package com.ard.tianyu.netty.command.wayline;
import com.ard.tianyu.model.dto.wayline.WayLineBeginDTO;
import com.ard.tianyu.model.dto.wayline.WayLinePauseDTO;
import com.ard.tianyu.domain.dto.wayline.WayLinePauseDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineResumeCmd.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.command.wayline;
import com.ard.tianyu.model.dto.wayline.WayLineResumeDTO;
import com.ard.tianyu.domain.dto.wayline.WayLineResumeDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadCmd.java
@@ -1,8 +1,8 @@
package com.ard.tianyu.netty.command.wayline;
import com.ard.tianyu.model.dto.converter.wayline.PlanLineDataConverter;
import com.ard.tianyu.model.dto.wayline.PlanLineData;
import com.ard.tianyu.model.dto.wayline.WayLineUploadDTO;
import com.ard.tianyu.domain.dto.converter.wayline.PlanLineDataConverter;
import com.ard.tianyu.domain.dto.wayline.PlanLineData;
import com.ard.tianyu.domain.dto.wayline.WayLineUploadDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import io.netty.buffer.ByteBuf;
ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadReplyCmd.java
@@ -1,10 +1,6 @@
package com.ard.tianyu.netty.command.wayline;
import com.ard.tianyu.model.dto.converter.wayline.PlanLineDataConverter;
import com.ard.tianyu.model.dto.wayline.PlanLineData;
import com.ard.tianyu.model.dto.wayline.WayLineUploadDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import io.netty.buffer.ByteBuf;
import lombok.Data;
ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
@@ -1,6 +1,6 @@
package com.ard.tianyu.netty.handler;
import com.ard.tianyu.model.cache.TyTcpServerCache;
import com.ard.tianyu.domain.cache.TyTcpServerCache;
import com.ard.tianyu.netty.TyNettyTcpClient;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.service.ITyService;
ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
@@ -1,12 +1,12 @@
package com.ard.tianyu.netty.handler;// MessageProtocolDecoder.java
import com.ard.common.utils.ByteUtils;
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.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.domain.dto.converter.realdata.UavSignalInfoConverter;
import com.ard.tianyu.domain.dto.converter.realdata.UavStateConverter;
import com.ard.tianyu.domain.dto.converter.realdata.UavTelemetryDataConverter;
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.BaseCmd;
import com.ard.tianyu.netty.command.camera.CameraModeReplyCmd;
import com.ard.tianyu.netty.command.camera.CapturePicReplyCmd;
@@ -21,13 +21,11 @@
import com.ard.tianyu.netty.command.real.UavTelemetryDataCmd;
import com.ard.tianyu.netty.command.register.HeartbeatReplyCmd;
import com.ard.tianyu.netty.command.register.RegisterReplyCmd;
import com.ard.tianyu.netty.command.register.UavInitReplyCmd;
import com.ard.tianyu.netty.command.settings.ReturnHeightSettingReplyCmd;
import com.ard.tianyu.netty.command.settings.ReturnPointSettingReplyCmd;
import com.ard.tianyu.netty.command.settings.VideoStreamSettingReplyCmd;
import com.ard.tianyu.netty.command.wayline.*;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import com.google.protobuf.InvalidProtocolBufferException;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
@@ -1,24 +1,23 @@
package com.ard.tianyu.service;
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.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.BoxHistoryDTO;
import com.ard.tianyu.domain.dto.BoxPhotosDTO;
import com.ard.tianyu.domain.dto.BoxSettingsDTO;
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.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.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.domain.receiver.*;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.vtdu.domain.ArdVtdu;
import com.dtflys.forest.annotation.Var;
import java.util.List;
@@ -280,10 +279,5 @@
     * 处理回复消息
     */
    void processReplyMessage(String key, BaseCmd tyMessage);
    /**
     * 点播
     */
    ArdVtdu play(String boxSn);
}
ard-work/src/main/java/com/ard/tianyu/service/IUavBoxService.java
New file
@@ -0,0 +1,64 @@
package com.ard.tianyu.service;
import com.ard.tianyu.domain.UavBox;
import java.util.List;
/**
 * 无人机盒子Service接口
 *
 * @author ruoyi
 * @date 2025-03-04
 */
public interface IUavBoxService
{
    /**
     * 查询无人机盒子
     *
     * @param id 无人机盒子主键
     * @return 无人机盒子
     */
    public UavBox selectUavBoxById(Long id);
    /**
     * 查询无人机盒子列表
     *
     * @param uavBox 无人机盒子
     * @return 无人机盒子集合
     */
    public List<UavBox> selectUavBoxList(UavBox uavBox);
    /**
     * 新增无人机盒子
     *
     * @param uavBox 无人机盒子
     * @return 结果
     */
    public int insertUavBox(UavBox uavBox);
    /**
     * 修改无人机盒子
     *
     * @param uavBox 无人机盒子
     * @return 结果
     */
    public int updateUavBox(UavBox uavBox);
    /**
     * 批量删除无人机盒子
     *
     * @param ids 需要删除的无人机盒子主键集合
     * @return 结果
     */
    public int deleteUavBoxByIds(Long[] ids);
    /**
     * 删除无人机盒子信息
     *
     * @param id 无人机盒子主键
     * @return 结果
     */
    public int deleteUavBoxById(Long id);
}
ard-work/src/main/java/com/ard/tianyu/service/control/UavControlService.java
New file
@@ -0,0 +1,188 @@
package com.ard.tianyu.service.control;
import com.ard.common.exception.NoPermissionException;
import com.ard.common.utils.SecurityUtils;
import com.ard.tianyu.websocket.domain.UavControlType;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.ConcurrentHashMap;
/**
 * UAV控制服务类,负责管理对飞行和载荷的控制请求、释放和权限管理。
 */
@Service
public class UavControlService {
    @Resource
    private WebSocketService webSocketService;
    /**
     * 记录当前获得飞行控制权限的用户
     */
    private final ConcurrentHashMap<String, Long> uavFlyControlMap = new ConcurrentHashMap<>();
    /**
     * 记录当前获得载荷控制权限的用户
     */
    private final ConcurrentHashMap<String, Long> uavPayloadControlMap = new ConcurrentHashMap<>();
    /**
     * 记录飞行控制请求
     */
    private final ConcurrentHashMap<String, Long> flyControlRequests = new ConcurrentHashMap<>();
    /**
     * 记录载荷控制请求
     */
    private final ConcurrentHashMap<String, Long> payloadControlRequests = new ConcurrentHashMap<>();
    /**
     * 请求获取 UAV 控制权限
     *
     * @param boxSn 设备序列号
     * @param type  控制类型("fly"、"payload")
     * @return 是否立即获得控制权限
     */
    public boolean requestControl(String boxSn, String type) {
        UavControlType controlType = UavControlType.fromString(type);
        Long requester = SecurityUtils.getUserId();
        return requestSingleControl(boxSn, controlType, requester);
    }
    /**
     * 处理单个控制类型的请求
     */
    private boolean requestSingleControl(String boxSn, UavControlType controlType, Long requester) {
        ConcurrentHashMap<String, Long> controlMap = getControlMap(controlType);
        ConcurrentHashMap<String, Long> requestMap = getRequestMap(controlType);
        Long controller = controlMap.get(boxSn);
        if (controller == null) {
            controlMap.put(boxSn, requester);
            return true;
        }
        if (!controller.equals(requester)) {
            requestMap.put(boxSn, requester);
            webSocketService.sendControlRequest(controller, boxSn, controlType.getType(), requester);
        } else {
            throw new NoPermissionException("当前已拥有控制权");
        }
        return false;
    }
    /**
     * 处理 UAV 控制请求的响应(同意或拒绝)
     *
     * @param boxSn   设备序列号
     * @param approve 是否同意
     * @param type    控制类型
     * @return 是否成功处理
     */
    public boolean handleControlResponse(String boxSn, boolean approve, String type) {
        UavControlType controlType = UavControlType.fromString(type);
        Long controller = SecurityUtils.getUserId();
        return handleSingleControlResponse(boxSn, approve, controlType, controller);
    }
    /**
     * 处理单个控制类型的请求响应
     */
    private boolean handleSingleControlResponse(String boxSn, boolean approve, UavControlType controlType,
                                                Long controller) {
        ConcurrentHashMap<String, Long> requestMap = getRequestMap(controlType);
        Long requester = requestMap.get(boxSn);
        if (requester == null || requester.equals(controller)) {
            throw new NoPermissionException("无控制请求");
        }
        if (approve) {
            getControlMap(controlType).put(boxSn, requester);
            webSocketService.sendControlApproval(requester, boxSn, controlType.getType());
        } else {
            webSocketService.sendControlRejection(requester, boxSn, controlType.getType());
        }
        requestMap.remove(boxSn);
        return true;
    }
    /**
     * 释放 UAV 控制权限
     *
     * @param boxSn 设备序列号
     * @param type  控制类型
     * @return 是否成功释放控制
     */
    public boolean releaseControl(String boxSn, String type) {
        UavControlType controlType = UavControlType.fromString(type);
        Long controller = SecurityUtils.getUserId();
        return releaseSingleControl(boxSn, controlType, controller);
    }
    /**
     * 释放单个控制类型的权限
     */
    private boolean releaseSingleControl(String boxSn, UavControlType controlType, Long controller) {
        ConcurrentHashMap<String, Long> controlMap = getControlMap(controlType);
        if (!controller.equals(controlMap.get(boxSn))) {
            throw new NoPermissionException("没有该设备的" + controlType.getType().toUpperCase() + "控制权");
        }
        controlMap.remove(boxSn);
        webSocketService.sendControlRelease(boxSn, controlType.getType());
        return true;
    }
    /**
     * 释放用户所有 UAV 控制权
     */
    public void releaseAllControls(Long userId) {
        // 释放飞行控制
        uavFlyControlMap.entrySet().removeIf(entry -> entry.getValue().equals(userId));
        // 释放载荷控制
        uavPayloadControlMap.entrySet().removeIf(entry -> entry.getValue().equals(userId));
    }
    /**
     * 获取当前某设备的控制用户
     *
     * @param boxSn 设备序列号
     * @param type  控制类型
     * @return 当前控制该设备的用户 ID
     */
    public Long getCurrentController(String boxSn, String type) {
        UavControlType controlType = UavControlType.fromString(type);
        return getControlMap(controlType).get(boxSn);
    }
    /**
     * 根据控制类型获取对应的控制 Map
     */
    private ConcurrentHashMap<String, Long> getControlMap(UavControlType controlType) {
        switch (controlType) {
            case FLY:
                return uavFlyControlMap;
            case PAYLOAD:
                return uavPayloadControlMap;
            default:
                throw new IllegalArgumentException("不支持的控制类型");
        }
    }
    /**
     * 根据控制类型获取对应的请求 Map
     */
    private ConcurrentHashMap<String, Long> getRequestMap(UavControlType controlType) {
        switch (controlType) {
            case FLY:
                return flyControlRequests;
            case PAYLOAD:
                return payloadControlRequests;
            default:
                throw new IllegalArgumentException("不支持的控制类型");
        }
    }
}
ard-work/src/main/java/com/ard/tianyu/service/control/WebSocketService.java
New file
@@ -0,0 +1,48 @@
package com.ard.tianyu.service.control;
import com.alibaba.fastjson2.JSON;
import com.ard.tianyu.websocket.domain.BaseMessage;
import com.ard.tianyu.websocket.domain.UavControlMessage;
import com.ard.tianyu.websocket.utils.WebSocketUtil;
import org.springframework.stereotype.Service;
@Service
public class WebSocketService {
    /**
     * 发送控制请求
     */
    public void sendControlRequest(Long controllerId, String boxSn, String type, Long requester) {
        UavControlMessage message = new UavControlMessage(boxSn, type, requester,null);
        BaseMessage<UavControlMessage> baseMessage = new BaseMessage<>("control", message);
        WebSocketUtil.sendMessage(controllerId, JSON.toJSONString(baseMessage));
    }
    /**
     * 发送控制同意通知
     */
    public void sendControlApproval(Long requesterId, String boxSn, String type) {
        UavControlMessage message = new UavControlMessage(boxSn, type, null,true);
        BaseMessage<UavControlMessage> baseMessage = new BaseMessage<>("control", message);
        WebSocketUtil.sendMessage(requesterId, JSON.toJSONString(baseMessage));
    }
    /**
     * 发送控制拒绝通知
     */
    public void sendControlRejection(Long requesterId, String boxSn, String type) {
        UavControlMessage message = new UavControlMessage(boxSn, type, null,false);
        BaseMessage<UavControlMessage> baseMessage = new BaseMessage<>("control", message);
        WebSocketUtil.sendMessage(requesterId, JSON.toJSONString(baseMessage));
    }
    /**
     * 发送控制释放通知
     */
    public void sendControlRelease(String boxSn, String type) {
        UavControlMessage message = new UavControlMessage(boxSn, type, null,null);
        BaseMessage<UavControlMessage> baseMessage = new BaseMessage<>("control", message);
        WebSocketUtil.sendMessageAll(JSON.toJSONString(baseMessage));
    }
}
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -1,34 +1,31 @@
package com.ard.tianyu.service.impl;
import com.ard.common.utils.ByteUtils;
import com.ard.tianyu.aspect.annotation.CheckControlAuthority;
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.*;
@@ -49,8 +46,8 @@
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.domain.ArdVtdu;
import com.ard.vtdu.service.IMediaService;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
@@ -200,6 +197,7 @@
    /**
     * 云台控制基于角度
     */
    @RequireUavControl(UavControlType.PAYLOAD)
    @Override
    public Boolean angleControl(AngleControlDTO angleControlDto) {
        AngleControlCmd controlAngleCommand = new AngleControlCmd(angleControlDto);
@@ -210,6 +208,7 @@
    /**
     * 云台绝对值控制(基于角度)
     */
    @RequireUavControl(UavControlType.PAYLOAD)
    @Override
    public Boolean absAngleControl(AbsAngleControlDTO absAngleControlDto) {
        AbsAngleControlCmd absAngleControlCommand = new AbsAngleControlCmd(absAngleControlDto);
@@ -220,6 +219,7 @@
    /**
     * 云台转动(基于速度)
     */
    @RequireUavControl(UavControlType.PAYLOAD)
    @Override
    public Boolean speedControl(SpeedControlDTO speedControlDto) {
        SpeedControlCmd speedControlCommand = new SpeedControlCmd(speedControlDto);
@@ -327,7 +327,7 @@
    /**
     * 起飞
     */
    @CheckControlAuthority
    @RequireUavControl(UavControlType.FLY)
    @Override
    public Boolean takeOff(TakeOffDTO takeOffDTO) {
        TakeOffCmd takeOffCmd = new TakeOffCmd(takeOffDTO);
@@ -590,20 +590,6 @@
    public void wayLineEnd(WayLineEndDTO wayLineEndDTO) {
        WayLineEndCmd wayLineEndCmd = new WayLineEndCmd(wayLineEndDTO);
        this.sendMessage(tyConfiguration.getIpPort(), wayLineEndCmd);
    }
    /**
     * 点播
     */
    @Override
    public ArdVtdu play(String boxSn) {
        BoxStreamUrlReceiver boxLiveUrl = getBoxLiveUrl(boxSn);
        if(boxLiveUrl == null||boxLiveUrl.getRtsp() == null) {
            return null;
        }
        ArdVtdu ardVtdu = ArdVtdu.builder().name(boxSn).rtspSource(boxLiveUrl.getRtsp()).build();
        ardVtdu = mediaService.addPath(ardVtdu);
        return ardVtdu;
    }
    /**
ard-work/src/main/java/com/ard/tianyu/service/impl/UavBoxServiceImpl.java
New file
@@ -0,0 +1,140 @@
package com.ard.tianyu.service.impl;
import com.ard.common.utils.DateUtils;
import com.ard.tianyu.domain.UavBox;
import com.ard.tianyu.domain.receiver.BoxInfoReceiver;
import com.ard.tianyu.mapper.UavBoxMapper;
import com.ard.tianyu.service.ITyService;
import com.ard.tianyu.service.IUavBoxService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * 无人机盒子Service业务层处理
 *
 * @author ruoyi
 * @date 2025-03-04
 */
@Service
public class UavBoxServiceImpl implements IUavBoxService {
    @Resource
    private UavBoxMapper uavBoxMapper;
    @Resource
    private ITyService tyService;
    /**
     * 查询无人机盒子
     *
     * @param id 无人机盒子主键
     * @return 无人机盒子
     */
    @Override
    public UavBox selectUavBoxById(Long id) {
        return uavBoxMapper.selectUavBoxById(id);
    }
    /**
     * 查询无人机盒子列表
     *
     * @param uavBox 无人机盒子
     * @return 无人机盒子
     */
    @Override
    public List<UavBox> selectUavBoxList(UavBox uavBox) {
        return uavBoxMapper.selectUavBoxList(uavBox);
    }
    /**
     * 新增无人机盒子
     *
     * @param uavBox 无人机盒子
     * @return 结果
     */
    @Override
    public int insertUavBox(UavBox uavBox) {
        uavBox.setCreateTime(DateUtils.getNowDate());
        return uavBoxMapper.insertUavBox(uavBox);
    }
    /**
     * 修改无人机盒子
     *
     * @param uavBox 无人机盒子
     * @return 结果
     */
    @Override
    public int updateUavBox(UavBox uavBox) {
        uavBox.setUpdateTime(DateUtils.getNowDate());
        return uavBoxMapper.updateUavBox(uavBox);
    }
    /**
     * 批量删除无人机盒子
     *
     * @param ids 需要删除的无人机盒子主键
     * @return 结果
     */
    @Override
    public int deleteUavBoxByIds(Long[] ids) {
        return uavBoxMapper.deleteUavBoxByIds(ids);
    }
    /**
     * 删除无人机盒子信息
     *
     * @param id 无人机盒子主键
     * @return 结果
     */
    @Override
    public int deleteUavBoxById(Long id) {
        return uavBoxMapper.deleteUavBoxById(id);
    }
    /**
     * 同步盒子属性
     *
     * @return 结果
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void syncBoxInfo() {
        List<UavBox> uavBoxeList = selectUavBoxList(new UavBox());
        // 将本地列表转换为Map,方便快速查找
        Map<String, UavBox> localUavBoxMap = uavBoxeList.stream()
                .collect(Collectors.toMap(UavBox::getBoxSn, drone -> drone));
        //遍历接口最新获取的无人机盒子信息
        tyService.getBoxList().forEach(remoteUavBox -> {
            UavBox localUavBox = localUavBoxMap.get(remoteUavBox.getBoxSn());
            if (localUavBox != null) {
                if (!localUavBox.isSameAs(remoteUavBox)) {
                    // 修改无人机(只更新变化的属性)
                    updateChangedAttributes(localUavBox, remoteUavBox);
                    updateUavBox(localUavBox);
                }
            }
        });
    }
    // 更新变化的属性
    private void updateChangedAttributes(UavBox localBoxInfo, BoxInfoReceiver remoteUavBox) {
        if (!Objects.equals(localBoxInfo.getBoxName(), remoteUavBox.getBoxName())) {
            localBoxInfo.setBoxName(remoteUavBox.getBoxName());
        }
        if (!Objects.equals(localBoxInfo.getBoxVersion(), remoteUavBox.getBoxVersion())) {
            localBoxInfo.setBoxVersion(remoteUavBox.getBoxVersion());
        }
        if (!Objects.equals(localBoxInfo.getLastTaskId(), remoteUavBox.getLastTaskId())) {
            localBoxInfo.setLastTaskId(remoteUavBox.getLastTaskId());
        }
        if (!Objects.equals(localBoxInfo.getOnLine(), remoteUavBox.getOnLine())) {
            localBoxInfo.setOnLine(remoteUavBox.getOnLine());
        }
        // 更新其他属性
    }
}
ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java
File was deleted
ard-work/src/main/java/com/ard/tianyu/service/stream/UavStreamManager.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java
@@ -1,12 +1,10 @@
package com.ard.tianyu.service.impl;
package com.ard.tianyu.service.stream;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.domain.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.service.ITyService;
import com.ard.tianyu.websocket.utils.WebSocketUtil;
import com.ard.vtdu.domain.ArdVtdu;
import com.ard.vtdu.domain.Conf;
import com.ard.vtdu.service.IMediaService;
import com.dtflys.forest.exceptions.ForestNetworkException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -33,7 +31,7 @@
    // 盒子拉流地址缓存 key:boxSn value: webrtcUrl
    public static final ConcurrentMap<String, String> BOX_STREAM_PULL_MAP = new ConcurrentHashMap<>();
    // 盒子拉流用户集合缓存 key:boxSn value:Set<UserId>
    public static final ConcurrentMap<String, Set<String>> STREAM_USER_MAP = new ConcurrentHashMap<>();
    public static final ConcurrentMap<String, Set<Long>> STREAM_USER_MAP = new ConcurrentHashMap<>();
    /**
     * 开始拉流
@@ -41,7 +39,7 @@
     * @param boxSn  盒子序列号
     * @param userId 用户ID
     */
    public void startPullStream(String boxSn, String userId) {
    public void startPullStream(String boxSn, Long userId) {
        String webrtcUrl = "";
        STREAM_USER_MAP.computeIfAbsent(boxSn, k -> ConcurrentHashMap.newKeySet()).add(userId);
        //不管谁拉流都判断流媒体中是否存在
@@ -65,9 +63,9 @@
     * @param boxSn  盒子序列号
     * @param userId 用户ID
     */
    public void stopPullStream(String boxSn, String userId) {
    public void stopPullStream(String boxSn, Long userId) {
        synchronized (this) {
            Set<String> users = STREAM_USER_MAP.get(boxSn);
            Set<Long> users = STREAM_USER_MAP.get(boxSn);
            if (users == null) {
                log.warn("{}No active users for box: {}", STREAM_LOG_PREFIX, boxSn);
                sendMessageToUser(userId, "No active users for box: " + boxSn);
@@ -93,7 +91,7 @@
     *
     * @param userId 用户ID
     */
    public void stopAllPullStreamByUser(String userId) {
    public void stopAllPullStreamByUser(Long userId) {
        synchronized (this) {
            STREAM_USER_MAP.forEach((boxSn, users) -> stopPullStream(boxSn, userId));
        }
@@ -105,7 +103,7 @@
     * @param userId  用户ID
     * @param message 消息内容
     */
    private void sendMessageToUser(String userId, String message) {
    private void sendMessageToUser(Long userId, String message) {
        try {
            WebSocketUtil.sendMessage(userId, message);
        } catch (Exception e) {
ard-work/src/main/java/com/ard/tianyu/websocket/domain/BaseMessage.java
@@ -4,6 +4,13 @@
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * websocket基础消息
 *
 * @author liusuyi
 * @date 2024年11月04日14:40
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
ard-work/src/main/java/com/ard/tianyu/websocket/domain/ControlAuthorityDTO.java
File was deleted
ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlMessage.java
New file
@@ -0,0 +1,15 @@
package com.ard.tianyu.websocket.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UavControlMessage {
    private String boxSn;       // 无人机编号
    private String type;        // 控制类型(fly 或 payload)
    private Long requester;     // 申请者ID(仅在请求控制时使用)
    private Boolean approved;   // 控制是否被批准(仅在处理请求控制时使用)
}
ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlType.java
New file
@@ -0,0 +1,29 @@
package com.ard.tianyu.websocket.domain;
import lombok.Getter;
/**
 * 控制权类型枚举
 *
 * @author liusuyi
 * @date 2024年11月04日14:40
 **/
@Getter
public enum UavControlType {
    FLY("fly"), PAYLOAD("payload");
    private final String type;
    UavControlType(String type) {
        this.type = type;
    }
    public static UavControlType fromString(String type) {
        for (UavControlType value : UavControlType.values()) {
            if (value.getType().equalsIgnoreCase(type)) {
                return value;
            }
        }
        throw new IllegalArgumentException("未知的控制类型: " + type);
    }
}
ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavStreamMessage.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/websocket/domain/PullStreamDTO.java
@@ -6,7 +6,7 @@
import lombok.NoArgsConstructor;
/**
 * PullStreamDTO
 * 流消息
 *
 * @author liusuyi
 * @date 2024年11月04日14:40
@@ -15,7 +15,7 @@
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PullStreamDTO {
public class UavStreamMessage {
    /**
     * 盒子编号
     */
ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java
@@ -2,10 +2,10 @@
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import com.ard.tianyu.service.impl.UavControlManager;
import com.ard.tianyu.service.impl.UavStreamManager;
import com.ard.tianyu.service.control.UavControlService;
import com.ard.tianyu.service.stream.UavStreamManager;
import com.ard.tianyu.websocket.domain.BaseMessage;
import com.ard.tianyu.websocket.domain.PullStreamDTO;
import com.ard.tianyu.websocket.domain.UavStreamMessage;
import com.ard.tianyu.websocket.utils.WebSocketUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -13,6 +13,7 @@
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import javax.annotation.Resource;
@@ -21,26 +22,28 @@
public class TyMessageHandler extends TextWebSocketHandler {
    @Resource
    private UavControlManager uavControlManager;
    @Resource
    private UavStreamManager uavStreamManager;
    @Resource
    private UavControlService uavControlService;
    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        // 处理接收到的消息
        String userId = (String) session.getAttributes().get("userId");
        String userIdStr  = (String) session.getAttributes().get("userId");
        Long userId = Long.parseLong(userIdStr);
        String payload = message.getPayload();
        log.info("【cmd】Received message: {}", payload);
        log.info("【cmd】size: {}", WebSocketUtil.ONLINE_USER_SESSIONS.size());
        BaseMessage<?> baseMessage = JSON.parseObject(payload, BaseMessage.class);
        switch (baseMessage.getType()) {
            case "stream":
                BaseMessage<PullStreamDTO> streamMessage = JSON.parseObject(payload,
                        new TypeReference<BaseMessage<PullStreamDTO>>() {
                BaseMessage<UavStreamMessage> streamMessage = JSON.parseObject(payload,
                        new TypeReference<BaseMessage<UavStreamMessage>>() {
                        });
                PullStreamDTO pullStreamDTO = streamMessage.getPayload();
                if (pullStreamDTO != null) {
                    String boxSn = pullStreamDTO.getBoxSn();
                    if (pullStreamDTO.getPullType().equals(1)) {
                UavStreamMessage uavStreamMessage = streamMessage.getPayload();
                if (uavStreamMessage != null) {
                    String boxSn = uavStreamMessage.getBoxSn();
                    if (uavStreamMessage.getPullType().equals(1)) {
                        uavStreamManager.startPullStream(boxSn, userId);
                    } else {
                        uavStreamManager.stopPullStream(boxSn, userId);
@@ -54,7 +57,8 @@
    @Override
    public void afterConnectionEstablished(WebSocketSession session) {
        log.info("【cmd】Connected: {}", session.getId());
        String userId = (String) session.getAttributes().get("userId");
        String userIdStr  = (String) session.getAttributes().get("userId");
        Long userId = Long.parseLong(userIdStr);
        WebSocketUtil.ONLINE_USER_SESSIONS.put(userId, session);
        log.info("【cmd】size: {}", WebSocketUtil.ONLINE_USER_SESSIONS.size());
@@ -63,12 +67,15 @@
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
        log.info("【cmd】Disconnected: {}", session.getId());
        String userId = (String) session.getAttributes().get("userId");
        String userIdStr  = (String) session.getAttributes().get("userId");
        Long userId = Long.parseLong(userIdStr);
        WebSocketUtil.ONLINE_USER_SESSIONS.remove(userId);
        log.info("【cmd】size: {}", WebSocketUtil.ONLINE_USER_SESSIONS.size());
        //停止用户的所有流
        uavStreamManager.stopAllPullStreamByUser(userId);
        //移除控制的无人机
        uavControlManager.releaseAllControlByUser(userId);
        if (userId != null) {
            // 释放该用户所有 UAV 控制权
            uavControlService.releaseAllControls(userId);
        }
    }
}
ard-work/src/main/java/com/ard/tianyu/websocket/utils/WebSocketUtil.java
@@ -26,7 +26,7 @@
public final class WebSocketUtil {
    // 存储 websocket session
    public static final ConcurrentMap<String, WebSocketSession> ONLINE_USER_SESSIONS = new ConcurrentHashMap<>();
    public static final ConcurrentMap<Long, WebSocketSession> ONLINE_USER_SESSIONS = new ConcurrentHashMap<>();
    /**
     * @param session 用户 session
     * @param message 发送内容
@@ -49,7 +49,7 @@
        }
    }
    public static void sendMessage(String userId, String message) {
    public static void sendMessage(Long userId, String message) {
        WebSocketSession session = ONLINE_USER_SESSIONS.get(userId);
        sendMessage(session, message);
    }
@@ -130,15 +130,4 @@
        ONLINE_USER_SESSIONS.forEach((sessionId, session) -> sendMessage(session, JSON.toJSONString(message)));
    }
    /**
     * 发送消息给userId_前缀的人
     */
    public static void sendMessagePrefix(String targetId, String message) {
        String regex = "^" + Pattern.quote(targetId) + "_\\d+$";
        Pattern pattern = Pattern.compile(regex);
        ONLINE_USER_SESSIONS.entrySet().stream().filter(entry -> {
            Matcher matcher = pattern.matcher(entry.getKey());
            return matcher.matches();
        }).map(Map.Entry::getValue).forEach(session -> WebSocketUtil.sendMessage(session, message));
    }
}
ard-work/src/main/java/com/ard/vtdu/service/impl/MediaServiceImpl.java
@@ -3,9 +3,9 @@
import com.ard.common.constant.HttpStatus;
import com.ard.common.core.page.TableDataInfo;
import com.ard.tianyu.config.TyConfiguration;
import com.ard.tianyu.model.cache.TyTcpServerCache;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.domain.cache.TyTcpServerCache;
import com.ard.tianyu.domain.receiver.BoxInfoReceiver;
import com.ard.tianyu.domain.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.service.ITyService;
import com.ard.vtdu.client.MediaClient;
import com.ard.vtdu.domain.*;
@@ -15,7 +15,6 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
ard-work/src/main/resources/mapper/UavBoxMapper.xml
New file
@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ard.tianyu.mapper.UavBoxMapper">
    <resultMap type="UavBox" id="UavBoxResult">
        <result property="id"    column="id"    />
        <result property="boxSn"    column="box_sn"    />
        <result property="boxName"    column="box_name"    />
        <result property="boxVersion"    column="box_version"    />
        <result property="onLine"    column="onLine"    />
        <result property="lastTaskId"    column="last_task_id"    />
        <result property="userId"    column="user_id"    />
        <result property="deptId"    column="dept_id"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="remark"    column="remark"    />
    </resultMap>
    <sql id="selectUavBoxVo">
        select id, box_sn, box_name, box_version, onLine, last_task_id, user_id, dept_id, create_by, create_time, update_by, update_time, remark from uav_box
    </sql>
    <select id="selectUavBoxList" parameterType="UavBox" resultMap="UavBoxResult">
        <include refid="selectUavBoxVo"/>
        <where>
            <if test="boxSn != null  and boxSn != ''"> and box_sn = #{boxSn}</if>
            <if test="boxName != null  and boxName != ''"> and box_name like concat('%', #{boxName}, '%')</if>
            <if test="boxVersion != null  and boxVersion != ''"> and box_version = #{boxVersion}</if>
            <if test="onLine != null "> and onLine = #{onLine}</if>
            <if test="lastTaskId != null "> and last_task_id = #{lastTaskId}</if>
            <if test="userId != null "> and user_id = #{userId}</if>
            <if test="deptId != null "> and dept_id = #{deptId}</if>
        </where>
    </select>
    <select id="selectUavBoxById" parameterType="Long" resultMap="UavBoxResult">
        <include refid="selectUavBoxVo"/>
        where id = #{id}
    </select>
    <insert id="insertUavBox" parameterType="UavBox">
        insert into uav_box
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="boxSn != null">box_sn,</if>
            <if test="boxName != null">box_name,</if>
            <if test="boxVersion != null">box_version,</if>
            <if test="onLine != null">onLine,</if>
            <if test="lastTaskId != null">last_task_id,</if>
            <if test="userId != null">user_id,</if>
            <if test="deptId != null">dept_id,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="remark != null">remark,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="boxSn != null">#{boxSn},</if>
            <if test="boxName != null">#{boxName},</if>
            <if test="boxVersion != null">#{boxVersion},</if>
            <if test="onLine != null">#{onLine},</if>
            <if test="lastTaskId != null">#{lastTaskId},</if>
            <if test="userId != null">#{userId},</if>
            <if test="deptId != null">#{deptId},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="remark != null">#{remark},</if>
         </trim>
    </insert>
    <update id="updateUavBox" parameterType="UavBox">
        update uav_box
        <trim prefix="SET" suffixOverrides=",">
            <if test="boxSn != null">box_sn = #{boxSn},</if>
            <if test="boxName != null">box_name = #{boxName},</if>
            <if test="boxVersion != null">box_version = #{boxVersion},</if>
            <if test="onLine != null">onLine = #{onLine},</if>
            <if test="lastTaskId != null">last_task_id = #{lastTaskId},</if>
            <if test="userId != null">user_id = #{userId},</if>
            <if test="deptId != null">dept_id = #{deptId},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="remark != null">remark = #{remark},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteUavBoxById" parameterType="Long">
        delete from uav_box where id = #{id}
    </delete>
    <delete id="deleteUavBoxByIds" parameterType="String">
        delete from uav_box where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>