염성찬 염성찬 4 days ago
서브메뉴 경로 proFn 기준으로 조회(영문 메뉴 대응)
@be506f8f21ed4ca731726b1fb396a2092b3d55a2
src/main/java/kcc/web/MainController.java
--- src/main/java/kcc/web/MainController.java
+++ src/main/java/kcc/web/MainController.java
@@ -10,6 +10,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -725,54 +726,40 @@
 	    String depth1MenuNm = (String) paramMap.get("depth1MenuNm");
 	    String depth2MenuNm = (String) paramMap.get("depth2MenuNm");
 	    String depth3MenuNm = (String) paramMap.get("depth3MenuNm");
+	    String proFn = (String) paramMap.get("proFn");
 
 	    // 2. 전체 메뉴 조회
 	    List<MenuManageJTreeVO> menuResultList =
 	            menuCreateManageService.selectMenuListJtree(new MenuManageJTreeVO());
 
-	    // 3. depth1
-	    List<MenuManageJTreeVO> depth1List = menuResultList.stream()
-	            .filter(menu -> "1".equals(menu.getUpperMenuId()))
-	            .peek(menu -> menu.setUrl("/web/content.do?proFn=" + menu.getMenuNo()))
-	            .collect(Collectors.toList());
+	    // proFn(프로그램파일명)으로 현재 메뉴를 찾아 상위메뉴(1:사용자메뉴, 2:사용자메뉴(영문))까지 경로 구성
+	    List<MenuManageJTreeVO> menuPath = getSubMenuPath(menuResultList, proFn);
 
-	    MenuManageJTreeVO selectedDepth1 = depth1List.stream()
-	            .filter(menu -> depth1MenuNm != null &&
-	                    depth1MenuNm.equalsIgnoreCase(menu.getMenuNm()))
-	            .findFirst()
-	            .orElse(null);
+	    // 사용자메뉴 : 1, 사용자메뉴(영문) : 2
+	    final String rootMenuNo;
+	    if (!menuPath.isEmpty()) {
+	        rootMenuNo = menuPath.get(0).getUpperMenuId();
+	    } else {
+	        rootMenuNo = "ENG".equals(paramMap.get("menuUserType")) ? "2" : "1";
+	    }
+
+	    // 3. depth1
+	    List<MenuManageJTreeVO> depth1List = getSubMenuChildList(menuResultList, rootMenuNo);
+	    MenuManageJTreeVO selectedDepth1 = getSubMenuSelected(depth1List, menuPath, 0, depth1MenuNm);
 
 	    // 4. depth2
 	    List<MenuManageJTreeVO> depth2List = new ArrayList<>();
-
 	    if (selectedDepth1 != null) {
-	        depth2List = menuResultList.stream()
-	                .filter(menu -> selectedDepth1.getMenuNo().equals(menu.getUpperMenuId()))
-	                .peek(menu -> menu.setUrl("/web/content.do?proFn=" + menu.getMenuNo()))
-	                .collect(Collectors.toList());
+	        depth2List = getSubMenuChildList(menuResultList, selectedDepth1.getMenuNo());
 	    }
-
-	    MenuManageJTreeVO selectedDepth2 = depth2List.stream()
-	            .filter(menu -> depth2MenuNm != null &&
-	                    depth2MenuNm.equalsIgnoreCase(menu.getMenuNm()))
-	            .findFirst()
-	            .orElse(null);
+	    MenuManageJTreeVO selectedDepth2 = getSubMenuSelected(depth2List, menuPath, 1, depth2MenuNm);
 
 	    // 5. depth3
 	    List<MenuManageJTreeVO> depth3List = new ArrayList<>();
-
 	    if (selectedDepth2 != null) {
-	        depth3List = menuResultList.stream()
-	                .filter(menu -> selectedDepth2.getMenuNo().equals(menu.getUpperMenuId()))
-	                .peek(menu -> menu.setUrl("/web/content.do?proFn=" + menu.getMenuNo()))
-	                .collect(Collectors.toList());
+	        depth3List = getSubMenuChildList(menuResultList, selectedDepth2.getMenuNo());
 	    }
