diff --git a/src/main/java/com/ruoyi/task/service/impl/TaskPlanServiceImpl.java b/src/main/java/com/ruoyi/task/service/impl/TaskPlanServiceImpl.java index 39f1128..f9bf57c 100644 --- a/src/main/java/com/ruoyi/task/service/impl/TaskPlanServiceImpl.java +++ b/src/main/java/com/ruoyi/task/service/impl/TaskPlanServiceImpl.java @@ -1,10 +1,6 @@ package com.ruoyi.task.service.impl; -import com.ruoyi.task.api.enums.ExecuteTypeEnum; -import com.ruoyi.task.api.enums.PlanTypeEnum; -import com.ruoyi.task.api.enums.StatusEnum; -import com.ruoyi.task.api.enums.TaskCategoryEnum; -import com.ruoyi.task.api.enums.TaskTypeEnum; +import com.ruoyi.task.api.enums.*; import com.ruoyi.task.domain.api.ITaskDomain; import com.ruoyi.task.domain.api.ITaskPlanDomain; import com.ruoyi.task.domain.model.Task; @@ -68,13 +64,27 @@ public class TaskPlanServiceImpl implements ITaskPlanService { // 创建对应的任务记录 createTaskFromPlan(result); - return result != null ? result.getId() : null; + return result.getId(); } /** * 根据任务计划创建任务记录 */ private void createTaskFromPlan(TaskPlan taskPlan) { + // 检查是否为周期任务计划 + if (taskPlan.getPlanType() == PlanTypeEnum.CYCLE) { + // 生成周期任务记录 + generateCycleTasks(taskPlan); + } else { + // 生成单次任务记录 + generateSingleTask(taskPlan); + } + } + + /** + * 生成单次任务记录 + */ + private void generateSingleTask(TaskPlan taskPlan) { Task task = new Task(); task.setTaskName(taskPlan.getPlanName() + "_任务"); task.setPlanId(taskPlan.getId()); @@ -91,6 +101,79 @@ public class TaskPlanServiceImpl implements ITaskPlanService { // 创建任务 taskDomain.createTaskWithoutPlan(task); } + + /** + * 生成周期任务记录 + */ + private void generateCycleTasks(TaskPlan taskPlan) { + // 从开始日期到结束日期,根据周期类型和周期值生成任务 + java.util.Calendar calendar = java.util.Calendar.getInstance(); + calendar.setTime(taskPlan.getStartDate()); + + java.util.Calendar endCalendar = java.util.Calendar.getInstance(); + endCalendar.setTime(taskPlan.getEndDate()); + + // 解析周期值 + String cycleValue = taskPlan.getCycleValue(); + java.util.Set cycleValues = new java.util.HashSet<>(); + if (cycleValue != null && !cycleValue.isEmpty()) { + String[] values = cycleValue.split(","); + for (String value : values) { + try { + cycleValues.add(Integer.parseInt(value.trim())); + } catch (NumberFormatException e) { + // 忽略无效值 + } + } + } + + // 根据周期类型生成任务 + while (!calendar.after(endCalendar)) { + boolean shouldCreateTask = false; + + if (taskPlan.getCycleType() == CycleTypeEnum.DAILY) { + // 日周期:每天都创建任务 + shouldCreateTask = true; + } else if (taskPlan.getCycleType() == CycleTypeEnum.WEEKLY) { + // 周周期:在指定的星期几创建任务(1-7,1表示周日) + int dayOfWeek = calendar.get(java.util.Calendar.DAY_OF_WEEK); + shouldCreateTask = cycleValues.contains(dayOfWeek); + } else if (taskPlan.getCycleType() == CycleTypeEnum.MONTHLY) { + // 月周期:在指定的日期创建任务(1-31) + int dayOfMonth = calendar.get(java.util.Calendar.DAY_OF_MONTH); + shouldCreateTask = cycleValues.contains(dayOfMonth); + } + + if (shouldCreateTask) { + Task task = new Task(); + task.setTaskName(taskPlan.getPlanName() + "_任务_" + formatDate(calendar.getTime())); + task.setPlanId(taskPlan.getId()); + task.setTaskCategory(TaskCategoryEnum.PLAN_TASK); + task.setTaskType(TaskTypeEnum.PLAN_TASK); + task.setExecuteType(taskPlan.getExecuteType()); + task.setRouteId(taskPlan.getRouteId()); + task.setUavId(taskPlan.getUavId()); + task.setStartTime(calendar.getTime()); + task.setEndTime(calendar.getTime()); + task.setStatus(StatusEnum.PENDING); // 待执行 + task.setDescription("由任务计划自动创建"); + + // 创建任务 + taskDomain.createTaskWithoutPlan(task); + } + + // 增加一天 + calendar.add(java.util.Calendar.DAY_OF_YEAR, 1); + } + } + + /** + * 格式化日期为字符串 + */ + private String formatDate(java.util.Date date) { + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd"); + return sdf.format(date); + } @Override public TaskPlanDTO getTaskPlanById(Long planId) {