mirror of
https://github.com/dataease/dataease.git
synced 2026-05-20 19:48:18 +08:00
Merge remote-tracking branch 'origin/main' into main
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package io.dataease.base.mapper.ext;
|
||||
|
||||
import io.dataease.base.mapper.ext.query.GridExample;
|
||||
import io.dataease.controller.sys.request.SimpleTreeNode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ExtSysMenuMapper {
|
||||
|
||||
List<SimpleTreeNode> allNodes();
|
||||
|
||||
List<SimpleTreeNode> nodesByExample(GridExample example);
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="io.dataease.base.mapper.ext.ExtSysMenuMapper">
|
||||
|
||||
<resultMap id="simpleNode" type="io.dataease.controller.sys.request.SimpleTreeNode">
|
||||
<id property="id" column="id" javaType="java.lang.Long" />
|
||||
<result property="pid" column="pid" javaType="java.lang.Long"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="allNodes" resultMap="simpleNode">
|
||||
select menu_id as id, pid from sys_menu
|
||||
</select>
|
||||
|
||||
|
||||
<select id="nodesByExample" parameterType="io.dataease.base.mapper.ext.query.GridExample" resultMap="simpleNode">
|
||||
select menu_id as id, pid from sys_menu
|
||||
<include refid="io.dataease.base.mapper.ext.query.GridSql.gridCondition" />
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -5,8 +5,11 @@ import io.dataease.base.domain.SysMenu;
|
||||
import io.dataease.commons.utils.BeanUtils;
|
||||
|
||||
import io.dataease.controller.handler.annotation.I18n;
|
||||
import io.dataease.controller.sys.base.BaseGridRequest;
|
||||
import io.dataease.controller.sys.request.MenuCreateRequest;
|
||||
import io.dataease.controller.sys.request.MenuDeleteRequest;
|
||||
import io.dataease.controller.sys.request.SimpleTreeNode;
|
||||
import io.dataease.controller.sys.response.DeptNodeResponse;
|
||||
import io.dataease.controller.sys.response.MenuNodeResponse;
|
||||
import io.dataease.controller.sys.response.MenuTreeNode;
|
||||
import io.dataease.service.sys.MenuService;
|
||||
@@ -37,6 +40,20 @@ public class SysMenuController {
|
||||
return menuService.convert(nodes);
|
||||
}
|
||||
|
||||
@ApiOperation("搜索菜单树")
|
||||
@I18n
|
||||
@PostMapping("/search")
|
||||
public List<MenuNodeResponse> search(@RequestBody BaseGridRequest request) {
|
||||
List<SysMenu> nodes = menuService.nodesTreeByCondition(request);
|
||||
List<MenuNodeResponse> nodeResponses = nodes.stream().map(node -> {
|
||||
MenuNodeResponse menuNodeResponse = BeanUtils.copyBean(new MenuNodeResponse(), node);
|
||||
menuNodeResponse.setHasChildren(node.getSubCount() > 0);
|
||||
menuNodeResponse.setTop(node.getPid() == menuService.MENU_ROOT_PID);
|
||||
return menuNodeResponse;
|
||||
}).collect(Collectors.toList());
|
||||
return nodeResponses;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ApiOperation("新增菜单")
|
||||
|
||||
@@ -1,26 +1,24 @@
|
||||
package io.dataease.service.sys;
|
||||
|
||||
import io.dataease.base.domain.SysDept;
|
||||
|
||||
import io.dataease.base.domain.SysMenu;
|
||||
import io.dataease.base.domain.SysMenuExample;
|
||||
import io.dataease.base.mapper.SysMenuMapper;
|
||||
import io.dataease.base.mapper.ext.ExtMenuMapper;
|
||||
import io.dataease.base.mapper.ext.ExtSysMenuMapper;
|
||||
import io.dataease.commons.utils.BeanUtils;
|
||||
import io.dataease.controller.sys.base.BaseGridRequest;
|
||||
import io.dataease.controller.sys.request.MenuCreateRequest;
|
||||
import io.dataease.controller.sys.request.MenuDeleteRequest;
|
||||
import io.dataease.controller.sys.response.DeptTreeNode;
|
||||
import io.dataease.controller.sys.request.SimpleTreeNode;
|
||||
import io.dataease.controller.sys.response.MenuNodeResponse;
|
||||
|
||||
import io.dataease.controller.sys.response.MenuTreeNode;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@@ -34,6 +32,8 @@ public class MenuService {
|
||||
@Resource
|
||||
private SysMenuMapper sysMenuMapper;
|
||||
|
||||
@Resource
|
||||
private ExtSysMenuMapper extSysMenuMapper;
|
||||
|
||||
@Resource
|
||||
private ExtMenuMapper extMenuMapper;
|
||||
@@ -173,4 +173,54 @@ public class MenuService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
public List<SysMenu> nodesTreeByCondition(BaseGridRequest request){
|
||||
List<SimpleTreeNode> allNodes = allNodes();
|
||||
List<SimpleTreeNode> targetNodes = nodeByCondition(request);
|
||||
if(org.apache.commons.collections.CollectionUtils.isEmpty(targetNodes)){
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<Long> ids = upTree(allNodes, targetNodes);
|
||||
SysMenuExample example = new SysMenuExample();
|
||||
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(ids)){
|
||||
SysMenuExample.Criteria criteria = example.createCriteria();
|
||||
criteria.andMenuIdIn(ids);
|
||||
}
|
||||
List<SysMenu> sysMenus = sysMenuMapper.selectByExample(example);
|
||||
return sysMenus;
|
||||
}
|
||||
|
||||
public List<SimpleTreeNode> allNodes() {
|
||||
List<SimpleTreeNode> allNodes = extSysMenuMapper.allNodes();
|
||||
return allNodes;
|
||||
}
|
||||
|
||||
public List<SimpleTreeNode> nodeByCondition(BaseGridRequest request) {
|
||||
List<SimpleTreeNode> simpleTreeNodes = extSysMenuMapper.nodesByExample(request.convertExample());
|
||||
return simpleTreeNodes;
|
||||
}
|
||||
|
||||
/**
|
||||
* 找出目标节点所在路径上的所有节点 向上找
|
||||
* @param allNodes 所有节点
|
||||
* @param targetNodes 目标节点
|
||||
* @return
|
||||
*/
|
||||
private List<Long> upTree(List<SimpleTreeNode> allNodes, List<SimpleTreeNode> targetNodes){
|
||||
final Map<Long, SimpleTreeNode> map = allNodes.stream().collect(Collectors.toMap(SimpleTreeNode::getId, node -> node));
|
||||
List<Long> results = targetNodes.parallelStream().flatMap(targetNode -> {
|
||||
//向上逐级找爹
|
||||
List<Long> ids = new ArrayList<>();
|
||||
SimpleTreeNode node = targetNode;
|
||||
while (node != null) {
|
||||
ids.add(node.getId());
|
||||
Long pid = node.getPid();
|
||||
node = map.get(pid);
|
||||
}
|
||||
return ids.stream();
|
||||
}).distinct().collect(Collectors.toList());
|
||||
return results;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user