@@ -210,17 +210,21 @@ public void populateScheduleForTask(Task task) {
210210 .filter (scheduledTask -> scheduledTask .getTask ().getId ().equals (task .getId ()))
211211 .map (ScheduledTask ::getDate ).max (ZonedDateTime ::compareTo ).orElse (null );
212212
213+ boolean hadNoScheduledTasks = (latestScheduledDate == null );
214+ ZonedDateTime lastExecuted = task .getLastExecuted ().toInstant ().atZone (ZoneId .systemDefault ());
215+ ZonedDateTime now = ZonedDateTime .now ();
213216 if (latestScheduledDate == null ) {
214- ZonedDateTime now = ZonedDateTime .now ();
215- ZonedDateTime lastExecuted = task .getLastExecuted ().toInstant ().atZone (ZoneId .systemDefault ());
216- latestScheduledDate = lastExecuted .isAfter (now ) ? lastExecuted : now ;
217+ latestScheduledDate = lastExecuted ;
217218 }
218219
219220 if (maxToSchedule <= 0 ) {
220221 return ;
221222 }
222223
223224 if (!task .getTimes ().isEmpty ()) {
225+ if (latestScheduledDate .isBefore (now )) {
226+ latestScheduledDate = now ;
227+ }
224228 List <TaskTime > rangeTimes = new ArrayList <>();
225229 List <TaskTime > nonRangeTimes = new ArrayList <>();
226230
@@ -383,14 +387,33 @@ public void populateScheduleForTask(Task task) {
383387 return ;
384388 }
385389
390+ long intervalSeconds = task .getInterval ().toSeconds ();
391+ if (intervalSeconds <= 0 ) intervalSeconds = 1 ;
392+
393+ ZonedDateTime nextExpectedExecution = lastExecuted .plusSeconds (intervalSeconds );
394+
395+ if (hadNoScheduledTasks && nextExpectedExecution .isBefore (now )) {
396+ if (task .getDays ().contains (nextExpectedExecution .toLocalDate ().getDayOfWeek ())) {
397+ scheduledTasks .add (new ScheduledTask (task , nextExpectedExecution ));
398+ maxToSchedule --;
399+ }
400+ }
401+
386402 int i = 1 ;
403+ ZonedDateTime startDate = latestScheduledDate ;
404+
387405 while (maxToSchedule > 0 ) {
388- ZonedDateTime date = latestScheduledDate .plusSeconds (i * task . getInterval (). toSeconds () );
406+ ZonedDateTime date = startDate .plusSeconds (i * intervalSeconds );
389407 if (!task .getDays ().contains (date .getDayOfWeek ())) {
390408 i ++;
391409 continue ;
392410 }
393411
412+ if (date .isBefore (now )) {
413+ i ++;
414+ continue ;
415+ }
416+
394417 scheduledTasks .add (new ScheduledTask (task , date ));
395418 maxToSchedule --;
396419 i ++;
0 commit comments