|  | @@ -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;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |