From 16fd4235f692777cfd9cceff5090e5450e2173b3 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Tue, 04 Mar 2025 13:59:05 +0800
Subject: [PATCH] 优化包结构、增加载荷飞控权限

---
 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java                    |   14 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandDTO.java                               |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/SpeakModeSwitchDTO.java                   |    2 
 ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java                              |   72 +-
 ard-work/src/main/java/com/ard/tianyu/aspect/UavControlAspect.java                                 |   93 +++
 ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/VolumeSettingDTO.java                     |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/HangarPoint.java                          |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/receiver/TyHttpCommonReceiver.java                    |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/signal/SignalInfo.java                            |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchCameraDTO.java                       |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/init/UavInitInfo.java                             |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/cache/UavTelemetryDataCache.java                      |    5 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/TokenDTO.java                                     |    2 
 ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlMessage.java                      |   15 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CapturePicDTO.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchSourceDTO.java                       |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadReplyCmd.java             |    4 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavSignalInfoConverter.java    |    4 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeCancelDTO.java                   |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/VolumeSettingCmd.java                  |    3 
 ard-work/src/main/java/com/ard/tianyu/config/WebSocketConfig.java                                  |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomCmd.java                            |    2 
 ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java                        |   14 
 ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCmd.java                |    2 
 ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlType.java                         |   29 +
 ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java                             |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/FlightControllerState.java                  |    2 
 ard-work/src/main/java/com/ard/tianyu/service/stream/UavStreamManager.java                         |   18 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java                      |    4 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomToLevelDTO.java                        |    2 
 ard-work/src/main/java/com/ard/tianyu/controller/uav/UavBoxController.java                         |  113 +++
 ard-work/src/main/java/com/ard/tianyu/service/impl/UavBoxServiceImpl.java                          |  140 ++++
 ard-work/src/main/java/com/ard/tianyu/domain/cache/UavSignalInfoCache.java                         |    4 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/MissionState.java                           |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/NormalModel.java                          |    4 
 ard-work/src/main/java/com/ard/tianyu/forest/TyClient.java                                         |   13 
 ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java                        |    3 
 ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java                            |   14 
 ard-work/src/main/java/com/ard/tianyu/domain/UavBox.java                                           |   68 ++
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java                     |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/PhotoReturnToggleDTO.java                  |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PlanLineData.java                         |    4 
 ard-work/src/main/java/com/ard/tianyu/netty/TyNettyTcpClient.java                                  |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PointAction.java                          |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineEndCmd.java                     |    3 
 ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java                                  |    8 
 ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxInfoReceiver.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineResumeCmd.java                  |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadCmd.java                  |    6 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlCancelDTO.java              |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavStateConverter.java         |    5 
 ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavStreamMessage.java                       |    4 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CameraModeDTO.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java               |    2 
 ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java                          |   19 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxSettingsDTO.java                               |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCmd.java                   |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RealSpeakCmd.java                      |    3 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCmd.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/forest/TokenInterceptor.java                                 |    4 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java                |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryStateInfo.java                       |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeReplyCmd.java             |    1 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PlanLineDataConverter.java      |   12 
 ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java                          |   18 
 ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/StopSpeakCmd.java                      |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/SurroundModel.java                        |    4 
 ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RecordSpeakCmd.java                    |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointActionConverter.java       |    4 
 ard-work/src/main/java/com/ard/vtdu/service/impl/MediaServiceImpl.java                             |    7 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandForcedDTO.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeCmd.java                  |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PointData.java                              |    4 
 ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java                          |    3 
 ard-work/src/main/java/com/ard/tianyu/websocket/utils/WebSocketUtil.java                           |   15 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RecordSpeakDTO.java                       |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/SpeakModeSwitchCmd.java                |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomDTO.java                               |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/NormalModelConverter.java       |    4 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavTelemetryDataConverter.java |    4 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/control/SpeedControlDTO.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCmd.java                            |    3 
 ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/TextSpeakCmd.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxStreamUrlReceiver.java                    |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyControlCmd.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCmd.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/cache/UavStateCache.java                              |    4 
 ard-work/src/main/java/com/ard/tianyu/aspect/annotation/RequireUavControl.java                     |   17 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryState.java                           |    2 
 ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java                        |   21 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnHeightSettingDTO.java              |    2 
 ard-work/src/main/java/com/ard/tianyu/mapper/UavBoxMapper.java                                     |   62 ++
 ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLinePauseCmd.java                   |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/HangarPointConverter.java       |    4 
 ard-generator/src/main/resources/vm/java/serviceImpl.java.vm                                       |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginCmd.java                   |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java                 |    1 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineEndDTO.java                        |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/CameraState.java                            |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCmd.java                 |    2 
 ard-work/src/main/java/com/ard/tianyu/forest/TyConst.java                                          |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/SwitchUavControlDTO.java                   |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PtzState.java                               |    2 
 ard-work/src/main/java/com/ard/tianyu/controller/UavControlController.java                         |   57 +
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandCancelDTO.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointDataConverter.java         |    6 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/HmsAlarmData.java                           |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCancelCmd.java                      |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxPhotosDTO.java                                 |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java                    |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AbsAngleControlDTO.java                   |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCmd.java                     |    2 
 ard-work/src/main/resources/mapper/UavBoxMapper.xml                                                |  108 +++
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelCmd.java                |    3 
 ard-work/src/main/java/com/ard/tianyu/controller/UavSpeakerController.java                         |    9 
 ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java            |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/StopSpeakDTO.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/service/IUavBoxService.java                                  |   64 ++
 ard-work/src/main/java/com/ard/tianyu/domain/dto/telemetry/TelemetryData.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineBeginDTO.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCmd.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/VideoStreamSettingDTO.java               |    2 
 ard-work/src/main/java/com/ard/tianyu/service/control/WebSocketService.java                        |   48 +
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeDTO.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java                       |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/TakeOffDTO.java                            |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/LoopSettingCmd.java                    |    3 
 ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java                      |   39 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnPointSettingDTO.java               |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RealSpeakDTO.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/UavState.java                               |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxPhotosReceiver.java                       |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java                  |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineResumeDTO.java                     |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java                    |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/SurroundModelConverter.java     |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginReplyCmd.java              |    1 
 ard-work/src/main/java/com/ard/tianyu/domain/receiver/AccessTokenReceiver.java                     |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/state/AvoidanceData.java                          |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/EmeragencyBrakeDTO.java                    |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLinePauseDTO.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java            |    3 
 ard-work/src/main/java/com/ard/tianyu/controller/UavWayLineController.java                         |    5 
 ard-work/src/main/java/com/ard/tianyu/service/ITyService.java                                      |   40 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyControlDTO.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxHistoryDTO.java                                |    2 
 ard-generator/src/main/resources/vm/java/controller.java.vm                                        |   11 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlDTO.java                    |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/TextSpeakDTO.java                         |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCmd.java                   |    2 
 ard-work/src/main/java/com/ard/tianyu/websocket/domain/BaseMessage.java                            |    7 
 /dev/null                                                                                          |   18 
 ard-work/src/main/java/com/ard/tianyu/domain/cache/TyTcpServerCache.java                           |    4 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineUploadDTO.java                     |    3 
 ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxHistoryReceiver.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCancelCmd.java           |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/RecordDTO.java                             |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandForcedCmd.java                      |    3 
 ard-work/src/main/java/com/ard/tianyu/service/control/UavControlService.java                       |  188 ++++++
 ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/LoopSettingDTO.java                       |    2 
 ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AngleControlDTO.java                      |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java           |    3 
 163 files changed, 1,295 insertions(+), 417 deletions(-)

