메뉴 조회 쿼리 수정.

master
강석 최 2022-04-04 17:57:12 +09:00
parent 3026b45af8
commit a32565bd83
5 changed files with 99 additions and 68 deletions

View File

@ -81,12 +81,10 @@ public class CommonAop {
MenuVO menuVO = new MenuVO(); MenuVO menuVO = new MenuVO();
menuVO.setUserId(loginUserVO.getUserid()); menuVO.setUserId(loginUserVO.getUserid());
menuVO.setUserType(loginUserVO.getType()); menuVO.setUserType(loginUserVO.getType());
List<MenuVO> mainMenuList = menuService List<MenuVO> mainMenuList = menuService.selectMainMenuList(menuVO);
.selectMainMenuList(menuVO);
model.addAttribute("mainMenuList", mainMenuList); model.addAttribute("mainMenuList", mainMenuList);
List<MenuVO> topSubMenuList = menuService List<MenuVO> topSubMenuList = menuService.selectTopSubMenuList(menuVO);
.selectTopSubMenuList(menuVO);
model.addAttribute("topSubMenuList", topSubMenuList); model.addAttribute("topSubMenuList", topSubMenuList);
@ -114,12 +112,8 @@ public class CommonAop {
default: default:
if (req.getParameter("category") != null if (req.getParameter("category") != null
&& !req.getParameter("category") && !req.getParameter("category").equals(" ")) {
.equals(" ")) { qryCate = "category=" + req.getParameter("category");
qryCate = "category="
+ req.getParameter("category");
// url = url + "/" +
// req.getParameter("category");
} }
break; break;
} }
@ -130,19 +124,14 @@ public class CommonAop {
menu.put("boardId", boardId); menu.put("boardId", boardId);
menu.put("query", qryCate); menu.put("query", qryCate);
HashMap<String, Object> menuInfo = menuService HashMap<String, Object> menuInfo = menuService.getMenuInfo(menu);
.getMenuInfo(menu); menuVO.setId(Integer.parseInt(menuInfo.get("ID").toString()));
menuVO.setId(Integer
.parseInt(menuInfo.get("ID").toString()));
menuInfo.put("userId", loginUserVO.getUserid()); menuInfo.put("userId", loginUserVO.getUserid());
List<MenuVO> currAndHigherMenuList = menuService List<MenuVO> currAndHigherMenuList = menuService.selectListWithHigher(menuVO);
.selectListWithHigher(menuVO); model.addAttribute("currAndHigherMenuList", currAndHigherMenuList);
model.addAttribute("currAndHigherMenuList",
currAndHigherMenuList);
model.addAttribute("menu", menuInfo); model.addAttribute("menu", menuInfo);
model.addAttribute("subMenu", model.addAttribute("subMenu", menuService.getSubmenu(menuInfo));
menuService.getSubmenu(menuInfo));
addUserLog(req, menu); addUserLog(req, menu);
} }

View File

