itn 2023-08-30
주소록그룹 성능개선
@47f4edf866fa6468b03c0c5ad275761212031c98
src/main/java/itn/let/mjo/addr/service/AddrGroupService.java
--- src/main/java/itn/let/mjo/addr/service/AddrGroupService.java
+++ src/main/java/itn/let/mjo/addr/service/AddrGroupService.java
@@ -22,6 +22,9 @@
 	
 	public AddrGroupVO selectAddrGroupDetail(AddrGroupVO addrGroupVO) throws Exception;
 	
+	// 주소록 그룹 카운트 조회
+	public AddrGroupVO selectAddrGroupCnt(AddrGroupVO addrGroupVO) throws Exception;
+	
 	public String insertAddrGroup(AddrGroupVO addrGroupVO) throws Exception;
 
 	public int updateAddrGroup(AddrGroupVO addrGroupVO) throws Exception;
src/main/java/itn/let/mjo/addr/service/AddrGroupVO.java
--- src/main/java/itn/let/mjo/addr/service/AddrGroupVO.java
+++ src/main/java/itn/let/mjo/addr/service/AddrGroupVO.java
@@ -18,6 +18,28 @@
 	private String grpCount;			// 그룹에 소속된 주소록 갯수
 	private String mergeGrps;			// 합치기 그룹 id
 	
+	private int bookmarkCnt;
+	private int nogrpCnt;
+	private int addrTotCnt;
+	
+	public int getBookmarkCnt() {
+		return bookmarkCnt;
+	}
+	public void setBookmarkCnt(int bookmarkCnt) {
+		this.bookmarkCnt = bookmarkCnt;
+	}
+	public int getNogrpCnt() {
+		return nogrpCnt;
+	}
+	public void setNogrpCnt(int nogrpCnt) {
+		this.nogrpCnt = nogrpCnt;
+	}
+	public int getAddrTotCnt() {
+		return addrTotCnt;
+	}
+	public void setAddrTotCnt(int addrTotCnt) {
+		this.addrTotCnt = addrTotCnt;
+	}
 	public int getTotcnt() {
 		return totcnt;
 	}
src/main/java/itn/let/mjo/addr/service/impl/AddrGroupDAO.java
--- src/main/java/itn/let/mjo/addr/service/impl/AddrGroupDAO.java
+++ src/main/java/itn/let/mjo/addr/service/impl/AddrGroupDAO.java
@@ -44,7 +44,16 @@
 	public AddrGroupVO selectAddrGroupDetail(AddrGroupVO addrGroupVO) throws Exception {
 		return (AddrGroupVO) select("AddrGroupDAO.selectAddrGroupDetail", addrGroupVO);
 	}
-	
+
+	/**
+	 * 주소록 그룹 카운트 조회
+	 * @param addrGroupVO
+	 * @return
+	 * @throws Exception
+	 */
+	public AddrGroupVO selectAddrGroupCnt(AddrGroupVO addrGroupVO) throws Exception {
+		return (AddrGroupVO) select("AddrGroupDAO.selectAddrGroupCnt", addrGroupVO);
+	}		
 
 	/**
 	 * 주소록 그룹 등록
src/main/java/itn/let/mjo/addr/service/impl/AddrGroupServiceImpl.java
--- src/main/java/itn/let/mjo/addr/service/impl/AddrGroupServiceImpl.java
+++ src/main/java/itn/let/mjo/addr/service/impl/AddrGroupServiceImpl.java
@@ -46,6 +46,11 @@
 		return addrGroupDAO.selectAddrGroupDetail(addrGroupVO);
 	}
 	
+	// 주소록 그룹 카운트 조회
+	public AddrGroupVO selectAddrGroupCnt(AddrGroupVO addrGroupVO) throws Exception {
+		return addrGroupDAO.selectAddrGroupCnt(addrGroupVO);
+	}
+	
 	public String insertAddrGroup(AddrGroupVO addrGroupVO) throws Exception {
 		int orderNum = addrGroupDAO.selectMaxOrderNumber(addrGroupVO);
 		addrGroupVO.setGrpOrder(orderNum);
src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
--- src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
+++ src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
@@ -181,10 +181,12 @@
 			addrGroupVO.setSearchSortCnd("grpOrder");
 			addrGroupVO.setSearchSortOrd("desc");
 		}
-		
+
 		addrGroupVO.setSiteId("web");
 		List<AddrGroupVO> addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO);
-		
+
+		/*
+		 * JSPark 2023.08.30 => Ajax 로 변경		
 		//회원별 주소록 전체 갯수 조회
 		int addrTotalCount = addrService.selectAddrTotalCount(addrVO);
 		
@@ -194,12 +196,12 @@
 		addrVO.setType("noGrp");
 		List<AddrVO> addrNoGrpList = addrService.selectAddrBasicGrpList(addrVO);
 		
-		
-		
 		model.addAttribute("addrTotalCount", addrTotalCount);
-		model.addAttribute("addrGroupList", addrGroupList);
 	 	model.addAttribute("addrBookmarkList", addrBookmarkList);
 		model.addAttribute("addrNoGrpList", addrNoGrpList);
+		*/
+		
+		model.addAttribute("addrGroupList", addrGroupList);		
 		model.addAttribute("userId", userId);
 		
 		return "/web/addr/AddrGroupListAjax";
