Merge pull request #5656 from desoliture1/device_search_improvements
[3.3.3] Device search improvements
This commit is contained in:
		
						commit
						6867744a38
					
				@ -19,7 +19,6 @@ import org.springframework.data.domain.Page;
 | 
			
		||||
import org.springframework.data.domain.Pageable;
 | 
			
		||||
import org.springframework.data.jpa.repository.JpaRepository;
 | 
			
		||||
import org.springframework.data.jpa.repository.Query;
 | 
			
		||||
import org.springframework.data.repository.PagingAndSortingRepository;
 | 
			
		||||
import org.springframework.data.repository.query.Param;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceTransportType;
 | 
			
		||||
import org.thingsboard.server.dao.model.sql.DeviceEntity;
 | 
			
		||||
@ -83,7 +82,10 @@ public interface DeviceRepository extends JpaRepository<DeviceEntity, UUID> {
 | 
			
		||||
            "LEFT JOIN CustomerEntity c on c.id = d.customerId " +
 | 
			
		||||
            "LEFT JOIN DeviceProfileEntity p on p.id = d.deviceProfileId " +
 | 
			
		||||
            "WHERE d.tenantId = :tenantId " +
 | 
			
		||||
            "AND LOWER(d.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%'))")
 | 
			
		||||
            "AND (LOWER(d.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%')) " +
 | 
			
		||||
            "OR LOWER(d.label) LIKE LOWER(CONCAT('%', :textSearch, '%')) " +
 | 
			
		||||
            "OR LOWER(p.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%')) " +
 | 
			
		||||
            "OR LOWER(c.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%')))")
 | 
			
		||||
    Page<DeviceInfoEntity> findDeviceInfosByTenantId(@Param("tenantId") UUID tenantId,
 | 
			
		||||
                                                     @Param("textSearch") String textSearch,
 | 
			
		||||
                                                     Pageable pageable);
 | 
			
		||||
