Compare commits

...

6 Commits
test ... main

Author SHA1 Message Date
孙小云 709587e0b6 xx 2026-03-24 19:42:55 +08:00
孙小云 941eccf9a7 xx 2026-03-24 19:39:02 +08:00
孙小云 0b28479c95 xx 2026-03-24 19:34:28 +08:00
孙小云 da84164744 添加任务接口 2026-03-24 19:13:51 +08:00
孙小云 2f4b81fac0 添加日志 2026-03-24 08:33:07 +08:00
孙小云 ef3774ef2f 添加错误原因 2026-03-23 18:20:13 +08:00
8 changed files with 96 additions and 9 deletions

View File

@ -5,6 +5,7 @@ import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.device.api.RemoteAircraftFlyService; import com.ruoyi.device.api.RemoteAircraftFlyService;
import com.ruoyi.device.api.domain.DroneTakeoffRequest; import com.ruoyi.device.api.domain.DroneTakeoffRequest;
import com.ruoyi.task.api.domain.TaskResultVO;
import com.ruoyi.task.api.domain.TaskStatByMonthVO; import com.ruoyi.task.api.domain.TaskStatByMonthVO;
import com.ruoyi.task.api.domain.TaskStatQueryVO; import com.ruoyi.task.api.domain.TaskStatQueryVO;
import com.ruoyi.task.api.domain.TaskVO; import com.ruoyi.task.api.domain.TaskVO;
@ -135,8 +136,8 @@ public class TaskController extends BaseController
/** /**
* 修改执行状态 * 修改执行状态
*/ */
@PutMapping("/status/{taskId}") @PostMapping("/status/{taskId}")
public R<Boolean> updateTaskStatus(@PathVariable("taskId") Long taskId, @RequestParam("status") StatusEnum status) public R<Boolean> updateTaskStatus(@PathVariable("taskId") Long taskId, @RequestBody() TaskResultVO status)
{ {
boolean result = taskService.updateTaskStatus(taskId, status); boolean result = taskService.updateTaskStatus(taskId, status);
return R.ok(result); return R.ok(result);
@ -155,6 +156,16 @@ public class TaskController extends BaseController
return R.ok(result); return R.ok(result);
} }
/**
* 查询待自动执行的任务
* @return 待执行任务列表
*/
@GetMapping("/pending-auto")
public R<List<TaskVO>> getPendingTasksForAutoExecute()
{
return R.ok(TaskControllerConvert.fromList(taskService.getPendingTasksForAutoExecute()));
}
/** /**
* 按年统计任务 * 按年统计任务
*/ */

View File

@ -67,4 +67,11 @@ public interface ITaskDomain {
* @return 任务领域模型 * @return 任务领域模型
*/ */
Task getCurrentTaskByUavId(String uavId); Task getCurrentTaskByUavId(String uavId);
/**
* 查询待自动执行的任务最近5分钟内
*
* @return 任务列表
*/
List<Task> getPendingTasksForAutoExecute();
} }

View File

@ -92,4 +92,12 @@ public class TaskDomainImpl implements ITaskDomain {
TaskInfoEntity entity = taskInfoMapper.selectCurrentTaskByUavId(uavId); TaskInfoEntity entity = taskInfoMapper.selectCurrentTaskByUavId(uavId);
return TaskConvert.toModel(entity); return TaskConvert.toModel(entity);
} }
@Override
public List<Task> getPendingTasksForAutoExecute() {
List<TaskInfoEntity> entityList = taskInfoMapper.selectPendingTasksForAutoExecute();
return entityList.stream()
.map(TaskConvert::toModel)
.collect(Collectors.toList());
}
} }

View File

