diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvEntity.java index d5a0968dd4..873f8e8c42 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvEntity.java @@ -62,49 +62,53 @@ public final class TsKvEntity implements ToData { } public TsKvEntity(Long longValue, Double doubleValue, Long longCountValue, Long doubleCountValue, String aggType) { - switch (aggType) { - case AVG: - double sum = 0.0; - if (longValue != null) { - sum += longValue; - } - if (doubleValue != null) { - sum += doubleValue; - } - long totalCount = longCountValue + doubleCountValue; - if (totalCount > 0) { - this.doubleValue = sum / (longCountValue + doubleCountValue); - } else { - this.doubleValue = 0.0; - } - break; - case SUM: - if (doubleCountValue > 0) { - this.doubleValue = doubleValue + (longValue != null ? longValue.doubleValue() : 0.0); - } else { - this.longValue = longValue; - } - break; - case MIN: - case MAX: - if (longCountValue > 0 && doubleCountValue > 0) { - this.doubleValue = MAX.equals(aggType) ? Math.max(doubleValue, longValue.doubleValue()) : Math.min(doubleValue, longValue.doubleValue()); - } else if (doubleCountValue > 0) { - this.doubleValue = doubleValue; - } else if (longCountValue > 0) { - this.longValue = longValue; - } - break; + if(!isAllNull(longValue, doubleValue, longCountValue, doubleCountValue)) { + switch (aggType) { + case AVG: + double sum = 0.0; + if (longValue != null) { + sum += longValue; + } + if (doubleValue != null) { + sum += doubleValue; + } + long totalCount = longCountValue + doubleCountValue; + if (totalCount > 0) { + this.doubleValue = sum / (longCountValue + doubleCountValue); + } else { + this.doubleValue = 0.0; + } + break; + case SUM: + if (doubleCountValue > 0) { + this.doubleValue = doubleValue + (longValue != null ? longValue.doubleValue() : 0.0); + } else { + this.longValue = longValue; + } + break; + case MIN: + case MAX: + if (longCountValue > 0 && doubleCountValue > 0) { + this.doubleValue = MAX.equals(aggType) ? Math.max(doubleValue, longValue.doubleValue()) : Math.min(doubleValue, longValue.doubleValue()); + } else if (doubleCountValue > 0) { + this.doubleValue = doubleValue; + } else if (longCountValue > 0) { + this.longValue = longValue; + } + break; + } } } public TsKvEntity(Long booleanValueCount, Long strValueCount, Long longValueCount, Long doubleValueCount) { - if (booleanValueCount != 0) { - this.longValue = booleanValueCount; - } else if (strValueCount != 0) { - this.longValue = strValueCount; - } else { - this.longValue = longValueCount + doubleValueCount; + if(!isAllNull(booleanValueCount, strValueCount, longValueCount, doubleValueCount)) { + if (booleanValueCount != 0) { + this.longValue = booleanValueCount; + } else if (strValueCount != 0) { + this.longValue = strValueCount; + } else { + this.longValue = longValueCount + doubleValueCount; + } } } @@ -155,4 +159,13 @@ public final class TsKvEntity implements ToData { public boolean isNotEmpty() { return strValue != null || longValue != null || doubleValue != null || booleanValue != null; } + + private static boolean isAllNull(Object... args) { + for (Object arg : args) { + if(arg != null) { + return false; + } + } + return true; + } }