From c19cf2372e4d8e861f272b1f25d9a9390c5c0d9e Mon Sep 17 00:00:00 2001 From: Artem Babak Date: Fri, 11 Dec 2020 08:48:18 +0200 Subject: [PATCH] Added findEntityViewByTenantIdAndEdgeIdAndType and findDevicesByTenantIdAndEdgeIdAndDeviceProfileId --- .../server/controller/DeviceController.java | 12 +++++- .../controller/EntityViewController.java | 7 +++- .../server/dao/device/DeviceService.java | 5 +++ .../dao/entityview/EntityViewService.java | 2 + .../server/dao/device/DeviceDao.java | 23 +++++++++++ .../server/dao/device/DeviceServiceImpl.java | 20 ++++++++++ .../server/dao/entityview/EntityViewDao.java | 14 +++++++ .../dao/entityview/EntityViewServiceImpl.java | 10 +++++ .../dao/sql/device/DeviceRepository.java | 39 ++++++++++++++++++- .../server/dao/sql/device/JpaDeviceDao.java | 24 ++++++++++++ .../sql/entityview/EntityViewRepository.java | 11 ++++++ .../dao/sql/entityview/JpaEntityViewDao.java | 12 ++++++ 12 files changed, 176 insertions(+), 3 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java index e9b41adf06..6e7bb0cf21 100644 --- a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java +++ b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java @@ -701,6 +701,8 @@ public class DeviceController extends BaseController { @PathVariable(EDGE_ID) String strEdgeId, @RequestParam int pageSize, @RequestParam int page, + @RequestParam(required = false) String type, + @RequestParam(required = false) String deviceProfileId, @RequestParam(required = false) String textSearch, @RequestParam(required = false) String sortProperty, @RequestParam(required = false) String sortOrder, @@ -712,7 +714,15 @@ public class DeviceController extends BaseController { EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); checkEdgeId(edgeId, Operation.READ); TimePageLink pageLink = createTimePageLink(pageSize, page, textSearch, sortProperty, sortOrder, startTime, endTime); - return checkNotNull(deviceService.findDevicesByTenantIdAndEdgeId(tenantId, edgeId, pageLink)); + if (type != null && type.trim().length() > 0) { + return checkNotNull(deviceService.findDevicesByTenantIdAndEdgeIdAndType(tenantId, edgeId, type, pageLink)); + } + else if (deviceProfileId != null && deviceProfileId.length() > 0) { + DeviceProfileId profileId = new DeviceProfileId(toUUID(deviceProfileId)); + return checkNotNull(deviceService.findDevicesByTenantIdAndEdgeIdAndDeviceProfileId(tenantId, edgeId, profileId, pageLink)); + } else { + return checkNotNull(deviceService.findDevicesByTenantIdAndEdgeId(tenantId, edgeId, pageLink)); + } } catch (Exception e) { throw handleException(e); } diff --git a/application/src/main/java/org/thingsboard/server/controller/EntityViewController.java b/application/src/main/java/org/thingsboard/server/controller/EntityViewController.java index 7cc21aa7eb..7dd38e1204 100644 --- a/application/src/main/java/org/thingsboard/server/controller/EntityViewController.java +++ b/application/src/main/java/org/thingsboard/server/controller/EntityViewController.java @@ -677,6 +677,7 @@ public class EntityViewController extends BaseController { @PathVariable(EDGE_ID) String strEdgeId, @RequestParam int pageSize, @RequestParam int page, + @RequestParam(required = false) String type, @RequestParam(required = false) String textSearch, @RequestParam(required = false) String sortProperty, @RequestParam(required = false) String sortOrder, @@ -688,7 +689,11 @@ public class EntityViewController extends BaseController { EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); checkEdgeId(edgeId, Operation.READ); TimePageLink pageLink = createTimePageLink(pageSize, page, textSearch, sortProperty, sortOrder, startTime, endTime); - return checkNotNull(entityViewService.findEntityViewsByTenantIdAndEdgeId(tenantId, edgeId, pageLink)); + if (type != null && type.trim().length() > 0) { + return checkNotNull(entityViewService.findEntityViewsByTenantIdAndEdgeIdAndType(tenantId, edgeId, type, pageLink)); + } else { + return checkNotNull(entityViewService.findEntityViewsByTenantIdAndEdgeId(tenantId, edgeId, pageLink)); + } } catch (Exception e) { throw handleException(e); } diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java index dd55f2b884..8680d4e49e 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceService.java @@ -90,4 +90,9 @@ public interface DeviceService { Device unassignDeviceFromEdge(TenantId tenantId, DeviceId deviceId, EdgeId edgeId); PageData findDevicesByTenantIdAndEdgeId(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink); + + PageData findDevicesByTenantIdAndEdgeIdAndType(TenantId tenantId, EdgeId edgeId, String type, TimePageLink pageLink); + + PageData findDevicesByTenantIdAndEdgeIdAndDeviceProfileId(TenantId tenantId, EdgeId edgeId, DeviceProfileId deviceProfileId, TimePageLink pageLink); + } diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java index 7d832c5f1b..dc07b7c805 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entityview/EntityViewService.java @@ -83,4 +83,6 @@ public interface EntityViewService { EntityView unassignEntityViewFromEdge(TenantId tenantId, EntityViewId entityViewId, EdgeId edgeId); PageData findEntityViewsByTenantIdAndEdgeId(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink); + + PageData findEntityViewsByTenantIdAndEdgeIdAndType(TenantId tenantId, EdgeId edgeId, String type, TimePageLink pageLink); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java index 068a812b75..a35360ae70 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java @@ -226,4 +226,27 @@ public interface DeviceDao extends Dao { * @return the list of device objects */ PageData findDevicesByTenantIdAndEdgeId(UUID tenantId, UUID edgeId, TimePageLink pageLink); + + /** + * Find devices by tenantId, edgeId, type and page link. + * + * @param tenantId the tenantId + * @param edgeId the edgeId + * @param type the type + * @param pageLink the page link + * @return the list of device objects + */ + PageData findDevicesByTenantIdAndEdgeIdAndType(UUID tenantId, UUID edgeId, String type, TimePageLink pageLink); + + /** + * Find devices by tenantId, edgeId, type, deviceProfileId and page link. + * + * @param tenantId the tenantId + * @param edgeId the edgeId + * @param deviceProfileId the deviceProfileId + * @param pageLink the page link + * @return the list of device objects + */ + PageData findDevicesByTenantIdAndEdgeIdAndDeviceProfileId(UUID tenantId, UUID edgeId, UUID deviceProfileId, TimePageLink pageLink); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java index eeefb6d3b9..bd0bc444d8 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java @@ -515,6 +515,26 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe return deviceDao.findDevicesByTenantIdAndEdgeId(tenantId.getId(), edgeId.getId(), pageLink); } + @Override + public PageData findDevicesByTenantIdAndEdgeIdAndType(TenantId tenantId, EdgeId edgeId, String type, TimePageLink pageLink) { + log.trace("Executing findDevicesByTenantIdAndEdgeIdAndType, tenantId [{}], edgeId [{}], type [{}], pageLink [{}]", tenantId, edgeId, type, pageLink); + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); + validateId(edgeId, INCORRECT_EDGE_ID + edgeId); + validateString(type, "Incorrect type " + type); + validatePageLink(pageLink); + return deviceDao.findDevicesByTenantIdAndEdgeIdAndType(tenantId.getId(), edgeId.getId(), type, pageLink); + } + + @Override + public PageData findDevicesByTenantIdAndEdgeIdAndDeviceProfileId(TenantId tenantId, EdgeId edgeId, DeviceProfileId deviceProfileId, TimePageLink pageLink) { + log.trace("Executing findDevicesByTenantIdAndEdgeIdAndDeviceProfileId, tenantId [{}], edgeId [{}], deviceProfileId [{}], pageLink [{}]", tenantId, edgeId, deviceProfileId, pageLink); + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); + validateId(edgeId, INCORRECT_EDGE_ID + edgeId); + validateId(deviceProfileId, INCORRECT_DEVICE_PROFILE_ID + deviceProfileId); + validatePageLink(pageLink); + return deviceDao.findDevicesByTenantIdAndEdgeIdAndDeviceProfileId(tenantId.getId(), edgeId.getId(), deviceProfileId.getId(), pageLink); + } + private DataValidator deviceValidator = new DataValidator() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java index e8771da4e5..d4021027c7 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java @@ -165,4 +165,18 @@ public interface EntityViewDao extends Dao { UUID edgeId, PageLink pageLink); + /** + * Find entity views by tenantId, edgeId, type and page link. + * + * @param tenantId the tenantId + * @param edgeId the edgeId + * @param type the type + * @param pageLink the page link + * @return the list of entity view objects + */ + PageData findEntityViewsByTenantIdAndEdgeIdAndType(UUID tenantId, + UUID edgeId, + String type, + PageLink pageLink); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java index bead2c34b5..696180d9d5 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java @@ -390,6 +390,16 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti return entityViewDao.findEntityViewsByTenantIdAndEdgeId(tenantId.getId(), edgeId.getId(), pageLink); } + @Override + public PageData findEntityViewsByTenantIdAndEdgeIdAndType(TenantId tenantId, EdgeId edgeId, String type, TimePageLink pageLink) { + log.trace("Executing findEntityViewsByTenantIdAndEdgeIdAndType, tenantId [{}], edgeId [{}], type [{}], pageLink [{}]", tenantId, edgeId, type, pageLink); + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); + validateId(edgeId, INCORRECT_EDGE_ID + edgeId); + validateString(type, "Incorrect type " + type); + validatePageLink(pageLink); + return entityViewDao.findEntityViewsByTenantIdAndEdgeIdAndType(tenantId.getId(), edgeId.getId(), type, pageLink); + } + private DataValidator entityViewValidator = new DataValidator() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java index cef48096cc..f6ab7687d8 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java @@ -20,7 +20,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; -import org.thingsboard.server.dao.model.sql.AssetEntity; import org.thingsboard.server.dao.model.sql.DeviceEntity; import org.thingsboard.server.dao.model.sql.DeviceInfoEntity; @@ -179,4 +178,42 @@ public interface DeviceRepository extends PagingAndSortingRepository findByTenantIdAndEdgeIdAndType(@Param("tenantId") UUID tenantId, + @Param("edgeId") UUID edgeId, + @Param("type") String type, + @Param("searchText") String searchText, + Pageable pageable); + + @Query("SELECT d FROM DeviceEntity d, RelationEntity re " + + "LEFT JOIN DeviceProfileEntity p on p.id = d.deviceProfileId " + + "WHERE d.tenantId = :tenantId " + + "AND d.id = re.toId AND re.toType = 'DEVICE' AND re.relationTypeGroup = 'EDGE' " + + "AND re.relationType = 'Contains' AND re.fromId = :edgeId AND re.fromType = 'EDGE' " + + "AND d.deviceProfileId = :deviceProfileId " + + "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:searchText, '%'))") + Page findDevicesByTenantIdAndEdgeIdAndDeviceProfileId(@Param("tenantId") UUID tenantId, + @Param("edgeId") UUID edgeId, + @Param("deviceProfileId") UUID deviceProfileId, + @Param("searchText") String searchText, + Pageable pageable); + +// @Query("SELECT new org.thingsboard.server.dao.model.sql.DeviceInfoEntity(d, c.title, c.additionalInfo, p.name) " + +// "FROM DeviceEntity d " + +// "LEFT JOIN CustomerEntity c on c.id = d.customerId " + +// "LEFT JOIN DeviceProfileEntity p on p.id = d.deviceProfileId " + +// "WHERE d.tenantId = :tenantId " + +// "AND d.customerId = :customerId " + +// "AND d.deviceProfileId = :deviceProfileId " + +// "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") +// Page findDeviceInfosByTenantIdAndCustomerIdAndDeviceProfileId2(@Param("tenantId") UUID tenantId, +// @Param("customerId") UUID customerId, +// @Param("deviceProfileId") UUID deviceProfileId, +// @Param("textSearch") String textSearch, +// Pageable pageable); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java index 7657ede430..c411c13753 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java @@ -243,4 +243,28 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao Objects.toString(pageLink.getTextSearch(), ""), DaoUtil.toPageable(pageLink))); } + + @Override + public PageData findDevicesByTenantIdAndEdgeIdAndType(UUID tenantId, UUID edgeId, String type, TimePageLink pageLink) { + log.debug("Try to find devices by tenantId [{}], edgeId [{}], type [{}] and pageLink [{}]", tenantId, edgeId, type, pageLink); + return DaoUtil.toPageData(deviceRepository + .findByTenantIdAndEdgeIdAndType( + tenantId, + edgeId, + type, + Objects.toString(pageLink.getTextSearch(), ""), + DaoUtil.toPageable(pageLink))); + } + + @Override + public PageData findDevicesByTenantIdAndEdgeIdAndDeviceProfileId(UUID tenantId, UUID edgeId, UUID deviceProfileId, TimePageLink pageLink) { + log.debug("Try to find devices by tenantId [{}], edgeId [{}], deviceProfileId [{}] and pageLink [{}]", tenantId, edgeId, deviceProfileId, pageLink); + return DaoUtil.toPageData(deviceRepository + .findDevicesByTenantIdAndEdgeIdAndDeviceProfileId( + tenantId, + edgeId, + deviceProfileId, + Objects.toString(pageLink.getTextSearch(), ""), + DaoUtil.toPageable(pageLink))); + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/EntityViewRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/EntityViewRepository.java index 9b58523339..439937d7ea 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/EntityViewRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/EntityViewRepository.java @@ -129,4 +129,15 @@ public interface EntityViewRepository extends PagingAndSortingRepository findByTenantIdAndEdgeIdAndType(@Param("tenantId") UUID tenantId, + @Param("edgeId") UUID edgeId, + @Param("type") String type, + @Param("searchText") String searchText, + Pageable pageable); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/JpaEntityViewDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/JpaEntityViewDao.java index 20125c2bd5..b454fa5fa9 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/JpaEntityViewDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/entityview/JpaEntityViewDao.java @@ -192,4 +192,16 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao findEntityViewsByTenantIdAndEdgeIdAndType(UUID tenantId, UUID edgeId, String type, PageLink pageLink) { + log.debug("Try to find entity views by tenantId [{}], edgeId [{}], type [{}] and pageLink [{}]", tenantId, edgeId, type, pageLink); + return DaoUtil.toPageData(entityViewRepository + .findByTenantIdAndEdgeIdAndType( + tenantId, + edgeId, + type, + Objects.toString(pageLink.getTextSearch(), ""), + DaoUtil.toPageable(pageLink))); + } }