DeviceInfo for Edge support
This commit is contained in:
		
							parent
							
								
									9e589c8044
								
							
						
					
					
						commit
						7a385e34d1
					
				@ -680,7 +680,7 @@ public class DeviceController extends BaseController {
 | 
			
		||||
    @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
 | 
			
		||||
    @RequestMapping(value = "/edge/{edgeId}/devices", params = {"pageSize", "page"}, method = RequestMethod.GET)
 | 
			
		||||
    @ResponseBody
 | 
			
		||||
    public PageData<Device> getEdgeDevices(
 | 
			
		||||
    public PageData<DeviceInfo> getEdgeDevices(
 | 
			
		||||
            @ApiParam(value = EDGE_ID_PARAM_DESCRIPTION, required = true)
 | 
			
		||||
            @PathVariable(EDGE_ID) String strEdgeId,
 | 
			
		||||
            @ApiParam(value = PAGE_SIZE_DESCRIPTION, required = true)
 | 
			
		||||
@ -704,25 +704,13 @@ 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);
 | 
			
		||||
        PageData<Device> nonFilteredResult;
 | 
			
		||||
        DeviceInfoFilter.DeviceInfoFilterBuilder filter = DeviceInfoFilter.builder();
 | 
			
		||||
        filter.tenantId(tenantId);
 | 
			
		||||
        filter.edgeId(edgeId);
 | 
			
		||||
        if (type != null && type.trim().length() > 0) {
 | 
			
		||||
            nonFilteredResult = deviceService.findDevicesByTenantIdAndEdgeIdAndType(tenantId, edgeId, type, pageLink);
 | 
			
		||||
        } else {
 | 
			
		||||
            nonFilteredResult = deviceService.findDevicesByTenantIdAndEdgeId(tenantId, edgeId, pageLink);
 | 
			
		||||
            filter.type(type);
 | 
			
		||||
        }
 | 
			
		||||
        List<Device> filteredDevices = nonFilteredResult.getData().stream().filter(device -> {
 | 
			
		||||
            try {
 | 
			
		||||
                accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, Operation.READ, device.getId(), device);
 | 
			
		||||
                return true;
 | 
			
		||||
            } catch (ThingsboardException e) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }).collect(Collectors.toList());
 | 
			
		||||
        PageData<Device> filteredResult = new PageData<>(filteredDevices,
 | 
			
		||||
                nonFilteredResult.getTotalPages(),
 | 
			
		||||
                nonFilteredResult.getTotalElements(),
 | 
			
		||||
                nonFilteredResult.hasNext());
 | 
			
		||||
        return checkNotNull(filteredResult);
 | 
			
		||||
        return checkNotNull(deviceService.findDeviceInfosByFilter(filter.build(), pageLink));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Count devices by device profile  (countByDeviceProfileAndEmptyOtaPackage)",
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,7 @@ import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.common.util.ThingsBoardExecutors;
 | 
			
		||||
import org.thingsboard.server.common.data.Customer;
 | 
			
		||||
import org.thingsboard.server.common.data.Device;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceProfile;
 | 
			
		||||
import org.thingsboard.server.common.data.EntitySubtype;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
@ -1287,8 +1288,8 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest {
 | 
			
		||||
                savedDevice.getId().getId().toString(), savedEdge.getId().getId().toString(), savedEdge.getName());
 | 
			
		||||
        testNotificationUpdateGatewayNever();
 | 
			
		||||
 | 
			
		||||
        pageData = doGetTypedWithPageLink("/api/edge/" + savedEdge.getId().getId() + "/devices?",
 | 
			
		||||
                PAGE_DATA_DEVICE_TYPE_REF, new PageLink(100));
 | 
			
		||||
        PageData<DeviceInfo> pageData = doGetTypedWithPageLink("/api/edge/" + savedEdge.getId().getId() + "/devices?",
 | 
			
		||||
                new TypeReference<>() {}, new PageLink(100));
 | 
			
		||||
 | 
			
		||||
        Assert.assertEquals(1, pageData.getData().size());
 | 
			
		||||
 | 
			
		||||
@ -1303,7 +1304,7 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        testNotificationUpdateGatewayNever();
 | 
			
		||||
 | 
			
		||||
        pageData = doGetTypedWithPageLink("/api/edge/" + savedEdge.getId().getId() + "/devices?",
 | 
			
		||||
                PAGE_DATA_DEVICE_TYPE_REF, new PageLink(100));
 | 
			
		||||
                new TypeReference<>() {}, new PageLink(100));
 | 
			
		||||
 | 
			
		||||
        Assert.assertEquals(0, pageData.getData().size());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,7 @@ import lombok.Builder;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.thingsboard.server.common.data.id.CustomerId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EdgeId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
 | 
			
		||||