-
-	    MenuManageJTreeVO selectedDepth3 = depth3List.stream()
-	            .filter(menu -> depth3MenuNm != null &&
-	                    depth3MenuNm.equalsIgnoreCase(menu.getMenuNm()))
-	            .findFirst()
-	            .orElse(null);
+	    MenuManageJTreeVO selectedDepth3 = getSubMenuSelected(depth3List, menuPath, 2, depth3MenuNm);
 
 	    // 6. 결과
 	    Map<String, Object> resultMap = new HashMap<>();
@@ -786,7 +773,61 @@
 	    RestResponse restResponse = new RestResponse(HttpStatus.OK, "", resultMap);
 	    return ResponseEntity.ok(restResponse);
 	}
-	
+
+	// proFn 으로 찾은 메뉴의 경로(1depth ~ 현재메뉴), 못 찾으면 빈 리스트
+	private List<MenuManageJTreeVO> getSubMenuPath(List<MenuManageJTreeVO> menuResultList, String proFn) {
+	    LinkedList<MenuManageJTreeVO> menuPath = new LinkedList<>();
+	    if (proFn == null || proFn.isEmpty() || "dir".equals(proFn)) {
+	        return menuPath;
+	    }
+
+	    MenuManageJTreeVO current = menuResultList.stream()
+	            .filter(menu -> proFn.equals(menu.getProgrmFileNm()))
+	            .findFirst()
+	            .orElse(null);
+
+	    while (current != null && menuPath.size() < 10) {
+	        menuPath.addFirst(current);
+	        String upperMenuId = current.getUpperMenuId();
+	        if ("1".equals(upperMenuId) || "2".equals(upperMenuId)) {
+	            return menuPath;
+	        }
+	        current = menuResultList.stream()
+	                .filter(menu -> upperMenuId != null && upperMenuId.equals(menu.getMenuNo()))
+	                .findFirst()
+	                .orElse(null);
+	    }
+	    return new LinkedList<>();
+	}
+
+	private List<MenuManageJTreeVO> getSubMenuChildList(List<MenuManageJTreeVO> menuResultList, String upperMenuId) {
+	    return menuResultList.stream()
+	            .filter(menu -> upperMenuId.equals(menu.getUpperMenuId()))
+	            .peek(menu -> menu.setUrl("/web/content.do?proFn="
+	                    + (menu.getProgrmFileNm() == null || "dir".equals(menu.getProgrmFileNm())
+	                            ? menu.getMenuNo() : menu.getProgrmFileNm())))
+	            .collect(Collectors.toList());
+	}
+
+	// 경로가 있으면 메뉴번호로, 없으면 메뉴명으로 선택 메뉴를 찾는다
+	private MenuManageJTreeVO getSubMenuSelected(List<MenuManageJTreeVO> depthList, List<MenuManageJTreeVO> menuPath,
+	        int depthIdx, String menuNm) {
+	    if (!menuPath.isEmpty()) {
+	        if (menuPath.size() <= depthIdx) {
+	            return null;
+	        }
+	        String menuNo = menuPath.get(depthIdx).getMenuNo();
+	        return depthList.stream()
+	                .filter(menu -> menuNo.equals(menu.getMenuNo()))
+	                .findFirst()
+	                .orElse(null);
+	    }
+	    return depthList.stream()
+	            .filter(menu -> menuNm != null && menuNm.equalsIgnoreCase(menu.getMenuNm()))
+	            .findFirst()
+	            .orElse(null);
+	}
+
 
 	/**
 	 * 사용자 좌측 매뉴
src/main/webapp/publish/usr/script/submenu.js
--- src/main/webapp/publish/usr/script/submenu.js
+++ src/main/webapp/publish/usr/script/submenu.js
@@ -54,10 +54,15 @@
 	});
 	
 
+	var urlParams = new URLSearchParams(window.location.search);
+	var menuUserType = urlParams.get('menuUserType') === 'ENG' ? 'ENG' : 'KOR';
+
 	var sendData = {
 			"depth1MenuNm" :  title,
 			"depth2MenuNm" : subTitle,
-			"depth3MenuNm" : depth3Title
+			"depth3MenuNm" : depth3Title,
+			"menuUserType" : menuUserType,
+			"proFn" : urlParams.get('proFn') || ''
 		}
 	
 	console.log('title ::', title);
Add a comment
List