diff --git a/ard-generator/src/main/resources/vm/java/controller.java.vm b/ard-generator/src/main/resources/vm/java/controller.java.vm
index dbf31ba..d92bc98 100644
--- a/ard-generator/src/main/resources/vm/java/controller.java.vm
+++ b/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}")
diff --git a/ard-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ard-generator/src/main/resources/vm/java/serviceImpl.java.vm
index 0caf816..411ad42 100644
--- a/ard-generator/src/main/resources/vm/java/serviceImpl.java.vm
+++ b/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;
 
     /**
diff --git a/ard-work/src/main/java/com/ard/tianyu/aspect/ControlAuthorityAspect.java b/ard-work/src/main/java/com/ard/tianyu/aspect/ControlAuthorityAspect.java
deleted file mode 100644
index 22cd4cd..0000000
--- a/ard-work/src/main/java/com/ard/tianyu/aspect/ControlAuthorityAspect.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.ard.tianyu.aspect;
-
-import com.ard.common.exception.NoPermissionException;
-import com.ard.common.utils.SecurityUtils;
-import com.ard.tianyu.service.impl.UavControlManager;
-import lombok.extern.slf4j.Slf4j;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.springframework.stereotype.Component;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-
-/**
- * 控制权限切面
- *
- * @author liusuyi
- */
-@Aspect
-@Component
-@Slf4j
-public class ControlAuthorityAspect {
-
-    @Pointcut("@annotation(com.ard.tianyu.aspect.annotation.CheckControlAuthority)")
-    public void dsPointCut() {
-
-    }
-
-    @Around("dsPointCut()")
-    public Object around(ProceedingJoinPoint point) throws Throwable {
-        MethodSignature signature = (MethodSignature) point.getSignature();
-        Method method = signature.getMethod();
-        Boolean result = controlScopeFilter(point);
-        if (result) {
-            log.debug("已获取无人机控制权--{}", method.getName());
-            // 执行目标方法
-            return point.proceed();
-        }
-        log.debug("未获取无人机控制权--{}", method.getName());
-        throw new NoPermissionException("未获取无人机控制权");
-    }
-
-    /**
-     * 操控判断逻辑
-     *
-     * @param joinPoint 切点
-     */
-    public Boolean controlScopeFilter(ProceedingJoinPoint joinPoint) {
-        // 获取方法参数
-        Object[] args = joinPoint.getArgs();
-        // 使用反射获取参数中的 boxSn
-        for (Object arg : args) {
-            String boxSn = getBoxSn(arg);
-            if (boxSn != null) {
-                //判断无人机控制者是否为当前登录用户
-                Long controller = UavControlManager.uavControlMap.get(boxSn);
-                if (controller != null && controller.equals(SecurityUtils.getUserId())) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    // 通过反射获取对象中的无人机boxSn字段
-    public static String getBoxSn(Object dto) {
-        try {
-            // 获取类的所有字段
-            Field[] fields = dto.getClass().getDeclaredFields();
-            for (Field field : fields) {
-                // 设置字段可访问
-                field.setAccessible(true);
-
-                // 判断是否是 boxSn 字段
-                if ("boxSn".equals(field.getName())) {
-                    // 获取并返回 droneId 的值
-                    return (String) field.get(dto);
-                }
-            }
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        }
-        return null; // 如果没有找到 droneId 字段,返回 null
-    }
-}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/aspect/UavControlAspect.java b/ard-work/src/main/java/com/ard/tianyu/aspect/UavControlAspect.java
new file mode 100644
index 0000000..ed9eae0
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/aspect/UavControlAspect.java
@@ -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
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/aspect/annotation/CheckControlAuthority.java b/ard-work/src/main/java/com/ard/tianyu/aspect/annotation/CheckControlAuthority.java
deleted file mode 100644
index 391dcdd..0000000
--- a/ard-work/src/main/java/com/ard/tianyu/aspect/annotation/CheckControlAuthority.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.ard.tianyu.aspect.annotation;
-
-import java.lang.annotation.*;
-
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface CheckControlAuthority {
-}
diff --git a/ard-work/src/main/java/com/ard/tianyu/aspect/annotation/RequireUavControl.java b/ard-work/src/main/java/com/ard/tianyu/aspect/annotation/RequireUavControl.java
new file mode 100644
index 0000000..7fb5b22
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/aspect/annotation/RequireUavControl.java
@@ -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"
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java b/ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java
index 5d97f9c..a37e16b 100644
--- a/ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/websocket/config/WebSocketConfig.java b/ard-work/src/main/java/com/ard/tianyu/config/WebSocketConfig.java
similarity index 96%
rename from ard-work/src/main/java/com/ard/tianyu/websocket/config/WebSocketConfig.java
rename to ard-work/src/main/java/com/ard/tianyu/config/WebSocketConfig.java
index bd751f0..bc72940 100644
--- a/ard-work/src/main/java/com/ard/tianyu/websocket/config/WebSocketConfig.java
+++ b/ard-work/src/main/java/com/ard/tianyu/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java
index 9a5f5a1..b2e4451 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java
index a911e4b..46533da 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java
+++ b/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
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavControlController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavControlController.java
new file mode 100644
index 0000000..bb3cec6
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/controller/UavControlController.java
@@ -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));
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java
index 93fc471..a8d0ee4 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java
+++ b/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
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java
index dabac76..5ece6c9 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavPermissionsController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavPermissionsController.java
deleted file mode 100644
index b258a3c..0000000
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavPermissionsController.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.ard.tianyu.controller;
-
-import com.ard.common.core.domain.AjaxResult;
-import com.ard.common.utils.SecurityUtils;
-import com.ard.tianyu.service.impl.UavControlManager;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-/**
- * @ClassName: UavPermissionsController
- * @Description: 无人机权限控制器
- * @Author: liusuyi
- * @Date: 2025年02月20日9:38
- **/
-@Api(tags = "无人机权限控制接口")
-@RequestMapping("/uav/permissions")
-@RestController
-public class UavPermissionsController {
-
-    @Resource
-    private UavControlManager uavControlManager;
-
-
-    @ApiOperation("申请控制")
-    @ApiOperationSupport(order = 1)
-    @GetMapping("/requestControl")
-    public AjaxResult requestControl(String boxSn) {
-        return AjaxResult.success(uavControlManager.requestControl(boxSn));
-    }
-
-    @ApiOperation("处理申请")
-    @ApiOperationSupport(order = 2)
-    @GetMapping("/handleControlResponse")
-    public AjaxResult handleControlResponse(String boxSn, Boolean approve) {
-        return AjaxResult.success(uavControlManager.handleControlResponse(boxSn, approve));
-    }
-
-    @ApiOperation("释放控制")
-    @ApiOperationSupport(order = 3)
-    @GetMapping("/releaseControl")
-    public AjaxResult releaseControl(String boxSn) {
-        return AjaxResult.success(uavControlManager.releaseControl(boxSn));
-    }
-
-    @ApiOperation("获取无人机控制者")
-    @ApiOperationSupport(order = 4)
-    @GetMapping("/controlRequestMap")
-    public AjaxResult controlRequestMap(String boxSn) {
-        return AjaxResult.success(UavControlManager.uavControlMap.get(boxSn));
-    }
-}
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java
index 4caafd6..22d59b9 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java
+++ b/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
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java
index 3755297..6fcc401 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java
+++ b/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
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavSpeakerController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavSpeakerController.java
index b8960ea..40aeb1c 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavSpeakerController.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavVideoController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavVideoController.java
deleted file mode 100644
index b67e762..0000000
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavVideoController.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.ard.tianyu.controller;
-
-import com.ard.common.core.domain.AjaxResult;
-import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
-import com.ard.tianyu.service.ITyService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-/**
- * @ClassName: UavVideoController
- * @Description: 无人机视频控制器
- * @Author: liusuyi
- * @Date: 2025年02月18日9:16
- **/
-@Api(tags = "无人机视频控制器接口")
-@RequestMapping("/uav/video")
-@RestController
-public class UavVideoController {
-
-    @Resource
-    private ITyService tyService;
-
-    @ApiOperation("点播")
-    @PostMapping("/play/{boxSn}")
-    public AjaxResult play(@PathVariable("boxSn") String boxSn) {
-        return AjaxResult.success(tyService.play(boxSn));
-    }
-}
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavWayLineController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavWayLineController.java
index 52b3dfa..e4200d9 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavWayLineController.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/uav/UavBoxController.java b/ard-work/src/main/java/com/ard/tianyu/controller/uav/UavBoxController.java
new file mode 100644
index 0000000..821deab
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/controller/uav/UavBoxController.java
@@ -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));
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/domain/UavBox.java b/ard-work/src/main/java/com/ard/tianyu/domain/UavBox.java
new file mode 100644
index 0000000..4e24c2e
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/UavBox.java
@@ -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());
+        // 对比其他属性
+    }
+
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/cache/TyTcpServerCache.java b/ard-work/src/main/java/com/ard/tianyu/domain/cache/TyTcpServerCache.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/model/cache/TyTcpServerCache.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/cache/TyTcpServerCache.java
index 26989c9..19625b3 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/cache/TyTcpServerCache.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/cache/UavSignalInfoCache.java b/ard-work/src/main/java/com/ard/tianyu/domain/cache/UavSignalInfoCache.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/model/cache/UavSignalInfoCache.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/cache/UavSignalInfoCache.java
index eb2d0da..f62b4cb 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/cache/UavSignalInfoCache.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/cache/UavStateCache.java b/ard-work/src/main/java/com/ard/tianyu/domain/cache/UavStateCache.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/model/cache/UavStateCache.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/cache/UavStateCache.java
index 876f7fd..c679ad9 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/cache/UavStateCache.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
 /**
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/cache/UavTelemetryDataCache.java b/ard-work/src/main/java/com/ard/tianyu/domain/cache/UavTelemetryDataCache.java
similarity index 86%
rename from ard-work/src/main/java/com/ard/tianyu/model/cache/UavTelemetryDataCache.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/cache/UavTelemetryDataCache.java
index f4e0348..3a8381d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/cache/UavTelemetryDataCache.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/BoxHistoryDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxHistoryDTO.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/BoxHistoryDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxHistoryDTO.java
index d6bc0c3..c417b44 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/BoxHistoryDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/BoxPhotosDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxPhotosDTO.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/BoxPhotosDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxPhotosDTO.java
index 081d245..aa3a100 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/BoxPhotosDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/BoxSettingsDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxSettingsDTO.java
similarity index 97%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/BoxSettingsDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/BoxSettingsDTO.java
index bd6be4e..317f971 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/BoxSettingsDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/TokenDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/TokenDTO.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/TokenDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/TokenDTO.java
index a2ff777..033fb14 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/TokenDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CameraModeDTO.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CameraModeDTO.java
index 15eb4cf..6f07317 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CapturePicDTO.java
similarity index 89%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/CapturePicDTO.java
index b309413..ae4d241 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/PhotoReturnToggleDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/PhotoReturnToggleDTO.java
similarity index 89%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/PhotoReturnToggleDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/PhotoReturnToggleDTO.java
index 6163717..1d59494 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/PhotoReturnToggleDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/RecordDTO.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/RecordDTO.java
index 25088ff..7d85b1d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchCameraDTO.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchCameraDTO.java
index e63c570..f69cac6 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchSourceDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchSourceDTO.java
similarity index 91%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchSourceDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/SwitchSourceDTO.java
index 14420d5..3a1970e 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchSourceDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomDTO.java
similarity index 91%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomDTO.java
index 1fed09e..035146d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomToLevelDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomToLevelDTO.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomToLevelDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/camera/ZoomToLevelDTO.java
index 99214c7..abbb781 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomToLevelDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AbsAngleControlDTO.java
similarity index 95%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AbsAngleControlDTO.java
index 2a68e80..1e43819 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AngleControlDTO.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/control/AngleControlDTO.java
index 4a1cf40..4a0702f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/control/SpeedControlDTO.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/control/SpeedControlDTO.java
index cecb79b..2b2fa7b 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavSignalInfoConverter.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavSignalInfoConverter.java
similarity index 80%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavSignalInfoConverter.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavSignalInfoConverter.java
index 241e93c..18ec3bc 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavSignalInfoConverter.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavStateConverter.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavStateConverter.java
similarity index 97%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavStateConverter.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavStateConverter.java
index 4b4e9cb..e470f2f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavStateConverter.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavTelemetryDataConverter.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavTelemetryDataConverter.java
similarity index 80%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavTelemetryDataConverter.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/realdata/UavTelemetryDataConverter.java
index 3eb2379..f56772f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavTelemetryDataConverter.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/HangarPointConverter.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/HangarPointConverter.java
similarity index 91%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/HangarPointConverter.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/HangarPointConverter.java
index 920bca8..837de20 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/HangarPointConverter.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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 {
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/NormalModelConverter.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/NormalModelConverter.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/NormalModelConverter.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/NormalModelConverter.java
index 7d66816..02b6c6a 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/NormalModelConverter.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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 {
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PlanLineDataConverter.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PlanLineDataConverter.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PlanLineDataConverter.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PlanLineDataConverter.java
index 416494d..638d895 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PlanLineDataConverter.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointActionConverter.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointActionConverter.java
similarity index 89%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointActionConverter.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointActionConverter.java
index 8341ffb..a1c7503 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointActionConverter.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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 {
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointDataConverter.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointDataConverter.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointDataConverter.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/PointDataConverter.java
index 8465898..69d541f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointDataConverter.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/SurroundModelConverter.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/SurroundModelConverter.java
similarity index 91%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/SurroundModelConverter.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/converter/wayline/SurroundModelConverter.java
index 3ce0b0d..7ffcfbe 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/SurroundModelConverter.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/init/UavInitInfo.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/init/UavInitInfo.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/init/UavInitInfo.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/init/UavInitInfo.java
index 47ce122..5ee7ede 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/init/UavInitInfo.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/EmeragencyBrakeDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/EmeragencyBrakeDTO.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/EmeragencyBrakeDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/EmeragencyBrakeDTO.java
index bb2af4c..819555f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/EmeragencyBrakeDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyControlDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyControlDTO.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyControlDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyControlDTO.java
index 6f616af..256ddb4 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyControlDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlCancelDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlCancelDTO.java
similarity index 88%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlCancelDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlCancelDTO.java
index 1d2af00..72ca623 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlCancelDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlDTO.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/FlyPointControlDTO.java
index 40ac18d..ac36297 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandCancelDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandCancelDTO.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandCancelDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandCancelDTO.java
index bb50469..36449df 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandCancelDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandDTO.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandDTO.java
index a81d15e..d23b92e 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandForcedDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandForcedDTO.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandForcedDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/LandForcedDTO.java
index 6a5a519..754ae34 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandForcedDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeCancelDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeCancelDTO.java
similarity index 89%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeCancelDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeCancelDTO.java
index af885c3..38c802b 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeCancelDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeDTO.java
similarity index 91%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/ReturnHomeDTO.java
index 2fd48fb..d3d6c1f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/SwitchUavControlDTO.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/SwitchUavControlDTO.java
index 8732269..8752699 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/TakeOffDTO.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/manual/TakeOffDTO.java
index 9c54e67..9a8318a 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnHeightSettingDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnHeightSettingDTO.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnHeightSettingDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnHeightSettingDTO.java
index 34d7fcf..d025aa1 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnHeightSettingDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnPointSettingDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnPointSettingDTO.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnPointSettingDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/ReturnPointSettingDTO.java
index be8aa9f..4c89cc0 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnPointSettingDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/VideoStreamSettingDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/VideoStreamSettingDTO.java
similarity index 94%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/settings/VideoStreamSettingDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/settings/VideoStreamSettingDTO.java
index 1b8683f..9f1b72c 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/VideoStreamSettingDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/signal/SignalInfo.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/signal/SignalInfo.java
similarity index 98%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/signal/SignalInfo.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/signal/SignalInfo.java
index 964f426..07ecd9d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/signal/SignalInfo.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/LoopSettingDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/LoopSettingDTO.java
similarity index 89%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/LoopSettingDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/LoopSettingDTO.java
index f21f355..3e3d3a7 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/LoopSettingDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RealSpeakDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RealSpeakDTO.java
similarity index 88%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RealSpeakDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RealSpeakDTO.java
index 84daa58..a38a9f3 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RealSpeakDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RecordSpeakDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RecordSpeakDTO.java
similarity index 88%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RecordSpeakDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/RecordSpeakDTO.java
index 74970e2..a1f9326 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RecordSpeakDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/SpeakModeSwitchDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/SpeakModeSwitchDTO.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/SpeakModeSwitchDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/SpeakModeSwitchDTO.java
index 24a3305..da54fc9 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/SpeakModeSwitchDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/StopSpeakDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/StopSpeakDTO.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/StopSpeakDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/StopSpeakDTO.java
index 62e0dec..b0e1d6f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/StopSpeakDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/TextSpeakDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/TextSpeakDTO.java
similarity index 91%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/TextSpeakDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/TextSpeakDTO.java
index 4408617..063fcc1 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/TextSpeakDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/VolumeSettingDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/VolumeSettingDTO.java
similarity index 89%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/VolumeSettingDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/speaker/VolumeSettingDTO.java
index 41f3a22..f8feb16 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/VolumeSettingDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/AvoidanceData.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/AvoidanceData.java
similarity index 97%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/AvoidanceData.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/AvoidanceData.java
index 981d4e3..68c92e3 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/AvoidanceData.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryState.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryState.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryState.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryState.java
index 2b7bffd..b71ef97 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryState.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryStateInfo.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryStateInfo.java
similarity index 96%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryStateInfo.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/BatteryStateInfo.java
index 7ec51fe..86efb42 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryStateInfo.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/CameraState.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/CameraState.java
similarity index 96%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/CameraState.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/CameraState.java
index c92d37b..a8cbcea 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/CameraState.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/FlightControllerState.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/FlightControllerState.java
similarity index 95%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/FlightControllerState.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/FlightControllerState.java
index 7cacbe6..0e1cf2f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/FlightControllerState.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/HmsAlarmData.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/HmsAlarmData.java
similarity index 88%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/HmsAlarmData.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/HmsAlarmData.java
index 3ee902d..5dd4228 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/HmsAlarmData.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/MissionState.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/MissionState.java
similarity index 96%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/MissionState.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/MissionState.java
index 52c6387..3057539 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/MissionState.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/PointData.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PointData.java
similarity index 91%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/PointData.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PointData.java
index 8ab5ecf..53141bf 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/PointData.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/PtzState.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PtzState.java
similarity index 89%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/PtzState.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/PtzState.java
index 4f3bb2a..1b044bf 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/PtzState.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/UavState.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/state/UavState.java
similarity index 95%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/state/UavState.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/state/UavState.java
index c445ac8..5271ad2 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/state/UavState.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/telemetry/TelemetryData.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/telemetry/TelemetryData.java
similarity index 97%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/telemetry/TelemetryData.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/telemetry/TelemetryData.java
index 441c146..785f002 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/telemetry/TelemetryData.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/HangarPoint.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/HangarPoint.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/HangarPoint.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/HangarPoint.java
index 525e493..0937416 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/HangarPoint.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/NormalModel.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/NormalModel.java
similarity index 88%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/NormalModel.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/NormalModel.java
index 805651c..ef866a2 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/NormalModel.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PlanLineData.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PlanLineData.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PlanLineData.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PlanLineData.java
index 8d8edb2..385c504 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PlanLineData.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PointAction.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PointAction.java
similarity index 94%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PointAction.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/PointAction.java
index 2372dc4..a32edbf 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PointAction.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/SurroundModel.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/SurroundModel.java
similarity index 76%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/SurroundModel.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/SurroundModel.java
index 9986902..bc35702 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/SurroundModel.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineBeginDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineBeginDTO.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineBeginDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineBeginDTO.java
index a7915b9..53becc5 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineBeginDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineEndDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineEndDTO.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineEndDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineEndDTO.java
index 0fa86db..8555567 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineEndDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLinePauseDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLinePauseDTO.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLinePauseDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLinePauseDTO.java
index 807ea61..85aadd3 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLinePauseDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineResumeDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineResumeDTO.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineResumeDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineResumeDTO.java
index 0060532..846b0cd 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineResumeDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineUploadDTO.java b/ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineUploadDTO.java
similarity index 78%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineUploadDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/dto/wayline/WayLineUploadDTO.java
index 7ed3fdf..820d8b4 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineUploadDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/receiver/AccessTokenReceiver.java b/ard-work/src/main/java/com/ard/tianyu/domain/receiver/AccessTokenReceiver.java
similarity index 93%
rename from ard-work/src/main/java/com/ard/tianyu/model/receiver/AccessTokenReceiver.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/receiver/AccessTokenReceiver.java
index e3f9f15..770c3d4 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/receiver/AccessTokenReceiver.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxHistoryReceiver.java b/ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxHistoryReceiver.java
similarity index 94%
rename from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxHistoryReceiver.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxHistoryReceiver.java
index 16cdaea..dfebfdd 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxHistoryReceiver.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxInfoReceiver.java b/ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxInfoReceiver.java
similarity index 96%
rename from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxInfoReceiver.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxInfoReceiver.java
index 290487d..950725a 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxInfoReceiver.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxPhotosReceiver.java b/ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxPhotosReceiver.java
similarity index 94%
rename from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxPhotosReceiver.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxPhotosReceiver.java
index 183b598..af377ff 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxPhotosReceiver.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxStreamUrlReceiver.java b/ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxStreamUrlReceiver.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxStreamUrlReceiver.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/receiver/BoxStreamUrlReceiver.java
index 462c7b3..3603ced 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxStreamUrlReceiver.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/receiver/TyHttpCommonReceiver.java b/ard-work/src/main/java/com/ard/tianyu/domain/receiver/TyHttpCommonReceiver.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/receiver/TyHttpCommonReceiver.java
rename to ard-work/src/main/java/com/ard/tianyu/domain/receiver/TyHttpCommonReceiver.java
index e5ab375..e90f4f6 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/receiver/TyHttpCommonReceiver.java
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/http/TokenInterceptor.java b/ard-work/src/main/java/com/ard/tianyu/forest/TokenInterceptor.java
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/http/TokenInterceptor.java
rename to ard-work/src/main/java/com/ard/tianyu/forest/TokenInterceptor.java
index 8d664ef..afbf621 100644
--- a/ard-work/src/main/java/com/ard/tianyu/http/TokenInterceptor.java
+++ b/ard-work/src/main/java/com/ard/tianyu/forest/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/http/TyClient.java b/ard-work/src/main/java/com/ard/tianyu/forest/TyClient.java
similarity index 84%
rename from ard-work/src/main/java/com/ard/tianyu/http/TyClient.java
rename to ard-work/src/main/java/com/ard/tianyu/forest/TyClient.java
index fbfba5a..200b52e 100644
--- a/ard-work/src/main/java/com/ard/tianyu/http/TyClient.java
+++ b/ard-work/src/main/java/com/ard/tianyu/forest/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
diff --git a/ard-work/src/main/java/com/ard/tianyu/http/TyConst.java b/ard-work/src/main/java/com/ard/tianyu/forest/TyConst.java
similarity index 95%
rename from ard-work/src/main/java/com/ard/tianyu/http/TyConst.java
rename to ard-work/src/main/java/com/ard/tianyu/forest/TyConst.java
index 8655da4..fed2283 100644
--- a/ard-work/src/main/java/com/ard/tianyu/http/TyConst.java
+++ b/ard-work/src/main/java/com/ard/tianyu/forest/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";
diff --git a/ard-work/src/main/java/com/ard/tianyu/mapper/UavBoxMapper.java b/ard-work/src/main/java/com/ard/tianyu/mapper/UavBoxMapper.java
new file mode 100644
index 0000000..bd1b554
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/mapper/UavBoxMapper.java
@@ -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);
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/TyNettyTcpClient.java b/ard-work/src/main/java/com/ard/tianyu/netty/TyNettyTcpClient.java
index 430fe92..85b6b8c 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/TyNettyTcpClient.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCmd.java
index 19a657b..b9ea745 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCmd.java
index 094d5db..efbf904 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java
index 5b30fc8..8c5537b 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCmd.java
index 713233a..33e203c 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCmd.java
index 1ac8be2..cebf507 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java
index 43191aa..25338f0 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java
index 255453c..11c2301 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomCmd.java
index 9dbfef5..b752429 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java
index da41e1c..8e85dab 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCmd.java
index 28f18de..50952ea 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCmd.java
index f029444..888cce6 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCmd.java
index cc65839..736316a 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeCmd.java
index 761ee74..978a505 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeReplyCmd.java
index 3ed5bf3..4425c73 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/EmergencyBrakeReplyCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyControlCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyControlCmd.java
index e0f4811..85a51c1 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyControlCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCancelCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCancelCmd.java
index 3c345f7..c7b7947 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCancelCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCmd.java
index a7b70d4..0880f2d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/FlyPointControlCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCancelCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCancelCmd.java
index b791898..5e0aa4d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCancelCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCmd.java
index 384ce0a..7e9b137 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandForcedCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandForcedCmd.java
index 758380c..e3e9328 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/LandForcedCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelCmd.java
index be109fc..d77f20b 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java
index 236b3e8..7a03dec 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java
+++ b/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;
 
 /**
  * 返航指令
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java
index b9168da..5925809 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java
index ba4c91f..e90c15d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java
index 02ffeff..5a01ec8 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java
index 57e76ce..047939f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java
index 8cabfc5..46d5ec7 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java
index 5834849..58a525c 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java
index 1e6f379..89f8546 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java
+++ b/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;
 
 /**
  * 修改返航高度指令
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java
index 066875e..f3ee848 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java
index 407349b..c326a12 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/LoopSettingCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/LoopSettingCmd.java
index e1b49c7..687504c 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/LoopSettingCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RealSpeakCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RealSpeakCmd.java
index 8d3c784..fa58739 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RealSpeakCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RecordSpeakCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RecordSpeakCmd.java
index 26b3eac..80d72a0 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/RecordSpeakCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/SpeakModeSwitchCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/SpeakModeSwitchCmd.java
index 315d089..d1d9669 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/SpeakModeSwitchCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/StopSpeakCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/StopSpeakCmd.java
index 7e5bb79..d7ed249 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/StopSpeakCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/TextSpeakCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/TextSpeakCmd.java
index b00e249..600beca 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/TextSpeakCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/VolumeSettingCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/VolumeSettingCmd.java
index 2bcc304..8d2dfb4 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/speaker/VolumeSettingCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginCmd.java
index 4235741..1156ada 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginCmd.java
+++ b/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;
 
 /**
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginReplyCmd.java
index 5fc04b3..d864eb7 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginReplyCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineEndCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineEndCmd.java
index 6415338..d3ed36e 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineEndCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLinePauseCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLinePauseCmd.java
index e157ff7..0fcffd6 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLinePauseCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineResumeCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineResumeCmd.java
index 7207075..fc97e87 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineResumeCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadCmd.java
index d19b017..efd1263 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadCmd.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadReplyCmd.java
index fc470b5..950fe71 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineUploadReplyCmd.java
+++ b/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;
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java b/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
index 646264d..147f829 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java b/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
index a9cea50..dc3490c 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
+++ b/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;
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java b/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
index 437dec0..4a0bc74 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
+++ b/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);
 
 }
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/IUavBoxService.java b/ard-work/src/main/java/com/ard/tianyu/service/IUavBoxService.java
new file mode 100644
index 0000000..0fcd12b
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/service/IUavBoxService.java
@@ -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);
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/control/UavControlService.java b/ard-work/src/main/java/com/ard/tianyu/service/control/UavControlService.java
new file mode 100644
index 0000000..1500f3e
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/service/control/UavControlService.java
@@ -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("不支持的控制类型");
+        }
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/control/WebSocketService.java b/ard-work/src/main/java/com/ard/tianyu/service/control/WebSocketService.java
new file mode 100644
index 0000000..1a312a1
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/service/control/WebSocketService.java
@@ -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));
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
index 9fba16d..be7e8b4 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
+++ b/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;
     }
 
     /**
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavBoxServiceImpl.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/UavBoxServiceImpl.java
new file mode 100644
index 0000000..5f36607
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/service/impl/UavBoxServiceImpl.java
@@ -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());
+        }
+        // 更新其他属性
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java
deleted file mode 100644
index 9d87722..0000000
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package com.ard.tianyu.service.impl;
-
-import com.alibaba.fastjson2.JSON;
-import com.ard.common.exception.NoPermissionException;
-import com.ard.common.utils.SecurityUtils;
-import com.ard.tianyu.websocket.domain.ControlAuthorityDTO;
-import com.ard.tianyu.websocket.domain.BaseMessage;
-import com.ard.tianyu.websocket.utils.WebSocketUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.concurrent.ConcurrentHashMap;
-
-
-/**
- * 无人机控制管理器
- *
- * @author liusuyi
- * @date 2024年02月21日8:37
- **/
-@Service
-@Slf4j
-public class UavControlManager {
-
-    private static final String CONTROL_REQUEST_ACTION = "controlRequest";
-    private static final String REQUEST_ACTION = "request";
-    private static final String APPROVE_ACTION = "approve";
-    private static final String REJECT_ACTION = "reject";
-
-    // 存储每个无人机的当前控制者
-    public static final ConcurrentHashMap<String, Long> uavControlMap = new ConcurrentHashMap<>();
-    // 存储无人机的控制请求(用于判断哪个控制者正在等待)
-    public static final ConcurrentHashMap<String, Long> controlRequestMap = new ConcurrentHashMap<>();
-
-
-    /**
-     * 申请控制
-     *
-     * @param boxSn 盒子编号
-     */
-    public boolean requestControl(String boxSn) {
-        Long requester = SecurityUtils.getUserId();
-        Long controller = uavControlMap.get(boxSn);
-        // 如果无人机没有控制者,直接控制
-        if (controller == null) {
-            uavControlMap.put(boxSn, requester);
-            log.info("控制权已授予给用户: {}", requester);
-            return true; // 控制成功
-        }
-        // 如果无人机已经有控制者,则发送申请给当前控制者
-        if (!controller.equals(requester)) {
-            // 则将控制请求加入请求队列
-            controlRequestMap.put(boxSn, requester);
-            // 通知当前控制者,有新的控制请求
-            notifyMessage(boxSn, REQUEST_ACTION, requester, controller);
-            log.info("控制请求已发送给当前控制者: {}", controller);
-        } else {
-            throw new NoPermissionException("当前已经获取控制权,无需重复申请");
-        }
-        return false; // 等待当前控制者的同意
-    }
-
-    /**
-     * 处理控制请求
-     *
-     * @param boxSn   盒子编号
-     * @param approve 是否同意
-     */
-    public boolean handleControlResponse(String boxSn, boolean approve) {
-        Long controller = SecurityUtils.getUserId();
-        Long requester = controlRequestMap.get(boxSn);
-
-        if (requester == null || requester.equals(controller)) {
-            throw new NoPermissionException("无申请不需要处理控制权");
-        }
-
-        if (approve) {
-            uavControlMap.put(boxSn, requester);
-            notifyMessage(boxSn, APPROVE_ACTION, controller, requester);
-            log.info("控制权已转移给用户: {}", requester);
-        } else {
-            notifyMessage(boxSn, REJECT_ACTION, controller, requester);
-            log.info("控制请求被拒绝,请求者: {}", requester);
-        }
-
-        controlRequestMap.remove(boxSn);
-        return true;
-    }
-
-    /**
-     * 释放控制
-     *
-     * @param boxSn 盒子编号
-     */
-    public boolean releaseControl(String boxSn) {
-        Long controller = uavControlMap.get(boxSn);
-
-        if (controller == null) {
-            log.warn("无人机当前 {} 没有控制者,无需释放", boxSn);
-            throw new NoPermissionException("无人机" + boxSn + "当前没有控制者,无需释放");
-        }
-
-        if (!controller.equals(SecurityUtils.getUserId())) {
-            log.warn("无权限释放控制, 实际控制者是 {}", controller);
-            throw new NoPermissionException("无权限释放控制, 实际控制者是 " + controller);
-        }
-
-        uavControlMap.remove(boxSn);
-        log.info("控制权已释放,无人机: {}", boxSn);
-        return true;
-    }
-
-
-    /**
-     * 释放指定用户控制的无人机
-     *
-     * @param userId 用户id
-     */
-    public void releaseAllControlByUser(String userId) {
-        String boxSn = uavControlMap.entrySet().stream()
-                .filter(entry -> entry.getValue().toString().equals(userId))
-                .map(ConcurrentHashMap.Entry::getKey)
-                .findFirst()
-                .orElse(null);
-        if (boxSn != null) {
-            // 用户控制了某个无人机,移除缓存
-            uavControlMap.remove(boxSn);
-            log.info("移除{}控制的无人机: {}", userId, boxSn);
-        }
-    }
-
-
-    /**
-     * 发送消息给指定用户
-     *
-     * @param boxSn   盒子编号
-     * @param action  指令()
-     * @param source  发送方用户ID
-     * @param target  接收方用户ID
-     */
-    private void notifyMessage(String boxSn, String action, Long source, Long target) {
-        ControlAuthorityDTO controlAuthorityDTO = buildControlAuthorityDTO(boxSn, action, source);
-        BaseMessage<ControlAuthorityDTO> baseMessage = buildBaseMessage(CONTROL_REQUEST_ACTION, controlAuthorityDTO);
-        WebSocketUtil.sendMessage(target.toString(), JSON.toJSONString(baseMessage));
-    }
-
-    private ControlAuthorityDTO buildControlAuthorityDTO(String boxSn, String action, Long userId) {
-        return ControlAuthorityDTO.builder()
-                .boxSn(boxSn)
-                .userId(userId)
-                .action(action)
-                .build();
-    }
-
-    private <T> BaseMessage<T> buildBaseMessage(String type, T data) {
-        return new BaseMessage<>(type, data);
-    }
-}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java b/ard-work/src/main/java/com/ard/tianyu/service/stream/UavStreamManager.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java
rename to ard-work/src/main/java/com/ard/tianyu/service/stream/UavStreamManager.java
index e3d03ca..33d5550 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java
+++ b/ard-work/src/main/java/com/ard/tianyu/service/stream/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) {
diff --git a/ard-work/src/main/java/com/ard/tianyu/websocket/domain/BaseMessage.java b/ard-work/src/main/java/com/ard/tianyu/websocket/domain/BaseMessage.java
index af4027e..fb28e33 100644
--- a/ard-work/src/main/java/com/ard/tianyu/websocket/domain/BaseMessage.java
+++ b/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
diff --git a/ard-work/src/main/java/com/ard/tianyu/websocket/domain/ControlAuthorityDTO.java b/ard-work/src/main/java/com/ard/tianyu/websocket/domain/ControlAuthorityDTO.java
deleted file mode 100644
index f9da173..0000000
--- a/ard-work/src/main/java/com/ard/tianyu/websocket/domain/ControlAuthorityDTO.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ard.tianyu.websocket.domain;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-public class ControlAuthorityDTO {
-
-    private String boxSn;       // 盒子编号
-    private Long userId;        // 消息发送者
-    private String action;      // 操作类型:request(请求),approve(同意),reject(拒绝)
-
-}
diff --git a/ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlMessage.java b/ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlMessage.java
new file mode 100644
index 0000000..c862dcf
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlMessage.java
@@ -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;   // 控制是否被批准(仅在处理请求控制时使用)
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlType.java b/ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlType.java
new file mode 100644
index 0000000..fa570d3
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavControlType.java
@@ -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);
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/websocket/domain/PullStreamDTO.java b/ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavStreamMessage.java
similarity index 89%
rename from ard-work/src/main/java/com/ard/tianyu/websocket/domain/PullStreamDTO.java
rename to ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavStreamMessage.java
index 2f6e074..857ed03 100644
--- a/ard-work/src/main/java/com/ard/tianyu/websocket/domain/PullStreamDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/websocket/domain/UavStreamMessage.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 {
     /**
      * 盒子编号
      */
diff --git a/ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java b/ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java
index d7be5e8..b74d892 100644
--- a/ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java
+++ b/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);
+        }
     }
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/websocket/utils/WebSocketUtil.java b/ard-work/src/main/java/com/ard/tianyu/websocket/utils/WebSocketUtil.java
index 27c8e65..63447bb 100644
--- a/ard-work/src/main/java/com/ard/tianyu/websocket/utils/WebSocketUtil.java
+++ b/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));
-    }
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/vtdu/service/impl/MediaServiceImpl.java b/ard-work/src/main/java/com/ard/vtdu/service/impl/MediaServiceImpl.java
index e45d5fb..b566e61 100644
--- a/ard-work/src/main/java/com/ard/vtdu/service/impl/MediaServiceImpl.java
+++ b/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;
diff --git a/ard-work/src/main/resources/mapper/UavBoxMapper.xml b/ard-work/src/main/resources/mapper/UavBoxMapper.xml
new file mode 100644
index 0000000..6512558
--- /dev/null
+++ b/ard-work/src/main/resources/mapper/UavBoxMapper.xml
@@ -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>
\ No newline at end of file

--
Gitblit v1.9.3