派生自 projectDept/qhighschool

EricsHu
2023-11-26 1da190e7f267bcd3501884f3aeaac7476850fec7
优化菜单查询
3个文件已修改
135 ■■■■ 已修改文件
src/main/java/com/qxueyou/scc/sys/model/SysMenu.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/model/SysMenu.java
@@ -1,30 +1,16 @@
package com.qxueyou.scc.sys.model;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.*;
import javax.persistence.*;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.*;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.CollectionId;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -121,10 +107,17 @@
    @OneToMany(mappedBy = "parent")
    @JsonIgnore
    private List<SysMenu> children;
    private List<SysMenu> children=new ArrayList<>();
    public int getOpenType() {
        return openType;
    @Transient
    private Set<SysMenu> childrenList = new HashSet<>();
    public Set<SysMenu> getChildrenList() {
        return childrenList;
    }
    public void setChildrenList(Set<SysMenu> childrenList) {
        this.childrenList = childrenList;
    }
    public void setOpenType(int openType) {
src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java
@@ -8,6 +8,7 @@
import java.util.List;
import java.util.Map;
import com.qxueyou.scc.user.model.UserReRoleUser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@@ -321,26 +322,60 @@
    @Override
    public Result getMenus(User user) {
        String hql = "select DISTINCT m.menuId as index ,m.name as title ,m.url as router ,  m.hover as hover , "
        String hql = "select DISTINCT m.menuId as index ,m.parentMenuId as parentMenuId ,m.level as level ,m.name as title ,m.url as router ,  m.hover as hover , "
                + " m.icon as icon ,m.parentMenuId as parentMenuId ,m.menuOrder as menuOrder from SysMenu m , UserReRoleUser u ,"
                + "SysPrivilege s where m.deleteFlag is false and u.deleteFlag is false and s.deleteFlag is false and "
                    + "u.userId =:userId and u.roleId = s.roleId  and s.menuId = m.menuId order by m.menuOrder ";
                + "u.userId =:userId and u.roleId = s.roleId   and s.menuId = m.menuId order by m.menuOrder ";
        List<Map<String, Object>> menuLst = findListWithMapByHql(hql,
                CollectionUtils.newObjectMap("userId", user.getUserId()));
        System.out.println(menuLst);
        for (Map<String, Object> map : menuLst) {
            map.put("children", CollectionUtils.newList());
        //初始化一级菜单
        List<Map<String, Object>> firstLevelMenu =new ArrayList<>();
        for (Map<String, Object> stringObjectMap : menuLst) {
            Integer level = Integer.parseInt(stringObjectMap.get("level").toString());
            if (level==0) {
                //获取一级菜单
                firstLevelMenu.add(stringObjectMap);
            }
        }
        // 临时列表,用于保存需要移除的元素的索引
        List<Map<String, Object>> elementsToRemove = new ArrayList<>();
        //遍历子集
        for (Map<String, Object> map : firstLevelMenu) {
            getChildrenList(map,menuLst,elementsToRemove);
        }
// 移除临时列表中的元素
        menuLst.removeAll(elementsToRemove);
            String hqlRole = "select min(u.type)   from UserRole u , UserReRoleUser r where u.deleteFlag is false and r.deleteFlag is false and r.userId =:userId and u.roleId =r.roleId";
            String maxRoleTypeStr = findUniqueByHql(hqlRole, CollectionUtils.newObjectMap("userId", user.getUserId()));
            if (StringUtils.isBlank(maxRoleTypeStr)) {
                return new Result(false, "该用户没有权限,登录失败");
            }
            Integer maxRoleType = Integer.valueOf(maxRoleTypeStr);
            return new Result(true, "success", CollectionUtils.newObjectMap("menuLst", menuLst, "userName", user.getName(),
                    "userId", user.getUserId(), "imgPath", user.getImgPath(), "roleType", maxRoleType));
        }
        String hqlRole = "select min(u.type)   from UserRole u , UserReRoleUser r where u.deleteFlag is false and r.deleteFlag is false and r.userId =:userId and u.roleId =r.roleId";
    /**
     * 用递归获取子菜单
     * @param sysMenu//一级菜单
     * @param menuLst //所有菜单
     * @param elementsToRemove //临时列表,用于保存需要移除的元素的索引
     * @return
     */
    public Map<String, Object> getChildrenList(Map<String, Object> sysMenu, List<Map<String, Object>> menuLst ,List<Map<String, Object>> elementsToRemove) {
            for (Map<String, Object>  sysMenuMap : menuLst) {
                String menuId = sysMenuMap.get("parentMenuId").toString();
                String parentMenuId = sysMenu.get("index").toString();
                if (parentMenuId.equals(menuId)) {
                    sysMenu.put("children",getChildrenList(sysMenuMap, menuLst, elementsToRemove));
                    elementsToRemove.add(sysMenuMap);
        String maxRoleTypeStr = findUniqueByHql(hqlRole, CollectionUtils.newObjectMap("userId", user.getUserId()));
        if (StringUtils.isBlank(maxRoleTypeStr)) {
            return new Result(false, "该用户没有权限,登录失败");
        }
        Integer maxRoleType = Integer.valueOf(maxRoleTypeStr);
        return new Result(true, "success", CollectionUtils.newObjectMap("menuLst", menuLst, "userName", user.getName(),
                "userId", user.getUserId(), "imgPath", user.getImgPath(), "roleType", maxRoleType));
                }
            }
        return sysMenu;
    }
}
src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java
@@ -1,5 +1,6 @@
package com.qxueyou.scc.user.service.impl;
import com.qxueyou.scc.admin.classes.model.ClsClass;
import com.qxueyou.scc.base.model.Result;
import com.qxueyou.scc.base.service.impl.CommonAppService;
import com.qxueyou.scc.base.util.ClientUtils;
@@ -17,6 +18,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * 角色
@@ -28,6 +30,7 @@
public class UserRoleService extends CommonAppService implements IUserRoleService {
    @Autowired
    UserRoleDAO dao;
    /**
     * 得到菜单
@@ -128,11 +131,47 @@
    @Override
    public Result queryRoleDetail(String roleId) {
        List<Map<String, Object>> findMenuLstById = dao.findMenuLstById(roleId);
        List<Map<String, Object>> findRoleMenuLstById = dao.findMenuLstById(roleId);
        UserRole userRole = read(UserRole.class, roleId);
///////////////////////////////////////////////////新增方法
         StringBuffer hql=new StringBuffer( "select m.name as name ,m.menuId as menuId  ,m.parentMenuId as parentMenuId ,m.level as level  from SysMenu m where deleteFlag is false ");
//获取所有菜单
        List<SysMenu> sysMenusAll = new ArrayList<>();
        List<Map<String, Object>> listWithMapByHql = findListWithMapByHql(hql.toString(), CollectionUtils.newObjectMap());
        //将map转化成SysMenu实体类
        for (Map<String, Object> stringObjectMap : listWithMapByHql) {
            SysMenu sysMenu = new SysMenu();
            sysMenu.setMenuId(stringObjectMap.get("menuId").toString());
            sysMenu.setName(stringObjectMap.get("name").toString());
            sysMenu.setParentMenuId(stringObjectMap.get("parentMenuId").toString());
            sysMenu.setLevel(Integer.parseInt(stringObjectMap.get("level").toString()));
            sysMenusAll.add(sysMenu);
        }
        //获取一级菜单
        List<SysMenu> firstMenuList = sysMenusAll.stream().filter
                //过滤出一级菜单
                        (s -> s.getLevel()==0)
                // 返回list集合形式
                .collect(Collectors.toList());
        // 遍历一级菜单,构造菜单树
        for (SysMenu menu : firstMenuList) {
            getChildrenList(menu, sysMenusAll);
        }
        ///////////////////////////////////////////////////新增方法
        return new Result(true, "success",
                CollectionUtils.newObjectMap("roleName", userRole.getName(), "menuLst", findMenuLstById));
                CollectionUtils.newObjectMap("roleName", userRole.getName(), "menuLstAll", firstMenuList,"roleMenuLstById",findRoleMenuLstById));
    }
    public SysMenu getChildrenList(SysMenu sysMenu, List<SysMenu>  sysMenuList ) {
        for (SysMenu menu : sysMenuList) {
            if (menu.getParentMenuId().equals(sysMenu.getMenuId())) {
                sysMenu.getChildrenList().add(getChildrenList(menu, sysMenuList));
            }
        }
        return sysMenu;
    }
    @Override