From 13f7e87a5cce7b1ab04c6d7e893752c6cdccbc8c Mon Sep 17 00:00:00 2001 From: zhouhao Date: Wed, 9 Feb 2022 15:04:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/web/GatewayDeviceController.java | 69 ++++++++++--------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/GatewayDeviceController.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/GatewayDeviceController.java index a1204067..4a8b0dee 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/GatewayDeviceController.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/GatewayDeviceController.java @@ -65,39 +65,44 @@ public class GatewayDeviceController { @QueryAction @QueryOperation(summary = "查询网关设备详情") public Mono> queryGatewayDevice(@Parameter(hidden = true) QueryParamEntity param) { - return getGatewayProductList() - .flatMap(productIdList -> - param.toNestQuery(query -> query.in(DeviceInstanceEntity::getProductId, productIdList)) - .execute(instanceService::queryPager) - .filter(r -> r.getTotal() > 0) - .flatMap(result -> { - Map mapping = - result.getData() - .stream() - .collect(Collectors.toMap(DeviceInstanceEntity::getId, Function.identity())); + return this + .getGatewayProductList() + .flatMap(productIdList -> param + .toNestQuery(query -> query.in(DeviceInstanceEntity::getProductId, productIdList)) + .execute(instanceService::queryPager) + .filter(r -> r.getTotal() > 0) + .flatMap(result -> { + Map mapping = + result.getData() + .stream() + .collect(Collectors.toMap(DeviceInstanceEntity::getId, Function.identity())); - //查询所有子设备并按父设备ID分组 - return instanceService.createQuery() - .where() - .in(DeviceInstanceEntity::getParentId, mapping.keySet()) - .fetch() - .groupBy(DeviceInstanceEntity::getParentId, Integer.MAX_VALUE) - .flatMap(group -> { - String parentId = group.key(); - return group - .collectList() - //将父设备和分组的子设备合并在一起 - .map(children -> GatewayDeviceInfo.of(mapping.get(parentId), children)); - }) - .collectMap(GatewayDeviceInfo::getId)//收集所有有子设备的网关设备信息 - .defaultIfEmpty(Collections.emptyMap()) - .flatMapMany(map -> Flux.fromIterable(mapping.values()) - .flatMap(ins -> Mono.justOrEmpty(map.get(ins.getId())) - //处理没有子设备的网关信息 - .switchIfEmpty(Mono.fromSupplier(() -> GatewayDeviceInfo.of(ins, Collections.emptyList()))))) - .collectList() - .map(list -> PagerResult.of(result.getTotal(), list, param)); - })) + //查询所有子设备并按父设备ID分组 + return instanceService + .createQuery() + .where() + .in(DeviceInstanceEntity::getParentId, mapping.keySet()) + .fetch() + .groupBy(DeviceInstanceEntity::getParentId, Integer.MAX_VALUE) + .flatMap(group -> { + String parentId = group.key(); + return group + .collectList() + //将父设备和分组的子设备合并在一起 + .map(children -> GatewayDeviceInfo.of(mapping.get(parentId), children)); + }) + //收集所有有子设备的网关设备信息 + .collectMap(GatewayDeviceInfo::getId) + .defaultIfEmpty(Collections.emptyMap()) + .flatMapMany(map -> Flux + .fromIterable(mapping.values()) + .flatMap(ins -> Mono + .justOrEmpty(map.get(ins.getId())) + //处理没有子设备的网关信息 + .switchIfEmpty(Mono.fromSupplier(() -> GatewayDeviceInfo.of(ins, Collections.emptyList()))))) + .collectList() + .map(list -> PagerResult.of(result.getTotal(), list, param)); + })) .defaultIfEmpty(PagerResult.empty()); }