@ -65,4 +65,11 @@ public interface TaskInfoMapper {
* @return 任务信息 * @return 任务信息
*/ */
TaskInfoEntity selectCurrentTaskByUavId(String uavId); TaskInfoEntity selectCurrentTaskByUavId(String uavId);
/**
* 查询待自动执行的任务最近5分钟内
*
* @return 待执行任务信息集合
*/
List<TaskInfoEntity> selectPendingTasksForAutoExecute();
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.task.service.api; package com.ruoyi.task.service.api;
import com.ruoyi.task.api.domain.TaskResultVO;
import com.ruoyi.task.api.enums.StatusEnum; import com.ruoyi.task.api.enums.StatusEnum;
import com.ruoyi.task.service.dto.TaskDTO; import com.ruoyi.task.service.dto.TaskDTO;
import com.ruoyi.task.service.dto.TaskQueryDTO; import com.ruoyi.task.service.dto.TaskQueryDTO;
@ -80,7 +81,7 @@ public interface ITaskService {
* @param status 任务状态 * @param status 任务状态
* @return 是否成功 * @return 是否成功
*/ */
boolean updateTaskStatus(Long taskId, StatusEnum status); boolean updateTaskStatus(Long taskId, TaskResultVO status);
/** /**
* 设置 recovery true * 设置 recovery true
@ -89,6 +90,12 @@ public interface ITaskService {
*/ */
boolean updateTaskRecovery(Long taskId); boolean updateTaskRecovery(Long taskId);
/**
* 查询待自动执行的任务
* @return 待执行任务列表
*/
List<TaskDTO> getPendingTasksForAutoExecute();
/** /**
* 按年统计任务 * 按年统计任务
* @param queryDTO 查询条件 * @param queryDTO 查询条件

View File

@ -5,7 +5,9 @@ import com.ruoyi.airline.api.domain.AirlineFileVO;
import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.device.api.RemoteAircraftService; import com.ruoyi.device.api.RemoteAircraftService;
import com.ruoyi.task.api.domain.TaskResultVO;
import com.ruoyi.task.api.enums.StatusEnum; import com.ruoyi.task.api.enums.StatusEnum;
import com.ruoyi.task.api.enums.TaskTypeEnum;
import com.ruoyi.task.domain.api.ITaskDomain; import com.ruoyi.task.domain.api.ITaskDomain;
import com.ruoyi.task.domain.api.ITaskPlanDomain; import com.ruoyi.task.domain.api.ITaskPlanDomain;
import com.ruoyi.task.domain.model.Task; import com.ruoyi.task.domain.model.Task;
@ -146,31 +148,37 @@ public class TaskServiceImpl implements ITaskService {
// } // }
@Override @Override
public boolean updateTaskStatus(Long taskId, StatusEnum status) { public boolean updateTaskStatus(Long taskId, TaskResultVO status) {
Task task = taskDomain.getTaskById(taskId); Task task = taskDomain.getTaskById(taskId);
if (task != null) { if (task != null) {
task.setStatus(status); task.setStatus(status.getStatus());
// 如果状态变为自检中 // 如果状态变为自检中
if (status == StatusEnum.CHECKING) { if (status.getStatus() == StatusEnum.CHECKING) {
task.setActualStartTime(new java.util.Date()); task.setActualStartTime(new java.util.Date());
if(Objects.isNull(task.getStartTime())){ if(Objects.isNull(task.getStartTime())){
task.setStartTime(new java.util.Date()); task.setStartTime(new java.util.Date());
} }
//没有配置开始时间,可以理解为是立马执行 //没有配置开始时间,可以理解为是立马执行
} else if(status == StatusEnum.PENDING) { } else if(status.getStatus() == StatusEnum.PENDING) {
if(Objects.isNull(task.getStartTime())){ if(Objects.isNull(task.getStartTime())){
task.setStartTime(new java.util.Date()); task.setStartTime(new java.util.Date());
} }
//已完成 失败 取消 的时候, 配置结束时间 //已完成 失败 取消 的时候, 配置结束时间
} else if(status != StatusEnum.RUNNING) { } else if(status.getStatus() != StatusEnum.RUNNING) {
task.setActualEndTime(new java.util.Date()); task.setActualEndTime(new java.util.Date());
if(Objects.isNull(task.getEndTime())){ if(Objects.isNull(task.getEndTime())){
task.setEndTime(new java.util.Date()); task.setEndTime(new java.util.Date());
} }
if(status == StatusEnum.FAILED) { if(status.getStatus() == StatusEnum.FAILED) {
task.setRecovery(false); task.setRecovery(false);
task.setRemark(status.getErrMsg());
} }
} }
String errMsg = status.getErrMsg();
if (errMsg != null && errMsg.length() > 500) {
errMsg = errMsg.substring(0, 500); // 保留前500个字符
}
task.setRemark(errMsg);
Task result = taskDomain.updateTask(task); Task result = taskDomain.updateTask(task);
return result != null; return result != null;
} }
@ -361,4 +369,10 @@ public class TaskServiceImpl implements ITaskService {
result.setDays(days); result.setDays(days);
return result; return result;
} }
@Override
public List<TaskDTO> getPendingTasksForAutoExecute() {
List<Task> tasks = taskDomain.getPendingTasksForAutoExecute();
return TaskDTOConvert.toDTOList(tasks);
}
} }

View File

@ -0,0 +1,26 @@
-- 添加飞行任务自动执行定时任务
INSERT INTO sys_job (
job_id,
job_name,
job_group,
invoke_target,
cron_expression,
misfire_policy,
concurrent,
status,
create_by,
create_time,
remark
) VALUES (
(SELECT COALESCE(MAX(job_id), 0) + 1 FROM (SELECT job_id FROM sys_job) AS t),
'飞行任务自动执行',
'DEFAULT',
'taskAutoExecuteJob.execute()',
'0 */1 * * * ?',
'1',
'1',
'0',
'admin',
NOW(),
'自动扫描并执行待执行的飞行任务(定时任务和周期任务)'
);

View File

@ -156,4 +156,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
limit 1 limit 1
</select> </select>
<select id="selectPendingTasksForAutoExecute" resultMap="TaskInfoResult">
<include refid="selectTaskInfoVo"/>
where status = 'PENDING'
and task_type in ('TIMED', 'CYCLE')
and start_time &lt;= now()
and start_time &gt; date_sub(now(), interval 5 minute)
</select>
</mapper> </mapper>