문자전송 화면 수정중
This commit is contained in:
parent
319445f483
commit
74e23201cc
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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 =============>");
|
||||
|
||||
//문자 환불, 팩스 환불
|
||||
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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({
|
||||
|
||||
@ -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>
|
||||
|
||||
|
||||
@ -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>
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
function isValidPhoneNumber(phone) {
|
||||
// 숫자만 추출
|
||||
const numberOnly = phone.replace(/\D/g, '');
|
||||
console.log('numberOnly : ' ,numberOnly);
|
||||
|
||||
// 유효한 형식 체크
|
||||
return (
|
||||
|
||||
Loading…
Reference in New Issue
Block a user