This commit is contained in:
subsub 2024-12-19 17:41:28 +09:00
commit f696cc42e1
9 changed files with 159 additions and 105 deletions

View File

@ -70,8 +70,8 @@ public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrSer
private static final Charset EUC_KR = Charset.forName("EUC-KR");
// private static final int MAX_ADDR_CNT = 500000;
//임시 500만개
private static final int MAX_SINGLE_ENTRY_CNT = 350000;
private static final int MAX_ADDR_CNT = 10000000;
private static final int MAX_SINGLE_ENTRY_CNT = 300000;
private static final int MAX_ADDR_CNT = 1000000;
private static final int BATCH_SIZE = 5000;
private static final int THREAD_COUNT = 3;
@ -413,7 +413,7 @@ public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrSer
if(addrListVO.size() > MAX_SINGLE_ENTRY_CNT) {
return new StatusResponse(
HttpStatus.BAD_REQUEST
, "주소록은 한번에 100만개까지만 등록이 가능합니다."
, "주소록은 한번에 30만개까지만 등록이 가능합니다."
, LocalDateTime.now()
);
@ -421,7 +421,25 @@ public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrSer
// step1 현재 주소록 갯수 조회
//회원별 주소록 전체 갯수 조회
// 시작 시간 기록
long startTime22 = System.nanoTime();
int addrBefCnt = addrDAO.selectAddrTotalCount(addrListVO.get(0));
// 종료 시간 기록
long endTime22 = System.nanoTime();
// 소요 시간 계산 (나노초 단위)
long durationNano = endTime22 - startTime22;
// 나노초를 초로 변환
double durationSeconds = durationNano / 1_000_000_000.0;
// 초를 분과 초로 변환
long minutes = (long) durationSeconds / 60;
double seconds = durationSeconds % 60;
System.out.printf("프로세스 실행 시간: %d분 %.3f초\n", minutes, seconds);
int addrNewCnt = addrListVO.size(); //신규 추가할 주소록 갯수
int sumAddrCnt = addrBefCnt + addrNewCnt;
@ -429,7 +447,7 @@ public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrSer
if(sumAddrCnt > MAX_ADDR_CNT) {
return new StatusResponse(
HttpStatus.BAD_REQUEST
, "주소록은 총 1000만개까지만 등록이 가능합니다."
, "주소록은 총 100만개까지만 등록이 가능합니다."
, LocalDateTime.now()
);

View File

@ -3983,7 +3983,8 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
}
mjonMsgVO.setSmsTxt(smsTxt);
log.debug(" :: smsTxt :: [{}]", smsTxt);
// log.debug(" :: smsTxt :: [{}]", smsTxt);
StatusResponse statusResponse = new StatusResponse();
mjonMsgVO = setImagesSetting(mjonMsgVO, statusResponse);

View File

@ -4275,63 +4275,60 @@
<select id="MjonMsgDataDAO.selectMsgSentFailListOneByDay" resultClass="mjonMsgVO">
/*MjonMsgDataDAO.selectMsgSentFailListOneByDay*/
SELECT MMD.USER_ID AS userId
, MMD.MSG_GROUP_ID AS msgGroupId
, MMD.MSG_SEQ AS msgSeq
, MMD.USERDATA AS userData
, MMD.REFUND_YN AS refundYn
, MMD.RSLT_CODE AS rsltCode
, MMD.RSLT_CODE2 AS rsltCode2
, MMD.AGENT_CODE AS agentCode
, DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T') AS sentDate
, DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate
, MGD.EACH_PRICE AS eachPrice
FROM MJ_MSG_DATA MMD
INNER JOIN LETTNGNRLMBER MB
ON MMD.USER_ID = MB.MBER_ID
LEFT JOIN MJ_MSG_GROUP_DATA MGD
ON MMD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
LEFT JOIN MJ_CASH MC
ON MC.ORDER_ID = MMD.USERDATA
AND MC.USER_ID = MMD.USER_ID
WHERE 1=1
AND MMD.SENT_DATE > date_add(now(), interval -40 day)
AND MMD.CUR_STATE = '3'
AND MMD.REFUND_YN = 'N'
AND MMD.RESERVE_C_YN = 'N'
AND MMD.MSG_TYPE IN ('4','6')
AND MMD.USER_ID NOT IN ('hftest', 'itntest', 'imotest', 'itntestBatch')
AND MGD.EACH_PRICE != 0
AND MC.ORDER_ID IS NULL
AND
(CASE
WHEN MMD.AGENT_CODE = '01' AND ( MMD.RSLT_CODE = '100' AND (MMD.RSLT_CODE2 = '0'))
THEN 'S'
WHEN MMD.AGENT_CODE = '02' AND (MMD.RSLT_CODE = '0')
THEN 'S'
WHEN MMD.AGENT_CODE = '03' AND (MMD.RSLT_CODE = '100' OR MMD.RSLT_CODE = '101' OR MMD.RSLT_CODE = '110' OR MMD.RSLT_CODE = '800')
THEN 'S'
WHEN MMD.AGENT_CODE = '04' AND (MMD.RSLT_CODE = '4100' OR MMD.RSLT_CODE = '6600')
THEN 'S'
WHEN MMD.AGENT_CODE = '05' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
THEN 'S'
WHEN MMD.AGENT_CODE = '07' AND (MMD.RSLT_CODE = '6' OR MMD.RSLT_CODE = '1000')
THEN 'S'
WHEN MMD.AGENT_CODE = '08' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
THEN 'S'
WHEN MMD.AGENT_CODE = '09' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
THEN 'S'
WHEN (
MMD.RSLT_CODE IS NULL
AND MMD.RSLT_CODE2 IS NULL
AND MMD.SENT_DATE IS NULL
AND MMD.RSLT_DATE IS NULL
)
THEN 'W'
ELSE 'F'
END) IN ('F')
ORDER BY MMD.USER_ID
LIMIT 10000
SELECT MMD.USER_ID AS userId
, MMD.MSG_GROUP_ID AS msgGroupId
, MMD.MSG_SEQ AS msgSeq
, MMD.USERDATA AS userData
, MMD.REFUND_YN AS refundYn
, MMD.RSLT_CODE AS rsltCode
, MMD.RSLT_CODE2 AS rsltCode2
, MMD.AGENT_CODE AS agentCode
, DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T') AS sentDate
, DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate
, MGD.EACH_PRICE AS eachPrice
FROM MJ_MSG_DATA MMD
INNER JOIN LETTNGNRLMBER MB
ON MMD.USER_ID = MB.MBER_ID
LEFT JOIN MJ_MSG_GROUP_DATA MGD
ON MMD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
WHERE 1=1
AND MMD.SENT_DATE > date_add(now(), interval -40 day)
AND MMD.CUR_STATE = '3'
AND MMD.REFUND_YN = 'N'
AND MMD.RESERVE_C_YN = 'N'
AND MMD.MSG_TYPE IN ('4','6')
AND MMD.USER_ID NOT IN ('hftest', 'itntest', 'imotest', 'itntestBatch')
AND MGD.EACH_PRICE != 0
AND
(CASE
WHEN MMD.AGENT_CODE = '01' AND ( MMD.RSLT_CODE = '100' AND (MMD.RSLT_CODE2 = '0'))
THEN 'S'
WHEN MMD.AGENT_CODE = '02' AND (MMD.RSLT_CODE = '0')
THEN 'S'
WHEN MMD.AGENT_CODE = '03' AND (MMD.RSLT_CODE = '100' OR MMD.RSLT_CODE = '101' OR MMD.RSLT_CODE = '110' OR MMD.RSLT_CODE = '800')
THEN 'S'
WHEN MMD.AGENT_CODE = '04' AND (MMD.RSLT_CODE = '4100' OR MMD.RSLT_CODE = '6600')
THEN 'S'
WHEN MMD.AGENT_CODE = '05' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
THEN 'S'
WHEN MMD.AGENT_CODE = '07' AND (MMD.RSLT_CODE = '6' OR MMD.RSLT_CODE = '1000')
THEN 'S'
WHEN MMD.AGENT_CODE = '08' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
THEN 'S'
WHEN MMD.AGENT_CODE = '09' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
THEN 'S'
WHEN (
MMD.RSLT_CODE IS NULL
AND MMD.RSLT_CODE2 IS NULL
AND MMD.SENT_DATE IS NULL
AND MMD.RSLT_DATE IS NULL
)
THEN 'W'
ELSE 'F'
END) IN ('F')
ORDER BY MMD.USER_ID
LIMIT 10000
</select>

View File

@ -685,7 +685,7 @@ function listAddrTransHistAjax(pageNo) {
<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" id="addrTotCnt">${addrTotalCount }</span>/최대 1,000,000]</p> --%>
<p class="open"><img src="/publish/images/content/open_folder.png" alt="폴더 열림">전체[<span class="c_002c9a fwMd" id="addrTotCnt">${addrTotalCount }</span>/최대 1,000,000]</p>
<p class="open"><img src="/publish/images/content/open_folder.png" alt="폴더 열림">전체[<span class="c_002c9a fwMd" id="addrTotCnt"><fmt:formatNumber value="${addrTotalCount }" type="number" groupingUsed="true" /></span>/최대 1,000,000]</p>
</div>
<div class="adr1_btnWrap">
<div>
@ -704,13 +704,13 @@ function listAddrTransHistAjax(pageNo) {
<div class="adr_cb_wrap list_fixed">
<label for="group1" class="label"></label>
<input type="checkbox" id="group1" disabled="disabled">
<p onclick="openThisGroup('noGrp');"><img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">그룹미지정[<span id="nogrpCnt"><c:out value="${addrNoGrpCnt}" /></span>명]</p>
<p onclick="openThisGroup('noGrp');"><img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">그룹미지정[<span id="nogrpCnt"><fmt:formatNumber value="${addrNoGrpCnt}" type="number" groupingUsed="true" /></span>명]</p>
</div>
<!-- 고정그룹 : 자주보내는번호 -->
<div class="adr_cb_wrap list_fixed">
<label for="group2" class="label"></label>
<input type="checkbox" id="group2" disabled="disabled">
<p onclick="openThisGroup('bookmark');"><img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">자주보내는 번호[<span id="bookmarkCnt"><c:out value="${addrBookmarkCnt }"/></span>명]
<p onclick="openThisGroup('bookmark');"><img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">자주보내는 번호[<span id="bookmarkCnt"><fmt:formatNumber value="${addrBookmarkCnt }" type="number" groupingUsed="true" /></span>명]
</div>
<c:forEach var="addrGroupList" items="${addrGroupList}" varStatus="status">
<div class="adr_cb_wrap list_switch">
@ -721,7 +721,7 @@ function listAddrTransHistAjax(pageNo) {
<p onclick="openThisGroup('<c:out value="${addrGroupList.addrGrpId}" />');">
<img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">
<input type="hidden" name="addrGrpNms" class="addrGrpNms" id="addrGrpNm${status.index+3}" value="${addrGroupList.addrGrpNm}" maxlength="20"/>
<span class="groupsName"><c:out value="${addrGroupList.addrGrpNm}" />[<span><c:out value="${addrGroupList.grpCount}" /></span>명]
<span class="groupsName"><c:out value="${addrGroupList.addrGrpNm}" />[<span><fmt:formatNumber value="${addrGroupList.grpCount}" type="number" groupingUsed="true" /></span>명]
</p>
<input type="hidden" name="addrGrpIds" id="addrGrpId${status.index+3}" value="${addrGroupList.addrGrpId}" />
<input type="hidden" id="grpCount${status.index+3}" value="${addrGroupList.grpCount}" />

View File

@ -420,7 +420,7 @@ function setSenderList_advc(){
sendBatch(); // 다음 배치 전송
}
} else {
alert("오류 알림 : " + data.message);
alert(data.message);
}
},
error: function (e) {

View File

@ -443,7 +443,7 @@ function setSenderList_advc(){
sendBatch(); // 다음 배치 전송
}
} else {
alert("오류 알림 : " + data.message);
alert(data.message);
}
}
,error: function (e) {

View File

@ -19,11 +19,11 @@
$(document).ready(function(){
console.log(' + $(#tabDision).val() : ',$('#tabDision').val())
if($('#tabDision').val() == 'tab02'){
$('#send_adYnY').prop('checked', true); // 상태 변경 및 이벤트 발생
advMsgInsert();
}
// console.log(' + $(#tabDision).val() : ',$('#tabDision').val())
// if($('#tabDision').val() == 'tab02'){
// $('#send_adYnY').prop('checked', true); // 상태 변경 및 이벤트 발생
// advMsgInsert();
// }
//받는사람 연락처 내용 처리
//Tabulator AJAX Data Loading
@ -737,7 +737,7 @@ $(document).ready(function (){
if(blineCodeYn != 'N' && blineCodeYn != ''){
$('input[name="send_adYn"]').val(['Y']);
$(".send_adYnN").css('display', 'none');
advMsgInsert();
// advMsgInsert();
}
//미리보기 이미지 영역 숨김 처리
@ -751,7 +751,7 @@ $(document).ready(function (){
//일반문자, 광고문자 텍스트 내용 추가해주기
$('input[name=send_adYn]').change(function(){
advMsgInsert();
// advMsgInsert();
});
@ -766,7 +766,7 @@ $(document).ready(function (){
var contents = $(this).val();
var adrYn = $("input[name=send_adYn]:checked").val();
if(adrYn == 'N'){
/* if(adrYn == 'N'){
if((contents.indexOf("(광고)") > -1 && (contents.indexOf("무료거부") > -1 || contents.indexOf("무료 거부") > -1))
|| contents.indexOf("(광고)") > -1){
@ -783,10 +783,10 @@ $(document).ready(function (){
}else{
fnByteString(contents);
}
} */
fnByteString(contents);
});//문자 바이트수 계산하기 끝
@ -2062,7 +2062,9 @@ $(document).ready(function (){
});
});
function advMsgInsert(){
/*
*
function advMsgInsert(){
var advStr = '<div class="ad_txt"><p>(광고)</p></div>';
var advDenyStr = '<div class="deny_txt"><p>무료거부 0808800858</p> </div>';
@ -2099,21 +2101,19 @@ function advMsgInsert(){
//문자 바이트수 계산하기
fnByteString($('#smsTxtArea').val());
}
} */
//문자 바이트수 계산하기 함수
function fnByteString(contents){
console.log(' : fnByteString : ');
var totalByte = 0;
//var content = contents;
var adverYn = $("input[name='send_adYn']:checked").val();
var adverYn = $('#send_adYn').val();
var adTxtLeng = 0;
var denyTxtLeng = 0;
var adverTxt = $('.ad_txt').html();
console.log('adverTxt : ', adverTxt);
var denyTxt = $('.deny_txt').html();
console.log('denyTxt : ', denyTxt);
// totRows = tableL.getRows().length;
totRows = tableL.getRows().length;
//광고문자 상단 문구 줄바꿈 처리하기(문자길이 바이트수 계산을 위해서)
if(typeof adverTxt !='undefined' && adverTxt != null){
@ -2259,6 +2259,7 @@ function fnByteString(contents){
fnReplCell_advc();
}else{
console.log('totRows : ', totRows);
var totalPrice = totalPriceSum(totRows);
$('#totalPrice').text(totalPrice);
$('#txtReplYn').val("N");
@ -3237,7 +3238,7 @@ function fnTestSend(){
var loginVO = '${LoginVO}';
var spamStatus = false;
var callFrom = $("#callFromList option:selected").val();
var adverYn = $("input[name='send_adYn']:checked").val(); //광고 체크여부
var adverYn = $('#send_adYn').val(); //광고 체크여부
//로그인 체크
if(loginVO == "" || loginVO == null){
@ -3890,13 +3891,22 @@ function getMjMsgSentListAll(pageNo) {
<input type="hidden" id="tabDision" value="<c:out value="${tabDision}"/>"/>
<input type="hidden" id="send_adYn" name="send_adYn" value="${tabDision eq 'tab02' ? 'Y' : 'N'}"/>
<!-- <div class="top_content current" id="tab1_1"> -->
<div class="heading">
<h2>
${tabDision eq 'tab01' ? '문자전송' : (tabDision eq 'tab02' ? '대량문자/단체문자 발송' : '')}
<div class="heading">
<h2>
<c:choose>
<c:when test="${tabDision eq 'tab01'}">
일반문자 <span class="ad_text"><i>i</i>광고성 메시지는 <a href="#none" onclick="fnMsgExcelDataView()">[대량문자]</a> 탭을 이용해주세요</span>
</c:when>
<c:otherwise>
대량문자(광고문자)
<button type="button" class="button info ad_btn" onclick="infoPop('adrvertisement1');" style="right: 128px;"><i></i>광고규정</button>
</c:otherwise>
</c:choose>
</h2>
<button type="button" class="button info" onclick="infoPop('adrvertisement1');" style="right: 128px;">광고규정</button>
<button type="button" class="button info" onclick="infoPop('selectMsgDataView1');">사용안내</button>
<button type="button" class="button info" onclick="infoPop('selectMsgDataView1');">사용안내</button>
</div>
<div class="send_general">
<div class="send_left">
@ -3917,7 +3927,7 @@ function getMjMsgSentListAll(pageNo) {
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<!-- <tr>
<th scope="row">문자분류</th>
<td class="send_cf">
<input class="send_adYnN" id="send_adYnN" type="radio"name="send_adYn" value="N" checked="checked">
@ -3925,7 +3935,7 @@ function getMjMsgSentListAll(pageNo) {
<input id="send_adYnY" type="radio" name="send_adYn" value="Y">
<label for="send_adYnY">광고</label>
</td>
</tr>
</tr> -->
<tr>
<th scope="row">발신번호</th>
<td class="put_num">
@ -3972,14 +3982,30 @@ function getMjMsgSentListAll(pageNo) {
<ul class="thumb_wrap liOnImg"></ul>
<!-- //업로드한 이미지의 썸네일 영역 -->
<label for="smsTxtArea" class="label"></label>
<c:if test="${tabDision eq 'tab02'}">
<div class="ad_txt"><p>(광고)</p></div>
</c:if>
<textarea id="smsTxtArea" name="smsTxtArea" class="put_text"></textarea>
<div class="text_length">
<c:if test="${tabDision eq 'tab02'}">
<div class="deny_txt"><p>무료거부 0808800858</p> </div>
</c:if>
<div name="afterDeny">
<p>
<span class="fwMd" id="msgLeng">0 /</span>
<span class="c_002c9a fwMd" id="limitLeng"> 90</span>byte
</p>
<span class="msg_com msg_short">단문</span>
<p>
<span class="fwMd" id="msgLeng">
<c:choose>
<c:when test="${tabDision eq 'tab02'}">
27
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose> /
</span>
<span class="c_002c9a fwMd" id="limitLeng"> 90</span>byte
</p>
<span class="msg_com msg_short">단문</span>
</div>
</div>
</div>
@ -4309,8 +4335,18 @@ function getMjMsgSentListAll(pageNo) {
<div class="text_preview">
<div class="preiew_img preViewShort"></div>
<div class="preview_auto">
<p class="none_txt">내용을 입력해주세요.</p>
<pre class="realtime"></pre>
<c:choose>
<c:when test="${tabDision eq 'tab02'}">
<p class="ad_tit">(광고)</p>
<p class="none_txt"></p>
<pre class="realtime"></pre>
<p class="deny_receipt">무료거부 0808800858</p>
</c:when>
<c:otherwise>
<p class="none_txt">내용을 입력해주세요.</p>
<pre class="realtime"></pre>
</c:otherwise>
</c:choose>
</div>
</div>
<!-- //텍스트 미리보기 -->

View File

@ -80,15 +80,15 @@
<!-- tab button -->
<ul class="tabType1">
<li class="tab ${tabDision eq 'tab01' ? 'active' : ''}">
<button type="button" onclick="javascript:fnMsgDataView(); return false;">단문 · 장문 · 그림 문자</button>
<button type="button" onclick="javascript:fnMsgDataView(); return false;">일반문자</button>
</li>
<li class="tab ${tabDision eq 'tab02' ? 'active' : ''}">
<button type="button" onclick="javascript:fnMsgExcelDataView(); return false;">대량 문자</button>
<button type="button" onclick="javascript:fnMsgExcelDataView(); return false;">대량문자(광고문자)</button>
</li>
</ul><!--// tab button -->
<!-- tab content1 -->
<!-- <span id="contentArea"></span> -->
<div class="top_content current contentArea" id="tab1_1" style="min-height: 555px;"></div>
<div class="top_content ${tabDision eq 'tab02' ? 'get_excel' : ''} current contentArea" id="tab1_1" style="min-height: 555px;"></div>
<!-- tab content2 -->
<!-- <span id="contentExcelArea"></span> -->

View File

@ -737,7 +737,8 @@ function fn_saveMyMsg(){ // 내 문자 보관함 저장
var form = document.msgForm;
var myImgFileId = []; //신규 이미지 추가 파일 Id 저장 변수
var adverYn = $("input[name='send_adYn']:checked").val(); //광고 체크여부
// var adverYn = $("input[name='send_adYn']:checked").val(); //광고 체크여부
var adverYn = $('#send_adYn').val(); //광고 체크여부
/*
이미지 에디터를 사용하여 추가한 경우 이미지 업로드 처리 - 에디터에서 템플릿을 선택한 경우는 업로드안함
@ -1132,7 +1133,8 @@ function fn_sendMsgData(){
form.callFrom.value = removeDash($('#callFromList').val()); // 발신번호 대쉬(-) 문자 없애주기
//광고 종류 설정
var adverYn = $("input[name='send_adYn']:checked").val();
// var adverYn = $("input[name='send_adYn']:checked").val();
var adverYn = $('#send_adYn').val();
if(adverYn == 'Y'){
form.msgKind.value = "A"; //광고문자 종류 설정
}else{