修改日

This commit is contained in:
孙小云 2026-03-12 14:12:11 +08:00
parent 81428acddc
commit 8f7712ecb0
1 changed files with 79 additions and 71 deletions

View File

@ -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-71表示周日
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);
}
/** /**
* 格式化日期为字符串 * 格式化日期为字符串