diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/DeviceDataService.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/DeviceDataService.java index 189c52a8..395a08b3 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/DeviceDataService.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/DeviceDataService.java @@ -238,6 +238,28 @@ public interface DeviceDataService { return queryEventPage(deviceId, event, query, false); } + /** + * 查询设备属性数据,但是不返回分页结果 + * + * @param deviceId 设备ID + * @param query 查询条件 + * @return 查询结果 + */ + @Nonnull + Flux queryProperties(@Nonnull String deviceId, + @Nonnull QueryParamEntity query); + + /** + * 根据产品分页查询属性数据,一个属性为一列,仅支持部分存储策略 + * + * @param productId 产品ID + * @param query 查询条件 + * @return 查询结果 + */ + @Nonnull + Mono> queryPropertiesPageByProduct(@Nonnull String productId, + @Nonnull QueryParamEntity query); + @Getter @Setter diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/DeviceProperties.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/DeviceProperties.java new file mode 100644 index 00000000..cf51c2f1 --- /dev/null +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/DeviceProperties.java @@ -0,0 +1,24 @@ +package org.jetlinks.community.device.service.data; + +import lombok.Getter; +import org.jetlinks.community.things.data.ThingProperties; + +import java.util.HashMap; +import java.util.Map; + +@Getter +public class DeviceProperties extends HashMap { + + private final String deviceId; + + public DeviceProperties(Map data) { + super(data); + this.deviceId = (String) data.get("deviceId"); + } + + public DeviceProperties(ThingProperties data) { + super(data); + this.deviceId = (String) data.get("thingId"); + } + +} diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/ThingsBridgingDeviceDataService.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/ThingsBridgingDeviceDataService.java index d78ca5bb..4385d93b 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/ThingsBridgingDeviceDataService.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/ThingsBridgingDeviceDataService.java @@ -5,6 +5,7 @@ import org.hswebframework.web.api.crud.entity.PagerResult; import org.hswebframework.web.api.crud.entity.QueryParamEntity; import org.hswebframework.web.bean.FastBeanCopier; import org.jetlinks.community.things.data.AggregationRequest; +import org.jetlinks.community.things.data.operations.ColumnModeQueryOperations; import org.jetlinks.community.things.data.operations.SaveOperations; import org.jetlinks.core.device.DeviceThingType; import org.jetlinks.core.message.DeviceMessage; @@ -219,4 +220,23 @@ public class ThingsBridgingDeviceDataService implements DeviceDataService { .map(page ->convertPage(page,DeviceEvent::new)); } + + @Nonnull + @Override + public Flux queryProperties(@Nonnull String deviceId, @Nonnull QueryParamEntity query) { + return repository + .opsForThing(thingType, deviceId) + .flatMapMany(opt -> opt.forQuery().unwrap(ColumnModeQueryOperations.class).queryAllProperties(query)) + .map(DeviceProperties::new); + } + + @Nonnull + @Override + public Mono> queryPropertiesPageByProduct(@Nonnull String productId, @Nonnull QueryParamEntity query) { + return repository + .opsForTemplate(thingType, productId) + .flatMap(opt -> opt.forQuery().unwrap(ColumnModeQueryOperations.class).queryAllPropertiesPage(query)) + .map(page -> convertPage(page,DeviceProperties::new)); + } + } diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceInstanceController.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceInstanceController.java index c7c385d7..a8377cbf 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceInstanceController.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceInstanceController.java @@ -35,6 +35,12 @@ import org.jetlinks.community.device.service.DeviceConfigMetadataManager; import org.jetlinks.community.device.service.LocalDeviceInstanceService; import org.jetlinks.community.device.service.LocalDeviceProductService; import org.jetlinks.community.device.service.data.DeviceDataService; +import org.jetlinks.community.device.service.data.DeviceProperties; +import org.jetlinks.community.device.web.excel.DeviceExcelImporter; +import org.jetlinks.community.device.web.excel.DeviceExcelInfo; +import org.jetlinks.community.device.web.excel.DeviceWrapper; +import org.jetlinks.community.device.web.excel.PropertyMetadataExcelInfo; +import org.jetlinks.community.device.web.excel.PropertyMetadataWrapper; import org.jetlinks.community.device.web.excel.*; import org.jetlinks.community.device.web.request.AggRequest; import org.jetlinks.community.io.excel.AbstractImporter; @@ -836,6 +842,17 @@ public class DeviceInstanceController implements .map(AggregationData::values); } + //查询属性列表 + @PostMapping("/{deviceId:.+}/properties/_query/no-paging") + @QueryAction + @Operation(summary = "不分页查询设备的全部属性(一个属性为一列)", + description = "设备使用列式存储模式才支持") + public Flux queryDevicePropertiesNoPaging(@PathVariable + @Parameter(description = "设备ID") String deviceId, + @RequestBody Mono entity) { + return entity.flatMapMany(q -> deviceDataService.queryProperties(deviceId, q)); + } + //发送设备指令 @PostMapping("/{deviceId:.+}/message") @SneakyThrows diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceProductController.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceProductController.java index aacacd8c..c6836f6b 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceProductController.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceProductController.java @@ -10,6 +10,9 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.hswebframework.reactor.excel.ReactorExcel; +import org.hswebframework.web.api.crud.entity.PagerResult; +import org.hswebframework.web.api.crud.entity.QueryOperation; +import org.hswebframework.web.api.crud.entity.QueryParamEntity; import org.hswebframework.web.authorization.annotation.QueryAction; import org.hswebframework.web.authorization.annotation.Resource; import org.hswebframework.web.authorization.annotation.SaveAction; @@ -20,6 +23,7 @@ import org.jetlinks.community.device.entity.DeviceProductEntity; import org.jetlinks.community.device.service.DeviceConfigMetadataManager; import org.jetlinks.community.device.service.LocalDeviceProductService; import org.jetlinks.community.device.service.data.DeviceDataService; +import org.jetlinks.community.device.service.data.DeviceProperties; import org.jetlinks.community.device.web.excel.PropertyMetadataExcelInfo; import org.jetlinks.community.device.web.excel.PropertyMetadataWrapper; import org.jetlinks.community.device.web.request.AggRequest; @@ -193,6 +197,17 @@ public class DeviceProductController implements ReactiveServiceCrudController> queryDevicePropertiesAll(@PathVariable + @Parameter(description = "产品ID") String productId, + @RequestBody Mono entity) { + return entity.flatMap(q -> deviceDataService.queryPropertiesPageByProduct(productId, q)); + } + @Getter @Setter @AllArgsConstructor