修改日
This commit is contained in:
parent
81428acddc
commit
8f7712ecb0
|
|
@ -133,91 +133,99 @@ public class TaskPlanServiceImpl implements ITaskPlanService {
|
||||||
* 生成周期任务记录
|
* 生成周期任务记录
|
||||||
*/
|
*/
|
||||||
private void generateCycleTasks(TaskPlan taskPlan) {
|
private void generateCycleTasks(TaskPlan taskPlan) {
|
||||||
// 从开始日期到结束日期,根据周期类型和周期值生成任务
|
|
||||||
java.util.Calendar calendar = java.util.Calendar.getInstance();
|
java.util.Calendar calendar = java.util.Calendar.getInstance();
|
||||||
calendar.setTime(taskPlan.getStartDate());
|
calendar.setTime(taskPlan.getStartDate());
|
||||||
|
|
||||||
java.util.Calendar endCalendar = java.util.Calendar.getInstance();
|
java.util.Calendar endCalendar = java.util.Calendar.getInstance();
|
||||||
endCalendar.setTime(taskPlan.getEndDate());
|
endCalendar.setTime(taskPlan.getEndDate());
|
||||||
|
|
||||||
// 解析周期值
|
if (taskPlan.getCycleType() == CycleTypeEnum.DAILY) {
|
||||||
String cycleValue = taskPlan.getCycleValue();
|
// 日周期:cycleValue 表示每几天执行一次
|
||||||
java.util.Set<Integer> cycleValues = new java.util.HashSet<>();
|
int dayInterval = 1;
|
||||||
if (cycleValue != null && !cycleValue.isEmpty()) {
|
if (taskPlan.getCycleValue() != null && !taskPlan.getCycleValue().isEmpty()) {
|
||||||
String[] values = cycleValue.split(",");
|
|
||||||
for (String value : values) {
|
|
||||||
try {
|
try {
|
||||||
cycleValues.add(Integer.parseInt(value.trim()));
|
dayInterval = Integer.parseInt(taskPlan.getCycleValue().trim());
|
||||||
|
if (dayInterval < 1) dayInterval = 1;
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
// 忽略无效值
|
dayInterval = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
while (!calendar.after(endCalendar)) {
|
||||||
// 根据周期类型生成任务
|
createTaskForDate(taskPlan, calendar);
|
||||||
while (!calendar.after(endCalendar)) {
|
calendar.add(java.util.Calendar.DAY_OF_YEAR, dayInterval);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
if (shouldCreateTask) {
|
// 周周期和月周期:解析 cycleValue 为集合
|
||||||
Task task = new Task();
|
java.util.Set<Integer> cycleValues = new java.util.HashSet<>();
|
||||||
task.setTaskName(taskPlan.getPlanName() + "_任务_" + formatDate(calendar.getTime()));
|
if (taskPlan.getCycleValue() != null && !taskPlan.getCycleValue().isEmpty()) {
|
||||||
task.setPlanId(taskPlan.getId());
|
String[] values = taskPlan.getCycleValue().split(",");
|
||||||
task.setTaskCategory(TaskCategoryEnum.PLAN_TASK);
|
for (String value : values) {
|
||||||
task.setTaskType(TaskTypeEnum.PLAN_TASK);
|
try {
|
||||||
task.setExecuteType(taskPlan.getExecuteType());
|
cycleValues.add(Integer.parseInt(value.trim()));
|
||||||
task.setRouteId(taskPlan.getRouteId());
|
} catch (NumberFormatException e) {
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
task.setEndTime(endTaskCalendar.getTime());
|
|
||||||
} else {
|
|
||||||
// 如果没有设置执行时间,使用日历时间作为开始和结束时间
|
|
||||||
task.setStartTime(calendar.getTime());
|
|
||||||
task.setEndTime(calendar.getTime());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
task.setStatus(StatusEnum.PENDING); // 待执行
|
|
||||||
task.setDescription("由任务计划自动创建");
|
|
||||||
|
|
||||||
// 创建任务
|
|
||||||
taskDomain.createTask(task);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 增加一天
|
while (!calendar.after(endCalendar)) {
|
||||||
calendar.add(java.util.Calendar.DAY_OF_YEAR, 1);
|
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