thingsboard-aplcache

Details

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 c5739f1..74356ad 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
@@ -34,7 +34,9 @@ public final class TsKvEntity implements ToData<TsKvEntry> {
     }
 
     public TsKvEntity(Double avgLongValue, Double avgDoubleValue) {
-        this.longValue = avgLongValue.longValue();
+        if(avgLongValue != null) {
+            this.longValue = avgLongValue.longValue();
+        }
         this.doubleValue = avgDoubleValue;
     }
 
@@ -104,4 +106,8 @@ public final class TsKvEntity implements ToData<TsKvEntry> {
         }
         return new BasicTsKvEntry(ts, kvEntry);
     }
+
+    public boolean isNotEmpty() {
+        return strValue != null || longValue != null || doubleValue != null || booleanValue != null;
+    }
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/TsKvRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/TsKvRepository.java
index 2c7751d..b37d272 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/TsKvRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/TsKvRepository.java
@@ -19,12 +19,14 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.query.Param;
+import org.springframework.scheduling.annotation.Async;
 import org.thingsboard.server.common.data.EntityType;
 import org.thingsboard.server.dao.model.sql.TsKvCompositeKey;
 import org.thingsboard.server.dao.model.sql.TsKvEntity;
 import org.thingsboard.server.dao.util.SqlDao;
 
 import java.util.List;
+import java.util.concurrent.Future;
 
 @SqlDao
 public interface TsKvRepository extends CrudRepository<TsKvEntity, TsKvCompositeKey> {
@@ -39,49 +41,52 @@ public interface TsKvRepository extends CrudRepository<TsKvEntity, TsKvComposite
                                       @Param("endTs") long endTs,
                                       Pageable pageable);
 
+    @Async
     @Query("SELECT new TsKvEntity(MAX(tskv.strValue), MAX(tskv.longValue), MAX(tskv.doubleValue)) FROM TsKvEntity tskv " +
             "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " +
             "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs")
-    TsKvEntity findMax(@Param("entityId") String entityId,
+    Future<TsKvEntity> findMax(@Param("entityId") String entityId,
                        @Param("entityType") EntityType entityType,
                        @Param("entityKey") String entityKey,
                        @Param("startTs") long startTs,
                        @Param("endTs") long endTs);
 
+    @Async
     @Query("SELECT new TsKvEntity(MIN(tskv.strValue), MIN(tskv.longValue), MIN(tskv.doubleValue)) FROM TsKvEntity tskv " +
             "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " +
             "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs")
-    TsKvEntity findMin(@Param("entityId") String entityId,
+    Future<TsKvEntity> findMin(@Param("entityId") String entityId,
                        @Param("entityType") EntityType entityType,
                        @Param("entityKey") String entityKey,
                        @Param("startTs") long startTs,
                        @Param("endTs") long endTs);
 
-
+    @Async
     @Query("SELECT new TsKvEntity(COUNT(tskv.booleanValue), COUNT(tskv.strValue), COUNT(tskv.longValue), COUNT(tskv.doubleValue)) FROM TsKvEntity tskv " +
             "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " +
             "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs")
-    TsKvEntity findCount(@Param("entityId") String entityId,
-                         @Param("entityType") EntityType entityType,
-                         @Param("entityKey") String entityKey,
-                         @Param("startTs") long startTs,
-                         @Param("endTs") long endTs);
-
+    Future<TsKvEntity> findCount(@Param("entityId") String entityId,
+                                 @Param("entityType") EntityType entityType,
+                                 @Param("entityKey") String entityKey,
+                                 @Param("startTs") long startTs,
+                                 @Param("endTs") long endTs);
 
+    @Async
     @Query("SELECT new TsKvEntity(AVG(tskv.longValue), AVG(tskv.doubleValue)) FROM TsKvEntity tskv " +
             "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " +
             "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs")
-    TsKvEntity findAvg(@Param("entityId") String entityId,
+    Future<TsKvEntity> findAvg(@Param("entityId") String entityId,
                        @Param("entityType") EntityType entityType,
                        @Param("entityKey") String entityKey,
                        @Param("startTs") long startTs,
                        @Param("endTs") long endTs);
 
 
+    @Async
     @Query("SELECT new TsKvEntity(SUM(tskv.longValue), SUM(tskv.doubleValue)) FROM TsKvEntity tskv " +
             "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " +
             "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs")
-    TsKvEntity findSum(@Param("entityId") String entityId,
+    Future<TsKvEntity> findSum(@Param("entityId") String entityId,
                        @Param("entityType") EntityType entityType,
                        @Param("entityKey") String entityKey,
                        @Param("startTs") long startTs,
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionUpdate.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionUpdate.java
index 4d8cf53..618ddc7 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionUpdate.java
+++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionUpdate.java
@@ -32,11 +32,7 @@ public class SubscriptionUpdate {
         this.subscriptionId = subscriptionId;
         this.data = new TreeMap<>();
         for (TsKvEntry tsEntry : data) {
-            List<Object> values = this.data.get(tsEntry.getKey());
-            if (values == null) {
-                values = new ArrayList<>();
-                this.data.put(tsEntry.getKey(), values);
-            }
+            List<Object> values = this.data.computeIfAbsent(tsEntry.getKey(), k -> new ArrayList<>());
             Object[] value = new Object[2];
             value[0] = tsEntry.getTs();
             value[1] = tsEntry.getValueAsString();