테스트 문자 진행중

This commit is contained in:
hehihoho3@gmail.com 2025-01-09 15:29:54 +09:00
parent fbfd2de670
commit bd994861a5
5 changed files with 375 additions and 10 deletions

View File

@ -5707,6 +5707,56 @@ public class MjonMsgDataController {
return "/web/pop/testSendPop";
}
/* 테스트 발송 팝업 */
@RequestMapping(value="/web/pop/testSmsSendPop.do")
public String testSmsSendPop(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, HttpServletRequest request, Model model) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
String msgpreview = request.getParameter("msgpreview");
String mmsSubject = request.getParameter("mmsSubject");
String callFrom = request.getParameter("callFrom");
String eachPrice = request.getParameter("eachPrice");
model.addAttribute("msgpreview", msgpreview);
model.addAttribute("mmsSubject", mmsSubject);
model.addAttribute("callFrom", callFrom);
model.addAttribute("eachPrice", eachPrice);
model.addAttribute("searchVO", searchVO);
MberManageVO mberManageVO = new MberManageVO();
if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
searchVO.setUserId(userId);
}
//3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용
BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN);
String userPoint = mberManageVO.getUserPoint();
model.addAttribute("mberManageVO", mberManageVO);
model.addAttribute("userMoney", userMoney);
model.addAttribute("userPoint", userPoint);
//0.이벤트 진행중이 회원 정보 불러오기.
//이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다.
MjonEventVO mjonEventVO = new MjonEventVO();
mjonEventVO.setMberId(userId);
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
model.addAttribute("eventMberInfo", eventMberInfo);
// return "/web/pop/testSendPop";
return "/web/pop/testSmsSendPop";
}
/**
* 문자 발송 - 엑셀파일 불러오기
* @param body

View File

@ -3424,7 +3424,7 @@ function fnTestSend(){
form.msgKind.value = "N";
}
form.action = "/web/pop/testSendPop.do";
form.action = "/web/pop/testSmsSendPop.do";
form.method = "post";
window.open("about:blank", 'testSendPop', 'width=770, height=850, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
form.target = "testSendPop";

View File

@ -28,8 +28,8 @@ $(document).ready(function(){
</script>
<script type="text/javascript" src="<c:url value='/js/web/msgdata/init.js?date=20241218'/>"></script>
<script type="text/javascript" src="<c:url value='/js/web/msgdata/msgDataView.js?date=20241218'/>"></script>
<script type="text/javascript" src="<c:url value='/js/web/msgdata/init.js?date=20241218'/>"></script>

View File

@ -0,0 +1,318 @@
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
<script type="text/javascript" src="<c:url value='/js/txtSpecialReplace.js?date=202209210001'/>"></script>
<script type="text/javascript" src="<c:url value='/js/MJUtill.js'/>"></script>
<script>
$(document).ready(function (){
var phoneIn = $(".send_right .phone", opener.document).html();
//팝업으로 보내기 전에 realtime class 삭제 - 스크립트 제외
phoneIn = phoneIn.replace(' class="realtime"',"");
// DOM 구조로 변환
var tempDiv = document.createElement("div");
tempDiv.innerHTML = phoneIn;
// 미리보기 영역 삭제
var realtimeElement = tempDiv.querySelector(".preview_util");
if (realtimeElement) {
realtimeElement.remove();
}
// 최종 수정된 HTML 반환
phoneIn = tempDiv.innerHTML.trim();
$("#phonePreview").html(phoneIn)
});
//문자발송 처리 함수
function fn_testSendMsgData(){
var form = document.msgForm;
//회원 보유 잔액 비교
var totPriceOnly = stringReplaceAll(form.totPrice.value, ",", "");
var userMoneyOnly = stringReplaceAll(form.myPrice.value, ",", "");
if(parseFloat(userMoneyOnly) < parseFloat(totPriceOnly)){
alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
return false;
}
//이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요.
var eventStatus = form.eventStatus.value;
var eventRemainCash = parseFloat(form.eventRemainCash.value);
if(eventStatus == 'Y'){
if(parseFloat(eventRemainCash) < parseFloat(totPriceOnly)){
alert("고객님의 이벤트 캐시 잔액은 " + eventRemainCash + "원으로 입력하신 수량의 문자를 전부 발송할 수 없습니다. 잔액 이하로 발송건수를 재설정하시기 바랍니다.");
return false;
}
//이벤트 발송 문자 종류로 셋팅
form.eventYn.value = "Y"; //이벤트문자 종류 설정
}
if(confirm("테스트 문자를 전송하시겠습니까?")){
var imgFilePath = [];
var imgFileId = [];
var templateYn = [];
// $('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
$('.preiew_img').find('.preBoxF').each(function(idx, el) {
var imgSrc = $(el).find("img").attr("src");
//if($(el).hasClass("edit_y")) {
//에디터에서 넘어온 이미지인지 확인, 해당 문자열이 없으면 -1 반환
if(imgSrc.indexOf('base64') > 0) {
//이미지 변환
const imgBase64 = $(el).find("img").attr("src");
const decodImg = atob(imgBase64.split(',')[1]); // base64~ 부분을 제외하고 데이터 디코딩
let array = [];
for (let i = 0; i < decodImg.length; i++) {
array.push(decodImg.charCodeAt(i));
}
const file = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
const fileName = 'canvas_img_' + new Date().getMilliseconds() + '.jpg';
let formData = new FormData();
formData.append('file', file, fileName);
$.ajax({
type: 'post',
url: '/web/mjon/msgdata/insertEditImageAjax.do',
cache: false,
data: formData,
dataType:'json',
processData: false,
contentType: false,
async: false,
success: function (returnData, status) {
if(status == 'success'){
// imgFilePath 에 배열로 담아주기(이미지 순서대로)
//console.log(imgFilePath);
imgFilePath.push(returnData.filefullPath);
imgFileId.push(returnData.atchFileId);
templateYn.push('N');
} else if(status== 'fail'){
alert(returnData.message);
}
},
error: function (e) { alert("이미지 업로드에 실패하였습니다."); console.log("ERROR : ", e); }
});
} else {
var fileId = imgSrc.substring(imgSrc.indexOf("=")+1, imgSrc.indexOf("&"));
//에디터 안거친 템플릿 이미지면 바로 src 때림
imgFilePath.push(imgSrc);
imgFileId.push(fileId);
templateYn.push('Y');
}
});
form.templateYnAdvc.value = templateYn; // 템플릿 사용여부 담아주기
form.imgFilePathAdvc.value = imgFilePath; // 저장한 이미지 경로 담아주기
form.imgFileIdAdvc.value = imgFileId;
// form.templateYn.value = templateYn; // 템플릿 사용여부 담아주기
// form.imgFilePath.value = imgFilePath; // 저장한 이미지 경로 담아주기
// form.imgFileId.value = imgFileId;
form.callFrom.value = removeDash(form.callFrom.value); // 발신번호 대쉬(-) 문자 없애주기
form.reserveYn.value = "N"; // 즉시 / 예약 문자 선택 여부
//광고, 선거문자 후처리
var msgKind = form.msgKind.value;
form.smsTxt.value = $(".preview_auto").find("pre").text();
/* if(msgKind == 'A') { //광고
var adTxt = $('.ad_tit').text();
var denyTxt = $('.deny_receipt').text();
form.smsTxt.value = adTxt + $(".preview_auto").find("pre").text() + '\n' + denyTxt + " "; //광고 문구 뒤에 공백을 붙이게되므로, 뒤에 한칸 추가하여 바이트수를 맞춤
} else if (msgKind == 'C') { //선거문자
var adTxt = '';
var denyTxt = '';
var adverYn = opener.document.msgForm.send_adYn.value;
//선거문자 20건 발송에서는 선거 필수문구가 필수가 아니어서 선거문자 필수 문구가 있는지 체크하여 처리함.20231214 추가
if(adverYn == 'Y'){
adTxt = $('.ad_tit').text();
denyTxt = $('.deny_receipt').html();
denyTxt = denyTxt.replaceAll("<br>","\n");
}
form.smsTxt.value = adTxt + '\n' + $(".preview_auto").find("pre").text() + '\n' + denyTxt;
} else { //일반문자
form.smsTxt.value = $(".preview_auto").find("pre").text();
} */
console.log('form : ',form)
// 폼 데이터를 배열로 직렬화
var form = $('#msgForm');
var formDataArray = form.serializeArray();
// 배열을 객체로 변환
var formData = {};
$.each(formDataArray, function(index, field) {
formData[field.name] = field.value;
});
formData.mjonMsgSendVOList = [
{
phone: formData.callToList
}
];
// 기존 callToList 제거
delete formData.callToList;
// JSON 데이터 확인
console.log("최종 formData:", JSON.stringify(formData, null, 4));
// return false;
// var data = new FormData(form);
// url = "/web/mjon/msgdata/sendMsgDataAjax.do";
var url = "/web/mjon/msgdata/sendMsgDataAjax_advc.do";
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(formData),
dataType:'json',
// async: false,
// processData: false,
// contentType: false,
// cache: false,
success: function (returnData, status) {
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
if("fail" == returnData.result){
alert(returnData.message);
return false;
}else if("loginFail" == returnData.result){
alert(returnData.message);
return false;
}else if("smsLengFail" == returnData.result){
alert(returnData.message);
return false;
}else if("imgSourceFail" == returnData.result){
alert(returnData.message);
}else{
var resultCnt = returnData.resultSts;
var resultBlockCnt = returnData.resultBlockSts;
//차단한 번호 제외하고 발송건수가 1 미만인 경우는 발송이 안된 것
if(resultCnt < 1) {
alert("테스트 문자가 발송되지 않았습니다. \n"+ resultBlockCnt + "건의 번호가 수신거부 상태입니다.");
} else if (resultCnt >= 1) {
alert("테스트 문자가 발송되었습니다.");
}
//내 충전금액 변경해 주기 - 헤더, 충전금액 두군데 수정
var afterCash = opener.numberWithCommas(returnData.afterCash);
//$("#hdUserMoney").text(afterCash); // 헤더 보유잔액 부분
//$("#spUserMoney").text(afterCash); // 문자발송 내 충전금
//$("#userMoney").attr('placeholder', afterCash); // 문자발송 내 충전금
$("#hdUserMoney",opener.document).text(afterCash); // 헤더 보유잔액 부분
$("#spUserMoney",opener.document).text(afterCash); // 문자발송 내 충전금
$("#userMoney",opener.document).text(afterCash); // 문자발송 내 충전금
$("#userMoney",opener.document).attr('placeholder', afterCash); // 문자발송 내 충전금
window.close();
}
} else if(status== 'fail'){
alert(returnData.message);
}
},
error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
}
</script>
<form id="msgForm" name="msgForm" method="post">
<input type="hidden" id="msgKind" name="msgKind" value="${searchVO.msgKind}" /><!-- 문자종류(일반:N, 광고:A , 선거:C,관리자:S) -->
<input type="hidden" id="msgType" name="msgType" value="${searchVO.msgType}" /><!-- 문자 종류 : 단문 - 4, 장문/그림 - 6 -->
<input type="hidden" id="imgFilePath" name="imgFilePath" value="" /><!-- 선택 이미지 파일 경로 정보 , 로 구분 최대 3장까지 -->
<input type="hidden" id="imgFilePathAdvc" name="imgFilePathAdvc" value="" /><!-- 선택 이미지 파일 경로 정보 , 로 구분 최대 3장까지 -->
<input type="hidden" id="imgFileId" name="imgFileId" value="" /><!-- 선택 이미지 파일 아이디 정보 , 로 구분 최대 3장까지 -->
<input type="hidden" id="imgFileIdAdvc" name="imgFileIdAdvc" value="" /><!-- 선택 이미지 파일 아이디 정보 , 로 구분 최대 3장까지 -->
<input type="hidden" id="fileCnt" name="fileCnt" value="0" /><!-- 첨부파일 추가 갯수 -->
<input type="hidden" id="mmsSubject" name="mmsSubject" value="${mmsSubject}"/> <!-- mms 제목 -->
<input type="hidden" id="callFrom" name="callFrom" value="${callFrom}"/> <!-- 발신자 전화번호 -->
<input type="hidden" id="eachPrice" name="eachPrice" value="${eachPrice}"/> <!-- 문자 개별 단가 금액 -->
<input type="hidden" id="totPrice" name="totPrice" value="${eachPrice}"/> <!-- 총 결제 금액 -->
<input type="hidden" id="smsLen" name="smsLen" value="0"/> <!-- 문자 길이 정보 -->
<input type="hidden" id="reserveYn" name="reserveYn" value="N"/> <!-- 즉시/예약 선택여부 -->
<input type="hidden" id="reqDate" name="reqDate" value=""/><!-- 예약문자 날짜 -->
<input type="hidden" id="imgCnt" value="0" />
<input type="hidden" id="templateYn" name="templateYn" value="" />
<input type="hidden" id="templateYnAdvc" name="templateYnAdvc" value="" />
<input type="hidden" id="smsTxt" name="smsTxt" value=""/><!-- 문자발송 문자 내용 -->
<input type="hidden" id="myPrice" name="myPrice" value="<c:out value="${userMoney}"/>"/><!-- 보유 캐시금액 -->
<input type="hidden" id="txtReplYn" name="txtReplYn" value="N"/><!-- 변환문자 유무 -->
<!-- <input type="hidden" id="shortMsgCnt" name="shortMsgCnt" value="0"/> --><!-- 단문 변환문자 건수 -->
<!-- <input type="hidden" id="longMsgCnt" name="longMsgCnt" value="0"/> --><!-- 장문 변환문자 건수 -->
<!-- 이벤트 관련 변수 -->
<input type="hidden" id="eventStatus" name="eventStatus" value="<c:out value='${eventMberInfo.eventStatus}'/>"/>
<input type="hidden" id="eventRemainCash" name="eventRemainCash" value="<c:out value='${eventMberInfo.eventRemainCash}'/>"/>
<input type="hidden" id="eventYn" name="eventYn" value="N"/>
<div class="test_sendpop">
<div class="info_popup">
<div class="popup_heading">
<p>테스트 발송</p>
</div>
<div class="layer_in">
<ul class="info_list">
<li>테스트 발송은 문자를 본인에게 발송하여 문자내용을 미리 확인하는 서비스 입니다.</li>
</ul>
</div>
</div>
<div class="test_wrap">
<div class="number">
<dl>
<dt>수신번호</dt>
<dd><input type="text" name="callToList" id="callToList" value="${mberManageVO.moblphonNo}"/></dd>
</dl>
<dl class="price">
<dt>발송금액</dt>
<dd><span>${eachPrice}</span>원</dd>
</dl>
<p class="text">발송하시겠습니까?<span>※ 문자 발송과 동일하게 요금이 차감됩니다.</span></p>
<button type="button" class="btnType btnType10" onclick="fn_testSendMsgData(); return false;">테스트발송</button>
</div>
<div class="phone" id="phonePreview"></div>
</div>
</div>
</form>

