From 2bf841c408f18d32572a7ea82e96dea4fa88ce66 Mon Sep 17 00:00:00 2001 From: zhouhao Date: Wed, 19 Jul 2023 10:14:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2=E5=88=97=E5=BC=8F=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E6=97=B6=E5=85=A8=E9=83=A8=E5=B1=9E=E6=80=A7=E7=9A=84?= =?UTF-8?q?API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/data/DeviceDataService.java | 22 +++++++++++++++++ .../device/service/data/DeviceProperties.java | 24 +++++++++++++++++++ .../data/ThingsBridgingDeviceDataService.java | 20 ++++++++++++++++ .../device/web/DeviceInstanceController.java | 17 +++++++++++++ .../device/web/DeviceProductController.java | 15 ++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/data/DeviceProperties.java 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