From 71111356da8b9b42e9b5169671220e50e3654fbc Mon Sep 17 00:00:00 2001 From: wangguangyuan Date: Wed, 4 Mar 2026 10:28:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=82=B9=E4=BD=8D=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E7=82=B9=E4=BD=8D=E7=AE=A1=E7=90=86=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BasedataDeviceController.java | 36 +++++- .../service/IBasedataDeviceService.java | 3 +- .../impl/BasedataDeviceServiceImpl.java | 119 +++++++++++++++++- 3 files changed, 151 insertions(+), 7 deletions(-) diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java index c28760e..e621f25 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java @@ -197,8 +197,36 @@ public class BasedataDeviceController extends BaseController { : AjaxResult.success(new JSONArray()); } - @GetMapping({"/treeAreaDeviceSelectFilterByPreset/relation/havePoint"}) - public AjaxResult treeAreaDeviceSelectFilterByPresetHavePoint(BaseDataArea baseDataArea) { + /** + * 用于迁移的左侧列表展示原始数据(叶子节点有点位) + * @param baseDataArea + * @return + */ + @GetMapping({"/treeAreaDeviceSelectFilterByPreset/relation/left"}) + public AjaxResult treeAreaDeviceSelectFilterByPresetLeft(BaseDataArea baseDataArea) { + log.info("treeAreaDeviceSelectFilterByPreset param: {}", baseDataArea); + List areaList = baseDataAreaService.selectAreaList(baseDataArea); + List filterNameList = baseDataArea.getFilterNameList(); + if(filterNameList == null || filterNameList.isEmpty()) { + filterNameList = new ArrayList<>(); + filterNameList.add("无人机"); + filterNameList.add("机器人"); + filterNameList.add("安防摄像头"); + filterNameList.add("生活区域"); + filterNameList.add("新增相机"); + } + return !areaList.isEmpty() + ? AjaxResult.success(basedataDeviceService.buildAreaDeviceTreeSelectByAreasFilterByPresetRelationLeft(areaList, filterNameList)) + : AjaxResult.success(new JSONArray()); + } + + /** + * 用于迁移的右侧列表展示(叶子节点有点位) + * @param baseDataArea + * @return + */ + @GetMapping({"/treeAreaDeviceSelectFilterByPreset/relation/right"}) + public AjaxResult treeAreaDeviceSelectFilterByPresetRight(BaseDataArea baseDataArea) { log.info("treeAreaDeviceSelectFilterByPreset param: {}", baseDataArea); List areaList = baseDataAreaService.selectAreaList(baseDataArea); List filterNameList = baseDataArea.getFilterNameList(); @@ -211,12 +239,12 @@ public class BasedataDeviceController extends BaseController { filterNameList.add("新增相机"); } return !areaList.isEmpty() - ? AjaxResult.success(basedataDeviceService.buildAreaDeviceTreeSelectByAreasFilterByPresetHavePoint(areaList, filterNameList)) + ? AjaxResult.success(basedataDeviceService.buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(areaList, filterNameList)) : AjaxResult.success(new JSONArray()); } /** - * 新的树形关系 + * 新的树形关系 (叶子节点无点位)用于页面展示(绍兴) * @param baseDataArea * @return */ diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java index 1b96802..080d09e 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java @@ -50,7 +50,8 @@ public interface IBasedataDeviceService { List buildAreaDeviceTreeSelectByAreas(List areas); List buildAreaDeviceTreeSelectByAreasFilterByPreset(List areas, List filterNameList); - List buildAreaDeviceTreeSelectByAreasFilterByPresetHavePoint(List areas, List filterNameList); + List buildAreaDeviceTreeSelectByAreasFilterByPresetRelationLeft(List areas, List filterNameList); + List buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List areas, List filterNameList); List buildAreaDeviceTreeSelectByAreasFilterByPresetRelation(List areas, List filterNameList); diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java index d9f1b2b..7973771 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java @@ -195,7 +195,7 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { return AreaDeviceTreeSelectUtil.buildDeviceTree(areaVOS); } - public List buildAreaDeviceTreeSelectByAreasFilterByPresetHavePoint(List areas, List filterNamelist) { + public List buildAreaDeviceTreeSelectByAreasFilterByPresetRelationLeft(List areas, List filterNamelist) { ArrayList areaIdList = new ArrayList<>(); HashMap areaMap = new HashMap<>(); HashMap deviceHashMap = new HashMap<>(); @@ -445,6 +445,56 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { } } + private void fillPointNumRelation(List allNodes, List treeList) { + // 收集所有设备ID + Set deviceIds = new HashSet<>(); + for (AreaDeviceTreeSelect node : allNodes) { + if (node.getDeviceId() != null) { + deviceIds.add(node.getDeviceId()); + } + } + if (deviceIds.isEmpty()) { + return; + } + + // 批量查询点位 + List patrolPoints = basedataPatrolPointMapper.selectBasedataPatrolPointRelationListByDeviceIds(new ArrayList<>(deviceIds)); + // 按设备ID分组 + Map> devicePatrolMap = patrolPoints.stream() + .collect(Collectors.groupingBy(BasedataPatrolPoint::getDeviceId)); + + // 递归设置统计值 + setPointNumRelation(treeList, devicePatrolMap); + } + + /** + * 递归设置 pointNum 信息 + */ + private void setPointNumRelation(List nodes, Map> devicePatrolMap) { + for (AreaDeviceTreeSelect node : nodes) { + long pointNum = 0L; + + // 处理设备节点自身点位 + if (node.getDeviceId() != null) { + List patrols = devicePatrolMap.get(node.getDeviceId()); + if (patrols != null) { + pointNum += patrols.size(); + } + } + + // 递归处理子节点 + if (node.getChildren() != null && !node.getChildren().isEmpty()) { + setPointNumRelation(node.getChildren(), devicePatrolMap); + // 累加子节点 pointNum + for (AreaDeviceTreeSelect child : node.getChildren()) { + pointNum += child.getPointNum() != null ? child.getPointNum() : 0L; + } + } + + node.setPointNum(pointNum); + } + } + /** * 与fillPointNumAndPatrolPoints区别在于查询的表不一样 此处用的是basedata_patrolpoint_relation表,用于迁移数据使用 */ @@ -466,7 +516,7 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { Map> devicePatrolMap = patrolPoints.stream() .collect(Collectors.groupingBy(BasedataPatrolPoint::getDeviceId)); - // 递归设置统计值 + // 递归设置统计值和点位 setPointNumAndPatrolPoints(treeList, devicePatrolMap); } @@ -529,6 +579,71 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { List treeList = AreaDeviceTreeSelectUtil.buildDeviceTreeFilterByAreaName(areaVOS, filterNamelist); + // 新增:填充点位统计 + fillPointNumRelation(areaVOS, treeList); + + return treeList; + } + + public List buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List areas, List filterNamelist) { + ArrayList areaIdList = new ArrayList<>(); + HashMap areaMap = new HashMap<>(); + HashMap deviceHashMap = new HashMap<>(); + List areaVOS = new ArrayList<>(); + + for (BaseDataArea area : areas) { + areaIdList.add(area.getAreaId()); + areaMap.put(area.getAreaId(), area); + AreaDeviceTreeSelect areaVO = new AreaDeviceTreeSelect(); + areaVO.setDataId(String.valueOf(area.getAreaId())); + areaVO.setParentId(String.valueOf(area.getParentId())); + areaVO.setAreaId(area.getAreaId()); + areaVO.setAreaFlag("Yes"); + areaVO.setAreaParentId(area.getParentId()); + areaVO.setAreaName(area.getAreaName()); + areaVO.setAreaType(area.getAreaType()); + areaVOS.add(areaVO); + } + + BasedataDevice basedataDeviceQuery = new BasedataDevice(); + Map params = new HashMap<>(); + params.put("areaIdList", areaIdList); + basedataDeviceQuery.setParams(params); + List deviceList = this.basedataDeviceMapper.selectBasedataDeviceRelationList(basedataDeviceQuery); + Iterator iterator = deviceList.iterator(); + + BasedataDevice basedataDevice; + while (iterator.hasNext()) { + basedataDevice = iterator.next(); + deviceHashMap.put(basedataDevice.getDeviceId(), basedataDevice); + } + + iterator = deviceList.iterator(); + + while (iterator.hasNext()) { + basedataDevice = iterator.next(); + AreaDeviceTreeSelect deviceVO = new AreaDeviceTreeSelect(); + StringBuilder idBuilder = new StringBuilder(); + StringBuilder pIdBuilder = new StringBuilder(); + this.getAreaDeviceTreeDeviceCode(basedataDevice.getDeviceId(), areaMap, deviceHashMap, idBuilder, pIdBuilder); + deviceVO.setDataId(idBuilder.toString()); + deviceVO.setParentId(pIdBuilder.toString()); + deviceVO.setAreaId(basedataDevice.getAreaId()); + deviceVO.setDeviceParentId(basedataDevice.getParentId()); + deviceVO.setDeviceId(basedataDevice.getDeviceId()); + deviceVO.setDeviceName(basedataDevice.getDeviceName()); + deviceVO.setPowerMainEquFlag(basedataDevice.getPowerMainEquFlag()); + deviceVO.setPositionX(basedataDevice.getPositionX()); + deviceVO.setPositionY(basedataDevice.getPositionY()); + deviceVO.setPositionZ(basedataDevice.getPositionZ()); + deviceVO.setDeviceLength(basedataDevice.getDeviceLength()); + deviceVO.setDeviceWidth(basedataDevice.getDeviceWidth()); + deviceVO.setDeviceHigh(basedataDevice.getDeviceHeight()); + areaVOS.add(deviceVO); + } + + List treeList = AreaDeviceTreeSelectUtil.buildDeviceTreeFilterByAreaName(areaVOS, filterNamelist); + // 新增:填充点位统计 fillPointNumAndPatrolPointsRelation(areaVOS, treeList);