From 74e23201ccdddc2297fea1785e3d7335a9df39f0 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Mon, 16 Dec 2024 14:26:48 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AC=B8=EC=9E=90=EC=A0=84=EC=86=A1=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../let/mjo/addr/web/AddrGroupController.java | 1 + .../msgdata/web/MjonMsgDataController.java | 39 ++++-- .../itn/let/schdlr/service/SchedulerUtil.java | 4 + .../jsp/web/fax/addr/FaxAddrGroupListAjax.jsp | 2 +- .../WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp | 10 +- .../jsp/web/msgdata/MsgDataSMLView.jsp | 115 +++++++++--------- .../web/msgdata/addr/MsgAddrGroupListAjax.jsp | 10 +- .../msgdata/include/msgDataIncludeExcel.jsp | 38 +++--- src/main/webapp/js/MJUtill.js | 68 ++++++++++- src/main/webapp/js/web/addr/cmn.js | 1 + 10 files changed, 195 insertions(+), 93 deletions(-) diff --git a/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java b/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java index e3d0a63c..d024024b 100644 --- a/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java +++ b/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java @@ -484,6 +484,7 @@ public class AddrGroupController { msg = e.getMessage(); } + System.out.println("addrTotCnt : "+ addrTotCnt); modelAndView.addObject("isSuccess", isSuccess); modelAndView.addObject("msg", msg); modelAndView.addObject("addrTotCnt", addrTotCnt); diff --git a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java index e8e587af..a454c346 100644 --- a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java +++ b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java @@ -1717,22 +1717,41 @@ public class MjonMsgDataController { addrGroupVO.setSiteId("web"); List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO); - - /* - * JSPark 2023.08.30 => Ajax 로 변경 - //회원별 주소록 전체 갯수 조회 - int addrTotalCount = addrService.selectAddrTotalCount(addrVO); - - addrVO.setType("bookmark"); + + addrVO.setType("bookmark"); List addrBookmarkList = addrService.selectAddrBasicGrpList(addrVO); addrVO.setType("noGrp"); List addrNoGrpList = addrService.selectAddrBasicGrpList(addrVO); + int totalGrpCount = addrGroupList.stream() + .mapToInt(group -> { + String grpCountStr = group.getGrpCount(); + if (grpCountStr != null && !grpCountStr.isEmpty()) { + try { + return Integer.parseInt(grpCountStr); + } catch (NumberFormatException e) { + // 파싱에 실패한 경우 0을 반환하거나 예외 처리를 합니다. + return 0; + } + } else { + return 0; + } + }) + .sum(); + + // 결과 출력 + + System.out.println("totalGrpCount :: "+ totalGrpCount); + + int addrTotalCount = (addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0) + + (addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0) + + totalGrpCount + ; + model.addAttribute("addrTotalCount", addrTotalCount); - model.addAttribute("addrBookmarkList", addrBookmarkList); - model.addAttribute("addrNoGrpList", addrNoGrpList); - */ + model.addAttribute("addrBookmarkCnt", addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0); + model.addAttribute("addrNoGrpCnt", addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0); model.addAttribute("addrGroupList", addrGroupList); diff --git a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java index dc2675e4..a5bda660 100644 --- a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java +++ b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java @@ -99,6 +99,10 @@ public class SchedulerUtil { // do something... try { System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>"); + System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>"); + System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>"); + System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>"); + System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>"); //문자 환불, 팩스 환불 diff --git a/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp index ae2f70c2..2548fe65 100644 --- a/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp @@ -599,7 +599,7 @@ function listAddrTransHistAjax(pageNo) { -

폴더 열림전체[/최대 500,000]

+

폴더 열림전체[/최대 1,000,000]

diff --git a/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp b/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp index 680fd8bd..ef463f53 100644 --- a/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp @@ -409,11 +409,11 @@ function setSenderList_advc(){ var updateData = batchData.map(row => { - row.addrGrpId = addrGrpIdInfo; - row.addrGrpNm = addrGrpNmInfo; - row.batchStart = start; - row.dataTotCount = dataTotCount; - return row; + row.addrGrpId = addrGrpIdInfo; + row.addrGrpNm = addrGrpNmInfo; + row.batchStart = start; + row.dataTotCount = dataTotCount; + return row; }); $.ajax({ diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp index 3ed49321..8fe018d1 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp @@ -1006,64 +1006,73 @@ $(document).ready(function (){ //받는사람 번호 버튼 클릭시 Tabulator에 데이터 넣어주기 $('.addCallToF').click(function(){ - var callToNum = $('#callTo').val(); - if (callToNum == null || callToNum == "") { + var textarea = $('#callTo'); + if (textarea.val() == null || textarea.val() == "") { alert("받는사람 번호를 입력해 주세요."); return false; } - const textarea = $('#callTo'); const numbers = textarea.val().split('\n') - .map(num => num.trim()) - .filter(num => num !== ""); + .map(num => removeDash(num.trim())) + .filter(num => num !== "") + .filter(num => isValidPhoneNumber(num)); // 유효한 번호만 필터링; + + console.log('numbers : ', numbers); + + const addrData = numbers + .map(number => { + if (!number) return null; // 빈 값은 제외 + return { + name: "", // name은 빈 문자열 + phone: removeDash(number), // 전화번호는 removeDash 처리 + rep1: "", // rep로 시작하는 값 모두 빈 문자열 + rep2: "", + rep3: "", + rep4: "", + }; + }) + .filter(data => data !== null); // null 제거 + + - var numLen = numbers.length; + + // 기존 tableL의 데이터를 가져옵니다. + var existingData = tableL.getData(); + var combinedData = existingData.concat(addrData); - if (!validateRowLimit(tableL.getDataCount(), numLen)) { + /** + * @ phone을 기준으로 중복 제거 및 갯수 계산 + * @ 결과 반환 + * return { + * uniqueArray, // 중복 제거된 배열 + * uniqueCount, // 중복 제거된 데이터 개수 + * duplicateArray // 중복된 데이터 배열 + * duplicateCount: duplicateArray.length // 중복된 데이터 개수 + * }; + */ + const result = removeDuplicatesAndCount(combinedData, 'phone'); + + + // 총 30만건이 넘으면 false + if (!validateRowLimit(result.count)) { return false; } + + // 합쳐진 데이터를 tableL에 설정합니다. + tableL.setData(result.uniqueArray); + // 중복데이터 건수 입력 + setRowDupCnt(result.duplicateArray.length); + + // 미리보기 버튼 활성화 + updateButtons(0); - - // 현재 테이블에 있는 데이터 가져오기 - const existingRows = tableL.getData(); - const existingNumbers = new Set(existingRows.map(row => row.phone.replace(/[^0-9]/g, ''))); // 숫자만 남겨서 중복 비교 - - let duplicateCount = 0; // 중복 번호 개수를 저장할 변수 - let invalidNumbers = []; // 유효하지 않은 번호를 저장할 배열 - - // 각 번호를 테이블에 추가 (중복 검사 및 포맷팅 포함) - numbers.forEach(number => { -// const formattedNumber = formatPhoneNumber(number); // 번호 표준화 - - const formattedNumber = formatPhoneNumber(number); // 번호 표준화 - const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김 - if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크 - if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사 - tableL.addRow({ phone: cleanedNumber }); // 하이픈 제거된 번호로 추가 - existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가 - } else { - invalidNumbers.push(number); // 유효하지 않은 번호를 배열에 추가 - } - } else { - duplicateCount++; // 중복 번호가 발견될 때마다 카운트를 증가 - } - }); - - // 중복 번호 개수를 #rowDupCnt 요소에 표시 - $("#rowDupCnt").text(duplicateCount); - var totRows = tableL.getRows().length; - updateTotCnt(totRows); - totalPriceSum(totRows); + updateTotCnt(totRows); //전체 데이터 갯수 구하기 + + totalPriceSum(totRows); - - // 유효하지 않은 번호가 있으면 alert로 표시 - console.log('invalidNumbers : ', invalidNumbers); - if (invalidNumbers.length > 0) { - alert('유효하지 않은 번호 형식: \n'+ invalidNumbers.join('\n')); - } // textarea 초기화 textarea.val(''); // jQuery 객체에서 값을 초기화할 때는 .val('') 사용 @@ -2925,11 +2934,12 @@ function addrToList(){ //주소록 불러오기에서 수신자 리스트 추가해 주기 function addrToList_advc(type){ -// var selectedData = tableAddr.getSelectedRows(); - var tableSize = tableAddr.getDataCount(); + var selectedData = tableAddr.getSelectedRows(); var tableData = []; - if(tableSize < 1){ + console.log() + + if(selectedData < 1){ alert("주소록을 선택해 주세요."); return false; @@ -2937,7 +2947,7 @@ function addrToList_advc(type){ }else{ // 선택한 Row 데이터 저장해주기 - if (!validateRowLimit(tableL.getDataCount(), tableAddr.getDataCount())) { + if (!validateRowLimit(tableL.getDataCount(), tableAddr.getSelectedRows())) { return false; } @@ -3418,15 +3428,6 @@ function getMjMsgSentListAll(pageNo) { }); } -function validateRowLimit(currentRows, newRows, limit = 300000) { - const totalRows = currentRows + newRows; - if (totalRows > limit) { - alert('안정적인 서비스 운영을 위해서 최대 '+limit+'건 이내로 분할 발송해 주시기 바랍니다.'); - return false; - } - return true; -} - diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/addr/MsgAddrGroupListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/addr/MsgAddrGroupListAjax.jsp index 866d82e9..93a33383 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgdata/addr/MsgAddrGroupListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/addr/MsgAddrGroupListAjax.jsp @@ -9,10 +9,10 @@ $(document).ready(function(){ // 주소록 그룹 카운트(전체) - getAddrGroupTotCnt(); +// getAddrGroupTotCnt(); //주소록 그룹 카운트(그룹미지정) - getAddrGroupNogrpCnt(); +// getAddrGroupNogrpCnt(); //주소록 그룹 카운트(자주보내는 번호) getAddrGroupBookmarkCnt(); @@ -96,19 +96,19 @@ $(".adr_cb_wrap2").click(function(){

- 폴더 닫힘전체[명] + 폴더 닫힘전체[명]

- 폴더 닫힘그룹미지정[명] + 폴더 닫힘그룹미지정[명]

- 폴더 닫힘자주보내는 번호[명] + 폴더 닫힘자주보내는 번호[명]

diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp index 87c12158..81c4faa4 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp @@ -282,23 +282,15 @@ $(document).ready(function(){ // tableExcel 그룹의 select 요소들을 확인 -// var isPhoneSelected = false; -// var isNameSelected = false; var columns = $tableExcel.getColumns(); var isAddrPhoneNoSelected = columns.some(column => column.getField() === 'addrPhoneNo'); if (!isAddrPhoneNoSelected) { -// isPhoneSelected = true; alert('휴대폰이 선택되지 않았습니다.'); return false; } - // 총 30만건이 넘으면 false - if (!validateRowLimit($tableExcel.getDataCount(), tableL.getDataCount())) { - return false; - } - var addrData = $tableExcel.getData().map((row, index) => ({ name: row.addrNm, @@ -309,17 +301,35 @@ $(document).ready(function(){ rep4: row.addrInfo4, })); - - - - - // 기존 tableL의 데이터를 가져옵니다. var existingData = tableL.getData(); // 기존 데이터와 새로운 데이터를 합칩니다. var combinedData = existingData.concat(addrData); + + + /** + * @ phone을 기준으로 중복 제거 및 갯수 계산 + * @ 결과 반환 + * return { + * uniqueArray, // 중복 제거된 배열 + * uniqueCount, // 중복 제거된 데이터 개수 + * duplicateArray, // 중복된 데이터 배열 + * duplicateCount: duplicateArray.length // 중복된 데이터 개수 + * }; + */ + const result = removeDuplicatesAndCount(combinedData, 'phone'); + + // 총 30만건이 넘으면 false + if (!validateRowLimit(result.count)) { + return false; + } + + // 합쳐진 데이터를 tableL에 설정합니다. - tableL.setData(combinedData); + tableL.setData(result.uniqueArray); + // 중복데이터 건수 입력 + setRowDupCnt(result.duplicateArray.length); + // 미리보기 버튼 활성화 updateButtons(0); diff --git a/src/main/webapp/js/MJUtill.js b/src/main/webapp/js/MJUtill.js index 9c63199b..36041494 100644 --- a/src/main/webapp/js/MJUtill.js +++ b/src/main/webapp/js/MJUtill.js @@ -973,4 +973,70 @@ function getTabulatorLAddrGrpCnt(){ return totAddrCnt; -} \ No newline at end of file +} + +/** +* @ phone을 기준으로 중복 제거 및 갯수 계산 +* @ 결과 반환 +* return { +* uniqueArray, // 중복 제거된 배열 +* uniqueCount, // 중복 제거된 데이터 개수 +* duplicateArray // 중복된 데이터 배열 +* duplicateCount: duplicateArray.length // 중복된 데이터 개수 +* }; +*/ +function removeDuplicatesAndCount(array, key) { + // 중복을 제거한 배열 생성 + const uniqueArray = array.filter((item, index, self) => + index === self.findIndex((t) => t[key] === item[key]) + ); + + // 중복된 데이터만 추출 + const duplicateArray = array.filter((item, index, self) => + index !== self.findIndex((t) => t[key] === item[key]) + ); + + // 결과 반환 + return { + uniqueArray, // 중복 제거된 배열 + uniqueCount: uniqueArray.length, // 중복 제거된 데이터 개수 + duplicateArray, // 중복된 데이터 배열 + duplicateCount: duplicateArray.length // 중복된 데이터 개수 + }; +} + +/* +function validateRowLimit(currentRows, newRows, limit = 300000) { + const totalRows = currentRows + newRows; + console.log('validateRowLimit totalRows : ', totalRows); + if (totalRows > limit) { + alert('안정적인 서비스 운영을 위해서 최대 '+limit+'건 이내로 분할 발송해 주시기 바랍니다.'); + return false; + } + return true; +}*/ + +function validateRowLimit(totalRows, limit = 300000) { + // 값과 타입 확인 + + // 숫자 변환 + const totalRowsNum = Number(totalRows); + const limitNum = Number(limit); + + // 변환 후 값 확인 + + // 비교 연산 결과 확인 + const isOverLimit = totalRowsNum > limitNum; + + // 조건 처리 + if (isOverLimit) { + alert('안정적인 서비스 운영을 위해서 최대 ' + limit + '건 이내로 분할 발송해 주시기 바랍니다.'); + return false; + } + return true; +} + +function setRowDupCnt(cnt){ + $('#rowDupCnt').text(cnt) +} + diff --git a/src/main/webapp/js/web/addr/cmn.js b/src/main/webapp/js/web/addr/cmn.js index 7cdafd21..1a7fc9b7 100644 --- a/src/main/webapp/js/web/addr/cmn.js +++ b/src/main/webapp/js/web/addr/cmn.js @@ -4,6 +4,7 @@ function isValidPhoneNumber(phone) { // 숫자만 추출 const numberOnly = phone.replace(/\D/g, ''); + console.log('numberOnly : ' ,numberOnly); // 유효한 형식 체크 return (