diff --git a/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp b/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp index 91ad3af4..7f91a4c3 100644 --- a/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp @@ -329,10 +329,11 @@ function SetAddrMassSave(){ // $('.loading_layer').addClass('active'); // setTimeout(setSenderList_advc, 1000); + $('.loading_layer').addClass('active'); setSenderList_advc(); } } - +/* function setSenderList_advc(){ // tab에 해당하는 타블레이터 가져오기 @@ -362,33 +363,10 @@ function setSenderList_advc(){ if (data.status == 'OK') { alert(data.message); -// alert("저장에 성공했습니다.\n저장 : " + returnData.resultCnt + "건" -// +", 중복 : " + returnData.dupliCnt + "건" -// +", 휴대폰번호 오류 : " + returnData.errPhoneCnt + "건"); - - // 중복번호 Hide -// $("#btnAddrMassDupli").hide(); -// $("#btnAddrMassSaveDupli").hide(); - - // 중복건이 있을경우 - -// if (returnData.dupliCnt > 0) { - //alert(returnData.addrMassDupliList.length); - - // 중복번호(해당 그룹) Show -// $("#btnAddrMassSaveDupli").show(); - -// addrMassDupliSaveList = returnData.addrMassDupliList; - //$("#btnAddrMassSaveDupli").trigger("click"); -// } - // 데이터 비우기 SetClear($objTabul); var selectMassVal = $("#addrGrpIdInfo option:selected").val(); - - // 주소록그룹 콤보박스 유지 -// setTimeout(setSelectMassSetting, 500, selectMassVal); } else { alert("오류 알림 : :: "+data.message); @@ -407,184 +385,78 @@ function setSenderList_advc(){ $('.loading_layer').removeClass('active'); } }); -} -/* -function setSenderList() { - var selectedData = tableR.getRows(); - for (var i=gArrRestartIndex; i < selectedData.length; i++) { - var name = tableR.getRows()[i].getData().name; - var phone = removeDash(tableR.getRows()[i].getData().phone); - var info1 = tableR.getRows()[i].getData().info1; - var info2 = tableR.getRows()[i].getData().info2; - var info3 = tableR.getRows()[i].getData().info3; - var info4 = tableR.getRows()[i].getData().info4; - var memo = tableR.getRows()[i].getData().memo; - - gPhoneList[i] = phone; - // name - if (name == "" || name == null || name == undefined) { - gNameList[i] = ""; - } - else { - if(!addrEmojiCheck(name)){//이모지 체크 해주기 - return false; - } - - gNameList[i] = name.replace(/,/g,"§"); - } - - // info1 - if (info1 == "" || info1 == null || info1 == undefined) { - gInfo1List[i] = ""; - } - else { - if(!addrEmojiCheck(info1)){//이모지 체크 해주기 - return false; - } - - gInfo1List[i] = info1.replace(/,/g,"§"); - } - // info2 - if (info2 == "" || info2 == null || info2 == undefined) { - gInfo2List[i] = ""; - } - else { - if(!addrEmojiCheck(info2)){//이모지 체크 해주기 - return false; - } - - gInfo2List[i] = info2.replace(/,/g,"§"); - } - // info3 - if (info3 == "" || info3 == null || info3 == undefined) { - gInfo3List[i] = ""; - } - else { - if(!addrEmojiCheck(info3)){//이모지 체크 해주기 - return false; - } - gInfo3List[i] = info3.replace(/,/g,"§"); - } - // info4 - if (info4 == "" || info4 == null || info4 == undefined) { - gInfo4List[i] = ""; - } - else { - if(!addrEmojiCheck(info4)){//이모지 체크 해주기 - return false; - } - gInfo4List[i] = info4.replace(/,/g,"§"); - } - // memo - if (memo == "" || memo == null || memo == undefined) { - gMemoList[i] = ""; - } - else { - if(!addrEmojiCheck(memo)){//이모지 체크 해주기 - return false; - } - gMemoList[i] = memo.replace(/,/g,"§"); - } - - //브라우저 대기 메세지 안나오게 하기위한 처리 - var reStartArray = [10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000, 110000, 120000, 130000, 140000, 150000, 160000, 170000, 180000, 190000, 200000]; - - if (reStartArray.includes(i, 0)) { - gArrRestartIndex = i+1; - - if (selectedData.length > gArrRestartIndex) { - setTimeout(setSenderList, 500); - break; - } - } - } - - if (gPhoneList.length == selectedData.length) { - //console.log(new Date()); - //console.log("gPhoneList.length : " + gPhoneList.length); - //console.log("selectedData.length : " + selectedData.length); - - SetAddrMassSave_Step2(); - } } */ -//저장 -/* function SetAddrMassSave_Step2(){ - var form = document.addrMassForm; - form.phoneList.value = gPhoneList; - form.nameList.value = gNameList; - form.info1List.value = gInfo1List; - form.info2List.value = gInfo2List; - form.info3List.value = gInfo3List; - form.info4List.value = gInfo4List; - form.memoList.value = gMemoList; - form.addrGrpId.value = $("#addrGrpIdInfo").val(); - - var data = new FormData(form); - - url = "/web/mjon/addr/addrMassInsertByTempAjax.do"; - - $.ajax({ - type: "POST", - url: url, - data: data, - dataType:'json', - async: true, - processData: false, - contentType: false, - cache: false, - success: function (returnData) { - //로딩창 hide - $('.loading_layer').removeClass('active'); - - if (returnData.isSuccess) { - alert("저장에 성공했습니다.\n저장 : " + returnData.resultCnt + "건, 중복 : " + returnData.dupliCnt + "건, 휴대폰번호 오류 : " + returnData.errPhoneCnt + "건"); + + + +function setSenderList_advc(){ + var $objTabul = fn_utils_getTabulator(); + var dataToSend = $objTabul.getData(); + var addrGrpIdInfo = $("#addrGrpIdInfo").val(); + var addrGrpNmInfo = $("#addrGrpNm").val(); - // 중복번호 Hide - $("#btnAddrMassDupli").hide(); - $("#btnAddrMassSaveDupli").hide(); - - // 중복건이 있을경우 - if (returnData.dupliCnt > 0) { - //alert(returnData.addrMassDupliList.length); + var batchSize = 20000; // 배치 크기 + var totalBatches = Math.ceil(dataToSend.length / batchSize); // 총 배치 수 + var currentBatch = 0; // 현재 배치 인덱스 - // 중복번호(해당 그룹) Show - $("#btnAddrMassSaveDupli").show(); - - addrMassDupliSaveList = returnData.addrMassDupliList; - //$("#btnAddrMassSaveDupli").trigger("click"); - } - - // 데이터 비우기 - SetClear(); - - var selectMassVal = $("#addrGrpIdInfo option:selected").val(); - - // 주소록그룹 콤보박스 유지 - setTimeout(setSelectMassSetting, 500, selectMassVal); - } - else { - alert("오류 알림 : " + returnData.msg); - } - }, - error: function (e) { - //로딩창 hide - $('.loading_layer').removeClass('active'); - - alert("저장에 실패하였습니다."); - alert("ERROR : " + JSON.stringify(e)); - }, - beforeSend : function(xmlHttpRequest) { - //로딩창 show - $('.loading_layer').addClass('active'); - }, - complete : function(xhr, textStatus) { - //로딩창 hide - $('.loading_layer').removeClass('active'); - } - }); -} */ + fn_loadAddActive(); + + function sendBatch() { + if (currentBatch < totalBatches) { + var start = currentBatch * batchSize; + var end = Math.min(start + batchSize, dataToSend.length); + var batchData = dataToSend.slice(start, end); + + var updateData = batchData.map(row => { + row.addrGrpId = addrGrpIdInfo; + row.addrGrpNm = addrGrpNmInfo; + return row; + }); + + $.ajax({ + type: "POST", + url: "/web/mjon/addr/addrMassInsertByTempAjax_advc.do", + data: JSON.stringify(updateData), + dataType: 'json', + contentType: 'application/json', + async: true, + success: function (data) { + console.log('Batch ' + (currentBatch + 1) + ' success: ', data); + if (data.status == 'OK') { + if (currentBatch === totalBatches - 1) { + alert("모든 데이터가 성공적으로 저장되었습니다."); + // 데이터 비우기 + SetClear($objTabul); + } else { + currentBatch++; + sendBatch(); // 다음 배치 전송 + } + } else { + alert("오류 알림 : " + data.message); + } + }, + error: function (e) { + alert("배치 전송에 실패하였습니다."); + console.error("ERROR: ", JSON.stringify(e)); + }, + beforeSend: function(xmlHttpRequest) { + }, + complete: function(xhr, textStatus) { + console.log('end : ', end); + $('#lodingTxt').text(end); + } + }); + } + } + // 첫 번째 배치 전송 시작 + sendBatch(); + $('.loading_layer').removeClass('active'); +} + + + //주소록그룹 콤보박스 유지 function setSelectMassSetting(selectMassVal) { $("#addrGrpIdInfo").val(selectMassVal).prop("selected", true); @@ -612,7 +484,6 @@ function SetClear($objTabul) { // AddrListAjax.jsp에서 호출 $(document).on('click', '#btnAddrMassRegCall', function() { getAddrGroupList(); - console.log('??'); }); @@ -765,7 +636,9 @@ function fn_tabToggle(tabNum){