添加controller层接口

This commit is contained in:
孙小云 2026-03-06 14:33:35 +08:00
parent da059bf1ad
commit 3e1e4d5e95
9 changed files with 694 additions and 8 deletions

View File

@ -22,6 +22,20 @@
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-core</artifactId> <artifactId>ruoyi-common-core</artifactId>
</dependency> </dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!-- Spring Cloud OpenFeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>

View File

@ -0,0 +1,81 @@
package com.ruoyi.task.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.task.api.domain.TaskPlanDTO;
import com.ruoyi.task.api.domain.TaskPlanQueryDTO;
import com.ruoyi.task.api.factory.RemoteTaskPlanFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 任务计划服务
*
* @author ruoyi
* @date 2026-03-06
*/
@FeignClient(contextId = "remoteTaskPlanService", value = ServiceNameConstants.TASK_SERVICE, fallbackFactory = RemoteTaskPlanFallbackFactory.class)
public interface RemoteTaskPlanService {
/**
* 创建定时任务计划
*
* @param taskPlanDTO 任务计划DTO
* @param source 请求来源
* @return 结果
*/
@PostMapping("/task/plan/timed")
R<Long> createTimedTaskPlan(@RequestBody TaskPlanDTO taskPlanDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 创建周期任务计划
*
* @param taskPlanDTO 任务计划DTO
* @param source 请求来源
* @return 结果
*/
@PostMapping("/task/plan/cycle")
R<Long> createCycleTaskPlan(@RequestBody TaskPlanDTO taskPlanDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 根据ID获取任务计划
*
* @param planId 计划ID
* @param source 请求来源
* @return 结果
*/
@GetMapping("/task/plan/{planId}")
R<TaskPlanDTO> getTaskPlanById(@PathVariable("planId") Long planId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 查询任务计划列表
*
* @param queryDTO 查询条件
* @param source 请求来源
* @return 结果
*/
@PostMapping("/task/plan/list")
R<List<TaskPlanDTO>> getTaskPlanList(@RequestBody TaskPlanQueryDTO queryDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 更新任务计划
*
* @param taskPlanDTO 任务计划DTO
* @param source 请求来源
* @return 结果
*/
@PutMapping("/task/plan")
R<Boolean> updateTaskPlan(@RequestBody TaskPlanDTO taskPlanDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 删除任务计划
*
* @param planId 计划ID
* @param source 请求来源
* @return 结果
*/
@DeleteMapping("/task/plan/{planId}")
R<Boolean> deleteTaskPlan(@PathVariable("planId") Long planId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -3,12 +3,15 @@ package com.ruoyi.task.api;
import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.task.api.domain.TaskDTO;
import com.ruoyi.task.api.domain.TaskQueryDTO;
import com.ruoyi.task.api.domain.TaskTempVO; import com.ruoyi.task.api.domain.TaskTempVO;
import com.ruoyi.task.api.enums.StatusEnum;
import com.ruoyi.task.api.factory.RemoteTaskFallbackFactory; import com.ruoyi.task.api.factory.RemoteTaskFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader; import java.util.List;
/** /**
* 任务服务 * 任务服务
@ -20,12 +23,95 @@ import org.springframework.web.bind.annotation.RequestHeader;
public interface RemoteTaskService public interface RemoteTaskService
{ {
/** /**
* 根据ID查询任务信息 * 根据ID查询任务临时表信息
* *
* @param id 任务ID * @param id 任务临时表ID
* @param source 请求来源 * @param source 请求来源
* @return 结果 * @return 结果
*/ */
@GetMapping("/task/temp/{id}") @GetMapping("/task/temp/{id}")
R<TaskTempVO> getTaskById(@PathVariable("id") String id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); R<TaskTempVO> getTaskTempById(@PathVariable("id") String id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 创建无关联计划的任务
*
* @param taskDTO 任务DTO
* @param source 请求来源
* @return 结果
*/
@PostMapping("/task")
R<Long> createTaskWithoutPlan(@RequestBody TaskDTO taskDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 根据ID获取任务
*
* @param taskId 任务ID
* @param source 请求来源
* @return 结果
*/
@GetMapping("/task/{taskId}")
R<TaskDTO> getTaskById(@PathVariable("taskId") Long taskId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 查询任务列表
*
* @param queryDTO 查询条件
* @param source 请求来源
* @return 结果
*/
@PostMapping("/task/list")
R<List<TaskDTO>> getTaskList(@RequestBody TaskQueryDTO queryDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 更新任务
*
* @param taskDTO 任务DTO
* @param source 请求来源
* @return 结果
*/
@PutMapping("/task")
R<Boolean> updateTask(@RequestBody TaskDTO taskDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 删除任务
*
* @param taskId 任务ID
* @param source 请求来源
* @return 结果
*/
@DeleteMapping("/task/{taskId}")
R<Boolean> deleteTask(@PathVariable("taskId") Long taskId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 根据无人机ID查询任务列表
*
* @param uavId 无人机ID
* @param source 请求来源
* @return 结果
*/
@GetMapping("/task/uav/{uavId}")
R<List<TaskDTO>> getTaskByUavId(@PathVariable("uavId") Long uavId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 根据无人机ID获取最新的一条任务
*
* @param uavId 无人机ID
* @param source 请求来源
* @return 结果
*/
@GetMapping("/task/uav/current/{uavId}")
R<TaskDTO> getCurrentTaskByUavId(@PathVariable("uavId") Long uavId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 修改执行状态
*
* @param taskId 任务ID
* @param status 任务状态
* @param source 请求来源
* @return 结果
*/
@PutMapping("/task/status/{taskId}")
R<Boolean> updateTaskStatus(@PathVariable("taskId") Long taskId, @RequestParam("status") StatusEnum status, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
} }

View File

@ -0,0 +1,203 @@
package com.ruoyi.task.api.domain;
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
import com.ruoyi.task.api.enums.StatusEnum;
import com.ruoyi.task.api.enums.TaskCategoryEnum;
import com.ruoyi.task.api.enums.TaskTypeEnum;
import java.util.Date;
/**
* 任务数据传输对象
*
* @author ruoyi
* @date 2026-03-05
*/
public class TaskDTO {
/** 任务ID */
private Long id;
/** 计划ID可为空如一键起飞 */
private Long planId;
/** 任务名称 */
private String taskName;
/** 任务类别(如人工执飞) */
private TaskCategoryEnum taskCategory;
/** 任务类型(如一键起飞) */
private TaskTypeEnum taskType;
/** 执行类型(单次执行、连续执行) */
private ExecuteTypeEnum executeType;
/** 航线ID */
private Long routeId;
/** 无人机ID */
private Long uavId;
/** 状态 */
private StatusEnum status;
/** 开始时间 */
private Date startTime;
/** 结束时间 */
private Date endTime;
/** 实际开始时间 */
private Date actualStartTime;
/** 实际结束时间 */
private Date actualEndTime;
/** 描述 */
private String description;
/** 备注 */
private String remark;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getPlanId() {
return planId;
}
public void setPlanId(Long planId) {
this.planId = planId;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public TaskCategoryEnum getTaskCategory() {
return taskCategory;
}
public void setTaskCategory(TaskCategoryEnum taskCategory) {
this.taskCategory = taskCategory;
}
public TaskTypeEnum getTaskType() {
return taskType;
}
public void setTaskType(TaskTypeEnum taskType) {
this.taskType = taskType;
}
public ExecuteTypeEnum getExecuteType() {
return executeType;
}
public void setExecuteType(ExecuteTypeEnum executeType) {
this.executeType = executeType;
}
public Long getRouteId() {
return routeId;
}
public void setRouteId(Long routeId) {
this.routeId = routeId;
}
public Long getUavId() {
return uavId;
}
public void setUavId(Long uavId) {
this.uavId = uavId;
}
public StatusEnum getStatus() {
return status;
}
public void setStatus(StatusEnum status) {
this.status = status;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public Date getActualStartTime() {
return actualStartTime;
}
public void setActualStartTime(Date actualStartTime) {
this.actualStartTime = actualStartTime;
}
public Date getActualEndTime() {
return actualEndTime;
}
public void setActualEndTime(Date actualEndTime) {
this.actualEndTime = actualEndTime;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return "TaskDTO{" +
"id=" + id +
", planId=" + planId +
", taskName='" + taskName + '\'' +
", taskCategory=" + taskCategory +
", taskType=" + taskType +
", executeType=" + executeType +
", routeId=" + routeId +
", uavId=" + uavId +
", status=" + status +
", startTime=" + startTime +
", endTime=" + endTime +
", actualStartTime=" + actualStartTime +
", actualEndTime=" + actualEndTime +
", description='" + description + '\'' +
'}';
}
}

View File

@ -0,0 +1,87 @@
package com.ruoyi.task.api.domain;
import com.ruoyi.task.api.enums.*;
import lombok.Data;
import java.util.Date;
/**
* 任务计划DTO
*
* @author ruoyi
* @date 2026-03-06
*/
@Data
public class TaskPlanDTO {
/**
* 任务计划ID
*/
private Long id;
/**
* 计划名称
*/
private String planName;
/**
* 计划类型
*/
private PlanTypeEnum planType;
/**
* 执行类型
*/
private ExecuteTypeEnum executeType;
/**
* 周期类型
*/
private CycleTypeEnum cycleType;
/**
* 周期值
*/
private String cycleValue;
/**
* 开始时间
*/
private Date startDate;
/**
* 结束时间
*/
private Date endDate;
/**
* 执行时间
*/
private Date executeTime;
/**
* 航线ID
*/
private Long routeId;
/**
* 无人机ID
*/
private Long uavId;
/**
* 状态
*/
private StatusEnum status;
/**
* 描述
*/
private String description;
/**
* 持续时间分钟
*/
private Integer duration;
}

View File

@ -0,0 +1,53 @@
package com.ruoyi.task.api.domain;
import com.ruoyi.task.api.enums.CycleTypeEnum;
import com.ruoyi.task.api.enums.PlanTypeEnum;
import lombok.Data;
import java.util.Date;
/**
* 任务计划查询DTO
*
* @author ruoyi
* @date 2026-03-06
*/
@Data
public class TaskPlanQueryDTO {
/**
* 任务计划ID
*/
private Long id;
/**
* 计划类型
*/
private PlanTypeEnum planType;
/**
* 周期类型
*/
private CycleTypeEnum cycleType;
/**
* 航线ID
*/
private Long routeId;
/**
* 无人机ID
*/
private Long uavId;
/**
* 开始时间起始
*/
private Date startDateStart;
/**
* 开始时间结束
*/
private Date startDateEnd;
}

View File

@ -0,0 +1,53 @@
package com.ruoyi.task.api.domain;
import com.ruoyi.task.api.enums.CycleTypeEnum;
import com.ruoyi.task.api.enums.PlanTypeEnum;
import lombok.Data;
import java.util.Date;
/**
* 任务查询DTO
*
* @author ruoyi
* @date 2026-03-06
*/
@Data
public class TaskQueryDTO {
/**
* 任务ID
*/
private Long id;
/**
* 计划类型
*/
private PlanTypeEnum planType;
/**
* 周期类型
*/
private CycleTypeEnum cycleType;
/**
* 航线ID
*/
private Long routeId;
/**
* 无人机ID
*/
private Long uavId;
/**
* 开始时间起始
*/
private Date startDateStart;
/**
* 开始时间结束
*/
private Date startDateEnd;
}

View File

@ -2,12 +2,18 @@ package com.ruoyi.task.api.factory;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.task.api.RemoteTaskService; import com.ruoyi.task.api.RemoteTaskService;
import com.ruoyi.task.api.domain.TaskDTO;
import com.ruoyi.task.api.domain.TaskQueryDTO;
import com.ruoyi.task.api.domain.TaskTempVO; import com.ruoyi.task.api.domain.TaskTempVO;
import com.ruoyi.task.api.enums.StatusEnum;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
/** /**
* 任务服务降级处理 * 任务服务降级处理
* *
@ -26,9 +32,51 @@ public class RemoteTaskFallbackFactory implements FallbackFactory<RemoteTaskServ
return new RemoteTaskService() return new RemoteTaskService()
{ {
@Override @Override
public R<TaskTempVO> getTaskById(String id, String source) public R<TaskTempVO> getTaskTempById(String id, String source)
{ {
return R.fail("获取任务信息失败:" + throwable.getMessage()); return R.fail("获取任务临时表信息失败:" + throwable.getMessage());
}
@Override
public R<Long> createTaskWithoutPlan(TaskDTO taskDTO, String source) {
return R.fail("创建任务失败");
}
@Override
public R<TaskDTO> getTaskById(Long taskId, String source) {
return R.fail("获取任务失败");
}
@Override
public R<List<TaskDTO>> getTaskList(TaskQueryDTO queryDTO, String source) {
return R.ok(Collections.emptyList());
}
@Override
public R<Boolean> updateTask(TaskDTO taskDTO, String source) {
return R.fail("更新任务失败");
}
@Override
public R<Boolean> deleteTask(Long taskId, String source) {
return R.fail("删除任务失败");
}
@Override
public R<List<TaskDTO>> getTaskByUavId(Long uavId, String source) {
return R.ok(Collections.emptyList());
}
@Override
public R<TaskDTO> getCurrentTaskByUavId(Long uavId, String source) {
return R.fail("获取最新任务失败");
}
@Override
public R<Boolean> updateTaskStatus(Long taskId, StatusEnum status, String source) {
return R.fail("修改执行状态失败");
} }
}; };
} }

View File

@ -0,0 +1,61 @@
package com.ruoyi.task.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.task.api.RemoteTaskPlanService;
import com.ruoyi.task.api.domain.TaskPlanDTO;
import com.ruoyi.task.api.domain.TaskPlanQueryDTO;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
/**
* 任务计划服务降级处理
*
* @author ruoyi
* @date 2026-03-06
*/
@Component
public class RemoteTaskPlanFallbackFactory implements FallbackFactory<RemoteTaskPlanService>
{
private static final Logger log = LoggerFactory.getLogger(RemoteTaskPlanFallbackFactory.class);
@Override
public RemoteTaskPlanService create(Throwable throwable) {
log.error("任务计划服务调用失败: {}", throwable.getMessage());
return new RemoteTaskPlanService() {
@Override
public R<Long> createTimedTaskPlan(TaskPlanDTO taskPlanDTO, String source) {
return R.fail("创建定时任务计划失败");
}
@Override
public R<Long> createCycleTaskPlan(TaskPlanDTO taskPlanDTO, String source) {
return R.fail("创建周期任务计划失败");
}
@Override
public R<TaskPlanDTO> getTaskPlanById(Long planId, String source) {
return R.fail("获取任务计划失败");
}
@Override
public R<List<TaskPlanDTO>> getTaskPlanList(TaskPlanQueryDTO queryDTO, String source) {
return R.ok(Collections.emptyList());
}
@Override
public R<Boolean> updateTaskPlan(TaskPlanDTO taskPlanDTO, String source) {
return R.fail("更新任务计划失败");
}
@Override
public R<Boolean> deleteTaskPlan(Long planId, String source) {
return R.fail("删除任务计划失败");
}
};
}
}