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());
                    }
                });
  • 相关阅读:
    为系统添加语言包
    除掉任务栏上的隐藏小按钮
    叠加多个无线网络
    在win7中通过手机投放媒体
    开关WI-Fi显示列表
    hibernate(二)对象的三种状态、一级缓存、多对一、inverse、cascade
    hibernate(一)helloworld、api、事务、配置文件、映射文件
    SQL Server2019安装
    Windows server2012搭建FTP服务器
    Gradle的使用教程
  • 原文地址:https://www.cnblogs.com/ilooking/p/5541911.html
Copyright © 2011-2022 走看看