diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessauthority/service/impl/AccessAuthorityServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessauthority/service/impl/AccessAuthorityServiceImpl.java new file mode 100755 index 00000000..52819e6c --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessauthority/service/impl/AccessAuthorityServiceImpl.java @@ -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 +* @date 2019-02-17 08:50:10.009 +**/ +@Service +public class AccessAuthorityServiceImpl implements AccessAuthorityService { + + @Autowired + private AccessAuthorityMapper accessAuthorityMapper; + + @Override + public GaeaBaseMapper getMapper() { + return accessAuthorityMapper; + } + + @Override + public List getAuthorityTree(String loginName, boolean withActionNode) { + // 查询出所有的菜单记录 + LambdaQueryWrapper 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 accessAuthorityList = getMapper().selectList(wrapper); + + // 筛选出一级菜单 + List 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> targetActionsMap = accessAuthorityList.stream() + .filter(accessAuthority -> StringUtils.isNoneBlank(accessAuthority.getParentTarget())) + .collect(Collectors.groupingBy(AccessAuthority::getTarget)); + + // 设置每个一级菜单的二菜单 + parentNodes.stream().forEach(parentNode -> { + List 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()); + + // 初始化二级菜单的按钮 + if(withActionNode){ + List 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 children = parentNode.getChildren(); + if(children == null){ + children = new ArrayList(); + } + children.add(levelTwoMenuNode); + parentNode.setChildren(children); + + // 已经找过的二级菜单,后面不在重复添加 + alreadyTargets.add(authority.getTarget()); + }); + }); + + return parentNodes; + } +} \ No newline at end of file