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