Browse Source

add:根据场景id获取关联的图层

master_tdsql
caoqi 1 year ago
parent
commit
b2993a44a5
  1. 174
      shuili-system/src/main/java/com/kms/yg/znjg/controller/SySceneController.java
  2. 2
      shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirLayerMapper.java
  3. 2
      shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirMapper.java
  4. 4
      shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyLayerMapper.java
  5. 16
      shuili-system/src/main/resources/mapper/yg/znjg/SyDirLayerMapper.xml
  6. 22
      shuili-system/src/main/resources/mapper/yg/znjg/SyDirMapper.xml
  7. 36
      shuili-system/src/main/resources/mapper/yg/znjg/SyLayerMapper.xml

174
shuili-system/src/main/java/com/kms/yg/znjg/controller/SySceneController.java

@ -1,30 +1,29 @@
package com.kms.yg.znjg.controller; 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.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kms.common.utils.UserUtils; import com.kms.common.utils.UserUtils;
import com.kms.yg.znjg.domain.SyDir; import com.kms.yg.znjg.domain.*;
import com.kms.yg.znjg.domain.SyScene; import com.kms.yg.znjg.mapper.*;
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.service.SySceneService; import com.kms.yg.znjg.service.SySceneService;
import com.kms.yg.znjg.vo.SyDirVo;
import com.kms.yg.znjg.vo.SySceneVo; import com.kms.yg.znjg.vo.SySceneVo;
import com.kms.yxgh.base.Response; import com.kms.yxgh.base.Response;
import com.shuili.common.core.domain.SearchParam; import com.shuili.common.core.domain.SearchParam;
import com.shuili.common.core.domain.entity.SysUser; import com.shuili.common.core.domain.entity.SysUser;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -49,6 +48,12 @@ public class SySceneController {
@Autowired @Autowired
private SySceneConfigRelationMapper sySceneConfigRelationMapper; private SySceneConfigRelationMapper sySceneConfigRelationMapper;
@Autowired
private SyDirLayerMapper syDirLayerMapper;
@Autowired
private SyLayerMapper syLayerMapper;
/** /**
* 分页查询所有的地图场景信息 * 分页查询所有的地图场景信息
* *
@ -199,4 +204,157 @@ public class SySceneController {
} }
return responseInfo; 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<SySceneDirRelation> sceneDirRelations = sySceneDirRelationMapper.selectByMap(new HashMap<String, Object>() {{
put("scene_id", sceneId);
put("is_valid", "1");
}});
if (sceneDirRelations != null && sceneDirRelations.size() > 0) {
// 根据图层目录查询关联的图层目录id
List<String> dirIds = sceneDirRelations.stream().map(SySceneDirRelation::getDirId).collect(Collectors.toList());
//获取专题目录一级目录
List<SyDir> allDirs = syDirMapper.findSecondInDirList(dirIds);
if (allDirs == null || allDirs.size() == 0) {
throw new Exception("未找到关联的图层信息");
}
List tree = new ArrayList();
Iterator<SyDir> it = allDirs.iterator();
while (it.hasNext()) {
List<Map> list = getProjectLayerData(it.next());
if (list != null && list.size() > 0) {
tree.add(list.get(0));
}
}
String dirId = ObjectUtil.isNotEmpty(sceneId) ? "" : "root";
List<SyLayer> 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<SyLayer> 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<Map> getProjectLayerData(SyDir topSyLabelDir) {
Set<String> dirSeqSet = syDirMapper.selectDirSeq();
Set<String> 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<SyDir> 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<SyLayer> syLabelList = syLayerMapper.findListByDirSeq(topSyLabelDir.getId());
Map<String, SyLayer> syLabelMap = syLabelList.stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
List<SyDirLayer> syLabelDirRelationList = syDirLayerMapper.findByDirSeq(topSyLabelDir.getId());
Map<String, List<SyDirLayer>> syViewPointDirDataMap = syLabelDirRelationList.stream().collect(Collectors.groupingBy(SyDirLayer::getDirId));
List<Map> list = dirList.stream().map(x -> {
Map item = getDirTreeMap(null, x, null);
List<SyDirLayer> 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<String, Map> idMap = list.stream().collect(Collectors.toMap(x -> MapUtils.getString(x, "id"), Function.identity()));
Iterator<Map> 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;
}
} }

2
shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirLayerMapper.java

@ -48,6 +48,8 @@ public interface SyDirLayerMapper extends BaseMapper<SyDirLayer> {
void deleteBatchByIds(@Param("syDirLayers") List<SyDirLayer> syDirLayers); void deleteBatchByIds(@Param("syDirLayers") List<SyDirLayer> syDirLayers);
void delete(@Param("ids") String[] ids); void delete(@Param("ids") String[] ids);
List<SyDirLayer> findByDirSeq(String id);
} }

2
shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyDirMapper.java

@ -32,6 +32,8 @@ public interface SyDirMapper extends BaseMapper<SyDir> {
List<SyDirVo> findSecond(); List<SyDirVo> findSecond();
List<SyDir> findSecondInDirList(@Param("dirList") List dirList);
Set<String> selectDirSeq(); Set<String> selectDirSeq();
List<SyDir> findByIds(@Param("ids") String[] ids); List<SyDir> findByIds(@Param("ids") String[] ids);

4
shuili-system/src/main/java/com/kms/yg/znjg/mapper/SyLayerMapper.java

@ -28,5 +28,9 @@ public interface SyLayerMapper extends BaseMapper<SyLayer> {
void delete(@Param("ids") String[] ids); void delete(@Param("ids") String[] ids);
Page<SyLayer> findSyLayerList(@Param("page") Page<SyLayer> page, @Param("syLayer") SyLayer syLayer, @Param("orderBy") String orderBy, @Param("sortBy") String sortBy); Page<SyLayer> findSyLayerList(@Param("page") Page<SyLayer> page, @Param("syLayer") SyLayer syLayer, @Param("orderBy") String orderBy, @Param("sortBy") String sortBy);
List<SyLayer> findListByDirSeq(@Param("dirSeqLike") String dirSeqLike);
List<SyLayer> getAllByDirId(@Param("dirId") String dirId);
} }

16
shuili-system/src/main/resources/mapper/yg/znjg/SyDirLayerMapper.xml

@ -32,6 +32,22 @@
WHERE is_valid = 1 WHERE is_valid = 1
</select> </select>
<select id="findByDirSeq" resultMap="BaseResultMap">
SELECT
a.id id,
a.dir_id dir_id,
a.layer_id layer_id,
a.order_nm order_nm
FROM
bs_sgc_qqjd_dir_layer a,
bs_sgc_qqjd_dir dd
WHERE
dd.id = a.dir_id
AND dd.dir_seq LIKE CONCAT(CONCAT('%', TRIM(#{dirSeqLike})), '%')
ORDER BY
a.order_nm
</select>
<insert id="save"> <insert id="save">
INSERT INTO bs_sgc_qqjd_dir_layer (id, dir_id, layer_id, order_nm, is_valid) INSERT INTO bs_sgc_qqjd_dir_layer (id, dir_id, layer_id, order_nm, is_valid)
VALUES (#{id}, #{dirId}, #{layerId}, #{orderNm}, 1) VALUES (#{id}, #{dirId}, #{layerId}, #{orderNm}, 1)

22
shuili-system/src/main/resources/mapper/yg/znjg/SyDirMapper.xml

@ -17,7 +17,9 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
y.id y
.
id
,y.name,y.parent_id, ,y.name,y.parent_id,
y.xpath,y.dir_seq,y.order_nm,y.pub_date, y.xpath,y.dir_seq,y.order_nm,y.pub_date,
y.create_user,y.directory_description y.create_user,y.directory_description
@ -172,4 +174,22 @@
ORDER BY order_nm ORDER BY order_nm
</select> </select>
<select id="findSecondInDirList" resultType="com.kms.yg.znjg.domain.SyDir">
SELECT
<include refid="Base_Column_List"/>
FROM
bs_sgc_qqjd_dir y
WHERE y.is_valid = 1
and
y.PARENT_ID
IN ("root")
and
y.id
IN
<foreach collection="dirList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
ORDER BY y.order_nm
</select>
</mapper> </mapper>

36
shuili-system/src/main/resources/mapper/yg/znjg/SyLayerMapper.xml

@ -249,4 +249,40 @@
</if> </if>
a.id a.id
</select> </select>
<select id="findListByDirSeq" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from bs_sgc_qqjd_layer a
<if test="dirSeqLike != null">
left join (
select
sylayer.layer_id,
count(sylayer.dir_id) num
from
bs_sgc_qqjd_dir_layer sylayer,
bs_sgc_qqjd_dir sydir
where
sylayer.dir_id = sydir.id
and sydir.dir_seq like concat(concat('%', trim(#{dirSeqLike})), '%')
</if>
group by sylayer.layer_id
) layerdircounttbl
on layerdircounttbl.layer_id = a.id
<where>
<if test="dirSeqLike != null">
and layerdircounttbl.num > 0
</if>
</where>
</select>
<select id="getAllByDirId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from bs_sgc_qqjd_layer
where 1=1
<if test="dirId != null and dirId != ''">
AND dir_id = #{dirId,jdbcType=VARCHAR}
</if>
</select>
</mapper> </mapper>

Loading…
Cancel
Save