From 039391240f66b8d71190ae5f6a5c1d3d5212124f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=8D=E7=BC=96=E8=AF=91=E5=B7=A5=E4=BD=9C=E5=8C=BA?= Date: Sat, 25 Apr 2026 00:45:37 +0800 Subject: [PATCH] =?UTF-8?q?elevator(web):=20=E5=8C=BA=E5=9F=9F=E6=A0=91?= =?UTF-8?q?=E7=94=B5=E6=A2=AF=E7=BC=96=E7=A0=81=E6=89=B9=E9=87=8F=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=B8=8E=20ZoneTreeCollectors=20=E5=A4=8D=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .../AcsElevatorDeviceController.java | 22 +++++++++------- .../AcsElevatorDeviceGetWayController.java | 17 ++----------- .../zone/util/ZoneTreeCollectors.java | 25 +++++++++++++++++++ 3 files changed, 40 insertions(+), 24 deletions(-) create mode 100644 maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/zone/util/ZoneTreeCollectors.java diff --git a/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java b/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java index c8e6af01..bf883ac5 100644 --- a/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java +++ b/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java @@ -31,10 +31,12 @@ import cn.cloudwalk.elevator.handler.device.form.AcsElevatorDeviceQueryForm; import cn.cloudwalk.elevator.zone.param.ZoneNextTreeParam; import cn.cloudwalk.elevator.zone.result.ZoneTreeResult; import cn.cloudwalk.elevator.zone.service.ZoneService; +import cn.cloudwalk.elevator.zone.util.ZoneTreeCollectors; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import javax.annotation.Resource; @@ -191,17 +193,20 @@ public class AcsElevatorDeviceController extends AbstractCloudwalkController { List treeList = (List)query.getData(); List treeResultList = new ArrayList<>(); if (treeList != null && treeList.size() > 0) { + LinkedHashSet zoneIds = new LinkedHashSet<>(); + ZoneTreeCollectors.collectNodeIds(treeList, zoneIds); + Map codeByZoneId = + this.elevatorCodeService.mapByZoneIds(new ArrayList<>(zoneIds)); for (ZoneTreeResult zoneTreeResult : treeList) { String zoneId = zoneTreeResult.getId(); - AcsElevatorCodeParam param = new AcsElevatorCodeParam(); - param.setZoneId(zoneId); - AcsElevatorCodeResultDTO code = this.elevatorCodeService.get(param); + AcsElevatorCodeResultDTO code = codeByZoneId.get(zoneId); if (!ObjectUtils.isEmpty(code)) { zoneTreeResult.setElevatorCode(code.getCode()); zoneTreeResult.setIsFirst(code.getIsFirst()); } if (zoneTreeResult.getChildren() != null) { - List chidList = treeRecursionDataList(zoneTreeResult.getChildren()); + List chidList = + treeRecursionDataList(zoneTreeResult.getChildren(), codeByZoneId); zoneTreeResult.setChildren(chidList); } treeResultList.add(zoneTreeResult); @@ -215,19 +220,18 @@ public class AcsElevatorDeviceController extends AbstractCloudwalkController { } } - public List treeRecursionDataList(List childList) throws ServiceException { + public List treeRecursionDataList(List childList, + Map codeByZoneId) { List childResultList = new ArrayList<>(); for (ZoneTreeResult zoneTreeResult : childList) { String id = zoneTreeResult.getId(); - AcsElevatorCodeParam param = new AcsElevatorCodeParam(); - param.setZoneId(id); - AcsElevatorCodeResultDTO code = this.elevatorCodeService.get(param); + AcsElevatorCodeResultDTO code = codeByZoneId.get(id); if (!ObjectUtils.isEmpty(code)) { zoneTreeResult.setElevatorCode(code.getCode()); zoneTreeResult.setIsFirst(code.getIsFirst()); } if (zoneTreeResult.getChildren() != null && zoneTreeResult.getChildren().size() > 0) { - zoneTreeResult.setChildren(treeRecursionDataList(zoneTreeResult.getChildren())); + zoneTreeResult.setChildren(treeRecursionDataList(zoneTreeResult.getChildren(), codeByZoneId)); } childResultList.add(zoneTreeResult); } diff --git a/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java b/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java index ffb604cf..53629a76 100644 --- a/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java +++ b/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java @@ -23,11 +23,11 @@ import cn.cloudwalk.elevator.util.StringUtils; import cn.cloudwalk.elevator.zone.param.ZoneNextTreeParam; import cn.cloudwalk.elevator.zone.result.ZoneTreeResult; import cn.cloudwalk.elevator.zone.service.ZoneService; +import cn.cloudwalk.elevator.zone.util.ZoneTreeCollectors; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Set; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.ObjectUtils; @@ -93,7 +93,7 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll this.zoneService.tree(zoneNextTreeParam, getCloudwalkContext()); List treeList = (List)query.getData(); LinkedHashSet zoneIdsForCode = new LinkedHashSet<>(); - collectZoneTreeNodeIds(treeList, zoneIdsForCode); + ZoneTreeCollectors.collectNodeIds(treeList, zoneIdsForCode); Map codeByZoneId = this.elevatorCodeService.mapByZoneIds(new ArrayList<>(zoneIdsForCode)); List treeResultList = new ArrayList<>(); @@ -226,17 +226,4 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll this.LOGGER.warn("getKey(39204) 已停用明文密钥下发,调用方应迁移至安全鉴权方式"); return CloudwalkResult.success(result); } - - /** 收集树节点 id,用于与 {@code code_elevator_area.zone_id} 批量对齐查询。 */ - private static void collectZoneTreeNodeIds(List nodes, Set out) { - if (nodes == null || out == null) { - return; - } - for (ZoneTreeResult n : nodes) { - if (StringUtils.isNotBlank(n.getId())) { - out.add(n.getId()); - } - collectZoneTreeNodeIds(n.getChildren(), out); - } - } } diff --git a/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/zone/util/ZoneTreeCollectors.java b/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/zone/util/ZoneTreeCollectors.java new file mode 100644 index 00000000..d38c71ad --- /dev/null +++ b/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/zone/util/ZoneTreeCollectors.java @@ -0,0 +1,25 @@ +package cn.cloudwalk.elevator.zone.util; + +import cn.cloudwalk.elevator.util.StringUtils; +import cn.cloudwalk.elevator.zone.result.ZoneTreeResult; +import java.util.List; +import java.util.Set; + +/** 区域树遍历辅助,供批量查询电梯编码等场景复用。 */ +public final class ZoneTreeCollectors { + + private ZoneTreeCollectors() {} + + /** 深度优先收集树上各节点 {@link ZoneTreeResult#getId()}(去重由调用方 {@link Set} 保证)。 */ + public static void collectNodeIds(List nodes, Set out) { + if (nodes == null || out == null) { + return; + } + for (ZoneTreeResult n : nodes) { + if (StringUtils.isNotBlank(n.getId())) { + out.add(n.getId()); + } + collectNodeIds(n.getChildren(), out); + } + } +}