문자전송 화면 수정중

This commit is contained in:
hehihoho3@gmail.com 2024-12-16 14:26:48 +09:00
parent 319445f483
commit 74e23201cc
10 changed files with 195 additions and 93 deletions

View File

@ -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);

View File

@ -1717,22 +1717,41 @@ public class MjonMsgDataController {
addrGroupVO.setSiteId("web");
List<AddrGroupVO> addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO);
/*
* JSPark 2023.08.30 => Ajax 변경
//회원별 주소록 전체 갯수 조회
int addrTotalCount = addrService.selectAddrTotalCount(addrVO);
addrVO.setType("bookmark");
addrVO.setType("bookmark");
List<AddrVO> addrBookmarkList = addrService.selectAddrBasicGrpList(addrVO);
addrVO.setType("noGrp");
List<AddrVO> 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);

View File

@ -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 =============>");
//문자 환불, 팩스 환불

View File

@ -599,7 +599,7 @@ function listAddrTransHistAjax(pageNo) {
<label for="groupAll" class="label">전체 선택</label>
<input type="checkbox" name="groupAll" id="groupAll" value="1" onClick="fnCheckAll();">
</div>
<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>
<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>
</div>
<div class="adr1_btnWrap">
<div>

View File

@ -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({

View File

@ -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;
}
</script>

View File

@ -9,10 +9,10 @@
$(document).ready(function(){
// 주소록 그룹 카운트(전체)
getAddrGroupTotCnt();
// getAddrGroupTotCnt();
//주소록 그룹 카운트(그룹미지정)
getAddrGroupNogrpCnt();
// getAddrGroupNogrpCnt();
//주소록 그룹 카운트(자주보내는 번호)
getAddrGroupBookmarkCnt();
@ -96,19 +96,19 @@ $(".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"></span>명]
<img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">전체[<span id="addrTotCnt"><fmt:formatNumber value="${addrTotalCount}" pattern="#,###"/></span>명]
</p>
</div>
<div class="adr_cb_wrap2">
<p onClick="javascript:fnSelectAddrList('none','',this); return false;">
<img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">그룹미지정[<span id="nogrpCnt"></span>명]
<img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">그룹미지정[<span id="nogrpCnt"><fmt:formatNumber value="${addrNoGrpCnt}" pattern="#,###"/></span>명]
</p>
</div>
<div class="adr_cb_wrap2">
<p onClick="javascript:fnSelectAddrList('book','',this); return false;">
<img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">자주보내는 번호[<span id="bookmarkCnt"></span>명]
<img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">자주보내는 번호[<span id="bookmarkCnt"><fmt:formatNumber value="${addrBookmarkCnt}" pattern="#,###"/></span>명]
</p>
</div>

View File

@ -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);

View File

@ -973,4 +973,70 @@ function getTabulatorLAddrGrpCnt(){
return totAddrCnt;
}
}
/**
* @ 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)
}

View File

@ -4,6 +4,7 @@
function isValidPhoneNumber(phone) {
// 숫자만 추출
const numberOnly = phone.replace(/\D/g, '');
console.log('numberOnly : ' ,numberOnly);
// 유효한 형식 체크
return (