From 4cd6c6c06d16b1e80600b6e7e812152444ed3e48 Mon Sep 17 00:00:00 2001
From: zhaowenyu <35589726@qq.com>
Date: Tue, 16 Dec 2025 15:51:10 +0800
Subject: [PATCH] 2025-12-16 zwy 优化-删除任务时,正在执行中的任务不能删除
---
ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineLoopTaskServiceImpl.java | 34 ++++++++++++++++++++++++++++------
1 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineLoopTaskServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineLoopTaskServiceImpl.java
index 3222279..29191a5 100644
--- a/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineLoopTaskServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineLoopTaskServiceImpl.java
@@ -13,6 +13,7 @@
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
+import java.util.concurrent.TimeUnit;
@Slf4j
@Component
@@ -26,7 +27,8 @@
/**
* 定时任务,生成循环任务在有效其内的每天的定时任务
* */
- @Scheduled(cron = "0 0 10 * * ?")
+// @Scheduled(cron = "0 0 10 * * ?")
+ @Scheduled(initialDelay = 1, fixedRate = 10, timeUnit = TimeUnit.SECONDS)
public void loopTask() {
try {
// 执行定时任务逻辑,例如检查并执行已到时间的飞行任务
@@ -37,8 +39,28 @@
if (waylineJobEntity.getStatus() == WaylineJobStatusEnum.SUCCESS.getVal()) {
continue;
}
+
// 判断时间是否在有期内,循环任务的逻辑是,开始执行时间+循环次数。
Long beginTime = waylineJobEntity.getBeginTime();
+
+ // 优化判断逻辑,定时任务每10分钟执行一次,将今天下发的循环任务,时间在当前时间之后的任务生成第一次定时任务。
+ // 前提是时间要在当前时间10分钟以上的时间。
+ // 判断父任务是否生成当天子任务,如果已经生成,则不重复生成。
+ Long dayTime = _timestampUtils.combine(beginTime);
+ // 先判断当前时间是否大于预生成子任务的执行时间
+ Long dayTime10 = _timestampUtils.plusMinutesByMillis(dayTime, -10);
+ if(dayTime10.compareTo(System.currentTimeMillis()) < 0)
+ {
+ log.info("循环子任务时间在当前时间之前,主任务ID:{}。", waylineJobEntity.getJobId());
+ continue;
+ }
+ List<WaylineJobEntity> jobDayList = _waylineJobService.selectList(1L, dayTime, waylineJobEntity.getJobId());
+ if(!jobDayList.isEmpty()){
+ log.info("循环子任务已经存在,主任务ID:{}。", waylineJobEntity.getJobId());
+ continue;
+ }
+
+
// 获取循环任务开始的那天的0点0分0秒的时间戳,方便比对时间有效期范围;
// 循环任务按每天下发定时任务走,必须要在当次任务执行时间之前执行。
Long beginTime_Start = _timestampUtils.getDayStartTimestamp(beginTime);
@@ -61,11 +83,11 @@
.code(0).build());
continue;
}
- List<WaylineJobEntity> jobEntities = _waylineJobService.selectList(null, newTime, waylineJobEntity.getJobId());
- if (!jobEntities.isEmpty()) {
- log.info("循环子任务已经存在,主任务ID:{},时间:{}!", waylineJobEntity.getJobId(), _timestampUtils.formatByMillis(newTime));
- continue;
- }
+// List<WaylineJobEntity> jobEntities = _waylineJobService.selectList(null, newTime, waylineJobEntity.getJobId());
+// if (!jobEntities.isEmpty()) {
+// log.info("循环子任务已经存在,主任务ID:{},时间:{}!", waylineJobEntity.getJobId(), _timestampUtils.formatByMillis(newTime));
+// continue;
+// }
CreateJobParam param = getCreateJobParam(waylineJobEntity, newTime);
Optional<WaylineJobDTO> waylineJobDTO = _waylineJobService.createWaylineJob(param, waylineJobEntity.getUsername(), newTime, newTime);
_waylineJobService.publishFlightTaskPrepare(waylineJobDTO);
--
Gitblit v1.9.3