@Data
 | 
			
		||||
@ -27,6 +28,7 @@ public class DeviceInfoFilter {
 | 
			
		||||
 | 
			
		||||
    private TenantId tenantId;
 | 
			
		||||
    private CustomerId customerId;
 | 
			
		||||
    private EdgeId edgeId;
 | 
			
		||||
    private String type;
 | 
			
		||||
    private DeviceProfileId deviceProfileId;
 | 
			
		||||
    private Boolean active;
 | 
			
		||||
 | 
			
		||||
@ -119,6 +119,7 @@ public interface DeviceRepository extends JpaRepository<DeviceEntity, UUID>, Exp
 | 
			
		||||
    @Query("SELECT d FROM DeviceInfoEntity d " +
 | 
			
		||||
            "WHERE d.tenantId = :tenantId " +
 | 
			
		||||
            "AND (:customerId IS NULL OR d.customerId = uuid(:customerId)) " +
 | 
			
		||||
            "AND (:edgeId IS NULL OR d.id IN (SELECT re.toId FROM RelationEntity re WHERE re.toType = 'DEVICE' AND re.relationTypeGroup = 'EDGE' AND re.relationType = 'Contains' AND re.fromType = 'EDGE' AND re.fromId = uuid(:edgeId))) " +
 | 
			
		||||
            "AND ((:deviceType) IS NULL OR d.type = :deviceType) " +
 | 
			
		||||
            "AND (:deviceProfileId IS NULL OR d.deviceProfileId = uuid(:deviceProfileId)) " +
 | 
			
		||||
            "AND ((:filterByActive) IS FALSE OR d.active = :deviceActive) " +
 | 
			
		||||
@ -128,6 +129,7 @@ public interface DeviceRepository extends JpaRepository<DeviceEntity, UUID>, Exp
 | 
			
		||||
            "OR LOWER(d.customerTitle) LIKE LOWER(CONCAT('%', :textSearch, '%')))")
 | 
			
		||||
    Page<DeviceInfoEntity> findDeviceInfosByFilter(@Param("tenantId") UUID tenantId,
 | 
			
		||||
                                                   @Param("customerId") String customerId,
 | 
			
		||||
                                                   @Param("edgeId") String edgeId,
 | 
			
		||||
                                                   @Param("deviceType") String type,
 | 
			
		||||
                                                   @Param("deviceProfileId") String deviceProfileId,
 | 
			
		||||
                                                   @Param("filterByActive") boolean filterByActive,
 | 
			
		||||
 | 
			
		||||
@ -115,6 +115,7 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device>
 | 
			
		||||
                deviceRepository.findDeviceInfosByFilter(
 | 
			
		||||
                        filter.getTenantId().getId(),
 | 
			
		||||
                        DaoUtil.getStringId(filter.getCustomerId()),
 | 
			
		||||
                        DaoUtil.getStringId(filter.getEdgeId()),
 | 
			
		||||
                        filter.getType(),
 | 
			
		||||
                        DaoUtil.getStringId(filter.getDeviceProfileId()),
 | 
			
		||||
                        filter.getActive() != null,
 | 
			
		||||
 | 
			
		||||
@ -881,6 +881,9 @@ FROM device d
 | 
			
		||||
         LEFT JOIN customer c ON c.id = d.customer_id
 | 
			
		||||
         LEFT JOIN ts_kv_latest dt ON dt.entity_id = d.id and dt.key = (select key_id from ts_kv_dictionary where key = 'active');
 | 
			
		||||
 | 
			
		||||
DROP VIEW IF EXISTS device_info_view CASCADE;
 | 
			
		||||
CREATE OR REPLACE VIEW device_info_view AS SELECT * FROM device_info_active_attribute_view;
 | 
			
		||||
 | 
			
		||||
DROP VIEW IF EXISTS alarm_info CASCADE;
 | 
			
		||||
CREATE VIEW alarm_info AS
 | 
			
		||||
SELECT a.*,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user