添加接口和枚举

This commit is contained in:
孙小云 2026-02-04 09:54:31 +08:00
parent e09fb1ef6f
commit 345d50b52f
10 changed files with 546 additions and 0 deletions

View File

@ -0,0 +1,62 @@
package com.ruoyi.device.api;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.device.api.domain.DroneCurrentStatusVO;
import com.ruoyi.device.api.domain.DroneFlightControlRequest;
import com.ruoyi.device.api.domain.DroneRealtimeInfoVO;
import com.ruoyi.device.api.domain.DroneTakeoffResponseVO;
import com.ruoyi.device.api.factory.RemoteAircraftFlyFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
/**
* 无人机飞控服务
*
* @author ruoyi
* @date 2026-02-04
*/
@FeignClient(contextId = "remoteAircraftFlyService", value = ServiceNameConstants.DEVICE_SERVICE, fallbackFactory = RemoteAircraftFlyFallbackFactory.class)
public interface RemoteAircraftFlyService
{
/**
* 无人机飞控命令
*
* @param request 飞控命令请求
* @param source 请求来源
* @return 结果
*/
@PostMapping("/drone/flight-control")
R<Void> flightControl(@RequestBody DroneFlightControlRequest request, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 无人机实时信息展示
*
* @param taskId 任务ID
* @param source 请求来源
* @return 实时信息
*/
@GetMapping("/drone/realtime-info/{taskId}")
R<DroneRealtimeInfoVO> getRealtimeInfo(@PathVariable("taskId") Long taskId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 无人机当前状态查询
*
* @param dockId 机场ID
* @param source 请求来源
* @return 当前状态
*/
@GetMapping("/drone/current-status/{dockId}")
R<DroneCurrentStatusVO> getCurrentStatus(@PathVariable("dockId") Long dockId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 无人机起飞接口
*
* @param dockId 机场ID
* @param source 请求来源
* @return 起飞响应任务ID和任务状态
*/
@PostMapping("/drone/takeoff/{dockId}")
R<DroneTakeoffResponseVO> takeoff(@PathVariable("dockId") Long dockId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -0,0 +1,30 @@
package com.ruoyi.device.api.domain;
import com.ruoyi.device.api.enums.DroneCurrentStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* 无人机当前状态查询对象
*
* @author ruoyi
* @date 2026-02-04
*/
@Data
@Schema(description = "无人机当前状态查询对象")
public class DroneCurrentStatusVO implements Serializable {
private static final long serialVersionUID = 1L;
/** 机场ID */
@Schema(description = "机场ID", example = "1")
private Long dockId;
/** 当前状态 */
@Schema(description = "当前状态: TAKEOFF_FAILED-起飞失败, FLYING-飞行中, POINTING-指点中, HOVERING-悬停中, RETURNING-返航中, LANDING-降落中",
allowableValues = {"TAKEOFF_FAILED", "FLYING", "POINTING", "HOVERING", "RETURNING", "LANDING"},
example = "HOVERING")
private DroneCurrentStatusEnum currentStatus;
}

View File

@ -0,0 +1,41 @@
package com.ruoyi.device.api.domain;
import com.ruoyi.device.api.enums.DroneCommandEnum;
import com.ruoyi.device.api.enums.DroneSpeedEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* 无人机飞控命令请求对象
*
* @author ruoyi
* @date 2026-02-04
*/
@Data
@Schema(description = "无人机飞控命令请求对象")
public class DroneFlightControlRequest implements Serializable {
private static final long serialVersionUID = 1L;
/** 任务ID */
@Schema(description = "任务ID", example = "1")
private Long taskId;
/** 飞控命令 */
@Schema(description = "飞控命令: FORWARD-前进, BACKWARD-后退, LEFT-左移, RIGHT-右移, ROTATE_LEFT-左旋, ROTATE_RIGHT-右旋, UP-上升, DOWN-下降, RETURN_HOME-返航, EMERGENCY_STOP-急停",
allowableValues = {"FORWARD", "BACKWARD", "LEFT", "RIGHT", "ROTATE_LEFT", "ROTATE_RIGHT", "UP", "DOWN", "RETURN_HOME", "EMERGENCY_STOP"},
example = "FORWARD")
private DroneCommandEnum command;
/** 速度调整:快、默认、慢 */
@Schema(description = "速度调整: FAST-快, NORMAL-默认, SLOW-慢",
allowableValues = {"FAST", "NORMAL", "SLOW"},
example = "NORMAL")
private DroneSpeedEnum speed;
/** 幅度调整:数值类型 */
@Schema(description = "幅度调整(数值类型,单位:米)", example = "10")
private Integer amplitude;
}

View File

@ -0,0 +1,58 @@
package com.ruoyi.device.api.domain;
import com.ruoyi.device.api.enums.DroneMissionStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* 无人机实时信息展示对象
*
* @author ruoyi
* @date 2026-02-04
*/
@Data
@Schema(description = "无人机实时信息展示对象")
public class DroneRealtimeInfoVO implements Serializable {
private static final long serialVersionUID = 1L;
/** 爬升速度 */
@Schema(description = "爬升速度单位m/s", example = "5")
private Integer climbSpeed;
/** 平飞速度 */
@Schema(description = "平飞速度单位m/s", example = "15")
private Integer cruiseSpeed;
/** 距离机场 */
@Schema(description = "距离机场(单位:米)", example = "1000")
private Integer distanceToAirport;
/** 无人机高度 */
@Schema(description = "无人机高度(单位:米)", example = "100")
private Integer altitude;
/** 无人机俯仰角 */
@Schema(description = "无人机俯仰角(单位:度,范围:-90~90", example = "0")
private Integer pitch;
/** 无人机偏航角 */
@Schema(description = "无人机偏航角单位范围0~360", example = "180")
private Integer yaw;
/** 云台俯仰角 */
@Schema(description = "云台俯仰角(单位:度,范围:-90~90", example = "-45")
private Integer gimbalPitch;
/** 云台偏航角 */
@Schema(description = "云台偏航角单位范围0~360", example = "90")
private Integer gimbalYaw;
/** 无人机任务状态 */
@Schema(description = "无人机任务状态: IDLE-空闲, SELF_CHECKING-自检中, SELF_CHECK_FAILED-自检失败, TAKING_OFF-起飞中, TAKEOFF_FAILED-起飞失败, FLYING-飞行中, POINTING-指点中, HOVERING-悬停中, RETURNING-返航中, LANDING-降落中",
allowableValues = {"IDLE", "SELF_CHECKING", "SELF_CHECK_FAILED", "TAKING_OFF", "TAKEOFF_FAILED", "FLYING", "POINTING", "HOVERING", "RETURNING", "LANDING"},
example = "FLYING")
private DroneMissionStatusEnum missionStatus;
}

View File

@ -0,0 +1,30 @@
package com.ruoyi.device.api.domain;
import com.ruoyi.device.api.enums.DroneMissionStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* 无人机起飞响应对象
*
* @author ruoyi
* @date 2026-02-04
*/
@Data
@Schema(description = "无人机起飞响应对象")
public class DroneTakeoffResponseVO implements Serializable {
private static final long serialVersionUID = 1L;
/** 任务ID */
@Schema(description = "任务ID", example = "1001")
private Long taskId;
/** 无人机任务状态 */
@Schema(description = "无人机任务状态: IDLE-空闲, SELF_CHECKING-自检中, SELF_CHECK_FAILED-自检失败, TAKING_OFF-起飞中, TAKEOFF_FAILED-起飞失败, FLYING-飞行中, POINTING-指点中, HOVERING-悬停中, RETURNING-返航中, LANDING-降落中",
allowableValues = {"IDLE", "SELF_CHECKING", "SELF_CHECK_FAILED", "TAKING_OFF", "TAKEOFF_FAILED", "FLYING", "POINTING", "HOVERING", "RETURNING", "LANDING"},
example = "TAKING_OFF")
private DroneMissionStatusEnum missionStatus;
}

View File

@ -0,0 +1,81 @@
package com.ruoyi.device.api.enums;
/**
* 无人机飞控命令枚举
*
* @author ruoyi
* @date 2026-02-04
*/
public enum DroneCommandEnum {
/**
* 前进
*/
FORWARD("FORWARD", "前进"),
/**
* 后退
*/
BACKWARD("BACKWARD", "后退"),
/**
* 左移
*/
LEFT("LEFT", "左移"),
/**
* 右移
*/
RIGHT("RIGHT", "右移"),
/**
* 左旋
*/
ROTATE_LEFT("ROTATE_LEFT", "左旋"),
/**
* 右旋
*/
ROTATE_RIGHT("ROTATE_RIGHT", "右旋"),
/**
* 上升
*/
UP("UP", "上升"),
/**
* 下降
*/
DOWN("DOWN", "下降"),
/**
* 返航
*/
RETURN_HOME("RETURN_HOME", "返航"),
/**
* 急停
*/
EMERGENCY_STOP("EMERGENCY_STOP", "急停");
private final String code;
private final String description;
DroneCommandEnum(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return code;
}
}

View File

@ -0,0 +1,61 @@
package com.ruoyi.device.api.enums;
/**
* 无人机当前状态枚举
*
* @author ruoyi
* @date 2026-02-04
*/
public enum DroneCurrentStatusEnum {
/**
* 起飞失败
*/
TAKEOFF_FAILED("TAKEOFF_FAILED", "起飞失败"),
/**
* 飞行中
*/
FLYING("FLYING", "飞行中"),
/**
* 指点中
*/
POINTING("POINTING", "指点中"),
/**
* 悬停中
*/
HOVERING("HOVERING", "悬停中"),
/**
* 返航中
*/
RETURNING("RETURNING", "返航中"),
/**
* 降落中
*/
LANDING("LANDING", "降落中");
private final String code;
private final String description;
DroneCurrentStatusEnum(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return code;
}
}

View File

@ -0,0 +1,81 @@
package com.ruoyi.device.api.enums;
/**
* 无人机任务状态枚举
*
* @author ruoyi
* @date 2026-02-04
*/
public enum DroneMissionStatusEnum {
/**
* 空闲
*/
IDLE("IDLE", "空闲"),
/**
* 自检中
*/
SELF_CHECKING("SELF_CHECKING", "自检中"),
/**
* 自检失败
*/
SELF_CHECK_FAILED("SELF_CHECK_FAILED", "自检失败"),
/**
* 起飞中
*/
TAKING_OFF("TAKING_OFF", "起飞中"),
/**
* 起飞失败
*/
TAKEOFF_FAILED("TAKEOFF_FAILED", "起飞失败"),
/**
* 飞行中
*/
FLYING("FLYING", "飞行中"),
/**
* 指点中
*/
POINTING("POINTING", "指点中"),
/**
* 悬停中
*/
HOVERING("HOVERING", "悬停中"),
/**
* 返航中
*/
RETURNING("RETURNING", "返航中"),
/**
* 降落中
*/
LANDING("LANDING", "降落中");
private final String code;
private final String description;
DroneMissionStatusEnum(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return code;
}
}

View File

@ -0,0 +1,46 @@
package com.ruoyi.device.api.enums;
/**
* 无人机速度调整枚举
*
* @author ruoyi
* @date 2026-02-04
*/
public enum DroneSpeedEnum {
/**
* 快速
*/
FAST("FAST", ""),
/**
* 默认
*/
NORMAL("NORMAL", "默认"),
/**
* 慢速
*/
SLOW("SLOW", "");
private final String code;
private final String description;
DroneSpeedEnum(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return code;
}
}

View File

@ -0,0 +1,56 @@
package com.ruoyi.device.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.device.api.RemoteAircraftFlyService;
import com.ruoyi.device.api.domain.DroneCurrentStatusVO;
import com.ruoyi.device.api.domain.DroneFlightControlRequest;
import com.ruoyi.device.api.domain.DroneRealtimeInfoVO;
import com.ruoyi.device.api.domain.DroneTakeoffResponseVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* 无人机飞控服务降级处理
*
* @author ruoyi
* @date 2026-02-04
*/
@Component
public class RemoteAircraftFlyFallbackFactory implements FallbackFactory<RemoteAircraftFlyService>
{
private static final Logger log = LoggerFactory.getLogger(RemoteAircraftFlyFallbackFactory.class);
@Override
public RemoteAircraftFlyService create(Throwable throwable)
{
log.error("无人机飞控服务调用失败:{}", throwable.getMessage());
return new RemoteAircraftFlyService()
{
@Override
public R<Void> flightControl(DroneFlightControlRequest request, String source)
{
return R.fail("无人机飞控命令执行失败:" + throwable.getMessage());
}
@Override
public R<DroneRealtimeInfoVO> getRealtimeInfo(Long taskId, String source)
{
return R.fail("获取无人机实时信息失败:" + throwable.getMessage());
}
@Override
public R<DroneCurrentStatusVO> getCurrentStatus(Long dockId, String source)
{
return R.fail("查询无人机当前状态失败:" + throwable.getMessage());
}
@Override
public R<DroneTakeoffResponseVO> takeoff(Long dockId, String source)
{
return R.fail("无人机起飞失败:" + throwable.getMessage());
}
};
}
}