diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/area/mapper/BaseDataAreaMapper.java b/inspect-metadata/src/main/java/com/inspect/metadata/area/mapper/BaseDataAreaMapper.java index 7bced8f..3a774e3 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/area/mapper/BaseDataAreaMapper.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/area/mapper/BaseDataAreaMapper.java @@ -10,11 +10,16 @@ import org.apache.ibatis.annotations.Param; @Mapper public interface BaseDataAreaMapper { List selectAreaList(BaseDataArea area); + List selectAreaRelationList(BaseDataArea area); List selectAreaListByRoleId(@Param("roleId") Long roleId, @Param("areaCheckStrictly") boolean areaCheckStrictly); BaseDataArea selectAreaById(Long id); + BaseDataArea selectAreaRelationById(Long id); + + void updateAreaRelationById(@Param("areaId") Long areaId, @Param("toAreaId") Long toAreaId, @Param("ancestors") String ancestors); + List selectChildrenAreaById(Long id); int selectNormalChildrenAreaById(Long id); diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/area/service/IBaseDataAreaService.java b/inspect-metadata/src/main/java/com/inspect/metadata/area/service/IBaseDataAreaService.java index ec0c3f5..0c02fce 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/area/service/IBaseDataAreaService.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/area/service/IBaseDataAreaService.java @@ -9,6 +9,7 @@ import java.util.Map; public interface IBaseDataAreaService { List selectAreaList(BaseDataArea area); + List selectAreaRelationList(BaseDataArea area); List buildAreaTree(List areas); @@ -20,6 +21,10 @@ public interface IBaseDataAreaService { BaseDataArea selectAreaById(Long id); + BaseDataArea selectAreaRelationById(Long id); + + void updateAreaRelationById(Long areaId, Long toAreaId, String ancestors); + int selectNormalChildrenAreaById(Long id); boolean hasChildByAreaId(Long areaId); diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/area/service/impl/BaseDataAreaServiceImpl.java b/inspect-metadata/src/main/java/com/inspect/metadata/area/service/impl/BaseDataAreaServiceImpl.java index 175a532..7ca88fd 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/area/service/impl/BaseDataAreaServiceImpl.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/area/service/impl/BaseDataAreaServiceImpl.java @@ -37,6 +37,13 @@ public class BaseDataAreaServiceImpl implements IBaseDataAreaService { return this.baseDataAreaMapper.selectAreaList(area); } + @DataScope( + deptAlias = "d" + ) + public List selectAreaRelationList(BaseDataArea area) { + return this.baseDataAreaMapper.selectAreaRelationList(area); + } + public List buildAreaTree(List areas) { List returnList = new ArrayList<>(); List tempList = new ArrayList<>(); @@ -82,6 +89,15 @@ public class BaseDataAreaServiceImpl implements IBaseDataAreaService { return this.baseDataAreaMapper.selectAreaById(areaId); } + public BaseDataArea selectAreaRelationById(Long areaId) { + return this.baseDataAreaMapper.selectAreaRelationById(areaId); + } + + @Override + public void updateAreaRelationById(Long areaId, Long toAreaId, String ancestors) { + this.baseDataAreaMapper.updateAreaRelationById(areaId, toAreaId, ancestors); + } + public int selectNormalChildrenAreaById(Long areaId) { return this.baseDataAreaMapper.selectNormalChildrenAreaById(areaId); } diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/mapper/BasedataPatrolPointMapper.java b/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/mapper/BasedataPatrolPointMapper.java index 8bdfaf5..1b6388f 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/mapper/BasedataPatrolPointMapper.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/mapper/BasedataPatrolPointMapper.java @@ -6,6 +6,7 @@ import com.inspect.metadata.patrolpointmnt.domain.vo.PointStatsVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.ArrayList; import java.util.List; @Mapper @@ -39,4 +40,11 @@ public interface BasedataPatrolPointMapper { List pointLatestResult(PointLatestResultVo pointLatestResultVo); int deleteBySendCode(@Param("sendCode") String sendCode); + + List selectBasedataPatrolPointListByDeviceIds(@Param("deviceIds") List deviceIds); + List selectBasedataPatrolPointRelationListByDeviceIds(@Param("deviceIds") List deviceIds); + + void updateBasedataPatrolPointRelation(@Param("toAreaId") Long toAreaId, @Param("deviceId") Long deviceId); + + void batchUpdateBasedataPatrolPointRelation(@Param("toAreaId") Long toAreaId,@Param("toParentId") Long toParentId,@Param("toDeviceId") Long toDeviceId,@Param("patrolPointIds") List patrolPointIds); } \ No newline at end of file diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/service/IBasedataPatrolPointService.java b/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/service/IBasedataPatrolPointService.java index eb683c8..c17082e 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/service/IBasedataPatrolPointService.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/service/IBasedataPatrolPointService.java @@ -33,4 +33,8 @@ public interface IBasedataPatrolPointService { PointStatsVo getInspectPointStats(PointStatsVo pointStatsVo); List pointLatestResult(PointLatestResultVo pointLatestResultVo); + + void updateBasedataPatrolPointRelation(Long toAreaId, Long deviceId); + + void batchUpdateBasedataPatrolPointRelation(Long toAreaId, Long toParentId, Long toDeviceId, List patrolPointIds); } diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/service/impl/BasedataPatrolPointServiceImpl.java b/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/service/impl/BasedataPatrolPointServiceImpl.java index 0547521..f09f048 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/service/impl/BasedataPatrolPointServiceImpl.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/service/impl/BasedataPatrolPointServiceImpl.java @@ -639,4 +639,14 @@ public class BasedataPatrolPointServiceImpl implements IBasedataPatrolPointServi // inspectPointStats.setInspectionPointTotal(basedataPatrolPoints.size()); return result; } + + @Override + public void updateBasedataPatrolPointRelation(Long toAreaId, Long deviceId) { + basedataPatrolpointMapper.updateBasedataPatrolPointRelation(toAreaId, deviceId); + } + + @Override + public void batchUpdateBasedataPatrolPointRelation(Long toAreaId, Long toParentId, Long toDeviceId, List patrolPointIds) { + basedataPatrolpointMapper.batchUpdateBasedataPatrolPointRelation(toAreaId, toParentId, toDeviceId, patrolPointIds); + } } 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 045148d..55f4bae 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 @@ -9,6 +9,7 @@ import com.inspect.metadata.eqpbook.domain.BasedataEqpBook; import com.inspect.metadata.eqpbook.service.IBasedataEqpBookService; import com.inspect.metadata.mqutil.FeignMsgClient; import com.inspect.metadata.patrolpointmnt.domain.BasedataPatrolPoint; +import com.inspect.metadata.patrolpointmnt.mapper.BasedataPatrolPointMapper; import com.inspect.metadata.patrolpointmnt.service.IBasedataPatrolPointService; import com.inspect.metadata.prodevmnt.domain.BasedataDevice; import com.inspect.metadata.prodevmnt.domain.BasedataDeviceType; @@ -31,11 +32,7 @@ import com.inspect.system.base.openDomain.PatrolTaskDomain; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; @@ -48,6 +45,7 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -199,6 +197,99 @@ public class BasedataDeviceController extends BaseController { : AjaxResult.success(new JSONArray()); } + /** + * 新的树形关系 + * @param baseDataArea + * @return + */ + @GetMapping({"/treeAreaDeviceSelectFilterByPreset/relation"}) + public AjaxResult treeAreaDeviceSelectFilterByPresetRelation(BaseDataArea baseDataArea) { + log.info("treeAreaDeviceSelectFilterByPreset param: {}", baseDataArea); + List areaList = baseDataAreaService.selectAreaRelationList(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.buildAreaDeviceTreeSelectByAreasFilterByPresetRelation(areaList, filterNameList)) + : AjaxResult.success(new JSONArray()); + } + + + @PostMapping({"/updateTreeAreaRelation"}) + @Transactional(rollbackFor = Exception.class) + public AjaxResult updateTreeAreaRelation (@RequestBody JSONObject jsonObject) { + log.info("updateTreeAreaRelation param: {}", jsonObject); + Long toAreaId = jsonObject.getLong("toAreaId");// 迁移到的区域 + Long toDeviceId = jsonObject.getLong("toDeviceId");// 迁移到的设备id/部件id + + String areaIdStr = jsonObject.getString("areaId");// 需要迁移的区域 + String deviceIdStr = jsonObject.getString("deviceId");// 需要迁移的设备id + String patrolPointIdStr = jsonObject.getString("patrolPointId");// 需要迁移的点位id + + if (StringUtils.isNotEmpty(areaIdStr) && toAreaId != null) { + // 区域迁移 + List areaIds = Arrays.stream(areaIdStr.split(",")) + .map(Long::valueOf) + .collect(Collectors.toList()); + if (toDeviceId != null) { + return AjaxResult.error("迁移失败,不支持区域迁移到设备部件"); + } + // 1.查出要迁移到哪个区域下的area的信息 + BaseDataArea baseDataArea = baseDataAreaService.selectAreaRelationById(toAreaId); + log.info("updateTreeAreaRelation baseDataArea: {}", baseDataArea); + if (baseDataArea == null) { + return AjaxResult.error("迁移失败,找不到目标区域"); + } + // 2.update parent_id = 迁移到的area_id and ancestors = 迁移到的ancestors+",迁移到的area_id" where area_id = fromAreaId + String ancestors = baseDataArea.getAncestors(); + for (Long areaId : areaIds) { + baseDataAreaService.updateAreaRelationById(areaId, toAreaId, ancestors); + } + log.info("----updateTreeAreaRelation成功迁移{}个区域", areaIds.size()); + } + + else if (StringUtils.isNotEmpty(deviceIdStr) && toAreaId != null) { + if (toDeviceId != null) { + return AjaxResult.error("迁移失败,只允许设备部件迁移到区域"); + } + // 设备部件迁移 + List deviceIds = Arrays.stream(deviceIdStr.split(",")) + .map(Long::valueOf) + .collect(Collectors.toList()); + for (Long deviceId : deviceIds) { + // 更新设备及其部件区域 + basedataDeviceService.updateBasedataDeviceRelation(toAreaId, deviceId); + // 更新设备及部件下点位所属区域 + basedataPatrolPointService.updateBasedataPatrolPointRelation(toAreaId, deviceId); + } + } + + else if (StringUtils.isNotEmpty(patrolPointIdStr) && toDeviceId != null) { + if (toAreaId != null) { + return AjaxResult.error("迁移失败,只允许点位迁移到设备部件"); + } + //点位迁移 + List patrolPointIds = Arrays.stream(patrolPointIdStr.split(",")) + .map(Long::valueOf) + .collect(Collectors.toList()); + // 查询迁移到哪个设备下的设备信息 + BasedataDevice basedataDevice = basedataDeviceService.selectBasedataDeviceRelationByDeviceId(toDeviceId); + toAreaId = basedataDevice.getAreaId(); + basedataDevice.setParentId(basedataDevice.getParentId() == 0 ? toDeviceId : basedataDevice.getParentId()); + Long toParentId = basedataDevice.getParentId(); + // 更新点位所属区域及设备id等信息 + basedataPatrolPointService.batchUpdateBasedataPatrolPointRelation(toAreaId, toParentId, toDeviceId, patrolPointIds); + + } + return AjaxResult.success("迁移成功"); + } + @GetMapping({"/treeAreaDeviceSelectFilterByMeter"}) public AjaxResult treeAreaDeviceSelectFilterByMeter(BaseDataArea baseDataArea) { log.info("treeAreaDeviceSelectFilterByMeter param: {}", baseDataArea); diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java index 72ee2c0..ccfc76e 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java @@ -3,6 +3,7 @@ package com.inspect.metadata.prodevmnt.domain.vo; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import com.inspect.metadata.patrolpointmnt.domain.BasedataPatrolPoint; import java.io.Serializable; import java.util.ArrayList; @@ -30,6 +31,21 @@ public class AreaDeviceTreeSelect implements Serializable { private String deviceLength; private String deviceWidth; private String deviceHigh; + + private Long pointNum; + + private List patrolPointNames; + + private List basedataPatrolPoints; + + public List getPatrolPointNames() { + return patrolPointNames; + } + + public void setPatrolPointNames(List patrolPointNames) { + this.patrolPointNames = patrolPointNames; + } + @JsonInclude(JsonInclude.Include.NON_NULL) private String patrolPointId; @JsonInclude(JsonInclude.Include.NON_NULL) @@ -220,7 +236,24 @@ public class AreaDeviceTreeSelect implements Serializable { public void setPatrolPointName(String patrolPointName) { this.patrolPointName = patrolPointName; } -// public List cleanEmptyPatrolPoints() { + + public Long getPointNum() { + return pointNum; + } + + public void setPointNum(Long pointNum) { + this.pointNum = pointNum; + } + + public List getBasedataPatrolPoints() { + return basedataPatrolPoints; + } + + public void setBasedataPatrolPoints(List basedataPatrolPoints) { + this.basedataPatrolPoints = basedataPatrolPoints; + } + + // public List cleanEmptyPatrolPoints() { // // 递归清理 // if (children != null) { // // 清理子节点 diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/mapper/BasedataDeviceMapper.java b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/mapper/BasedataDeviceMapper.java index 798749f..dd5d8b5 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/mapper/BasedataDeviceMapper.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/mapper/BasedataDeviceMapper.java @@ -14,6 +14,7 @@ public interface BasedataDeviceMapper { BasedataDevice selectBasedataDeviceByDeviceId(Long deviceId); List selectBasedataDeviceList(BasedataDevice device); + List selectBasedataDeviceRelationList(BasedataDevice device); List selectBasedataDeviceListFilterByMeter(BasedataDevice device); @@ -48,4 +49,8 @@ public interface BasedataDeviceMapper { List selectPatrolPointList(Long[] ids); int deleteBySendCode(@Param("sendCode") String sendCode); + + int updateBasedataDeviceRelation(@Param("toAreaId") Long toAreaId, @Param("deviceId") Long deviceId); + + BasedataDevice selectBasedataDeviceRelationByDeviceId(Long toDeviceId); } 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 94f596a..2e9c287 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 @@ -51,7 +51,13 @@ public interface IBasedataDeviceService { List buildAreaDeviceTreeSelectByAreasFilterByPreset(List areas, List filterNameList); + List buildAreaDeviceTreeSelectByAreasFilterByPresetRelation(List areas, List filterNameList); + List buildAreaDeviceTreeSelectByAreasFilterByMeter(List areas); List buildAreaDeviceTreeSelectByAreasFilterByFault(List areas); + + Boolean updateBasedataDeviceRelation(Long toAreaId, Long deviceId); + + BasedataDevice selectBasedataDeviceRelationByDeviceId(Long toDeviceId); } 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 39a5525..28714c8 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 @@ -7,6 +7,7 @@ import com.inspect.metadata.patrolpointmnt.domain.BasedataPatrolPoint; import com.inspect.metadata.patrolpointmnt.domain.BasedataPatrolPointPreset; import com.inspect.metadata.patrolpointmnt.mapper.BasedataPatrolPointMapper; import com.inspect.metadata.patrolpointmnt.mapper.BasedataPatrolPointPresetMapper; +import com.inspect.metadata.patrolpointmnt.service.IBasedataPatrolPointService; import com.inspect.metadata.prodevmnt.domain.BasedataDevice; import com.inspect.metadata.prodevmnt.domain.BasedataDeviceType; import com.inspect.metadata.prodevmnt.domain.BasedataModelDevice; @@ -63,10 +64,20 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { return this.basedataDeviceMapper.selectBasedataDeviceByDeviceId(deviceId); } + @Override + public BasedataDevice selectBasedataDeviceRelationByDeviceId(Long toDeviceId) { + return this.basedataDeviceMapper.selectBasedataDeviceRelationByDeviceId(toDeviceId); + } + public List selectBasedataDeviceList(BasedataDevice basedataDevice) { return this.basedataDeviceMapper.selectBasedataDeviceList(basedataDevice); } + @Override + public Boolean updateBasedataDeviceRelation(Long toAreaId, Long deviceId) { + return basedataDeviceMapper.updateBasedataDeviceRelation(toAreaId, deviceId) > 0; + } + public List selectAreaAndDeviceTree(BasedataDevice basedataDevice) { return this.basedataDeviceMapper.selectAreaAndDeviceTree(basedataDevice); } @@ -241,9 +252,173 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { areaVOS.add(deviceVO); } - return AreaDeviceTreeSelectUtil.buildDeviceTreeFilterByAreaName(areaVOS, filterNamelist); + List treeList = AreaDeviceTreeSelectUtil.buildDeviceTreeFilterByAreaName(areaVOS, filterNamelist); + + // 新增:填充点位统计 + fillPointNumAndPatrolPoints(areaVOS, treeList); + + return treeList; + } + + /** + * 填充 pointNum 和 basedataPatrolPoints + * @param allNodes 平面节点列表(包含所有区域和设备节点) + * @param treeList 构建后的树根节点列表 + */ + private void fillPointNumAndPatrolPoints(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.selectBasedataPatrolPointListByDeviceIds(new ArrayList<>(deviceIds)); + // 按设备ID分组 + Map> devicePatrolMap = patrolPoints.stream() + .collect(Collectors.groupingBy(BasedataPatrolPoint::getDeviceId)); + + // 递归设置统计值 + setPointNumAndPatrolPoints(treeList, devicePatrolMap); + } + + /** + * 递归设置 pointNum 和 basedataPatrolPoints信息 + */ + private void setPointNumAndPatrolPoints(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()) { + List basedataPatrolPoints = devicePatrolMap.get(node.getDeviceId()); + List patrolPoints = new ArrayList<>(); + for (BasedataPatrolPoint basedataPatrolPoint : basedataPatrolPoints) { + AreaDeviceTreeSelect patrolVO = new AreaDeviceTreeSelect(); + patrolVO.setPatrolPointName(basedataPatrolPoint.getPatrolPointName()); + patrolVO.setDeviceName(basedataPatrolPoint.getPatrolPointName()); + patrolVO.setPatrolPointId(String.valueOf(basedataPatrolPoint.getPatrolPointId())); + patrolPoints.add(patrolVO); + } + // 设置点位列表到节点上 + node.setChildren(patrolPoints); + } + } + } + + // 递归处理子节点 + if (node.getChildren() != null && !node.getChildren().isEmpty()) { + setPointNumAndPatrolPoints(node.getChildren(), devicePatrolMap); + // 累加子节点 pointNum + for (AreaDeviceTreeSelect child : node.getChildren()) { + pointNum += child.getPointNum() != null ? child.getPointNum() : 0L; + } + } + + node.setPointNum(pointNum); + } + } + + + /** + * 与fillPointNumAndPatrolPoints区别在于查询的表不一样 此处用的是basedata_patrolpoint_relation表,用于迁移数据使用 + */ + private void fillPointNumAndPatrolPointsRelation(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)); + + // 递归设置统计值 + setPointNumAndPatrolPoints(treeList, devicePatrolMap); } + public List buildAreaDeviceTreeSelectByAreasFilterByPresetRelation(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); + + return treeList; + } public List buildAreaDeviceTreeSelectByAreasFilterByMeter(List areas) { ArrayList areaIdList = new ArrayList<>(); HashMap areaMap = new HashMap<>(); diff --git a/inspect-metadata/src/main/resources/mapper/area/BaseDataAreaMapper.xml b/inspect-metadata/src/main/resources/mapper/area/BaseDataAreaMapper.xml index fc7604d..3ddd2cd 100644 --- a/inspect-metadata/src/main/resources/mapper/area/BaseDataAreaMapper.xml +++ b/inspect-metadata/src/main/resources/mapper/area/BaseDataAreaMapper.xml @@ -71,6 +71,50 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by d.parent_id, d.order_num + + + + + + + update + basedata_area_relation + set + parent_id = #{toAreaId} , ancestors = concat(#{ancestors}, ',', #{toAreaId}) + where area_id = #{areaId} + + diff --git a/inspect-metadata/src/main/resources/mapper/patrolpointmnt/BasedataPatrolPointMapper.xml b/inspect-metadata/src/main/resources/mapper/patrolpointmnt/BasedataPatrolPointMapper.xml index c1d9578..447ebb6 100644 --- a/inspect-metadata/src/main/resources/mapper/patrolpointmnt/BasedataPatrolPointMapper.xml +++ b/inspect-metadata/src/main/resources/mapper/patrolpointmnt/BasedataPatrolPointMapper.xml @@ -129,6 +129,53 @@ + + + + + + + + + + insert into basedata_device @@ -448,6 +615,11 @@ where device_id = #{deviceId} + + update basedata_device_relation set area_id = #{toAreaId} where device_id = #{deviceId} or parent_id = #{deviceId} + + + delete from basedata_device