| | |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | @Slf4j |
| | | @Component |
| | |
| | | * 定时任务,生成循环任务在有效其内的每天的定时任务 |
| | | * */ |
| | | // @Scheduled(cron = "0 0 10 * * ?") |
| | | @Scheduled(initialDelay = 1, fixedRate = 10, timeUnit = TimeUnit.SECONDS) |
| | | public void loopTask() { |
| | | try { |
| | | // 执行定时任务逻辑,例如检查并执行已到时间的飞行任务 |
| | |
| | | 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); |
| | |
| | | .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); |
| | |
| | | |
| | | private CreateJobParam getCreateJobParam(WaylineJobEntity waylineJobEntity, Long newTime) { |
| | | CreateJobParam param = new CreateJobParam(); |
| | | param.setRth_mode(1); |
| | | param.setName(waylineJobEntity.getName() + "-子任务"); |
| | | param.setFileId(waylineJobEntity.getFileId()); |
| | | param.setDockSn(waylineJobEntity.getDockSn()); |