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