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/user/service/impl/UserRoleService.java | 43 +++++++++++++
src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java | 59 +++++++++++++++----
src/main/java/com/qxueyou/scc/sys/model/SysMenu.java | 33 ++++------
3 files changed, 101 insertions(+), 34 deletions(-)
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysMenu.java b/src/main/java/com/qxueyou/scc/sys/model/SysMenu.java
index 5957727..c9d387e 100644
--- a/src/main/java/com/qxueyou/scc/sys/model/SysMenu.java
+++ b/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) {
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;
}
}
diff --git a/src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java b/src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java
index 47ed924..b16bd6b 100644
--- a/src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java
+++ b/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());
+ //灏唌ap杞寲鎴怱ysMenu瀹炰綋绫�
+ 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
--
Gitblit v1.8.0