@ -132,7 +134,9 @@ public interface DeviceRepository extends JpaRepository<DeviceEntity, UUID> {
 | 
			
		||||
            "LEFT JOIN DeviceProfileEntity p on p.id = d.deviceProfileId " +
 | 
			
		||||
            "WHERE d.tenantId = :tenantId " +
 | 
			
		||||
            "AND d.type = :type " +
 | 
			
		||||
            "AND LOWER(d.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%'))")
 | 
			
		||||
            "AND (LOWER(d.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%')) " +
 | 
			
		||||
            "OR LOWER(d.label) LIKE LOWER(CONCAT('%', :textSearch, '%')) " +
 | 
			
		||||
            "OR LOWER(c.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%')))")
 | 
			
		||||
    Page<DeviceInfoEntity> findDeviceInfosByTenantIdAndType(@Param("tenantId") UUID tenantId,
 | 
			
		||||
                                                            @Param("type") String type,
 | 
			
		||||
                                                            @Param("textSearch") String textSearch,
 | 
			
		||||
@ -144,7 +148,9 @@ public interface DeviceRepository extends JpaRepository<DeviceEntity, UUID> {
 | 
			
		||||
            "LEFT JOIN DeviceProfileEntity p on p.id = d.deviceProfileId " +
 | 
			
		||||
            "WHERE d.tenantId = :tenantId " +
 | 
			
		||||
            "AND d.deviceProfileId = :deviceProfileId " +
 | 
			
		||||
            "AND LOWER(d.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%'))")
 | 
			
		||||
            "AND (LOWER(d.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%')) " +
 | 
			
		||||
            "OR LOWER(d.label) LIKE LOWER(CONCAT('%', :textSearch, '%')) " +
 | 
			
		||||
            "OR LOWER(c.searchText) LIKE LOWER(CONCAT('%', :textSearch, '%')))")
 | 
			
		||||
    Page<DeviceInfoEntity> findDeviceInfosByTenantIdAndDeviceProfileId(@Param("tenantId") UUID tenantId,
 | 
			
		||||
                                                                       @Param("deviceProfileId") UUID deviceProfileId,
 | 
			
		||||
                                                                       @Param("textSearch") String textSearch,
 | 
			
		||||
 | 
			
		||||
@ -352,7 +352,9 @@ public abstract class BaseDeviceServiceTest extends AbstractServiceTest {
 | 
			
		||||
            Assert.assertEquals("typeB", deviceTypes.get(1).getType());
 | 
			
		||||
            Assert.assertEquals("typeC", deviceTypes.get(2).getType());
 | 
			
		||||
        } finally {
 | 
			
		||||
            devices.forEach((device) -> { deviceService.deleteDevice(tenantId, device.getId()); });
 | 
			
		||||
            devices.forEach((device) -> {
 | 
			
		||||
                deviceService.deleteDevice(tenantId, device.getId());
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -818,4 +820,157 @@ public abstract class BaseDeviceServiceTest extends AbstractServiceTest {
 | 
			
		||||
        Assert.assertNull("Can't find device by name in cache if it was renamed", renamedDevice);
 | 
			
		||||
        deviceService.deleteDevice(tenantId, savedDevice.getId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testFindDeviceInfoByTenantId() {
 | 
			
		||||
        Customer customer = new Customer();
 | 
			
		||||
        customer.setTitle("Customer X");
 | 
			
		||||
        customer.setTenantId(tenantId);
 | 
			
		||||
        Customer savedCustomer = customerService.saveCustomer(customer);
 | 
			
		||||
 | 
			
		||||
        Device device = new Device();
 | 
			
		||||
        device.setTenantId(tenantId);
 | 
			
		||||
        device.setName("default");
 | 
			
		||||
        device.setType("default");
 | 
			
		||||
        device.setLabel("label");
 | 
			
		||||
        device.setCustomerId(savedCustomer.getId());
 | 
			
		||||
 | 
			
		||||
        Device savedDevice = deviceService.saveDevice(device);
 | 
			
		||||
 | 
			
		||||
        PageLink pageLinkWithLabel = new PageLink(100, 0, "label");
 | 
			
		||||
        List<DeviceInfo> deviceInfosWithLabel = deviceService
 | 
			
		||||
                .findDeviceInfosByTenantId(tenantId, pageLinkWithLabel).getData();
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(deviceInfosWithLabel.isEmpty());
 | 
			
		||||
        Assert.assertTrue(
 | 
			
		||||
                deviceInfosWithLabel.stream()
 | 
			
		||||
                        .anyMatch(
 | 
			
		||||
                                d -> d.getId().equals(savedDevice.getId())
 | 
			
		||||
                                    && d.getTenantId().equals(tenantId)
 | 
			
		||||
                                    && d.getLabel().equals(savedDevice.getLabel())
 | 
			
		||||
                        )
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        PageLink pageLinkWithCustomer = new PageLink(100, 0, savedCustomer.getSearchText());
 | 
			
		||||
        List<DeviceInfo> deviceInfosWithCustomer = deviceService
 | 
			
		||||
                .findDeviceInfosByTenantId(tenantId, pageLinkWithCustomer).getData();
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(deviceInfosWithCustomer.isEmpty());
 | 
			
		||||
        Assert.assertTrue(
 | 
			
		||||
                deviceInfosWithCustomer.stream()
 | 
			
		||||
                        .anyMatch(
 | 
			
		||||
                                d -> d.getId().equals(savedDevice.getId())
 | 
			
		||||
                                        && d.getTenantId().equals(tenantId)
 | 
			
		||||
                                        && d.getCustomerId().equals(savedCustomer.getId())
 | 
			
		||||
                                        && d.getCustomerTitle().equals(savedCustomer.getTitle())
 | 
			
		||||
                        )
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        PageLink pageLinkWithType = new PageLink(100, 0, device.getType());
 | 
			
		||||
        List<DeviceInfo> deviceInfosWithType = deviceService
 | 
			
		||||
                .findDeviceInfosByTenantId(tenantId, pageLinkWithType).getData();
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(deviceInfosWithType.isEmpty());
 | 
			
		||||
        Assert.assertTrue(
 | 
			
		||||
                deviceInfosWithType.stream()
 | 
			
		||||
                        .anyMatch(
 | 
			
		||||
                                d -> d.getId().equals(savedDevice.getId())
 | 
			
		||||
                                        && d.getTenantId().equals(tenantId)
 | 
			
		||||
                                        && d.getType().equals(device.getType())
 | 
			
		||||
                        )
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testFindDeviceInfoByTenantIdAndType() {
 | 
			
		||||
        Customer customer = new Customer();
 | 
			
		||||
        customer.setTitle("Customer X");
 | 
			
		||||
        customer.setTenantId(tenantId);
 | 
			
		||||
        Customer savedCustomer = customerService.saveCustomer(customer);
 | 
			
		||||
 | 
			
		||||
        Device device = new Device();
 | 
			
		||||
        device.setTenantId(tenantId);
 | 
			
		||||
        device.setName("default");
 | 
			
		||||
        device.setType("default");
 | 
			
		||||
        device.setLabel("label");
 | 
			
		||||
        device.setCustomerId(savedCustomer.getId());
 | 
			
		||||
        Device savedDevice = deviceService.saveDevice(device);
 | 
			
		||||
 | 
			
		||||
        PageLink pageLinkWithLabel = new PageLink(100, 0, "label");
 | 
			
		||||
        List<DeviceInfo> deviceInfosWithLabel = deviceService
 | 
			
		||||
                .findDeviceInfosByTenantIdAndType(tenantId, device.getType(), pageLinkWithLabel).getData();
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(deviceInfosWithLabel.isEmpty());
 | 
			
		||||
        Assert.assertTrue(
 | 
			
		||||
                deviceInfosWithLabel.stream()
 | 
			
		||||
                        .anyMatch(
 | 
			
		||||
                                d -> d.getId().equals(savedDevice.getId())
 | 
			
		||||
                                    && d.getTenantId().equals(tenantId)
 | 
			
		||||
                                    && d.getDeviceProfileName().equals(savedDevice.getType())
 | 
			
		||||
                                    && d.getLabel().equals(savedDevice.getLabel())
 | 
			
		||||
                        )
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        PageLink pageLinkWithCustomer = new PageLink(100, 0, savedCustomer.getSearchText());
 | 
			
		||||
        List<DeviceInfo> deviceInfosWithCustomer = deviceService
 | 
			
		||||
                .findDeviceInfosByTenantIdAndType(tenantId, device.getType(), pageLinkWithCustomer).getData();
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(deviceInfosWithCustomer.isEmpty());
 | 
			
		||||
        Assert.assertTrue(
 | 
			
		||||
                deviceInfosWithCustomer.stream()
 | 
			
		||||
                        .anyMatch(
 | 
			
		||||
                                d -> d.getId().equals(savedDevice.getId())
 | 
			
		||||
                                        && d.getTenantId().equals(tenantId)
 | 
			
		||||
                                        && d.getDeviceProfileName().equals(savedDevice.getType())
 | 
			
		||||
                                        && d.getCustomerId().equals(savedCustomer.getId())
 | 
			
		||||
                                        && d.getCustomerTitle().equals(savedCustomer.getTitle())
 | 
			
		||||
                        )
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testFindDeviceInfoByTenantIdAndDeviceProfileId() {
 | 
			
		||||
        Customer customer = new Customer();
 | 
			
		||||
        customer.setTitle("Customer X");
 | 
			
		||||
        customer.setTenantId(tenantId);
 | 
			
		||||
        Customer savedCustomer = customerService.saveCustomer(customer);
 | 
			
		||||
 | 
			
		||||
        Device device = new Device();
 | 
			
		||||
        device.setTenantId(tenantId);
 | 
			
		||||
        device.setName("default");
 | 
			
		||||
        device.setLabel("label");
 | 
			
		||||
        device.setCustomerId(savedCustomer.getId());
 | 
			
		||||
        Device savedDevice = deviceService.saveDevice(device);
 | 
			
		||||
 | 
			
		||||
        PageLink pageLinkWithLabel = new PageLink(100, 0, "label");
 | 
			
		||||
        List<DeviceInfo> deviceInfosWithLabel = deviceService
 | 
			
		||||
                .findDeviceInfosByTenantIdAndDeviceProfileId(tenantId, savedDevice.getDeviceProfileId(), pageLinkWithLabel).getData();
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(deviceInfosWithLabel.isEmpty());
 | 
			
		||||
        Assert.assertTrue(
 | 
			
		||||
                deviceInfosWithLabel.stream()
 | 
			
		||||
                        .anyMatch(
 | 
			
		||||
                                d -> d.getId().equals(savedDevice.getId())
 | 
			
		||||
                                        && d.getTenantId().equals(tenantId)
 | 
			
		||||
                                        && d.getDeviceProfileId().equals(savedDevice.getDeviceProfileId())
 | 
			
		||||
                                        && d.getLabel().equals(savedDevice.getLabel())
 | 
			
		||||
                        )
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        PageLink pageLinkWithCustomer = new PageLink(100, 0, savedCustomer.getSearchText());
 | 
			
		||||
        List<DeviceInfo> deviceInfosWithCustomer = deviceService
 | 
			
		||||
                .findDeviceInfosByTenantIdAndDeviceProfileId(tenantId, savedDevice.getDeviceProfileId(), pageLinkWithCustomer).getData();
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(deviceInfosWithCustomer.isEmpty());
 | 
			
		||||
        Assert.assertTrue(
 | 
			
		||||
                deviceInfosWithCustomer.stream()
 | 
			
		||||
                        .anyMatch(
 | 
			
		||||
                                d -> d.getId().equals(savedDevice.getId())
 | 
			
		||||
                                        && d.getTenantId().equals(tenantId)
 | 
			
		||||
                                        && d.getDeviceProfileId().equals(savedDevice.getDeviceProfileId())
 | 
			
		||||
                                        && d.getCustomerId().equals(savedCustomer.getId())
 | 
			
		||||
                                        && d.getCustomerTitle().equals(savedCustomer.getTitle())
 | 
			
		||||
                        )
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user