diff --git a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java index a5daf36b58..49d17a6a9f 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java @@ -123,7 +123,7 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt intervals.forEach((intervalEntry, argIntervalStatuses) -> { processInterval(now, intervalEntry, argIntervalStatuses, expiredIntervals, results); }); - expiredIntervals.forEach(intervals::remove); + removeExpiredIntervals(expiredIntervals); ArrayNode result = toResult(results); if (result.isEmpty()) { @@ -146,6 +146,15 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt }); } + private void removeExpiredIntervals(List expiredIntervals) { + expiredIntervals.forEach(expiredInterval -> { + arguments.values().stream() + .map(EntityAggregationArgumentEntry.class::cast) + .forEach(arg -> arg.getAggIntervals().remove(expiredInterval)); + intervals.remove(expiredInterval); + }); + } + private void createIntervalIfNotExist() { AggIntervalEntry currentInterval = new AggIntervalEntry(interval.getCurrentIntervalStartTs(), interval.getCurrentIntervalEndTs()); if (intervals.containsKey(currentInterval)) {