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