테스트 문자 진행중
This commit is contained in:
parent
fbfd2de670
commit
bd994861a5
@ -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
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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>
|
||||
|
||||
|
||||
|
||||
|
||||
318
src/main/webapp/WEB-INF/jsp/web/pop/testSmsSendPop.jsp
Normal file
318
src/main/webapp/WEB-INF/jsp/web/pop/testSmsSendPop.jsp
Normal 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>
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user