From f45b03a1b4e1c2fbb5ea14cc668be9b0bf20f57c Mon Sep 17 00:00:00 2001 From: IrynaMatveieva Date: Tue, 18 Nov 2025 12:36:42 +0200 Subject: [PATCH] apply output strategy to entity aggregation cf --- .../single/EntityAggregationCalculatedFieldState.java | 1 + .../server/cf/EntityAggregationCalculatedFieldTest.java | 5 ++--- ...EntityAggregationCalculatedFieldConfigurationTest.java | 8 ++++---- .../entity-aggregation-component.component.ts | 6 ++---- 4 files changed, 9 insertions(+), 11 deletions(-) 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 b07600695c..520882fa75 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 @@ -105,6 +105,7 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt return Futures.immediateFuture(TelemetryCalculatedFieldResult.EMPTY); } return Futures.immediateFuture(TelemetryCalculatedFieldResult.builder() + .outputStrategy(output.getStrategy()) .type(output.getType()) .scope(output.getScope()) .result(result) diff --git a/application/src/test/java/org/thingsboard/server/cf/EntityAggregationCalculatedFieldTest.java b/application/src/test/java/org/thingsboard/server/cf/EntityAggregationCalculatedFieldTest.java index e479c4959e..cf2c558618 100644 --- a/application/src/test/java/org/thingsboard/server/cf/EntityAggregationCalculatedFieldTest.java +++ b/application/src/test/java/org/thingsboard/server/cf/EntityAggregationCalculatedFieldTest.java @@ -29,8 +29,8 @@ import org.thingsboard.server.common.data.cf.CalculatedFieldType; import org.thingsboard.server.common.data.cf.configuration.Argument; import org.thingsboard.server.common.data.cf.configuration.ArgumentType; import org.thingsboard.server.common.data.cf.configuration.Output; -import org.thingsboard.server.common.data.cf.configuration.OutputType; import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey; +import org.thingsboard.server.common.data.cf.configuration.TimeSeriesOutput; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggFunction; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggKeyInput; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggMetric; @@ -209,8 +209,7 @@ public class EntityAggregationCalculatedFieldTest extends AbstractControllerTest consumption.setDefaultValue(9999L); aggMetrics.put("consumption", consumption); - Output output = new Output(); - output.setType(OutputType.TIME_SERIES); + TimeSeriesOutput output = new TimeSeriesOutput(); output.setDecimalsByDefault(0); return createAggCf("Consumption per minute", entityId, diff --git a/common/data/src/test/java/org/thingsboard/server/common/data/cf/configuration/aggregation/single/EntityAggregationCalculatedFieldConfigurationTest.java b/common/data/src/test/java/org/thingsboard/server/common/data/cf/configuration/aggregation/single/EntityAggregationCalculatedFieldConfigurationTest.java index 3884b5a214..9311bcead7 100644 --- a/common/data/src/test/java/org/thingsboard/server/common/data/cf/configuration/aggregation/single/EntityAggregationCalculatedFieldConfigurationTest.java +++ b/common/data/src/test/java/org/thingsboard/server/common/data/cf/configuration/aggregation/single/EntityAggregationCalculatedFieldConfigurationTest.java @@ -21,8 +21,8 @@ import org.junit.jupiter.params.provider.ValueSource; import org.thingsboard.server.common.data.cf.CalculatedFieldType; import org.thingsboard.server.common.data.cf.configuration.Argument; import org.thingsboard.server.common.data.cf.configuration.ArgumentType; -import org.thingsboard.server.common.data.cf.configuration.Output; import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey; +import org.thingsboard.server.common.data.cf.configuration.TimeSeriesOutput; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggFunctionInput; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggKeyInput; import org.thingsboard.server.common.data.cf.configuration.aggregation.AggMetric; @@ -74,7 +74,7 @@ public class EntityAggregationCalculatedFieldConfigurationTest { cfg.setMetrics(Map.of("m", metric)); cfg.setInterval(new HourInterval("Europe/Kiev", null)); - cfg.setOutput(new Output()); + cfg.setOutput(new TimeSeriesOutput()); assertThatThrownBy(cfg::validate) .isInstanceOf(IllegalArgumentException.class) @@ -92,7 +92,7 @@ public class EntityAggregationCalculatedFieldConfigurationTest { cfg.setMetrics(Map.of("m", metric)); cfg.setInterval(new HourInterval("Europe/Kiev", null)); - cfg.setOutput(new Output()); + cfg.setOutput(new TimeSeriesOutput()); assertThatThrownBy(cfg::validate) .isInstanceOf(IllegalArgumentException.class) @@ -106,7 +106,7 @@ public class EntityAggregationCalculatedFieldConfigurationTest { cfg.setArguments(Map.of("k", validArgument(ArgumentType.TS_LATEST))); cfg.setMetrics(Map.of("m", validMetric())); cfg.setInterval(null); - cfg.setOutput(new Output()); + cfg.setOutput(new TimeSeriesOutput()); assertThatThrownBy(cfg::validate) .isInstanceOf(IllegalArgumentException.class) diff --git a/ui-ngx/src/app/modules/home/components/calculated-fields/components/entity-aggregation-configuration/entity-aggregation-component.component.ts b/ui-ngx/src/app/modules/home/components/calculated-fields/components/entity-aggregation-configuration/entity-aggregation-component.component.ts index 5d612704a0..c0afae1c30 100644 --- a/ui-ngx/src/app/modules/home/components/calculated-fields/components/entity-aggregation-configuration/entity-aggregation-component.component.ts +++ b/ui-ngx/src/app/modules/home/components/calculated-fields/components/entity-aggregation-configuration/entity-aggregation-component.component.ts @@ -32,8 +32,8 @@ import { CalculatedFieldEntityAggregationConfiguration, CalculatedFieldOutput, CalculatedFieldType, + defaultCalculatedFieldOutput, notEmptyObjectValidator, - OutputType } from '@shared/models/calculated-field.models'; import { filter, map } from 'rxjs/operators'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; @@ -102,9 +102,7 @@ export class EntityAggregationComponentComponent implements ControlValueAccessor watermark: this.fb.group({ duration: [HOUR/SECOND, Validators.required], }), - output: this.fb.control({ - type: OutputType.Timeseries, - }), + output: this.fb.control(defaultCalculatedFieldOutput), }); arguments$ = this.entityAggregationConfiguration.get('arguments').valueChanges.pipe(