Merge pull request #13751 from dashevchenko/strValueForNumericTelemetry
Fixed EDQS entity field filter for numeric values saved as string
This commit is contained in:
		
						commit
						907982aab7
					
				@ -33,6 +33,16 @@ public class StringDataPoint extends AbstractDataPoint {
 | 
				
			|||||||
        this.value = deduplicate ? TbStringPool.intern(value) : value;
 | 
					        this.value = deduplicate ? TbStringPool.intern(value) : value;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public double getDouble() {
 | 
				
			||||||
 | 
					        return Double.parseDouble(value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public long getLong() {
 | 
				
			||||||
 | 
					        return Long.parseLong(value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public DataType getType() {
 | 
					    public DataType getType() {
 | 
				
			||||||
        return DataType.STRING;
 | 
					        return DataType.STRING;
 | 
				
			||||||
 | 
				
			|||||||
@ -26,6 +26,7 @@ import org.thingsboard.server.common.data.id.DeviceId;
 | 
				
			|||||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
 | 
					import org.thingsboard.server.common.data.id.DeviceProfileId;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
 | 
					import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.BooleanDataEntry;
 | 
					import org.thingsboard.server.common.data.kv.BooleanDataEntry;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.kv.DoubleDataEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.StringDataEntry;
 | 
					import org.thingsboard.server.common.data.kv.StringDataEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.query.EntityDataPageLink;
 | 
					import org.thingsboard.server.common.data.query.EntityDataPageLink;
 | 
				
			||||||
import org.thingsboard.server.common.data.query.EntityDataQuery;
 | 
					import org.thingsboard.server.common.data.query.EntityDataQuery;
 | 
				
			||||||
@ -36,7 +37,9 @@ import org.thingsboard.server.common.data.query.EntityKeyValueType;
 | 
				
			|||||||
import org.thingsboard.server.common.data.query.EntityTypeFilter;
 | 
					import org.thingsboard.server.common.data.query.EntityTypeFilter;
 | 
				
			||||||
import org.thingsboard.server.common.data.query.FilterPredicateValue;
 | 
					import org.thingsboard.server.common.data.query.FilterPredicateValue;
 | 
				
			||||||
import org.thingsboard.server.common.data.query.KeyFilter;
 | 
					import org.thingsboard.server.common.data.query.KeyFilter;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.query.NumericFilterPredicate;
 | 
				
			||||||
import org.thingsboard.server.common.data.query.StringFilterPredicate;
 | 
					import org.thingsboard.server.common.data.query.StringFilterPredicate;
 | 
				
			||||||
 | 
					import org.thingsboard.server.edqs.util.RepositoryUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Arrays;
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@ -61,6 +64,10 @@ public class EntityTypeFilterTest extends AbstractEDQTest {
 | 
				
			|||||||
        addOrUpdate(new LatestTsKv(device.getId(), new BasicTsKvEntry(43, new StringDataEntry("state", "enabled")), 0L));
 | 
					        addOrUpdate(new LatestTsKv(device.getId(), new BasicTsKvEntry(43, new StringDataEntry("state", "enabled")), 0L));
 | 
				
			||||||
        addOrUpdate(new LatestTsKv(device2.getId(), new BasicTsKvEntry(43, new StringDataEntry("state", "disabled")), 0L));
 | 
					        addOrUpdate(new LatestTsKv(device2.getId(), new BasicTsKvEntry(43, new StringDataEntry("state", "disabled")), 0L));
 | 
				
			||||||
        addOrUpdate(new LatestTsKv(device3.getId(), new BasicTsKvEntry(43, new BooleanDataEntry("free", true)), 0L));
 | 
					        addOrUpdate(new LatestTsKv(device3.getId(), new BasicTsKvEntry(43, new BooleanDataEntry("free", true)), 0L));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        addOrUpdate(new LatestTsKv(device.getId(), new BasicTsKvEntry(43, new StringDataEntry("temperature", "26.0")), 0L));
 | 
				
			||||||
 | 
					        addOrUpdate(new LatestTsKv(device2.getId(), new BasicTsKvEntry(43, new DoubleDataEntry("temperature", 25.0)), 0L));
 | 
				
			||||||
 | 
					        addOrUpdate(new LatestTsKv(device3.getId(), new BasicTsKvEntry(43, new DoubleDataEntry("temperature", 19.0)), 0L));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @After
 | 
					    @After
 | 
				
			||||||
@ -87,6 +94,11 @@ public class EntityTypeFilterTest extends AbstractEDQTest {
 | 
				
			|||||||
        // find asset entities
 | 
					        // find asset entities
 | 
				
			||||||
        result = repository.findEntityDataByQuery(tenantId, null, getEntityTypeQuery(EntityType.ASSET,  null),  false);
 | 
					        result = repository.findEntityDataByQuery(tenantId, null, getEntityTypeQuery(EntityType.ASSET,  null),  false);
 | 
				
			||||||
        Assert.assertEquals(0, result.getTotalElements());
 | 
					        Assert.assertEquals(0, result.getTotalElements());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // find all tenant devices with filter by temperature
 | 
				
			||||||
 | 
					        KeyFilter tempFilter = getTemperatureFilter(NumericFilterPredicate.NumericOperation.GREATER_OR_EQUAL, 20.0);
 | 
				
			||||||
 | 
					        result = repository.findEntityDataByQuery(tenantId, null, getEntityTypeQuery(EntityType.DEVICE,  List.of(tempFilter)), false);
 | 
				
			||||||
 | 
					        Assert.assertEquals(2, result.getTotalElements());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@ -143,4 +155,15 @@ public class EntityTypeFilterTest extends AbstractEDQTest {
 | 
				
			|||||||
        return nameFilter;
 | 
					        return nameFilter;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static KeyFilter getTemperatureFilter(NumericFilterPredicate.NumericOperation operation, Double predicateValue) {
 | 
				
			||||||
 | 
					        KeyFilter tempFilter = new KeyFilter();
 | 
				
			||||||
 | 
					        tempFilter.setKey(new EntityKey(EntityKeyType.TIME_SERIES, "temperature"));
 | 
				
			||||||
 | 
					        var predicate = new NumericFilterPredicate();
 | 
				
			||||||
 | 
					        predicate.setOperation(operation);
 | 
				
			||||||
 | 
					        predicate.setValue(new FilterPredicateValue<>(predicateValue));
 | 
				
			||||||
 | 
					        tempFilter.setPredicate(predicate);
 | 
				
			||||||
 | 
					        tempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
 | 
					        return tempFilter;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user