2026-03-05 17:14:10 +08:00
|
|
|
|
package com.ruoyi.task.service.impl;
|
|
|
|
|
|
|
2026-03-06 09:19:18 +08:00
|
|
|
|
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
|
|
|
|
import com.ruoyi.task.api.enums.PlanTypeEnum;
|
|
|
|
|
|
import com.ruoyi.task.api.enums.StatusEnum;
|
2026-03-06 09:40:07 +08:00
|
|
|
|
import com.ruoyi.task.api.enums.TaskCategoryEnum;
|
|
|
|
|
|
import com.ruoyi.task.api.enums.TaskTypeEnum;
|
2026-03-06 09:19:18 +08:00
|
|
|
|
import com.ruoyi.task.domain.api.ITaskDomain;
|
2026-03-05 17:14:10 +08:00
|
|
|
|
import com.ruoyi.task.domain.api.ITaskPlanDomain;
|
2026-03-06 09:19:18 +08:00
|
|
|
|
import com.ruoyi.task.domain.model.Task;
|
2026-03-05 17:14:10 +08:00
|
|
|
|
import com.ruoyi.task.domain.model.TaskPlan;
|
2026-03-05 17:15:01 +08:00
|
|
|
|
import com.ruoyi.task.service.api.ITaskPlanService;
|
2026-03-05 17:14:10 +08:00
|
|
|
|
import com.ruoyi.task.service.convert.TaskPlanDTOConvert;
|
2026-03-06 09:19:18 +08:00
|
|
|
|
import com.ruoyi.task.service.convert.TaskDTOConvert;
|
2026-03-05 17:14:10 +08:00
|
|
|
|
import com.ruoyi.task.service.dto.TaskPlanDTO;
|
|
|
|
|
|
import com.ruoyi.task.service.dto.TaskPlanQueryDTO;
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
|
public class TaskPlanServiceImpl implements ITaskPlanService {
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
private ITaskPlanDomain taskPlanDomain;
|
|
|
|
|
|
|
2026-03-06 09:19:18 +08:00
|
|
|
|
@Autowired
|
|
|
|
|
|
private ITaskDomain taskDomain;
|
|
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
@Override
|
|
|
|
|
|
public Long createTimedTaskPlan(TaskPlanDTO taskPlanDTO) {
|
|
|
|
|
|
TaskPlan taskPlan = TaskPlanDTOConvert.toDomain(taskPlanDTO);
|
2026-03-06 09:40:07 +08:00
|
|
|
|
|
|
|
|
|
|
// 校验PlanTypeEnum
|
|
|
|
|
|
if (taskPlan.getPlanType() != null && taskPlan.getPlanType() == PlanTypeEnum.CYCLE) {
|
|
|
|
|
|
throw new IllegalArgumentException("定时任务计划不能设置为周期类型");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果PlanTypeEnum为空,设置为定时类型
|
|
|
|
|
|
if (taskPlan.getPlanType() == null) {
|
|
|
|
|
|
taskPlan.setPlanType(PlanTypeEnum.TIMED);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
TaskPlan result = taskPlanDomain.createTimedTaskPlan(taskPlan);
|
2026-03-06 09:19:18 +08:00
|
|
|
|
|
|
|
|
|
|
// 创建对应的任务记录
|
|
|
|
|
|
createTaskFromPlan(result);
|
2026-03-06 09:40:07 +08:00
|
|
|
|
return result.getId();
|
2026-03-05 17:14:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public Long createCycleTaskPlan(TaskPlanDTO taskPlanDTO) {
|
|
|
|
|
|
TaskPlan taskPlan = TaskPlanDTOConvert.toDomain(taskPlanDTO);
|
2026-03-06 09:40:07 +08:00
|
|
|
|
|
|
|
|
|
|
// 校验PlanTypeEnum
|
|
|
|
|
|
if (taskPlan.getPlanType() != null && taskPlan.getPlanType() == PlanTypeEnum.TIMED) {
|
|
|
|
|
|
throw new IllegalArgumentException("周期任务计划不能设置为定时类型");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果PlanTypeEnum为空,设置为周期类型
|
|
|
|
|
|
if (taskPlan.getPlanType() == null) {
|
|
|
|
|
|
taskPlan.setPlanType(PlanTypeEnum.CYCLE);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
TaskPlan result = taskPlanDomain.createCycleTaskPlan(taskPlan);
|
2026-03-06 09:19:18 +08:00
|
|
|
|
|
|
|
|
|
|
// 创建对应的任务记录
|
|
|
|
|
|
createTaskFromPlan(result);
|
|
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
return result != null ? result.getId() : null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-06 09:19:18 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 根据任务计划创建任务记录
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void createTaskFromPlan(TaskPlan taskPlan) {
|
|
|
|
|
|
Task task = new Task();
|
|
|
|
|
|
task.setTaskName(taskPlan.getPlanName() + "_任务");
|
|
|
|
|
|
task.setPlanId(taskPlan.getId());
|
2026-03-06 09:40:07 +08:00
|
|
|
|
task.setTaskCategory(TaskCategoryEnum.PLAN_TASK);
|
|
|
|
|
|
task.setTaskType(TaskTypeEnum.PLAN_TASK);
|
2026-03-06 09:19:18 +08:00
|
|
|
|
task.setExecuteType(taskPlan.getExecuteType());
|
|
|
|
|
|
task.setRouteId(taskPlan.getRouteId());
|
|
|
|
|
|
task.setUavId(taskPlan.getUavId());
|
|
|
|
|
|
task.setStartTime(taskPlan.getStartDate());
|
|
|
|
|
|
task.setEndTime(taskPlan.getEndDate());
|
|
|
|
|
|
task.setStatus(StatusEnum.PENDING); // 待执行
|
|
|
|
|
|
task.setDescription("由任务计划自动创建");
|
|
|
|
|
|
|
|
|
|
|
|
// 创建任务
|
|
|
|
|
|
taskDomain.createTaskWithoutPlan(task);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
@Override
|
|
|
|
|
|
public TaskPlanDTO getTaskPlanById(Long planId) {
|
|
|
|
|
|
TaskPlan taskPlan = taskPlanDomain.getTaskPlanById(planId);
|
|
|
|
|
|
return TaskPlanDTOConvert.toDTO(taskPlan);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public List<TaskPlanDTO> getTaskPlanList(TaskPlanQueryDTO queryDTO) {
|
|
|
|
|
|
// 创建TaskPlan对象作为查询条件
|
|
|
|
|
|
TaskPlan taskPlan = new TaskPlan();
|
|
|
|
|
|
taskPlan.setRouteId(queryDTO.getRouteId());
|
2026-03-06 09:19:18 +08:00
|
|
|
|
taskPlan.setStatus(StatusEnum.getByCode(queryDTO.getStatus()));
|
|
|
|
|
|
taskPlan.setPlanType(PlanTypeEnum.getByCode(queryDTO.getPlanType()));
|
2026-03-05 17:14:10 +08:00
|
|
|
|
|
|
|
|
|
|
List<TaskPlan> taskPlans = taskPlanDomain.getTaskPlanList(taskPlan);
|
|
|
|
|
|
return TaskPlanDTOConvert.toDTOList(taskPlans);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public boolean updateTaskPlan(TaskPlanDTO taskPlanDTO) {
|
|
|
|
|
|
TaskPlan taskPlan = TaskPlanDTOConvert.toDomain(taskPlanDTO);
|
|
|
|
|
|
TaskPlan result = taskPlanDomain.updateTaskPlan(taskPlan);
|
|
|
|
|
|
return result != null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public boolean deleteTaskPlan(Long planId) {
|
|
|
|
|
|
return taskPlanDomain.deleteTaskPlan(planId);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|