zoukankan      html  css  js  c++  java
  • java框架 初始化菜单树

    @RequestMapping("/tree") @DoLog(cnContent = "权限树初始化", value = false) //@Permission(name = "login.tree")
        public String tree(HttpServletRequest request, HttpServletResponse response, ZTreeComm zTree) throws Exception {
            try {
                //1、获取登陆人的信息
                SysUser currentUser = getLoginUser(request);
                // 2.根据id获取权限列表,id为空时获取父权限列表(limit=roleid)
                List<ZTreeComm> tree = sysUserService.initAuthorityTree(zTree, currentUser);
                // 3.设置父节点
                List<ZTreeComm> votree = new ArrayList<ZTreeComm>();
                for (int i = 0; i < tree.size(); i++) {
                    ZTreeComm ztree = (ZTreeComm) tree.get(i);
                    int total = sysUserService.isParent(ztree);
                    ztree.setIsParent(total != 0 ? Constants.IS_TRUE : Constants.IS_FALSE);
                    votree.add(ztree);
                }
                //4、list排序。
                Collections.sort(votree, new Comparator<ZTreeComm>() {
                    public int compare(ZTreeComm arg0, ZTreeComm arg1) {
                        return arg0.getSortNo().compareTo(arg1.getSortNo());
                    }
                });
                return this.ajax(response, votree);
            } catch (Exception e) {
                this.logException(e);
                return this.ajax(response, "系统出现异常: [" + e.getMessage() + "] 请与管理员联系!");
            }
        }
    @Override
        public List<ZTreeComm> initAuthorityTree(ZTreeComm ztree, SysUser sysUser) throws Exception {
            //1、获取角色字符串
            List<SysRole> sysRoles = sysUser.getSysRoles();
            String roleId = "";
            if (CollectionHelp.isNotBank(sysRoles)) {
                for (Object obj : sysRoles) {
                    SysRole role = (SysRole) obj;
                    if (Constants.STATUS_ACTIVE.equals(role.getStatus())) {
                        roleId = role.getRoleId() + "," + roleId;
                    }
                }
            }
            ztree.setDiyParams(roleId); //因为ztree并没有roleid的属性,所以使用ztree的空属性
            //2、根据ztree,获取权限信息
            List<ZTreeComm> dataList = new ArrayList<ZTreeComm>();
            if (StringUtils.isEmpty(ztree.getId())) {
                //id为空,初始加载,查询根节点. where parent_dept_id is null
                dataList = sqlSessionTemplate.selectList(SecurityMgrConstants.ZTREE_COMMON_MAPPER_NAMESPACE + ".getAuthorityRoot", ztree);
            } else {
                //id不为空,为下拉,查询子节点 . where parent_dept_id =id
                dataList = sqlSessionTemplate.selectList(SecurityMgrConstants.ZTREE_COMMON_MAPPER_NAMESPACE + ".getAuthorityById", ztree);
            }
            return dataList;
        }

    获取用户的所有角色,并将角色id放入字符串中并存入ZtreeComm类中的自定义属性中去DiyParams

    ZtreeComm应该是对应Sys_Authority表,但是表中并没有对应roleid的字段,所以实体类中将roleid以字符串的形式存储到ztree中去

    接下来判断是否是根节点,//id为空,初始加载,查询根节点,//id不为空,为下拉,查询子节点

    <!-- 查询部门根节点 -->
        <select id="getAuthorityRoot" resultMap="authorityTreeResultMap" parameterType="ZTreeComm">
            SELECT * FROM SYS_AUTHORITY WHERE AUTHORITY_ID IN(
                SELECT AUTHORITY_ID FROM SYS_ROLE_AUTHORITY WHERE INSTR(#{diyParams},ROLE_ID)>0
            )
            AND PARENT_ID IS NULL AND AUTHORITY_TYPE='2'
        </select>

    AUTHORITY_TYPE 权限类型: 1:普通权限   2:菜单 3:报表

    获取权限集合后,判断每个权限哪些是父节点

    for (int i = 0; i < tree.size(); i++) {
                    ZTreeComm ztree = (ZTreeComm) tree.get(i);
                    int total = sysUserService.isParent(ztree);
                    ztree.setIsParent(total != 0 ? Constants.IS_TRUE : Constants.IS_FALSE);
                    votree.add(ztree);
                }

    <!-- 查询查看是否为父节点 -->
        <select id="isParent" resultType="integer" parameterType="ZTreeComm">
            SELECT COUNT(*) FROM SYS_AUTHORITY WHERE PARENT_ID=#{id} AND AUTHORITY_TYPE='2'
        </select>

    并给每个ztree的isparent赋值并存入新的集合中去

    对新的集合进行排序

    //4、list排序。
                Collections.sort(votree, new Comparator<ZTreeComm>() {
                    public int compare(ZTreeComm arg0, ZTreeComm arg1) {
                        return arg0.getSortNo().compareTo(arg1.getSortNo());
                    }
                });
  • 相关阅读:
    949. Largest Time for Given Digits
    450. Delete Node in a BST
    983. Minimum Cost For Tickets
    16. 3Sum Closest java solutions
    73. Set Matrix Zeroes java solutions
    347. Top K Frequent Elements java solutions
    215. Kth Largest Element in an Array java solutions
    75. Sort Colors java solutions
    38. Count and Say java solutions
    371. Sum of Two Integers java solutions
  • 原文地址:https://www.cnblogs.com/ilooking/p/5541911.html
Copyright © 2011-2022 走看看