View File

@ -1127,10 +1127,6 @@ function fn_sendMsgData(){
//form.reserveYn.value = reserYn; // 즉시 / 예약 문자 선택 여부
form.templateYnAdvc.value = templateYn;
console.log('imgFilePath : ', imgFilePath);
console.log('imgFilePath : ', JSON.stringify(imgFilePath));
console.log('imgFileId : ', imgFileId);
console.log('imgFileId : ', JSON.stringify(imgFileId));
form.imgFilePathAdvc.value = imgFilePath;
form.imgFileIdAdvc.value = imgFileId;
// form.imgFilePath.value = JSON.stringify(imgFilePath).replace(/\\/g, '');
@ -1232,8 +1228,9 @@ function sendMsgAjax_advc(){
formData["mjonMsgSendVOList"] = $selectedData;
// JSON 데이터 확인
// console.log("최종 formData:", JSON.stringify(formData));
console.log("최종 formData:", JSON.stringify(formData));
//
return false;
var url = "/web/mjon/msgdata/sendMsgDataAjax_advc.do";
// 시작 시간
@ -1254,7 +1251,7 @@ function sendMsgAjax_advc(){
success: function (data) {
// 요청 종료 시간 및 경과 시간 계산
const endTime = new Date();
/*const endTime = new Date();
const elapsed = (endTime - startTime) / 1000; // 밀리초 -> 초로 변환
console.log('AJAX 요청 성공, 경과 시간 : ', elapsed);
if (elapsed >= 60) {
@ -1264,7 +1261,7 @@ function sendMsgAjax_advc(){
} else {
console.log('AJAX 요청 성공, 경과 시간 : ' + elapsed + '초');
}
*/
console.log('data : ', data);