2026-03-05 17:14:10 +08:00
|
|
|
|
package com.ruoyi.task.service.impl;
|
|
|
|
|
|
|
2026-03-06 09:48:47 +08:00
|
|
|
|
import com.ruoyi.task.api.enums.*;
|
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;
|
|
|
|
|
|
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;
|
2026-03-09 14:50:47 +08:00
|
|
|
|
import java.util.Objects;
|
2026-03-05 17:14:10 +08:00
|
|
|
|
|
|
|
|
|
|
@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
|
2026-03-12 18:46:24 +08:00
|
|
|
|
public Long createNormalTimedTaskPlan(TaskPlanDTO taskPlanDTO, boolean create) {
|
2026-03-05 17:14:10 +08:00
|
|
|
|
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("定时任务计划不能设置为周期类型");
|
|
|
|
|
|
}
|
2026-03-09 14:50:47 +08:00
|
|
|
|
|
|
|
|
|
|
// 设置结束时间:开始时间 + 执行时长
|
|
|
|
|
|
if (taskPlan.getExecuteTime() != null && taskPlan.getDuration() != null) {
|
|
|
|
|
|
taskPlan.setStartDate(taskPlan.getExecuteTime());
|
|
|
|
|
|
taskPlan.setEndDate(taskPlan.getExecuteTime());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-09 15:20:56 +08:00
|
|
|
|
if(create){
|
|
|
|
|
|
TaskPlan result = taskPlanDomain.createTimedTaskPlan(taskPlan);
|
|
|
|
|
|
// 创建对应的任务记录
|
2026-03-12 18:46:24 +08:00
|
|
|
|
createNormalTaskFromPlan(result);
|
2026-03-09 15:20:56 +08:00
|
|
|
|
return result.getId();
|
|
|
|
|
|
}else {
|
|
|
|
|
|
taskPlanDomain.updateTaskPlan(taskPlan);
|
2026-03-12 18:46:24 +08:00
|
|
|
|
createNormalTaskFromPlan(taskPlan);
|
2026-03-09 15:20:56 +08:00
|
|
|
|
return taskPlan.getId();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-09 14:50:47 +08:00
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
2026-03-09 15:20:56 +08:00
|
|
|
|
public Long createCycleTaskPlan(TaskPlanDTO taskPlanDTO,boolean create) {
|
2026-03-05 17:14:10 +08:00
|
|
|
|
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-09 15:20:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(create){
|
|
|
|
|
|
TaskPlan result = taskPlanDomain.createCycleTaskPlan(taskPlan);
|
|
|
|
|
|
// 创建对应的任务记录
|
2026-03-12 18:46:24 +08:00
|
|
|
|
createNormalTaskFromPlan(result);
|
2026-03-09 15:20:56 +08:00
|
|
|
|
return result.getId();
|
|
|
|
|
|
}else {
|
|
|
|
|
|
taskPlanDomain.updateTaskPlan(taskPlan);
|
2026-03-12 18:46:24 +08:00
|
|
|
|
createNormalTaskFromPlan(taskPlan);
|
2026-03-09 15:20:56 +08:00
|
|
|
|
return taskPlan.getId();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-06 09:19:18 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 根据任务计划创建任务记录
|
|
|
|
|
|
*/
|
2026-03-12 18:46:24 +08:00
|
|
|
|
private void createNormalTaskFromPlan(TaskPlan taskPlan) {
|
2026-03-06 09:48:47 +08:00
|
|
|
|
// 检查是否为周期任务计划
|
|
|
|
|
|
if (taskPlan.getPlanType() == PlanTypeEnum.CYCLE) {
|
|
|
|
|
|
// 生成周期任务记录
|
2026-03-12 18:46:24 +08:00
|
|
|
|
generateNormalCycleTasks(taskPlan);
|
2026-03-06 09:48:47 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
// 生成单次任务记录
|
2026-03-12 18:46:24 +08:00
|
|
|
|
generateNormalPlanTask(taskPlan);
|
2026-03-06 09:48:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 生成单次任务记录
|
|
|
|
|
|
*/
|
2026-03-12 18:46:24 +08:00
|
|
|
|
private void generateNormalPlanTask(TaskPlan taskPlan) {
|
2026-03-06 09:19:18 +08:00
|
|
|
|
Task task = new Task();
|
|
|
|
|
|
task.setTaskName(taskPlan.getPlanName() + "_任务");
|
|
|
|
|
|
task.setPlanId(taskPlan.getId());
|
2026-03-12 18:46:24 +08:00
|
|
|
|
task.setTaskCategory(TaskCategoryEnum.NORMAL);
|
|
|
|
|
|
if(Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.TIMED)){
|
|
|
|
|
|
task.setTaskType(TaskTypeEnum.TIMED);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.CYCLE)) {
|
|
|
|
|
|
task.setTaskType(TaskTypeEnum.CYCLE);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.IMMEDIATELY)) {
|
|
|
|
|
|
task.setTaskType(TaskTypeEnum.IMMEDIATELY);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-06 09:19:18 +08:00
|
|
|
|
task.setExecuteType(taskPlan.getExecuteType());
|
|
|
|
|
|
task.setRouteId(taskPlan.getRouteId());
|
|
|
|
|
|
task.setUavId(taskPlan.getUavId());
|
2026-03-06 11:43:45 +08:00
|
|
|
|
task.setStartTime(taskPlan.getExecuteTime());
|
2026-03-06 13:41:24 +08:00
|
|
|
|
|
|
|
|
|
|
// 设置结束时间:开始时间 + 执行时长
|
|
|
|
|
|
if (taskPlan.getExecuteTime() != null && taskPlan.getDuration() != null) {
|
|
|
|
|
|
java.util.Calendar endTaskCalendar = java.util.Calendar.getInstance();
|
|
|
|
|
|
endTaskCalendar.setTime(taskPlan.getExecuteTime());
|
|
|
|
|
|
endTaskCalendar.add(java.util.Calendar.SECOND, taskPlan.getDuration());
|
|
|
|
|
|
task.setEndTime(endTaskCalendar.getTime());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-06 09:19:18 +08:00
|
|
|
|
task.setStatus(StatusEnum.PENDING); // 待执行
|
|
|
|
|
|
task.setDescription("由任务计划自动创建");
|
|
|
|
|
|
|
|
|
|
|
|
// 创建任务
|
2026-03-09 14:50:47 +08:00
|
|
|
|
taskDomain.createTask(task);
|
2026-03-06 09:19:18 +08:00
|
|
|
|
}
|
2026-03-06 09:48:47 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 生成周期任务记录
|
|
|
|
|
|
*/
|
2026-03-12 18:46:24 +08:00
|
|
|
|
private void generateNormalCycleTasks(TaskPlan taskPlan) {
|
2026-03-06 09:48:47 +08:00
|
|
|
|
java.util.Calendar calendar = java.util.Calendar.getInstance();
|
|
|
|
|
|
calendar.setTime(taskPlan.getStartDate());
|
2026-03-12 14:12:11 +08:00
|
|
|
|
|
2026-03-06 09:48:47 +08:00
|
|
|
|
java.util.Calendar endCalendar = java.util.Calendar.getInstance();
|
|
|
|
|
|
endCalendar.setTime(taskPlan.getEndDate());
|
2026-03-12 14:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
if (taskPlan.getCycleType() == CycleTypeEnum.DAILY) {
|
|
|
|
|
|
// 日周期:cycleValue 表示每几天执行一次
|
|
|
|
|
|
int dayInterval = 1;
|
|
|
|
|
|
if (taskPlan.getCycleValue() != null && !taskPlan.getCycleValue().isEmpty()) {
|
2026-03-06 09:48:47 +08:00
|
|
|
|
try {
|
2026-03-12 14:12:11 +08:00
|
|
|
|
dayInterval = Integer.parseInt(taskPlan.getCycleValue().trim());
|
|
|
|
|
|
if (dayInterval < 1) dayInterval = 1;
|
2026-03-06 09:48:47 +08:00
|
|
|
|
} catch (NumberFormatException e) {
|
2026-03-12 14:12:11 +08:00
|
|
|
|
dayInterval = 1;
|
2026-03-06 09:48:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-03-12 14:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
while (!calendar.after(endCalendar)) {
|
2026-03-12 18:46:24 +08:00
|
|
|
|
createNormalTaskForDate(taskPlan, calendar);
|
2026-03-12 14:12:11 +08:00
|
|
|
|
calendar.add(java.util.Calendar.DAY_OF_YEAR, dayInterval);
|
2026-03-06 09:48:47 +08:00
|
|
|
|
}
|
2026-03-12 14:12:11 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
// 周周期和月周期:解析 cycleValue 为集合
|
|
|
|
|
|
java.util.Set<Integer> cycleValues = new java.util.HashSet<>();
|
|
|
|
|
|
if (taskPlan.getCycleValue() != null && !taskPlan.getCycleValue().isEmpty()) {
|
|
|
|
|
|
String[] values = taskPlan.getCycleValue().split(",");
|
|
|
|
|
|
for (String value : values) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
cycleValues.add(Integer.parseInt(value.trim()));
|
|
|
|
|
|
} catch (NumberFormatException e) {
|
|
|
|
|
|
// 忽略无效值
|
2026-03-06 13:41:24 +08:00
|
|
|
|
}
|
2026-03-06 13:13:08 +08:00
|
|
|
|
}
|
2026-03-06 09:48:47 +08:00
|
|
|
|
}
|
2026-03-12 14:12:11 +08:00
|
|
|
|
|
|
|
|
|
|
while (!calendar.after(endCalendar)) {
|
|
|
|
|
|
boolean shouldCreateTask = false;
|
|
|
|
|
|
|
|
|
|
|
|
if (taskPlan.getCycleType() == CycleTypeEnum.WEEKLY) {
|
|
|
|
|
|
int dayOfWeek = calendar.get(java.util.Calendar.DAY_OF_WEEK);
|
|
|
|
|
|
shouldCreateTask = cycleValues.contains(dayOfWeek);
|
|
|
|
|
|
} else if (taskPlan.getCycleType() == CycleTypeEnum.MONTHLY) {
|
|
|
|
|
|
int dayOfMonth = calendar.get(java.util.Calendar.DAY_OF_MONTH);
|
|
|
|
|
|
shouldCreateTask = cycleValues.contains(dayOfMonth);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (shouldCreateTask) {
|
2026-03-12 18:46:24 +08:00
|
|
|
|
createNormalTaskForDate(taskPlan, calendar);
|
2026-03-12 14:12:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
calendar.add(java.util.Calendar.DAY_OF_YEAR, 1);
|
|
|
|
|
|
}
|
2026-03-06 09:48:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-03-12 14:12:11 +08:00
|
|
|
|
|
2026-03-12 18:46:24 +08:00
|
|
|
|
private void createNormalTaskForDate(TaskPlan taskPlan, java.util.Calendar calendar) {
|
2026-03-12 14:12:11 +08:00
|
|
|
|
Task task = new Task();
|
|
|
|
|
|
task.setTaskName(taskPlan.getPlanName() + "_任务_" + formatDate(calendar.getTime()));
|
|
|
|
|
|
task.setPlanId(taskPlan.getId());
|
2026-03-12 18:46:24 +08:00
|
|
|
|
task.setTaskCategory(TaskCategoryEnum.NORMAL);
|
|
|
|
|
|
if(Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.TIMED)){
|
|
|
|
|
|
task.setTaskType(TaskTypeEnum.TIMED);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.CYCLE)){
|
|
|
|
|
|
task.setTaskType(TaskTypeEnum.CYCLE);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.IMMEDIATELY)){
|
|
|
|
|
|
task.setTaskType(TaskTypeEnum.IMMEDIATELY);
|
|
|
|
|
|
}
|
2026-03-12 14:12:11 +08:00
|
|
|
|
task.setExecuteType(taskPlan.getExecuteType());
|
|
|
|
|
|
task.setRouteId(taskPlan.getRouteId());
|
|
|
|
|
|
task.setUavId(taskPlan.getUavId());
|
|
|
|
|
|
|
|
|
|
|
|
if (taskPlan.getExecuteTime() != null) {
|
|
|
|
|
|
java.util.Calendar taskCalendar = java.util.Calendar.getInstance();
|
|
|
|
|
|
taskCalendar.setTime(calendar.getTime());
|
|
|
|
|
|
java.util.Calendar executeTimeCalendar = java.util.Calendar.getInstance();
|
|
|
|
|
|
executeTimeCalendar.setTime(taskPlan.getExecuteTime());
|
|
|
|
|
|
taskCalendar.set(java.util.Calendar.HOUR_OF_DAY, executeTimeCalendar.get(java.util.Calendar.HOUR_OF_DAY));
|
|
|
|
|
|
taskCalendar.set(java.util.Calendar.MINUTE, executeTimeCalendar.get(java.util.Calendar.MINUTE));
|
|
|
|
|
|
taskCalendar.set(java.util.Calendar.SECOND, executeTimeCalendar.get(java.util.Calendar.SECOND));
|
|
|
|
|
|
task.setStartTime(taskCalendar.getTime());
|
|
|
|
|
|
|
|
|
|
|
|
java.util.Calendar endTaskCalendar = (java.util.Calendar) taskCalendar.clone();
|
|
|
|
|
|
if (taskPlan.getDuration() != null) {
|
|
|
|
|
|
endTaskCalendar.add(java.util.Calendar.SECOND, taskPlan.getDuration());
|
|
|
|
|
|
} else {
|
|
|
|
|
|
endTaskCalendar.add(java.util.Calendar.SECOND, 3600);
|
|
|
|
|
|
}
|
|
|
|
|
|
task.setEndTime(endTaskCalendar.getTime());
|
|
|
|
|
|
} else {
|
|
|
|
|
|
task.setStartTime(calendar.getTime());
|
|
|
|
|
|
task.setEndTime(calendar.getTime());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
task.setStatus(StatusEnum.PENDING);
|
|
|
|
|
|
task.setDescription("由任务计划自动创建");
|
|
|
|
|
|
|
|
|
|
|
|
taskDomain.createTask(task);
|
|
|
|
|
|
}
|
2026-03-06 09:48:47 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 格式化日期为字符串
|
|
|
|
|
|
*/
|
|
|
|
|
|
private String formatDate(java.util.Date date) {
|
|
|
|
|
|
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd");
|
|
|
|
|
|
return sdf.format(date);
|
|
|
|
|
|
}
|
2026-03-06 10:02:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
2026-03-06 09:19:18 +08:00
|
|
|
|
|
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) {
|
2026-03-06 10:38:28 +08:00
|
|
|
|
// 如果传递了id,功能就等同于getTaskPlanById
|
|
|
|
|
|
if (queryDTO.getId() != null) {
|
|
|
|
|
|
TaskPlanDTO taskPlanDTO = getTaskPlanById(queryDTO.getId());
|
|
|
|
|
|
return taskPlanDTO != null ? java.util.Collections.singletonList(taskPlanDTO) : java.util.Collections.emptyList();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
// 创建TaskPlan对象作为查询条件
|
|
|
|
|
|
TaskPlan taskPlan = new TaskPlan();
|
|
|
|
|
|
taskPlan.setRouteId(queryDTO.getRouteId());
|
2026-03-06 10:38:28 +08:00
|
|
|
|
taskPlan.setUavId(queryDTO.getUavId());
|
2026-03-06 10:28:00 +08:00
|
|
|
|
taskPlan.setStatus(queryDTO.getStatus());
|
|
|
|
|
|
taskPlan.setPlanType(queryDTO.getPlanType());
|
2026-03-06 10:38:28 +08:00
|
|
|
|
taskPlan.setCycleType(queryDTO.getCycleType());
|
|
|
|
|
|
|
|
|
|
|
|
// 这里需要注意:TaskPlan类中没有airportCode和routeName字段,
|
|
|
|
|
|
// 这些字段可能需要通过关联查询来实现过滤,
|
|
|
|
|
|
// 但目前我们先按照现有的结构实现基本过滤
|
2026-03-05 17:14:10 +08:00
|
|
|
|
|
|
|
|
|
|
List<TaskPlan> taskPlans = taskPlanDomain.getTaskPlanList(taskPlan);
|
2026-03-06 10:38:28 +08:00
|
|
|
|
|
|
|
|
|
|
// 过滤时间范围(只有当startDateStart和startDateEnd都传时才使用)
|
|
|
|
|
|
if (queryDTO.getStartDateStart() != null && queryDTO.getStartDateEnd() != null) {
|
|
|
|
|
|
java.util.Date startDateStart = queryDTO.getStartDateStart();
|
|
|
|
|
|
java.util.Date startDateEnd = queryDTO.getStartDateEnd();
|
|
|
|
|
|
taskPlans = taskPlans.stream()
|
|
|
|
|
|
.filter(plan -> {
|
|
|
|
|
|
java.util.Date planStartDate = plan.getStartDate();
|
|
|
|
|
|
return planStartDate != null &&
|
|
|
|
|
|
!planStartDate.before(startDateStart) &&
|
|
|
|
|
|
!planStartDate.after(startDateEnd);
|
|
|
|
|
|
})
|
|
|
|
|
|
.collect(java.util.stream.Collectors.toList());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
return TaskPlanDTOConvert.toDTOList(taskPlans);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public boolean updateTaskPlan(TaskPlanDTO taskPlanDTO) {
|
2026-03-09 15:20:56 +08:00
|
|
|
|
// 先查询原始数据
|
|
|
|
|
|
TaskPlan existingTaskPlan = taskPlanDomain.getTaskPlanById(taskPlanDTO.getId());
|
|
|
|
|
|
if (existingTaskPlan == null) {
|
|
|
|
|
|
throw new IllegalArgumentException("任务计划不存在");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 将传入的非空字段覆盖到原始数据
|
|
|
|
|
|
TaskPlan updateTaskPlan = TaskPlanDTOConvert.toDomain(taskPlanDTO);
|
|
|
|
|
|
if (updateTaskPlan.getPlanName() != null) existingTaskPlan.setPlanName(updateTaskPlan.getPlanName());
|
|
|
|
|
|
if (updateTaskPlan.getPlanType() != null) existingTaskPlan.setPlanType(updateTaskPlan.getPlanType());
|
|
|
|
|
|
if (updateTaskPlan.getCycleType() != null) existingTaskPlan.setCycleType(updateTaskPlan.getCycleType());
|
|
|
|
|
|
if (updateTaskPlan.getCycleValue() != null) existingTaskPlan.setCycleValue(updateTaskPlan.getCycleValue());
|
|
|
|
|
|
if (updateTaskPlan.getExecuteType() != null) existingTaskPlan.setExecuteType(updateTaskPlan.getExecuteType());
|
|
|
|
|
|
if (updateTaskPlan.getExecuteTime() != null) existingTaskPlan.setExecuteTime(updateTaskPlan.getExecuteTime());
|
|
|
|
|
|
if (updateTaskPlan.getDuration() != null) existingTaskPlan.setDuration(updateTaskPlan.getDuration());
|
|
|
|
|
|
if (updateTaskPlan.getStartDate() != null) existingTaskPlan.setStartDate(updateTaskPlan.getStartDate());
|
|
|
|
|
|
if (updateTaskPlan.getEndDate() != null) existingTaskPlan.setEndDate(updateTaskPlan.getEndDate());
|
|
|
|
|
|
if (updateTaskPlan.getRouteId() != null) existingTaskPlan.setRouteId(updateTaskPlan.getRouteId());
|
|
|
|
|
|
if (updateTaskPlan.getUavId() != null) existingTaskPlan.setUavId(updateTaskPlan.getUavId());
|
|
|
|
|
|
if (updateTaskPlan.getStatus() != null) existingTaskPlan.setStatus(updateTaskPlan.getStatus());
|
|
|
|
|
|
if (updateTaskPlan.getDescription() != null) existingTaskPlan.setDescription(updateTaskPlan.getDescription());
|
|
|
|
|
|
if (updateTaskPlan.getRouteUrl() != null) existingTaskPlan.setRouteUrl(updateTaskPlan.getRouteUrl());
|
|
|
|
|
|
if (updateTaskPlan.getRemark() != null) existingTaskPlan.setRemark(updateTaskPlan.getRemark());
|
|
|
|
|
|
|
|
|
|
|
|
TaskPlan result = taskPlanDomain.updateTaskPlan(existingTaskPlan);
|
2026-03-09 14:50:47 +08:00
|
|
|
|
|
2026-03-06 10:41:39 +08:00
|
|
|
|
if (result != null) {
|
|
|
|
|
|
// 先删除该计划下的所有未执行任务
|
|
|
|
|
|
List<Task> tasks = taskDomain.getTaskByPlanId(result.getId());
|
|
|
|
|
|
for (Task task : tasks) {
|
|
|
|
|
|
if (task.getStatus() == StatusEnum.PENDING) {
|
|
|
|
|
|
taskDomain.deleteTask(task.getId());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-03-09 14:50:47 +08:00
|
|
|
|
|
2026-03-12 18:46:24 +08:00
|
|
|
|
createNormalTaskFromPlan(existingTaskPlan);
|
2026-03-09 15:20:56 +08:00
|
|
|
|
|
2026-03-05 17:14:10 +08:00
|
|
|
|
return result != null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public boolean deleteTaskPlan(Long planId) {
|
2026-03-06 10:20:25 +08:00
|
|
|
|
// 先获取该计划下的所有任务
|
|
|
|
|
|
List<Task> tasks = taskDomain.getTaskByPlanId(planId);
|
|
|
|
|
|
|
|
|
|
|
|
// 删除所有状态为待执行的任务
|
|
|
|
|
|
for (Task task : tasks) {
|
|
|
|
|
|
if (task.getStatus() == StatusEnum.PENDING) {
|
|
|
|
|
|
taskDomain.deleteTask(task.getId());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 最后删除任务计划
|
2026-03-05 17:14:10 +08:00
|
|
|
|
return taskPlanDomain.deleteTaskPlan(planId);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|