From b2993a44a5fdacf8d9ae5a5f883c2d66a15c3b4a Mon Sep 17 00:00:00 2001 From: caoqi Date: Sat, 9 Mar 2024 17:59:11 +0800 Subject: [PATCH] =?UTF-8?q?add:=E6=A0=B9=E6=8D=AE=E5=9C=BA=E6=99=AFid?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=85=B3=E8=81=94=E7=9A=84=E5=9B=BE=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yg/znjg/controller/SySceneController.java | 174 +++++++++++++++++- .../kms/yg/znjg/mapper/SyDirLayerMapper.java | 2 + .../com/kms/yg/znjg/mapper/SyDirMapper.java | 2 + .../com/kms/yg/znjg/mapper/SyLayerMapper.java | 4 + .../mapper/yg/znjg/SyDirLayerMapper.xml | 16 ++ .../resources/mapper/yg/znjg/SyDirMapper.xml | 22 ++- .../mapper/yg/znjg/SyLayerMapper.xml | 36 ++++ 7 files changed, 247 insertions(+), 9 deletions(-) diff --git a/shuili-system/src/main/java/com/kms/yg/znjg/controller/SySceneController.java b/shuili-system/src/main/java/com/kms/yg/znjg/controller/SySceneController.java index 864f61dc..d8c5289f 100644 --- a/shuili-system/src/main/java/com/kms/yg/znjg/controller/SySceneController.java +++ b/shuili-system/src/main/java/com/kms/yg/znjg/controller/SySceneController.java @@ -1,30 +1,29 @@ package com.kms.yg.znjg.controller; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kms.common.utils.UserUtils; -import com.kms.yg.znjg.domain.SyDir; -import com.kms.yg.znjg.domain.SyScene; -import com.kms.yg.znjg.domain.SySceneConfigRelation; -import com.kms.yg.znjg.domain.SySceneDirRelation; -import com.kms.yg.znjg.mapper.SyDirMapper; -import com.kms.yg.znjg.mapper.SySceneConfigRelationMapper; -import com.kms.yg.znjg.mapper.SySceneDirRelationMapper; -import com.kms.yg.znjg.mapper.SySceneMapper; +import com.kms.yg.znjg.domain.*; +import com.kms.yg.znjg.mapper.*; import com.kms.yg.znjg.service.SySceneService; +import com.kms.yg.znjg.vo.SyDirVo; import com.kms.yg.znjg.vo.SySceneVo; import com.kms.yxgh.base.Response; import com.shuili.common.core.domain.SearchParam; import com.shuili.common.core.domain.entity.SysUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -49,6 +48,12 @@ public class SySceneController { @Autowired private SySceneConfigRelationMapper sySceneConfigRelationMapper; + @Autowired + private SyDirLayerMapper syDirLayerMapper; + + @Autowired + private SyLayerMapper syLayerMapper; + /** * 分页查询所有的地图场景信息 * @@ -199,4 +204,157 @@ public class SySceneController { } return responseInfo; } + + /** + * 根据场景id获取关联的图层信息 + * + * @param sceneId 场景id + * @return + * @throws Exception + */ + @GetMapping(value = "/getLayerTree/{sceneId}") + @ApiOperation("根据场景id获取关联的图层信息") + public Response getLayerTree(@PathVariable(value = "sceneId") String sceneId) throws Exception { + try { + // 查询场景关联的图层目录信息 + List sceneDirRelations = sySceneDirRelationMapper.selectByMap(new HashMap() {{ + put("scene_id", sceneId); + put("is_valid", "1"); + }}); + if (sceneDirRelations != null && sceneDirRelations.size() > 0) { + // 根据图层目录查询关联的图层目录id + List dirIds = sceneDirRelations.stream().map(SySceneDirRelation::getDirId).collect(Collectors.toList()); + //获取专题目录一级目录 + List allDirs = syDirMapper.findSecondInDirList(dirIds); + if (allDirs == null || allDirs.size() == 0) { + throw new Exception("未找到关联的图层信息"); + } + List tree = new ArrayList(); + Iterator it = allDirs.iterator(); + while (it.hasNext()) { + List list = getProjectLayerData(it.next()); + if (list != null && list.size() > 0) { + tree.add(list.get(0)); + } + } + String dirId = ObjectUtil.isNotEmpty(sceneId) ? "" : "root"; + List rootLabels = syLayerMapper.getAllByDirId(dirId); + Map rootItem = new HashMap(); + rootItem.put("id", "root"); + rootItem.put("text", "全部"); + rootItem.put("iconCls", "icon-folder"); + rootItem.put("pid", ""); + rootItem.put("dirOrder", 1); + rootItem.put("info", ""); + if (allDirs == null || allDirs.size() == 0) { + rootItem.put("children", new ArrayList<>()); + } else { + rootItem.put("children", tree); + } + if (rootLabels.size() > 0) { + //去掉不包含"root"的 + List newRootLabels = rootLabels.stream() + .filter(syLabel -> syLabel.getDirId().contains("root")) + .collect(Collectors.toList()); + rootItem.put("layers", newRootLabels); + } + return new Response() {{ + setCode("200"); + setData(rootItem); + }}; + } else { + throw new Exception("未找到关联的图层信息"); + } + } catch (Exception e) { + e.printStackTrace(); + return new Response() {{ + setCode("500"); + setMsg(e.getMessage()); + }}; + } + } + + + private List getProjectLayerData(SyDir topSyLabelDir) { + Set dirSeqSet = syDirMapper.selectDirSeq(); + Set dirIdSet = new HashSet<>(); + dirIdSet.add(topSyLabelDir.getId()); + for (String dirSeq : dirSeqSet) { + String[] dirSeqs = dirSeq.split(","); + if (dirSeqs.length > 1 && dirSeqs[dirSeqs.length - 2].equals(topSyLabelDir.getId())) { + Arrays.stream(dirSeqs).forEach(key -> { + if (!"root".equals(key)) { + dirIdSet.add(key); + } + }); + } + } + List dirList = new ArrayList<>(); + if (dirIdSet.size() > 0) { + dirList = syDirMapper.findByIds(dirIdSet.toArray(new String[dirIdSet.size()])); + } + if (dirList == null || dirList.size() == 0) { + return new ArrayList<>(); + } + List syLabelList = syLayerMapper.findListByDirSeq(topSyLabelDir.getId()); + Map syLabelMap = syLabelList.stream().collect(Collectors.toMap(x -> x.getId(), x -> x)); + + List syLabelDirRelationList = syDirLayerMapper.findByDirSeq(topSyLabelDir.getId()); + Map> syViewPointDirDataMap = syLabelDirRelationList.stream().collect(Collectors.groupingBy(SyDirLayer::getDirId)); + List list = dirList.stream().map(x -> { + Map item = getDirTreeMap(null, x, null); + List dirLayerList = syViewPointDirDataMap.get(x.getId()); + if (dirLayerList != null && dirLayerList.size() > 0) { + List layers = new ArrayList<>(); + dirLayerList.stream().forEach(xd -> { + SyLayer layerc = syLabelMap.get(xd.getLayerId()); + if (layerc != null) { + layers.add(layerc); + } + }); + item.put("layers", layers); + } + return item; + }).collect(Collectors.toList()); + + Map idMap = list.stream().collect(Collectors.toMap(x -> MapUtils.getString(x, "id"), Function.identity())); + Iterator it = list.iterator(); + while (it.hasNext()) { + Map item = it.next(); + String pid = MapUtils.getString(item, "pid"); + if (!"root".equals(pid)) { + Map parent = idMap.get(pid); + if (parent != null) { + List childrens = null; + if (!parent.containsKey("children")) { + childrens = new ArrayList<>(); + parent.put("children", new ArrayList<>()); + } else { + childrens = (List) parent.get("children"); + } + childrens.add(item); + parent.put("children", childrens); + } + it.remove(); + } + } + return list; + } + + + private Map getDirTreeMap(Map item, SyDir syLabelDir, String iconCls) { + if (item == null) { + item = new HashMap(); + } + if (org.apache.commons.lang3.StringUtils.isBlank(iconCls)) { + iconCls = "icon-folder"; + } + item.put("id", syLabelDir.getId()); + item.put("text", syLabelDir.getName()); + item.put("iconCls", iconCls); + item.put("pid", syLabelDir.getParentId()); + item.put("dirOrder", syLabelDir.getOrderNm()); + item.put("info", ""); + return item; + } } diff --git a/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirLayerMapper.java b/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirLayerMapper.java index 6902881d..31bc9e69 100644 --- a/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirLayerMapper.java +++ b/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirLayerMapper.java @@ -48,6 +48,8 @@ public interface SyDirLayerMapper extends BaseMapper { void deleteBatchByIds(@Param("syDirLayers") List syDirLayers); void delete(@Param("ids") String[] ids); + + List findByDirSeq(String id); } diff --git a/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirMapper.java b/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirMapper.java index 699d82ce..5cdc4119 100644 --- a/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirMapper.java +++ b/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirMapper.java @@ -32,6 +32,8 @@ public interface SyDirMapper extends BaseMapper { List findSecond(); + List findSecondInDirList(@Param("dirList") List dirList); + Set selectDirSeq(); List findByIds(@Param("ids") String[] ids); diff --git a/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyLayerMapper.java b/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyLayerMapper.java index 69f1f2b4..84e309c9 100644 --- a/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyLayerMapper.java +++ b/shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyLayerMapper.java @@ -28,5 +28,9 @@ public interface SyLayerMapper extends BaseMapper { void delete(@Param("ids") String[] ids); Page findSyLayerList(@Param("page") Page page, @Param("syLayer") SyLayer syLayer, @Param("orderBy") String orderBy, @Param("sortBy") String sortBy); + + List findListByDirSeq(@Param("dirSeqLike") String dirSeqLike); + + List getAllByDirId(@Param("dirId") String dirId); } diff --git a/shuili-system/src/main/resources/mapper/yg/znjg/SyDirLayerMapper.xml b/shuili-system/src/main/resources/mapper/yg/znjg/SyDirLayerMapper.xml index 1dff8f30..8b5da829 100644 --- a/shuili-system/src/main/resources/mapper/yg/znjg/SyDirLayerMapper.xml +++ b/shuili-system/src/main/resources/mapper/yg/znjg/SyDirLayerMapper.xml @@ -32,6 +32,22 @@ WHERE is_valid = 1 + + INSERT INTO bs_sgc_qqjd_dir_layer (id, dir_id, layer_id, order_nm, is_valid) VALUES (#{id}, #{dirId}, #{layerId}, #{orderNm}, 1) diff --git a/shuili-system/src/main/resources/mapper/yg/znjg/SyDirMapper.xml b/shuili-system/src/main/resources/mapper/yg/znjg/SyDirMapper.xml index 6bdafbf7..33b82955 100644 --- a/shuili-system/src/main/resources/mapper/yg/znjg/SyDirMapper.xml +++ b/shuili-system/src/main/resources/mapper/yg/znjg/SyDirMapper.xml @@ -17,7 +17,9 @@ - y.id + y + . + id ,y.name,y.parent_id, y.xpath,y.dir_seq,y.order_nm,y.pub_date, y.create_user,y.directory_description @@ -172,4 +174,22 @@ ORDER BY order_nm + + diff --git a/shuili-system/src/main/resources/mapper/yg/znjg/SyLayerMapper.xml b/shuili-system/src/main/resources/mapper/yg/znjg/SyLayerMapper.xml index 9a758917..77ad98bb 100644 --- a/shuili-system/src/main/resources/mapper/yg/znjg/SyLayerMapper.xml +++ b/shuili-system/src/main/resources/mapper/yg/znjg/SyLayerMapper.xml @@ -249,4 +249,40 @@ a.id + + + +