| 
					
				 | 
			
			
				@@ -0,0 +1,105 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.anjiplus.template.gaea.business.modules.accessauthority.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.anji.plus.gaea.bean.TreeNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.anjiplus.template.gaea.business.modules.accessauthority.dao.entity.AccessAuthority; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.anjiplus.template.gaea.business.modules.accessauthority.service.AccessAuthorityService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.anjiplus.template.gaea.business.modules.accessauthority.dao.AccessAuthorityMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.core.toolkit.Wrappers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* @desc AccessAuthority 权限管理服务实现 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* @author 木子李·De <lide1202@hotmail.com> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* @date 2019-02-17 08:50:10.009 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+**/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class AccessAuthorityServiceImpl implements AccessAuthorityService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private AccessAuthorityMapper accessAuthorityMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public GaeaBaseMapper<AccessAuthority> getMapper() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return accessAuthorityMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<TreeNode> getAuthorityTree(String loginName, boolean withActionNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 查询出所有的菜单记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LambdaQueryWrapper<AccessAuthority> wrapper = Wrappers.lambdaQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        wrapper.select(AccessAuthority::getParentTarget, AccessAuthority::getTarget, AccessAuthority::getTargetName, AccessAuthority::getAction, AccessAuthority::getActionName) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(AccessAuthority::getEnableFlag, 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(AccessAuthority::getDeleteFlag, 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .orderByAsc(AccessAuthority::getSort); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 按operator去筛选 后面再加where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AccessAuthority> accessAuthorityList = getMapper().selectList(wrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 筛选出一级菜单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TreeNode> parentNodes = accessAuthorityList.stream().filter(accessAuthority -> StringUtils.isBlank(accessAuthority.getParentTarget())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .map(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    TreeNode treeNode = new TreeNode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    treeNode.setId(item.getTarget()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    treeNode.setLabel(item.getTargetName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return treeNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 菜单-按钮的map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, List<AccessAuthority>> targetActionsMap = accessAuthorityList.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .filter(accessAuthority -> StringUtils.isNoneBlank(accessAuthority.getParentTarget())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .collect(Collectors.groupingBy(AccessAuthority::getTarget)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 设置每个一级菜单的二菜单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        parentNodes.stream().forEach(parentNode -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<String> alreadyTargets = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            accessAuthorityList.stream().forEach(authority -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(!StringUtils.equals(parentNode.getId(), authority.getParentTarget()) || alreadyTargets.contains(authority.getTarget())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 找到一级菜单对应的二级菜单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 初始化二级菜单节点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                TreeNode levelTwoMenuNode = new TreeNode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                levelTwoMenuNode.setId(authority.getTarget()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                levelTwoMenuNode.setLabel(authority.getTargetName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                levelTwoMenuNode.setChildren(new ArrayList<TreeNode>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 初始化二级菜单的按钮 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(withActionNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<AccessAuthority> actionList = targetActionsMap.get(authority.getTarget()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(actionList != null && !actionList.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        actionList.stream().forEach(action ->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            TreeNode buttonNode = new TreeNode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            buttonNode.setId(String.format("%s_%s", action.getTarget(), action.getAction())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            buttonNode.setLabel(action.getActionName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            levelTwoMenuNode.getChildren().add(buttonNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 将上面找到的二级菜单加入到一菜单的子树中去 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<TreeNode> children = parentNode.getChildren(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(children == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    children = new ArrayList<TreeNode>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                children.add(levelTwoMenuNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                parentNode.setChildren(children); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 已经找过的二级菜单,后面不在重复添加 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                alreadyTargets.add(authority.getTarget()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return parentNodes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |