diff options
author | Anton Tananaev <anton@traccar.org> | 2024-04-20 09:36:05 -0700 |
---|---|---|
committer | Anton Tananaev <anton@traccar.org> | 2024-04-20 09:36:05 -0700 |
commit | 8e4e92f84f149ec9f9da6dd601fab06ed55c544c (patch) | |
tree | 557ecc159ff7261f24cf50d030ce7cbc1f9701ac /src | |
parent | 7b3fda2da562ce7b259a232bf9fc5f519c138283 (diff) | |
download | trackermap-server-8e4e92f84f149ec9f9da6dd601fab06ed55c544c.tar.gz trackermap-server-8e4e92f84f149ec9f9da6dd601fab06ed55c544c.tar.bz2 trackermap-server-8e4e92f84f149ec9f9da6dd601fab06ed55c544c.zip |
Improve report schedules logic
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/org/traccar/model/Calendar.java | 3 | ||||
-rw-r--r-- | src/main/java/org/traccar/schedule/TaskReports.java | 7 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/main/java/org/traccar/model/Calendar.java b/src/main/java/org/traccar/model/Calendar.java index feef7286f..76c9a2cc1 100644 --- a/src/main/java/org/traccar/model/Calendar.java +++ b/src/main/java/org/traccar/model/Calendar.java @@ -34,6 +34,7 @@ import java.time.Duration; import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; @StorageName("tc_calendars") @@ -78,7 +79,7 @@ public class Calendar extends ExtendedModel { } } - public Collection<Period> findPeriods(Date date) { + public Set<Period> findPeriods(Date date) { return findEvents(date).stream() .flatMap((e) -> e.calculateRecurrenceSet(new Period(new DateTime(date), Duration.ZERO)).stream()) .collect(Collectors.toSet()); diff --git a/src/main/java/org/traccar/schedule/TaskReports.java b/src/main/java/org/traccar/schedule/TaskReports.java index 3989cd6a0..1d074214c 100644 --- a/src/main/java/org/traccar/schedule/TaskReports.java +++ b/src/main/java/org/traccar/schedule/TaskReports.java @@ -43,7 +43,9 @@ import org.traccar.storage.query.Request; import jakarta.inject.Inject; import java.util.Collections; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -81,8 +83,9 @@ public class TaskReports implements ScheduleTask { var lastEvents = calendar.findPeriods(lastCheck); var currentEvents = calendar.findPeriods(currentCheck); - if (!lastEvents.isEmpty() && !currentEvents.equals(lastEvents)) { - Period period = lastEvents.iterator().next(); + Set<Period> finishedEvents = new HashSet<>(lastEvents); + finishedEvents.removeAll(currentEvents); + for (Period period : finishedEvents) { RequestScoper scope = ServletScopes.scopeRequest(Collections.emptyMap()); try (RequestScoper.CloseableScope ignored = scope.open()) { executeReport(report, period.getStart(), period.getEnd()); |