elevator(web): 区域树电梯编码批量查询与 ZoneTreeCollectors 复用

Made-with: Cursor

Former-commit-id: 039391240f
This commit is contained in:
反编译工作区
2026-04-25 00:45:37 +08:00
parent 82ae4d5898
commit b97dd28631
3 changed files with 40 additions and 24 deletions
@@ -31,10 +31,12 @@ import cn.cloudwalk.elevator.handler.device.form.AcsElevatorDeviceQueryForm;
import cn.cloudwalk.elevator.zone.param.ZoneNextTreeParam; import cn.cloudwalk.elevator.zone.param.ZoneNextTreeParam;
import cn.cloudwalk.elevator.zone.result.ZoneTreeResult; import cn.cloudwalk.elevator.zone.result.ZoneTreeResult;
import cn.cloudwalk.elevator.zone.service.ZoneService; import cn.cloudwalk.elevator.zone.service.ZoneService;
import cn.cloudwalk.elevator.zone.util.ZoneTreeCollectors;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -191,17 +193,20 @@ public class AcsElevatorDeviceController extends AbstractCloudwalkController {
List<ZoneTreeResult> treeList = (List<ZoneTreeResult>)query.getData(); List<ZoneTreeResult> treeList = (List<ZoneTreeResult>)query.getData();
List<ZoneTreeResult> treeResultList = new ArrayList<>(); List<ZoneTreeResult> treeResultList = new ArrayList<>();
if (treeList != null && treeList.size() > 0) { if (treeList != null && treeList.size() > 0) {
LinkedHashSet<String> zoneIds = new LinkedHashSet<>();
ZoneTreeCollectors.collectNodeIds(treeList, zoneIds);
Map<String, AcsElevatorCodeResultDTO> codeByZoneId =
this.elevatorCodeService.mapByZoneIds(new ArrayList<>(zoneIds));
for (ZoneTreeResult zoneTreeResult : treeList) { for (ZoneTreeResult zoneTreeResult : treeList) {
String zoneId = zoneTreeResult.getId(); String zoneId = zoneTreeResult.getId();
AcsElevatorCodeParam param = new AcsElevatorCodeParam(); AcsElevatorCodeResultDTO code = codeByZoneId.get(zoneId);
param.setZoneId(zoneId);
AcsElevatorCodeResultDTO code = this.elevatorCodeService.get(param);
if (!ObjectUtils.isEmpty(code)) { if (!ObjectUtils.isEmpty(code)) {
zoneTreeResult.setElevatorCode(code.getCode()); zoneTreeResult.setElevatorCode(code.getCode());
zoneTreeResult.setIsFirst(code.getIsFirst()); zoneTreeResult.setIsFirst(code.getIsFirst());
} }
if (zoneTreeResult.getChildren() != null) { if (zoneTreeResult.getChildren() != null) {
List<ZoneTreeResult> chidList = treeRecursionDataList(zoneTreeResult.getChildren()); List<ZoneTreeResult> chidList =
treeRecursionDataList(zoneTreeResult.getChildren(), codeByZoneId);
zoneTreeResult.setChildren(chidList); zoneTreeResult.setChildren(chidList);
} }
treeResultList.add(zoneTreeResult); treeResultList.add(zoneTreeResult);
@@ -215,19 +220,18 @@ public class AcsElevatorDeviceController extends AbstractCloudwalkController {
} }
} }
public List<ZoneTreeResult> treeRecursionDataList(List<ZoneTreeResult> childList) throws ServiceException { public List<ZoneTreeResult> treeRecursionDataList(List<ZoneTreeResult> childList,
Map<String, AcsElevatorCodeResultDTO> codeByZoneId) {
List<ZoneTreeResult> childResultList = new ArrayList<>(); List<ZoneTreeResult> childResultList = new ArrayList<>();
for (ZoneTreeResult zoneTreeResult : childList) { for (ZoneTreeResult zoneTreeResult : childList) {
String id = zoneTreeResult.getId(); String id = zoneTreeResult.getId();
AcsElevatorCodeParam param = new AcsElevatorCodeParam(); AcsElevatorCodeResultDTO code = codeByZoneId.get(id);
param.setZoneId(id);
AcsElevatorCodeResultDTO code = this.elevatorCodeService.get(param);
if (!ObjectUtils.isEmpty(code)) { if (!ObjectUtils.isEmpty(code)) {
zoneTreeResult.setElevatorCode(code.getCode()); zoneTreeResult.setElevatorCode(code.getCode());
zoneTreeResult.setIsFirst(code.getIsFirst()); zoneTreeResult.setIsFirst(code.getIsFirst());
} }
if (zoneTreeResult.getChildren() != null && zoneTreeResult.getChildren().size() > 0) { if (zoneTreeResult.getChildren() != null && zoneTreeResult.getChildren().size() > 0) {
zoneTreeResult.setChildren(treeRecursionDataList(zoneTreeResult.getChildren())); zoneTreeResult.setChildren(treeRecursionDataList(zoneTreeResult.getChildren(), codeByZoneId));
} }
childResultList.add(zoneTreeResult); childResultList.add(zoneTreeResult);
} }
@@ -23,11 +23,11 @@ import cn.cloudwalk.elevator.util.StringUtils;
import cn.cloudwalk.elevator.zone.param.ZoneNextTreeParam; import cn.cloudwalk.elevator.zone.param.ZoneNextTreeParam;
import cn.cloudwalk.elevator.zone.result.ZoneTreeResult; import cn.cloudwalk.elevator.zone.result.ZoneTreeResult;
import cn.cloudwalk.elevator.zone.service.ZoneService; import cn.cloudwalk.elevator.zone.service.ZoneService;
import cn.cloudwalk.elevator.zone.util.ZoneTreeCollectors;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
@@ -93,7 +93,7 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll
this.zoneService.tree(zoneNextTreeParam, getCloudwalkContext()); this.zoneService.tree(zoneNextTreeParam, getCloudwalkContext());
List<ZoneTreeResult> treeList = (List<ZoneTreeResult>)query.getData(); List<ZoneTreeResult> treeList = (List<ZoneTreeResult>)query.getData();
LinkedHashSet<String> zoneIdsForCode = new LinkedHashSet<>(); LinkedHashSet<String> zoneIdsForCode = new LinkedHashSet<>();
collectZoneTreeNodeIds(treeList, zoneIdsForCode); ZoneTreeCollectors.collectNodeIds(treeList, zoneIdsForCode);
Map<String, AcsElevatorCodeResultDTO> codeByZoneId = Map<String, AcsElevatorCodeResultDTO> codeByZoneId =
this.elevatorCodeService.mapByZoneIds(new ArrayList<>(zoneIdsForCode)); this.elevatorCodeService.mapByZoneIds(new ArrayList<>(zoneIdsForCode));
List<AcsElevatorCodeQueryDTO> treeResultList = new ArrayList<>(); List<AcsElevatorCodeQueryDTO> treeResultList = new ArrayList<>();
@@ -226,17 +226,4 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll
this.LOGGER.warn("getKey(39204) 已停用明文密钥下发,调用方应迁移至安全鉴权方式"); this.LOGGER.warn("getKey(39204) 已停用明文密钥下发,调用方应迁移至安全鉴权方式");
return CloudwalkResult.success(result); return CloudwalkResult.success(result);
} }
/** 收集树节点 id,用于与 {@code code_elevator_area.zone_id} 批量对齐查询。 */
private static void collectZoneTreeNodeIds(List<ZoneTreeResult> nodes, Set<String> out) {
if (nodes == null || out == null) {
return;
}
for (ZoneTreeResult n : nodes) {
if (StringUtils.isNotBlank(n.getId())) {
out.add(n.getId());
}
collectZoneTreeNodeIds(n.getChildren(), out);
}
}
} }
@@ -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<ZoneTreeResult> nodes, Set<String> out) {
if (nodes == null || out == null) {
return;
}
for (ZoneTreeResult n : nodes) {
if (StringUtils.isNotBlank(n.getId())) {
out.add(n.getId());
}
collectNodeIds(n.getChildren(), out);
}
}
}