修改日
This commit is contained in:
parent
81428acddc
commit
8f7712ecb0
|
|
@ -133,91 +133,99 @@ public class TaskPlanServiceImpl implements ITaskPlanService {
|
|||
* 生成周期任务记录
|
||||
*/
|
||||
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) {
|
||||
|
||||
if (taskPlan.getCycleType() == CycleTypeEnum.DAILY) {
|
||||
// 日周期:cycleValue 表示每几天执行一次
|
||||
int dayInterval = 1;
|
||||
if (taskPlan.getCycleValue() != null && !taskPlan.getCycleValue().isEmpty()) {
|
||||
try {
|
||||
cycleValues.add(Integer.parseInt(value.trim()));
|
||||
dayInterval = Integer.parseInt(taskPlan.getCycleValue().trim());
|
||||
if (dayInterval < 1) dayInterval = 1;
|
||||
} catch (NumberFormatException e) {
|
||||
// 忽略无效值
|
||||
dayInterval = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 根据周期类型生成任务
|
||||
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);
|
||||
|
||||
while (!calendar.after(endCalendar)) {
|
||||
createTaskForDate(taskPlan, calendar);
|
||||
calendar.add(java.util.Calendar.DAY_OF_YEAR, dayInterval);
|
||||
}
|
||||
|
||||
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());
|
||||
|
||||
// 设置任务开始时间:使用日历日期 + 计划的执行时间
|
||||
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 {
|
||||
// 如果没有设置执行时长,默认1小时
|
||||
endTaskCalendar.add(java.util.Calendar.HOUR_OF_DAY, 1);
|
||||
} 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) {
|
||||
// 忽略无效值
|
||||
}
|
||||
task.setEndTime(endTaskCalendar.getTime());
|
||||
} else {
|
||||
// 如果没有设置执行时间,使用日历时间作为开始和结束时间
|
||||
task.setStartTime(calendar.getTime());
|
||||
task.setEndTime(calendar.getTime());
|
||||
}
|
||||
|
||||
task.setStatus(StatusEnum.PENDING); // 待执行
|
||||
task.setDescription("由任务计划自动创建");
|
||||
|
||||
// 创建任务
|
||||
taskDomain.createTask(task);
|
||||
}
|
||||
|
||||
// 增加一天
|
||||
calendar.add(java.util.Calendar.DAY_OF_YEAR, 1);
|
||||
|
||||
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) {
|
||||
createTaskForDate(taskPlan, calendar);
|
||||
}
|
||||
|
||||
calendar.add(java.util.Calendar.DAY_OF_YEAR, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createTaskForDate(TaskPlan taskPlan, java.util.Calendar calendar) {
|
||||
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());
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化日期为字符串
|
||||
|
|
|
|||
Loading…
Reference in New Issue