--- src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
+++ src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
... | ... | @@ -484,6 +484,7 @@ |
| 484 | 484 |
msg = e.getMessage(); |
| 485 | 485 |
} |
| 486 | 486 |
|
| 487 |
+ System.out.println("addrTotCnt : "+ addrTotCnt);
|
|
| 487 | 488 |
modelAndView.addObject("isSuccess", isSuccess);
|
| 488 | 489 |
modelAndView.addObject("msg", msg);
|
| 489 | 490 |
modelAndView.addObject("addrTotCnt", addrTotCnt);
|
--- src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
+++ src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
... | ... | @@ -1717,22 +1717,41 @@ |
| 1717 | 1717 |
|
| 1718 | 1718 |
addrGroupVO.setSiteId("web");
|
| 1719 | 1719 |
List<AddrGroupVO> addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO); |
| 1720 |
- |
|
| 1721 |
- /* |
|
| 1722 |
- * JSPark 2023.08.30 => Ajax 로 변경 |
|
| 1723 |
- //회원별 주소록 전체 갯수 조회 |
|
| 1724 |
- int addrTotalCount = addrService.selectAddrTotalCount(addrVO); |
|
| 1725 |
- |
|
| 1726 |
- addrVO.setType("bookmark");
|
|
| 1720 |
+ |
|
| 1721 |
+ addrVO.setType("bookmark");
|
|
| 1727 | 1722 |
List<AddrVO> addrBookmarkList = addrService.selectAddrBasicGrpList(addrVO); |
| 1728 | 1723 |
|
| 1729 | 1724 |
addrVO.setType("noGrp");
|
| 1730 | 1725 |
List<AddrVO> addrNoGrpList = addrService.selectAddrBasicGrpList(addrVO); |
| 1731 | 1726 |
|
| 1727 |
+ int totalGrpCount = addrGroupList.stream() |
|
| 1728 |
+ .mapToInt(group -> {
|
|
| 1729 |
+ String grpCountStr = group.getGrpCount(); |
|
| 1730 |
+ if (grpCountStr != null && !grpCountStr.isEmpty()) {
|
|
| 1731 |
+ try {
|
|
| 1732 |
+ return Integer.parseInt(grpCountStr); |
|
| 1733 |
+ } catch (NumberFormatException e) {
|
|
| 1734 |
+ // 파싱에 실패한 경우 0을 반환하거나 예외 처리를 합니다. |
|
| 1735 |
+ return 0; |
|
| 1736 |
+ } |
|
| 1737 |
+ } else {
|
|
| 1738 |
+ return 0; |
|
| 1739 |
+ } |
|
| 1740 |
+ }) |
|
| 1741 |
+ .sum(); |
|
| 1742 |
+ |
|
| 1743 |
+ // 결과 출력 |
|
| 1744 |
+ |
|
| 1745 |
+ System.out.println("totalGrpCount :: "+ totalGrpCount);
|
|
| 1746 |
+ |
|
| 1747 |
+ int addrTotalCount = (addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0) |
|
| 1748 |
+ + (addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0) |
|
| 1749 |
+ + totalGrpCount |
|
| 1750 |
+ ; |
|
| 1751 |
+ |
|
| 1732 | 1752 |
model.addAttribute("addrTotalCount", addrTotalCount);
|
| 1733 |
- model.addAttribute("addrBookmarkList", addrBookmarkList);
|
|
| 1734 |
- model.addAttribute("addrNoGrpList", addrNoGrpList);
|
|
| 1735 |
- */ |
|
| 1753 |
+ model.addAttribute("addrBookmarkCnt", addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0);
|
|
| 1754 |
+ model.addAttribute("addrNoGrpCnt", addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0);
|
|
| 1736 | 1755 |
|
| 1737 | 1756 |
model.addAttribute("addrGroupList", addrGroupList);
|
| 1738 | 1757 |
|
--- src/main/java/itn/let/schdlr/service/SchedulerUtil.java
+++ src/main/java/itn/let/schdlr/service/SchedulerUtil.java
... | ... | @@ -99,6 +99,10 @@ |
| 99 | 99 |
// do something... |
| 100 | 100 |
try {
|
| 101 | 101 |
System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
| 102 |
+ System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
|
| 103 |
+ System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
|
| 104 |
+ System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
|
| 105 |
+ System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
|
| 102 | 106 |
|
| 103 | 107 |
//문자 환불, 팩스 환불 |
| 104 | 108 |
|
--- src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp
... | ... | @@ -599,7 +599,7 @@ |
| 599 | 599 |
<label for="groupAll" class="label">전체 선택</label> |
| 600 | 600 |
<input type="checkbox" name="groupAll" id="groupAll" value="1" onClick="fnCheckAll();"> |
| 601 | 601 |
</div> |
| 602 |
- <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>/최대 500,000]</p>
|
|
| 602 |
+ <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>/최대 1,000,000]</p>
|
|
| 603 | 603 |
</div> |
| 604 | 604 |
<div class="adr1_btnWrap"> |
| 605 | 605 |
<div> |
--- src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp
... | ... | @@ -409,11 +409,11 @@ |
| 409 | 409 |
|
| 410 | 410 |
|
| 411 | 411 |
var updateData = batchData.map(row => {
|
| 412 |
- row.addrGrpId = addrGrpIdInfo; |
|
| 413 |
- row.addrGrpNm = addrGrpNmInfo; |
|
| 414 |
- row.batchStart = start; |
|
| 415 |
- row.dataTotCount = dataTotCount; |
|
| 416 |
- return row; |
|
| 412 |
+ row.addrGrpId = addrGrpIdInfo; |
|
| 413 |
+ row.addrGrpNm = addrGrpNmInfo; |
|
| 414 |
+ row.batchStart = start; |
|
| 415 |
+ row.dataTotCount = dataTotCount; |
|
| 416 |
+ return row; |
|
| 417 | 417 |
}); |
| 418 | 418 |
|
| 419 | 419 |
$.ajax({
|
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
... | ... | @@ -1006,64 +1006,73 @@ |
| 1006 | 1006 |
//받는사람 번호 버튼 클릭시 Tabulator에 데이터 넣어주기 |
| 1007 | 1007 |
$('.addCallToF').click(function(){
|
| 1008 | 1008 |
|
| 1009 |
- var callToNum = $('#callTo').val();
|
|
| 1010 |
- if (callToNum == null || callToNum == "") {
|
|
| 1009 |
+ var textarea = $('#callTo');
|
|
| 1010 |
+ if (textarea.val() == null || textarea.val() == "") {
|
|
| 1011 | 1011 |
alert("받는사람 번호를 입력해 주세요.");
|
| 1012 | 1012 |
return false; |
| 1013 | 1013 |
} |
| 1014 | 1014 |
|
| 1015 |
- const textarea = $('#callTo');
|
|
| 1016 | 1015 |
const numbers = textarea.val().split('\n')
|
| 1017 |
- .map(num => num.trim()) |
|
| 1018 |
- .filter(num => num !== ""); |
|
| 1016 |
+ .map(num => removeDash(num.trim())) |
|
| 1017 |
+ .filter(num => num !== "") |
|
| 1018 |
+ .filter(num => isValidPhoneNumber(num)); // 유효한 번호만 필터링; |
|
| 1019 |
+ |
|
| 1020 |
+ console.log('numbers : ', numbers);
|
|
| 1021 |
+ |
|
| 1022 |
+ const addrData = numbers |
|
| 1023 |
+ .map(number => {
|
|
| 1024 |
+ if (!number) return null; // 빈 값은 제외 |
|
| 1025 |
+ return {
|
|
| 1026 |
+ name: "", // name은 빈 문자열 |
|
| 1027 |
+ phone: removeDash(number), // 전화번호는 removeDash 처리 |
|
| 1028 |
+ rep1: "", // rep로 시작하는 값 모두 빈 문자열 |
|
| 1029 |
+ rep2: "", |
|
| 1030 |
+ rep3: "", |
|
| 1031 |
+ rep4: "", |
|
| 1032 |
+ }; |
|
| 1033 |
+ }) |
|
| 1034 |
+ .filter(data => data !== null); // null 제거 |
|
| 1035 |
+ |
|
| 1036 |
+ |
|
| 1019 | 1037 |
|
| 1020 | 1038 |
|
| 1021 |
- var numLen = numbers.length; |
|
| 1039 |
+ |
|
| 1040 |
+ // 기존 tableL의 데이터를 가져옵니다. |
|
| 1041 |
+ var existingData = tableL.getData(); |
|
| 1042 |
+ var combinedData = existingData.concat(addrData); |
|
| 1022 | 1043 |
|
| 1023 |
- if (!validateRowLimit(tableL.getDataCount(), numLen)) {
|
|
| 1044 |
+ /** |
|
| 1045 |
+ * @ phone을 기준으로 중복 제거 및 갯수 계산 |
|
| 1046 |
+ * @ 결과 반환 |
|
| 1047 |
+ * return {
|
|
| 1048 |
+ * uniqueArray, // 중복 제거된 배열 |
|
| 1049 |
+ * uniqueCount, // 중복 제거된 데이터 개수 |
|
| 1050 |
+ * duplicateArray // 중복된 데이터 배열 |
|
| 1051 |
+ * duplicateCount: duplicateArray.length // 중복된 데이터 개수 |
|
| 1052 |
+ * }; |
|
| 1053 |
+ */ |
|
| 1054 |
+ const result = removeDuplicatesAndCount(combinedData, 'phone'); |
|
| 1055 |
+ |
|
| 1056 |
+ |
|
| 1057 |
+ // 총 30만건이 넘으면 false |
|
| 1058 |
+ if (!validateRowLimit(result.count)) {
|
|
| 1024 | 1059 |
return false; |
| 1025 | 1060 |
} |
| 1061 |
+ |
|
| 1062 |
+ // 합쳐진 데이터를 tableL에 설정합니다. |
|
| 1063 |
+ tableL.setData(result.uniqueArray); |
|
| 1064 |
+ // 중복데이터 건수 입력 |
|
| 1065 |
+ setRowDupCnt(result.duplicateArray.length); |
|
| 1066 |
+ |
|
| 1067 |
+ // 미리보기 버튼 활성화 |
|
| 1068 |
+ updateButtons(0); |
|
| 1026 | 1069 |
|
| 1027 |
- |
|
| 1028 |
- // 현재 테이블에 있는 데이터 가져오기 |
|
| 1029 |
- const existingRows = tableL.getData(); |
|
| 1030 |
- const existingNumbers = new Set(existingRows.map(row => row.phone.replace(/[^0-9]/g, ''))); // 숫자만 남겨서 중복 비교 |
|
| 1031 |
- |
|
| 1032 |
- let duplicateCount = 0; // 중복 번호 개수를 저장할 변수 |
|
| 1033 |
- let invalidNumbers = []; // 유효하지 않은 번호를 저장할 배열 |
|
| 1034 |
- |
|
| 1035 |
- // 각 번호를 테이블에 추가 (중복 검사 및 포맷팅 포함) |
|
| 1036 |
- numbers.forEach(number => {
|
|
| 1037 |
-// const formattedNumber = formatPhoneNumber(number); // 번호 표준화 |
|
| 1038 |
- |
|
| 1039 |
- const formattedNumber = formatPhoneNumber(number); // 번호 표준화 |
|
| 1040 |
- const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김 |
|
| 1041 |
- if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크
|
|
| 1042 |
- if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사
|
|
| 1043 |
- tableL.addRow({ phone: cleanedNumber }); // 하이픈 제거된 번호로 추가
|
|
| 1044 |
- existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가 |
|
| 1045 |
- } else {
|
|
| 1046 |
- invalidNumbers.push(number); // 유효하지 않은 번호를 배열에 추가 |
|
| 1047 |
- } |
|
| 1048 |
- } else {
|
|
| 1049 |
- duplicateCount++; // 중복 번호가 발견될 때마다 카운트를 증가 |
|
| 1050 |
- } |
|
| 1051 |
- }); |
|
| 1052 |
- |
|
| 1053 |
- // 중복 번호 개수를 #rowDupCnt 요소에 표시 |
|
| 1054 |
- $("#rowDupCnt").text(duplicateCount);
|
|
| 1055 |
- |
|
| 1056 | 1070 |
var totRows = tableL.getRows().length; |
| 1057 |
- updateTotCnt(totRows); |
|
| 1058 |
- totalPriceSum(totRows); |
|
| 1071 |
+ updateTotCnt(totRows); //전체 데이터 갯수 구하기 |
|
| 1059 | 1072 |
|
| 1073 |
+ |
|
| 1074 |
+ totalPriceSum(totRows); |
|
| 1060 | 1075 |
|
| 1061 |
- |
|
| 1062 |
- // 유효하지 않은 번호가 있으면 alert로 표시 |
|
| 1063 |
- console.log('invalidNumbers : ', invalidNumbers);
|
|
| 1064 |
- if (invalidNumbers.length > 0) {
|
|
| 1065 |
- alert('유효하지 않은 번호 형식: \n'+ invalidNumbers.join('\n'));
|
|
| 1066 |
- } |
|
| 1067 | 1076 |
// textarea 초기화 |
| 1068 | 1077 |
textarea.val(''); // jQuery 객체에서 값을 초기화할 때는 .val('') 사용
|
| 1069 | 1078 |
|
... | ... | @@ -2925,11 +2934,12 @@ |
| 2925 | 2934 |
|
| 2926 | 2935 |
//주소록 불러오기에서 수신자 리스트 추가해 주기 |
| 2927 | 2936 |
function addrToList_advc(type){
|
| 2928 |
-// var selectedData = tableAddr.getSelectedRows(); |
|
| 2929 |
- var tableSize = tableAddr.getDataCount(); |
|
| 2937 |
+ var selectedData = tableAddr.getSelectedRows(); |
|
| 2930 | 2938 |
var tableData = []; |
| 2931 | 2939 |
|
| 2932 |
- if(tableSize < 1){
|
|
| 2940 |
+ console.log() |
|
| 2941 |
+ |
|
| 2942 |
+ if(selectedData < 1){
|
|
| 2933 | 2943 |
|
| 2934 | 2944 |
alert("주소록을 선택해 주세요.");
|
| 2935 | 2945 |
return false; |
... | ... | @@ -2937,7 +2947,7 @@ |
| 2937 | 2947 |
}else{ // 선택한 Row 데이터 저장해주기
|
| 2938 | 2948 |
|
| 2939 | 2949 |
|
| 2940 |
- if (!validateRowLimit(tableL.getDataCount(), tableAddr.getDataCount())) {
|
|
| 2950 |
+ if (!validateRowLimit(tableL.getDataCount(), tableAddr.getSelectedRows())) {
|
|
| 2941 | 2951 |
return false; |
| 2942 | 2952 |
} |
| 2943 | 2953 |
|
... | ... | @@ -3416,15 +3426,6 @@ |
| 3416 | 3426 |
$("#mjMsgSentListAllLoad").load("/web/mjon/msgdata/selectMjMsgSentListAjax.do", sendData ,function(response, status, xhr){
|
| 3417 | 3427 |
|
| 3418 | 3428 |
}); |
| 3419 |
-} |
|
| 3420 |
- |
|
| 3421 |
-function validateRowLimit(currentRows, newRows, limit = 300000) {
|
|
| 3422 |
- const totalRows = currentRows + newRows; |
|
| 3423 |
- if (totalRows > limit) {
|
|
| 3424 |
- alert('안정적인 서비스 운영을 위해서 최대 '+limit+'건 이내로 분할 발송해 주시기 바랍니다.');
|
|
| 3425 |
- return false; |
|
| 3426 |
- } |
|
| 3427 |
- return true; |
|
| 3428 | 3429 |
} |
| 3429 | 3430 |
|
| 3430 | 3431 |
|
--- src/main/webapp/WEB-INF/jsp/web/msgdata/addr/MsgAddrGroupListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/addr/MsgAddrGroupListAjax.jsp
... | ... | @@ -9,10 +9,10 @@ |
| 9 | 9 |
$(document).ready(function(){
|
| 10 | 10 |
|
| 11 | 11 |
// 주소록 그룹 카운트(전체) |
| 12 |
- getAddrGroupTotCnt(); |
|
| 12 |
+// getAddrGroupTotCnt(); |
|
| 13 | 13 |
|
| 14 | 14 |
//주소록 그룹 카운트(그룹미지정) |
| 15 |
- getAddrGroupNogrpCnt(); |
|
| 15 |
+// getAddrGroupNogrpCnt(); |
|
| 16 | 16 |
|
| 17 | 17 |
//주소록 그룹 카운트(자주보내는 번호) |
| 18 | 18 |
getAddrGroupBookmarkCnt(); |
... | ... | @@ -96,19 +96,19 @@ |
| 96 | 96 |
<div class="adr_pop_list"> |
| 97 | 97 |
<div class="adr_cb_wrap2"> |
| 98 | 98 |
<p onClick="javascript:fnSelectAddrList('all','',this); return false;">
|
| 99 |
- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">전체[<span id="addrTotCnt"></span>명] |
|
| 99 |
+ <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">전체[<span id="addrTotCnt"><fmt:formatNumber value="${addrTotalCount}" pattern="#,###"/></span>명]
|
|
| 100 | 100 |
</p> |
| 101 | 101 |
</div> |
| 102 | 102 |
|
| 103 | 103 |
<div class="adr_cb_wrap2"> |
| 104 | 104 |
<p onClick="javascript:fnSelectAddrList('none','',this); return false;">
|
| 105 |
- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">그룹미지정[<span id="nogrpCnt"></span>명] |
|
| 105 |
+ <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">그룹미지정[<span id="nogrpCnt"><fmt:formatNumber value="${addrNoGrpCnt}" pattern="#,###"/></span>명]
|
|
| 106 | 106 |
</p> |
| 107 | 107 |
</div> |
| 108 | 108 |
|
| 109 | 109 |
<div class="adr_cb_wrap2"> |
| 110 | 110 |
<p onClick="javascript:fnSelectAddrList('book','',this); return false;">
|
| 111 |
- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">자주보내는 번호[<span id="bookmarkCnt"></span>명] |
|
| 111 |
+ <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">자주보내는 번호[<span id="bookmarkCnt"><fmt:formatNumber value="${addrBookmarkCnt}" pattern="#,###"/></span>명]
|
|
| 112 | 112 |
</p> |
| 113 | 113 |
</div> |
| 114 | 114 |
|
--- src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
... | ... | @@ -282,23 +282,15 @@ |
| 282 | 282 |
|
| 283 | 283 |
|
| 284 | 284 |
// tableExcel 그룹의 select 요소들을 확인 |
| 285 |
-// var isPhoneSelected = false; |
|
| 286 |
-// var isNameSelected = false; |
|
| 287 | 285 |
var columns = $tableExcel.getColumns(); |
| 288 | 286 |
var isAddrPhoneNoSelected = columns.some(column => column.getField() === 'addrPhoneNo'); |
| 289 | 287 |
|
| 290 | 288 |
if (!isAddrPhoneNoSelected) {
|
| 291 |
-// isPhoneSelected = true; |
|
| 292 | 289 |
alert('휴대폰이 선택되지 않았습니다.');
|
| 293 | 290 |
return false; |
| 294 | 291 |
|
| 295 | 292 |
} |
| 296 | 293 |
|
| 297 |
- // 총 30만건이 넘으면 false |
|
| 298 |
- if (!validateRowLimit($tableExcel.getDataCount(), tableL.getDataCount())) {
|
|
| 299 |
- return false; |
|
| 300 |
- } |
|
| 301 |
- |
|
| 302 | 294 |
|
| 303 | 295 |
var addrData = $tableExcel.getData().map((row, index) => ({
|
| 304 | 296 |
name: row.addrNm, |
... | ... | @@ -309,17 +301,35 @@ |
| 309 | 301 |
rep4: row.addrInfo4, |
| 310 | 302 |
})); |
| 311 | 303 |
|
| 312 |
- |
|
| 313 |
- |
|
| 314 |
- |
|
| 315 |
- |
|
| 316 |
- |
|
| 317 | 304 |
// 기존 tableL의 데이터를 가져옵니다. |
| 318 | 305 |
var existingData = tableL.getData(); |
| 319 | 306 |
// 기존 데이터와 새로운 데이터를 합칩니다. |
| 320 | 307 |
var combinedData = existingData.concat(addrData); |
| 308 |
+ |
|
| 309 |
+ |
|
| 310 |
+ /** |
|
| 311 |
+ * @ phone을 기준으로 중복 제거 및 갯수 계산 |
|
| 312 |
+ * @ 결과 반환 |
|
| 313 |
+ * return {
|
|
| 314 |
+ * uniqueArray, // 중복 제거된 배열 |
|
| 315 |
+ * uniqueCount, // 중복 제거된 데이터 개수 |
|
| 316 |
+ * duplicateArray, // 중복된 데이터 배열 |
|
| 317 |
+ * duplicateCount: duplicateArray.length // 중복된 데이터 개수 |
|
| 318 |
+ * }; |
|
| 319 |
+ */ |
|
| 320 |
+ const result = removeDuplicatesAndCount(combinedData, 'phone'); |
|
| 321 |
+ |
|
| 322 |
+ // 총 30만건이 넘으면 false |
|
| 323 |
+ if (!validateRowLimit(result.count)) {
|
|
| 324 |
+ return false; |
|
| 325 |
+ } |
|
| 326 |
+ |
|
| 327 |
+ |
|
| 321 | 328 |
// 합쳐진 데이터를 tableL에 설정합니다. |
| 322 |
- tableL.setData(combinedData); |
|
| 329 |
+ tableL.setData(result.uniqueArray); |
|
| 330 |
+ // 중복데이터 건수 입력 |
|
| 331 |
+ setRowDupCnt(result.duplicateArray.length); |
|
| 332 |
+ |
|
| 323 | 333 |
|
| 324 | 334 |
// 미리보기 버튼 활성화 |
| 325 | 335 |
updateButtons(0); |
--- src/main/webapp/js/MJUtill.js
+++ src/main/webapp/js/MJUtill.js
... | ... | @@ -973,4 +973,70 @@ |
| 973 | 973 |
|
| 974 | 974 |
return totAddrCnt; |
| 975 | 975 |
|
| 976 |
-}(No newline at end of file) |
|
| 976 |
+} |
|
| 977 |
+ |
|
| 978 |
+/** |
|
| 979 |
+* @ phone을 기준으로 중복 제거 및 갯수 계산 |
|
| 980 |
+* @ 결과 반환 |
|
| 981 |
+* return {
|
|
| 982 |
+* uniqueArray, // 중복 제거된 배열 |
|
| 983 |
+* uniqueCount, // 중복 제거된 데이터 개수 |
|
| 984 |
+* duplicateArray // 중복된 데이터 배열 |
|
| 985 |
+* duplicateCount: duplicateArray.length // 중복된 데이터 개수 |
|
| 986 |
+* }; |
|
| 987 |
+*/ |
|
| 988 |
+function removeDuplicatesAndCount(array, key) {
|
|
| 989 |
+ // 중복을 제거한 배열 생성 |
|
| 990 |
+ const uniqueArray = array.filter((item, index, self) => |
|
| 991 |
+ index === self.findIndex((t) => t[key] === item[key]) |
|
| 992 |
+ ); |
|
| 993 |
+ |
|
| 994 |
+ // 중복된 데이터만 추출 |
|
| 995 |
+ const duplicateArray = array.filter((item, index, self) => |
|
| 996 |
+ index !== self.findIndex((t) => t[key] === item[key]) |
|
| 997 |
+ ); |
|
| 998 |
+ |
|
| 999 |
+ // 결과 반환 |
|
| 1000 |
+ return {
|
|
| 1001 |
+ uniqueArray, // 중복 제거된 배열 |
|
| 1002 |
+ uniqueCount: uniqueArray.length, // 중복 제거된 데이터 개수 |
|
| 1003 |
+ duplicateArray, // 중복된 데이터 배열 |
|
| 1004 |
+ duplicateCount: duplicateArray.length // 중복된 데이터 개수 |
|
| 1005 |
+ }; |
|
| 1006 |
+} |
|
| 1007 |
+ |
|
| 1008 |
+/* |
|
| 1009 |
+function validateRowLimit(currentRows, newRows, limit = 300000) {
|
|
| 1010 |
+ const totalRows = currentRows + newRows; |
|
| 1011 |
+ console.log('validateRowLimit totalRows : ', totalRows);
|
|
| 1012 |
+ if (totalRows > limit) {
|
|
| 1013 |
+ alert('안정적인 서비스 운영을 위해서 최대 '+limit+'건 이내로 분할 발송해 주시기 바랍니다.');
|
|
| 1014 |
+ return false; |
|
| 1015 |
+ } |
|
| 1016 |
+ return true; |
|
| 1017 |
+}*/ |
|
| 1018 |
+ |
|
| 1019 |
+function validateRowLimit(totalRows, limit = 300000) {
|
|
| 1020 |
+ // 값과 타입 확인 |
|
| 1021 |
+ |
|
| 1022 |
+ // 숫자 변환 |
|
| 1023 |
+ const totalRowsNum = Number(totalRows); |
|
| 1024 |
+ const limitNum = Number(limit); |
|
| 1025 |
+ |
|
| 1026 |
+ // 변환 후 값 확인 |
|
| 1027 |
+ |
|
| 1028 |
+ // 비교 연산 결과 확인 |
|
| 1029 |
+ const isOverLimit = totalRowsNum > limitNum; |
|
| 1030 |
+ |
|
| 1031 |
+ // 조건 처리 |
|
| 1032 |
+ if (isOverLimit) {
|
|
| 1033 |
+ alert('안정적인 서비스 운영을 위해서 최대 ' + limit + '건 이내로 분할 발송해 주시기 바랍니다.');
|
|
| 1034 |
+ return false; |
|
| 1035 |
+ } |
|
| 1036 |
+ return true; |
|
| 1037 |
+} |
|
| 1038 |
+ |
|
| 1039 |
+function setRowDupCnt(cnt){
|
|
| 1040 |
+ $('#rowDupCnt').text(cnt)
|
|
| 1041 |
+} |
|
| 1042 |
+ |
--- src/main/webapp/js/web/addr/cmn.js
+++ src/main/webapp/js/web/addr/cmn.js
... | ... | @@ -4,6 +4,7 @@ |
| 4 | 4 |
function isValidPhoneNumber(phone) {
|
| 5 | 5 |
// 숫자만 추출 |
| 6 | 6 |
const numberOnly = phone.replace(/\D/g, ''); |
| 7 |
+ console.log('numberOnly : ' ,numberOnly);
|
|
| 7 | 8 |
|
| 8 | 9 |
// 유효한 형식 체크 |
| 9 | 10 |
return ( |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?