a-tuoheng-task/src/main/java/com/ruoyi/task/controller/TaskController.java

175 lines
5.5 KiB
Java

package com.ruoyi.task.controller;
import com.alibaba.fastjson.JSON;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.device.api.RemoteAircraftFlyService;
import com.ruoyi.device.api.domain.DroneTakeoffRequest;
import com.ruoyi.task.api.domain.TaskStatByMonthVO;
import com.ruoyi.task.api.domain.TaskStatQueryVO;
import com.ruoyi.task.api.domain.TaskVO;
import com.ruoyi.task.api.enums.TaskCategoryEnum;
import com.ruoyi.task.api.enums.TaskTypeEnum;
import com.ruoyi.task.api.enums.StatusEnum;
import com.ruoyi.task.service.api.ITaskService;
import com.ruoyi.task.controller.convert.TaskControllerConvert;
import com.ruoyi.task.controller.convert.TaskStatControllerConvert;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 任务Controller
*
* @author ruoyi
* @date 2026-01-17
*/
@RestController
@RequestMapping("/task")
@Slf4j
public class TaskController extends BaseController
{
@Autowired
private ITaskService taskService;
@Autowired
private RemoteAircraftFlyService remoteAircraftFlyService;
/**
* 创建普通-立即任务
*/
@PostMapping
public R<Long> createTaskWithoutPlan(@RequestBody TaskVO taskVO)
{
taskVO.setTaskType(TaskTypeEnum.IMMEDIATELY);
taskVO.setTaskCategory(TaskCategoryEnum.NORMAL);
log.info("Create IMMEDIATELY {}", JSON.toJSONString(taskVO));
Long taskId = taskService.createTaskWithoutPlan(TaskControllerConvert.to(taskVO));
DroneTakeoffRequest request = new DroneTakeoffRequest();
request.setTaskId(taskId);
request.setAirlineFileUrl(taskVO.getRouteUrl());
request.setSn(taskVO.getUavId());
log.info("IMMEDIATELY {}", JSON.toJSONString(request));
remoteAircraftFlyService.takeoff(request);
return R.ok(taskId);
}
@PostMapping(value = "/oneclick")
public R<Long> createOneClickTaskWithoutPlan(@RequestBody TaskVO taskVO)
{
taskVO.setTaskType(TaskTypeEnum.ONE_CLICK);
taskVO.setTaskCategory(TaskCategoryEnum.MANUAL);
log.info("Create ONE_CLICK {}", JSON.toJSONString(taskVO));
Long taskId = taskService.createTaskWithoutPlan(TaskControllerConvert.to(taskVO));
DroneTakeoffRequest request = new DroneTakeoffRequest();
request.setTaskId(taskId);
request.setAirlineFileUrl(taskVO.getRouteUrl());
request.setSn(taskVO.getUavId());
log.info("ONE_CLICK {}", JSON.toJSONString(request));
remoteAircraftFlyService.takeoff(request);
return R.ok(taskId);
}
/**
* 获取任务详细信息
*/
@GetMapping(value = "/{taskId}")
public R<TaskVO> getTaskById(@PathVariable("taskId") Long taskId)
{
return R.ok(TaskControllerConvert.from(taskService.getTaskById(taskId)));
}
// /**
// * 复杂条件查询任务列表
// */
// @PostMapping("/list")
// public R<List<com.ruoyi.task.api.domain.TaskDTO>> list(@RequestBody TaskQueryDTO queryDTO)
// {
// return R.ok(TaskControllerConvert.fromList(taskService.getTaskList(queryDTO)));
// }
/**
* 更新任务
*/
@PutMapping
public R<Boolean> updateTask(@RequestBody TaskVO taskVO)
{
log.info("updateTask {}", JSON.toJSONString(taskVO));
boolean result = taskService.updateTask(TaskControllerConvert.to(taskVO));
return R.ok(result);
}
/**
* 删除任务
*/
@DeleteMapping("/{taskId}")
public R<Boolean> deleteTask(@PathVariable("taskId") Long taskId)
{
log.info("deleteTask {}", taskId);
boolean result = taskService.deleteTask(taskId);
return R.ok(result);
}
/**
* 根据无人机ID查询任务列表
*/
@GetMapping("/uav/{uavId}")
public R<List<TaskVO>> getTaskByUavId(@PathVariable("uavId") String uavId)
{
return R.ok(TaskControllerConvert.fromList(taskService.getTaskByUavId(uavId)));
}
/**
* 根据无人机ID获取最新的一条任务
*/
@GetMapping("/uav/current/{uavId}")
public R<TaskVO> getCurrentTaskByUavId(@PathVariable("uavId") String uavId)
{
return R.ok(TaskControllerConvert.from(taskService.getCurrentTaskByUavId(uavId)));
}
/**
* 修改执行状态
*/
@PutMapping("/status/{taskId}")
public R<Boolean> updateTaskStatus(@PathVariable("taskId") Long taskId, @RequestParam("status") StatusEnum status)
{
boolean result = taskService.updateTaskStatus(taskId, status);
return R.ok(result);
}
/**
* 设置 recovery 为true
* @param taskId
* @return
*/
@PutMapping("/recovery/{taskId}")
public R<Boolean> updateTaskRecovery(@PathVariable("taskId") Long taskId)
{
boolean result = taskService.updateTaskRecovery(taskId);
return R.ok(result);
}
/**
* 按年统计任务
*/
@PostMapping("/stat/year")
public R<com.ruoyi.task.api.domain.TaskStatByYearDTO> getTaskStatByYear(@RequestBody TaskStatQueryVO queryDTO)
{
return R.ok(TaskStatControllerConvert.fromYear(taskService.getTaskStatByYear(TaskStatControllerConvert.toQuery(queryDTO))));
}
/**
* 按年月统计任务
*/
@PostMapping("/stat/month")
public R<TaskStatByMonthVO> getTaskStatByMonth(@RequestBody TaskStatQueryVO queryDTO)
{
return R.ok(TaskStatControllerConvert.fromMonth(taskService.getTaskStatByMonth(TaskStatControllerConvert.toQuery(queryDTO))));
}
}