Compare commits
6 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
709587e0b6 | |
|
|
941eccf9a7 | |
|
|
0b28479c95 | |
|
|
da84164744 | |
|
|
2f4b81fac0 | |
|
|
ef3774ef2f |
|
|
@ -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()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按年统计任务
|
* 按年统计任务
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -67,4 +67,11 @@ public interface ITaskDomain {
|
||||||
* @return 任务领域模型
|
* @return 任务领域模型
|
||||||
*/
|
*/
|
||||||
Task getCurrentTaskByUavId(String uavId);
|
Task getCurrentTaskByUavId(String uavId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询待自动执行的任务(最近5分钟内)
|
||||||
|
*
|
||||||
|
* @return 任务列表
|
||||||
|
*/
|
||||||
|
List<Task> getPendingTasksForAutoExecute();
|
||||||
}
|
}
|
||||||
|
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -65,4 +65,11 @@ public interface TaskInfoMapper {
|
||||||
* @return 任务信息
|
* @return 任务信息
|
||||||
*/
|
*/
|
||||||
TaskInfoEntity selectCurrentTaskByUavId(String uavId);
|
TaskInfoEntity selectCurrentTaskByUavId(String uavId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询待自动执行的任务(最近5分钟内)
|
||||||
|
*
|
||||||
|
* @return 待执行任务信息集合
|
||||||
|
*/
|
||||||
|
List<TaskInfoEntity> selectPendingTasksForAutoExecute();
|
||||||
}
|
}
|
||||||
|
|
@ -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 查询条件
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
'自动扫描并执行待执行的飞行任务(定时任务和周期任务)'
|
||||||
|
);
|
||||||
|
|
@ -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 <= now()
|
||||||
|
and start_time > date_sub(now(), interval 5 minute)
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
Loading…
Reference in New Issue