From 1da190e7f267bcd3501884f3aeaac7476850fec7 Mon Sep 17 00:00:00 2001 From: EricsHu <hrr145632> Date: 星期日, 26 十一月 2023 17:53:03 +0800 Subject: [PATCH] 优化菜单查询 --- src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java | 97 +++++++++++++++++++++++++++++++++--------------- 1 files changed, 66 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java index 8e6bba2..fa013af 100644 --- a/src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java +++ b/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; @@ -25,9 +26,9 @@ import com.qxueyou.scc.user.model.UserRole; /** - * 系统权限服务 + * 绯荤粺鏉冮檺鏈嶅姟 * - * @author 德虎 + * @author 寰疯檸 * */ @Service @@ -43,7 +44,7 @@ @Override public List<SysMenu> getPrivilegesMenus(String userId) { - // 获取当前用户角色ID, 过滤当前角色 + // 鑾峰彇褰撳墠鐢ㄦ埛瑙掕壊ID, 杩囨护褰撳墠瑙掕壊 String currRoleId = null; Short currOrgType = null; if (null != ClientUtils.getUserInfo() && StringUtils.isNotBlank(ClientUtils.getOrgId())) { @@ -52,13 +53,13 @@ List<SysMenu> firstLevelMenus = new ArrayList<SysMenu>(5); - // 获取该用户当前角色的所有菜单权限 + // 鑾峰彇璇ョ敤鎴峰綋鍓嶈鑹茬殑鎵�鏈夎彍鍗曟潈闄� List<SysMenu> allMenus = initAllMenus(currRoleId); - // 过滤出第一层及第二层菜单权限 + // 杩囨护鍑虹涓�灞傚強绗簩灞傝彍鍗曟潈闄� initFirstSecondMenu(allMenus, firstLevelMenus, currOrgType); - // 排序 + // 鎺掑簭 sortMenuList(firstLevelMenus); return firstLevelMenus; @@ -73,7 +74,7 @@ allMenus.addAll(this.find(hql, CollectionUtils.newList(currRoleId), SysMenu.class)); - // 如果是超管,菜单 + // 濡傛灉鏄秴绠★紝鑿滃崟 if ("6".equals(currRoleId) && allMenus.isEmpty()) { UserRole role = this.read(UserRole.class, "6"); allMenus = role.getMenus(); @@ -97,7 +98,7 @@ initSecondMenu(allMenus, secondMenus, childMenus, currOrgType); if (!secondMenus.isEmpty()) { - // 排序 + // 鎺掑簭 sortMenuList(secondMenus); menu.setChildren(secondMenus); firstLevelMenus.add(menu); @@ -118,7 +119,7 @@ if (allMenus.contains(m)) { - // 非高校过滤掉 + // 闈為珮鏍¤繃婊ゆ帀 if (currOrgType == null) { continue; } @@ -129,7 +130,7 @@ } /** - * 获取已授权按钮列表,默认已经编辑过按钮权限的用户 + * 鑾峰彇宸叉巿鏉冩寜閽垪琛�,榛樿宸茬粡缂栬緫杩囨寜閽潈闄愮殑鐢ㄦ埛 * * @param name * @return @@ -171,7 +172,7 @@ Integer order1 = (Integer) menu1.getMenuOrder(); Integer order2 = (Integer) menu2.getMenuOrder(); - // 升序 + // 鍗囧簭 return order1.compareTo(order2); } }); @@ -213,7 +214,7 @@ } /* - * 获取讲师直播关联的class + * 鑾峰彇璁插笀鐩存挱鍏宠仈鐨刢lass * */ @Override @@ -228,12 +229,12 @@ } /** - * 助理讲师班级列表 + * 鍔╃悊璁插笀鐝骇鍒楄〃 */ @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public List<ClsClass> getAssisTeacherClasses(String userId, String orgId) { - // 1、讲师助教 + // 1銆佽甯堝姪鏁� String hql = "select distinct cls from MediaVideoLive live,OrgAssistantTeacher teacher , ClsClass cls " + "where live.anchorId = teacher.orgTeacherId " + "and live.classId = cls.classId " + "and teacher.userId= ? " + "and teacher.orgId= ? " + "and live.deleteFlag is false " @@ -241,7 +242,7 @@ List<ClsClass> teacherList = find(hql, CollectionUtils.newList(userId, orgId), ClsClass.class); - // 2.班主任助教 + // 2.鐝富浠诲姪鏁� String hql2 = "select distinct cls from OrgAssistantTeacher teacher , ClsClass cls " + "where teacher.orgTeacherId=cls.classChargerId " + "and teacher.classId = cls.classId " + "and teacher.userId= ? " + "and teacher.orgId= ? " + "and teacher.deleteFlag is false " @@ -250,7 +251,7 @@ List<ClsClass> chargerList = find(hql2, CollectionUtils.newList(userId, orgId), ClsClass.class); teacherList.addAll(chargerList); - // 去重 + // 鍘婚噸 HashSet h = new HashSet(teacherList); teacherList.clear(); teacherList.addAll(h); @@ -259,7 +260,7 @@ } /** - * 新增list + * 鏂板list * * @param privileges * @return @@ -288,14 +289,14 @@ } /** - * 删除list + * 鍒犻櫎list * * @param privileges * @return */ public Result deletePrivileges(String[] deleteMenuIds, String roleId) { - // 修改为使用update + // 淇敼涓轰娇鐢╱pdate // bulkUpdateInLoop("update SysPrivilege set deleteFlag = true where roleId = '" // + roleId + "' and menuId = ?", deleteMenuIds ); String hql = " from SysPrivilege where menuId in (:menuIds) and deleteFlag is false and roleId = :roleId "; @@ -321,26 +322,60 @@ @Override public Result getMenus(User user) { - String hql = "select 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); + //鍒濆鍖栦竴绾ц彍鍗� + 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); - for (Map<String, Object> map : menuLst) { - map.put("children", CollectionUtils.newList()); + 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; } } -- Gitblit v1.8.0