This commit is contained in:
wyh 2024-11-11 09:16:50 +09:00
commit 50e5811b9b
10 changed files with 4778 additions and 4627 deletions

View File

@ -0,0 +1,20 @@
package itn.com.cmm;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class MjonMsgTabulVO{
private static final long serialVersionUID = 1L;
private String name;
private String phone;
private String rep1;
private String rep2;
private String rep3;
private String rep4;
}

File diff suppressed because it is too large Load Diff

View File

@ -3987,7 +3987,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
@Override
public StatusResponse sendMsgData_advc(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception {
log.info(" :: sendMsgData_advc :: ");
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
@ -4000,34 +4000,57 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
//발신번호가 등록된 유효한 번호인지 확인
int sendCallFromCnt = mjonMsgDAO.selectCallFromNumberChk(mjonMsgVO);
log.info("sendCallFromCnt :: [{}]", sendCallFromCnt);
System.out.println("sendCallFromCnt : "+ sendCallFromCnt);
if(sendCallFromCnt < 1) {
return new StatusResponse(HttpStatus.BAD_REQUEST, "등록된 발신번호를 찾을 수 없습니다.");
}
/**
* 회원 정지된 상태이면 문자 발송이 안되도록 처리함
* 현재 로그인 세션도 만료 처리함
* */
boolean mberSttus = userManageService.selectUserStatusInfo(userId);
if(!mberSttus) {
request.getSession().invalidate();
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고
return new StatusResponse(HttpStatus.UNAUTHORIZED, "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
request.getSession().invalidate();
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고
return new StatusResponse(HttpStatus.UNAUTHORIZED, "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
}
String smsTxt = mjonMsgVO.getSmsTxtArea();
// 광고문자면 처리 - 광고 A
if("A".equals(mjonMsgVO.getMsgKind())) {
smsTxt = "(광고)"+smsTxt
+"\n"+"무료거부 0808800858";
}
log.debug(" :: smsTxt :: [{}]", smsTxt);
StatusResponse statusResponse = new StatusResponse();
mjonMsgVO = setImagesSetting(mjonMsgVO, statusResponse);
if(mjonMsgVO == null) {
return statusResponse;
}
log.debug(" + mjonMsgVO.getFileCnt() :: [{}]", mjonMsgVO.getFileCnt());
//////////////////////////////////
//////////////////////////////////
//////////////////////////////////
if(true) {
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 테스트 실패");
}
//////////////////////////////////
//////////////////////////////////
//////////////////////////////////
/*
* 어디에 사용하는지 모르겠음
* set 후에 사용하는 곳이 없음
* //회원정보에서 스미싱 회원 여부 정보 조회
UserManageVO userManageVO = new UserManageVO();
userManageVO.setMberId(userId);
UserManageVO resultUserVO = userManageService.selectSmishingYnUserInfo(userManageVO);
String smishingYn = resultUserVO.getSmishingYn();
mjonMsgVO.setSmishingYn(smishingYn);
*/
* 화면에서 넘어오는 단가 금액 결제 캐시 금액 체크 해주기
* 검증을 위해서 시스템 단가, 회원 협의 단가, 이벤트 단가 정보 조회
* 조회 단가를 이용하여 결제 캐시 금액 계산
* 파라미터로 넘어온 개별단가(eachPrice), 결제캐시(totPrice) 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌.
*/
int smsTxtByte = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt());
if(smsTxtByte > 2000) {
@ -4040,74 +4063,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다.");
}
mjonMsgVO.setMsgType(msgType);
int fileCount = 0;
// 장문 메시지일 경우 + 그림 이미지가 첨부된 경우
if (msgType.equals("6")
&& mjonMsgVO.getImgFilePath() != null
&& mjonMsgVO.getImgFilePath().length > 0
)
{
//그림 이미지가 첨부된 경우
String[] path = mjonMsgVO.getImgFilePath();
String[] fileId = mjonMsgVO.getImgFileId();
String[] templateYn = mjonMsgVO.getTemplateYn();
for(int i=0; i<path.length; i++) {
if("Y".equals(templateYn[i])) {
//템플릿 사용누계 증가
letterDAO.updateTemplateUseCount(fileId[i]);
}
String imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(fileId[i]);
if (StringUtils.isEmpty(imgFilePath)) {
return new StatusResponse(HttpStatus.NO_CONTENT, "문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다.");
}
switch (i) {
case 0:
mjonMsgVO.setFileName1(imgFilePath);
break;
case 1:
mjonMsgVO.setFileName2(imgFilePath);
break;
default:
mjonMsgVO.setFileName3(imgFilePath);
break;
}
fileCount ++;
//첨부파일 갯수 셋팅해주기
mjonMsgVO.setFileCnt(Integer.toString(fileCount));
}
}
// 파일 갯수는 있는데 파일 경로가 없는 경우 문자발송이 안되도록 튕겨내도록 - 20220520 우영두
// 리펙토링 20240930 이호영
// StatusResponse returnStatusResponse = MsgSendUtils.validateFilesForMessageSending(fileCount, mjonMsgVO);
// if (returnStatusResponse != null) {
// return returnStatusResponse;
// }
/*
* 화면에서 넘어오는 단가 금액 결제 캐시 금액 체크 해주기
* 검증을 위해서 시스템 단가, 회원 협의 단가, 이벤트 단가 정보 조회
* 조회 단가를 이용하여 결제 캐시 금액 계산
* 파라미터로 넘어온 개별단가(eachPrice), 결제캐시(totPrice) 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌.
*/
MjonEventVO mjonEventVO = new MjonEventVO();
@ -4176,7 +4132,6 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
////////////////////////////////////////////////
// 치환 여부
////////////////////////////////////////////////
StatusResponse statusResponse = new StatusResponse();
if (MsgSendUtils.isReplacementRequired(mjonMsgVO)) {
if (!MsgSendUtils.validateReplacementData(mjonMsgVO, statusResponse)) {
@ -4204,6 +4159,108 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
return statusResponse;
}
private MjonMsgVO setImagesSetting(MjonMsgVO mjonMsgVO, StatusResponse statusResponse) throws Exception {
int fileCount = 0;
// 장문 메시지일 경우 + 그림 이미지가 첨부된 경우
//
if (mjonMsgVO.getMsgType().equals("6")
&& mjonMsgVO.getImgFilePathAdvc() != null
&& mjonMsgVO.getImgFileIdAdvc() != null
)
{
//그림 이미지가 첨부된 경우
String[] path;
if(mjonMsgVO.getImgFilePathAdvc().contains(",")) {
path = mjonMsgVO.getImgFilePathAdvc().split(",");
}else {
path = new String[1]; // 크기 1의 배열로 초기화
path[0] = mjonMsgVO.getImgFilePathAdvc();
}
String[] fileId = null;
if(mjonMsgVO.getImgFileIdAdvc().contains(",")) {
fileId = mjonMsgVO.getImgFileIdAdvc().split(",");
}else {
fileId = new String[1]; // 크기 1의 배열로 초기화
fileId[0] = mjonMsgVO.getImgFileIdAdvc();
}
String[] templateYn = null;
if(mjonMsgVO.getTemplateYnAdvc().contains(",")) {
templateYn = mjonMsgVO.getTemplateYnAdvc().split(",");
}else {
templateYn = new String[1]; // 크기 1의 배열로 초기화
templateYn[0] = mjonMsgVO.getTemplateYnAdvc();
}
for(int i=0; i<path.length; i++) {
if("Y".equals(templateYn[i])) {
//템플릿 사용누계 증가
letterDAO.updateTemplateUseCount(fileId[i]);
}
String imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(fileId[i]);
if (StringUtils.isEmpty(imgFilePath)) {
statusResponse.setStatus(HttpStatus.NO_CONTENT);
statusResponse.setMessage("문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다.");
return null;
}
switch (i) {
case 0:
mjonMsgVO.setFileName1(imgFilePath);
break;
case 1:
mjonMsgVO.setFileName2(imgFilePath);
break;
default:
mjonMsgVO.setFileName3(imgFilePath);
break;
}
fileCount ++;
}
}
//첨부파일 갯수 셋팅해주기
mjonMsgVO.setFileCnt(Integer.toString(fileCount));
return mjonMsgVO;
}
// 그림 문자 발송 처리 메서드

View File

@ -42,6 +42,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@ -50,6 +51,7 @@ import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.support.SessionStatus;
@ -58,6 +60,8 @@ import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.fasterxml.jackson.databind.ObjectMapper;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.psl.dataaccess.util.EgovMap;
@ -65,6 +69,7 @@ import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.JsonResult;
import itn.com.cmm.LoginVO;
import itn.com.cmm.MjonMsgTabulVO;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO;
@ -2792,7 +2797,7 @@ public class MjonMsgDataController {
imgMsgVO.setRep4List(imgRep4);
//개별단가 계산하기
String eachPrice = imgMsgVO.getpPrice();
String eachPrice = imgMsgVO.getPPrice();
//api 서버에서 pPrice 값이 없는 경우가 있어서 오류 방지를위해서 추가
if(eachPrice == null) {
@ -2815,7 +2820,7 @@ public class MjonMsgDataController {
eachPrice = mjonMsgVO.getP2Price();
}else if(fileCount == 1) {//그림 이미지가 1개
eachPrice = mjonMsgVO.getpPrice();
eachPrice = mjonMsgVO.getPPrice();
}
@ -2843,7 +2848,7 @@ public class MjonMsgDataController {
shortMsgVO.setRep4List(shortRep4);
//개별단가 계산하기
String eachPrice = shortMsgVO.getsPrice();
String eachPrice = shortMsgVO.getSPrice();
//api 서버에서 sPrice 값이 없는 경우가 있어서 오류 방지를위해서 추가
if(eachPrice == null) {
@ -2866,7 +2871,7 @@ public class MjonMsgDataController {
eachPrice = mjonMsgVO.getP2Price();
}else if(fileCount == 1) {//그림 이미지가 1개
eachPrice = mjonMsgVO.getpPrice();
eachPrice = mjonMsgVO.getPPrice();
}
@ -2902,7 +2907,7 @@ public class MjonMsgDataController {
* 그림문자의 경우 이로직을 타지 않지만 혹시 몰라서 추가해놓음
* */
String eachPrice = longMsgVO.getmPrice();
String eachPrice = longMsgVO.getMPrice();
//api 서버에서 mPrice 값이 없는 경우가 있어서 오류 방지를위해서 추가
if(eachPrice == null) {
@ -2920,7 +2925,7 @@ public class MjonMsgDataController {
eachPrice = mjonMsgVO.getP2Price();
}else if(fileCount == 1) {//그림 이미지가 1개
eachPrice = mjonMsgVO.getpPrice();
eachPrice = mjonMsgVO.getPPrice();
}
@ -3159,14 +3164,19 @@ public class MjonMsgDataController {
* @return "/web/mjon/msgdata/sendMsgDataAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgdata/sendMsgDataAjax_advc.do"})
public ResponseEntity<StatusResponse> sendMsgData_advc(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
RedirectAttributes redirectAttributes,
HttpServletRequest request,
ModelMap model) throws Exception{
@RequestMapping(value = "/web/mjon/msgdata/sendMsgDataAjax_advc.do")
public ResponseEntity<StatusResponse> sendMsgData_advc(
@RequestBody MjonMsgVO mjonMsgVO,
HttpServletRequest request,
ModelMap model) throws Exception {
// 디버깅 출력
System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgTabulListVO().toString());
System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgTabulListVO().size());
return ResponseEntity.ok().body(mjonMsgDataService.sendMsgData_advc(mjonMsgVO, request)) ;
// return null;
}

View File

@ -31,7 +31,7 @@
<logger name="org.quartz.core.QuartzSchedulerThread" level="OFF"></logger>
<logger name="log4jdbc.debug" level="OFF"></logger>
<Root level="OFF">
<Root level="DEBUG">
<AppenderRef ref="console" />
</Root>

View File

@ -3777,7 +3777,9 @@ function getMjMsgSentListAll(pageNo) {
<form id="msgForm" name="msgForm" method="post">
<input type="hidden" id="msgType" name="msgType" value="4" /><!-- 문자 종류 : 단문 - 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="callToList" name="callToList" value=""/><!-- 수신자 전화번호 리스트 -->
<input type="hidden" id="callFrom" name="callFrom" value=""/> <!-- 발신자 전화번호 -->
@ -3794,6 +3796,7 @@ function getMjMsgSentListAll(pageNo) {
<input type="hidden" id="rep3List" name="rep3List" value=""/><!-- 문자발송 문자 치환3 리스트 -->
<input type="hidden" id="rep4List" name="rep4List" value=""/><!-- 문자발송 문자 치환4 리스트 -->
<input type="hidden" name="templateYn" />
<input type="hidden" name="templateYnAdvc" />
<input type="hidden" id="sPrice" name="sPrice" value="<c:out value="${shortPrice}"/>"/><!-- 단문문자 단가 -->
<input type="hidden" id="mPrice" name="mPrice" value="<c:out value="${longPrice}"/>"/><!-- 장문문자 단가 -->
<input type="hidden" id="pPrice" name="pPrice" value="<c:out value="${picturePrice}"/>"/><!-- 그림문자 단가 -->
@ -4055,7 +4058,7 @@ function getMjMsgSentListAll(pageNo) {
placeholder="번호를 입력하세요"
onfocus="this.placeholder=''"
onblur="this.placeholder='번호를 입력하세요'"
style="width:340px;"></textarea>
style="width:340px;">01083584250</textarea>
<!-- <button type="button" class="btnType btnType6">번호추가</button> -->
<div class="btn_popup_wrap">
<button type="button" class="btnType btnType6 btn_add_number addCallToF">번호추가<i class="qmMark"></i></button>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1055,10 +1055,13 @@ function fn_sendMsgData(){
var totPriceOnly = stringReplaceAll(form.totPrice.value, ",", "");
var userMoneyOnly = stringReplaceAll(form.myPrice.value, ",", "");
// test 주석
/*
if(parseFloat(userMoneyOnly) < parseFloat(totPriceOnly)){
alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
return false;
}
}
*/
// 폼 유효성 검사
if (!validateForm(form)) return false;
@ -1075,607 +1078,223 @@ function fn_sendMsgData(){
}
}
//MJ_MSG_GROUP_DATA 누락데이터 체크
//if (getMsgGroupDataErrorCheck() == false) {
// alert("고객님께서 발송한 최근문자가 발송결과에 표시되지않아, 문자발송이 임시로 차단되었습니다.\n문자온 고객센터에 문의해주세요.");
// return false;
//}
if(!confirm("문자를 전송하시겠습니까?")){
return false;
}
//총 결제금액 천단위 콤마 삭제 후 전송
var totPrice = form.totPrice.value;
form.totPrice.value = totPrice.replace(",","");
//이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요.
//이벤트 캐시가 부족한 경우 이벤트 캐시로 발송 가능한 만큼만 이벤트 금액으로 발송 처리해줌.
//이 후 나머지 발송 건수는 이벤트 캐시가 아닌 일반 단가로 발송 처리를 진행 함.
var eventStatus = form.eventStatus.value;
//광고 문자 내용 합쳐주기
if(eventStatus == 'Y'){ //이벤트 진행 대상자이면 문자종류에 이벤트로 구분
form.eventYn.value = "Y"; //이벤트문자 종류 설정
}
var eventRemainCash = parseFloat(form.eventRemainCash.value);
console.log('eventStatus : ', eventStatus);
if(eventStatus == 'Y'
&& parseFloat(eventRemainCash) < parseFloat(totPriceOnly))
{
if(!confirm("고객님의 이벤트 캐시 잔액(" + eventRemainCash + "원) 부족으로 요청하신 문자("+numberWithCommas($selectedData.length)+"건)를 모두 발송할 수 없습니다. 이벤트 캐시 초과 건에 대해서는 일반 단가를 적용하여 발송하시겠습니까?")){
return false;
}
}
console.log(' !!! imgFilePath : ', imgFilePath);
// img 처리 영역
imgFilePath = [];
$('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
if($("#delLi"+idx).hasClass("Template")){
templateYn.push("Y");
} else {
templateYn.push("N");
}
if($(el).hasClass("edit_y")) {
//이미지 변환
const imgBase64 = $(el).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'){
console.log('returnData : ',returnData)
// imgFilePath 에 배열로 담아주기(이미지 순서대로)
//console.log(imgFilePath);
imgFilePath.push(returnData.filefullPath);
imgFileId.push(returnData.atchFileId);
} else if(status== 'fail'){
alert(returnData.message);
}
},
error: function (e) { alert("이미지 업로드에 실패하였습니다."); console.log("ERROR : ", e); }
});
} else {
if(imgFilePath.length != imgFileId.length){
//에디터 안거친 템플릿 이미지면 바로 src 때림
imgFilePath.push($(el).attr("src"));
}
}
});
//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, '');
// form.imgFileId.value = JSON.stringify(imgFileId).replace(/\\/g, '');
form.callFrom.value = removeDash($('#callFromList').val()); // 발신번호 대쉬(-) 문자 없애주기
//광고 종류 설정
var adverYn = $("input[name='send_adYn']:checked").val();
if(adverYn == 'Y'){
form.msgKind.value = "A"; //광고문자 종류 설정
}else{
form.msgKind.value = "N"; //일반문자 종류 설정
}
//수신번호 리스트 체크하기
var numCnt = 0;
var nameList = []; //치환문자 이름
var phoneNum = []; //받는사람
var rep1List = []; //치환문자1
var rep2List = []; //치환문자2
var rep3List = []; //치환문자3
var rep4List = []; //치환문자4
var selectedData = tableL.getRows();
/*
var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
if(reserYn == 'Y'){
var date = $(".resDate").val();//form.msgResDate.value;
var hour = form.msgResHour.value;
var min = form.msgResMin.value;
if(date == ""){
alert("예약전송 날짜를 선택해 주세요.");
return false;
}else{
var now = new Date();
var reqDate = date + " " + hour + ":" + min + ":00";
var gapDate = getGapDayTime(date, hour, min);
if(gapDate < 0){ // 음수이면 이전날짜, 크면 이후 날짜.
alert("예약 날짜는 현재 시간 이후의 날짜 및 시간을 선택해 주세요.");
return false;
}else{
form.reqDate.value = reqDate; //예약일자 파라미터 저장
}
}
}else{
form.reqDate.value = "";
} */
/*
var conLeng = conByteLeng($('#smsTxt').val()); // 내용 문자 입력 바이트 수 계산하기
if(conLeng > 2000){
alert("문자 내용은 2000byte를 넘을 수 없습니다.");
return false;
}
*/
console.log(' : 전송하시겠습니까 : ')
if(confirm("문자를 전송하시겠습니까?")){
imgFilePath = [];
$('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
if($("#delLi"+idx).hasClass("Template")){
templateYn.push("Y");
} else {
templateYn.push("N");
}
if($(el).hasClass("edit_y")) {
//이미지 변환
const imgBase64 = $(el).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);
} else if(status== 'fail'){
alert(returnData.message);
}
},
error: function (e) { alert("이미지 업로드에 실패하였습니다."); console.log("ERROR : ", e); }
});
} else {
if(imgFilePath.length != imgFileId.length){
//에디터 안거친 템플릿 이미지면 바로 src 때림
imgFilePath.push($(el).attr("src"));
}
}
});
form.imgFilePath.value = imgFilePath; // 저장한 이미지 경로 담아주기
form.callToList.value = phoneNum; //수신자번호 리스트 저장해주기
form.callFrom.value = removeDash(form.callFromList.value); // 발신번호 대쉬(-) 문자 없애주기
form.reserveYn.value = reserYn; // 즉시 / 예약 문자 선택 여부
form.templateYn.value = templateYn;
form.imgFileId.value = imgFileId;
// form.nameList.value = nameList;
// form.rep1List.value = rep1List;
// form.rep2List.value = rep2List;
// form.rep3List.value = rep3List;
// form.rep4List.value = rep4List;
//총 결제금액 천단위 콤마 삭제 후 전송
var totPrice = form.totPrice.value;
totPrice = totPrice.replace(",","");
form.totPrice.value = totPrice;
//문자내용이 입력된 경우 스팸 필터링 실행
if(!form.smsTxtArea.value == "" && exceptSpamYn == "N"){
console.log(' : selectSpamTxtChkAjax : ')
var spmData = new FormData(form);
url = "/web/mjon/msgdata/selectSpamTxtChkAjax.do";
$.ajax({
type: "POST",
url: url,
data: spmData,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success: function (returnData, status) {
return false;
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("spams" == returnData.result){
// var spmFilterTxt = returnData.spmFilterTxt;
spamStatus = true;
// form.spamKeyword.value = spmFilterTxt;
form.spamStatus.value='Y';
}else{
form.spamKeyword.value = '';
form.spamStatus.value='N';
}
} else if(status== 'fail'){
alert(returnData.message);
return false;
}
},
error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); return false;}
});
}
//이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요.
//이벤트 캐시가 부족한 경우 이벤트 캐시로 발송 가능한 만큼만 이벤트 금액으로 발송 처리해줌.
//이 후 나머지 발송 건수는 이벤트 캐시가 아닌 일반 단가로 발송 처리를 진행 함.
var eventStatus = form.eventStatus.value;
if(eventStatus == 'Y'){ //이벤트 진행 대상자이면 문자종류에 이벤트로 구분
form.eventYn.value = "Y"; //이벤트문자 종류 설정
}
var eventRemainCash = parseFloat(form.eventRemainCash.value);
console.log('eventStatus : ', eventStatus);
if(eventStatus == 'Y'){
if(parseFloat(eventRemainCash) < parseFloat(totPriceOnly)){
if(confirm("고객님의 이벤트 캐시 잔액(" + eventRemainCash + "원) 부족으로 요청하신 문자("+numberWithCommas(phoneNum.length)+"건)를 모두 발송할 수 없습니다. 이벤트 캐시 초과 건에 대해서는 일반 단가를 적용하여 발송하시겠습니까?")){
var smsTxtArea = $('#smsTxtArea').val();
var evnMsgType = $("#msgType").val();
var evnEachPrice = $("#eachPrice").val(); //form 에 저장된 이벤트 개별 단가 불러오기
var evnSendCnt = Math.floor(eventRemainCash / evnEachPrice);
var norEachPrice = 0;
var imgCnt = $("#imgCnt").val(); //그림 이미지 갯수
var txtReplYn = $("#txtReplYn").val(); //치환문자 포함 여부
var evnPhoneNumCnt = Number($("#evnPhoneNumCnt").val()); //치환문자 체크하면서 단/장문 건수 카운팅하면서 이벤트 금액으로 발송가능한 수신자 갯수 정보
var myPrice = parseFloat($("#myPrice").val()); //회원보유 잔여 캐시 금액
//수신목록 저장 배열 변수
var evnPhoneNum = []; //이벤트 단가 받는사람
var norPhoneNum = []; //일반 단가 받는 사람
//치환문자 포함 문자 저장 배열 변수(이벤트 문자 저장)
var evnName = [];
var evnRep1 = [];
var evnRep2 = [];
var evnRep3 = [];
var evnRep4 = [];
//치환문자 포함 문자 저장 배열 변수(일반 문자 저장)
var norName = [];
var norRep1 = [];
var norRep2 = [];
var norRep3 = [];
var norRep4 = [];
/**
Desc: 1. 그림, 치환, 일반 문자에 대해서 각각 이벤트 단가로 전송할 리스트 와 일반단가로 전송할 리스트를 분리 하는 로직
2. 그림 및 일반 문자는 단순 이벤트 금액으로 보낼수 있는 건수를 계산하여 리스트[0] 부터 발송 건수만큼 추출하여 evnPhoneNum 배열에 입력 후 이벤트 금액으로 발송 진행
3. 이벤트 발송이 완료되면, 이벤트 건수를 제외한 나머지 건수를 norPhoneNum 배열에 입력 후 일반 금액으로 발송 진행
4. 일반 발송시에 전송 단가(eachPrice), 전체금액(totPrice) 등 변수 정보 변경
=====
5. 그림문자가 아닌 치환문자인 경우 치환 처리를 진행하면서 단문, 장문을 구분하고 이때 이벤트 금액에서 단문, 장문 가격을 차감하여 보낼 수량을 카운팅 함.
6. 치환 체크가 완료되면 치환시 나온 카운트 갯수만큼 이벤트 배열과 일반 배열에 분리처리 후 전송함.
7. 이벤트 발송 처리후 일반 단가 문자 발송시 보유 캐시 부족시 팝업으로 현재까지 발송된 이벤트 건수와 발송하지 못하는 일반단가 건수 정보를 표시해줌. 문자 발송은 중단 된다.
Param Array : evnPhoneNum, norPhoneNum
function : getNorEachPrice - 메세지 타입(msgType)에 따른 단문, 장문, 그림문자 개별 단가 금액 확인
sendMsgAjax - 문자 발송 요청 Ajax 처리
*/
//그림문자인 경우
if(imgCnt > 0){
//이벤트 가격으로 전송 할 받는 사람 리스트 저장처리
for(var i=0; i< evnSendCnt; i++){
evnPhoneNum[i]= phoneNum[i];
//그림문자에 치환문자가 포함된 경우
if(txtReplYn == 'Y'){
evnPhoneNum[i] = phoneNum[i];
evnName[i] = nameList[i];
evnRep1[i] = rep1List[i];
evnRep2[i] = rep2List[i];
evnRep3[i] = rep3List[i];
evnRep4[i] = rep4List[i];
}
}
//일반 가격으로 전송 할 받는 사람 리스트 저장처리
for(var j=0; j < phoneNum.length - evnSendCnt; j++){
norPhoneNum[j]= phoneNum[j + evnSendCnt];
//그림문자에 치환문자가 포함된 경우
if(txtReplYn == 'Y'){
norPhoneNum[j]= phoneNum[j + evnSendCnt];
norName[j] = nameList[j + evnSendCnt];
norRep1[j] = rep1List[j + evnSendCnt];
norRep2[j] = rep2List[j + evnSendCnt];
norRep3[j] = rep3List[j + evnSendCnt];
norRep4[j] = rep4List[j + evnSendCnt];
}
};
}else if(txtReplYn == 'Y'){//치환 문자가 있는 경우 , 그림문자에 치환이 있는 경우 그림문자 가격으로 발송
//이벤트 가격으로 전송 할 받는 사람 리스트 저장처리
for(var i=0; i< evnPhoneNumCnt; i++){
evnPhoneNum[i] = phoneNum[i];
evnName[i] = nameList[i];
evnRep1[i] = rep1List[i];
evnRep2[i] = rep2List[i];
evnRep3[i] = rep3List[i];
evnRep4[i] = rep4List[i];
}
//일반 가격으로 전송 할 받는 사람 리스트 저장처리
for(var j=0; j < phoneNum.length - evnPhoneNumCnt; j++){
norPhoneNum[j]= phoneNum[j + evnPhoneNumCnt];
norName[j] = nameList[j + evnPhoneNumCnt];
norRep1[j] = rep1List[j + evnPhoneNumCnt];
norRep2[j] = rep2List[j + evnPhoneNumCnt];
norRep3[j] = rep3List[j + evnPhoneNumCnt];
norRep4[j] = rep4List[j + evnPhoneNumCnt];
};
}else{//치환문자 없는 경우 처리
//이벤트 가격으로 전송 할 받는 사람 리스트 저장처리
for(var i=0; i< evnSendCnt; i++){
evnPhoneNum[i]= phoneNum[i];
}
//일반 가격으로 전송 할 받는 사람 리스트 저장처리
for(var j=0; j < phoneNum.length - evnSendCnt; j++){
norPhoneNum[j]= phoneNum[j + evnSendCnt];
};
}
var orgShortMsgCnt = $("#shortMsgCnt").val(); //단문 총 건수 백업
var orgLongMsgCnt = $("#longMsgCnt").val(); //장문 총 건수 백업
//이벤트 단가 문자 전송 처리 시작
if(evnPhoneNum.length > 0){
form.callToList.value = evnPhoneNum; //수신자번호 리스트 저장해주기
form.totPrice.value = evnEachPrice * evnSendCnt; //이벤트 단가 총 결제금액 셋팅해주기
form.eventStatus.value = 'Y';
form.eventYn.value = 'Y';
var evnTotPrice = parseFloat(form.totPrice.value);
if(myPrice < evnTotPrice){
alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.evn");
return false;
}else{
myPrice = myPrice - evnTotPrice;
}
//치환문자가 있는 경우 변수 정보 담아주기(그림문자 아닌경우)
if(txtReplYn == 'Y' && imgCnt < 1){
var evnShortMsgCnt = $("#evnShortMsgCnt").val();
var evnLongMsgCnt = $("#evnLongMsgCnt").val();
form.shortMsgCnt.value = evnShortMsgCnt;
form.longMsgCnt.value = evnLongMsgCnt;
form.nameList.value = evnName;
form.rep1List.value = evnRep1;
form.rep2List.value = evnRep2;
form.rep3List.value = evnRep3;
form.rep4List.value = evnRep4;
}else if(txtReplYn == 'Y' && imgCnt > 0){//치환문자가 있는 경우 변수 정보 담아주기(그림문자인 경우)
form.nameList.value = evnName;
form.rep1List.value = evnRep1;
form.rep2List.value = evnRep2;
form.rep3List.value = evnRep3;
form.rep4List.value = evnRep4;
}
//이벤트 발송 실행 해주기
var form = document.msgForm;
var data = new FormData(form);
// url = "/web/mjon/msgdata/sendMsgDataAjax.do";
url = "/web/mjon/msgdata/sendMsgDataAjax_advc.do";
console.log('url :: ', url);
$.ajax({
type: "POST",
url: url,
data: data,
dataType:'json',
async: true,
processData: false,
contentType: false,
cache: false,
success: function (returnData, status) {
console.log('returnData : ', returnData);
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){
$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
$('.pop_msg_fails .msg_text').html(returnData.message);
$('.mask').addClass('on');
}else if("spamKeyWordFail" == returnData.result){//스팸 및 스미싱 단어가 들어간 문자 발송시 회원 이용정지 처리
$('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
$('.pop_msg_spam .msg_text').html(returnData.message);
$('.mask').addClass('on');
}else if("statusFail" == returnData.result){
alert(returnData.message);
//문자발송 URL Move
goMsgUrlMove();
return false;
}else{
var smsCnt = returnData.resultSts;
var blockCnt = returnData.resultBlockSts;
//이벤트 발송 처리가 완료 되면 나머지 일반 캐시로 발송할 문자 처리를 진행해 준다.
var norPhoneNumCnt = norPhoneNum.length;
if(norPhoneNumCnt > 0){
var norEachPrice = getNorEachPrice(evnMsgType); //일반 개별 단가 금액 셋팅해주기
form.callToList.value = norPhoneNum; //수신자번호 리스트 저장해주기
form.eachPrice.value = norEachPrice; //일반 개별 단가 금액 셋팅해주기
form.totPrice.value = norEachPrice * norPhoneNumCnt; //일반 단가 총 결제 금액 셋팅해주기
form.sPrice.value = $("#norsPrice").val();
form.mPrice.value = $("#normPrice").val();
form.pPrice.value = $("#norpPrice").val();
form.p2Price.value = $("#norp2Price").val();
form.p3Price.value = $("#norp3Price").val();
form.eventStatus.value = 'N';
form.eventYn.value = 'N';
var norTotPrice = parseFloat(form.totPrice.value);
if(myPrice < norTotPrice){//보유캐시 부족시 알림 레이어 팝업 보여주기, 발송된 이벤트 건수 및 미발송 일반 방송 건수 정보 표시해줌
var failMsg = "이벤트 캐시 잔액으로 발송한 문자("+smsCnt+"건)의 발송이 완료되었으나 일반 문자 발송("+norPhoneNumCnt+"건)에 필요한 회원님의 보유 잔액이 부족 합니다.";
$('.loading_layer').removeClass('active');
$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
$('.pop_msg_fails .msg_text').html(failMsg);
$('.mask').addClass('on');
return false;
}
//치환문자가 있는 경우 변수 정보 담아주기(그림문자가 아닌경우)
if(txtReplYn == 'Y' && imgCnt < 1){
//치환문자 단/장문 혼용된 경우 각 타입별 건수를 재 계산해준다.
//총 단/장문 각각 건수에서 이벤트로 발송한 건수를 빼준다.
var evnShortMsgCnt = $("#evnShortMsgCnt").val();
var evnLongMsgCnt = $("#evnLongMsgCnt").val();
//일반 장문/단문 발송 건수 계산해주기 총 건수에서 이벤트로 발송해준 건수를 빼준다.
var shortMsgCnt = Number(orgShortMsgCnt) - Number(evnShortMsgCnt);
var longMsgCnt = Number(orgLongMsgCnt) - Number(evnLongMsgCnt);
//계산 값이 음수로 나오는 경우 0건으로 간주한다.
if(shortMsgCnt <= 0){
shortMsgCnt = 0;
}
if(longMsgCnt <= 0){
longMsgCnt = 0;
}
form.shortMsgCnt.value = shortMsgCnt;
form.longMsgCnt.value = longMsgCnt;
form.nameList.value = norName;
form.rep1List.value = norRep1;
form.rep2List.value = norRep2;
form.rep3List.value = norRep3;
form.rep4List.value = norRep4;
}else if(txtReplYn == 'Y' && imgCnt > 0){//치환문자가 있는 경우 변수 정보 담아주기(그림문자인 경우)
form.nameList.value = norName;
form.rep1List.value = norRep1;
form.rep2List.value = norRep2;
form.rep3List.value = norRep3;
form.rep4List.value = norRep4;
}
sendMsgAjax(smsCnt, blockCnt);
}
}
} else if(status== 'fail'){
alert(returnData.message);
}
},
beforeSend : function(xmlHttpRequest) {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete : function(xhr, textStatus) {
//로딩창 hide
//$('.loading_layer').removeClass('active');
},
error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
});
}else{
//이벤트 건수로 발송 할 수 없는 경우 일반 캐시 단가로 발송처리하기
if(norPhoneNum.length > 0){
form.callToList.value = norPhoneNum; //수신자번호 리스트 저장해주기
form.eachPrice.value = getNorEachPrice(evnMsgType); //일반 개별 단가 금액 셋팅해주기
form.sPrice.value = $("#norsPrice").val();
form.mPrice.value = $("#normPrice").val();
form.pPrice.value = $("#norpPrice").val();
form.p2Price.value = $("#norp2Price").val();
form.p3Price.value = $("#norp3Price").val();
form.eventStatus.value = 'N';
form.eventYn.value = 'N';
sendMsgAjax_advc(0,0);
// sendMsgAjax(0,0);
}else{
alert("문자 전송 중 오류가 발생하였습니다.!!");
return false;
}
}
return false;
}else{
return false;
}
}else{
//발송 Ajax 호출해주기
sendMsgAjax_advc(0,0);
// sendMsgAjax(0,0);
}
}else{
//발송 Ajax 호출해주기
sendMsgAjax_advc(0,0);
// sendMsgAjax(0,0);
}
}
//발송 Ajax 호출해주기
sendMsgAjax_advc();
}
function sendMsgAjax_advc(){
// 타블레이터 호출
var $selectedData = tableL.getData(); // 데이터 가져오기
// 폼 데이터를 배열로 직렬화
var form = $('#msgForm');
var formDataArray = form.serializeArray();
// 배열을 객체로 변환
var formData = {};
$.each(formDataArray, function(index, field) {
formData[field.name] = field.value;
});
// 빈 값 제거
removeEmptyValues(formData);
// 선택된 데이터 추가
formData["mjonMsgTabulListVO"] = $selectedData;
// JSON 데이터 확인
console.log("최종 formData:", JSON.stringify(formData));
var url = "/web/mjon/msgdata/sendMsgDataAjax_advc.do";
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(formData),
contentType: 'application/json',
dataType: 'json',
success: function (data) {
console.log('data : ', data);
/* message:"특정문구 일괄변환 치환문자 데이터가 없습니다."
status:"BAD_REQUEST" */
var status = data.status;
if("OK" == status){
var smsCnt = Number(data.object.resultSts);
var blockCnt = Number(data.object.resultBlockSts);
smsCnt = Number(smsCnt) + Number(paramSmsCnt);
blockCnt = Number(blockCnt) + Number(paramBlockCnt);
if((smsCnt + blockCnt) == 0){
$('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
$('.pop_msg_spam .msg_text').html("문자 발송(예약)에 실패하였습니다.<br/> 다시 시도해주세요. <br/>* 정상적으로 발송 시도하였으나 실패하신 경우 혹시 문자내용에 사용불가 이모지 <br/>또는 복사-붙여넣기로 인한 보이지 않는 특수문자가 포함되었는지 확인 후 다시 시도해주세요.");
$('.mask').addClass('on');
}else{
$('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
//예약발송 건의 경우 결과 팝업 문구 변경
if(reserYn == 'Y'){
$('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ smsCnt + "</strong>건,수신거부 : <span>" + blockCnt + "</span>건의<br>문자가 예약 되었습니다.");
}else{
$('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ smsCnt + "</strong>건,수신거부 : <span>" + blockCnt + "</span>건의<br>문자가 발송 되었습니다.");
}
$('.mask').addClass('on');
}
}else if("BAD_REQUEST" == status){
alert(data.message);
return false;
}else if("UNAUTHORIZED" == status){
alert(data.message);
//문자발송 URL Move
goMsgUrlMove();
return false;
}else if("NO_CONTENT" == status){
$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
$('.pop_msg_fails .msg_text').html(returnData.message);
$('.mask').addClass('on');
}
},
beforeSend : function(xmlHttpRequest) {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete : function(xhr, textStatus) {
//로딩창 hide
$('.loading_layer').removeClass('active');
},
error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
//폼 유효성 검사 함수
function validateForm(form) {
@ -1757,98 +1376,16 @@ function getNorEachPrice(evnMsgType){
return norEachPrice;
}
function sendMsgAjax_advc(paramSmsCnt, paramBlockCnt){
console.log('sendMsgAjax : ');
var form = document.msgForm;
var reserYn = $("#reserveYn").val();
var data = new FormData(form);
// url = "/web/mjon/msgdata/sendMsgDataAjax.do";
url = "/web/mjon/msgdata/sendMsgDataAjax_advc.do";
$.ajax({
type: "POST",
url: url,
data: data,
dataType:'json',
async: true,
processData: false,
contentType: false,
cache: false,
success: function (data) {
console.log('data : ', data);
/* message:"특정문구 일괄변환 치환문자 데이터가 없습니다."
status:"BAD_REQUEST" */
var status = data.status;
// if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
if("OK" == status){
var smsCnt = Number(data.object.resultSts);
var blockCnt = Number(data.object.resultBlockSts);
smsCnt = Number(smsCnt) + Number(paramSmsCnt);
blockCnt = Number(blockCnt) + Number(paramBlockCnt);
if((smsCnt + blockCnt) == 0){
$('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
$('.pop_msg_spam .msg_text').html("문자 발송(예약)에 실패하였습니다.<br/> 다시 시도해주세요. <br/>* 정상적으로 발송 시도하였으나 실패하신 경우 혹시 문자내용에 사용불가 이모지 <br/>또는 복사-붙여넣기로 인한 보이지 않는 특수문자가 포함되었는지 확인 후 다시 시도해주세요.");
$('.mask').addClass('on');
}else{
$('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
//예약발송 건의 경우 결과 팝업 문구 변경
if(reserYn == 'Y'){
$('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ smsCnt + "</strong>건,수신거부 : <span>" + blockCnt + "</span>건의<br>문자가 예약 되었습니다.");
}else{
$('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ smsCnt + "</strong>건,수신거부 : <span>" + blockCnt + "</span>건의<br>문자가 발송 되었습니다.");
}
$('.mask').addClass('on');
}
}else if("BAD_REQUEST" == status){
alert(data.message);
return false;
}else if("UNAUTHORIZED" == status){
alert(data.message);
//문자발송 URL Move
goMsgUrlMove();
return false;
}else if("NO_CONTENT" == status){
$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
$('.pop_msg_fails .msg_text').html(returnData.message);
$('.mask').addClass('on');
}
// } else if(status== 'fail'){
// alert(returnData.message);
// }
},
beforeSend : function(xmlHttpRequest) {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete : function(xhr, textStatus) {
//로딩창 hide
$('.loading_layer').removeClass('active');
},
error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
//빈 값이나 null 값을 제거하는 함수
function removeEmptyValues(obj) {
Object.keys(obj).forEach(function(key) {
if (obj[key] === null || obj[key] === '') {
delete obj[key];
}
});
}
function sendMsgAjax(paramSmsCnt, paramBlockCnt){
var form = document.msgForm;
var reserYn = $("#reserveYn").val();

File diff suppressed because it is too large Load Diff