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 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 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 getTaskById(@PathVariable("taskId") Long taskId) { return R.ok(TaskControllerConvert.from(taskService.getTaskById(taskId))); } // /** // * 复杂条件查询任务列表 // */ // @PostMapping("/list") // public R> list(@RequestBody TaskQueryDTO queryDTO) // { // return R.ok(TaskControllerConvert.fromList(taskService.getTaskList(queryDTO))); // } /** * 更新任务 */ @PutMapping public R 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 deleteTask(@PathVariable("taskId") Long taskId) { log.info("deleteTask {}", taskId); boolean result = taskService.deleteTask(taskId); return R.ok(result); } /** * 根据无人机ID查询任务列表 */ @GetMapping("/uav/{uavId}") public R> getTaskByUavId(@PathVariable("uavId") String uavId) { return R.ok(TaskControllerConvert.fromList(taskService.getTaskByUavId(uavId))); } /** * 根据无人机ID获取最新的一条任务 */ @GetMapping("/uav/current/{uavId}") public R getCurrentTaskByUavId(@PathVariable("uavId") String uavId) { return R.ok(TaskControllerConvert.from(taskService.getCurrentTaskByUavId(uavId))); } /** * 修改执行状态 */ @PutMapping("/status/{taskId}") public R 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 updateTaskRecovery(@PathVariable("taskId") Long taskId) { boolean result = taskService.updateTaskRecovery(taskId); return R.ok(result); } /** * 按年统计任务 */ @PostMapping("/stat/year") public R getTaskStatByYear(@RequestBody TaskStatQueryVO queryDTO) { return R.ok(TaskStatControllerConvert.fromYear(taskService.getTaskStatByYear(TaskStatControllerConvert.toQuery(queryDTO)))); } /** * 按年月统计任务 */ @PostMapping("/stat/month") public R getTaskStatByMonth(@RequestBody TaskStatQueryVO queryDTO) { return R.ok(TaskStatControllerConvert.fromMonth(taskService.getTaskStatByMonth(TaskStatControllerConvert.toQuery(queryDTO)))); } }