문자전송 받느사람 30만건 제한
This commit is contained in:
parent
b06cc7e71e
commit
8b5d21c242
@ -18,7 +18,6 @@
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
|
||||
|
||||
|
||||
//받는사람 연락처 내용 처리
|
||||
@ -98,12 +97,21 @@ $(document).ready(function(){
|
||||
placeholder: "주소록 그룹을 선택해 주세요.",
|
||||
resizableColumns: false,
|
||||
progressiveLoad:"scroll",
|
||||
progressiveRender: true, // 렌더링 최적화 활성화
|
||||
progressiveRenderSize: 100, // 한 번에 렌더링할 행 수를 줄임
|
||||
columns: [
|
||||
{formatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false},
|
||||
// {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
||||
// cell.getRow().toggleSelect();
|
||||
// }
|
||||
// },
|
||||
// {formatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false},
|
||||
{formatter: "rowSelection", titleFormatter: "rowSelection", hozAlign: "center", headerSort: false,
|
||||
cellClick: function(e, cell) {
|
||||
fn_loadAddActive(); // 로딩 활성화
|
||||
setTimeout(() => {
|
||||
tableAddr.blockRedraw(); // 렌더링 차단
|
||||
cell.getRow().toggleSelect(); // 선택 상태 토글
|
||||
tableAddr.restoreRedraw(); // 렌더링 재개
|
||||
fn_loadRemoveActive(); // 로딩 비활성화
|
||||
}, 0); // 비동기적으로 실행
|
||||
}
|
||||
},
|
||||
{formatter: "rownum", align: "center", title: "No", hozAlign: "center", headerHozAlign: "center", width: 60},
|
||||
{title: "그룹명", hozAlign: "center", field: "addrGroupNm", editor: false, width: 100, validator: ["required", "minLength:2", "maxLength:40"]},
|
||||
{title: "이름", hozAlign: "center", field: "name", editor: false, width: 100, validator: ["maxLength:12"]},
|
||||
@ -1018,60 +1026,18 @@ $(document).ready(function (){
|
||||
.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 제거
|
||||
const addrData = processPhoneNumbers(numbers);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 기존 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.uniqueCount)) {
|
||||
return false;
|
||||
}
|
||||
// 데이터 병합 및 중복 제거
|
||||
const result = mergeAndValidateData(existingData, addrData);
|
||||
|
||||
// 합쳐진 데이터를 tableL에 설정합니다.
|
||||
tableL.setData(result.uniqueArray);
|
||||
// 중복데이터 건수 입력
|
||||
setRowDupCnt(result.duplicateArray.length);
|
||||
|
||||
// 미리보기 버튼 활성화
|
||||
updateButtons(0);
|
||||
|
||||
var totRows = tableL.getRows().length;
|
||||
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
||||
|
||||
|
||||
totalPriceSum(totRows);
|
||||
// 테이블 데이터 업데이트
|
||||
if (!updateTableData(tableL, result)) return false;
|
||||
|
||||
// textarea 초기화
|
||||
textarea.val(''); // jQuery 객체에서 값을 초기화할 때는 .val('') 사용
|
||||
@ -1223,56 +1189,79 @@ $(document).ready(function (){
|
||||
|
||||
//최근전송내역 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기)
|
||||
$(document).on('click', '#latestAddPhone', function (){
|
||||
var addPhoneList = []; //신규로 추가할 전화번호 저장변수
|
||||
var numbers = []; //신규로 추가할 전화번호 저장변수
|
||||
$("input:checkbox[name='latAddrChk']:checked").each(function(index){
|
||||
var chkPhone = $(this).val();
|
||||
if(!checkHpNum(chkPhone)){
|
||||
alert("올바른 전화번호가 아닙니다.");
|
||||
return false;
|
||||
}else{
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
numbers.push(removeDash(chkPhone.trim()));
|
||||
}
|
||||
});
|
||||
|
||||
if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) {
|
||||
return false;
|
||||
}
|
||||
if(addPhoneList.length > 0){
|
||||
//연락처 추가해 주기
|
||||
addPhoneInfo(addPhoneList);
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
}
|
||||
else {
|
||||
|
||||
if(numbers.length < 1)
|
||||
{
|
||||
alert("연락처를 선택해주세요.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('numbers : ', numbers);
|
||||
const addrData = processPhoneNumbers(numbers);
|
||||
|
||||
|
||||
// 기존 tableL의 데이터를 가져옵니다.
|
||||
var existingData = tableL.getData();
|
||||
|
||||
// 데이터 병합 및 중복 제거
|
||||
const result = mergeAndValidateData(existingData, addrData);
|
||||
|
||||
|
||||
// 테이블 데이터 업데이트
|
||||
if (!updateTableData(tableL, result)) return false;
|
||||
|
||||
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
|
||||
});
|
||||
|
||||
//최근전송내역 팝업 전체추가 버튼 처리
|
||||
$(document).on('click', '#latestAddPhoneAll', function (){
|
||||
var addPhoneList = []; //신규로 추가할 전화번호 저장변수
|
||||
var numbers = []; //신규로 추가할 전화번호 저장변수
|
||||
$("input:checkbox[name='latAddrChk']").each(function(index){
|
||||
var chkPhone = $(this).val();
|
||||
if(!checkHpNum(chkPhone)){
|
||||
alert("올바른 전화번호가 아닙니다.");
|
||||
return false;
|
||||
}else{
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
numbers.push(removeDash(chkPhone.trim()));
|
||||
}
|
||||
});
|
||||
|
||||
if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) {
|
||||
if(numbers.length < 1)
|
||||
{
|
||||
alert("연락처를 선택해주세요.");
|
||||
return false;
|
||||
}
|
||||
if(addPhoneList.length > 0){
|
||||
//연락처 추가해 주기
|
||||
addPhoneInfo(addPhoneList);
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
}
|
||||
else {
|
||||
alert("연락처가 없습니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('numbers : ', numbers);
|
||||
const addrData = processPhoneNumbers(numbers);
|
||||
|
||||
|
||||
// 기존 tableL의 데이터를 가져옵니다.
|
||||
var existingData = tableL.getData();
|
||||
|
||||
// 데이터 병합 및 중복 제거
|
||||
const result = mergeAndValidateData(existingData, addrData);
|
||||
|
||||
|
||||
// 테이블 데이터 업데이트
|
||||
if (!updateTableData(tableL, result)) return false;
|
||||
|
||||
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
|
||||
});
|
||||
|
||||
//최근전송내역 팝업 선택 취소 버튼 처리
|
||||
@ -1291,62 +1280,78 @@ $(document).ready(function (){
|
||||
|
||||
//자주보내는 번호 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기)
|
||||
$(document).on('click', '#bookMarkAddPhone', function (){
|
||||
var addPhoneList = []; //신규로 추가할 전화번호 저장변수
|
||||
var numbers = []; //신규로 추가할 전화번호 저장변수
|
||||
$("input:checkbox[name='bookAddrChk']:checked").each(function(index){
|
||||
var chkPhone = $(this).val();
|
||||
if(!checkHpNum(chkPhone)){
|
||||
alert("올바른 전화번호가 아닙니다.");
|
||||
return false;
|
||||
}else{
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
numbers.push(removeDash(chkPhone.trim()));
|
||||
}
|
||||
});
|
||||
|
||||
if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if(addPhoneList.length > 0){
|
||||
//연락처 추가해 주기
|
||||
addPhoneInfo(addPhoneList);
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
}
|
||||
else {
|
||||
if(numbers.length < 1)
|
||||
{
|
||||
alert("연락처를 선택해주세요.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('numbers : ', numbers);
|
||||
const addrData = processPhoneNumbers(numbers);
|
||||
|
||||
|
||||
// 기존 tableL의 데이터를 가져옵니다.
|
||||
var existingData = tableL.getData();
|
||||
|
||||
// 데이터 병합 및 중복 제거
|
||||
const result = mergeAndValidateData(existingData, addrData);
|
||||
|
||||
|
||||
// 테이블 데이터 업데이트
|
||||
if (!updateTableData(tableL, result)) return false;
|
||||
|
||||
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
});
|
||||
|
||||
//자주보내는 번호 팝업 전체추가 버튼 처리
|
||||
$(document).on('click', '#bookMarkAddPhoneAll', function (){
|
||||
|
||||
var addPhoneList = []; //신규로 추가할 전화번호 저장변수
|
||||
var numbers = []; //신규로 추가할 전화번호 저장변수
|
||||
$("input:checkbox[name='bookAddrChk']").each(function(index){
|
||||
var chkPhone = $(this).val();
|
||||
if(!checkHpNum(chkPhone)){
|
||||
alert("올바른 전화번호가 아닙니다.");
|
||||
return false;
|
||||
}else{
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
numbers.push(removeDash(chkPhone.trim()));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) {
|
||||
if(numbers.length < 1)
|
||||
{
|
||||
alert("연락처를 선택해주세요.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('numbers : ', numbers);
|
||||
const addrData = processPhoneNumbers(numbers);
|
||||
|
||||
|
||||
// 기존 tableL의 데이터를 가져옵니다.
|
||||
var existingData = tableL.getData();
|
||||
|
||||
// 데이터 병합 및 중복 제거
|
||||
const result = mergeAndValidateData(existingData, addrData);
|
||||
|
||||
|
||||
// 테이블 데이터 업데이트
|
||||
if (!updateTableData(tableL, result)) return false;
|
||||
|
||||
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
|
||||
if(addPhoneList.length > 0){
|
||||
//연락처 추가해 주기
|
||||
addPhoneInfo(addPhoneList);
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
}
|
||||
else {
|
||||
alert("연락처가 없습니다.");
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
//자주보내는 번호 팝업 선택 취소 버튼 처리
|
||||
@ -2934,61 +2939,63 @@ function addrToList(){
|
||||
|
||||
//주소록 불러오기에서 수신자 리스트 추가해 주기
|
||||
function addrToList_advc(type){
|
||||
var selectedData = tableAddr.getSelectedRows();
|
||||
var tableData = [];
|
||||
|
||||
console.log()
|
||||
|
||||
if(selectedData < 1){
|
||||
|
||||
// 선택된 데이터 또는 전체 데이터 변수 초기화
|
||||
let selectedData = type === 'select' ? tableAddr.getSelectedRows() : tableAddr.getData();
|
||||
|
||||
// 데이터가 비어있으면 경고 후 종료
|
||||
if (!selectedData || selectedData.length < 1) {
|
||||
alert("주소록을 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}else{ // 선택한 Row 데이터 저장해주기
|
||||
|
||||
|
||||
if (!validateRowLimit(tableL.getDataCount(), tableAddr.getSelectedRows())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// 기존 tableL의 데이터를 가져옵니다.
|
||||
var existingData = tableL.getData();
|
||||
var addrData;
|
||||
|
||||
if(type == 'all'){
|
||||
addrData = tableAddr.getData();
|
||||
}else{
|
||||
addrData = tableAddr.getSelectedData();
|
||||
}
|
||||
|
||||
// 기존 데이터와 새로운 데이터를 합칩니다.
|
||||
var combinedData = existingData.concat(addrData);
|
||||
|
||||
// 합쳐진 데이터를 tableL에 설정합니다.
|
||||
tableL.setData(combinedData);
|
||||
|
||||
//일괄변환 문구 결제금액 처리
|
||||
totRows = tableL.getRows().length;
|
||||
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
||||
var smsTxtArea = $('#smsTxtArea').val();
|
||||
if(smsTxtArea.indexOf("[*이름*]") > -1
|
||||
|| smsTxtArea.indexOf("[*1*]") > -1
|
||||
|| smsTxtArea.indexOf("[*2*]") > -1
|
||||
|| smsTxtArea.indexOf("[*3*]") > -1
|
||||
|| smsTxtArea.indexOf("[*4*]") > -1){
|
||||
|
||||
fnReplCell();
|
||||
}else{
|
||||
//결제 금액 구하기
|
||||
totalPriceSum(totRows);
|
||||
}
|
||||
|
||||
$(".closeAddr").trigger("click");
|
||||
//주소록 레이어 팝업의 Tabulator 데이터 지워주기
|
||||
tableAddr.clearData();
|
||||
|
||||
}
|
||||
|
||||
// 데이터 변환 로직
|
||||
const addrData = selectedData.map(row => {
|
||||
const rowData = type === 'select' ? row.getData() : row; // 'select'는 행 객체에서 데이터 추출
|
||||
return {
|
||||
name: rowData.name,
|
||||
phone: removeDash(rowData.phone),
|
||||
rep1: rowData.rep1,
|
||||
rep2: rowData.rep2,
|
||||
rep3: rowData.rep3,
|
||||
rep4: rowData.rep4
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
// 기존 tableL의 데이터를 가져옵니다.
|
||||
var existingData = tableL.getData();
|
||||
// 기존 데이터와 새로운 데이터를 합칩니다.
|
||||
var combinedData = existingData.concat(addrData);
|
||||
|
||||
// @ phone을 기준으로 중복 제거 및 갯수 계산
|
||||
const result = removeDuplicatesAndCount(combinedData, 'phone');
|
||||
|
||||
|
||||
|
||||
// 총 30만건이 넘으면 false
|
||||
if (!validateRowLimit(result.uniqueCount)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// 합쳐진 데이터를 tableL에 설정합니다.
|
||||
tableL.setData(result.uniqueArray);
|
||||
// 중복데이터 건수 입력
|
||||
setRowDupCnt(result.duplicateArray.length);
|
||||
|
||||
|
||||
// 미리보기 버튼 활성화
|
||||
updateButtons(0);
|
||||
|
||||
var totRows = tableL.getRows().length;
|
||||
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
||||
totalPriceSum(totRows);
|
||||
|
||||
|
||||
$(".closeAddr").trigger("click");
|
||||
//주소록 레이어 팝업의 Tabulator 데이터 지워주기
|
||||
tableAddr.clearData();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -3428,7 +3435,6 @@ function getMjMsgSentListAll(pageNo) {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<div class="loading_layer">
|
||||
|
||||
@ -95,9 +95,10 @@ $(".adr_cb_wrap2").click(function(){
|
||||
|
||||
<div class="adr_pop_list">
|
||||
<div class="adr_cb_wrap2">
|
||||
<p onClick="javascript:fnSelectAddrList('all','',this); return false;">
|
||||
<img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">전체[<span id="addrTotCnt"><fmt:formatNumber value="${addrTotalCount}" pattern="#,###"/></span>명]
|
||||
</p>
|
||||
<!-- <p onClick="javascript:fnSelectAddrList('all','',this); return false;"> -->
|
||||
<%-- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">전체[<span id="addrTotCnt"><fmt:formatNumber value="${addrTotalCount}" pattern="#,###"/></span>명] --%>
|
||||
전체[<span id="addrTotCnt"><fmt:formatNumber value="${addrTotalCount}" pattern="#,###"/></span>명]
|
||||
<!-- </p> -->
|
||||
</div>
|
||||
|
||||
<div class="adr_cb_wrap2">
|
||||
|
||||
@ -320,7 +320,6 @@ $(document).ready(function(){
|
||||
*/
|
||||
const result = removeDuplicatesAndCount(combinedData, 'phone');
|
||||
|
||||
console.table('result : ', result);
|
||||
|
||||
// 총 30만건이 넘으면 false
|
||||
if (!validateRowLimit(result.uniqueCount)) {
|
||||
|
||||
@ -131,11 +131,14 @@ function checkTelHpType(str){
|
||||
/**
|
||||
* 휴대폰번호 대시('-') 제거
|
||||
*/
|
||||
/**
|
||||
* 휴대폰번호에서 숫자가 아닌 문자를 모두 제거
|
||||
*/
|
||||
function removeDash(str) {
|
||||
var regExp = new RegExp('-', 'g');
|
||||
return str.replace(regExp, '');
|
||||
return str.replace(/\D/g, ''); // 숫자 이외의 문자 제거
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 휴대폰번호 대시('-') 추가
|
||||
* 대시 유무 상관없음
|
||||
@ -1012,16 +1015,6 @@ function removeDuplicatesAndCount(array, key) {
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
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) {
|
||||
// 값과 타입 확인
|
||||
@ -1045,6 +1038,55 @@ function validateRowLimit(totalRows, limit = 300000) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// 전화번호 리스트 처리
|
||||
function processPhoneNumbers(phoneList) {
|
||||
return phoneList
|
||||
.map(number => {
|
||||
const cleanPhone = removeDash(number.trim());
|
||||
if (!isValidPhoneNumber(cleanPhone)) return null;
|
||||
return {
|
||||
name: "",
|
||||
phone: cleanPhone,
|
||||
rep1: "",
|
||||
rep2: "",
|
||||
rep3: "",
|
||||
rep4: "",
|
||||
};
|
||||
})
|
||||
.filter(data => data !== null);
|
||||
}
|
||||
|
||||
|
||||
// 데이터 병합 및 중복 제거
|
||||
function mergeAndValidateData(existingData, newData, uniqueKey = 'phone') {
|
||||
const combinedData = existingData.concat(newData);
|
||||
const result = removeDuplicatesAndCount(combinedData, uniqueKey);
|
||||
|
||||
if (!validateRowLimit(result.uniqueCount)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// 테이블 데이터 업데이트
|
||||
function updateTableData(table, result) {
|
||||
if (!result) return false;
|
||||
|
||||
table.setData(result.uniqueArray);
|
||||
setRowDupCnt(result.duplicateArray.length);
|
||||
updateButtons(0);
|
||||
const totRows = table.getRows().length;
|
||||
updateTotCnt(totRows);
|
||||
totalPriceSum(totRows);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Discript : 문자발송 화면에 중복 카운트 입력
|
||||
*
|
||||
*/
|
||||
function setRowDupCnt(cnt){
|
||||
$('#rowDupCnt').text(cnt)
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
// 유효한 번호인지 확인하는 함수
|
||||
function isValidPhoneNumber(phone) {
|
||||
// 숫자만 추출
|
||||
const numberOnly = phone.replace(/\D/g, '');
|
||||
numberOnly = phone.replace(/\D/g, ''); // 숫자 이외의 문자 제거
|
||||
// console.log('numberOnly : ' ,numberOnly);
|
||||
|
||||
// 유효한 형식 체크
|
||||
|
||||
Loading…
Reference in New Issue
Block a user