| | |
| | | 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; |
| | | |
| | |
| | | @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); |
| | | 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; |
| | | } |
| | | } |