@ -34,16 +34,14 @@ public class MenuServiceImpl implements MenuService {
LoginUserVO loginUserVO = UserUtil.getMemberInfo(); LoginUserVO loginUserVO = UserUtil.getMemberInfo();
menuVO.setDepth(1); menuVO.setDepth(1);
menuVO.setMaxLevel(2);
menuVO.setMenuPosition(MenuPosition.TOP); menuVO.setMenuPosition(MenuPosition.TOP);
List<MenuVO> list = menuMapper.selectListWithConnectBy(menuVO); List<MenuVO> list = menuMapper.selectListWithConnectBy(menuVO);
List<MenuVO> menuList = new ArrayList<MenuVO>(); List<MenuVO> menuList = new ArrayList<MenuVO>();
MenuVO prevMenu = null; for (MenuVO currVO: list) {
for (int i = 0; i < list.size(); i++) {
MenuVO currVO = list.get(i);
if (currVO.getDepth() == 0) { if (currVO.getDepth() == 0) {
prevMenu = currVO; menuList.add(currVO);
menuList.add(prevMenu);
} else if (currVO.getDepth() == 1) { } else if (currVO.getDepth() == 1) {
// 견문 메뉴 권한 // 견문 메뉴 권한
@ -56,8 +54,13 @@ public class MenuServiceImpl implements MenuService {
if (loginUserVO.getAuthManage() <= 0 && !UserUtil.isAdmin() && "관리기능".equals(currVO.getName())) { if (loginUserVO.getAuthManage() <= 0 && !UserUtil.isAdmin() && "관리기능".equals(currVO.getName())) {
continue; continue;
} }
for(MenuVO menu: menuList){
prevMenu.getSubMenu().add(currVO); if(menu.getId()==currVO.getParent()){
menu.getSubMenu().add(currVO);
break;
}
}
} }
} }
@ -67,6 +70,7 @@ public class MenuServiceImpl implements MenuService {
@Override @Override
public List<MenuVO> selectTopSubMenuList(final MenuVO menuVO) { public List<MenuVO> selectTopSubMenuList(final MenuVO menuVO) {
menuVO.setDepth(0); menuVO.setDepth(0);
menuVO.setMaxLevel(1);
menuVO.setMenuPosition(MenuPosition.TOP_SUB); menuVO.setMenuPosition(MenuPosition.TOP_SUB);
return menuMapper.selectListWithConnectBy(menuVO); return menuMapper.selectListWithConnectBy(menuVO);
} }

View File

@ -85,7 +85,17 @@ public class MenuVO {
*/ */
private int userType; private int userType;
/** private int maxLevel;
public int getMaxLevel() {
return maxLevel;
}
public void setMaxLevel(int maxLevel) {
this.maxLevel = maxLevel;
}
/**
* @return the id * @return the id
*/ */
public final int getId() { public final int getId() {

View File

@ -33,36 +33,64 @@
</select> </select>
<select id="selectListWithConnectBy" parameterType="menuVO" resultMap="menuResult"> <select id="selectListWithConnectBy" parameterType="menuVO" resultMap="menuResult">
<![CDATA[ with recursive menu(
SELECT level,
LEVEL, ID,
M.ID, M.NAME, M.ENG_NAME, M.PARENT, M.DEPTH, NAME,
M.MENU_POSITION, M.VISIBLE, M.SUB_VISIBLE, M.ROLE_LEVEL, ENG_NAME,
COALESCE(M.URL_GROUP, (SELECT URL_GROUP FROM T_MENU WHERE ID = (SELECT MIN(ID) FROM T_MENU WHERE PARENT = M.ID))) AS URL_GROUP, PARENT,
COALESCE(M.URL, (SELECT URL FROM T_MENU WHERE ID = (SELECT MIN(ID) FROM T_MENU WHERE PARENT = M.ID))) AS URL, DEPTH,
COALESCE(M.URL_QUERY, (SELECT URL_QUERY FROM T_MENU WHERE ID = (SELECT MIN(ID) FROM T_MENU WHERE PARENT = M.ID))) AS URL_QUERY, MENU_POSITION,
COALESCE(M.BOARD_ID, (SELECT BOARD_ID FROM T_MENU WHERE ID = (SELECT MIN(ID) FROM T_MENU WHERE PARENT = M.ID))) AS BOARD_ID, VISIBLE,
COALESCE(M.WINDOW_TARGET, (SELECT WINDOW_TARGET FROM T_MENU WHERE ID = (SELECT MIN(ID) FROM T_MENU WHERE PARENT = M.ID))) AS WINDOW_TARGET SUB_VISIBLE,
FROM ROLE_LEVEL,
T_MENU M URL_GROUP,
WHERE URL,
M.VISIBLE = 'Y' URL_QUERY,
AND M.ROLE_LEVEL >= COALESCE((SELECT ROLE_LEVEL FROM T_SSO_AUTH_CODE AC, TAGENT A WHERE AC.CODE_ID = A.USEGRADE AND A.USERID = #{userId}), 17) BOARD_ID,
]]> WINDOW_TARGET
<if test="menuPosition != null and menuPosition != ''"><![CDATA[ ) as (
AND M.MENU_POSITION = #{menuPosition} select
]]></if> 1,
<if test="depth != null"><![CDATA[ M.ID, M.NAME, M.ENG_NAME, M.PARENT, M.DEPTH,
AND M.DEPTH <= #{depth} M.MENU_POSITION, M.VISIBLE, M.SUB_VISIBLE, M.ROLE_LEVEL,
]]></if> M.URL_GROUP,
<![CDATA[ M.URL,
START WITH M.URL_QUERY,
M.DEPTH = 0 M.BOARD_ID,
CONNECT BY PRIOR M.WINDOW_TARGET
M.ID = M.PARENT FROM T_MENU M
]]> WHERE M.VISIBLE = 'Y'
AND M.ROLE_LEVEL >= COALESCE((SELECT ROLE_LEVEL FROM T_SSO_AUTH_CODE AC, TAGENT A WHERE AC.CODE_ID = A.USEGRADE AND A.USERID = #{userId}), 17)
AND M.MENU_POSITION = #{menuPosition}
AND M.DEPTH = 0
union all
select
b.level+1,
M.ID, M.NAME, M.ENG_NAME, M.PARENT, M.DEPTH,
M.MENU_POSITION, M.VISIBLE, M.SUB_VISIBLE, M.ROLE_LEVEL,
COALESCE(M.URL_GROUP, c.URL_GROUP) AS URL_GROUP,
COALESCE(M.URL, c.URL) AS URL,
COALESCE(M.URL_QUERY, c.URL_QUERY) AS URL_QUERY,
COALESCE(M.BOARD_ID, c.BOARD_ID) AS BOARD_ID,
COALESCE(M.WINDOW_TARGET, c.WINDOW_TARGET) AS WINDOW_TARGET
FROM T_MENU M inner join menu b on M.parent = b.id
left outer join (select id, parent, url_group, url, url_query, board_id, window_target
from t_menu a
where a.id in (select min(id) id
from t_menu
group by parent )) c
on m.id = c.parent
where M.VISIBLE = 'Y'
AND M.ROLE_LEVEL >= COALESCE((SELECT ROLE_LEVEL FROM T_SSO_AUTH_CODE AC, TAGENT A WHERE AC.CODE_ID = A.USEGRADE AND A.USERID = #{userId}), 17)
AND M.MENU_POSITION = #{menuPosition}
)
select *
from menu
where level &lt;= ${maxLevel}
order by level, id
</select> </select>
<!---->
<select id="Menu.getMenuInfo" parameterType="map" resultType="map"> <select id="Menu.getMenuInfo" parameterType="map" resultType="map">
<![CDATA[ <![CDATA[
SELECT * FROM ( SELECT * FROM (

View File

@ -163,16 +163,16 @@
<a href="#" style="cursor:default;"><c:out value="${main.name}" /></a> <a href="#" style="cursor:default;"><c:out value="${main.name}" /></a>
<div class="submenu"> <div class="submenu">
<ul> <ul>
<c:choose> <c:choose>
<c:when test="${fn:length(main.subMenu) > 0}"> <c:when test="${fn:length(main.subMenu) > 0}">
<c:forEach items="${main.subMenu}" var="sub"> <c:forEach items="${main.subMenu}" var="sub">
<li><a href="<c:url value="${sub.uri}" />"><c:out value="${sub.name}" /></a></li> <li><a href="<c:url value="${sub.uri}" />"><c:out value="${sub.name}" /></a></li>
</c:forEach> </c:forEach>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<li><a href="<c:url value="${main.uri}" />"><c:out value="${main.name}" /></a></li> <li><a href="<c:url value="${main.uri}" />"><c:out value="${main.name}" /></a></li>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</ul> </ul>
</div> </div>
</li> </li>