fix: 优化地图逻辑
This commit is contained in:
parent
1b07991cbf
commit
db6f87ba71
@ -2,6 +2,7 @@ package com.yfd.platform.qgc_sys.mapLayer.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.yfd.platform.qgc_sys.mapLayer.domain.MsMapmoduleB;
|
||||||
import com.yfd.platform.qgc_sys.mapLayer.domain.MsMaplayerB;
|
import com.yfd.platform.qgc_sys.mapLayer.domain.MsMaplayerB;
|
||||||
import com.yfd.platform.qgc_sys.mapLayer.entity.vo.MapLayerAo;
|
import com.yfd.platform.qgc_sys.mapLayer.entity.vo.MapLayerAo;
|
||||||
import com.yfd.platform.qgc_sys.mapLayer.entity.vo.MapLayerVo;
|
import com.yfd.platform.qgc_sys.mapLayer.entity.vo.MapLayerVo;
|
||||||
@ -184,7 +185,8 @@ public class MapLayerBizServiceImpl implements IMapLayerBizService {
|
|||||||
@Override
|
@Override
|
||||||
public List<MapLayerVo> getMapLayerTree(String moduleId, String systemId, String templateId) {
|
public List<MapLayerVo> getMapLayerTree(String moduleId, String systemId, String templateId) {
|
||||||
List<MapLayerVo> allLayers;
|
List<MapLayerVo> allLayers;
|
||||||
if (adminAuthService.isCurrentManagedAdmin()) {
|
boolean currentManagedAdmin = adminAuthService.isCurrentManagedAdmin();
|
||||||
|
if (currentManagedAdmin) {
|
||||||
allLayers = msMapmoduleBMapper.getMapLayerTree(moduleId, systemId, templateId);
|
allLayers = msMapmoduleBMapper.getMapLayerTree(moduleId, systemId, templateId);
|
||||||
} else {
|
} else {
|
||||||
List<String> currentUserModuleIds = getCurrentUserModuleIds();
|
List<String> currentUserModuleIds = getCurrentUserModuleIds();
|
||||||
@ -193,12 +195,15 @@ public class MapLayerBizServiceImpl implements IMapLayerBizService {
|
|||||||
}
|
}
|
||||||
allLayers = msMapmoduleBMapper.getMapLayerTreeByModuleIds(currentUserModuleIds, systemId, templateId);
|
allLayers = msMapmoduleBMapper.getMapLayerTreeByModuleIds(currentUserModuleIds, systemId, templateId);
|
||||||
allLayers = supplementMissingParentLayers(allLayers);
|
allLayers = supplementMissingParentLayers(allLayers);
|
||||||
|
allLayers = deduplicateMapLayers(allLayers);
|
||||||
}
|
}
|
||||||
|
if (allLayers.isEmpty()) {
|
||||||
if (allLayers == null || allLayers.isEmpty()) {
|
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
if (!currentManagedAdmin) {
|
||||||
|
Set<String> checkedLayerIds = getCurrentModuleCheckedLayerIds(moduleId, systemId, templateId);
|
||||||
|
resetCheckedStatus(allLayers, checkedLayerIds);
|
||||||
|
}
|
||||||
allLayers = sortMapLayerVos(allLayers);
|
allLayers = sortMapLayerVos(allLayers);
|
||||||
|
|
||||||
// 取第一级
|
// 取第一级
|
||||||
@ -333,4 +338,76 @@ public class MapLayerBizServiceImpl implements IMapLayerBizService {
|
|||||||
vo.setMultiSelect(1);
|
vo.setMultiSelect(1);
|
||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<MapLayerVo> deduplicateMapLayers(List<MapLayerVo> layers) {
|
||||||
|
Map<String, MapLayerVo> uniqueMap = new LinkedHashMap<>();
|
||||||
|
for (MapLayerVo layer : layers) {
|
||||||
|
if (layer == null || StrUtil.isBlank(layer.getId())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
uniqueMap.putIfAbsent(layer.getId(), layer);
|
||||||
|
}
|
||||||
|
return new ArrayList<>(uniqueMap.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Set<String> getCurrentModuleCheckedLayerIds(String moduleId, String systemId, String templateId) {
|
||||||
|
if (StrUtil.isBlank(moduleId)) {
|
||||||
|
return Collections.emptySet();
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<MsMapmoduleB> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(MsMapmoduleB::getModuleId, moduleId)
|
||||||
|
.eq(MsMapmoduleB::getResType, "layer")
|
||||||
|
.eq(MsMapmoduleB::getIsDeleted, 0)
|
||||||
|
.select(MsMapmoduleB::getResId);
|
||||||
|
if (StrUtil.isNotBlank(systemId)) {
|
||||||
|
wrapper.eq(MsMapmoduleB::getSystemId, systemId);
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(templateId)) {
|
||||||
|
wrapper.eq(MsMapmoduleB::getTemplateId, templateId);
|
||||||
|
} else {
|
||||||
|
wrapper.and(w -> w.isNull(MsMapmoduleB::getTemplateId)
|
||||||
|
.or()
|
||||||
|
.eq(MsMapmoduleB::getTemplateId, "00000000-0000-0000-0000-000000000000"));
|
||||||
|
}
|
||||||
|
List<MsMapmoduleB> moduleLayers = msMapmoduleBMapper.selectList(wrapper);
|
||||||
|
if (moduleLayers == null || moduleLayers.isEmpty()) {
|
||||||
|
return Collections.emptySet();
|
||||||
|
}
|
||||||
|
Set<String> checkedIds = moduleLayers.stream()
|
||||||
|
.map(MsMapmoduleB::getResId)
|
||||||
|
.filter(StrUtil::isNotBlank)
|
||||||
|
.collect(Collectors.toCollection(LinkedHashSet::new));
|
||||||
|
if (checkedIds.isEmpty()) {
|
||||||
|
return Collections.emptySet();
|
||||||
|
}
|
||||||
|
Set<String> pendingParentIds = new LinkedHashSet<>(checkedIds);
|
||||||
|
while (!pendingParentIds.isEmpty()) {
|
||||||
|
LambdaQueryWrapper<MsMaplayerB> wrapperParent = new LambdaQueryWrapper<>();
|
||||||
|
wrapperParent.in(MsMaplayerB::getId, pendingParentIds)
|
||||||
|
.eq(MsMaplayerB::getIsDeleted, 0)
|
||||||
|
.select(MsMaplayerB::getId, MsMaplayerB::getParentId);
|
||||||
|
List<MsMaplayerB> currentLayers = msMaplayerBMapper.selectList(wrapperParent);
|
||||||
|
if (currentLayers == null || currentLayers.isEmpty()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Set<String> nextParentIds = new LinkedHashSet<>();
|
||||||
|
for (MsMaplayerB currentLayer : currentLayers) {
|
||||||
|
if (StrUtil.isNotBlank(currentLayer.getParentId()) && checkedIds.add(currentLayer.getParentId())) {
|
||||||
|
nextParentIds.add(currentLayer.getParentId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pendingParentIds = nextParentIds;
|
||||||
|
}
|
||||||
|
return checkedIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetCheckedStatus(List<MapLayerVo> layers, Set<String> checkedLayerIds) {
|
||||||
|
if (layers == null || layers.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Set<String> normalizedCheckedIds = checkedLayerIds == null ? Collections.emptySet() : checkedLayerIds;
|
||||||
|
for (MapLayerVo layer : layers) {
|
||||||
|
layer.setChecked(normalizedCheckedIds.contains(layer.getId()) ? 1 : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user