rosewiper 2024-01-25
선거문자 20건 대량 등록 오류 수정
@4c280d3bf07c05138c5e28d134efa95f8492e8fe
src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
--- src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
+++ src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
@@ -69,7 +69,56 @@
 				
 			}
 			
-			resultCnt = mjonCandidateDAO.insertCandidateTWCallToData(mjonCandidateTWVO);
+			int msgListCnt = mjonCandidateTWVO.size();
+			
+			if(msgListCnt > 30000) {
+				
+				List<MjonCandidateTWVO> mjonCandidateTwVO = new ArrayList<MjonCandidateTWVO>();
+	    		int maxRow = 0;
+	    		for(MjonCandidateTWVO tmpVO : mjonCandidateTWVO) {
+	    			
+	    			MjonCandidateTWVO tmpCandidateTwVO = new MjonCandidateTWVO();
+	    			
+	    			tmpCandidateTwVO.setMberId(tmpVO.getMberId());
+	    			tmpCandidateTwVO.setCallTo(tmpVO.getCallTo());
+	    			tmpCandidateTwVO.setFrstRegisterId(tmpVO.getMberId());
+	    			tmpCandidateTwVO.setLastUpdusrId(tmpVO.getMberId());
+	    			tmpCandidateTwVO.setCallSeq(tmpVO.getCallSeq());
+	    			
+	    			mjonCandidateTwVO.add(tmpCandidateTwVO);
+	    			
+	    			/*
+	    			 * 2024.01.25 우영두 변경
+	    			 * 10000건씩 나눠서 디비에 입력해주도록 처리함
+	    			 * 10만건 이상을 한번에 쿼리로 입력하면 socket 용량 초과로 디비에서 처리를 못하는 부분이 있어서 변경함.
+	    			 * 
+	    			 * */
+	    			if(maxRow == 10000) {
+	    				
+	    				int resultTWCnt = mjonCandidateDAO.insertCandidateTWCallToData(mjonCandidateTwVO);
+	    				
+	    				resultCnt += resultTWCnt;
+	    				maxRow = 0;
+	    				mjonCandidateTwVO.clear();
+	    				
+	    			}else {
+	    				
+	    				maxRow++;
+	    				
+	    			}
+	    			
+	    		}
+				
+				int resultLastCnt = mjonCandidateDAO.insertCandidateTWCallToData(mjonCandidateTwVO);
+				
+				resultCnt += resultLastCnt;
+				
+			}else {
+				
+				resultCnt = mjonCandidateDAO.insertCandidateTWCallToData(mjonCandidateTWVO);
+				
+			}
+			
 			
 		} catch (Exception e) {
 			System.out.println("insertCandidateTWCallToData Service Imple Error!!! " + e);
src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java
--- src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java
+++ src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java
@@ -11,6 +11,7 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -635,28 +636,37 @@
     	}
     	try {
 			
+    		/*
+    		 * 2024.01.25 우영두 성능 개선
+    		 * 데이터수가 10만건이 넘는 상황일 경우 중복제거 및 데이터 처리 Loop 문 최소화
+    		 * 
+    		 * */
     		List<String> callToList = new ArrayList<String>();
-    		int totRowDataCnt = 0;
+    		int totRowDataCnt = mjonCandidateTWVO.getCallToArr().length;
     		
-    		for(String callTo : mjonCandidateTWVO.getCallToArr()) {
+    		/*for(String callTo : mjonCandidateTWVO.getCallToArr()) {
     			
     			callToList.add(callTo);
     			totRowDataCnt++;
     			
-    		}
+    		}*/
+    		
+    		//전달받은 수신목록 중복 제거
+    		callToList = Arrays.asList(mjonCandidateTWVO.getCallToArr());
+    		callToList = callToList.stream().distinct().collect(Collectors.toList());
     		
     		//수신자 목록 중복 체크 및 디비화 처리
-    		List<String> dupCallToList = MJUtil.getDuplicateList(callToList);
+    		//List<String> dupCallToList = MJUtil.getDuplicateList(callToList);
     		
-    		String dupCallCnt = Integer.toString(totRowDataCnt - dupCallToList.size());
-    		
+    		String dupCallCnt = Integer.toString(totRowDataCnt - callToList.size());
+    		//System.out.println("++++++++++++++++++ dupCallCnt ::: "+dupCallCnt);
     		//입력되어있는 데이터의 마지막 순번(call_seq)을 조회해 온다.
     		int maxCallSeq = mjonCandidateService.selectCandidateTWMaxCallSeq(userId);
     		maxCallSeq += 1;//마지막 순번에 1을 더해서 다음 순번을 지정해준다.
     		
     		List<MjonCandidateTWVO> mjonCandidateTwVO = new ArrayList<MjonCandidateTWVO>();
     		
-    		for(String callTo : dupCallToList) {
+    		for(String callTo : callToList) {
     			
     			MjonCandidateTWVO tmpCandidateTwVO = new MjonCandidateTWVO();
     			
src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp
@@ -283,8 +283,9 @@
 function addTWCallToInfo(){
 	
 	var callSeq = $("#callSeq").val();
-	var sendData =  $(document.callToForm).serializeArray();
-	$("#twCallToList").load("/web/mjon/msgcampain/selectMsgTWCallToListAjax.do", sendData ,function(response, status, xhr){
+	var pageIndex = $("#callToForm #pageIndex").val();
+	//var sendData =  $(document.callToForm).serializeArray();
+	$("#twCallToList").load("/web/mjon/msgcampain/selectMsgTWCallToListAjax.do", {"callSeq":callSeq, "pageIndex":pageIndex} ,function(response, status, xhr){
 		
 		$(document).ready(function () {
 			$(".receipt_number_table_wrap .tbody_ul").selectable({
@@ -2639,7 +2640,6 @@
 		}
 		
 		//선택한 데이터 받는사람 리스트에 추가해 주기
-		//addPhoneInfo(tableData);
 		form.callToArr.value = callToArr;
 		var data = new FormData(form);
 		var url = "/web/mjon/msgcampain/insertMyAddrTWCallToAjax.do";
@@ -2676,10 +2676,9 @@
 							alert("추가 주소록 리스트 중 중복 연락처 " + dupCallCnt + "건은 제외되었습니다.");
 						}
 						
-						
 						if(Number(callSeq) > 0){
 							$("#callSeq").val(callSeq);
-							
+							$("#callToForm #pageIndex").val("1");
 							//추가된 수신목록 20건 불러오기
 							addTWCallToInfo();
 						}
Add a comment
List