This commit is contained in:
parent
aa7f11a461
commit
072801ad80
|
|
@ -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<Integer> 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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue