13 files added
65 files modified
6 files deleted
84 files renamed
| | |
| | | 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; |
| | |
| | | * @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) |
| | |
| | | /** |
| | | * 获取${functionName}详细信息 |
| | | */ |
| | | @ApiOperation("获取${functionName}详细信息") |
| | | @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')") |
| | | @GetMapping(value = "/{${pkColumn.javaField}}") |
| | | public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) |
| | |
| | | /** |
| | | * 新增${functionName} |
| | | */ |
| | | @ApiOperation("新增${functionName}") |
| | | @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')") |
| | | @Log(title = "${functionName}", businessType = BusinessType.INSERT) |
| | | @PostMapping |
| | |
| | | /** |
| | | * 修改${functionName} |
| | | */ |
| | | @ApiOperation("修改${functionName}") |
| | | @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')") |
| | | @Log(title = "${functionName}", businessType = BusinessType.UPDATE) |
| | | @PutMapping |
| | |
| | | /** |
| | | * 删除${functionName} |
| | | */ |
| | | @ApiOperation("删除${functionName}") |
| | | @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')") |
| | | @Log(title = "${functionName}", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{${pkColumn.javaField}s}") |
| | |
| | | #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业务层处理 |
| | |
| | | @Service |
| | | public class ${ClassName}ServiceImpl implements I${ClassName}Service |
| | | { |
| | | @Autowired |
| | | @Resource |
| | | private ${ClassName}Mapper ${className}Mapper; |
| | | |
| | | /** |
| New file |
| | |
| | | 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 |
| | | } |
| | | } |
| New file |
| | |
| | | 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" |
| | | } |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/websocket/config/WebSocketConfig.java |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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 |
| New file |
| | |
| | | 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)); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * UavGimbalController |
| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | 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; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * UavBaseController |
| | |
| | | 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; |
| | |
| | | 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; |
| New file |
| | |
| | | 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)); |
| | | } |
| | | } |
| New file |
| | |
| | | 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()); |
| | | // 对比其他属性 |
| | | } |
| | | |
| | | } |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/cache/TyTcpServerCache.java |
| | |
| | | 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; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/cache/UavSignalInfoCache.java |
| | |
| | | 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; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/cache/UavStateCache.java |
| | |
| | | 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; |
| | | |
| | | /** |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/cache/UavTelemetryDataCache.java |
| | |
| | | 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; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/BoxHistoryDTO.java |
| | |
| | | package com.ard.tianyu.model.dto; |
| | | package com.ard.tianyu.domain.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import lombok.AllArgsConstructor; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/BoxPhotosDTO.java |
| | |
| | | package com.ard.tianyu.model.dto; |
| | | package com.ard.tianyu.domain.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import lombok.AllArgsConstructor; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/BoxSettingsDTO.java |
| | |
| | | package com.ard.tianyu.model.dto; |
| | | package com.ard.tianyu.domain.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import lombok.AllArgsConstructor; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/TokenDTO.java |
| | |
| | | package com.ard.tianyu.model.dto; |
| | | package com.ard.tianyu.domain.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import lombok.AllArgsConstructor; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.camera; |
| | | package com.ard.tianyu.domain.dto.camera; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.camera; |
| | | package com.ard.tianyu.domain.dto.camera; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/PhotoReturnToggleDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.camera; |
| | | package com.ard.tianyu.domain.dto.camera; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.camera; |
| | | package com.ard.tianyu.domain.dto.camera; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.camera; |
| | | package com.ard.tianyu.domain.dto.camera; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchSourceDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.camera; |
| | | package com.ard.tianyu.domain.dto.camera; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.camera; |
| | | package com.ard.tianyu.domain.dto.camera; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomToLevelDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.camera; |
| | | package com.ard.tianyu.domain.dto.camera; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.control; |
| | | package com.ard.tianyu.domain.dto.control; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.control; |
| | | package com.ard.tianyu.domain.dto.control; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.control; |
| | | package com.ard.tianyu.domain.dto.control; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavSignalInfoConverter.java |
| | |
| | | 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; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavStateConverter.java |
| | |
| | | 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; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavTelemetryDataConverter.java |
| | |
| | | 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; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/HangarPointConverter.java |
| | |
| | | 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 { |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/NormalModelConverter.java |
| | |
| | | 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 { |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PlanLineDataConverter.java |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointActionConverter.java |
| | |
| | | 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 { |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/PointDataConverter.java |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/wayline/SurroundModelConverter.java |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/init/UavInitInfo.java |
| | |
| | | package com.ard.tianyu.model.dto.init; |
| | | package com.ard.tianyu.domain.dto.init; |
| | | |
| | | import lombok.Builder; |
| | | import lombok.Data; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/EmeragencyBrakeDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyControlDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlCancelDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/FlyPointControlDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandCancelDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/LandForcedDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeCancelDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.manual; |
| | | package com.ard.tianyu.domain.dto.manual; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnHeightSettingDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.settings; |
| | | package com.ard.tianyu.domain.dto.settings; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnPointSettingDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.settings; |
| | | package com.ard.tianyu.domain.dto.settings; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/settings/VideoStreamSettingDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.settings; |
| | | package com.ard.tianyu.domain.dto.settings; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/signal/SignalInfo.java |
| | |
| | | package com.ard.tianyu.model.dto.signal; |
| | | package com.ard.tianyu.domain.dto.signal; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import lombok.Data; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/LoopSettingDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.speaker; |
| | | package com.ard.tianyu.domain.dto.speaker; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RealSpeakDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.speaker; |
| | | package com.ard.tianyu.domain.dto.speaker; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/RecordSpeakDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.speaker; |
| | | package com.ard.tianyu.domain.dto.speaker; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/SpeakModeSwitchDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.speaker; |
| | | package com.ard.tianyu.domain.dto.speaker; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/StopSpeakDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.speaker; |
| | | package com.ard.tianyu.domain.dto.speaker; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/TextSpeakDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.speaker; |
| | | package com.ard.tianyu.domain.dto.speaker; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/speaker/VolumeSettingDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.speaker; |
| | | package com.ard.tianyu.domain.dto.speaker; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/AvoidanceData.java |
| | |
| | | package com.ard.tianyu.model.dto.state; |
| | | package com.ard.tianyu.domain.dto.state; |
| | | |
| | | import lombok.Data; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryState.java |
| | |
| | | package com.ard.tianyu.model.dto.state; |
| | | package com.ard.tianyu.domain.dto.state; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/BatteryStateInfo.java |
| | |
| | | package com.ard.tianyu.model.dto.state; |
| | | package com.ard.tianyu.domain.dto.state; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/CameraState.java |
| | |
| | | package com.ard.tianyu.model.dto.state; |
| | | package com.ard.tianyu.domain.dto.state; |
| | | |
| | | import lombok.Data; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/FlightControllerState.java |
| | |
| | | package com.ard.tianyu.model.dto.state; |
| | | package com.ard.tianyu.domain.dto.state; |
| | | |
| | | import lombok.Data; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/HmsAlarmData.java |
| | |
| | | package com.ard.tianyu.model.dto.state; |
| | | package com.ard.tianyu.domain.dto.state; |
| | | |
| | | import lombok.Data; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/MissionState.java |
| | |
| | | package com.ard.tianyu.model.dto.state; |
| | | package com.ard.tianyu.domain.dto.state; |
| | | |
| | | import lombok.Data; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/PointData.java |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/PtzState.java |
| | |
| | | package com.ard.tianyu.model.dto.state; |
| | | package com.ard.tianyu.domain.dto.state; |
| | | |
| | | import lombok.Data; |
| | | |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/state/UavState.java |
| | |
| | | package com.ard.tianyu.model.dto.state; |
| | | package com.ard.tianyu.domain.dto.state; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/telemetry/TelemetryData.java |
| | |
| | | package com.ard.tianyu.model.dto.telemetry; |
| | | package com.ard.tianyu.domain.dto.telemetry; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/HangarPoint.java |
| | |
| | | package com.ard.tianyu.model.dto.wayline; |
| | | package com.ard.tianyu.domain.dto.wayline; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/NormalModel.java |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PlanLineData.java |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/PointAction.java |
| | |
| | | package com.ard.tianyu.model.dto.wayline; |
| | | package com.ard.tianyu.domain.dto.wayline; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/SurroundModel.java |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineBeginDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.wayline; |
| | | package com.ard.tianyu.domain.dto.wayline; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineEndDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.wayline; |
| | | package com.ard.tianyu.domain.dto.wayline; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLinePauseDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.wayline; |
| | | package com.ard.tianyu.domain.dto.wayline; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineResumeDTO.java |
| | |
| | | package com.ard.tianyu.model.dto.wayline; |
| | | package com.ard.tianyu.domain.dto.wayline; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineUploadDTO.java |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/AccessTokenReceiver.java |
| | |
| | | package com.ard.tianyu.model.receiver; |
| | | package com.ard.tianyu.domain.receiver; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxHistoryReceiver.java |
| | |
| | | package com.ard.tianyu.model.receiver; |
| | | package com.ard.tianyu.domain.receiver; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxInfoReceiver.java |
| | |
| | | package com.ard.tianyu.model.receiver; |
| | | package com.ard.tianyu.domain.receiver; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxPhotosReceiver.java |
| | |
| | | package com.ard.tianyu.model.receiver; |
| | | package com.ard.tianyu.domain.receiver; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/BoxStreamUrlReceiver.java |
| | |
| | | package com.ard.tianyu.model.receiver; |
| | | package com.ard.tianyu.domain.receiver; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/model/receiver/TyHttpCommonReceiver.java |
| | |
| | | package com.ard.tianyu.model.receiver; |
| | | package com.ard.tianyu.domain.receiver; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/http/TokenInterceptor.java |
| | |
| | | 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; |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/http/TyClient.java |
| | |
| | | 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 |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/http/TyConst.java |
| | |
| | | package com.ard.tianyu.http; |
| | | package com.ard.tianyu.forest; |
| | | |
| | | public class TyConst { |
| | | public static final String POST_TOKEN = "/eapi/auth/getToken"; |
| New file |
| | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 返航指令 |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 修改返航高度指令 |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | | /** |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | * 处理回复消息 |
| | | */ |
| | | void processReplyMessage(String key, BaseCmd tyMessage); |
| | | |
| | | /** |
| | | * 点播 |
| | | */ |
| | | ArdVtdu play(String boxSn); |
| | | |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| New file |
| | |
| | | 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("不支持的控制类型"); |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | 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)); |
| | | } |
| | | } |
| | |
| | | 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.*; |
| | |
| | | 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; |
| | |
| | | /** |
| | | * 云台控制基于角度 |
| | | */ |
| | | @RequireUavControl(UavControlType.PAYLOAD) |
| | | @Override |
| | | public Boolean angleControl(AngleControlDTO angleControlDto) { |
| | | AngleControlCmd controlAngleCommand = new AngleControlCmd(angleControlDto); |
| | |
| | | /** |
| | | * 云台绝对值控制(基于角度) |
| | | */ |
| | | @RequireUavControl(UavControlType.PAYLOAD) |
| | | @Override |
| | | public Boolean absAngleControl(AbsAngleControlDTO absAngleControlDto) { |
| | | AbsAngleControlCmd absAngleControlCommand = new AbsAngleControlCmd(absAngleControlDto); |
| | |
| | | /** |
| | | * 云台转动(基于速度) |
| | | */ |
| | | @RequireUavControl(UavControlType.PAYLOAD) |
| | | @Override |
| | | public Boolean speedControl(SpeedControlDTO speedControlDto) { |
| | | SpeedControlCmd speedControlCommand = new SpeedControlCmd(speedControlDto); |
| | |
| | | /** |
| | | * 起飞 |
| | | */ |
| | | @CheckControlAuthority |
| | | @RequireUavControl(UavControlType.FLY) |
| | | @Override |
| | | public Boolean takeOff(TakeOffDTO takeOffDTO) { |
| | | TakeOffCmd takeOffCmd = new TakeOffCmd(takeOffDTO); |
| | |
| | | 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; |
| | | } |
| | | |
| | | /** |
| New file |
| | |
| | | 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()); |
| | | } |
| | | // 更新其他属性 |
| | | } |
| | | } |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java |
| | |
| | | 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; |
| | | |
| | |
| | | // 盒子拉流地址缓存 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<>(); |
| | | |
| | | /** |
| | | * 开始拉流 |
| | |
| | | * @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); |
| | | //不管谁拉流都判断流媒体中是否存在 |
| | |
| | | * @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); |
| | |
| | | * |
| | | * @param userId 用户ID |
| | | */ |
| | | public void stopAllPullStreamByUser(String userId) { |
| | | public void stopAllPullStreamByUser(Long userId) { |
| | | synchronized (this) { |
| | | STREAM_USER_MAP.forEach((boxSn, users) -> stopPullStream(boxSn, userId)); |
| | | } |
| | |
| | | * @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) { |
| | |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | |
| | | /** |
| | | * websocket基础消息 |
| | | * |
| | | * @author liusuyi |
| | | * @date 2024年11月04日14:40 |
| | | **/ |
| | | @Data |
| | | @AllArgsConstructor |
| | | @NoArgsConstructor |
| New file |
| | |
| | | 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; // 控制是否被批准(仅在处理请求控制时使用) |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| | | } |
| File was renamed from ard-work/src/main/java/com/ard/tianyu/websocket/domain/PullStreamDTO.java |
| | |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | /** |
| | | * PullStreamDTO |
| | | * 流消息 |
| | | * |
| | | * @author liusuyi |
| | | * @date 2024年11月04日14:40 |
| | |
| | | @Builder |
| | | @AllArgsConstructor |
| | | @NoArgsConstructor |
| | | public class PullStreamDTO { |
| | | public class UavStreamMessage { |
| | | /** |
| | | * 盒子编号 |
| | | */ |
| | |
| | | |
| | | 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; |
| | |
| | | import org.springframework.web.socket.TextMessage; |
| | | import org.springframework.web.socket.WebSocketSession; |
| | | import org.springframework.web.socket.handler.TextWebSocketHandler; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | |
| | |
| | | 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); |
| | |
| | | @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()); |
| | | |
| | |
| | | @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); |
| | | } |
| | | } |
| | | } |
| | |
| | | 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 发送内容 |
| | |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | } |
| | |
| | | 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)); |
| | | } |
| | | } |
| | |
| | | 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.*; |
| | |
| | | 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; |
| New file |
| | |
| | | <?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> |