@@ -427,6 +429,54 @@
 		return "/web/addr/AddrGroupSelectAjax";
 	}
 
+	/**
+	 * 주소록 그룹 카운트 조회 Ajax
+	 * 
+	 * @param request
+	 * @param addrGroupVO
+	 * @param redirectAttributes
+	 * @param model
+	 * @return
+	 * @throws Exception
+	 */
+	@RequestMapping("/web/addr/selectAddrGroupCntAjax.do")
+	public ModelAndView selectAddrGroupCntAjax(HttpServletRequest request, 
+			@ModelAttribute("searchVO") AddrGroupVO addrGroupVO
+			, Model model) throws Exception {
+		
+		ModelAndView modelAndView = new ModelAndView();
+		modelAndView.setViewName("jsonView");
+		
+		boolean isSuccess = true;
+		String msg = "";
+		int bookmarkCnt = 0;
+		int nogrpCnt = 0;
+		int addrTotCnt = 0;
+		
+        try{		
+			LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+			addrGroupVO.setMberId(user.getId());
+			
+			addrGroupVO = addrGroupService.selectAddrGroupCnt(addrGroupVO);
+			if (addrGroupVO != null) {
+				bookmarkCnt = addrGroupVO.getBookmarkCnt();
+				nogrpCnt = addrGroupVO.getNogrpCnt();
+				addrTotCnt = addrGroupVO.getAddrTotCnt();
+			}
+		}
+		catch(Exception e) {
+			isSuccess = false;
+			msg = e.getMessage();
+		}	
+        
+		modelAndView.addObject("isSuccess", isSuccess);
+		modelAndView.addObject("msg", msg);
+		modelAndView.addObject("addrTotCnt", addrTotCnt);
+		modelAndView.addObject("nogrpCnt", nogrpCnt);
+		modelAndView.addObject("bookmarkCnt", bookmarkCnt);
+		
+		return modelAndView;
+	}	
 	
 	/**
 	 * 주소록 그룹 수정 로직
src/main/resources/egovframework/sqlmap/let/mjo/addr/AddrGroup_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/mjo/addr/AddrGroup_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/addr/AddrGroup_SQL_Mysql.xml
@@ -69,7 +69,38 @@
 		WHERE 1=1
 		AND a.ADDR_GRP_ID = #addrGrpId#
 	</select>
-	
+
+	<!-- 주소록 그룹 카운트 조회 -->
+	<select id="AddrGroupDAO.selectAddrGroupCnt" parameterClass="addrGroupVO" resultClass="addrGroupVO">
+		SELECT 
+			(
+				SELECT 
+					COUNT(0) 
+				FROM MJ_ADDR A 
+				WHERE A.MBER_ID = #mberId#
+					AND A.BOOKMARK = 'Y'
+					AND A.DELETE_YN = 'N'
+			) bookmarkCnt
+			, (
+				SELECT 
+					COUNT(0) 
+				FROM MJ_ADDR A 
+				WHERE A.MBER_ID = #mberId#
+					AND A.ADDR_GRP_ID = '0'
+					AND A.BOOKMARK = 'N'
+					AND A.DELETE_YN = 'N'
+			) nogrpCnt
+			, (
+				SELECT 
+					COUNT(0) 
+				FROM	MJ_ADDR A
+				WHERE A.MBER_ID = #mberId#
+					AND	(A.RECV_STATUS = 'Y' OR A.RECV_STATUS = 'S' OR A.RECV_STATUS IS NULL)
+					AND A.DELETE_YN = 'N'
+			) addrTotCnt
+		FROM DUAL
+	</select>
+		
 	<!-- 주소록 그룹 등록 -->
 	<insert id="AddrGroupDAO.insertAddrGroup" parameterClass="addrGroupVO">
 		INSERT INTO MJ_ADDR_GRP (
src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp
@@ -6,8 +6,38 @@
 
 <script src="/publish/js/content.js"></script>
 <script type="text/javascript">
-
 var successHtml="";
+
+$(document).ready(function(){
+	
+	// 주소록 그룹 카운트
+	getAddrGroupCnt();
+	
+}); 
+
+// 주소록 그룹 카운트
+function getAddrGroupCnt() {
+	$.ajax({
+        type: "POST",
+        url: "/web/addr/selectAddrGroupCntAjax.do",
+        data: {},
+        dataType:'json',
+        async: true,
+        success: function (data) {
+			if (data.isSuccess) {
+				$("#addrTotCnt").html(numberWithCommas(data.addrTotCnt));
+				$("#nogrpCnt").html(data.nogrpCnt);
+				$("#bookmarkCnt").html(data.bookmarkCnt);
+			} 
+			else {
+				//alert("Msg : " + data.msg);
+			}
+		},
+        error: function (e) { 
+        	//alert("ERROR : " + JSON.stringify(e)); 
+        }
+    });				
+}	
 
 // 주소록 그룹 리스트 띄우기
 function listAddrGroupAjax() {
@@ -599,7 +629,7 @@
 				<label for="groupAll" class="label">전체 선택</label>
 				<input type="checkbox" name="groupAll" id="groupAll" value="1" onClick="fnCheckAll();">
 			</div>
-			<p class="open" onclick="openThisGroup('');"><img src="/publish/images/content/open_folder.png" alt="폴더 열림">전체[<span class="c_002c9a fwMd"><fmt:formatNumber value="${addrTotalCount}" pattern="#,###"/></span>/최대 100,000]</p>
+			<p class="open" onclick="openThisGroup('');"><img src="/publish/images/content/open_folder.png" alt="폴더 열림">전체[<span class="c_002c9a fwMd" id="addrTotCnt"></span>/최대 100,000]</p>
 		</div>
 		<div class="adr1_btnWrap">
 			<div>
@@ -615,18 +645,16 @@
 		</div>
 		<div class="adr1_list">
 			<!-- 고정그룹 : 그룹미지정 -->
-			<c:set var="noGrpSize" value="${fn:length(addrNoGrpList)}" />
 			<div class="adr_cb_wrap list_fixed">
 				<label for="group1" class="label"></label>
 				<input type="checkbox" id="group1" disabled="disabled">
-				<p onclick="openThisGroup('noGrp');"><img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">그룹미지정[<span><fmt:formatNumber value="${noGrpSize}" pattern="#,###"/></span>명]</p>
+				<p onclick="openThisGroup('noGrp');"><img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">그룹미지정[<span id="nogrpCnt"></span>명]</p>
 			</div>
 			<!-- 고정그룹 : 자주보내는번호 -->
-			<c:set var="bookmarkSize" value="${fn:length(addrBookmarkList)}" />
 			<div class="adr_cb_wrap list_fixed">
 				<label for="group2" class="label"></label>
 				<input type="checkbox" id="group2" disabled="disabled">
-				<p onclick="openThisGroup('bookmark');"><img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">자주보내는 번호[<span><fmt:formatNumber value="${bookmarkSize}" pattern="#,###"/></span>명]
+				<p onclick="openThisGroup('bookmark');"><img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">자주보내는 번호[<span id="bookmarkCnt"></span>명]
 			</div>
 			<c:forEach var="addrGroupList" items="${addrGroupList}" varStatus="status">
 				<div class="adr_cb_wrap list_switch">
Add a comment
List