Browse Source

round result

pull/14253/head
IrynaMatveieva 11 months ago
parent
commit
4037efaf3a
  1. 12
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java
  2. 2
      dao/src/main/java/org/thingsboard/server/dao/service/validator/CalculatedFieldDataValidator.java

12
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java

@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.script.api.tbel.TbUtils;
import org.thingsboard.server.actors.TbActorRef; import org.thingsboard.server.actors.TbActorRef;
import org.thingsboard.server.common.data.cf.CalculatedFieldType; import org.thingsboard.server.common.data.cf.CalculatedFieldType;
import org.thingsboard.server.common.data.cf.configuration.Output; import org.thingsboard.server.common.data.cf.configuration.Output;
@ -89,11 +90,11 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt
}); });
removeExpiredIntervals(expiredIntervals); removeExpiredIntervals(expiredIntervals);
ArrayNode result = toResult(results); Output output = ctx.getOutput();
ArrayNode result = toResult(results, output.getDecimalsByDefault());
if (result.isEmpty()) { if (result.isEmpty()) {
return Futures.immediateFuture(TelemetryCalculatedFieldResult.EMPTY); return Futures.immediateFuture(TelemetryCalculatedFieldResult.EMPTY);
} }
Output output = ctx.getOutput();
return Futures.immediateFuture(TelemetryCalculatedFieldResult.builder() return Futures.immediateFuture(TelemetryCalculatedFieldResult.builder()
.type(output.getType()) .type(output.getType())
.scope(output.getScope()) .scope(output.getScope())
@ -227,7 +228,7 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt
.orElse(null); .orElse(null);
} }
protected ArrayNode toResult(Map<AggIntervalEntry, Map<String, ArgumentEntry>> results) { protected ArrayNode toResult(Map<AggIntervalEntry, Map<String, ArgumentEntry>> results, Integer precision) {
ArrayNode result = JacksonUtil.newArrayNode(); ArrayNode result = JacksonUtil.newArrayNode();
results.forEach((interval, args) -> { results.forEach((interval, args) -> {
ObjectNode metricsNode = JacksonUtil.newObjectNode(); ObjectNode metricsNode = JacksonUtil.newObjectNode();
@ -235,7 +236,10 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt
String metricName = entry.getKey(); String metricName = entry.getKey();
ArgumentEntry argumentEntry = entry.getValue(); ArgumentEntry argumentEntry = entry.getValue();
if (!argumentEntry.isEmpty()) { if (!argumentEntry.isEmpty()) {
metricsNode.put(metricName, JacksonUtil.toString(argumentEntry.getValue())); Object resultValue = argumentEntry.getValue() instanceof Number number
? TbUtils.roundResult(number.doubleValue(), precision)
: argumentEntry.getValue();
metricsNode.put(metricName, JacksonUtil.toString(resultValue));
} }
} }
ObjectNode resultNode = JacksonUtil.newObjectNode(); ObjectNode resultNode = JacksonUtil.newObjectNode();

2
dao/src/main/java/org/thingsboard/server/dao/service/validator/CalculatedFieldDataValidator.java

@ -134,7 +134,7 @@ public class CalculatedFieldDataValidator extends DataValidator<CalculatedField>
if (minAggregationIntervalInSec <= 0) { if (minAggregationIntervalInSec <= 0) {
return; return;
} }
if (aggConfiguration.getInterval().getIntervalDurationMillis() > TimeUnit.SECONDS.toMillis(minAggregationIntervalInSec)) { if (aggConfiguration.getInterval().getIntervalDurationMillis() < TimeUnit.SECONDS.toMillis(minAggregationIntervalInSec)) {
throw new IllegalArgumentException("Aggregation interval duration is less than configured " + throw new IllegalArgumentException("Aggregation interval duration is less than configured " +
"minimum allowed aggregation interval in tenant profile: " + minAggregationIntervalInSec + " sec."); "minimum allowed aggregation interval in tenant profile: " + minAggregationIntervalInSec + " sec.");
} }

Loading…
Cancel
Save