From b754eab9df01c9de55e768ebefb69ce1d51793a4 Mon Sep 17 00:00:00 2001 From: rosewiper Date: Wed, 24 Jan 2024 18:26:14 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=9A=94=EA=B8=88=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EB=82=B4=EC=97=AD=20>=20=EC=82=AC=EC=9A=A9=EB=82=B4=EC=97=AD?= =?UTF-8?q?=EC=84=9C=20=ED=8C=9D=EC=97=85=20=EA=B2=80=EC=83=89=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20=20-=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=EC=9D=BC=EC=9E=90=20=EB=B0=8F=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=EC=9D=BC=EC=9E=90=20=EA=B2=80=EC=83=89=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index f187073c..4cb676d1 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -3544,10 +3544,10 @@ AND B.RESERVE_C_YN = 'N' - AND = #startDate# ]]> + AND = DATE_FORMAT(#startDate#, '%Y-%m-%d') ]]> - AND + AND From 4c280d3bf07c05138c5e28d134efa95f8492e8fe Mon Sep 17 00:00:00 2001 From: rosewiper Date: Thu, 25 Jan 2024 15:50:52 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EC=84=A0=EA=B1=B0=EB=AC=B8=EC=9E=90=2020?= =?UTF-8?q?=EA=B1=B4=20=EB=8C=80=EB=9F=89=20=EB=93=B1=EB=A1=9D=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/MjonCandidateServiceImpl.java | 51 ++++++++++++++++++- .../web/MjonMsgCampainTWDataController.java | 24 ++++++--- .../web/msgcampain/tw/MsgTWDataSMLView.jsp | 9 ++-- 3 files changed, 71 insertions(+), 13 deletions(-) diff --git a/src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java b/src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java index 1fea6357..c494526f 100644 --- a/src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java @@ -69,7 +69,56 @@ public class MjonCandidateServiceImpl extends EgovAbstractServiceImpl implement } - resultCnt = mjonCandidateDAO.insertCandidateTWCallToData(mjonCandidateTWVO); + int msgListCnt = mjonCandidateTWVO.size(); + + if(msgListCnt > 30000) { + + List mjonCandidateTwVO = new ArrayList(); + 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); diff --git a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java index a6fccd40..f1041ed3 100644 --- a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java +++ b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java @@ -11,6 +11,7 @@ import java.util.Calendar; 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 @@ public class MjonMsgCampainTWDataController { } try { + /* + * 2024.01.25 우영두 성능 개선 + * 데이터수가 10만건이 넘는 상황일 경우 중복제거 및 데이터 처리 Loop 문 최소화 + * + * */ List callToList = new ArrayList(); - 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 dupCallToList = MJUtil.getDuplicateList(callToList); - - String dupCallCnt = Integer.toString(totRowDataCnt - dupCallToList.size()); + //List dupCallToList = MJUtil.getDuplicateList(callToList); + String dupCallCnt = Integer.toString(totRowDataCnt - callToList.size()); + //System.out.println("++++++++++++++++++ dupCallCnt ::: "+dupCallCnt); //입력되어있는 데이터의 마지막 순번(call_seq)을 조회해 온다. int maxCallSeq = mjonCandidateService.selectCandidateTWMaxCallSeq(userId); maxCallSeq += 1;//마지막 순번에 1을 더해서 다음 순번을 지정해준다. List mjonCandidateTwVO = new ArrayList(); - for(String callTo : dupCallToList) { + for(String callTo : callToList) { MjonCandidateTWVO tmpCandidateTwVO = new MjonCandidateTWVO(); diff --git a/src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp index 4bebe133..01ea61bc 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp @@ -283,8 +283,9 @@ $("#excelAdd").click(function(){ 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 @@ function addrToList(){ } //선택한 데이터 받는사람 리스트에 추가해 주기 - //addPhoneInfo(tableData); form.callToArr.value = callToArr; var data = new FormData(form); var url = "/web/mjon/msgcampain/insertMyAddrTWCallToAjax.do"; @@ -2676,10 +2676,9 @@ function addrToList(){ alert("추가 주소록 리스트 중 중복 연락처 " + dupCallCnt + "건은 제외되었습니다."); } - if(Number(callSeq) > 0){ $("#callSeq").val(callSeq); - + $("#callToForm #pageIndex").val("1"); //추가된 수신목록 20건 불러오기 addTWCallToInfo(); }