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 |   59 +++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 47 insertions(+), 12 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 cb382c1..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;
 
@@ -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;
 	}
 }

--
Gitblit v1.8.0