Merge branch 'master' of http://hylee@vcs.iten.co.kr:9999/hylee/mjon_git
into advc
This commit is contained in:
commit
b44427affa
116
src/main/java/itn/com/cmm/MjonMsgSendVO.java
Normal file
116
src/main/java/itn/com/cmm/MjonMsgSendVO.java
Normal file
@ -0,0 +1,116 @@
|
||||
package itn.com.cmm;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public class MjonMsgSendVO{
|
||||
|
||||
|
||||
/**
|
||||
* @description : 수신자번호
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* @description : [*이름*] - 치환문자
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* @description : [*1*] - 치환문자
|
||||
*/
|
||||
private String rep1;
|
||||
|
||||
/**
|
||||
* @description : [*2*] - 치환문자
|
||||
*/
|
||||
private String rep2;
|
||||
|
||||
/**
|
||||
* @description : [*3*] - 치환문자
|
||||
*/
|
||||
private String rep3;
|
||||
|
||||
/**
|
||||
* @description : [*4*] - 치환문자
|
||||
*/
|
||||
private String rep4;
|
||||
|
||||
/**
|
||||
* @description : 문자ID
|
||||
*/
|
||||
private String msgId;
|
||||
|
||||
/**
|
||||
* @description : 전송그룹ID (대량문자의 경우 하나의 그룹으로 세팅)
|
||||
*/
|
||||
private String msgGroupId;
|
||||
|
||||
/**
|
||||
* @description : 문자온 일반회원ID
|
||||
*/
|
||||
private String userId;
|
||||
|
||||
/**
|
||||
* @description : 발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)
|
||||
*/
|
||||
private String callFrom;
|
||||
/**
|
||||
* @description : 수신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)
|
||||
*/
|
||||
private String callTo;
|
||||
/**
|
||||
* @description : 예약 발송일시
|
||||
*/
|
||||
private String reqDate;
|
||||
/**
|
||||
* @description :전송사(04:다우, 05:JJ, 07:IVT, 01:아이하트 , 02:현대퓨처넷, 03:아이엠오)
|
||||
*/
|
||||
private String agentCode;
|
||||
|
||||
/**
|
||||
* @description : MMS용 메시지제목
|
||||
*/
|
||||
private String subject;
|
||||
|
||||
/**
|
||||
* @description : SMS용 메시지본문
|
||||
*/
|
||||
private String smsTxt;
|
||||
|
||||
/**
|
||||
* @description : 메세지타입(4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송)
|
||||
*/
|
||||
private String msgType;
|
||||
|
||||
/**
|
||||
* @description : 첨부파일 갯수
|
||||
*/
|
||||
private String fileCnt;
|
||||
|
||||
/**
|
||||
* @description : 파일이름1
|
||||
*/
|
||||
private String filePath1;
|
||||
|
||||
/**
|
||||
* @description : 파일이름2
|
||||
*/
|
||||
private String filePath2;
|
||||
|
||||
/**
|
||||
* @description : 파일이름3
|
||||
*/
|
||||
private String filePath3;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
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;
|
||||
}
|
||||
@ -3,16 +3,23 @@ package itn.com.cmm.util;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
||||
import itn.com.cmm.MjonMsgSendVO;
|
||||
import itn.let.mail.service.StatusResponse;
|
||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||
import itn.let.mjo.msgdata.service.ReplacementListsVO;
|
||||
import itn.let.mjo.spammsg.web.ComGetSpamStringParser;
|
||||
import itn.let.module.base.PriceAndPoint;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@ -30,6 +37,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Slf4j
|
||||
public final class MsgSendUtils {
|
||||
|
||||
|
||||
@ -50,6 +58,7 @@ public final class MsgSendUtils {
|
||||
String smsCont = smsTxt.replace("\r\n", "\n");
|
||||
smsBytes = smsCont.getBytes(charset).length;
|
||||
}
|
||||
log.info(" + smsBytes :: [{}]", smsBytes);
|
||||
return smsBytes;
|
||||
}
|
||||
|
||||
@ -61,32 +70,33 @@ public final class MsgSendUtils {
|
||||
* @param mjonMsgVO
|
||||
* @param smsTxtByte
|
||||
* @return
|
||||
* @throws UnsupportedEncodingException
|
||||
*/
|
||||
public static String getMsgType(MjonMsgVO mjonMsgVO, int smsTxtByte) {
|
||||
String msgType = mjonMsgVO.getMsgType();
|
||||
public static String getMsgTypeWithByteValidation(MjonMsgSendVO sendVO, String p_smsTxt) throws UnsupportedEncodingException {
|
||||
|
||||
|
||||
int smsTxtByte = getSmsTxtBytes(p_smsTxt);
|
||||
String msgType = "4";
|
||||
|
||||
// // 내문자저장함에 저장 후 문자를 발송하는 경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함
|
||||
// if ("P".equals(msgType) || "L".equals(msgType)) {
|
||||
// msgType = "6";
|
||||
// } else if ("S".equals(msgType)) {
|
||||
// msgType = "4";
|
||||
// }
|
||||
|
||||
// 그림 이미지가 첨부된 경우 장문으로 설정
|
||||
if (StringUtils.isNotEmpty(sendVO.getFilePath1())) {
|
||||
msgType = "6";
|
||||
} else if (smsTxtByte > 2000) {
|
||||
// 2000 Byte를 초과할 경우 에러 처리 (이 부분은 호출부에서 검사하도록 유지할 수도 있음)
|
||||
return "INVALID"; // 이 값은 호출부에서 에러 처리를 하도록 활용할 수 있습니다.
|
||||
} else if (smsTxtByte > 90) {
|
||||
// 90Byte 초과 시 장문으로 설정
|
||||
msgType = "6";
|
||||
}
|
||||
|
||||
// 내문자저장함에 저장 후 문자를 발송하는 경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함
|
||||
if ("P".equals(msgType) || "L".equals(msgType)) {
|
||||
msgType = "6";
|
||||
} else if ("S".equals(msgType)) {
|
||||
msgType = "4";
|
||||
}
|
||||
|
||||
// 그림 이미지가 첨부된 경우 장문으로 설정
|
||||
if (mjonMsgVO.getFileName1() != null || (mjonMsgVO.getImgFilePath() != null && mjonMsgVO.getImgFilePath().length > 0)) {
|
||||
msgType = "6";
|
||||
} else if (smsTxtByte > 2000) {
|
||||
// 2000 Byte를 초과할 경우 에러 처리 (이 부분은 호출부에서 검사하도록 유지할 수도 있음)
|
||||
return "INVALID"; // 이 값은 호출부에서 에러 처리를 하도록 활용할 수 있습니다.
|
||||
} else if (smsTxtByte > 90) {
|
||||
// 90Byte 초과 시 장문으로 설정
|
||||
msgType = "6";
|
||||
} else {
|
||||
// 그 외 단문으로 설정
|
||||
msgType = "4";
|
||||
}
|
||||
|
||||
return msgType;
|
||||
return msgType;
|
||||
}
|
||||
|
||||
public static float getValidPrice(Float personalPrice, Float defaultPrice) {
|
||||
@ -129,16 +139,32 @@ public final class MsgSendUtils {
|
||||
return price;
|
||||
}
|
||||
|
||||
public static boolean isReplacementRequired(MjonMsgVO mjonMsgVO) {
|
||||
return "Y".equals(mjonMsgVO.getTxtReplYn());
|
||||
|
||||
/**
|
||||
* @methodName : isReplacementRequired
|
||||
* @author : 이호영
|
||||
* @date : 2024.11.12
|
||||
* @description : 치환데이터가 있는지 확인
|
||||
* @param mjonMsgVO
|
||||
* @return
|
||||
*/
|
||||
public static boolean isRepleasYN(MjonMsgVO mjonMsgVO) {
|
||||
|
||||
// 치환 구문 패턴 리스트
|
||||
String[] placeholders = {"\\[\\*이름\\*\\]", "\\[\\*1\\*\\]", "\\[\\*2\\*\\]", "\\[\\*4\\*\\]", "\\[\\*3\\*\\]"};
|
||||
|
||||
for (String placeholder : placeholders) {
|
||||
Pattern pattern = Pattern.compile(placeholder);
|
||||
Matcher matcher = pattern.matcher(mjonMsgVO.getSmsTxt());
|
||||
// 해당 패턴이 존재하면 true 반환
|
||||
if (matcher.find()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
public static ReplacementListsVO createReplacementLists(MjonMsgVO mjonMsgVO) throws UnsupportedEncodingException {
|
||||
ReplacementListsVO lists = new ReplacementListsVO();
|
||||
lists.initializeLists(mjonMsgVO); // 배열을 초기화합니다.
|
||||
return lists;
|
||||
// return populateReplacementLists(mjonMsgVO, lists); // 데이터를 배열에 채웁니다.
|
||||
}
|
||||
|
||||
/**
|
||||
* @methodName : populateReplacementLists
|
||||
@ -149,73 +175,168 @@ public final class MsgSendUtils {
|
||||
* @param lists
|
||||
* @param statusResponse
|
||||
* @return
|
||||
* @throws UnsupportedEncodingException
|
||||
* @throws Exception
|
||||
*/
|
||||
public static Boolean populateReplacementLists(MjonMsgVO mjonMsgVO, ReplacementListsVO lists, StatusResponse statusResponse){
|
||||
public static Boolean populateSendLists(MjonMsgVO mjonMsgVO, List<MjonMsgSendVO> mjonMsgSendListVO, StatusResponse statusResponse, List<String> resultSpamTxt) throws Exception{
|
||||
|
||||
|
||||
String[] nameList = mjonMsgVO.getNameList();
|
||||
String[] phone = mjonMsgVO.getCallToList();
|
||||
String[] rep1 = mjonMsgVO.getRep1List();
|
||||
String[] rep2 = mjonMsgVO.getRep2List();
|
||||
String[] rep3 = mjonMsgVO.getRep3List();
|
||||
String[] rep4 = mjonMsgVO.getRep4List();
|
||||
String smsTxt = mjonMsgVO.getSmsTxt();
|
||||
int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt());
|
||||
|
||||
// 이름 치환
|
||||
int shortCnt = 0;
|
||||
int longCnt = 0;
|
||||
int imgCnt = 0;
|
||||
|
||||
|
||||
for (int i = 0; i < phone.length; i++) {
|
||||
|
||||
smsTxt = smsTxt.replaceAll(String.valueOf((char) 13), "");
|
||||
|
||||
log.info(" :: populateSendLists :: ");
|
||||
|
||||
// 이름 및 치환 문자 처리
|
||||
smsTxt = replacePlaceholder(smsTxt, "[*이름*]", nameList, i);
|
||||
smsTxt = replacePlaceholder(smsTxt, "[*1*]", rep1, i);
|
||||
smsTxt = replacePlaceholder(smsTxt, "[*2*]", rep2, i);
|
||||
smsTxt = replacePlaceholder(smsTxt, "[*3*]", rep3, i);
|
||||
smsTxt = replacePlaceholder(smsTxt, "[*4*]", rep4, i);
|
||||
|
||||
int spamChkSize = getSpamChkSize(mjonMsgSendListVO.size());
|
||||
int sampleCounter = 0;
|
||||
|
||||
try {
|
||||
int bytes = getSmsTxtBytes(smsTxt);
|
||||
if(bytes < 2000) {
|
||||
if(fileCount > 0) {
|
||||
populateImgLists(lists, nameList, phone, rep1, rep2, rep3, rep4, smsTxt, i);
|
||||
imgCnt++;
|
||||
|
||||
}else if(bytes > 90) {//장문문자 리스트 만들기
|
||||
populateLongLists(lists, nameList, phone, rep1, rep2, rep3, rep4, smsTxt, i);
|
||||
longCnt++;
|
||||
} else {//단문문자 리스트 만들기
|
||||
populateShortLists(lists, nameList, phone, rep1, rep2, rep3, rep4, smsTxt, i);
|
||||
shortCnt++;
|
||||
String smsTxtTemp = mjonMsgVO.getSmsTxt();
|
||||
|
||||
// 치환 구문과 필드 getter 매핑
|
||||
Map<String, Function<MjonMsgSendVO, String>> placeholders = new HashMap<>();
|
||||
placeholders.put("[*이름*]", MjonMsgSendVO::getName);
|
||||
placeholders.put("[*1*]", MjonMsgSendVO::getRep1);
|
||||
placeholders.put("[*2*]", MjonMsgSendVO::getRep2);
|
||||
placeholders.put("[*3*]", MjonMsgSendVO::getRep3);
|
||||
placeholders.put("[*4*]", MjonMsgSendVO::getRep4);
|
||||
|
||||
boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
||||
boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
||||
Boolean replaceYN = getReplaceYN(smsTxtTemp);
|
||||
|
||||
String msgTypeResult = null;
|
||||
|
||||
for (MjonMsgSendVO sendVO : mjonMsgSendListVO) {
|
||||
|
||||
String smsTxt = smsTxtTemp;
|
||||
// 치환 문자면
|
||||
if(replaceYN) {
|
||||
|
||||
// 각 치환 구문을 확인하고 치환할 값이 없으면 오류 반환
|
||||
for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
|
||||
String placeholder = entry.getKey();
|
||||
String value = entry.getValue().apply(sendVO);
|
||||
if (smsTxtTemp.contains(placeholder)) {
|
||||
if (StringUtils.isEmpty(value)) {
|
||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
|
||||
return false;
|
||||
}
|
||||
smsTxt = smsTxtTemp.replace(placeholder, value);
|
||||
}
|
||||
}else {
|
||||
}
|
||||
}
|
||||
|
||||
String smsSpamChkTxt = mjonMsgVO.getSmsTxt().replaceAll(String.valueOf((char) 13), "");
|
||||
// 스팸문자 체크
|
||||
// 치환문자가 아닐 경우
|
||||
if (!replaceYN && !hasPerformedSpamCheck) {
|
||||
checkSpamAndSetStatus(mjonMsgVO, smsSpamChkTxt, resultSpamTxt);
|
||||
hasPerformedSpamCheck = true; // 스팸 체크가 한 번만 수행되도록 설정
|
||||
// 치환 문자가 있는 경우에는 spamChkSize 카운트까지만 수행
|
||||
} else if (replaceYN && sampleCounter < spamChkSize && !"Y".equals(mjonMsgVO.getSpamStatus())) {
|
||||
checkSpamAndSetStatus(mjonMsgVO, smsSpamChkTxt, resultSpamTxt);
|
||||
sampleCounter++;
|
||||
}
|
||||
log.info(" ++ smsTxt:: [{}]", smsTxt);
|
||||
sendVO.setSmsTxt(smsTxt);
|
||||
|
||||
// 이미지 셋팅
|
||||
setImagePathsForMsgSendVO(mjonMsgVO, sendVO);
|
||||
|
||||
|
||||
// msgType 셋팅 및 문자열 체크
|
||||
log.info(" + smsTxt :: [{}]", smsTxt);
|
||||
if (!replaceYN && !hasPerformedMsgType) {
|
||||
log.info(" 치환 X ");
|
||||
// byte 체크와 msgType 구하기
|
||||
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
||||
if ("INVALID".equals(msgTypeResult)) {
|
||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
||||
return false;
|
||||
}
|
||||
hasPerformedMsgType = true; // 스팸 체크가 한 번만 수행되도록 설정
|
||||
}else if(replaceYN){
|
||||
log.info(" 치환 O ");
|
||||
// byte 체크와 msgType 구하기
|
||||
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
||||
if ("INVALID".equals(msgTypeResult)) {
|
||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 중 오류가 발생하였습니다.");
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
||||
sendVO.setMsgType(msgTypeResult);
|
||||
|
||||
}
|
||||
|
||||
lists.setShortCnt(shortCnt);
|
||||
lists.setLongCnt(longCnt);
|
||||
lists.setImgCnt(imgCnt);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
private static void setImagePathsForMsgSendVO(MjonMsgVO mjonMsgVO, MjonMsgSendVO sendVO) {
|
||||
int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt());
|
||||
|
||||
switch (fileCount) {
|
||||
case 3:
|
||||
sendVO.setFilePath3(mjonMsgVO.getFileName3());
|
||||
case 2:
|
||||
sendVO.setFilePath2(mjonMsgVO.getFileName2());
|
||||
case 1:
|
||||
sendVO.setFilePath1(mjonMsgVO.getFileName1());
|
||||
break;
|
||||
default:
|
||||
// fileCount가 0이거나 설정할 파일이 없는 경우
|
||||
break;
|
||||
}
|
||||
sendVO.setFileCnt(mjonMsgVO.getFileCnt());
|
||||
}
|
||||
|
||||
private static void checkSpamAndSetStatus(MjonMsgVO mjonMsgVO, String personalizedSmsTxt, List<String> resultSpamTxt) throws Exception {
|
||||
String resultParser = ComGetSpamStringParser.getSpamTextParse(personalizedSmsTxt).trim();
|
||||
int spmCnt = 0;
|
||||
|
||||
for (String spmTxt : resultSpamTxt) {
|
||||
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
|
||||
if (resultParser.contains(parserStr)) {
|
||||
spmCnt++;
|
||||
}
|
||||
}
|
||||
|
||||
if (spmCnt > 0) { // 스팸 문자가 포함된 경우
|
||||
System.out.println("++++++++++++++ spam smsTxt ::: " + resultParser);
|
||||
mjonMsgVO.setSpamStatus("Y");
|
||||
}else {mjonMsgVO.setSpamStatus("N");}
|
||||
}
|
||||
|
||||
private static Boolean getReplaceYN(String smsTxtTemplate) {// 여러 치환 구문이 포함된 정규식 패턴
|
||||
|
||||
Boolean replaceYN = false;
|
||||
|
||||
Pattern pattern = Pattern.compile("\\[\\*이름\\*\\]|\\[\\*1\\*\\]|\\[\\*2\\*\\]|\\[\\*3\\*\\]|\\[\\*4\\*\\]");
|
||||
Matcher matcher = pattern.matcher(smsTxtTemplate);
|
||||
|
||||
// 정규식 패턴에 해당하는 치환 구문이 존재하는지 확인
|
||||
if (matcher.find()) {
|
||||
replaceYN = true;
|
||||
}
|
||||
return replaceYN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @methodName : getSpamChkSize
|
||||
* @author : 이호영
|
||||
* @date : 2024.11.13
|
||||
* @description : 수신자 건수별로 스팸체크하는 갯수 설정
|
||||
* @param size
|
||||
* @return
|
||||
*/
|
||||
private static int getSpamChkSize(int size) {
|
||||
int chkSize = 1; // 기본 샘플 크기
|
||||
|
||||
// 수신자 수에 따른 샘플 크기 결정
|
||||
if (size > 100 && size <= 1000) {
|
||||
chkSize = 10;
|
||||
} else if (size > 1000) {
|
||||
chkSize = 50;
|
||||
}
|
||||
|
||||
return chkSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* 특정 플레이스홀더를 리스트에서 가져온 값으로 치환합니다.
|
||||
*
|
||||
@ -236,140 +357,6 @@ public final class MsgSendUtils {
|
||||
return smsTxt;
|
||||
}
|
||||
|
||||
private static void populateShortLists(ReplacementListsVO lists, String[] nameList, String[] phone, String[] rep1,
|
||||
String[] rep2, String[] rep3, String[] rep4, String smsTxt, int i) {
|
||||
// 이름 치환
|
||||
if (smsTxt.contains("[*이름*]")) {
|
||||
if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
|
||||
lists.getShortNameList()[i] = StringUtil.getString(nameList[i].replaceAll("§", ","));
|
||||
} else {
|
||||
lists.getShortNameList()[i] = " ";
|
||||
}
|
||||
} else {
|
||||
lists.getShortNameList()[i] = getSafeValue(nameList, i);
|
||||
}
|
||||
|
||||
lists.getShortPhone()[i] = getSafeValue(phone, i);
|
||||
|
||||
// 문자 1 치환
|
||||
if (smsTxt.contains("[*1*]")) {
|
||||
lists.getShortRep1()[i] = getReplacementValue(rep1, i, "[*1*]");
|
||||
} else {
|
||||
lists.getShortRep1()[i] = getSafeValue(rep1, i);
|
||||
}
|
||||
|
||||
// 문자 2 치환
|
||||
if (smsTxt.contains("[*2*]")) {
|
||||
lists.getShortRep2()[i] = getReplacementValue(rep2, i, "[*2*]");
|
||||
} else {
|
||||
lists.getShortRep2()[i] = getSafeValue(rep2, i);
|
||||
}
|
||||
|
||||
// 문자 3 치환
|
||||
if (smsTxt.contains("[*3*]")) {
|
||||
lists.getShortRep3()[i] = getReplacementValue(rep3, i, "[*3*]");
|
||||
} else {
|
||||
lists.getShortRep3()[i] = getSafeValue(rep3, i);
|
||||
}
|
||||
|
||||
// 문자 4 치환
|
||||
if (smsTxt.contains("[*4*]")) {
|
||||
lists.getShortRep4()[i] = getReplacementValue(rep4, i, "[*4*]");
|
||||
} else {
|
||||
lists.getShortRep4()[i] = getSafeValue(rep4, i);
|
||||
}
|
||||
}
|
||||
|
||||
// 장문 리스트에 데이터를 채우는 메서드
|
||||
private static void populateLongLists(ReplacementListsVO lists, String[] nameList, String[] phone, String[] rep1, String[] rep2, String[] rep3, String[] rep4, String smsTxt, int i) {
|
||||
// 이름 치환
|
||||
if (smsTxt.contains("[*이름*]")) {
|
||||
if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
|
||||
lists.getLongNameList()[i] = StringUtil.getString(nameList[i].replaceAll("§", ","));
|
||||
} else {
|
||||
lists.getLongNameList()[i] = " ";
|
||||
}
|
||||
} else {
|
||||
lists.getLongNameList()[i] = getSafeValue(nameList, i);
|
||||
}
|
||||
|
||||
lists.getLongPhone()[i] = getSafeValue(phone, i);
|
||||
|
||||
// 문자 1 치환
|
||||
if (smsTxt.contains("[*1*]")) {
|
||||
lists.getLongRep1()[i] = getReplacementValue(rep1, i, "[*1*]");
|
||||
} else {
|
||||
lists.getLongRep1()[i] = getSafeValue(rep1, i);
|
||||
}
|
||||
|
||||
// 문자 2 치환
|
||||
if (smsTxt.contains("[*2*]")) {
|
||||
lists.getLongRep2()[i] = getReplacementValue(rep2, i, "[*2*]");
|
||||
} else {
|
||||
lists.getLongRep2()[i] = getSafeValue(rep2, i);
|
||||
}
|
||||
|
||||
// 문자 3 치환
|
||||
if (smsTxt.contains("[*3*]")) {
|
||||
lists.getLongRep3()[i] = getReplacementValue(rep3, i, "[*3*]");
|
||||
} else {
|
||||
lists.getLongRep3()[i] = getSafeValue(rep3, i);
|
||||
}
|
||||
|
||||
// 문자 4 치환
|
||||
if (smsTxt.contains("[*4*]")) {
|
||||
lists.getLongRep4()[i] = getReplacementValue(rep4, i, "[*4*]");
|
||||
} else {
|
||||
lists.getLongRep4()[i] = getSafeValue(rep4, i);
|
||||
}
|
||||
}
|
||||
|
||||
// 그림 문자 리스트에 데이터를 채우는 메서드
|
||||
private static void populateImgLists(ReplacementListsVO lists, String[] nameList, String[] phone, String[] rep1, String[] rep2, String[] rep3, String[] rep4, String smsTxt, int i) {
|
||||
|
||||
// 이름 치환
|
||||
if (smsTxt.contains("[*이름*]")) {
|
||||
if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
|
||||
lists.getImgNameList()[i] = StringUtil.getString(nameList[i].replaceAll("§", ","));
|
||||
} else {
|
||||
lists.getImgNameList()[i] = " ";
|
||||
}
|
||||
} else {
|
||||
lists.getImgNameList()[i] = getSafeValue(nameList, i);
|
||||
}
|
||||
|
||||
lists.getImgPhone()[i] = getSafeValue(phone, i);
|
||||
|
||||
// 문자 1 치환
|
||||
if (smsTxt.contains("[*1*]")) {
|
||||
lists.getImgRep1()[i] = getReplacementValue(rep1, i, "[*1*]");
|
||||
} else {
|
||||
lists.getImgRep1()[i] = getSafeValue(rep1, i);
|
||||
}
|
||||
|
||||
// 문자 2 치환
|
||||
if (smsTxt.contains("[*2*]")) {
|
||||
lists.getImgRep2()[i] = getReplacementValue(rep2, i, "[*2*]");
|
||||
} else {
|
||||
lists.getImgRep2()[i] = getSafeValue(rep2, i);
|
||||
}
|
||||
|
||||
// 문자 3 치환
|
||||
if (smsTxt.contains("[*3*]")) {
|
||||
lists.getImgRep3()[i] = getReplacementValue(rep3, i, "[*3*]");
|
||||
} else {
|
||||
lists.getImgRep3()[i] = getSafeValue(rep3, i);
|
||||
}
|
||||
|
||||
// 문자 4 치환
|
||||
if (smsTxt.contains("[*4*]")) {
|
||||
lists.getImgRep4()[i] = getReplacementValue(rep4, i, "[*4*]");
|
||||
} else {
|
||||
lists.getImgRep4()[i] = getSafeValue(rep4, i);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 배열 인덱스를 안전하게 접근하는 메서드
|
||||
private static String getSafeValue(String[] array, int index) {
|
||||
return (array != null && array.length > index) ? array[index] : " ";
|
||||
@ -412,54 +399,27 @@ public final class MsgSendUtils {
|
||||
* @date : 2024.09.25
|
||||
* @description : 치환문자가 사용될 때 데이터가 올바른지 확인하는 메서드
|
||||
* @param mjonMsgVO
|
||||
* @param statusResponse
|
||||
* @param list
|
||||
* @return boolean
|
||||
*/
|
||||
public static boolean validateReplacementData(MjonMsgVO mjonMsgVO, StatusResponse statusResponse) {
|
||||
String[] nameList = mjonMsgVO.getNameList();
|
||||
String[] phone = mjonMsgVO.getCallToList();
|
||||
String[] rep1 = mjonMsgVO.getRep1List();
|
||||
String[] rep2 = mjonMsgVO.getRep2List();
|
||||
String[] rep3 = mjonMsgVO.getRep3List();
|
||||
String[] rep4 = mjonMsgVO.getRep4List();
|
||||
|
||||
// 치환 문자 리스트가 모두 비어있는지 확인
|
||||
if (isEmpty(nameList)
|
||||
&& isEmpty(rep1)
|
||||
&& isEmpty(rep2)
|
||||
&& isEmpty(rep3)
|
||||
&& isEmpty(rep4)) {
|
||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "특정문구 일괄변환 치환문자 데이터가 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 치환 문자 필드 개수와 전화번호 개수가 일치하는지 확인
|
||||
boolean isRepCountOk = true;
|
||||
|
||||
if (mjonMsgVO.getSmsTxt().contains("[*이름*]") && nameList.length != phone.length) {
|
||||
isRepCountOk = false;
|
||||
}
|
||||
if (mjonMsgVO.getSmsTxt().contains("[*1*]") && rep1.length != phone.length) {
|
||||
isRepCountOk = false;
|
||||
}
|
||||
if (mjonMsgVO.getSmsTxt().contains("[*2*]") && rep2.length != phone.length) {
|
||||
isRepCountOk = false;
|
||||
}
|
||||
if (mjonMsgVO.getSmsTxt().contains("[*3*]") && rep3.length != phone.length) {
|
||||
isRepCountOk = false;
|
||||
}
|
||||
if (mjonMsgVO.getSmsTxt().contains("[*4*]") && rep4.length != phone.length) {
|
||||
isRepCountOk = false;
|
||||
}
|
||||
|
||||
// 필드 개수가 일치하지 않는 경우 에러 메시지 반환
|
||||
if (!isRepCountOk) {
|
||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "특정문구 일괄변환 치환문자 데이터가 일치하지 않습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true; // 모든 유효성 검사를 통과한 경우
|
||||
}
|
||||
/*
|
||||
* public static boolean validateReplacementData(MjonMsgVO mjonMsgVO,
|
||||
* List<MjonMsgSendVO> list) { // 치환 구문과 필드 getter 매핑 Map<String,
|
||||
* Function<MjonMsgSendVO, String>> placeholders = new HashMap<>();
|
||||
* placeholders.put("\\[\\*이름\\*\\]", MjonMsgSendVO::getName);
|
||||
* placeholders.put("\\[\\*1\\*\\]", MjonMsgSendVO::getRep1);
|
||||
* placeholders.put("\\[\\*2\\*\\]", MjonMsgSendVO::getRep2);
|
||||
* placeholders.put("\\[\\*3\\*\\]", MjonMsgSendVO::getRep3);
|
||||
* placeholders.put("\\[\\*4\\*\\]", MjonMsgSendVO::getRep4);
|
||||
*
|
||||
* // smsTxt 에서 필요한 치환 구문이 포함되어 있는지 확인 String smsTxt = mjonMsgVO.getSmsTxt();
|
||||
* for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry :
|
||||
* placeholders.entrySet()) { if
|
||||
* (Pattern.compile(entry.getKey()).matcher(smsTxt).find()) { // 해당 치환 구문이 존재할
|
||||
* 경우 모든 수신자에서 필드 값 확인 for (MjonMsgSendVO recipient : list) { if
|
||||
* (StringUtils.isEmpty(entry.getValue().apply(recipient))) { return false; //
|
||||
* 데이터가 없는 경우 } } } } // 모든 치환 구문이 유효한 데이터를 가지고 있으면 true 반환 return true; }
|
||||
*/
|
||||
|
||||
// 배열이 비어있는지 확인하는 메서드
|
||||
public static boolean isEmpty(String[] array) {
|
||||
|
||||
@ -149,6 +149,7 @@ public class MjonKakaoATVO extends ComDefaultVO{
|
||||
private String bizKakaoResendOrgnlTxt; /* 대체 문자( 치환X ) */
|
||||
private String bizKakaoResendYn; /* 대체 문자 사용 여부*/
|
||||
private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */
|
||||
private String bizKakaoJsonFile; //카카오 친구톡 Json 파일 경로
|
||||
|
||||
|
||||
public String getMsgDiv() {
|
||||
@ -1266,5 +1267,11 @@ public class MjonKakaoATVO extends ComDefaultVO{
|
||||
public void setBizKakaoResendType(String bizKakaoResendType) {
|
||||
this.bizKakaoResendType = bizKakaoResendType;
|
||||
}
|
||||
public String getBizKakaoJsonFile() {
|
||||
return bizKakaoJsonFile;
|
||||
}
|
||||
public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
|
||||
this.bizKakaoJsonFile = bizKakaoJsonFile;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -851,6 +851,7 @@ public class MjonKakaoATController {
|
||||
kakaoVO.setPage(Integer.toString(channelIDVO.getPageIndex()));
|
||||
kakaoVO.setKeyword(channelIDVO.getSearchKeyword());
|
||||
kakaoVO.setUserId(channelIDVO.getUserId());
|
||||
kakaoVO.setYellowId(channelIDVO.getYellowId());
|
||||
|
||||
String templateStatus = channelIDVO.getTemplateStatus();
|
||||
String keyword = channelIDVO.getSearchKeyword();
|
||||
|
||||
@ -13,14 +13,21 @@ import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.HandlerMapping;
|
||||
|
||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
||||
import itn.com.cmm.LoginVO;
|
||||
import itn.com.cmm.service.FileVO;
|
||||
import itn.com.cmm.util.StringUtil;
|
||||
import itn.let.kakao.admin.kakaoAt.service.ChannelIDVO;
|
||||
import itn.let.kakao.admin.kakaoFt.service.MjonKakaoFTService;
|
||||
import itn.let.kakao.admin.kakaoFt.service.MjonKakaoFTVO;
|
||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||
import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
|
||||
import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
|
||||
import itn.let.mjo.msg.service.MjonMsgResultCodeVO;
|
||||
import itn.let.mjo.msg.service.MjonMsgService;
|
||||
import itn.let.mjo.reservmsg.service.MjonReservMsgService;
|
||||
import itn.let.utl.fcc.service.EgovStringUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -52,6 +59,12 @@ public class MjonKakaoFTController {
|
||||
@Resource(name = "MjonReservMsgService")
|
||||
private MjonReservMsgService mjonReservMsgService;
|
||||
|
||||
@Resource(name = "kakaoFriendsTalkTemplateService")
|
||||
private KakaoFriendsTalkTemplateService kakaoFtTemplateService;
|
||||
|
||||
@Resource(name = "kakaoApiService")
|
||||
private KakaoApiService kakaoApiService;
|
||||
|
||||
/*
|
||||
@Resource(name = "EgovCmmUseService")
|
||||
private EgovCmmUseService cmmUseService;
|
||||
@ -501,6 +514,125 @@ public class MjonKakaoFTController {
|
||||
return "/uss/ion/kakaoft/ReserveKakaoFTModify";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 채널 아이디별 등록 친구톡 템플릿 목록 팝업화면 관리자페이지
|
||||
* @param ChannelIDVO
|
||||
* @param request
|
||||
* @param model
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping("/uss/ion/kakaoft/KakaoFTChannelIDTemplateListPopupAjax.do")
|
||||
public String KakaoFTChannelIDTemplateListPopupAjax(@ModelAttribute("searchVO") ChannelIDVO channelIDVO,
|
||||
HttpServletRequest request ,
|
||||
ModelMap model) throws Exception {
|
||||
|
||||
|
||||
try {
|
||||
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String id = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
if(id == "") {
|
||||
return "redirect:/uat/uia/EgovLoginUsr.do";
|
||||
}
|
||||
|
||||
KakaoVO kakaoVO = new KakaoVO();
|
||||
|
||||
//페이징 처리
|
||||
PaginationInfo paginationInfo = new PaginationInfo();
|
||||
paginationInfo.setCurrentPageNo(channelIDVO.getPageIndex());
|
||||
paginationInfo.setRecordCountPerPage(9);
|
||||
paginationInfo.setPageSize(channelIDVO.getPageSize());
|
||||
|
||||
kakaoVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||
kakaoVO.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||
kakaoVO.setRecordCountPerPage(9);
|
||||
|
||||
kakaoVO.setSenderKey(channelIDVO.getSenderKey());
|
||||
kakaoVO.setPage(Integer.toString(channelIDVO.getPageIndex()));
|
||||
kakaoVO.setSearchKeyword(channelIDVO.getSearchKeyword());
|
||||
kakaoVO.setUserId(channelIDVO.getUserId());
|
||||
|
||||
String templateStatus = channelIDVO.getTemplateStatus();
|
||||
String keyword = channelIDVO.getSearchKeyword();
|
||||
|
||||
/*if(keyword != null && keyword != "") {
|
||||
kakaoVO.setSearchKeyword(keyword);
|
||||
}else {
|
||||
kakaoVO.setSearchKeyword("");
|
||||
}*/
|
||||
|
||||
if("".equals(kakaoVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
||||
kakaoVO.setSearchSortCnd("friendId");
|
||||
kakaoVO.setSearchSortOrd("desc");
|
||||
}
|
||||
|
||||
//채널 아이디 정보
|
||||
String yellowId = kakaoVO.getYellowId();
|
||||
|
||||
kakaoVO.setCount("9"); //페이지 별 템플릿 개수 9개로
|
||||
List<KakaoVO> kakaoTemplateInfoList = new ArrayList<KakaoVO>();
|
||||
kakaoTemplateInfoList = kakaoFtTemplateService.selectKakaoFriendsTemplateList(kakaoVO);
|
||||
|
||||
model.addAttribute("kakaoVO", kakaoVO);
|
||||
model.addAttribute("paginationInfo", paginationInfo);
|
||||
model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList); //친구톡 템플릿 리스트
|
||||
paginationInfo.setTotalRecordCount(kakaoTemplateInfoList.size() > 0 ? ((KakaoVO)kakaoTemplateInfoList.get(0)).getTotCnt() : 0);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("KakaoFTChannelIDTemplateListPopupAjax Contrller Error ::: " + e);
|
||||
}
|
||||
|
||||
return "uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateListPop";
|
||||
}
|
||||
|
||||
/**
|
||||
* 채널 아이디별 등록 친구톡 템플릿 상세내용 팝업화면 관리자페이지
|
||||
* @param ChannelIDVO
|
||||
* @param request
|
||||
* @param model
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping("/uss/ion/kakaoft/KakaoFTChannelIDTemplateDetailPopupAjax.do")
|
||||
public String KakaoFTChannelIDTemplateDetailPopupAjax(@ModelAttribute("searchVO") ChannelIDVO channelIDVO,
|
||||
HttpServletRequest request ,
|
||||
ModelMap model) throws Exception {
|
||||
|
||||
|
||||
try {
|
||||
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String id = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
if(id == "") {
|
||||
return "redirect:/uat/uia/EgovLoginUsr.do";
|
||||
}
|
||||
|
||||
KakaoVO kakaoVO = new KakaoVO();
|
||||
kakaoVO.setSenderKey(channelIDVO.getSenderKey());
|
||||
kakaoVO.setFriendId(channelIDVO.getTemplateCode());
|
||||
kakaoVO.setUserId(channelIDVO.getUserId());
|
||||
|
||||
String senderKey = kakaoVO.getSenderKey();
|
||||
model.addAttribute("senderKey", senderKey);
|
||||
|
||||
//친구톡 템플릿 조회하기
|
||||
KakaoVO resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO);
|
||||
model.addAttribute("resultTemplateVO", resultTemplateVO);
|
||||
|
||||
// 사용자 아이디를 이용한 발신프로필 조회
|
||||
kakaoVO.setUserId(channelIDVO.getUserId());
|
||||
List<KakaoVO> selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
|
||||
model.addAttribute("kakaoProfileList", selectKakaoProfileList);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("KakaoFTChannelIDTemplateDetailPopupAjax Contrller Error ::: " + e);
|
||||
}
|
||||
|
||||
return "uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateDetailPop";
|
||||
}
|
||||
|
||||
/**
|
||||
* 카톡 전송사 발송 결과 코드 리스트
|
||||
* @param MjonMsgResultCodeVO
|
||||
|
||||
@ -12,6 +12,7 @@ import itn.com.cmm.util.StringUtil;
|
||||
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave;
|
||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||
import itn.let.mjo.msgdata.service.MjonMsgDataService;
|
||||
import itn.let.mjo.spammsg.web.ComGetSpamStringParser;
|
||||
import itn.let.sym.site.service.JoinSettingVO;
|
||||
import itn.let.uss.umt.service.MberManageVO;
|
||||
|
||||
@ -149,6 +150,134 @@ public class KakaoSendUtil {
|
||||
return kakaoVO;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Method Name : kakaoFTSendPrice
|
||||
* @작성일 : 2024. 1. 17.
|
||||
* @작성자 : WYH
|
||||
* @Method 설명 : 카카오 친구톡 전송 가격 설정
|
||||
*/
|
||||
public KakaoVO kakaoFTSendPrice(KakaoVO kakaoVO) throws Exception {
|
||||
|
||||
//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
|
||||
String befCash = kakaoVO.getBefCash();
|
||||
|
||||
//VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴
|
||||
if("".equals(befCash) || befCash == null) {
|
||||
|
||||
}
|
||||
MjonMsgVO mjonMsgVO = new MjonMsgVO();
|
||||
mjonMsgVO.setUserId(kakaoVO.getUserId());
|
||||
String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO);
|
||||
String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO);
|
||||
|
||||
//1.시스템 기본 단가 정보 불러오기
|
||||
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
|
||||
|
||||
//2.사용자 개인 단가 정보 불러오기
|
||||
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
|
||||
Float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
|
||||
|
||||
/** 대체문자 여부 체크(있으면 대체문자 가격으로 없으면 카카오톡 가격으로) */
|
||||
//대체문자 발송 여부 확인
|
||||
if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
||||
|
||||
|
||||
String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
|
||||
int callToCnt = kakaoVO.getCallToList().length;
|
||||
String sendType = "";
|
||||
|
||||
for(int count =0; count < callToCnt; count++) {
|
||||
String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
|
||||
if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
|
||||
tempSubMagTxt = kakaoFTSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
|
||||
}
|
||||
int bytes = tempSubMagTxt.getBytes(charset).length;
|
||||
|
||||
if(bytes < 2000) {
|
||||
if(bytes > 90) {
|
||||
sendType = "MMS";
|
||||
break;
|
||||
}else {
|
||||
sendType = "SMS";
|
||||
}
|
||||
}else {
|
||||
kakaoVO.setResultCode("2000");
|
||||
return kakaoVO;
|
||||
}
|
||||
}
|
||||
|
||||
if(sendType.equals("MMS")) {
|
||||
//협의 단가가 없으면 시스템 단가로 지정
|
||||
if(mberManageVO.getLongPrice() < 1) {
|
||||
kakaoFtPrice = sysJoinSetVO.getLongPrice();
|
||||
|
||||
kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
|
||||
kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
|
||||
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
|
||||
}else {
|
||||
kakaoFtPrice = mberManageVO.getLongPrice();
|
||||
|
||||
kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
|
||||
kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
|
||||
|
||||
if(mberManageVO.getKakaoFtPrice() < 1) {
|
||||
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
|
||||
}else {
|
||||
kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
|
||||
}
|
||||
}
|
||||
}else {
|
||||
//협의 단가가 없으면 시스템 단가로 지정
|
||||
if(mberManageVO.getShortPrice() < 1) {
|
||||
kakaoFtPrice = sysJoinSetVO.getShortPrice();
|
||||
|
||||
kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
|
||||
kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
|
||||
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
|
||||
}else {
|
||||
kakaoFtPrice = mberManageVO.getShortPrice();
|
||||
|
||||
kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
|
||||
kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
|
||||
|
||||
if(mberManageVO.getKakaoFtPrice() < 1) {
|
||||
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
|
||||
}else {
|
||||
kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
|
||||
if(kakaoFtPrice < 1) { //협의 단가가 없으면 시스템 단가로 지정
|
||||
kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice();
|
||||
|
||||
kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
|
||||
kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
|
||||
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
|
||||
}else {
|
||||
kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
|
||||
kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
|
||||
kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
|
||||
}
|
||||
}
|
||||
|
||||
/** 전송인원 확인*/
|
||||
int totCallCnt = kakaoVO.getCallToList().length;
|
||||
Float kakaoTotPrice = totCallCnt * kakaoFtPrice; // 총결제 금액 = 총 전송수량 * 카카오 친구톡 단가
|
||||
String totPrice = kakaoTotPrice.toString();
|
||||
System.out.println("@@@@@@@ : "+kakaoTotPrice +" = "+totCallCnt+" * "+kakaoFtPrice);
|
||||
|
||||
kakaoVO.setEachPrice(kakaoFtPrice.toString());
|
||||
kakaoVO.setBefCash(userMoney); // 고객 충전금액
|
||||
kakaoVO.setBefPoint(userPoint); // 고객 충전 포인트
|
||||
kakaoVO.setTotPrice(totPrice); // 총 카카오 전송 금액
|
||||
|
||||
return kakaoVO;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @methodName : selectSendPriceOfKakaoAtAndSmsAndMms
|
||||
* @author : 이호영
|
||||
@ -171,6 +300,10 @@ public class KakaoSendUtil {
|
||||
if(mberManageVO.getKakaoAtPrice() == 0.0f)
|
||||
mberManageVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
|
||||
|
||||
//카카오 친구톡 개인 단가가 없는 경우 시스템 단가로
|
||||
if(mberManageVO.getKakaoFtPrice() == 0.0f)
|
||||
mberManageVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
|
||||
|
||||
|
||||
// SMS 인경우
|
||||
// 사용자 개인 단가가 없으면 시스템 단가로
|
||||
@ -284,6 +417,84 @@ public class KakaoSendUtil {
|
||||
return kakaoVO;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Method Name : kakaoFTSendMsg
|
||||
* @작성일 : 2024. 1. 17.
|
||||
* @작성자 : 우영두
|
||||
* @Method 설명 : 카카오 친톡 전송 메세지 설정
|
||||
*/
|
||||
public KakaoVO kakaoFTSendMsg(KakaoVO kakaoVO) throws Exception {
|
||||
List<KakaoVO> kakaoSendList = new ArrayList<KakaoVO>();
|
||||
//전체 받는사람 수량만큼 반복 확인
|
||||
int callToCnt = kakaoVO.getCallToList().length;
|
||||
try {
|
||||
for(int count =0; count < callToCnt; count++) {
|
||||
|
||||
KakaoVO setSendMsgVO = new KakaoVO();
|
||||
|
||||
setSendMsgVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
|
||||
// 카카오 전송내용 설정
|
||||
// 변환문자 포함(Y), 미포함(N)
|
||||
if(kakaoVO.getTxtReplYn().equals("Y")) {
|
||||
|
||||
String templateContent = kakaoFTSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, count);
|
||||
setSendMsgVO.setTemplateContent(templateContent);
|
||||
|
||||
}else {
|
||||
|
||||
// 템플릿 내용 설정
|
||||
setSendMsgVO.setTemplateContent(kakaoVO.getTemplateContent());
|
||||
}
|
||||
|
||||
//대체문자 포함(Y), 미포함(N)
|
||||
if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
||||
|
||||
String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
|
||||
|
||||
String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
|
||||
kakaoVO.setKakaoSubMagOrgnlTxt(tempSubMagTxt);
|
||||
if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
|
||||
tempSubMagTxt = kakaoFTSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
|
||||
}
|
||||
|
||||
setSendMsgVO.setSubMsgTxt(tempSubMagTxt);
|
||||
|
||||
int FrBytes = tempSubMagTxt.getBytes(charset).length;
|
||||
|
||||
//메세지 길이가 90Byte가 초과시 MMS
|
||||
if(FrBytes > 90) {
|
||||
setSendMsgVO.setSubMsgType("MMS");
|
||||
}else {// 아니면 SMS
|
||||
setSendMsgVO.setSubMsgType("SMS");
|
||||
}
|
||||
}
|
||||
|
||||
if(kakaoVO.getBizJsonYn().equals("Y")) {
|
||||
kakaoVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
|
||||
|
||||
String[] varValInfo = null;
|
||||
if( kakaoVO.getVarValList().size() != 0) {
|
||||
varValInfo = kakaoVO.getVarValList().get(count);
|
||||
}
|
||||
String jsonFileName = kakaoApiJsonSave.kakaoApiFTJsonSave(kakaoVO);
|
||||
// String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, kakaoVO.getVarValList().get(count));
|
||||
setSendMsgVO.setBizJsonName(jsonFileName); //json 파일명
|
||||
}
|
||||
|
||||
kakaoSendList.add(setSendMsgVO);
|
||||
}
|
||||
kakaoVO.setKakaoSendList(kakaoSendList);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println(e.toString());
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return kakaoVO;
|
||||
}
|
||||
|
||||
|
||||
public String kakaoSendMsgTest(KakaoVO kakaoVO) throws Exception {
|
||||
String templateContent = "";
|
||||
try {
|
||||
@ -339,4 +550,159 @@ public class KakaoSendUtil {
|
||||
}
|
||||
return tempSubMagTxt;
|
||||
}
|
||||
|
||||
public String kakaoFTSubMagTxtRepl(String tempSubMagTxt, KakaoVO kakaoVO, int count) throws Exception{
|
||||
|
||||
List<String[]> varValList = kakaoVO.getVarValList();
|
||||
|
||||
tempSubMagTxt = getKakaoFTCntReplace(varValList.get(count)[0], tempSubMagTxt);
|
||||
|
||||
return tempSubMagTxt;
|
||||
}
|
||||
|
||||
/*
|
||||
* 카카오 친구톡 치환 내용에 대한 변환 처리
|
||||
*
|
||||
*
|
||||
* */
|
||||
public String getKakaoFTCntReplace(String varValStr, String contents) throws Exception{
|
||||
|
||||
String[] array = varValStr.split("¶");
|
||||
String tmpContents = contents;
|
||||
for(int j=0; j < array.length; j++) {
|
||||
String tmpVarVal = array[j].replaceAll("§", ",");
|
||||
if(tmpVarVal.length() > 0) {
|
||||
|
||||
if(tmpContents.contains("#{이름}") && j == 0) {
|
||||
tmpContents = tmpContents.replaceAll("\\#\\{이름\\}", tmpVarVal);
|
||||
}
|
||||
|
||||
//1번째에 핸드폰 번호가 포함 되어 있어서 건너뜀
|
||||
|
||||
if(tmpContents.contains("#{1}") && j == 2) {
|
||||
tmpContents = tmpContents.replaceAll("\\#\\{1\\}", tmpVarVal);
|
||||
}
|
||||
|
||||
if(tmpContents.contains("#{2}") && j == 3) {
|
||||
tmpContents = tmpContents.replaceAll("\\#\\{2\\}", tmpVarVal);
|
||||
}
|
||||
|
||||
if(tmpContents.contains("#{3}") && j == 4) {
|
||||
tmpContents = tmpContents.replaceAll("\\#\\{3\\}", tmpVarVal);
|
||||
}
|
||||
|
||||
if(tmpContents.contains("#{4}") && j == 5) {
|
||||
tmpContents = tmpContents.replaceAll("\\#\\{4\\}", tmpVarVal);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return tmpContents;
|
||||
}
|
||||
|
||||
/*
|
||||
* 카카오 친구톡 치환문자 내용 스팸 필터
|
||||
* 치환변수 내용 및 템플릿 내용, 스팸필터 단어 리스트를 전달하면 스팸 문구 포함 문구 리턴
|
||||
* 없으면 공백을 리턴
|
||||
*
|
||||
* */
|
||||
public String getKakaoFTCntRepToSpamFilter(List<String[]> varValList, List<String> resultSpamTxt, String contents) throws Exception {
|
||||
String spmFilterTxt = "";
|
||||
for(int i=0; i < varValList.size(); i++) {
|
||||
|
||||
String tmpContents = getKakaoFTCntReplace(varValList.get(i)[0], contents);
|
||||
|
||||
//입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함.
|
||||
String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim();
|
||||
//List<String> jasoList = HangulParser.disassemble(resultParser);
|
||||
//String assembleStr = HangulParser.assemble(jasoList);
|
||||
|
||||
//데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함.
|
||||
int spmCnt = 0;
|
||||
for(String spmTxt : resultSpamTxt) {
|
||||
|
||||
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
|
||||
|
||||
if(resultParser.contains(parserStr)) {
|
||||
|
||||
//스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌.
|
||||
spmFilterTxt += spmTxt + ",";
|
||||
spmCnt++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리
|
||||
|
||||
if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
|
||||
// 처음부터 idx 만큼 잘라낸 나머지 글자
|
||||
spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1);
|
||||
|
||||
}
|
||||
|
||||
System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
|
||||
|
||||
return spmFilterTxt;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/*
|
||||
* 치환문자가 없는 내용에 대한 스팸필터링 처리
|
||||
*
|
||||
* */
|
||||
public String getKakaoFTCntToSpamFilter(List<String> resultSpamTxt, String contents) throws Exception {
|
||||
String spmFilterTxt = "";
|
||||
//for(int i=0; i < varValList.size(); i++) {
|
||||
//String[] array = varValList.get(i)[0].split("¶");
|
||||
String tmpContents = contents;
|
||||
System.out.println(tmpContents);
|
||||
|
||||
//입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함.
|
||||
String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim();
|
||||
//List<String> jasoList = HangulParser.disassemble(resultParser);
|
||||
//String assembleStr = HangulParser.assemble(jasoList);
|
||||
|
||||
System.out.println("++++++++++++++ spam resultParser ::: "+resultParser);
|
||||
|
||||
//데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함.
|
||||
int spmCnt = 0;
|
||||
for(String spmTxt : resultSpamTxt) {
|
||||
|
||||
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
|
||||
|
||||
if(resultParser.contains(parserStr)) {
|
||||
|
||||
//스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌.
|
||||
spmFilterTxt += spmTxt + ",";
|
||||
spmCnt++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리
|
||||
|
||||
if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
|
||||
// 처음부터 idx 만큼 잘라낸 나머지 글자
|
||||
spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1);
|
||||
|
||||
}
|
||||
|
||||
System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
|
||||
|
||||
return spmFilterTxt;
|
||||
|
||||
}
|
||||
|
||||
//}
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -238,6 +238,7 @@ public class KakaoVO extends MjonMsgVO{
|
||||
private String imageTitle; //친구톡 이미지 제목
|
||||
private String imageLink; //친구톡 이미지 클릭시 링크 주소
|
||||
private String jsonText; //json 파일 생성시 내용 저장(혹시 몰라서 내용도 별도로 저장함)
|
||||
private String imageFileName; //친구톡 이미지 원본 파일명
|
||||
|
||||
private String successDay;
|
||||
private String successMonth;
|
||||
@ -1110,6 +1111,14 @@ public class KakaoVO extends MjonMsgVO{
|
||||
this.jsonText = jsonText;
|
||||
}
|
||||
|
||||
public String getImageFileName() {
|
||||
return imageFileName;
|
||||
}
|
||||
|
||||
public void setImageFileName(String imageFileName) {
|
||||
this.imageFileName = imageFileName;
|
||||
}
|
||||
|
||||
public String getSbscrbDe() {
|
||||
return sbscrbDe;
|
||||
}
|
||||
|
||||
@ -3,18 +3,14 @@ package itn.let.kakao.kakaoComm.kakaoApi;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONArray;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -159,4 +155,111 @@ public class KakaoApiJsonSave {
|
||||
}
|
||||
return jsonFileName;
|
||||
}
|
||||
|
||||
/*
|
||||
* 친구톡 발송시 이미지, 버튼 추가에 따른 Json 파일 생성
|
||||
* 2024.01.17
|
||||
* 우영두
|
||||
* 파일은 하나만 생성해서 동일하게 사용함.
|
||||
*
|
||||
* */
|
||||
@SuppressWarnings("unchecked")
|
||||
public String kakaoApiFTJsonSave(KakaoVO kakaoVO) {
|
||||
// json파일 저장
|
||||
|
||||
Date nowDate = new Date();
|
||||
SimpleDateFormat todayFrom = new SimpleDateFormat("yyyyMMdd");
|
||||
SimpleDateFormat timeFrom = new SimpleDateFormat("HHmmss");
|
||||
String jsonFileName = mjonBizJsonDir+"/"+kakaoVO.getUserId()+"/"+todayFrom.format(nowDate)+"/"+kakaoVO.getSendType(); // 아이디/날짜/타입
|
||||
|
||||
String fileName = timeFrom.format(nowDate)+"_"+kakaoVO.getMsgGroupId()+".json";
|
||||
|
||||
try {
|
||||
|
||||
File userIdFile = new File(jsonFileName);
|
||||
if(!userIdFile.exists()) {
|
||||
userIdFile.mkdirs(); // 없으면 하위 디렉토리 까지 생성
|
||||
jsonFileName = jsonFileName +"/"+fileName;
|
||||
}else {
|
||||
|
||||
jsonFileName = jsonFileName +"/"+fileName;
|
||||
System.out.println("jsonFileName : "+jsonFileName);
|
||||
File file1 = new File(jsonFileName);
|
||||
if (file1.isFile()) {
|
||||
return jsonFileName;
|
||||
}
|
||||
}
|
||||
|
||||
//KakaoReturnVO templateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
|
||||
|
||||
// 버튼리스트 JSON 생성
|
||||
JSONArray buttonList = new JSONArray();
|
||||
for(KakaoButtonVO buttonInfoVO : kakaoVO.getButtonVOList()) {
|
||||
JSONObject buttonInfo = new JSONObject();
|
||||
|
||||
buttonInfo.put("name", buttonInfoVO.getName());
|
||||
buttonInfo.put("type", buttonInfoVO.getLinkType());
|
||||
|
||||
if(buttonInfoVO.getLinkType().equals("WL")) {
|
||||
buttonInfo.put("url_mobile", buttonInfoVO.getLinkMo());
|
||||
buttonInfo.put("url_pc", buttonInfoVO.getLinkPc());
|
||||
}else if(buttonInfoVO.getLinkType().equals("AL")) {
|
||||
buttonInfo.put("scheme_ios", buttonInfoVO.getLinkIos());
|
||||
buttonInfo.put("scheme_android", buttonInfoVO.getLinkAnd());
|
||||
}else if(buttonInfoVO.getLinkType().equals("BC")) {
|
||||
// 상담톡 진행시 등록해야함
|
||||
}else if(buttonInfoVO.getLinkType().equals("BT")) {
|
||||
// 봇 전환 시 전달
|
||||
}
|
||||
buttonList.add(buttonInfo);
|
||||
}
|
||||
|
||||
// 강조유형 JSON 생성
|
||||
JSONObject templateImageInfo = new JSONObject();
|
||||
JSONObject templateImageExtInfo = new JSONObject();
|
||||
String imageType = kakaoVO.getImageType();
|
||||
|
||||
if(!imageType.equals("")) {
|
||||
templateImageInfo.put("img_url", kakaoVO.getTemplateImageUrl());
|
||||
templateImageInfo.put("img_link", kakaoVO.getImgLink());
|
||||
}
|
||||
|
||||
if(imageType.equals("W")) {
|
||||
templateImageExtInfo.put("wide", "Y");
|
||||
}
|
||||
|
||||
|
||||
JSONObject jo = new JSONObject();
|
||||
|
||||
if(buttonList.size() != 0) {
|
||||
jo.put("button", buttonList);
|
||||
}
|
||||
|
||||
if(templateImageInfo.size() != 0) {
|
||||
jo.put("image", templateImageInfo);
|
||||
}
|
||||
|
||||
if(templateImageExtInfo.size() != 0) {
|
||||
jo.put("extra", templateImageExtInfo);
|
||||
}
|
||||
|
||||
// 입력 json 데이터를 파일로 변경
|
||||
String jsonStr = jo.toString();
|
||||
System.out.println("jsonFileName : "+jsonFileName);
|
||||
|
||||
File outPut = new File(jsonFileName);
|
||||
outPut.createNewFile();
|
||||
|
||||
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outPut), "utf-8"));
|
||||
bw.write(jsonStr);
|
||||
bw.close();
|
||||
|
||||
} catch (IOException e) {
|
||||
System.out.println("json 생성 실패");
|
||||
e.printStackTrace();
|
||||
}
|
||||
return jsonFileName;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -15,8 +15,14 @@ public interface KakaoAlimTalkService {
|
||||
|
||||
//카카오 알림톡 발신
|
||||
public MjonMsgReturnVO insertKakaoAtSandAjax(KakaoVO kakaoVO) throws Exception;
|
||||
|
||||
//카카오 친구톡 발신
|
||||
public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception;
|
||||
|
||||
//카카오 알림톡 전송 실패 환불리스트 조회
|
||||
public void selectKakaoAtSentRefundList() throws Exception;
|
||||
|
||||
//카카오 친구톡 전송 실패 환불리스트 조회
|
||||
public void selectKakaoFtSentRefundList() throws Exception;
|
||||
|
||||
}
|
||||
|
||||
@ -7,7 +7,6 @@ import org.springframework.stereotype.Repository;
|
||||
|
||||
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||
|
||||
@Repository("kakaoAlimTalkDAO")
|
||||
public class KakaoAlimTalkDAO extends EgovAbstractDAO {
|
||||
@ -62,6 +61,11 @@ public class KakaoAlimTalkDAO extends EgovAbstractDAO {
|
||||
return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoAtSentRefundList");
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<KakaoVO> selectKakaoFtSentRefundList() throws Exception{
|
||||
return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoFtSentRefundList");
|
||||
}
|
||||
|
||||
public KakaoVO selectKakaoAtUmid(KakaoVO kakaoVO) throws Exception{
|
||||
return (KakaoVO) select("kakaoAlimTalkDAO.selectKakaoAtUmid", kakaoVO);
|
||||
}
|
||||
@ -77,4 +81,17 @@ public class KakaoAlimTalkDAO extends EgovAbstractDAO {
|
||||
public void updateKakaoAtNotSend(KakaoVO kakaoVO) {
|
||||
select("kakaoAlimTalkDAO.updateKakaoAtNotSend", kakaoVO);
|
||||
}
|
||||
|
||||
|
||||
public void updateKakaoFtSend(KakaoVO kakaoVO) {
|
||||
select("kakaoAlimTalkDAO.updateKakaoFtSend", kakaoVO);
|
||||
}
|
||||
|
||||
public void updateKakaoFtSubMsgSend(KakaoVO kakaoVO) {
|
||||
select("kakaoAlimTalkDAO.updateKakaoFtSubMsgSend", kakaoVO);
|
||||
}
|
||||
|
||||
public void updateKakaoFtNotSend(KakaoVO kakaoVO) {
|
||||
select("kakaoAlimTalkDAO.updateKakaoFtNotSend", kakaoVO);
|
||||
}
|
||||
}
|
||||
|
||||
@ -409,7 +409,343 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
||||
}
|
||||
return returnVO;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//카카오 친구톡 발신
|
||||
@Override
|
||||
public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception {
|
||||
|
||||
MjonMsgReturnVO returnVO = new MjonMsgReturnVO();
|
||||
try {
|
||||
String agentCode = "04"; // 다우기술 agent 코드 고정
|
||||
String msgType = "9"; // 카카오 알림톡 전송 코드 : 8번
|
||||
|
||||
int totCnt = 1; // 문자 리스트 추가 수량
|
||||
int resultCnt = 0; // 최종전송 수량
|
||||
int callToCnt = kakaoVO.getCallToList().length; // 전체 받는사람 건수
|
||||
|
||||
//Controller에서 전달 받은 분할 시간 정보 리스트
|
||||
List<String> dividDayList = kakaoVO.getDividDay();
|
||||
//String sendTime = kakaoVO.getReqDate();
|
||||
String[] phoneList = kakaoVO.getCallToList(); //받는사람 연락처 리스트
|
||||
|
||||
//카카오 알림톡 전송 리스트
|
||||
List<KakaoVO> kakaoFtSendList = new ArrayList<KakaoVO>();
|
||||
|
||||
//야간스미싱 알림여부 정보 불러오기
|
||||
JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail();
|
||||
String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti();
|
||||
|
||||
//스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수
|
||||
boolean spamSmishingPassStatus = false; //야간스미싱 알림여부가 활성화인 경우 false, 비활성화인경우 true 값을 가지도록 한다.
|
||||
|
||||
//야간스미싱알리 여부가 비활성화 인경우 무조건 문자를 즉시 보내도록 한다.
|
||||
//현재는 평일, 주말, 휴일 상관없이 N 이면 30분 딜레이 없이 발송 처리하도록 함.
|
||||
if(holiSmishingNoti.equals("Y")) {
|
||||
|
||||
MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO();
|
||||
|
||||
msgAlarmSetVO.setUseYn("Y");
|
||||
msgAlarmSetVO.setFirstIndex(0);
|
||||
|
||||
List<MsgAlarmSetVO> resultAlarmList = msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO);
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
int year = calendar.get(Calendar.YEAR);
|
||||
|
||||
MsgHolidayVO msgHolidayVO = new MsgHolidayVO();
|
||||
msgHolidayVO.setFirstIndex(0);
|
||||
msgHolidayVO.setRecordCountPerPage(100);
|
||||
msgHolidayVO.setSearchHoliYear(Integer.toString(year));
|
||||
|
||||
List<MsgHolidayVO> resultHolidayList = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO);
|
||||
|
||||
MjonHolidayApi mjonHolidayApi = new MjonHolidayApi();
|
||||
|
||||
boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList);
|
||||
|
||||
spamSmishingPassStatus = smishingAlarmPassSts;
|
||||
}else {
|
||||
|
||||
spamSmishingPassStatus = true;
|
||||
|
||||
}
|
||||
|
||||
String atSmishingYn = kakaoVO.getAtSmishingYn();
|
||||
|
||||
if(spamSmishingPassStatus) {
|
||||
atSmishingYn = "N";
|
||||
}
|
||||
|
||||
/** 카카오 알림톡 전송 리스트 생성 (시작)-------------------------------------------*/
|
||||
for(int i = 0; i < callToCnt; i++) {
|
||||
|
||||
KakaoVO kakaoSandInfo = new KakaoVO(); // 전송설정VO
|
||||
|
||||
kakaoSandInfo.setMsgId(idgenMsgId.getNextStringId()); // 문자 Id 설정
|
||||
kakaoSandInfo.setMsgGroupId(kakaoVO.getMsgGroupId()); // 문자 그룹ID 설정
|
||||
kakaoSandInfo.setUserId(kakaoVO.getUserId()); // 사용자 ID
|
||||
kakaoSandInfo.setAgentCode(agentCode); // 전송 agent 설정
|
||||
|
||||
kakaoSandInfo.setSenderKey(kakaoVO.getSenderKey());
|
||||
kakaoSandInfo.setTemplateCode(kakaoVO.getTemplateCode());
|
||||
|
||||
|
||||
kakaoSandInfo.setCallTo(phoneList[i]); // 받는사람 전화번호
|
||||
kakaoSandInfo.setCallFrom(kakaoVO.getCallFrom()); // 보내는사람 전화전호
|
||||
kakaoSandInfo.setMsgType(msgType); // 문자전송 타입 설정
|
||||
|
||||
|
||||
List<KakaoVO> kakaoSendMsgList = kakaoVO.getKakaoSendList();
|
||||
/**문자내용 치환 처리 (시작) --------------------------------------------*/
|
||||
kakaoSandInfo.setTemplateContent(kakaoSendMsgList.get(i).getTemplateContent()); //템플릿 내용 또는 치환 템플릿 내용
|
||||
/**문자내용 치환 처리 (끝) ---------------------------------------------*/
|
||||
|
||||
kakaoSandInfo.setTemplateTitle(kakaoSendMsgList.get(i).getTemplateTitle());
|
||||
|
||||
/**json파일 여부 (시작) --------------------------------------------*/
|
||||
kakaoSandInfo.setBizJsonYn(kakaoVO.getBizJsonYn());
|
||||
if(kakaoVO.getBizJsonYn().equals("Y")){
|
||||
kakaoSandInfo.setBizJsonName(kakaoSendMsgList.get(i).getBizJsonName());
|
||||
}
|
||||
/**json파일 여부 (끝) ---------------------------------------------*/
|
||||
|
||||
/**대체문자 처리 (시작) --------------------------------------------*/
|
||||
kakaoSandInfo.setSubMsgSendYn(kakaoVO.getSubMsgSendYn()); // 대체문자 전송여부 설정
|
||||
if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
||||
kakaoSandInfo.setSubMsgType(kakaoSendMsgList.get(i).getSubMsgType()); // 대체문자 전송 타입
|
||||
kakaoSandInfo.setSubMsgTxt(kakaoSendMsgList.get(i).getSubMsgTxt()); // 대체문자 전송 내용
|
||||
}
|
||||
/**대체문자 처리 (끝) ---------------------------------------------*/
|
||||
|
||||
/**전송시간 설정 (시작)------------------------------------------------*/
|
||||
if(!kakaoVO.getReserveYn().equals("N")) {
|
||||
/** 예약 발송 설정 */
|
||||
//분할 발송을 체크 한 경우
|
||||
if(kakaoVO.getDivideChk().equals("Y")) {
|
||||
|
||||
kakaoSandInfo.setReqDate(dividDayList.get(i)); //분할 문자 예약 시간 입력해주기
|
||||
|
||||
}else {
|
||||
|
||||
kakaoSandInfo.setReqDate(kakaoVO.getReqDate());
|
||||
|
||||
}
|
||||
}else {
|
||||
/** 즉시 발송 설정 */
|
||||
Date now = new Date();
|
||||
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||
kakaoVO.setReqDate(sdFormat.format(now));
|
||||
kakaoSandInfo.setReqDate(sdFormat.format(now));
|
||||
|
||||
}
|
||||
|
||||
if(atSmishingYn.equals("Y")) {
|
||||
String sandDate = "";
|
||||
|
||||
if(kakaoVO.getDivideChk().equals("Y")) {
|
||||
//분할 문자 예약 시간 입력해주기
|
||||
sandDate = dividDayList.get(i);
|
||||
}else {
|
||||
//예약 시간 입력해주기
|
||||
sandDate = kakaoVO.getReqDate();
|
||||
}
|
||||
|
||||
if(!kakaoVO.getReserveYn().equals("N")) {
|
||||
/** 예약 발송 설정 */
|
||||
if (i == 0) {
|
||||
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||
Date date = sdFormat.parse(sandDate);
|
||||
|
||||
Calendar cal1 = Calendar.getInstance();
|
||||
cal1.setTime(date); // 시간 설정
|
||||
cal1.add(Calendar.MINUTE, 30); // 30분 연산
|
||||
|
||||
String reqDate = sdFormat.format(cal1.getTime());
|
||||
|
||||
System.out.println("@@@@@@@@@@@@@@ reqDate : "+reqDate);
|
||||
kakaoVO.setReqDate(reqDate);
|
||||
kakaoSandInfo.setReqDate(reqDate);
|
||||
}
|
||||
else {
|
||||
if(kakaoVO.getDivideChk().equals("Y")) {
|
||||
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||
Date date = sdFormat.parse(sandDate);
|
||||
|
||||
Calendar cal1 = Calendar.getInstance();
|
||||
cal1.setTime(date); // 시간 설정
|
||||
cal1.add(Calendar.MINUTE, 30); // 30분 연산
|
||||
|
||||
String reqDate = sdFormat.format(cal1.getTime());
|
||||
|
||||
System.out.println("@@@@@@@@@@@@@@ reqDate : "+reqDate);
|
||||
kakaoVO.setReqDate(reqDate);
|
||||
kakaoSandInfo.setReqDate(reqDate);
|
||||
}
|
||||
}
|
||||
}else {
|
||||
/** 즉시 발송 설정 */
|
||||
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||
Date date = sdFormat.parse(sandDate);
|
||||
|
||||
Calendar cal1 = Calendar.getInstance();
|
||||
cal1.setTime(date); // 시간 설정
|
||||
cal1.add(Calendar.MINUTE, 30); // 30분 연산
|
||||
|
||||
String reqDate = sdFormat.format(cal1.getTime());
|
||||
|
||||
System.out.println("@@@@@@@@@@@@@@ reqDate : "+reqDate);
|
||||
kakaoVO.setReqDate(reqDate);
|
||||
kakaoSandInfo.setReqDate(reqDate);
|
||||
}
|
||||
}
|
||||
|
||||
/**전송시간 설정 (끝)------------------------------------------------*/
|
||||
|
||||
/**카카오 전송 데이터 추가*/
|
||||
kakaoFtSendList.add(kakaoSandInfo);
|
||||
|
||||
|
||||
int instCnt = 0; // DB등록 완료 수량
|
||||
//지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌
|
||||
if(totCnt == callToCnt) {
|
||||
|
||||
if(kakaoFtSendList.size() > 0) {
|
||||
instCnt = kakaoAlimTalkDAO.insertKakaoAtDataInfo(kakaoFtSendList);
|
||||
}
|
||||
//총 디비 입력 건수 저장하기
|
||||
resultCnt = resultCnt + instCnt;
|
||||
|
||||
}else {
|
||||
|
||||
}
|
||||
totCnt++;
|
||||
|
||||
}
|
||||
/** 카카오 알림톡 전송 리스트 (종료)-------------------------------------------*/
|
||||
|
||||
/**
|
||||
* 1. 문자 발송 캐시 차감 ----------------------------------------------
|
||||
* 2. 문자 그룹 테이블 등록 --------------------------------------------
|
||||
*/
|
||||
|
||||
//문자 발송 캐시 차감 해주기
|
||||
MjonPayVO mjonPayVO = new MjonPayVO();
|
||||
|
||||
MjonMsgVO mjonMsgVO = new MjonMsgVO();
|
||||
|
||||
//1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다.
|
||||
//문자 발송 그룹 데이블에 추가
|
||||
if(resultCnt > 0) {
|
||||
|
||||
|
||||
/** 발송 캐시 차감---------------------------------------------*/
|
||||
|
||||
|
||||
int totSendCnt = kakaoVO.getCallToList().length;
|
||||
Float eachPrice = Float.parseFloat(kakaoVO.getEachPrice());
|
||||
Float totPrice = eachPrice * resultCnt;
|
||||
String strTotPrice = String.format("%.1f", totPrice);
|
||||
|
||||
mjonMsgVO.setTotPrice(strTotPrice);//현재 합산 금액 셋팅
|
||||
mjonPayVO.setCashId(idgenMjonCashId.getNextStringId());
|
||||
mjonPayVO.setUserId(kakaoVO.getUserId());
|
||||
mjonPayVO.setCash(-Float.parseFloat(strTotPrice));
|
||||
mjonPayVO.setFrstRegisterId(kakaoVO.getUserId());
|
||||
mjonPayVO.setMemo("카카오 친구톡 총 "+totSendCnt+"건 중 " + resultCnt + "건 발송");
|
||||
mjonPayVO.setMsgGroupId(kakaoVO.getMsgGroupId());
|
||||
|
||||
|
||||
mjonPayService.insertCash(mjonPayVO); //캐시차감
|
||||
mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트
|
||||
|
||||
/** 그룹 테이블 등록-------------------------------------------*/
|
||||
|
||||
mjonMsgVO.setUserId(kakaoVO.getUserId());
|
||||
mjonMsgVO.setMsgGroupId(kakaoVO.getMsgGroupId());
|
||||
mjonMsgVO.setCallFrom(kakaoVO.getCallFrom());
|
||||
mjonMsgVO.setSmsTxt(kakaoVO.getTemplateContent());
|
||||
mjonMsgVO.setReqDate(kakaoVO.getReqDate());
|
||||
mjonMsgVO.setMsgGroupCnt(Integer.toString(resultCnt));
|
||||
mjonMsgVO.setMsgType(msgType);
|
||||
mjonMsgVO.setAgentCode(agentCode);
|
||||
mjonMsgVO.setEachPrice(kakaoVO.getEachPrice());
|
||||
mjonMsgVO.setReserveYn(kakaoVO.getReserveYn());
|
||||
mjonMsgVO.setBefCash(kakaoVO.getBefCash());
|
||||
mjonMsgVO.setBefPoint(kakaoVO.getBefPoint());
|
||||
mjonMsgVO.setKakaoSubMagOrgnlTxt(kakaoVO.getKakaoSubMagOrgnlTxt());
|
||||
mjonMsgVO.setAtDelayYn(kakaoVO.getAtSmishingYn());
|
||||
|
||||
//야간 스미싱 알림 비활성화인 경우 딜레이처리 안하도록 함 20240912 우영두 수정
|
||||
if(spamSmishingPassStatus) {
|
||||
mjonMsgVO.setAtDelayYn("N");
|
||||
}else {
|
||||
mjonMsgVO.setAtDelayYn(kakaoVO.getAtSmishingYn());
|
||||
}
|
||||
|
||||
if(kakaoVO.getBizJsonYn().equals("Y")) {
|
||||
mjonMsgVO.setFileCnt("1");
|
||||
}else {
|
||||
mjonMsgVO.setFileCnt("0");
|
||||
}
|
||||
|
||||
mjonMsgVO.setDelayYn(kakaoVO.getDelayYn());
|
||||
|
||||
// 등록되어있는 그룹데이터가 있는지 조회
|
||||
int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO);
|
||||
|
||||
// 등록되어 있는 그룹데이터가 없으면 insert, 있으면 update를 진행한다.
|
||||
if(msgGroupDataCnt < 1) {
|
||||
mjonMsgDAO.insertGroupMsgData(mjonMsgVO);
|
||||
|
||||
/*
|
||||
* 현재 발송하는 카카오 친구톡 및 문자(단/장문) 발송 금액 정보를 mj_msg_group_id와 함께 디비에 저장해준다.
|
||||
* 환불할 때 각 단가를 사용하기 때문에 별도로 저장함.
|
||||
* 히스토리 기록을 위해서도 사용할 수 있을것 같음
|
||||
*
|
||||
* */
|
||||
kakaoAlimTalkDAO.insertKakaoSendPrice(kakaoVO);
|
||||
|
||||
|
||||
try {
|
||||
|
||||
//야간 스미싱 알림이 활성화 이고 알림 예외 일정에 포함되고, 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 우영두 추가
|
||||
if(holiSmishingNoti.equals("Y") && spamSmishingPassStatus && kakaoVO.getAtSmishingYn().equals("Y")) {
|
||||
mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("++++++++++++++++++++++++++++++ spamSmishingPassStatus 친구톡 야간 스미싱 알림 데이터 입력 오류 발생 !!!!");
|
||||
}
|
||||
|
||||
|
||||
}else {
|
||||
mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO);
|
||||
}
|
||||
}
|
||||
|
||||
returnVO.setSendMsgCnt(Integer.toString(resultCnt));
|
||||
|
||||
} catch (Exception e) {
|
||||
// 실패
|
||||
returnVO.setSendMsgCnt(Integer.toString(0)); //발송 건수 저장
|
||||
returnVO.setSendMsgBlockCnt(Integer.toString(0)); //수신차단 건수 저장
|
||||
returnVO.setAgentCode("01");
|
||||
|
||||
System.out.println("=========================================================================");
|
||||
System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfo ERROR !!! : " + e);
|
||||
System.out.println("=========================================================================");
|
||||
return returnVO;
|
||||
}
|
||||
return returnVO;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 카카오 알림톡 발송 실패에 따른 금액 환불 처리
|
||||
*
|
||||
* */
|
||||
@Override
|
||||
public void selectKakaoAtSentRefundList() throws Exception {
|
||||
|
||||
@ -439,4 +775,45 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 카카오 친구톡 발송 실패에 따른 금액 환불 처리
|
||||
* 카카오 친구톡 대체문자 선택에 대해 성공시 친구톡과 문자 간 금액 차액의 환불도 처리 됨.
|
||||
* */
|
||||
@Override
|
||||
public void selectKakaoFtSentRefundList() throws Exception {
|
||||
|
||||
/**
|
||||
* 1. 카카오 FT 전송성공 확인
|
||||
* 2. 카카오 FT 전송실패, 대채문자 전송확인
|
||||
* 3. 카카오 FT 전송 실패 확인
|
||||
*/
|
||||
List<KakaoVO> kakaoFtSentRefundList = kakaoAlimTalkDAO.selectKakaoFtSentRefundList();
|
||||
|
||||
for(KakaoVO vo : kakaoFtSentRefundList) {
|
||||
System.out.println(vo.getMsgGroupId() +"________결과 : " +vo.getRsltCode() +" 대체문자 전송 : "+vo.getSubMsgSendYn());
|
||||
|
||||
if(vo.getRsltCode().equals("7000")) {//친구톡 발송 성공시
|
||||
|
||||
kakaoAlimTalkDAO.updateKakaoFtSend(vo);
|
||||
|
||||
}else if(vo.getSubMsgSendYn().equals("Y")) {//친구톡 발송 실패 했을 경우
|
||||
|
||||
//대체문자 발송 UMID 번호 조회 - 알림톡 쿼리 동일하게 사용
|
||||
KakaoVO info = kakaoAlimTalkDAO.selectKakaoAtUmid(vo);
|
||||
|
||||
System.out.println("대체문자 전송 : " + info.getBizUmid());
|
||||
|
||||
if (info.getBizUmid() != null) {//대체문자 발송 완료인 경우
|
||||
kakaoAlimTalkDAO.updateKakaoAtSubMsgSend(vo);
|
||||
}else {
|
||||
kakaoAlimTalkDAO.updateKakaoFtNotSend(vo);
|
||||
}
|
||||
|
||||
}else {
|
||||
kakaoAlimTalkDAO.updateKakaoFtNotSend(vo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -871,6 +871,8 @@ public class KakaoAlimTalkTemplateController {
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
|
||||
model.addAttribute("loginVO", loginVO);
|
||||
|
||||
if(userId == "") {
|
||||
model.addAttribute("message", "로그인 후 이용이 가능합니다.");
|
||||
return "redirect:/web/user/login/login.do";
|
||||
|
||||
@ -14,4 +14,13 @@ public interface KakaoFriendsTalkTemplateService {
|
||||
|
||||
//친구톡 템플릿 삭제처리하기
|
||||
int deleteKakaoFriendstalkTemplate(KakaoVO kakaoVO) throws Exception;
|
||||
|
||||
//친구톡 템플릿 상세정보 조회
|
||||
KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception;
|
||||
|
||||
//친구톡 템플릿 수정처리하기
|
||||
int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception;
|
||||
|
||||
//친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리
|
||||
int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception;
|
||||
}
|
||||
|
||||
@ -107,4 +107,57 @@ public class KakaoFriendsTalkTemplateDAO extends EgovAbstractDAO{
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//친구톡 템플릿 상세정보 조회
|
||||
public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{
|
||||
|
||||
KakaoVO result = new KakaoVO();
|
||||
|
||||
try {
|
||||
|
||||
result = (KakaoVO) select("kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail", kakaoVO);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("selectKakaoFriendsTemplateDetail DAO Error !!! " + e);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
//친구톡 템플릿 수정처리하기
|
||||
public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
|
||||
|
||||
int result = 0;
|
||||
|
||||
try {
|
||||
|
||||
result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData", kakaoVO);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
//친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리
|
||||
public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{
|
||||
|
||||
int result = 0;
|
||||
|
||||
try {
|
||||
|
||||
result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel",kakaoVO);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -126,4 +126,102 @@ public class KakaoFriendsTalkTemplateServiceImpl extends EgovAbstractServiceImp
|
||||
return result;
|
||||
}
|
||||
|
||||
//친구톡 템플릿 상세정보 조회
|
||||
@Override
|
||||
public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{
|
||||
|
||||
KakaoVO result = new KakaoVO();
|
||||
|
||||
try {
|
||||
|
||||
result = kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail(kakaoVO);
|
||||
|
||||
//템플릿에 등록된 버튼정보가 있는지 확인하여 추가
|
||||
if(result != null) {
|
||||
|
||||
List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>();
|
||||
MjonKakaoTemplateButtonVO buttonVO = new MjonKakaoTemplateButtonVO();
|
||||
buttonVO.setTemplateId(kakaoVO.getFriendId());
|
||||
buttonVO.setTemplateUseType("F");
|
||||
buttonList = kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateButtons(buttonVO);
|
||||
|
||||
if(buttonList != null) {
|
||||
result.setButtonVOList(buttonList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("selectKakaoFriendsTemplateDetail ServiceImple Error !!! " + e);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
//친구톡 템플릿 수정처리하기
|
||||
@Override
|
||||
public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
|
||||
|
||||
int result = 0;
|
||||
int resultBtn = 0;
|
||||
|
||||
try {
|
||||
|
||||
//템플릿 정보 수정
|
||||
result = kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData(kakaoVO);
|
||||
|
||||
String friendId = kakaoVO.getFriendId();
|
||||
if(result > 0) {
|
||||
|
||||
//기존 버튼 정보 삭제
|
||||
int resultBtnCnt = kakaoFriendsTalkTemplateDAO.deleteKakaoFriendstalkButtons(kakaoVO);
|
||||
|
||||
//신규 버튼 정보 입력
|
||||
for(KakaoButtonVO button: kakaoVO.getButtonVOList()) {
|
||||
|
||||
MjonKakaoTemplateButtonVO tmpButtonVO = new MjonKakaoTemplateButtonVO();
|
||||
|
||||
tmpButtonVO.setTemplateId(friendId);
|
||||
tmpButtonVO.setTemplateUseType("F");
|
||||
tmpButtonVO.setButtonName(button.getName());
|
||||
tmpButtonVO.setButtonLinktype(button.getLinkType());
|
||||
tmpButtonVO.setButtonLinkpc(button.getLinkPc());
|
||||
tmpButtonVO.setButtonLinkmo(button.getLinkMo());
|
||||
tmpButtonVO.setButtonLinkios(button.getLinkIos());
|
||||
tmpButtonVO.setButtonLinkand(button.getLinkAnd());
|
||||
tmpButtonVO.setUserId(kakaoVO.getUserId());
|
||||
|
||||
int resultCnt = kakaoFriendsTalkTemplateDAO.insertKakaoFriendsTemplateButtonData(tmpButtonVO);
|
||||
resultBtn = resultBtn + resultCnt;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리
|
||||
@Override
|
||||
public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{
|
||||
|
||||
int result = 0;
|
||||
|
||||
try {
|
||||
|
||||
result = kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel(kakaoVO);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,30 +1,57 @@
|
||||
package itn.let.kakao.user.kakaoFt.web;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import itn.com.cmm.EgovMessageSource;
|
||||
import itn.com.cmm.LoginVO;
|
||||
import itn.com.cmm.util.MJUtil;
|
||||
import itn.com.utl.fcc.service.EgovStringUtil;
|
||||
import itn.let.kakao.kakaoComm.KakaoSendUtil;
|
||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||
import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
|
||||
import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService;
|
||||
import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
|
||||
import itn.let.mjo.mjocommon.MjonCommon;
|
||||
import itn.let.mjo.mjocommon.MjonHolidayApi;
|
||||
import itn.let.mjo.msgdata.service.MjonMsgDataService;
|
||||
import itn.let.mjo.msgdata.service.MjonMsgDataVO;
|
||||
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
|
||||
import itn.let.mjo.msgholiday.service.MsgAlarmSetVO;
|
||||
import itn.let.mjo.msgholiday.service.MsgHolidayService;
|
||||
import itn.let.mjo.msgholiday.service.MsgHolidayVO;
|
||||
import itn.let.mjo.symbol.service.MjonSymbolService;
|
||||
import itn.let.mjo.symbol.service.MjonSymbolVO;
|
||||
import itn.let.sym.site.service.EgovSiteManagerService;
|
||||
import itn.let.sym.site.service.JoinSettingVO;
|
||||
import itn.let.uss.umt.service.EgovUserManageService;
|
||||
import itn.let.uss.umt.service.MberManageVO;
|
||||
import itn.let.uss.umt.service.UserManageVO;
|
||||
|
||||
@Controller
|
||||
public class KakaoFriendsTalkSendController {
|
||||
|
||||
@Resource(name = "egovMjonMsgGroupIdGnrService")
|
||||
private EgovIdGnrService idgenMjonMsgGroupId;
|
||||
|
||||
/** EgovMessageSource */
|
||||
@Resource(name="egovMessageSource")
|
||||
EgovMessageSource egovMessageSource;
|
||||
@ -38,37 +65,159 @@ public class KakaoFriendsTalkSendController {
|
||||
@Resource(name = "MjonMsgDataService")
|
||||
private MjonMsgDataService mjonMsgDataService;
|
||||
|
||||
@Resource(name = "kakaoFriendsTalkTemplateService")
|
||||
private KakaoFriendsTalkTemplateService kakaoFtTemplateService;
|
||||
|
||||
/** userManageService */
|
||||
@Resource(name = "userManageService")
|
||||
private EgovUserManageService userManageService;
|
||||
|
||||
@Resource(name = "kakaoAlimTalkService")
|
||||
private KakaoAlimTalkService kakaoAlimTalkService;
|
||||
|
||||
/** 사이트 설정 */
|
||||
@Resource(name = "egovSiteManagerService")
|
||||
EgovSiteManagerService egovSiteManagerService;
|
||||
|
||||
@Resource(name = "MsgHolidayService")
|
||||
private MsgHolidayService msgHolidayService;
|
||||
|
||||
@Autowired
|
||||
KakaoSendUtil kakaoSendUtil;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @methodName : kakaoFriendsTalkMsgDataView
|
||||
* @author : 우영두
|
||||
* @date : 2024.01.05
|
||||
* @description : kakaoFriendsTalkMsgDataView 카카오 친구톡 발송 화면
|
||||
* @param kakaoVO
|
||||
* @param model
|
||||
* @param response
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
|
||||
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do"})
|
||||
public String KakaoAlimtalkMsgDataView(ModelMap model
|
||||
, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
||||
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
if(userId == "") {
|
||||
|
||||
/*if(userId == "") {
|
||||
return "redirect:/web/user/login/login.do";
|
||||
}
|
||||
}*/
|
||||
|
||||
model.addAttribute("loginVO", loginVO);
|
||||
|
||||
try {
|
||||
|
||||
//사용자 등록 발신프로필 정보 조회해오기
|
||||
kakaoVO.setUserId(userId);
|
||||
List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
|
||||
model.addAttribute("resultProfileList", resultProfileList);
|
||||
if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
|
||||
|
||||
// 특수문자 리스트 불러오기
|
||||
MjonSymbolVO symbolVO = new MjonSymbolVO();
|
||||
List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO);
|
||||
model.addAttribute("symbolList", symbolList);
|
||||
//사용자 등록 발신프로필 정보 조회해오기
|
||||
kakaoVO.setUserId(userId);
|
||||
List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
|
||||
model.addAttribute("resultProfileList", resultProfileList);
|
||||
|
||||
// 특수문자 리스트 불러오기
|
||||
MjonSymbolVO symbolVO = new MjonSymbolVO();
|
||||
List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO);
|
||||
model.addAttribute("symbolList", symbolList);
|
||||
|
||||
//아이디 발신번호 리스트 불러오기.
|
||||
List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId);
|
||||
List<String> resultPhonList = new ArrayList<String>();
|
||||
MJUtil mjUtil = new MJUtil();
|
||||
for(String phone : resultSendPhonList) {
|
||||
resultPhonList.add(mjUtil.addDash(phone));
|
||||
}
|
||||
model.addAttribute("resultPhonList", resultPhonList);
|
||||
|
||||
|
||||
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
|
||||
|
||||
model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn());
|
||||
|
||||
//3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용
|
||||
/*Float shortPrice = mberManageVO.getShortPrice();
|
||||
Float longPrice = mberManageVO.getLongPrice();
|
||||
Float picturePrice = mberManageVO.getPicturePrice();
|
||||
Float picture2Price = mberManageVO.getPicture2Price();
|
||||
Float picture3Price = mberManageVO.getPicture3Price();*/
|
||||
BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN);
|
||||
|
||||
model.addAttribute("userMoney", userMoney);
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
//최근 전송 내역
|
||||
MjonMsgDataVO searchVO = new MjonMsgDataVO();
|
||||
Calendar cal = Calendar.getInstance();
|
||||
Date now = new Date();
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
|
||||
cal.setTime(now);
|
||||
cal.add(Calendar.DATE, -3);
|
||||
String chkDate = format.format(cal.getTime());
|
||||
searchVO.setUserId(userId);
|
||||
searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작
|
||||
model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO));
|
||||
|
||||
//자주보내는 번호
|
||||
model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO));
|
||||
|
||||
// 사용자 정의 단가 정보 불러오기(시스템 단가 혹은 협의 단가)
|
||||
model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
|
||||
|
||||
|
||||
//사용자 템플릿 정보 조회
|
||||
String friendId = kakaoVO.getFriendId();
|
||||
KakaoVO resultTemplateVO = new KakaoVO();
|
||||
|
||||
if(friendId != null) {
|
||||
resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO);
|
||||
}
|
||||
model.addAttribute("resultTemplateVO", resultTemplateVO);
|
||||
|
||||
|
||||
//친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지
|
||||
|
||||
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
Date nows = new Date();
|
||||
String nowDate = sdf1.format(nows);
|
||||
cal.setTime(nows);
|
||||
|
||||
int hours = cal.get(Calendar.HOUR_OF_DAY);
|
||||
int minuts = cal.get(Calendar.MINUTE);
|
||||
|
||||
boolean sendStatus = true;
|
||||
|
||||
if(hours >= 20) {
|
||||
|
||||
if(minuts >= 50) {
|
||||
|
||||
System.out.println("발송금지 시간" + hours + ":" + minuts);
|
||||
sendStatus = false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(hours < 8) {
|
||||
|
||||
System.out.println("발송금지 시간" + hours + ":" + minuts);
|
||||
sendStatus = false;
|
||||
|
||||
}
|
||||
|
||||
System.out.println("발송상태는 ::: "+sendStatus);
|
||||
model.addAttribute("sendStatus", sendStatus);
|
||||
|
||||
//아이디 발신번호 리스트 불러오기.
|
||||
List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId);
|
||||
List<String> resultPhonList = new ArrayList<String>();
|
||||
MJUtil mjUtil = new MJUtil();
|
||||
for(String phone : resultSendPhonList) {
|
||||
resultPhonList.add(mjUtil.addDash(phone));
|
||||
}
|
||||
model.addAttribute("resultPhonList", resultPhonList);
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println(" kakaoFriendsTalkMsgDataViewDataRegist Error ::: " + e);
|
||||
@ -78,30 +227,535 @@ public class KakaoFriendsTalkSendController {
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"})
|
||||
public ModelAndView kakaoFriendsTalkMsgSendAjax(
|
||||
@ModelAttribute("kakaoVO") KakaoVO kakaoVO
|
||||
) throws Exception {
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
/**
|
||||
* @Method Name : selectSpamKakaoFriendsTalkMsgChkAjax
|
||||
* @작성일 : 2024. 1. 15.
|
||||
* @작성자 : 우영두
|
||||
* @Method 설명 : 카카오 친구톡 전송시 스팸문구 확인 체크
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/selectSpamKakaoFriendsTalkMsgChkAjax.do"})
|
||||
public ModelAndView selectSpamKakaoFriendsTalkMsgChkAjax(ModelMap model
|
||||
, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
int sendCount = 0; //발송결과 건수
|
||||
try {
|
||||
List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList();
|
||||
System.out.println("친구톡 스팸 필터링");
|
||||
|
||||
if(resultSpamTxt == null) {
|
||||
modelAndView.addObject("result", "listEmpty");
|
||||
return modelAndView;
|
||||
}else {
|
||||
//변환변수 포함(Y) 미포함(N)
|
||||
String spmFilterTxt = "";
|
||||
|
||||
if(kakaoVO.getTxtReplYn().equals("Y")) {
|
||||
List<String[]> varValList = kakaoVO.getVarValList(); // value 값
|
||||
|
||||
String resultSpam = kakaoSendUtil.getKakaoFTCntRepToSpamFilter(varValList, resultSpamTxt, kakaoVO.getTemplateContent());
|
||||
|
||||
if(resultSpam.length() > 0) {
|
||||
|
||||
modelAndView.addObject("result", "spams");
|
||||
return modelAndView;
|
||||
|
||||
}
|
||||
|
||||
if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
||||
|
||||
String resultSmsTxtSpam = kakaoSendUtil.getKakaoFTCntRepToSpamFilter(varValList, resultSpamTxt, kakaoVO.getSmsTxtArea());
|
||||
|
||||
if(resultSmsTxtSpam.length() > 0) {
|
||||
|
||||
modelAndView.addObject("result", "spams");
|
||||
return modelAndView;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}else {//치환문자가 없는 경우 스팸 필터링
|
||||
|
||||
String resultSpam = kakaoSendUtil.getKakaoFTCntToSpamFilter(resultSpamTxt, kakaoVO.getTemplateContent());
|
||||
|
||||
if(resultSpam.length() > 0) {
|
||||
|
||||
modelAndView.addObject("result", "spams");
|
||||
return modelAndView;
|
||||
|
||||
}
|
||||
|
||||
if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
||||
|
||||
String resultSmsTxtSpam = kakaoSendUtil.getKakaoFTCntToSpamFilter(resultSpamTxt, kakaoVO.getSmsTxtArea());
|
||||
|
||||
if(resultSmsTxtSpam.length() > 0) {
|
||||
|
||||
modelAndView.addObject("result", "spams");
|
||||
return modelAndView;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select"));
|
||||
modelAndView.addObject("result", "fail");
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @Method Name : kakaoFriendsTalkMsgSendAjax
|
||||
* @작성일 : 2024. 1. 16.
|
||||
* @작성자 : 우영두
|
||||
* @Method 설명 : 카카오 친구톡 전송
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"})
|
||||
public ModelAndView kakaoFriendsTalkMsgSendAjax(ModelMap model
|
||||
, HttpServletRequest request
|
||||
, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
|
||||
int resultSts = 0; //발송결과 건수
|
||||
int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수
|
||||
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
|
||||
try {
|
||||
|
||||
/** 카카오톡 전송 기본 설정 -------------------------------------------*/
|
||||
/** 카카오톡 전송 금액 설정 -------------------------------------------*/
|
||||
/** 카카오톡 전송 분할 설정 -------------------------------------------*/
|
||||
/** 카카오톡 예약 전송 설정 -------------------------------------------*/
|
||||
/** 카카오톡 전송 메시지 설정 ------------------------------------------*/
|
||||
/** 카카오톡 발송 처리 -----------------------------------------------*/
|
||||
|
||||
}catch (Exception e) {
|
||||
System.out.println(" kakaoFriendsTalkMsgSendAjax Error ::: " + e);
|
||||
if(userId == "") {
|
||||
modelAndView.addObject("message", "로그인 후 이용이 가능합니다.");
|
||||
modelAndView.addObject("result", "loginFail");
|
||||
return modelAndView;
|
||||
}else {
|
||||
|
||||
/**
|
||||
* 회원 정지된 상태이면 알림톡 발송이 안되도록 처리함
|
||||
* 현재 로그인 세션도 만료 처리함
|
||||
* */
|
||||
boolean mberSttus = userManageService.selectUserStatusInfo(userId);
|
||||
|
||||
if(!mberSttus) {
|
||||
|
||||
modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
||||
modelAndView.addObject("result", "authFail");
|
||||
|
||||
request.getSession().invalidate();
|
||||
|
||||
return modelAndView;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/** 카카오톡 전송 기본 설정 -------------------------------------------*/
|
||||
kakaoVO.setSendType("FT");
|
||||
kakaoVO.setMsgType("9");
|
||||
kakaoVO.setUserId(userId);
|
||||
|
||||
|
||||
/** 전송금액 설정 --------------------------------------------------*/
|
||||
KakaoVO priceSet = kakaoSendUtil.kakaoFTSendPrice(kakaoVO);
|
||||
|
||||
if(priceSet.getResultCode() != null && priceSet.getResultCode().equals("2000")) {
|
||||
|
||||
modelAndView.addObject("message", "대체문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
||||
modelAndView.addObject("result", "fail");
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
BigDecimal befCash = new BigDecimal(priceSet.getBefCash()).setScale(2, RoundingMode.HALF_EVEN);
|
||||
BigDecimal totMsgPrice = new BigDecimal(priceSet.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN);
|
||||
|
||||
kakaoVO.setEachPrice(priceSet.getEachPrice());
|
||||
kakaoVO.setBefCash(befCash.toString());
|
||||
kakaoVO.setTotPrice(totMsgPrice.toString());
|
||||
|
||||
//현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송
|
||||
//BigDecimal 비교 연산
|
||||
// befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송
|
||||
if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice,
|
||||
|
||||
kakaoVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); // 문자 그룹ID 설정
|
||||
|
||||
/** 카카오톡 전송 분할 설정 ----------------------------------------------*/
|
||||
|
||||
String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열
|
||||
List<String[]> tempVarValList = new ArrayList<String[]>(); //임시 변수 리스트 저장용
|
||||
|
||||
String[] phoneList = kakaoVO.getCallToList();
|
||||
List<String[]> varValList = null;
|
||||
|
||||
|
||||
//치환문자 포함 여부
|
||||
if(kakaoVO.getTxtReplYn().equals("Y")) {
|
||||
varValList = kakaoVO.getVarValList();
|
||||
}
|
||||
|
||||
System.out.println("+++++++++++++++++ 회원 스미싱 의심 온/오프 ::: "+kakaoVO.getAtSmishingYn());
|
||||
|
||||
//스팸 스미싱 여부 - 내용에 스팸 문자열 유무 체크
|
||||
if(kakaoVO.getSpamStatus().equals("Y") || kakaoVO.getAtSmishingYn().equals("Y")) {
|
||||
kakaoVO.setAtSmishingYn("Y");
|
||||
}else {
|
||||
kakaoVO.setAtSmishingYn("N");
|
||||
}
|
||||
|
||||
//스미싱 의심이 아니면 delayYn 값 셋팅
|
||||
if(kakaoVO.getAtSmishingYn().equals("N")) {
|
||||
kakaoVO.setAtDelayYn("N");
|
||||
}else {
|
||||
kakaoVO.setAtDelayYn("Y");
|
||||
}
|
||||
|
||||
//분할발송 여부 - 친구톡은 분할 발송이 없기애 N으로 픽스
|
||||
kakaoVO.setDivideChk("N");
|
||||
|
||||
int callToListCnt = kakaoVO.getCallToList().length;
|
||||
kakaoVO.setTotalCallCnt(callToListCnt);
|
||||
|
||||
/** 예약 문자인 경우 설정 ----------------------------------------------*/
|
||||
//분할문자 시간에 간격시간 더해주기
|
||||
String dividDay = null;
|
||||
Calendar cal = Calendar.getInstance();
|
||||
|
||||
//예약시간 변환
|
||||
SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||
|
||||
int turmMin = 0;
|
||||
int totalCallCnt = 0; // 수신자 전체 갯수
|
||||
int divideCnt = 0;
|
||||
int count = 1; //분할 카운트
|
||||
|
||||
if(!kakaoVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅
|
||||
|
||||
Date toDate = transFormat.parse(kakaoVO.getReqDate());
|
||||
cal.setTime(toDate); //예약 시간 캘린터 변수에 입력
|
||||
|
||||
//turmMin = Integer.parseInt(kakaoVO.getDivideTime()); //분할발송 시간 간격
|
||||
//dividDay = transFormat.format(cal.getTime());
|
||||
|
||||
totalCallCnt = kakaoVO.getCallToList().length; // 수신자 전체 갯수
|
||||
//divideCnt = Integer.parseInt(kakaoVO.getDivideCnt()); //분할 발송 갯수
|
||||
|
||||
}
|
||||
|
||||
//분할 예약 시간 저장 리스트 생성
|
||||
List<String> dividDayList = new ArrayList<String>();
|
||||
|
||||
if(callToListCnt > 200) {
|
||||
|
||||
int sendCnt = 0;
|
||||
/** 카카오톡 전송 200개 이상일때 ----------------------------------------------*/
|
||||
for(int i =0; i < callToListCnt; i++) {
|
||||
|
||||
//분할 발송을 체크 한 경우
|
||||
/*if(kakaoVO.getDivideChk().equals("Y")) {
|
||||
if(count > divideCnt) {
|
||||
count = 1;
|
||||
cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다.
|
||||
dividDay = transFormat.format(cal.getTime());
|
||||
dividDayList.add(dividDay);
|
||||
count++;
|
||||
}else {
|
||||
dividDayList.add(dividDay);
|
||||
count++;
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
if((i < callToListCnt -1) && sendCnt == 199) {
|
||||
|
||||
tempPhoneList[sendCnt] = phoneList[i];
|
||||
|
||||
if(varValList != null) {
|
||||
tempVarValList.add(varValList.get(i));
|
||||
}
|
||||
|
||||
List<String> arrPhoneList = new ArrayList<String>();
|
||||
for(String temp : tempPhoneList) {
|
||||
if(temp != null) {
|
||||
arrPhoneList.add(temp);
|
||||
}
|
||||
}
|
||||
|
||||
String[] sendPhoneList = new String[arrPhoneList.size()];
|
||||
for(int j=0; j< arrPhoneList.size(); j++) {
|
||||
sendPhoneList[j] = arrPhoneList.get(j);
|
||||
}
|
||||
|
||||
/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/
|
||||
kakaoVO.setCallToList(sendPhoneList);
|
||||
kakaoVO.setVarValList(tempVarValList);
|
||||
KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO);
|
||||
kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList());
|
||||
|
||||
/** 카카오톡 발송 처리 --------------------------------------------------*/
|
||||
kakaoVO.setDividDay(dividDayList);
|
||||
MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO);
|
||||
resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt());
|
||||
//전송 초기화
|
||||
sendCnt = 0;
|
||||
Arrays.fill(tempPhoneList, null);
|
||||
tempVarValList.clear();
|
||||
dividDayList.clear();
|
||||
|
||||
}else if((i == callToListCnt -1) && sendCnt < 200){//200개의 마지막일 경우 처리
|
||||
|
||||
tempPhoneList[sendCnt] = phoneList[i];
|
||||
|
||||
if(varValList != null) {
|
||||
|
||||
tempVarValList.add(varValList.get(i));
|
||||
|
||||
}
|
||||
|
||||
List<String> arrPhoneList = new ArrayList<String>();
|
||||
for(String temp : tempPhoneList) {
|
||||
if(temp != null) {
|
||||
arrPhoneList.add(temp);
|
||||
}
|
||||
}
|
||||
|
||||
String[] sendPhoneList = new String[arrPhoneList.size()];
|
||||
for(int j=0; j< arrPhoneList.size(); j++) {
|
||||
sendPhoneList[j] = arrPhoneList.get(j);
|
||||
}
|
||||
|
||||
/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/
|
||||
kakaoVO.setCallToList(sendPhoneList);
|
||||
kakaoVO.setVarValList(tempVarValList);
|
||||
KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO);
|
||||
kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList());
|
||||
kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt());
|
||||
/** 카카오톡 발송 처리 --------------------------------------------------*/
|
||||
kakaoVO.setDividDay(dividDayList);
|
||||
MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO);
|
||||
resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt());
|
||||
}else {//198개가 될때까지 배열에 데이터를 쌓는다
|
||||
|
||||
tempPhoneList[sendCnt] = phoneList[i];
|
||||
|
||||
if(varValList != null && varValList.get(i).length > 0) {
|
||||
tempVarValList.add(varValList.get(i));
|
||||
}
|
||||
|
||||
sendCnt++;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
/** 카카오톡 전송 200개 미만일때 ----------------------------------------------*/
|
||||
//분할 발송을 체크 한 경우
|
||||
/*if(kakaoVO.getDivideChk().equals("Y")) {
|
||||
for(int i =0; i < callToListCnt; i++) {
|
||||
if(count > divideCnt) {
|
||||
count = 1;
|
||||
cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다.
|
||||
dividDay = transFormat.format(cal.getTime());
|
||||
dividDayList.add(dividDay);
|
||||
count++;
|
||||
}else {
|
||||
dividDayList.add(dividDay);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/
|
||||
KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO);
|
||||
kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList());
|
||||
kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt());
|
||||
|
||||
/** 카카오톡 발송 처리 --------------------------------------------------*/
|
||||
kakaoVO.setDividDay(dividDayList);
|
||||
MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO);
|
||||
resultSts = Integer.parseInt(returnVO.getSendMsgCnt());
|
||||
|
||||
}
|
||||
|
||||
/** 카카오톡 결과 처리 --------------------------------------------------*/
|
||||
}else {
|
||||
modelAndView.addObject("message", "친구톡 발송에 필요한 보유 잔액이 부족 합니다.");
|
||||
modelAndView.addObject("result", "fail");
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("kakaoFriendsTalkMsgSendAjax Controller Error !!!! "+e);
|
||||
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
|
||||
modelAndView.addObject("result", "fail");
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
modelAndView.addObject("message", "친구톡 전송이 완료되었습니다.");
|
||||
modelAndView.addObject("result", "success");
|
||||
modelAndView.addObject("resultSts", resultSts);
|
||||
|
||||
|
||||
/** 카카오 친구톡 발송 내용 법인폰, 친구톡 결과 처리 --------------------------------------------------*/
|
||||
try {
|
||||
String adminSmsNoticeYn = "Y";
|
||||
String spamStatus = kakaoVO.getAtSmishingYn(); // 스미싱 의심으로 체크된 고객 정보
|
||||
|
||||
UserManageVO userManageVO = new UserManageVO();
|
||||
userManageVO.setMberId(userId);
|
||||
|
||||
if(!userId.equals("")) {
|
||||
userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO);
|
||||
adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn();
|
||||
}
|
||||
|
||||
//법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송
|
||||
if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y")) {
|
||||
|
||||
if(spamStatus.equals("Y")) {
|
||||
kakaoVO.setAtDelayYn("Y");
|
||||
}
|
||||
|
||||
// 법인폰 알람여부 체크
|
||||
JoinSettingVO joinSettingVO = new JoinSettingVO();
|
||||
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
|
||||
|
||||
String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti();
|
||||
|
||||
//야간 스미싱의심 알림이 활성화 되어있는 경우 예외 알림 시간대가 아닌경우 슬랙 알림 발송 처리한다.
|
||||
if(holiSmishingNoti.equals("Y")) {
|
||||
|
||||
// SLACK 체크
|
||||
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
|
||||
|
||||
MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO();
|
||||
|
||||
msgAlarmSetVO.setUseYn("Y");
|
||||
msgAlarmSetVO.setFirstIndex(0);
|
||||
|
||||
List<MsgAlarmSetVO> resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO);
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
int year = calendar.get(Calendar.YEAR);
|
||||
|
||||
MsgHolidayVO msgHolidayVO = new MsgHolidayVO();
|
||||
msgHolidayVO.setFirstIndex(0);
|
||||
msgHolidayVO.setRecordCountPerPage(100);
|
||||
msgHolidayVO.setSearchHoliYear(Integer.toString(year));
|
||||
|
||||
List<MsgHolidayVO> resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO);
|
||||
|
||||
MjonHolidayApi mjonHolidayApi = new MjonHolidayApi();
|
||||
|
||||
boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList);
|
||||
|
||||
if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송
|
||||
|
||||
MjonCommon comm = new MjonCommon();
|
||||
comm.getAdminKakaoAtSandSlack(kakaoVO);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// SLACK 체크
|
||||
/*if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
|
||||
//Slack으로 메세지 전송 처리
|
||||
MjonCommon comm = new MjonCommon();
|
||||
comm.getAdminKakaoAtSandSlack(kakaoVO);
|
||||
}*/
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e);
|
||||
}
|
||||
|
||||
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax
|
||||
* @작성일 : 2024. 1. 18.
|
||||
* @작성자 : 우영두
|
||||
* @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendRefundTestAjax.do"})
|
||||
public ModelAndView kakaoFriendsTalkMsgSendRefundTestAjax(ModelMap model
|
||||
, HttpServletRequest request
|
||||
, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
||||
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
kakaoAlimTalkService.selectKakaoFtSentRefundList();
|
||||
|
||||
modelAndView.addObject("result", "success");
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax
|
||||
* @작성일 : 2024. 1. 18.
|
||||
* @작성자 : 우영두
|
||||
* @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do"})
|
||||
public String selectKakaoFriendsTalkTestSendPopup(ModelMap model
|
||||
, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
||||
|
||||
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
if(userId == "") {
|
||||
return "redirect:/web/user/login/login.do";
|
||||
}else {
|
||||
//1.시스템 기본 단가 정보 불러오기
|
||||
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
|
||||
|
||||
//2.사용자 개인 단가 정보 불러오기
|
||||
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
|
||||
Float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
|
||||
|
||||
if(kakaoFtPrice < 1) {
|
||||
kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice();
|
||||
}
|
||||
|
||||
BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN);
|
||||
model.addAttribute("userMoney", userMoney);
|
||||
model.addAttribute("kakaoFtPrice", kakaoFtPrice);
|
||||
}
|
||||
|
||||
String tmpContents = kakaoVO.getTemplateContent();
|
||||
String txtReplYn = kakaoVO.getTxtReplYn();
|
||||
|
||||
if(txtReplYn.equals("Y")) {
|
||||
|
||||
String[] varValStr = kakaoVO.getVarValList().get(0);
|
||||
tmpContents = kakaoSendUtil.getKakaoFTCntReplace(varValStr[0], tmpContents);
|
||||
|
||||
kakaoVO.setTemplateContent(tmpContents);
|
||||
|
||||
}
|
||||
|
||||
model.addAttribute("kakaoVO", kakaoVO);
|
||||
|
||||
return "web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataTestPop";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -34,6 +34,7 @@ import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
|
||||
import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
|
||||
import itn.let.mjo.symbol.service.MjonSymbolService;
|
||||
import itn.let.mjo.symbol.service.MjonSymbolVO;
|
||||
import itn.let.uss.umt.service.EgovUserManageService;
|
||||
|
||||
@Controller
|
||||
public class KakaoFriendsTalkTemplateController {
|
||||
@ -54,6 +55,10 @@ public class KakaoFriendsTalkTemplateController {
|
||||
@Resource(name = "mjonSymbolService")
|
||||
private MjonSymbolService mjonSymbolService;
|
||||
|
||||
/** userManageService */
|
||||
@Resource(name = "userManageService")
|
||||
private EgovUserManageService userManageService;
|
||||
|
||||
@Autowired
|
||||
KakaoApiProfile kakaoApiProfile;
|
||||
|
||||
@ -91,6 +96,8 @@ public class KakaoFriendsTalkTemplateController {
|
||||
return "redirect:/web/user/login/login.do";
|
||||
}
|
||||
|
||||
model.addAttribute("loginVO", loginVO);
|
||||
|
||||
try {
|
||||
|
||||
//사용자 등록 발신프로필 정보 조회해오기
|
||||
@ -260,11 +267,21 @@ public class KakaoFriendsTalkTemplateController {
|
||||
|
||||
KakaoReturnVO result = kakaoApiImageUpload.kakaoApiImageDelete(kakaoVO);
|
||||
|
||||
String code = result.getBizReturnCode();
|
||||
|
||||
if(code.equals("200")) {//이미지 삭제 성공시 템플릿 디비에 있는 이미지 정보도 함께 지워준다.
|
||||
|
||||
kakaoVO.setUserId(userId);
|
||||
kakaoVO.setLastUpdusrId(userId);
|
||||
kakaoFtTemplateService.updateKakaoFriendsTemplateImageDataDel(kakaoVO);
|
||||
|
||||
}
|
||||
|
||||
modelAndView.addObject("code", result.getBizReturnCode());
|
||||
modelAndView.addObject("msg", result.getBizReturnMsg());
|
||||
modelAndView.addObject("result", "success");
|
||||
}
|
||||
}catch(Exception ex){
|
||||
}catch(Exception ex){
|
||||
ex.printStackTrace();
|
||||
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
|
||||
modelAndView.addObject("result", "fail");
|
||||
@ -276,10 +293,10 @@ public class KakaoFriendsTalkTemplateController {
|
||||
|
||||
|
||||
/**
|
||||
* @methodName : deleteKakaoFriendsImageDataAjax
|
||||
* @methodName : selectKakaoFriendsTemplateList
|
||||
* @author : 우영두
|
||||
* @date : 2023.03.23
|
||||
* @description : deleteKakaoFriendsImageDataAjax 카카오 친구톡 이미지 삭제요청
|
||||
* @description : selectKakaoFriendsTemplateList 카카오 친구톡 템플릿 리스트 화면
|
||||
* @param kakaoVO
|
||||
* @param model
|
||||
* @param response
|
||||
@ -297,8 +314,19 @@ public class KakaoFriendsTalkTemplateController {
|
||||
return "redirect:/web/user/login/login.do";
|
||||
}
|
||||
|
||||
model.addAttribute("loginVO", loginVO);
|
||||
|
||||
try {
|
||||
|
||||
/**
|
||||
* 회원 정지된 상태이면 알림톡 템플릿 등록 화면으로 이동되지 않도록 처리
|
||||
* */
|
||||
boolean mberSttus = userManageService.selectUserStatusInfo(userId);
|
||||
|
||||
if(!mberSttus) {
|
||||
return "redirect:/web/uat/uia/actionLogout.do";
|
||||
}
|
||||
|
||||
//사용자 등록 발신프로필 정보 조회해오기
|
||||
searchVO.setUserId(userId);
|
||||
List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(searchVO);
|
||||
@ -319,10 +347,10 @@ public class KakaoFriendsTalkTemplateController {
|
||||
|
||||
|
||||
/**
|
||||
* @methodName : deleteKakaoFriendsImageDataAjax
|
||||
* @methodName : selectKakaoFriendsTemplateListAjax
|
||||
* @author : 우영두
|
||||
* @date : 2023.03.23
|
||||
* @description : deleteKakaoFriendsImageDataAjax 카카오 친구톡 이미지 삭제요청
|
||||
* @description : selectKakaoFriendsTemplateListAjax 카카오 친구톡 템플릿 하단 리스트 정보 조회
|
||||
* @param kakaoVO
|
||||
* @param model
|
||||
* @param response
|
||||
@ -345,12 +373,12 @@ public class KakaoFriendsTalkTemplateController {
|
||||
/** pageing */
|
||||
PaginationInfo paginationInfo = new PaginationInfo();
|
||||
paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
|
||||
paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
|
||||
paginationInfo.setRecordCountPerPage(9);
|
||||
paginationInfo.setPageSize(searchVO.getPageSize());
|
||||
|
||||
searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||
searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||
searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||
searchVO.setRecordCountPerPage(9);
|
||||
|
||||
if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
||||
searchVO.setSearchSortCnd("FRIEND_ID");
|
||||
@ -456,4 +484,184 @@ public class KakaoFriendsTalkTemplateController {
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @methodName : selectKakaoFriendsTemplateDataDetail
|
||||
* @author : 우영두
|
||||
* @date : 2024.01.04
|
||||
* @description : selectKakaoFriendsTemplateDataDetail 카카오 친구톡 템플릿 상세 화면
|
||||
* @param kakaoVO
|
||||
* @param model
|
||||
* @param response
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateDataDetail.do"})
|
||||
public String selectKakaoFriendsTemplateDataDetail(
|
||||
@ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response
|
||||
) throws Exception {
|
||||
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
if(userId == "") {
|
||||
return "redirect:/web/user/login/login.do";
|
||||
}
|
||||
|
||||
model.addAttribute("loginVO", loginVO);
|
||||
|
||||
try {
|
||||
|
||||
//사용자 등록 발신프로필 정보 조회해오기
|
||||
kakaoVO.setUserId(userId);
|
||||
List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
|
||||
model.addAttribute("resultProfileList", resultProfileList);
|
||||
|
||||
// 특수문자 리스트 불러오기
|
||||
MjonSymbolVO symbolVO = new MjonSymbolVO();
|
||||
List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO);
|
||||
model.addAttribute("symbolList", symbolList);
|
||||
|
||||
KakaoVO resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO);
|
||||
|
||||
System.out.println("++++++++++++++++++ templateCode ::: "+kakaoVO.getFriendId());
|
||||
System.out.println("++++++++++++++++++ senderKey ::: "+kakaoVO.getSenderKey());
|
||||
|
||||
model.addAttribute("resultTemplateVO", resultTemplateVO);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println(" selectKakaoFriendsTemplateDataDetail Error ::: " + e);
|
||||
}
|
||||
|
||||
return "/web/kakao/template/ft/KakaoFriendstalkTemplateDetail";
|
||||
}
|
||||
|
||||
// 카카오 친구톡 템플릿 수정요청
|
||||
/**
|
||||
* @methodName : updateKakaoFriendsTemplateDataAjax
|
||||
* @author : 우영두
|
||||
* @date : 2024.01.05
|
||||
* @description : updateKakaoFriendsTemplateDataAjax 카카오 친구톡 템플릿 수정요청
|
||||
* @param kakaoVO
|
||||
* @param model
|
||||
* @param response
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/kakao/template/updateKakaoFriendsTemplateDataAjax.do"})
|
||||
public ModelAndView updateKakaoFriendsTemplateDataAjax(
|
||||
@ModelAttribute("kakaoVO") KakaoVO kakaoVO
|
||||
, final MultipartHttpServletRequest multiRequest
|
||||
) throws Exception {
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
try {
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
|
||||
if(userId == "") {
|
||||
modelAndView.addObject("result", "loginFail");
|
||||
return modelAndView;
|
||||
}else {
|
||||
|
||||
kakaoVO.setUserId(userId);
|
||||
kakaoVO.setUserCallbackYn(userId);
|
||||
kakaoVO.setFrstRegisterId(userId);
|
||||
kakaoVO.setLastUpdusrId(userId);
|
||||
kakaoVO.setSendType("FT");
|
||||
|
||||
String imgUrl = kakaoVO.getTemplateImageUrl();
|
||||
int buttonSize = kakaoVO.getButtonVOList().size();
|
||||
|
||||
if(!imgUrl.equals("") || buttonSize > 0) {
|
||||
|
||||
//json 파일 생성 처리
|
||||
String resultJsonPath = kakaoFTJsonSave.kakaoApiJsonSave(kakaoVO);
|
||||
kakaoVO.setBizJsonName(resultJsonPath);
|
||||
|
||||
}
|
||||
|
||||
int result = kakaoFtTemplateService.updateKakaoFriendsTemplateData(kakaoVO);
|
||||
|
||||
if(result > 0) {
|
||||
modelAndView.addObject("result", "success");
|
||||
}else {
|
||||
modelAndView.addObject("result", "fail");
|
||||
}
|
||||
}
|
||||
}catch(Exception ex){
|
||||
ex.printStackTrace();
|
||||
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
|
||||
modelAndView.addObject("result", "fail");
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @methodName : selectKakaoFriendsTemplateListPopupAjax
|
||||
* @author : 우영두
|
||||
* @date : 2024.01.05
|
||||
* @description : selectKakaoFriendsTemplateListPopupAjax 카카오 친구톡 발송화면 템플릿 팝업 리스트 화면
|
||||
* @param kakaoVO
|
||||
* @param model
|
||||
* @param response
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do"})
|
||||
public String selectKakaoFriendsTemplateListPopupAjax(@ModelAttribute("searchVO") KakaoVO searchVO,
|
||||
HttpServletRequest request ,
|
||||
ModelMap model) throws Exception{
|
||||
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
if(userId == "") {
|
||||
return "redirect:/uat/uia/EgovLoginUsr.do";
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
searchVO.setUserId(userId);
|
||||
|
||||
/** pageing */
|
||||
PaginationInfo paginationInfo = new PaginationInfo();
|
||||
paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
|
||||
paginationInfo.setRecordCountPerPage(6);
|
||||
paginationInfo.setPageSize(searchVO.getPageSize());
|
||||
|
||||
searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||
searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||
searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||
|
||||
if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
||||
searchVO.setSearchSortCnd("FRIEND_ID");
|
||||
searchVO.setSearchSortOrd("desc");
|
||||
}
|
||||
|
||||
List<KakaoVO> kakaoTemplateInfoList = new ArrayList<KakaoVO>();
|
||||
// 문자발송 완료건은 모두 보이도록 처리
|
||||
searchVO.setUserId(userId);
|
||||
kakaoTemplateInfoList = kakaoFtTemplateService.selectKakaoFriendsTemplateList(searchVO);
|
||||
model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList);
|
||||
model.addAttribute("searchVO", searchVO);
|
||||
|
||||
paginationInfo.setTotalRecordCount(kakaoTemplateInfoList.size() > 0 ? ((KakaoVO)kakaoTemplateInfoList.get(0)).getTotCnt() : 0);
|
||||
model.addAttribute("paginationInfo", paginationInfo);
|
||||
|
||||
//사용자 등록 발신프로필 정보 조회해오기
|
||||
searchVO.setUserId(userId);
|
||||
List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(searchVO);
|
||||
model.addAttribute("resultProfileList", resultProfileList);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("selectKakaoFriendsTemplateListAjax Controller Error !!! " + e);
|
||||
}
|
||||
|
||||
return "/web/kakao/template/ft/KakaoFriendstalkTemplateListPopupAjax";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package itn.let.kakao.user.sent.web;
|
||||
|
||||
import java.io.FileReader;
|
||||
import java.io.OutputStream;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
@ -19,6 +20,9 @@ import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -35,6 +39,7 @@ import itn.com.cmm.util.StringUtil;
|
||||
import itn.com.cmm.util.StringUtil2;
|
||||
import itn.com.utl.fcc.service.EgovStringUtil;
|
||||
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
||||
import itn.let.kakao.kakaoComm.KakaoButtonVO;
|
||||
import itn.let.kakao.kakaoComm.KakaoReturnVO;
|
||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
|
||||
@ -244,16 +249,36 @@ public class KakaoSentController {
|
||||
mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt()));
|
||||
model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
||||
|
||||
// 템플릿 api 가져오기
|
||||
KakaoVO kakaoVO = new KakaoVO();
|
||||
kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
|
||||
kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
|
||||
String msgType = mjonKakaoATResultVO.getMsgType();
|
||||
|
||||
KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
|
||||
|
||||
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
||||
// //템플릿 api 가져오기
|
||||
if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리
|
||||
|
||||
// 템플릿 api 가져오기
|
||||
KakaoVO kakaoVO = new KakaoVO();
|
||||
kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
|
||||
kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
|
||||
|
||||
KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
|
||||
|
||||
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
||||
// //템플릿 api 가져오기
|
||||
|
||||
}else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리
|
||||
|
||||
//String smsTxt = mjonKakaoATResultVO.getSmsTxt();
|
||||
|
||||
KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO);
|
||||
//kakaoTemplateInfo.setTemplateContent(smsTxt);
|
||||
|
||||
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
||||
|
||||
}else {
|
||||
|
||||
model.addAttribute("kakaoTemplateInfo", "");
|
||||
|
||||
}
|
||||
|
||||
model.addAttribute("msgType", msgType);
|
||||
return "web/kakao/sent/KakaoSentDetailPopAjax";
|
||||
}
|
||||
|
||||
@ -278,27 +303,45 @@ public class KakaoSentController {
|
||||
|
||||
//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA)
|
||||
MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailData2Ajax(mjonKakaoATVO);
|
||||
// 대체문자 엔터키 치환
|
||||
mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans()));
|
||||
|
||||
// 강조형 타이틀이 있는지 없는지 구분
|
||||
if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle()))
|
||||
{
|
||||
String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
|
||||
mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]);
|
||||
mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]);
|
||||
String msgType = mjonKakaoATResultVO.getMsgType();
|
||||
|
||||
if(msgType.equals("8")) {
|
||||
|
||||
// 대체문자 엔터키 치환
|
||||
mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans()));
|
||||
|
||||
// 강조형 타이틀이 있는지 없는지 구분
|
||||
if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle()))
|
||||
{
|
||||
String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
|
||||
mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]);
|
||||
mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]);
|
||||
}
|
||||
|
||||
model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
||||
|
||||
// 템플릿 api 가져오기
|
||||
KakaoVO kakaoVO = new KakaoVO();
|
||||
kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
|
||||
kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
|
||||
|
||||
KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
|
||||
|
||||
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
||||
|
||||
}else if(msgType.equals("9")) {
|
||||
|
||||
KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO);
|
||||
|
||||
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
||||
model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
||||
|
||||
}else {
|
||||
|
||||
model.addAttribute("kakaoTemplateInfo", "");
|
||||
|
||||
}
|
||||
|
||||
model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
||||
|
||||
// 템플릿 api 가져오기
|
||||
KakaoVO kakaoVO = new KakaoVO();
|
||||
kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
|
||||
kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
|
||||
|
||||
KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
|
||||
|
||||
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
||||
|
||||
return "web/kakao/sent/KakaoSentDetailPop2Ajax";
|
||||
}
|
||||
@ -846,5 +889,101 @@ public class KakaoSentController {
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 20240122 우영두 추가
|
||||
* 친구톡 발송 결과 내용 팝업 처리
|
||||
* 발송 내용 처리 및 첨부 이미지, 버튼 정보 처리
|
||||
*
|
||||
* */
|
||||
public KakaoReturnVO getKakaoFTSendTemplateInfo(MjonKakaoATVO kakaoATVO) throws Exception {
|
||||
|
||||
KakaoReturnVO returnVO = new KakaoReturnVO();
|
||||
try {
|
||||
|
||||
String tmpContent = kakaoATVO.getSmsTxtTrans();
|
||||
String jsonFilePath = kakaoATVO.getBizKakaoJsonFile();
|
||||
|
||||
//친구톡 이미지 또는 버튼 정보가 있다면 실행
|
||||
if(jsonFilePath != null && jsonFilePath.length() > 0) {
|
||||
|
||||
FileReader reader = new FileReader(jsonFilePath);
|
||||
int ch;
|
||||
String resultStr = "";
|
||||
while ((ch = reader.read()) != -1) {
|
||||
|
||||
resultStr = resultStr + (char)ch;
|
||||
}
|
||||
|
||||
JSONParser parser = new JSONParser();
|
||||
Object obj = parser.parse(resultStr);
|
||||
JSONObject object = (JSONObject) obj;
|
||||
|
||||
String image = (object.get("image") == null) ? null : object.get("image").toString();
|
||||
String button = (object.get("button") == null) ? null : object.get("button").toString();
|
||||
|
||||
if(image != null) {
|
||||
|
||||
Object imagObj = parser.parse(image);
|
||||
JSONObject jsonImgObj = (JSONObject) imagObj;
|
||||
|
||||
System.out.println(jsonImgObj.toJSONString());
|
||||
|
||||
String imgUrl = (jsonImgObj.get("img_url") == null) ? null : jsonImgObj.get("img_url").toString();
|
||||
|
||||
System.out.println(imgUrl);
|
||||
|
||||
returnVO.setTemplateEmphasizeType("IMAGE");
|
||||
returnVO.setTemplateImageUrl(imgUrl);
|
||||
|
||||
}
|
||||
|
||||
if(button != null) {
|
||||
|
||||
JSONArray buttonJsonList = (JSONArray) object.get("button");
|
||||
|
||||
System.out.println(buttonJsonList.size());
|
||||
|
||||
List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>();
|
||||
|
||||
for(int i=0; i < buttonJsonList.size(); i++) {
|
||||
|
||||
JSONObject itemInfo = (JSONObject)buttonJsonList.get(i);
|
||||
|
||||
String name = itemInfo.get("name").toString();
|
||||
|
||||
System.out.println(name);
|
||||
|
||||
KakaoButtonVO buttonVO = new KakaoButtonVO();
|
||||
|
||||
buttonVO.setName(name);
|
||||
|
||||
buttonList.add(buttonVO);
|
||||
|
||||
}
|
||||
|
||||
returnVO.setButtonList(buttonList);
|
||||
|
||||
for(KakaoButtonVO butVO : returnVO.getButtonList()) {
|
||||
|
||||
System.out.println("+++++++++++++ btn name ::: "+butVO.getName());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//친구톡 내용 셋팅
|
||||
returnVO.setTemplateContent(tmpContent);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return returnVO;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -265,7 +265,12 @@ public class MjonCommon {
|
||||
String smisingSmsTxt = "";
|
||||
//예약문자를 발송하는 경우 문자 내용 앞에 "[예약]" 표시되도록 처리
|
||||
if(reserveYn.equals("Y")) {
|
||||
reservSmsTxt = "[예약]" + smsTxt;
|
||||
|
||||
if(atDelayYn.equals("Y")) {//예약문자 중 스미싱의심 일 경우
|
||||
reservSmsTxt = "[스미싱의심][예약]" + smsTxt;
|
||||
}else {
|
||||
reservSmsTxt = "[예약]" + smsTxt;
|
||||
}
|
||||
smsTxt = reservSmsTxt;
|
||||
}else if(atDelayYn.equals("Y")) {
|
||||
|
||||
@ -280,7 +285,7 @@ public class MjonCommon {
|
||||
if(kakaoVO.getMsgType().equals("8")) {
|
||||
msgType = "[알림톡]";
|
||||
}else if(kakaoVO.getMsgType().equals("9")){
|
||||
|
||||
msgType = "[친구톡]";
|
||||
}
|
||||
sandName = "[" + userId + "]" + "[" + sandName + "]" + msgType;
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@ import java.util.List;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
import itn.com.cmm.ComDefaultVO;
|
||||
import itn.com.cmm.MjonMsgTabulVO;
|
||||
import itn.com.cmm.MjonMsgSendVO;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@ -305,6 +305,6 @@ public class MjonMsgVO extends ComDefaultVO{
|
||||
|
||||
private String detailType;
|
||||
|
||||
private List<MjonMsgTabulVO> mjonMsgTabulListVO = new ArrayList<>();
|
||||
private List<MjonMsgSendVO> mjonMsgSendVOList = new ArrayList<>();
|
||||
|
||||
}
|
||||
|
||||
@ -1,59 +0,0 @@
|
||||
package itn.let.mjo.msgdata.service;
|
||||
|
||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class ReplacementListsVO {
|
||||
String[] shortNameList;
|
||||
String[] shortPhone;
|
||||
String[] shortRep1;
|
||||
String[] shortRep2;
|
||||
String[] shortRep3;
|
||||
String[] shortRep4;
|
||||
int shortCnt;
|
||||
|
||||
String[] longNameList;
|
||||
String[] longPhone;
|
||||
String[] longRep1;
|
||||
String[] longRep2;
|
||||
String[] longRep3;
|
||||
String[] longRep4;
|
||||
int longCnt;
|
||||
|
||||
String[] imgNameList;
|
||||
String[] imgPhone;
|
||||
String[] imgRep1;
|
||||
String[] imgRep2;
|
||||
String[] imgRep3;
|
||||
String[] imgRep4;
|
||||
int imgCnt;
|
||||
|
||||
// 배열을 초기화하는 메서드
|
||||
public void initializeLists(MjonMsgVO mjonMsgVO) {
|
||||
shortNameList = new String[Integer.parseInt(mjonMsgVO.getShortMsgCnt())];
|
||||
shortPhone = new String[shortNameList.length];
|
||||
shortRep1 = new String[shortNameList.length];
|
||||
shortRep2 = new String[shortNameList.length];
|
||||
shortRep3 = new String[shortNameList.length];
|
||||
shortRep4 = new String[shortNameList.length];
|
||||
|
||||
longNameList = new String[Integer.parseInt(mjonMsgVO.getLongMsgCnt())];
|
||||
longPhone = new String[longNameList.length];
|
||||
longRep1 = new String[longNameList.length];
|
||||
longRep2 = new String[longNameList.length];
|
||||
longRep3 = new String[longNameList.length];
|
||||
longRep4 = new String[longNameList.length];
|
||||
|
||||
imgNameList = new String[mjonMsgVO.getCallToList().length];
|
||||
imgPhone = new String[imgNameList.length];
|
||||
imgRep1 = new String[imgNameList.length];
|
||||
imgRep2 = new String[imgNameList.length];
|
||||
imgRep3 = new String[imgNameList.length];
|
||||
imgRep4 = new String[imgNameList.length];
|
||||
}
|
||||
}
|
||||
@ -27,6 +27,7 @@ import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||
import itn.com.cmm.LoginVO;
|
||||
import itn.com.cmm.MjonMsgSendVO;
|
||||
import itn.com.cmm.util.MJUtil;
|
||||
import itn.com.cmm.util.MsgSendUtils;
|
||||
import itn.com.cmm.util.StringUtil;
|
||||
@ -47,7 +48,6 @@ import itn.let.mjo.msgagent.service.impl.MjonMsgAgentStsDAO;
|
||||
import itn.let.mjo.msgdata.service.MjonMsgDataService;
|
||||
import itn.let.mjo.msgdata.service.MjonMsgDataVO;
|
||||
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
|
||||
import itn.let.mjo.msgdata.service.ReplacementListsVO;
|
||||
import itn.let.mjo.msgholiday.service.MsgAlarmSetVO;
|
||||
import itn.let.mjo.msgholiday.service.MsgHolidayVO;
|
||||
import itn.let.mjo.msgholiday.service.impl.MsgHolidayDAO;
|
||||
@ -4022,6 +4022,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
smsTxt = "(광고)"+smsTxt
|
||||
+"\n"+"무료거부 0808800858";
|
||||
}
|
||||
mjonMsgVO.setSmsTxt(smsTxt);
|
||||
|
||||
log.debug(" :: smsTxt :: [{}]", smsTxt);
|
||||
|
||||
@ -4034,16 +4035,6 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
|
||||
log.debug(" + mjonMsgVO.getFileCnt() :: [{}]", mjonMsgVO.getFileCnt());
|
||||
|
||||
//////////////////////////////////
|
||||
//////////////////////////////////
|
||||
//////////////////////////////////
|
||||
if(true) {
|
||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 테스트 실패");
|
||||
}
|
||||
//////////////////////////////////
|
||||
//////////////////////////////////
|
||||
//////////////////////////////////
|
||||
|
||||
|
||||
/*
|
||||
* 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기
|
||||
@ -4052,23 +4043,23 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
* 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌.
|
||||
*/
|
||||
|
||||
int smsTxtByte = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt());
|
||||
if(smsTxtByte > 2000) {
|
||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다.");
|
||||
}
|
||||
// int smsTxtByte = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt());
|
||||
// if(smsTxtByte > 2000) {
|
||||
// return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다.");
|
||||
// }
|
||||
|
||||
// MSG_TYPE 설정
|
||||
String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsTxtByte);
|
||||
if ("INVALID".equals(msgType)) {
|
||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다.");
|
||||
}
|
||||
mjonMsgVO.setMsgType(msgType);
|
||||
|
||||
|
||||
|
||||
MjonEventVO mjonEventVO = new MjonEventVO();
|
||||
mjonEventVO.setMberId(userId);
|
||||
// String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsTxtByte);
|
||||
// if ("INVALID".equals(msgType)) {
|
||||
// return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다.");
|
||||
// }
|
||||
// mjonMsgVO.setMsgType(msgType);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 금액 관련은 끝에서 이벤트 발송 / 기존금액 박송으로 나눠야하기 때문에 나중에 수정
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/*
|
||||
//1.시스템 기본 단가 정보 불러오기
|
||||
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
|
||||
|
||||
@ -4089,8 +4080,12 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
// 기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함
|
||||
// boolean compareEndDate = false;
|
||||
float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice());
|
||||
|
||||
|
||||
|
||||
MjonEventVO mjonEventVO = new MjonEventVO();
|
||||
mjonEventVO.setMberId(userId);
|
||||
|
||||
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
|
||||
// 호출부에서 handleEventStatus를 호출하고 예외 처리를 추가
|
||||
|
||||
@ -4113,7 +4108,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 토탈금액 "," 리플레이스 처리
|
||||
mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", ""));
|
||||
@ -4126,35 +4124,83 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
int tmpTotCallCnt = mjonMsgVO.getCallToList().length;
|
||||
float tmpTotPrice = tmpTotCallCnt * tmpEachPrice;
|
||||
mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice));
|
||||
|
||||
*/
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 금액 관련은 끝에서 이벤트 발송 / 기존금액 박송으로 나눠야하기 때문에 나중에 수정
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// 치환 여부
|
||||
////////////////////////////////////////////////
|
||||
if (MsgSendUtils.isReplacementRequired(mjonMsgVO)) {
|
||||
List<MjonMsgSendVO> mjonMsgSendVOList = mjonMsgVO.getMjonMsgSendVOList();
|
||||
// if (MsgSendUtils.isRepleasYN(mjonMsgVO)) {
|
||||
|
||||
if (!MsgSendUtils.validateReplacementData(mjonMsgVO, statusResponse)) {
|
||||
//특정문구 일괄변환 치환문자 데이터가 없습니다.
|
||||
return statusResponse; // 유효성 검사 실패 시 처리
|
||||
}
|
||||
// if (!MsgSendUtils.validateReplacementData(mjonMsgVO, mjonMsgTabulVO)) {
|
||||
// //특정문구 일괄변환 치환문자 데이터가 없습니다.
|
||||
// return statusResponse; // 유효성 검사 실패 시 처리
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// 치환 문자 리스트 생성
|
||||
ReplacementListsVO intiLists = MsgSendUtils.createReplacementLists(mjonMsgVO);
|
||||
if(!MsgSendUtils.populateReplacementLists(mjonMsgVO ,intiLists, statusResponse)) {;
|
||||
//문자 치환 후 전송 문자 길이를 초과하였습니다.
|
||||
//문자 치환 중 오류가 발생하였습니다.
|
||||
return statusResponse;
|
||||
}
|
||||
|
||||
// 발송 처리
|
||||
statusResponse = processMessageSending(mjonMsgVO, intiLists, statusResponse);
|
||||
} else {
|
||||
// 일반 문자 발송
|
||||
statusResponse = fncSendMsg(mjonMsgVO);
|
||||
|
||||
log.info(" ++ mjonMsgVO.getSpamStatus() :: [{}]", mjonMsgVO.getSpamStatus());
|
||||
// smstxt 치환 및 스팸체크 후 mjonMsgSendVOList 에 add()
|
||||
List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList();
|
||||
if(!MsgSendUtils.populateSendLists(mjonMsgVO, mjonMsgSendVOList, statusResponse, resultSpamTxt)) {;
|
||||
//문자 치환 후 전송 문자 길이를 초과하였습니다.
|
||||
//문자 치환 중 오류가 발생하였습니다.
|
||||
return statusResponse;
|
||||
}
|
||||
log.info(" ++ mjonMsgVO.getSpamStatus() :: [{}]", mjonMsgVO.getSpamStatus());
|
||||
|
||||
|
||||
// 수신목록 셋팅
|
||||
|
||||
|
||||
|
||||
// 수신거부 목록 불러오기
|
||||
List<String> userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO);
|
||||
|
||||
List<String> dupliBlockList = MJUtil.getDuplicateList(userBlockList);
|
||||
int usrBlockCnt = dupliBlockList.size();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// mjonMsgSendVOList.stream().forEach(t-> System.out.println(t.toString()));
|
||||
|
||||
// mjonMsgSendVOList.stream()
|
||||
// .map(MjonMsgSendVO::getSmsTxt) // 각 객체의 getSmsTxt() 호출
|
||||
// .forEach(System.out::println); // 결과를 바로 출력
|
||||
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
//////////////////////////////////
|
||||
//////////////////////////////////
|
||||
// if(true) {
|
||||
// return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 테스트 실패");
|
||||
// }
|
||||
//////////////////////////////////
|
||||
//////////////////////////////////
|
||||
//////////////////////////////////
|
||||
|
||||
// 발송 처리
|
||||
// statusResponse = processMessageSending(mjonMsgVO, intiLists, statusResponse);
|
||||
// } else {
|
||||
// // 일반 문자 발송
|
||||
// statusResponse = fncSendMsg(mjonMsgVO);
|
||||
// }
|
||||
|
||||
return statusResponse;
|
||||
|
||||
@ -4208,6 +4254,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
|
||||
String imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(fileId[i]);
|
||||
|
||||
log.info("imgFilePath : [{}]", imgFilePath);
|
||||
if (StringUtils.isEmpty(imgFilePath)) {
|
||||
statusResponse.setStatus(HttpStatus.NO_CONTENT);
|
||||
statusResponse.setMessage("문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다.");
|
||||
@ -4262,7 +4309,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
// 그림 문자 발송 처리 메서드
|
||||
private StatusResponse processMessageSending(MjonMsgVO mjonMsgVO, ReplacementListsVO lists, StatusResponse statusResponse) throws Exception {
|
||||
|
||||
@ -4288,7 +4335,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
|
||||
return statusResponse;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
private Map<String, String> fncSendMsgRtnMap(MjonMsgVO mjonMsgVO) throws Exception {
|
||||
Map<String, String> returnMap = new HashMap<String, String>();
|
||||
@ -4437,6 +4484,8 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
* 20241002 이호영
|
||||
* 치환 후 장문, 단문이 모두 있을 수 있기 때문에 아래 로직처럼 모든 if를 열어둠
|
||||
*/
|
||||
|
||||
/*
|
||||
private Map<String, String> sendMessages(MjonMsgVO msgVO, ReplacementListsVO lists) throws Exception {
|
||||
|
||||
Map<String, String> resultMap = new HashMap<>();
|
||||
@ -4568,8 +4617,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
return fncSendMsgRtnMap(msgVO);
|
||||
|
||||
*/
|
||||
/*
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
// 20240924 이호영
|
||||
// 이벤트 상태를 처리하는 메서드
|
||||
@ -4622,7 +4672,8 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
|
||||
|
||||
// Step 1: 메시지 내용이 있는지 확인 후 msgType 정하기
|
||||
String msgType = checkMessageContent(mjonMsgVO);
|
||||
// String msgType = checkMessageContent(mjonMsgVO);
|
||||
String msgType = "";
|
||||
if (msgType == null) {
|
||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "입력 문자 내용을 확인할 수 없습니다. 문자 내용을 입력해 주세요.");
|
||||
}
|
||||
@ -4677,27 +4728,27 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
* @throws IllegalArgumentException 메시지 길이가 초과된 경우 예외 발생
|
||||
* @작성자 20241007 이호영
|
||||
*/
|
||||
private String checkMessageContent(MjonMsgVO mjonMsgVO) {
|
||||
try {
|
||||
// 문자 바이트 계산을 MsgSendUtils의 유틸리티 메서드를 사용하여 처리
|
||||
int smsBytes = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt());
|
||||
|
||||
// 메시지 내용이 없는 경우 null 반환
|
||||
if (smsBytes < 1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 메시지 타입 결정 로직을 MsgSendUtils의 getMsgType 메서드를 사용하여 처리
|
||||
String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsBytes);
|
||||
if ("INVALID".equals(msgType)) {
|
||||
return "INVALID";
|
||||
}
|
||||
|
||||
return msgType;
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new IllegalArgumentException("문자 인코딩 중 오류가 발생하였습니다.", e);
|
||||
}
|
||||
}
|
||||
// private String checkMessageContent(MjonMsgVO mjonMsgVO) {
|
||||
// try {
|
||||
// // 문자 바이트 계산을 MsgSendUtils의 유틸리티 메서드를 사용하여 처리
|
||||
// int smsBytes = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt());
|
||||
//
|
||||
// // 메시지 내용이 없는 경우 null 반환
|
||||
// if (smsBytes < 1) {
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
// // 메시지 타입 결정 로직을 MsgSendUtils의 getMsgType 메서드를 사용하여 처리
|
||||
// String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsBytes);
|
||||
// if ("INVALID".equals(msgType)) {
|
||||
// return "INVALID";
|
||||
// }
|
||||
//
|
||||
// return msgType;
|
||||
// } catch (UnsupportedEncodingException e) {
|
||||
// throw new IllegalArgumentException("문자 인코딩 중 오류가 발생하였습니다.", e);
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
@ -69,7 +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.MjonMsgSendVO;
|
||||
import itn.com.cmm.service.EgovFileMngService;
|
||||
import itn.com.cmm.service.EgovFileMngUtil;
|
||||
import itn.com.cmm.service.FileVO;
|
||||
@ -2071,6 +2071,7 @@ public class MjonMsgDataController {
|
||||
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
|
||||
|
||||
System.out.println("spmTxt : "+ spmTxt);
|
||||
System.out.println("parserStr : "+ parserStr);
|
||||
if(resultParser.contains(parserStr)) {
|
||||
//스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌.
|
||||
spmFilterTxt += spmTxt + ",";
|
||||
@ -3077,6 +3078,7 @@ public class MjonMsgDataController {
|
||||
String smishingYn = "N";
|
||||
String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보
|
||||
|
||||
|
||||
UserManageVO userManageVO = new UserManageVO();
|
||||
userManageVO.setMberId(userId);
|
||||
|
||||
@ -3172,8 +3174,8 @@ public class MjonMsgDataController {
|
||||
ModelMap model) throws Exception {
|
||||
|
||||
// 디버깅 출력
|
||||
System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgTabulListVO().toString());
|
||||
System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgTabulListVO().size());
|
||||
System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().toString());
|
||||
System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().size());
|
||||
|
||||
return ResponseEntity.ok().body(mjonMsgDataService.sendMsgData_advc(mjonMsgVO, request)) ;
|
||||
// return null;
|
||||
|
||||
@ -6,156 +6,128 @@ import itn.let.hangulparser.HangulParser;
|
||||
|
||||
public class ComGetSpamStringParser {
|
||||
|
||||
/*
|
||||
* 스팸 문자 필터링을 위한 변형된 한글 SMS 문장의 정규화 기법을 기반으로 개발
|
||||
* Kang Seung-Shik
|
||||
*
|
||||
* 20230419
|
||||
* */
|
||||
|
||||
//이상문자열 파싱 후 결합하여
|
||||
public static String getSpamTextParse(String strString) throws Exception {
|
||||
|
||||
String smsTxt = strString;
|
||||
String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", ""); //한글, 영문, 숫자 이외의 문자는 제거
|
||||
String[] split = repSmsTxt.split(" "); //띄어쓰기를 기준으로 분할
|
||||
String reMakeStringText = "";
|
||||
|
||||
try {
|
||||
|
||||
for(String txt : split) {
|
||||
|
||||
for(int i=0; i < txt.length(); i++) {
|
||||
|
||||
char test = txt.charAt(i);
|
||||
if(test >= 0xAC00) {//한글 문자이면 스킵
|
||||
continue;
|
||||
}else {
|
||||
|
||||
String tmpStr = Character.toString(test);
|
||||
if(tmpStr.matches(".*[ㄱ-ㅎ]+.*")) {
|
||||
|
||||
String nextCharAt = Character.toString(txt.charAt(i+1));//현재 단어 다음 단어가 어떤것인지 가져온다.
|
||||
|
||||
if(i == txt.length() - 1 ) {//일단 마지막 자음은 스킵 한다.
|
||||
break;
|
||||
}/*else if(!nextCharAt.matches(".*[ㄱ-ㅎㅏ-ㅣa-zA-Z]+.*")) {//현재 자음이면서 다음글자가 자/모음이 아니면 삭제 액ㄱ정 이런 경우 삭제하려고 함.
|
||||
txt = txt.replace(tmpStr, "");
|
||||
break;
|
||||
}*/
|
||||
|
||||
|
||||
if(nextCharAt.matches(".*[a-zA-Z]+.*")) {//다음 단어가 영문이면 영문과 유사한 한글 모음을 찾아서 합쳐준다.
|
||||
|
||||
String repCharAt = getEngToHanglue(nextCharAt);
|
||||
String repStringChar = tmpStr + repCharAt;
|
||||
|
||||
String repTxt = tmpStr + nextCharAt;
|
||||
|
||||
txt = txt.replace(repTxt, repStringChar);
|
||||
//System.out.println(txt);
|
||||
|
||||
|
||||
}/*else if(nextCharAt.matches(".*[ㅏ-ㅣ]+.*")) {//다음 단어가 모음이면 앞 자음과 합쳐 주기
|
||||
|
||||
String repStringChar = tmpStr + nextCharAt;
|
||||
//String norString = Normalizer.normalize(repStringChar, Normalizer.Form.NFC);
|
||||
//System.out.println(repStringChar);
|
||||
|
||||
//txt = txt.replace(repStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다.
|
||||
|
||||
//System.out.println(txt);
|
||||
|
||||
}*/
|
||||
|
||||
}else if(tmpStr.matches(".*[a-zA-Z]+.*")) {//영문단어가 나오면 앞뒤 단어 체크하여 연관성 없으면 삭제 처리.
|
||||
|
||||
String engStr = tmpStr;
|
||||
if(i < txt.length() - 1) {//마지막 글자 제외
|
||||
char nextEngChar = txt.charAt(i+1);
|
||||
if(i > 0) {//첫글자가 영문인 경우 제외
|
||||
|
||||
char befEngChar = txt.charAt(i-1);
|
||||
|
||||
//한글 단어사이에 영문자 한글자만 있는 경우 삭제 처리함.
|
||||
if(nextEngChar >= 0xAC00 && befEngChar >= 0xAC00) {
|
||||
|
||||
if(tmpStr.toLowerCase().equals("b")) {//B를 넣어서 한글로 읽힐수 있게도 함, 서B스 와 같은 형태
|
||||
txt = txt.replace(engStr, "비");
|
||||
}else {
|
||||
txt = txt.replace(engStr, "");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}else {
|
||||
|
||||
char befEngChar = txt.charAt(i-1);
|
||||
//마지막 글자이고 앞글자가 한글이면 마지막 영단어 삭제 처리
|
||||
if(befEngChar >= 0xAC00) {
|
||||
txt = txt.replace(engStr, "");
|
||||
//continue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}else if(tmpStr.matches(".*[0-9]+.*")) {
|
||||
|
||||
if(i-1 < 0) {//한글자만 있는경우 패스
|
||||
continue;
|
||||
}
|
||||
|
||||
String befString = Character.toString(txt.charAt(i-1));
|
||||
|
||||
if(befString.matches(".*[ㄱ-ㅎ]+.*")) {//이전 글자가 자음이면 변환 문자 체크
|
||||
|
||||
String numToStr = getNumberToString(tmpStr); //숫자를 모음으로 변환 처리
|
||||
|
||||
String orgStringChar = befString + tmpStr; //원래 앞자음 + 숫자
|
||||
String repStringChar = befString + numToStr; //원래 앞자음 + 숫자를 변환한 모음
|
||||
|
||||
txt = txt.replace(orgStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다.
|
||||
//System.out.println(txt);
|
||||
|
||||
}else {
|
||||
//숫자면 스킵
|
||||
continue;
|
||||
}
|
||||
|
||||
}else {
|
||||
//특수문자들 처리
|
||||
String repSpcStr = getRepSpacialString(tmpStr);
|
||||
if(!repSpcStr.equals("")) {//변환문자가 있는경우만 치환
|
||||
txt = txt.replace(tmpStr, repSpcStr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
reMakeStringText = reMakeStringText + " " + txt;
|
||||
|
||||
/**
|
||||
* @methodName : getSpamTextParse
|
||||
* @author : 이호영
|
||||
* @date : 2024.11.13
|
||||
* @description : 리펙토링
|
||||
* 원본 : ComGetSpamStringParser_advc_backup_20241113.java
|
||||
* @param strString
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static String getSpamTextParse(String strString) throws Exception {
|
||||
String smsTxt = strString;
|
||||
String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", ""); // 한글, 영문, 숫자 이외의 문자는 제거
|
||||
String[] split = repSmsTxt.split(" ");
|
||||
StringBuilder reMakeStringText = new StringBuilder();
|
||||
|
||||
try {
|
||||
for (String txt : split) {
|
||||
txt = processCharacters(txt);
|
||||
reMakeStringText.append(" ").append(txt);
|
||||
}
|
||||
|
||||
//System.out.println("++++++++++++++ ::: "+reMakeStringText);
|
||||
//넘어오는 모든 글자에서 한글에 대해서 자/모음을 분리해준다.
|
||||
List<String> jasoList = HangulParser.disassemble(reMakeStringText);
|
||||
|
||||
//분리된 자/모음 리스트를 다시 한글로 합쳐준다.
|
||||
|
||||
// 분리된 자/모음을 합쳐 최종 문자열 생성
|
||||
List<String> jasoList = HangulParser.disassemble(reMakeStringText.toString());
|
||||
String assembleStr = HangulParser.assemble(jasoList);
|
||||
|
||||
reMakeStringText = assembleStr;
|
||||
|
||||
|
||||
return assembleStr;
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("++++++++++ getSpamTextParse Error !!! "+e);
|
||||
System.out.println("++++++++++ getSpamTextParse Error !!! " + e);
|
||||
return "getSpamTextParse 오류가 발생하였습니다.";
|
||||
}
|
||||
|
||||
return reMakeStringText;
|
||||
|
||||
}
|
||||
|
||||
// 한 단어 내 각 문자에 대한 처리 로직
|
||||
private static String processCharacters(String txt) throws Exception {
|
||||
StringBuilder processedText = new StringBuilder(txt);
|
||||
|
||||
for (int i = 0; i < txt.length(); i++) {
|
||||
char currentChar = txt.charAt(i);
|
||||
if (isKorean(currentChar)) continue;
|
||||
|
||||
String tmpStr = Character.toString(currentChar);
|
||||
|
||||
// 자음, 영문, 숫자, 특수문자 각각에 대한 처리
|
||||
if (isKoreanConsonant(tmpStr)) {
|
||||
txt = handleConsonant(txt, tmpStr, i);
|
||||
} else if (isEnglish(tmpStr)) {
|
||||
txt = handleEnglish(txt, tmpStr, i);
|
||||
} else if (isNumber(tmpStr)) {
|
||||
txt = handleNumber(txt, tmpStr, i);
|
||||
} else {
|
||||
txt = handleSpecialCharacter(txt, tmpStr);
|
||||
}
|
||||
}
|
||||
|
||||
return processedText.toString();
|
||||
}
|
||||
|
||||
// 자음 처리 로직
|
||||
private static String handleConsonant(String txt, String tmpStr, int index) throws Exception {
|
||||
if (index == txt.length() - 1) return txt;
|
||||
|
||||
String nextCharAt = Character.toString(txt.charAt(index + 1));
|
||||
if (isEnglish(nextCharAt)) {
|
||||
String repCharAt = getEngToHanglue(nextCharAt);
|
||||
txt = txt.replace(tmpStr + nextCharAt, tmpStr + repCharAt);
|
||||
}
|
||||
return txt;
|
||||
}
|
||||
|
||||
// 영문 처리 로직
|
||||
private static String handleEnglish(String txt, String engStr, int index) {
|
||||
if (index < txt.length() - 1 && index > 0) {
|
||||
char nextChar = txt.charAt(index + 1);
|
||||
char previousChar = txt.charAt(index - 1);
|
||||
if (isKorean(previousChar) && isKorean(nextChar)) {
|
||||
txt = txt.replace(engStr, engStr.equalsIgnoreCase("b") ? "비" : "");
|
||||
}
|
||||
} else if (index > 0 && isKorean(txt.charAt(index - 1))) {
|
||||
txt = txt.replace(engStr, "");
|
||||
}
|
||||
return txt;
|
||||
}
|
||||
|
||||
// 숫자 처리 로직
|
||||
private static String handleNumber(String txt, String tmpStr, int index) throws Exception {
|
||||
if (index == 0) return txt;
|
||||
String previousStr = Character.toString(txt.charAt(index - 1));
|
||||
|
||||
if (isKoreanConsonant(previousStr)) {
|
||||
String numToStr = getNumberToString(tmpStr);
|
||||
txt = txt.replace(previousStr + tmpStr, previousStr + numToStr);
|
||||
}
|
||||
return txt;
|
||||
}
|
||||
|
||||
// 특수문자 처리 로직
|
||||
private static String handleSpecialCharacter(String txt, String tmpStr) throws Exception {
|
||||
String repSpcStr = getRepSpacialString(tmpStr);
|
||||
if (!repSpcStr.isEmpty()) {
|
||||
txt = txt.replace(tmpStr, repSpcStr);
|
||||
}
|
||||
return txt;
|
||||
}
|
||||
|
||||
// 문자 유형 판별 메서드
|
||||
private static boolean isKorean(char ch) {
|
||||
return ch >= 0xAC00;
|
||||
}
|
||||
|
||||
private static boolean isKoreanConsonant(String str) {
|
||||
return str.matches(".*[ㄱ-ㅎ]+.*");
|
||||
}
|
||||
|
||||
private static boolean isEnglish(String str) {
|
||||
return str.matches(".*[a-zA-Z]+.*");
|
||||
}
|
||||
|
||||
private static boolean isNumber(String str) {
|
||||
return str.matches(".*[0-9]+.*");
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@ -0,0 +1,249 @@
|
||||
package itn.let.mjo.spammsg.web;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import itn.let.hangulparser.HangulParser;
|
||||
|
||||
public class ComGetSpamStringParser_advc_backup_20241113 {
|
||||
|
||||
/*
|
||||
* 스팸 문자 필터링을 위한 변형된 한글 SMS 문장의 정규화 기법을 기반으로 개발
|
||||
* Kang Seung-Shik
|
||||
*
|
||||
* 20230419
|
||||
* */
|
||||
|
||||
//이상문자열 파싱 후 결합하여
|
||||
public static String getSpamTextParse(String strString) throws Exception {
|
||||
|
||||
String smsTxt = strString;
|
||||
String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", ""); //한글, 영문, 숫자 이외의 문자는 제거
|
||||
String[] split = repSmsTxt.split(" "); //띄어쓰기를 기준으로 분할
|
||||
String reMakeStringText = "";
|
||||
|
||||
try {
|
||||
|
||||
for(String txt : split) {
|
||||
|
||||
for(int i=0; i < txt.length(); i++) {
|
||||
|
||||
char test = txt.charAt(i);
|
||||
if(test >= 0xAC00) {//한글 문자이면 스킵
|
||||
continue;
|
||||
}else {
|
||||
|
||||
String tmpStr = Character.toString(test);
|
||||
if(tmpStr.matches(".*[ㄱ-ㅎ]+.*")) {
|
||||
|
||||
String nextCharAt = Character.toString(txt.charAt(i+1));//현재 단어 다음 단어가 어떤것인지 가져온다.
|
||||
|
||||
if(i == txt.length() - 1 ) {//일단 마지막 자음은 스킵 한다.
|
||||
break;
|
||||
}/*else if(!nextCharAt.matches(".*[ㄱ-ㅎㅏ-ㅣa-zA-Z]+.*")) {//현재 자음이면서 다음글자가 자/모음이 아니면 삭제 액ㄱ정 이런 경우 삭제하려고 함.
|
||||
txt = txt.replace(tmpStr, "");
|
||||
break;
|
||||
}*/
|
||||
|
||||
|
||||
if(nextCharAt.matches(".*[a-zA-Z]+.*")) {//다음 단어가 영문이면 영문과 유사한 한글 모음을 찾아서 합쳐준다.
|
||||
|
||||
String repCharAt = getEngToHanglue(nextCharAt);
|
||||
String repStringChar = tmpStr + repCharAt;
|
||||
|
||||
String repTxt = tmpStr + nextCharAt;
|
||||
|
||||
txt = txt.replace(repTxt, repStringChar);
|
||||
//System.out.println(txt);
|
||||
|
||||
|
||||
}/*else if(nextCharAt.matches(".*[ㅏ-ㅣ]+.*")) {//다음 단어가 모음이면 앞 자음과 합쳐 주기
|
||||
|
||||
String repStringChar = tmpStr + nextCharAt;
|
||||
//String norString = Normalizer.normalize(repStringChar, Normalizer.Form.NFC);
|
||||
//System.out.println(repStringChar);
|
||||
|
||||
//txt = txt.replace(repStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다.
|
||||
|
||||
//System.out.println(txt);
|
||||
|
||||
}*/
|
||||
|
||||
}else if(tmpStr.matches(".*[a-zA-Z]+.*")) {//영문단어가 나오면 앞뒤 단어 체크하여 연관성 없으면 삭제 처리.
|
||||
|
||||
String engStr = tmpStr;
|
||||
if(i < txt.length() - 1) {//마지막 글자 제외
|
||||
char nextEngChar = txt.charAt(i+1);
|
||||
if(i > 0) {//첫글자가 영문인 경우 제외
|
||||
|
||||
char befEngChar = txt.charAt(i-1);
|
||||
|
||||
//한글 단어사이에 영문자 한글자만 있는 경우 삭제 처리함.
|
||||
if(nextEngChar >= 0xAC00 && befEngChar >= 0xAC00) {
|
||||
|
||||
if(tmpStr.toLowerCase().equals("b")) {//B를 넣어서 한글로 읽힐수 있게도 함, 서B스 와 같은 형태
|
||||
txt = txt.replace(engStr, "비");
|
||||
}else {
|
||||
txt = txt.replace(engStr, "");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}else {
|
||||
|
||||
char befEngChar = txt.charAt(i-1);
|
||||
//마지막 글자이고 앞글자가 한글이면 마지막 영단어 삭제 처리
|
||||
if(befEngChar >= 0xAC00) {
|
||||
txt = txt.replace(engStr, "");
|
||||
//continue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}else if(tmpStr.matches(".*[0-9]+.*")) {
|
||||
|
||||
if(i-1 < 0) {//한글자만 있는경우 패스
|
||||
continue;
|
||||
}
|
||||
|
||||
String befString = Character.toString(txt.charAt(i-1));
|
||||
|
||||
if(befString.matches(".*[ㄱ-ㅎ]+.*")) {//이전 글자가 자음이면 변환 문자 체크
|
||||
|
||||
String numToStr = getNumberToString(tmpStr); //숫자를 모음으로 변환 처리
|
||||
|
||||
String orgStringChar = befString + tmpStr; //원래 앞자음 + 숫자
|
||||
String repStringChar = befString + numToStr; //원래 앞자음 + 숫자를 변환한 모음
|
||||
|
||||
txt = txt.replace(orgStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다.
|
||||
//System.out.println(txt);
|
||||
|
||||
}else {
|
||||
//숫자면 스킵
|
||||
continue;
|
||||
}
|
||||
|
||||
}else {
|
||||
//특수문자들 처리
|
||||
String repSpcStr = getRepSpacialString(tmpStr);
|
||||
if(!repSpcStr.equals("")) {//변환문자가 있는경우만 치환
|
||||
txt = txt.replace(tmpStr, repSpcStr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
reMakeStringText = reMakeStringText + " " + txt;
|
||||
|
||||
}
|
||||
|
||||
//System.out.println("++++++++++++++ ::: "+reMakeStringText);
|
||||
//넘어오는 모든 글자에서 한글에 대해서 자/모음을 분리해준다.
|
||||
List<String> jasoList = HangulParser.disassemble(reMakeStringText);
|
||||
|
||||
//분리된 자/모음 리스트를 다시 한글로 합쳐준다.
|
||||
String assembleStr = HangulParser.assemble(jasoList);
|
||||
|
||||
reMakeStringText = assembleStr;
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("++++++++++ getSpamTextParse Error !!! "+e);
|
||||
return "getSpamTextParse 오류가 발생하였습니다.";
|
||||
}
|
||||
|
||||
return reMakeStringText;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* 한글과 유사한 영문자를 변환 처리함
|
||||
*
|
||||
* */
|
||||
public static String getEngToHanglue(String strWord) throws Exception {
|
||||
|
||||
String returnStr = "";
|
||||
|
||||
try {
|
||||
|
||||
if(strWord.toLowerCase().equals("r")) {
|
||||
|
||||
returnStr = "ㅏ";
|
||||
|
||||
}else if(strWord.toLowerCase().equals("h")) {
|
||||
|
||||
returnStr = "ㅐ";
|
||||
|
||||
}else if(strWord.toLowerCase().equals("i") || strWord.toLowerCase().equals("I") || strWord.toLowerCase().equals("l")) {
|
||||
|
||||
returnStr = "ㅣ";
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("++++++++++++++ getEngToHanglue Error !!! "+e);
|
||||
}
|
||||
|
||||
return returnStr;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* 한글과 유사한 숫자를 변환처리함
|
||||
*
|
||||
* */
|
||||
public static String getNumberToString(String strWord) throws Exception {
|
||||
|
||||
String returnStr = "";
|
||||
|
||||
try {
|
||||
|
||||
if(strWord.equals("1")) {
|
||||
|
||||
returnStr = "ㅣ";
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("++++++++++++++ getNumberToString Error !!! "+e);
|
||||
}
|
||||
|
||||
return returnStr;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* 한글과 유사한 특수문자들 변환처리함
|
||||
*
|
||||
* */
|
||||
public static String getRepSpacialString(String strWord) throws Exception{
|
||||
|
||||
String returnStr = "";
|
||||
|
||||
try {
|
||||
|
||||
if(strWord.equals("ⓒ")) {
|
||||
returnStr = "c";
|
||||
}else if(strWord.equals("β")) {
|
||||
returnStr = "비";
|
||||
}else if(strWord.equals("⒪")) {
|
||||
returnStr = "ㅇ";
|
||||
}else if(strWord.equals("㈄")) {
|
||||
returnStr = "ㅁ";
|
||||
}else if(strWord.equals("①")) {
|
||||
returnStr = "ㅣ";
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("++++++++++++++ getRepSpacialString Error !!! "+e);
|
||||
}
|
||||
|
||||
return returnStr;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -425,8 +425,12 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
|
||||
//카카오 환불 처리 리스트
|
||||
public void kakaoFailPayBack() throws Exception {
|
||||
|
||||
//카카오 알림톡 환불 처리
|
||||
kakaoAlimTalkService.selectKakaoAtSentRefundList();
|
||||
|
||||
//카카오 친구톡 환불 처리
|
||||
kakaoAlimTalkService.selectKakaoFtSentRefundList();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -36,6 +36,7 @@ public class JoinSettingVO {
|
||||
private float customEdit3Price; // 이미지 편집(첨부이미지 3장이하)
|
||||
private float customTextPrice; // 텍스트 단순수정
|
||||
private float kakaoAtPrice; // 카카오 알림톡 단가
|
||||
private float kakaoFtPrice; // 카카오 친구톡 단가
|
||||
private float faxPrice; // 팩스 단가
|
||||
|
||||
private float refundPer; //환불 비율
|
||||
@ -210,6 +211,14 @@ public class JoinSettingVO {
|
||||
this.kakaoAtPrice = kakaoAtPrice;
|
||||
}
|
||||
|
||||
public float getKakaoFtPrice() {
|
||||
return kakaoFtPrice;
|
||||
}
|
||||
|
||||
public void setKakaoFtPrice(float kakaoFtPrice) {
|
||||
this.kakaoFtPrice = kakaoFtPrice;
|
||||
}
|
||||
|
||||
public float getFaxPrice() {
|
||||
return faxPrice;
|
||||
}
|
||||
|
||||
@ -1105,6 +1105,7 @@ public class EgovUserManageController {
|
||||
model.addAttribute("sysPicture3Price", sysJoinSetVO.getPicture3Price());
|
||||
model.addAttribute("sysPicture3Price", sysJoinSetVO.getPicture3Price());
|
||||
model.addAttribute("sysKakaoAtPrice", sysJoinSetVO.getKakaoAtPrice());
|
||||
model.addAttribute("sysKakaoFtPrice", sysJoinSetVO.getKakaoFtPrice());
|
||||
|
||||
// 등급제 단가 추출 => 시스템 단가에 적용
|
||||
sysJoinSetVO = mberGrdService.selectMberGrdDefaultInfo(sysJoinSetVO, userId);
|
||||
@ -1116,6 +1117,7 @@ public class EgovUserManageController {
|
||||
Float picture2Price = mberManageVO.getPicture2Price();
|
||||
Float picture3Price = mberManageVO.getPicture3Price();
|
||||
Float kakaoAtPrice = mberManageVO.getKakaoAtPrice();
|
||||
Float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
|
||||
Float faxPrice = mberManageVO.getFaxPrice();
|
||||
System.out.println("mberManageVO.getFaxPrice() : " + mberManageVO.getFaxPrice());
|
||||
|
||||
@ -1131,6 +1133,11 @@ public class EgovUserManageController {
|
||||
if(kakaoAtPrice < 1) {
|
||||
kakaoAtPrice = sysJoinSetVO.getKakaoAtPrice();
|
||||
}
|
||||
|
||||
if(kakaoFtPrice < 1) {
|
||||
kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice();
|
||||
}
|
||||
|
||||
if(faxPrice < 1) {
|
||||
faxPrice = sysJoinSetVO.getFaxPrice();
|
||||
}
|
||||
@ -1141,6 +1148,7 @@ public class EgovUserManageController {
|
||||
model.addAttribute("picture2Price", picture2Price);
|
||||
model.addAttribute("picture3Price", picture3Price);
|
||||
model.addAttribute("kakaoAtPrice", kakaoAtPrice);
|
||||
model.addAttribute("kakaoFtPrice", kakaoFtPrice);
|
||||
model.addAttribute("faxPrice", faxPrice);
|
||||
model.addAttribute("sysJoinSetVO", sysJoinSetVO);
|
||||
|
||||
@ -1319,6 +1327,9 @@ public class EgovUserManageController {
|
||||
double kakaoAtCost = 0.00;
|
||||
double kakaoAtMargin = 0.00;
|
||||
|
||||
double kakaoFtCost = 0.00;
|
||||
double kakaoFtMargin = 0.00;
|
||||
|
||||
double faxCost = 0.00;
|
||||
double faxMargin = 0.00;
|
||||
|
||||
@ -1351,11 +1362,24 @@ public class EgovUserManageController {
|
||||
avgPriceP = Double.parseDouble(item.getAgentPrice());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 알림톡,친구톡 원가 정보 조회
|
||||
* Agent 코드 번호를 넘겨준다.
|
||||
* 다우기술 04번으로 넘겨줌
|
||||
* */
|
||||
|
||||
// kakao 원가
|
||||
kakaoAtCost = kakaoApiService.selectKakaoCost();
|
||||
MjonMsgAgentStsVO resultAgentCost = mjonMsgAgentStsService.selectHotLineAgentCost("04");
|
||||
kakaoAtCost = resultAgentCost.getKakaoAtCost(); //알림톡 원가
|
||||
kakaoFtCost = resultAgentCost.getKakaoFtCost(); //친구톡 원가
|
||||
|
||||
// kakao 알림톡 마진률 계산
|
||||
//kakaoAtCost = kakaoApiService.selectKakaoCost();
|
||||
kakaoAtMargin = (1-(kakaoAtCost / kakaoAtPrice))*100;
|
||||
|
||||
//kakao 친구톡 마진률 계산
|
||||
kakaoFtMargin = (1-(kakaoFtCost / kakaoFtPrice))*100;
|
||||
|
||||
// fax 원가 SELECT
|
||||
faxCost = faxService.getFaxCost();
|
||||
// fax 마직 계산 :: 1-원가/단가
|
||||
@ -1372,7 +1396,9 @@ public class EgovUserManageController {
|
||||
model.addAttribute("avgPriceL", avgPriceL);
|
||||
model.addAttribute("avgPriceP", avgPriceP);
|
||||
model.addAttribute("kakaoAtCost", kakaoAtCost);
|
||||
model.addAttribute("kakaoFtCost", kakaoFtCost);
|
||||
model.addAttribute("kakaoAtMargin", kakaoAtMargin);
|
||||
model.addAttribute("kakaoFtMargin", kakaoFtMargin);
|
||||
model.addAttribute("faxCost", faxCost);
|
||||
model.addAttribute("faxMargin", faxMargin);
|
||||
}
|
||||
@ -3047,6 +3073,11 @@ public class EgovUserManageController {
|
||||
mberManageVO.setKakaoAtPrice(0);
|
||||
}
|
||||
|
||||
// 친구톡 => 수정하려는 단가가 시스템기본단가와 동일할경우 0으로 세팅
|
||||
if (Float.compare(sysJoinSetVO.getKakaoFtPrice(), mberManageVO.getKakaoFtPrice()) == 0) {
|
||||
mberManageVO.setKakaoFtPrice(0);
|
||||
}
|
||||
|
||||
int resultCnt = mberManageService.updateUserPrice(mberManageVO);
|
||||
|
||||
if(resultCnt > 0) {
|
||||
@ -4942,7 +4973,7 @@ public class EgovUserManageController {
|
||||
* 회원 이용정지 사유 조회하기
|
||||
* @param searchVO
|
||||
* @param model
|
||||
* @return "/uss/umt/user/uss/umt/user/EgovGnrlselectedUserView.do.do"
|
||||
* @return "/uss/umt/user/uss/umt/user/selectMberSpamBlockMemoDetailAjax.do"
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value = {"/uss/umt/user/selectMberSpamBlockMemoDetailAjax.do"})
|
||||
|
||||
@ -367,11 +367,11 @@
|
||||
AND C.RSLT_CODE != '7000'
|
||||
AND C.MSG_TYPE = '8'
|
||||
) AS atFailCount ,
|
||||
<!-- ( SELECT COUNT(0)
|
||||
( SELECT COUNT(0)
|
||||
FROM MJ_MSG_DATA C
|
||||
WHERE C.DEL_FLAG = 'N'
|
||||
AND C.RESERVE_C_YN = 'N'
|
||||
AND C.MSG_GROUP_ID = MG.MSG_GROUP_ID
|
||||
AND C.MSG_GROUP_ID = M2.msgGroupId
|
||||
AND C.RSLT_CODE = '7000'
|
||||
AND C.MSG_TYPE = '9'
|
||||
) AS ftSuccessCount ,
|
||||
@ -379,12 +379,12 @@
|
||||
FROM MJ_MSG_DATA C
|
||||
WHERE C.DEL_FLAG = 'N'
|
||||
AND C.RESERVE_C_YN = 'N'
|
||||
AND C.MSG_GROUP_ID = MG.MSG_GROUP_ID
|
||||
AND C.MSG_GROUP_ID = M2.msgGroupId
|
||||
AND C.RSLT_CODE != '7000'
|
||||
AND C.MSG_TYPE = '9'
|
||||
) AS ftFailCount , -->
|
||||
'0' AS ftSuccessCount,
|
||||
'0' AS ftFailCount,
|
||||
) AS ftFailCount ,
|
||||
<!-- '0' AS ftSuccessCount,
|
||||
'0' AS ftFailCount, -->
|
||||
M2.bizUmid,
|
||||
M2.callStatus,
|
||||
M2.bizKakaoResendYn,
|
||||
@ -525,7 +525,7 @@
|
||||
</isNotEmpty>
|
||||
AND MG.DEL_FLAG ='N'
|
||||
AND MG.RESERVE_C_YN = 'N'
|
||||
AND MG.MSG_TYPE = '8'
|
||||
AND MG.MSG_TYPE IN ('8', '9')
|
||||
)M
|
||||
LEFT JOIN MJ_KAKAO_PROFILE_INFO MKPI
|
||||
ON M.MSG_NOTICETALK_SENDER_KEY = MKPI.SENDER_KEY
|
||||
@ -1142,7 +1142,7 @@
|
||||
AND C.RSLT_CODE != '7000'
|
||||
AND C.MSG_TYPE = '8'
|
||||
) AS atFailCount ,
|
||||
<!-- ( SELECT COUNT(0)
|
||||
( SELECT COUNT(0)
|
||||
FROM MJ_MSG_DATA C
|
||||
WHERE C.DEL_FLAG = 'N'
|
||||
AND C.RESERVE_C_YN = 'N'
|
||||
@ -1157,9 +1157,9 @@
|
||||
AND C.MSG_GROUP_ID = M2.msgGroupId
|
||||
AND C.RSLT_CODE != '7000'
|
||||
AND C.MSG_TYPE = '9'
|
||||
) AS ftFailCount ,-->
|
||||
'0' AS ftSuccessCount,
|
||||
'0' AS ftFailCount,
|
||||
) AS ftFailCount ,
|
||||
<!-- '0' AS ftSuccessCount,
|
||||
'0' AS ftFailCount, -->
|
||||
M2.bizUmid,
|
||||
M2.callStatus,
|
||||
M2.bizKakaoResendYn,
|
||||
@ -1290,7 +1290,7 @@
|
||||
</isNotEmpty>
|
||||
AND MG.DEL_FLAG ='N'
|
||||
AND MG.RESERVE_C_YN = 'N'
|
||||
AND MG.MSG_TYPE = '8'
|
||||
AND MG.MSG_TYPE IN ('8', '9')
|
||||
)M
|
||||
LEFT JOIN MJ_KAKAO_PROFILE_INFO MKPI
|
||||
ON M.MSG_NOTICETALK_SENDER_KEY = MKPI.SENDER_KEY
|
||||
@ -1363,7 +1363,8 @@
|
||||
|
||||
<isNotEmpty property="pageType">
|
||||
<isEqual property="pageType" compareValue="sand">
|
||||
AND M.AT_DELAY_COMPLETE_YN ='Y'
|
||||
/** 20240119 우영두 수정 - 딜레이 승인된 건들만 조회하고 있어서 AND 조건 에서 OR 조건으로 변경 처리함 */
|
||||
OR M.AT_DELAY_COMPLETE_YN ='Y'
|
||||
/*AND M.REFUND_YN = 'N'*/
|
||||
</isEqual>
|
||||
</isNotEmpty>
|
||||
@ -2386,7 +2387,7 @@
|
||||
MJ_MSG_DATA A
|
||||
WHERE 1=1
|
||||
AND A.USER_ID = #userId#
|
||||
AND A.MSG_TYPE IN (8)
|
||||
AND A.MSG_TYPE IN ('8', '9')
|
||||
GROUP BY A.MSG_GROUP_ID
|
||||
)A
|
||||
LEFT JOIN MJ_MSG_GROUP_DATA MGD
|
||||
|
||||
@ -911,6 +911,7 @@
|
||||
SELECT
|
||||
MGD.MSG_GROUP_ID as msgGroupId
|
||||
, MGD.USER_ID as userId
|
||||
, MD.MSG_TYPE as msgType
|
||||
, MD.REQ_DATE as reqDate /* 발송 시간 */
|
||||
, MD.MSG_NOTICETALK_SENDER_KEY as msgNoticetalkSenderKey /* api key */
|
||||
, MD.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey /* 특정 템플릿 key */
|
||||
@ -921,6 +922,7 @@
|
||||
, MD.BIZ_KAKAO_RESEND_TYPE as bizKakaoResendType /* MMS / LMS / SMS */
|
||||
, MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */
|
||||
, MGD.BIZ_KAKAO_RESEND_ORGNL_TXT as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */
|
||||
, MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */
|
||||
FROM MJ_MSG_GROUP_DATA MGD
|
||||
INNER JOIN MJ_MSG_DATA MD
|
||||
ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID
|
||||
@ -937,6 +939,7 @@
|
||||
|
||||
SELECT
|
||||
MD.REQ_DATE as reqDate /* 발송 시간 */
|
||||
, MD.MSG_TYPE as msgType
|
||||
, MD.MSG_NOTICETALK_SENDER_KEY as msgNoticetalkSenderKey /* api key */
|
||||
, MD.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey /* 특정 템플릿 key */
|
||||
, MD.SMS_TXT as smsTxtTrans /* 알림톡 본문 내용 치환(O)*/
|
||||
@ -944,6 +947,7 @@
|
||||
, MD.BIZ_KAKAO_RESEND_YN as bizKakaoResendYn /* 대체 문자 사용 여부*/
|
||||
, MD.BIZ_KAKAO_RESEND_TYPE as bizKakaoResendType /* MMS / LMS / SMS */
|
||||
, MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */
|
||||
, MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */
|
||||
FROM MJ_MSG_DATA MD
|
||||
WHERE
|
||||
MD.MSG_ID = #msgId#
|
||||
|
||||
@ -103,6 +103,32 @@
|
||||
AND MMD.MSG_TYPE = 8
|
||||
</select>
|
||||
|
||||
<select id="kakaoAlimTalkDAO.selectKakaoFtSentRefundList" resultClass="kakaoVO">
|
||||
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
|
||||
, MMD.BIZ_KAKAO_RESEND_YN AS subMsgSendYn
|
||||
, MMD.BIZ_KAKAO_RESEND_TYPE AS subMsgType
|
||||
|
||||
FROM
|
||||
MJ_MSG_DATA MMD
|
||||
INNER JOIN LETTNGNRLMBER MB
|
||||
ON MMD.USER_ID = MB.MBER_ID
|
||||
WHERE 1=1
|
||||
AND MMD.CUR_STATE = '3'
|
||||
AND MMD.REFUND_YN = 'N'
|
||||
AND MMD.RESERVE_C_YN = 'N'
|
||||
AND MMD.MSG_TYPE = 9
|
||||
</select>
|
||||
|
||||
<select id="kakaoAlimTalkDAO.selectKakaoAtUmid" resultClass="kakaoVO" parameterClass="kakaoVO">
|
||||
SELECT
|
||||
BIZ_UMID AS bizUmid
|
||||
@ -126,4 +152,22 @@
|
||||
<procedure id="kakaoAlimTalkDAO.updateKakaoAtNotSend" parameterClass="kakaoVO">
|
||||
{call kakaoAt_NotSend(#userId#, #msgGroupId#, #userData#)}
|
||||
</procedure>
|
||||
|
||||
|
||||
|
||||
<!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 성공 관련 - 대체문자 선택시 차액 환불 처리) -->
|
||||
<procedure id="kakaoAlimTalkDAO.updateKakaoFtSend" parameterClass="kakaoVO">
|
||||
{call kakaoFt_Send(#userId#, #msgGroupId#, #userData#)}
|
||||
</procedure>
|
||||
|
||||
<!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 실패시 대체문자 관련 - 대체문자 발송 완료 된 경우) -->
|
||||
<procedure id="kakaoAlimTalkDAO.updateKakaoFtSubMsgSend" parameterClass="kakaoVO">
|
||||
{call kakaoFt_SubMsg_Send(#userId#, #msgGroupId#, #userData#)}
|
||||
</procedure>
|
||||
|
||||
<!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 실패시 대체문자 관련 - 대체문자 발송 실패 된 경우) -->
|
||||
<procedure id="kakaoAlimTalkDAO.updateKakaoFtNotSend" parameterClass="kakaoVO">
|
||||
{call kakaoFt_NotSend(#userId#, #msgGroupId#, #userData#)}
|
||||
</procedure>
|
||||
|
||||
</sqlMap>
|
||||
@ -20,6 +20,7 @@
|
||||
USER_ID,
|
||||
ATCH_FILE_ID,
|
||||
TEMPLATE_NAME,
|
||||
IMAGE_FILE_NAME,
|
||||
IMAGE_URL,
|
||||
IMAGE_TYPE,
|
||||
IMAGE_TITLE,
|
||||
@ -38,6 +39,7 @@
|
||||
, #userId#
|
||||
, #bizJsonName#
|
||||
, #templateName#
|
||||
, #imageFileName#
|
||||
, #templateImageUrl#
|
||||
, #imageType#
|
||||
, #imgTitle#
|
||||
@ -94,72 +96,60 @@
|
||||
|
||||
<select id="kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateList" parameterClass="kakaoVO" resultClass="kakaoVO">
|
||||
|
||||
SELECT COUNT(A.FRIEND_ID) OVER() AS totCnt ,
|
||||
A.FRIEND_ID AS friendId,
|
||||
A.USER_ID AS userId,
|
||||
A.SENDER_KEY AS senderKey,
|
||||
KPI.YELLOW_ID AS yellowId,
|
||||
A.TEMPLATE_NAME AS templateName,
|
||||
A.IMAGE_URL AS templateImageUrl,
|
||||
A.IMAGE_TYPE AS imageType,
|
||||
A.IMAGE_TITLE AS imgTitle,
|
||||
A.IMAGE_LINK AS imgLink,
|
||||
A.TEMPLATE_CONTENTS AS templateContent,
|
||||
A.AD_FLAG AS adFlag,
|
||||
DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm,
|
||||
A.FRST_REGISTER_ID AS frstRegisterId,
|
||||
DATE_FORMAT(A.LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm,
|
||||
A.LAST_UPDUSR_ID AS lastUpdusrId
|
||||
FROM ( SELECT KFT.FRIEND_ID,
|
||||
KFT.USER_ID,
|
||||
KFT.SENDER_KEY,
|
||||
KFT.TEMPLATE_NAME,
|
||||
KFT.IMAGE_URL,
|
||||
KFT.IMAGE_TYPE,
|
||||
KFT.IMAGE_TITLE,
|
||||
KFT.IMAGE_LINK,
|
||||
KFT.TEMPLATE_CONTENTS,
|
||||
KFT.AD_FLAG,
|
||||
KFT.FRST_REGIST_PNTTM,
|
||||
KFT.FRST_REGISTER_ID,
|
||||
KFT.LAST_UPDT_PNTTM,
|
||||
KFT.LAST_UPDUSR_ID
|
||||
FROM MJ_KAKAO_FRIENDS_TEMPLATE KFT
|
||||
WHERE DELETE_YN = 'N'
|
||||
AND USER_ID = #userId#
|
||||
AND SENDER_KEY = #senderKey#
|
||||
<isNotEmpty property="searchKeyword">
|
||||
AND KFT.TEMPLATE_NAME LIKE CONCAT ('%', #searchKeyword#,'%')
|
||||
</isNotEmpty>
|
||||
<isNotEmpty property="startDate">
|
||||
<![CDATA[
|
||||
AND DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
|
||||
]]>
|
||||
</isNotEmpty>
|
||||
<isNotEmpty property="startDate">
|
||||
<![CDATA[
|
||||
AND DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') <= DATE_FORMAT(#endDate#, '%Y-%m-%d')
|
||||
]]>
|
||||
</isNotEmpty>
|
||||
ORDER BY 1 =1
|
||||
<isNotEmpty property="searchSortCnd">
|
||||
<isEqual property="searchSortCnd" compareValue="curState">
|
||||
, curState $searchSortOrd$
|
||||
, orderByrsltCode
|
||||
</isEqual>
|
||||
<isNotEqual property="searchSortCnd" compareValue="curState">
|
||||
,$searchSortCnd$
|
||||
</isNotEqual>
|
||||
</isNotEmpty>
|
||||
<isNotEmpty property="searchSortOrd">
|
||||
$searchSortOrd$
|
||||
</isNotEmpty>
|
||||
LIMIT #recordCountPerPage# OFFSET #firstIndex#
|
||||
)
|
||||
A
|
||||
LEFT JOIN MJ_KAKAO_PROFILE_INFO KPI
|
||||
ON A.USER_ID = KPI.USER_ID
|
||||
AND A.SENDER_KEY = KPI.SENDER_KEY
|
||||
SELECT COUNT(KFT.FRIEND_ID) OVER() AS totCnt,
|
||||
KFT.FRIEND_ID AS friendId,
|
||||
KFT.USER_ID AS userId,
|
||||
KFT.SENDER_KEY AS senderKey,
|
||||
KPI.YELLOW_ID AS yellowId,
|
||||
KFT.TEMPLATE_NAME AS templateName,
|
||||
KFT.IMAGE_FILE_NAME AS imageFileName,
|
||||
KFT.IMAGE_URL AS templateImageUrl,
|
||||
KFT.IMAGE_TYPE AS imageType,
|
||||
KFT.IMAGE_TITLE AS imgTitle,
|
||||
KFT.IMAGE_LINK AS imgLink,
|
||||
KFT.TEMPLATE_CONTENTS AS templateContent,
|
||||
KFT.AD_FLAG AS adFlag,
|
||||
DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm,
|
||||
KFT.FRST_REGISTER_ID AS frstRegisterId,
|
||||
DATE_FORMAT(KFT.LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm,
|
||||
KFT.LAST_UPDUSR_ID AS lastUpdusrId
|
||||
FROM MJ_KAKAO_FRIENDS_TEMPLATE KFT
|
||||
LEFT JOIN MJ_KAKAO_PROFILE_INFO KPI
|
||||
ON KFT.USER_ID = KPI.USER_ID
|
||||
AND KFT.SENDER_KEY = KPI.SENDER_KEY
|
||||
WHERE KFT.DELETE_YN = 'N'
|
||||
AND KFT.USER_ID = #userId#
|
||||
<isNotEmpty property="senderKey">
|
||||
AND KFT.SENDER_KEY = #senderKey#
|
||||
</isNotEmpty>
|
||||
<isNotEmpty property="searchKeyword">
|
||||
AND KFT.TEMPLATE_NAME LIKE CONCAT ('%', #searchKeyword#,'%')
|
||||
</isNotEmpty>
|
||||
<isNotEmpty property="startDate">
|
||||
<![CDATA[
|
||||
AND DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
|
||||
]]>
|
||||
</isNotEmpty>
|
||||
<isNotEmpty property="startDate">
|
||||
<![CDATA[
|
||||
AND DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') <= DATE_FORMAT(#endDate#, '%Y-%m-%d')
|
||||
]]>
|
||||
</isNotEmpty>
|
||||
ORDER BY 1 =1
|
||||
<isNotEmpty property="searchSortCnd">
|
||||
<isEqual property="searchSortCnd" compareValue="curState">
|
||||
, curState $searchSortOrd$
|
||||
, orderByrsltCode
|
||||
</isEqual>
|
||||
<isNotEqual property="searchSortCnd" compareValue="curState">
|
||||
,$searchSortCnd$
|
||||
</isNotEqual>
|
||||
</isNotEmpty>
|
||||
<isNotEmpty property="searchSortOrd">
|
||||
$searchSortOrd$
|
||||
</isNotEmpty>
|
||||
LIMIT #recordCountPerPage# OFFSET #firstIndex#
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
@ -199,5 +189,87 @@
|
||||
|
||||
</delete>
|
||||
|
||||
<select id="kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail" parameterClass="kakaoVO" resultClass="kakaoVO">
|
||||
SELECT A.FRIEND_ID AS friendId,
|
||||
A.USER_ID AS userId,
|
||||
A.SENDER_KEY AS senderKey,
|
||||
KPI.YELLOW_ID AS yellowId,
|
||||
A.TEMPLATE_NAME AS templateName,
|
||||
A.IMAGE_FILE_NAME AS imageFileName,
|
||||
A.IMAGE_URL AS templateImageUrl,
|
||||
A.IMAGE_TYPE AS imageType,
|
||||
A.IMAGE_TITLE AS imgTitle,
|
||||
A.IMAGE_LINK AS imgLink,
|
||||
A.TEMPLATE_CONTENTS AS templateContent,
|
||||
A.AD_FLAG AS adFlag,
|
||||
DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm,
|
||||
A.FRST_REGISTER_ID AS frstRegisterId,
|
||||
DATE_FORMAT(A.LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm,
|
||||
A.LAST_UPDUSR_ID AS lastUpdusrId
|
||||
FROM ( SELECT KFT.FRIEND_ID,
|
||||
KFT.USER_ID,
|
||||
KFT.SENDER_KEY,
|
||||
KFT.TEMPLATE_NAME,
|
||||
KFT.IMAGE_FILE_NAME,
|
||||
KFT.IMAGE_URL,
|
||||
KFT.IMAGE_TYPE,
|
||||
KFT.IMAGE_TITLE,
|
||||
KFT.IMAGE_LINK,
|
||||
KFT.TEMPLATE_CONTENTS,
|
||||
KFT.AD_FLAG,
|
||||
KFT.FRST_REGIST_PNTTM,
|
||||
KFT.FRST_REGISTER_ID,
|
||||
KFT.LAST_UPDT_PNTTM,
|
||||
KFT.LAST_UPDUSR_ID
|
||||
FROM MJ_KAKAO_FRIENDS_TEMPLATE KFT
|
||||
WHERE DELETE_YN = 'N'
|
||||
AND USER_ID = #userId#
|
||||
AND FRIEND_ID = #friendId#
|
||||
)
|
||||
A
|
||||
LEFT JOIN MJ_KAKAO_PROFILE_INFO KPI
|
||||
ON A.USER_ID = KPI.USER_ID
|
||||
AND A.SENDER_KEY = KPI.SENDER_KEY
|
||||
|
||||
</select>
|
||||
|
||||
<update id="kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData" parameterClass="kakaoVO" >
|
||||
|
||||
UPDATE MJ_KAKAO_FRIENDS_TEMPLATE
|
||||
SET ATCH_FILE_ID = #bizJsonName#,
|
||||
TEMPLATE_NAME = #templateName#,
|
||||
IMAGE_FILE_NAME = #imageFileName#,
|
||||
IMAGE_URL = #templateImageUrl#,
|
||||
IMAGE_TYPE = #imageType#,
|
||||
IMAGE_TITLE = #imgTitle#,
|
||||
IMAGE_LINK = #imgLink#,
|
||||
SENDER_KEY = #senderKey#,
|
||||
TEMPLATE_CONTENTS = #templateContent#,
|
||||
AD_FLAG = #adFlag#,
|
||||
LAST_UPDT_PNTTM = NOW(),
|
||||
LAST_UPDUSR_ID = #lastUpdusrId#
|
||||
WHERE
|
||||
FRIEND_ID = #friendId#
|
||||
AND USER_ID = #userId#
|
||||
AND SENDER_KEY = #senderKey#
|
||||
|
||||
</update>
|
||||
|
||||
<update id="kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel" parameterClass="kakaoVO">
|
||||
|
||||
UPDATE MJ_KAKAO_FRIENDS_TEMPLATE
|
||||
SET IMAGE_FILE_NAME = '',
|
||||
IMAGE_URL = '',
|
||||
IMAGE_TYPE = '',
|
||||
IMAGE_TITLE = '',
|
||||
IMAGE_LINK = '',
|
||||
LAST_UPDT_PNTTM = NOW(),
|
||||
LAST_UPDUSR_ID = #lastUpdusrId#
|
||||
WHERE
|
||||
FRIEND_ID = #friendId#
|
||||
AND USER_ID = #userId#
|
||||
|
||||
</update>
|
||||
|
||||
|
||||
</sqlMap>
|
||||
@ -2105,6 +2105,7 @@
|
||||
, CUSTOM_TEXT_PRICE AS customTextPrice
|
||||
, POINT_PER AS pointPer
|
||||
, KAKAO_AT_PRICE AS kakaoAtPrice
|
||||
, KAKAO_FT_PRICE AS kakaoFtPrice
|
||||
, FAX_PRICE AS faxPrice
|
||||
FROM MJ_MBER_SETTING
|
||||
|
||||
|
||||
@ -1217,6 +1217,7 @@
|
||||
, PICTURE2_PRICE = #picture2Price#
|
||||
, PICTURE3_PRICE = #picture3Price#
|
||||
, KAKAO_AT_PRICE = #kakaoAtPrice#
|
||||
, KAKAO_FT_PRICE = #kakaoFtPrice#
|
||||
, KAKAO_FT_IMG_PRICE = #kakaoFtImgPrice#
|
||||
, KAKAO_FT_WIDE_IMG_PRICE = #kakaoFtWideImgPrice#
|
||||
WHERE MBER_ID = #mberId#
|
||||
|
||||
@ -183,6 +183,7 @@
|
||||
<pattern>*/web/pop/*</pattern>
|
||||
<pattern>/web/mjon/kakao/template/selectKakaoAlimtalkTemplateListPopupAjax.do</pattern>
|
||||
<pattern>/web/mjon/kakao/alimtalk/selectKakaoAlimtalkTemplateDataTestPopup.do</pattern>
|
||||
<pattern>/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do</pattern>
|
||||
<pattern>/web/mjon/fax/faxSendDetailPopup.do</pattern>
|
||||
</decorator>
|
||||
|
||||
|
||||
@ -5289,7 +5289,7 @@ function fnInputSmsTxt(){
|
||||
<tr>
|
||||
<th>구분</th>
|
||||
<th>알림톡(<fmt:formatNumber value="${sysJoinSetVO.kakaoAtPrice}" pattern="###.#" />원)</th>
|
||||
<th>친구톡(준비중)</th>
|
||||
<th>친구톡(<fmt:formatNumber value="${sysJoinSetVO.kakaoFtPrice}" pattern="###.#" />원)</th>
|
||||
<th>팩스(<fmt:formatNumber value="${sysJoinSetVO.faxPrice}" pattern="###.#" />원)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -5297,7 +5297,7 @@ function fnInputSmsTxt(){
|
||||
<tr>
|
||||
<td>문자온 원가</td>
|
||||
<td><c:out value="${kakaoAtCost}"/></td>
|
||||
<td>준비중</td>
|
||||
<td><c:out value="${kakaoFtCost}"/></td>
|
||||
<td><c:out value="${faxCost}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -5306,7 +5306,7 @@ function fnInputSmsTxt(){
|
||||
<fmt:formatNumber value='${kakaoAtPrice}' pattern='###.#' />
|
||||
</td>
|
||||
<td>
|
||||
준비중
|
||||
<fmt:formatNumber value='${kakaoFtPrice}' pattern='###.#' />
|
||||
</td>
|
||||
<td>
|
||||
<fmt:formatNumber value='${faxPrice}' pattern='###.#' />
|
||||
@ -5315,7 +5315,7 @@ function fnInputSmsTxt(){
|
||||
<tr>
|
||||
<td>마진률</td>
|
||||
<td><fmt:formatNumber value="${kakaoAtMargin}" pattern=".0" />%</td>
|
||||
<td>준비중</td>
|
||||
<td><fmt:formatNumber value="${kakaoFtMargin}" pattern=".0" />%</td>
|
||||
<td><fmt:formatNumber value="${faxMargin}" pattern=".0" />%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@ -5772,6 +5772,10 @@ function fnInputSmsTxt(){
|
||||
<th>알림톡 금액</th>
|
||||
<td><input type="text" name="kakaoAtPrice" id="kakaoAtPrice" value="<c:out value='${kakaoAtPrice}'/>"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>친구톡 금액</th>
|
||||
<td><input type="text" name="kakaoFtPrice" id="kakaoFtPrice" value="<c:out value='${kakaoFtPrice}'/>"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="button_box">
|
||||
|
||||
@ -83,13 +83,27 @@ function fnSetCalMonth(val) {
|
||||
}
|
||||
|
||||
//선택 채널 알림톡 템플릿 리스트 불러오기
|
||||
function fnTemplateListPop(senderKey, userId){
|
||||
function fnAtTemplateListPop(yellowId, senderKey, userId){
|
||||
|
||||
document.popupForm.senderKey.value = senderKey;
|
||||
document.popupForm.userId.value = userId;
|
||||
document.popupForm.yellowId.value = yellowId;
|
||||
|
||||
window.open("about:blank", 'listPopup', 'width=930, height=860, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes');
|
||||
document.popupForm.action = "<c:url value='/uss/ion/kakaoat/KakaoATChannelIDTemplateListPopupAjax.do'/>";
|
||||
document.popupForm.target = "listPopup";
|
||||
document.popupForm.submit();
|
||||
|
||||
}
|
||||
|
||||
//선택 채널 친구톡 템플릿 리스트 불러오기
|
||||
function fnFtTemplateListPop(senderKey, userId){
|
||||
|
||||
document.popupForm.senderKey.value = senderKey;
|
||||
document.popupForm.userId.value = userId;
|
||||
|
||||
window.open("about:blank", 'listPopup', 'width=930, height=860, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes');
|
||||
document.popupForm.action = "<c:url value='/uss/ion/kakaoat/KakaoATChannelIDTemplateListPopupAjax.do'/>";
|
||||
document.popupForm.action = "<c:url value='/uss/ion/kakaoft/KakaoFTChannelIDTemplateListPopupAjax.do'/>";
|
||||
document.popupForm.target = "listPopup";
|
||||
document.popupForm.submit();
|
||||
|
||||
@ -118,6 +132,7 @@ function fnSelectMber(mberId) {
|
||||
<input type="hidden" name="mberId"/>
|
||||
<input type="hidden" id="senderKey" name="senderKey" value=""/>
|
||||
<input type="hidden" name="userId" value=""/>
|
||||
<input type="hidden" name="yellowId" value=""/>
|
||||
</form>
|
||||
|
||||
|
||||
@ -193,6 +208,7 @@ function fnSelectMber(mberId) {
|
||||
<col style="width: 19%">
|
||||
<col style="width: 24%">
|
||||
<col style="width: 10%">
|
||||
<col style="width: 10%">
|
||||
<col style="width: 11%">
|
||||
<col style="width: 11%">
|
||||
<col style="width: 10%">
|
||||
@ -204,6 +220,7 @@ function fnSelectMber(mberId) {
|
||||
<th>채널ID<input type="button" class="sort sortBtn" id="sort_yellowId"></th>
|
||||
<th>채널명<input type="button" class="sort sortBtn" id="sort_yellowId"></th>
|
||||
<th>등록상태</th>
|
||||
<th>템플릿</th>
|
||||
<th>채널생성일</th>
|
||||
<th>채널등록일<input type="button" class="sort sortBtn" id="sort_lastUpdtPnttm"></th>
|
||||
<th>삭제여부<input type="button" class="sort sortBtn" id="sort_deleteYn"></th>
|
||||
@ -226,7 +243,7 @@ function fnSelectMber(mberId) {
|
||||
<td onClick="fnTemplateListPop('<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" style="cursor:pointer;">
|
||||
<c:out value="${result.uuid}"/>
|
||||
</td>
|
||||
<td onClick="fnTemplateListPop('<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" style="cursor:pointer;">
|
||||
<td>
|
||||
<c:out value="${result.name}"/>
|
||||
</td>
|
||||
<td>
|
||||
@ -250,6 +267,10 @@ function fnSelectMber(mberId) {
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
<td>
|
||||
<input type="button" class="btnType1" onClick="fnAtTemplateListPop('<c:out value="${result.uuid}"/>','<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" value="AT"/>
|
||||
<input type="button" class="btnType1" onClick="fnFtTemplateListPop('<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" value="FT"/>
|
||||
</td>
|
||||
<td>
|
||||
<fmt:parseDate value="${result.createdAt}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||
<fmt:formatDate value="${dateValue}" pattern="yyyy-MM-dd"/>
|
||||
@ -342,14 +363,14 @@ function fnSelectMber(mberId) {
|
||||
</tr>
|
||||
</c:forEach>
|
||||
<c:if test="${empty resultChannelList}">
|
||||
<tr><td colspan="14"><spring:message code="common.nodata.msg" /></td></tr>
|
||||
<tr><td colspan="9"><spring:message code="common.nodata.msg" /></td></tr>
|
||||
</c:if>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- <div class="btnWrap">
|
||||
<input type="button" class="btnType2" onclick="javascript:fnSttusYAll(); return false;" value="일괄승인">
|
||||
</div> -->
|
||||
<div class="btnWrap">
|
||||
<!-- <input type="button" class="btnType2" onclick="javascript:fnSttusYAll(); return false;" value="일괄승인"> -->
|
||||
</div>
|
||||
<!-- 페이지 네비게이션 시작 -->
|
||||
<c:if test="${!empty resultChannelList}">
|
||||
<div class="page">
|
||||
|
||||
@ -358,14 +358,17 @@ function fnTemplateDetail(templateCode){
|
||||
<c:out value="${mjonKakaoATDetailVO.yellowId}"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><span class="reqArea">템플릿명</span></th>
|
||||
<td colspan="3">
|
||||
<div class="btnWrap">
|
||||
<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<c:if test="${not empty mjonKakaoATDetailVO.msgNoticetalkTmpKey}">
|
||||
<!-- 알림톡 템플릿 상세 팝업 호출 -->
|
||||
<tr>
|
||||
<th><span class="reqArea">템플릿명</span></th>
|
||||
<td colspan="3">
|
||||
<div class="btnWrap">
|
||||
<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</c:if>
|
||||
<%-- <tr>
|
||||
<th><span class="reqArea">발신번호</span></th>
|
||||
<td colspan="3">
|
||||
|
||||
@ -358,14 +358,17 @@ function fnTemplateDetail(templateCode){
|
||||
<c:out value="${mjonKakaoATDetailVO.yellowId}"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><span class="reqArea">템플릿명</span></th>
|
||||
<td colspan="3">
|
||||
<div class="btnWrap">
|
||||
<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<c:if test="${not empty mjonKakaoATDetailVO.msgNoticetalkTmpKey}">
|
||||
<!-- 알림톡 템플릿 상세 팝업 호출 -->
|
||||
<tr>
|
||||
<th><span class="reqArea">템플릿명</span></th>
|
||||
<td colspan="3">
|
||||
<div class="btnWrap">
|
||||
<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</c:if>
|
||||
<%-- <tr>
|
||||
<th><span class="reqArea">발신번호</span></th>
|
||||
<td colspan="3">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,190 @@
|
||||
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<% pageContext.setAttribute("newLineChar", "\r\n"); %>
|
||||
<% pageContext.setAttribute("newLineChar2", "\n"); %>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<title>친구톡 템플릿 목록</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap"
|
||||
rel="stylesheet">
|
||||
<link rel="stylesheet" href="/publish/css/reset.css">
|
||||
<link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css">
|
||||
<link rel="stylesheet" href="/publish/css/common.css">
|
||||
<link rel="stylesheet" href="/publish/css/button.css">
|
||||
<link rel="stylesheet" href="/publish/css/content.css?date=202301160001">
|
||||
<link rel="stylesheet" href="/publish/css/mem.css">
|
||||
<link rel="stylesheet" href="/publish/css/font.css">
|
||||
<link rel="stylesheet" href="/publish/css/popupLayer.css">
|
||||
|
||||
<script src="/publish/js/jquery-3.5.0.js"></script>
|
||||
<script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
|
||||
<script src="/publish/js/common.js"></script>
|
||||
<script src="/publish/js/content.js?date=202211070003"></script>
|
||||
<script src="/publish/js/popupLayer.js"></script>
|
||||
|
||||
<script>
|
||||
|
||||
function linkPage(page){
|
||||
|
||||
form = document.listForm;
|
||||
|
||||
form.pageIndex.value=page;
|
||||
form.action="<c:url value='/uss/ion/kakaoft/KakaoFTChannelIDTemplateListPopupAjax.do'/>";
|
||||
form.submit();
|
||||
|
||||
}
|
||||
|
||||
function fnSearch(){
|
||||
|
||||
var templateStatus = $("select[name=selectTemplateStatus]").val();
|
||||
var searchKeyword = $("input[name=inputSearchKeyword]").val();
|
||||
|
||||
if(searchKeyword != ''){
|
||||
|
||||
if(searchKeyword.length < 2 || searchKeyword.length > 50){
|
||||
|
||||
alert("검색어는 최소 2자 이상 50자 이내로 입력해야 합니다.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var form = document.listForm;
|
||||
|
||||
form.searchKeyword.value = searchKeyword;
|
||||
form.templateStatus.value = templateStatus;
|
||||
|
||||
linkPage(1);
|
||||
|
||||
}
|
||||
|
||||
function fnTemplateDetail(friendId){
|
||||
|
||||
var form = document.templateForm;
|
||||
|
||||
form.templateCode.value = friendId;
|
||||
|
||||
window.open("about:blank", 'popupTemplateDetail', 'width=1240, height=1080, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no');
|
||||
form.action = "<c:url value='/uss/ion/kakaoft/KakaoFTChannelIDTemplateDetailPopupAjax.do'/>";
|
||||
form.target = "popupTemplateDetail";
|
||||
form.submit();
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="loading_layer">
|
||||
<div class="loading_container">
|
||||
<div class="bar"></div>
|
||||
<div class="text">Loading</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="top_content kakaotalkset_cont current pay_tab_wrap">
|
||||
<form id="templateForm" name="templateForm" method="post">
|
||||
<input type="hidden" name="SenderKey" value="<c:out value="${kakaoVO.senderKey }"/>">
|
||||
<input type="hidden" id="templateCode" name="templateCode" value="">
|
||||
<input type="hidden" id="tmpUserId" name="userId" value="<c:out value="${kakaoVO.userId}"/>">
|
||||
</form>
|
||||
<form id="listForm" name="listForm" method="post">
|
||||
<input type="hidden" name="SenderKey" value="<c:out value="${kakaoVO.senderKey }"/>">
|
||||
<input type="hidden" name="yellowId" value="<c:out value="${kakaoVO.yellowId }"/>">
|
||||
<input type="hidden" id="page" name="page" value="">
|
||||
<input type="hidden" id="pageIndex" name="pageIndex" value="">
|
||||
<input type="hidden" id="searchKeyword" name="searchKeyword" value="">
|
||||
<input type="hidden" id="templateStatus" name="templateStatus" value="">
|
||||
<input type="hidden" id="templateCode" name="templateCode" value="">
|
||||
<input type="hidden" id="listUserId" name="userId" value="<c:out value="${kakaoVO.userId}"/>">
|
||||
</form>
|
||||
<div class="info_popup ad_layer template_choice_popup adpopup01" style="width:930px; margin-left:45px;">
|
||||
<div class="top_content kakaotalkset_cont current pay_tab_wrap" style="width:930px;">
|
||||
<div class="popup_heading">
|
||||
<p>친구톡 템플릿 선택</p>
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
<div class="popup_search_wrap type2 grayborder grayfill">
|
||||
<input type="text" name="inputSearchKeyword" id="inputSearchKeyword" placeholder="템플릿명을 입력해주세요." class="inputType template_name" value="<c:out value='${kakaoVO.keyword}'/>">
|
||||
<button type="button" class="popup_button_type bluefill" onclick="fnSearch(); return false;">검색</button>
|
||||
</div>
|
||||
<div class="template_list">
|
||||
<ul class="kakao_template_list thumbnail_list">
|
||||
<c:choose>
|
||||
<c:when test="${not empty kakaoTemplateInfoList}">
|
||||
<c:forEach var="templatInfoList" items="${kakaoTemplateInfoList}" varStatus="status">
|
||||
<li>
|
||||
<div class="kakao_template_wrap">
|
||||
<div class="template_cont">
|
||||
<div class="title">
|
||||
<div class="check">
|
||||
</div>
|
||||
<p title="친구톡 템플릿 내용" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;">
|
||||
<c:if test="${templatInfoList.adFlag eq 'Y'}">(광고)</c:if>
|
||||
<c:out value="${fn:replace(templatInfoList.yellowId, '@', '')}"/>
|
||||
</p>
|
||||
</div>
|
||||
<div class="allimtalk_content" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;">
|
||||
<!-- 템플릿에 이미지가 있는경우 이미지 표시 -->
|
||||
<c:if test="${not empty templatInfoList.imageType}">
|
||||
<div class="img_box">
|
||||
<img src="<c:url value='${templatInfoList.templateImageUrl}'/>" alt="">
|
||||
</div>
|
||||
</c:if>
|
||||
|
||||
<p class="template_text"><c:out value="${fn:replace(fn:replace(templatInfoList.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/></p>
|
||||
<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
|
||||
<c:forEach var="templatInfoButtonList" items="${templatInfoList.buttonVOList}" varStatus="status">
|
||||
<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
<c:if test="${templatInfoList.adFlag eq 'Y'}">
|
||||
<p class="cf_text">수신거부 | 홈 > 채널차단</p>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="kakao_template_info">
|
||||
<dl>
|
||||
<dt>템플릿명</dt>
|
||||
<dd>
|
||||
<c:out value="${templatInfoList.templateName}"/>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>등록일</dt>
|
||||
<dd><c:out value="${templatInfoList.frstRegistPnttm}"/>
|
||||
<%-- <div class="btn_wrap">
|
||||
<button type="button" class="btn_template_edit" title="템플릿 수정" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;"><img src="/publish/images/content/btn_template_edit.png" alt=""></button>
|
||||
<button type="button" class="btn_template_delete" title="템플릿 삭제" onclick="javascript:fnTemplateDelBtn('<c:out value="${templatInfoList.friendId}"/>'); return false;"><img src="/publish/images/content/btn_template_delete.png" alt=""></button>
|
||||
</div> --%>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</li>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<li class="template_none">등록된 템플릿이 없습니다.</li>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- pagination -->
|
||||
<c:if test="${not empty kakaoTemplateInfoList}">
|
||||
<ul class="pagination">
|
||||
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
|
||||
</ul><!-- //pageWrap -->
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,4 +1,6 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
@ -88,5 +90,8 @@ function fnLinkPageTab(tabInfo){
|
||||
<li id="tabStep" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabStep');">사용안내</button></li>
|
||||
<li id="tabProfile" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabProfile');">채널ID 등록/관리</button></li>
|
||||
<li id="tabTemplate" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabTemplate');">알림톡 템플릿 등록/관리</button></li>
|
||||
<!-- <li id="tabSubFt" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabSubFt');">친구톡 템플릿 등록/관리</button></li> -->
|
||||
<c:if test="${loginVO.id eq 'rosewiper'}">
|
||||
<li id="tabSubFt" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabSubFt');">친구톡 템플릿 등록/관리</button></li>
|
||||
</c:if>
|
||||
|
||||
</ul>
|
||||
@ -1,4 +1,6 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
@ -27,6 +29,11 @@ function initMenuTopTab(){
|
||||
}else if(menuTopTab == 'tabAlim'){
|
||||
$(".topTab").removeClass("active");
|
||||
$("#tabAt").addClass("active");
|
||||
|
||||
}else if(menuTopTab == 'tabFriend'){
|
||||
$(".topTab").removeClass("active");
|
||||
$("#tabFt").addClass("active");
|
||||
|
||||
}else if(menuTopTab == 'tabIntro'){
|
||||
$(".topTab").removeClass("active");
|
||||
$("#tabIntro").addClass("active");
|
||||
@ -51,16 +58,18 @@ function fnLinkPageTopTab(tabInfo){
|
||||
|
||||
}else if(tabInfo == 'tabFriend'){
|
||||
|
||||
alert("친구톡 메뉴는 현재 개발이 진행 중입니다.");
|
||||
return false
|
||||
url = "<c:url value='/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do'/>";
|
||||
|
||||
}else if(tabInfo == 'tabAlimtalkIntrd'){
|
||||
|
||||
url = "<c:url value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>";
|
||||
|
||||
}
|
||||
|
||||
form.action =url;
|
||||
form.submit();
|
||||
//form.action =url;
|
||||
//form.submit();
|
||||
//메뉴 선택시 폼 데이터로 인한 오류 발생하여 location으로 변경 - 20240117 우영두
|
||||
location.href=url;
|
||||
|
||||
}
|
||||
|
||||
@ -133,6 +142,11 @@ function cntntBtnInfo(stepInfo){
|
||||
|
||||
<ul class="tabType4">
|
||||
<li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li>
|
||||
<c:if test="${fn:contains(pageContext.request.requestURL , 'localhost')
|
||||
|| fn:contains(pageContext.request.requestURL , '192.168.0.33')
|
||||
|| fn:contains(pageContext.request.requestURL , '119.193.215.98')}">
|
||||
<li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
|
||||
</c:if>
|
||||
<li id="tabConf" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabConf');">카카오톡 설정</button></li>
|
||||
<li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlimtalkIntrd');">알림톡 소개</button></li>
|
||||
</ul>
|
||||
@ -0,0 +1,122 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
|
||||
|
||||
<div class="cnt_character">
|
||||
<div class="box_character">
|
||||
<a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
|
||||
</div>
|
||||
</div>
|
||||
@ -135,7 +135,7 @@
|
||||
<!-- 텍스트 미리보기 -->
|
||||
<div class="text_preview">
|
||||
<div class="allimtalk_title">
|
||||
<img src="/publish/images/content/icon_allimtalk.png" alt="">친구톡 수정
|
||||
<img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착
|
||||
</div>
|
||||
<div class="allimtalk_content" id="alimtalkTemplate">
|
||||
<!-- <p class="emphasis_side_text">템플릿을 선택해 주세요</p> -->
|
||||
@ -196,10 +196,10 @@
|
||||
<!-- 텍스트 미리보기 -->
|
||||
|
||||
<!-- //텍스트 미리보기 -->
|
||||
<div class="template_info_wrap">
|
||||
<!-- <div class="template_info_wrap">
|
||||
<div class="template_byte">
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p>
|
||||
</div>
|
||||
|
||||
@ -1188,11 +1188,11 @@ function checkNumber(event) {
|
||||
<!-- 문자발송 성공 레이어팝업 -->
|
||||
<div class="popup-com pop_msg_success">
|
||||
<div class="popup_heading">
|
||||
<p>알람톡 전송 결과</p>
|
||||
<p>알림톡 전송 결과</p>
|
||||
<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
<div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div>
|
||||
<div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>알림톡이 발송 되었습니다.</div>
|
||||
</div>
|
||||
<div class="popup_btn">
|
||||
<button type="button" onclick="msgResultLink(); return false;">알림톡 발송결과 바로가기</button>
|
||||
@ -1249,7 +1249,7 @@ function checkNumber(event) {
|
||||
<tr>
|
||||
<th>채널ID</th>
|
||||
<td>
|
||||
<label for="" class="채널ID 선택"></label>
|
||||
<label for="selectKakaoProfileList" class="채널ID 선택"></label>
|
||||
<select class="select_gray_type" id="selectKakaoProfileList" name="selectKakaoProfileList">
|
||||
<option value="">채널ID 선택</option>
|
||||
<c:forEach var="kakaoProfileInfo" items="${kakaoProfileList}" varStatus="status">
|
||||
@ -1285,7 +1285,7 @@ function checkNumber(event) {
|
||||
<td class="putText">
|
||||
<div class="clearfix receipt_num receiver_wrap01">
|
||||
<div class="receipt_num_top">
|
||||
<label for="" class="label">받는 번호입력</label>
|
||||
<label for="callTo" class="label">받는 번호입력</label>
|
||||
<input type="text" id="callTo" name="callTo" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');" placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;">
|
||||
<button type="button" class="btnType btnType6 addCallToF">번호추가</button>
|
||||
</br>
|
||||
@ -1301,7 +1301,7 @@ function checkNumber(event) {
|
||||
<div class="listType list01" >
|
||||
<div class="list_table list_head">
|
||||
<div class="cb_wrap">
|
||||
<label for="" class="label"></label>
|
||||
<label for="select_all" class="label"></label>
|
||||
<input type="checkbox" id="select_all">
|
||||
</div>
|
||||
<div class="list_table_num">
|
||||
@ -1416,7 +1416,7 @@ function checkNumber(event) {
|
||||
<tr>
|
||||
<th>발신번호</th>
|
||||
<td class="put_num">
|
||||
<label for="callFrom" class="label"></label>
|
||||
<label for="callFromList" class="label"></label>
|
||||
<select id="callFromList" name="callFromList" class="sel_number">
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultPhonList}">
|
||||
@ -1522,7 +1522,7 @@ function checkNumber(event) {
|
||||
<div class="calendar_wrap">
|
||||
<input type="text" class="startDate2 inp resDate calendar picker__input picker__input--active" title="검색 시작일" id="startDate2" name="startDate2" value="" data-datecontrol="true" readonly="" aria-haspopup="true" aria-expanded="true" aria-readonly="false" aria-owns="startDate2_root">
|
||||
</div>
|
||||
<label for="" class="label">시 선택</label>
|
||||
<label for="msgResHour" class="label">시 선택</label>
|
||||
<div class="selBox">
|
||||
<select class="selType1" id="msgResHour" name="msgResHour">
|
||||
<c:forEach var="hour" begin="0" end="23" step="1" varStatus="status">
|
||||
@ -1536,7 +1536,7 @@ function checkNumber(event) {
|
||||
</c:choose>
|
||||
</c:forEach>
|
||||
</select>
|
||||
<label for="" class="label">분 선택</label>
|
||||
<label for="msgResMin" class="label">분 선택</label>
|
||||
<select class="selType1" id="msgResMin" name="msgResMin">
|
||||
<c:forEach var="min" begin="0" end="55" step="5">
|
||||
<c:choose>
|
||||
@ -1553,9 +1553,9 @@ function checkNumber(event) {
|
||||
</div>
|
||||
<div class="rev_bottom">
|
||||
<input type="checkbox" id="inputDivideChk" name="inputDivideChk">
|
||||
<label for="">분할전송</label>
|
||||
<label for="inputDivideChk">분할전송</label>
|
||||
<input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/>
|
||||
<label for="divideCnt">건씩</label>
|
||||
<label for="frmDivideCnt">건씩</label>
|
||||
<select class="selType1" id="divideTime" name="divideTime">
|
||||
<option value="5">05분</option>
|
||||
<option value="10">10분</option>
|
||||
@ -1596,7 +1596,7 @@ function checkNumber(event) {
|
||||
<input type="hidden" name="searchCondition" id="searchCondition" value="0" />
|
||||
<div class="adr_pop_left">
|
||||
<div class="adr_left_search">
|
||||
<label for="searchKeyword" class="label">그룹명 검색</label>
|
||||
<label for="searchGrpKeyword" class="label">그룹명 검색</label>
|
||||
<input type="text" name="searchGrpKeyword" id="searchGrpKeyword" placeholder="그룹명 검색" onfocus="this.placeholder=''" onblur="this.placeholder='그룹명 검색'" class="inputLight">
|
||||
<button type="button" onClick="javascrit:fnAddrGrpSearch(); return false;"><img src="/publish/images/popup/search.png" alt="검색"></button>
|
||||
</div>
|
||||
@ -1737,7 +1737,7 @@ function checkNumber(event) {
|
||||
<button type="button" class="excel_btn" onclick="location.href='/download/msg/알림톡_엑셀주소록_등록양식.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button>
|
||||
</div>
|
||||
<div class="attachedFile">
|
||||
<label for="" class="attachedFile_label">첨부파일</label>
|
||||
<label for="excelNm01" class="attachedFile_label">첨부파일</label>
|
||||
<input type="text" id="excelNm01" value="" readonly>
|
||||
<input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExportAjax(event); return false;" style="display:none"/>
|
||||
<!-- <input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExport01(event); return false;" style="display:none"/> -->
|
||||
|
||||
@ -0,0 +1,221 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="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"%>
|
||||
<% pageContext.setAttribute("newLineChar", "\r\n"); %>
|
||||
<% pageContext.setAttribute("newLineChar2", "\n"); %>
|
||||
|
||||
<script>
|
||||
|
||||
function fn_testSendMsgData(){
|
||||
|
||||
var callNum = $("#callTo").val(); // 받는 전화번호
|
||||
var userMoney = $('#oriUserMoney').val(); // 사용자 금액
|
||||
var kakaoFtPrice = $('#kakaoFtPrice').val(); // 카카오전송 금액
|
||||
var resutlPrice = parseFloat(userMoney)-parseFloat(kakaoFtPrice); // 금액 확인
|
||||
|
||||
// 음수면 -1 값
|
||||
if(Math.sign(resutlPrice) < 0){
|
||||
alert("발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
$('#bizForm #callToList').val(callNum);
|
||||
|
||||
var data = new FormData(document.bizForm);
|
||||
$.ajax({
|
||||
type: "POST"
|
||||
, url: "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"
|
||||
, data: data
|
||||
, dataType: 'json'
|
||||
, async: true
|
||||
, processData: false
|
||||
, contentType: false
|
||||
, cache: false
|
||||
, success: function (returnData, status) {
|
||||
if(status == 'success'){
|
||||
if("loginFail" == returnData.result){
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}else if('fail' == returnData.result){
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
} else if(status == 'success'){
|
||||
alert("테스트 친구톡 전송이 완료 되었습니다.")
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
,beforeSend : function(xmlHttpRequest) {
|
||||
//로딩창 show
|
||||
$('.loading_layer').addClass('active');
|
||||
}
|
||||
,complete : function(xhr, textStatus) {
|
||||
//로딩창 hide
|
||||
$('.loading_layer').removeClass('active');
|
||||
}
|
||||
,error: function (e) {
|
||||
console.log("ERROR : ", e);
|
||||
alert("카카오 친구톡 전송에 실패하였습니다.");
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<form id="bizForm" name="bizForm" method="post">
|
||||
<input type="hidden" id="senderKey" name="senderKey" value="<c:out value='${kakaoVO.senderKey}'/>"> <!-- 카카오 보내는 사람 Key -->
|
||||
<input type="hidden" id="templateContent" name="templateContent" value="<c:out value='${kakaoVO.templateContent }'/>"> <!-- 카카오 전송 templat내용 -->
|
||||
<input type="hidden" id="callToList" name="callToList" value=""> <!-- 카카오 전송 전화번호 -->
|
||||
<input type="hidden" id="txtReplYn" name="txtReplYn" value="N"> <!-- 치환문자 여부 - -->
|
||||
|
||||
|
||||
<input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N"> <!-- 대체문자 전송여부 -->
|
||||
<input type="hidden" id="reserveYn" name="reserveYn" value="N"> <!-- 예약문자 여부 -->
|
||||
<input type="hidden" id="divideChk" name="divideChk" value="N"> <!--분할발성 체크 여부-->
|
||||
<input type="hidden" id="reqDate" name="reqDate" value=""> <!--전송일자-->
|
||||
|
||||
<input type="hidden" id="bizJsonYn" name="bizJsonYn" value="<c:out value='${kakaoVO.bizJsonYn}' />"> <!-- JSON 생성 여부 -->
|
||||
|
||||
<input type="hidden" id="imageType" name="imageType" value="<c:out value='${kakaoVO.imageType}'/>"/> <!-- 이미지 종류 -->
|
||||
<input type="hidden" id="imageFileName" name="imageFileName" value="<c:out value='${kakaoVO.imageFileName}'/>"> <!-- 이미지 파일 이름 -->
|
||||
<input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${kakaoVO.templateImageUrl}'/>"> <!-- 이미지 경로 -->
|
||||
<input type="hidden" id="imgTitle" name="imgTitle" value="<c:out value='${kakaoVO.imgTitle}'/>"> <!-- 이미지 타이틀 -->
|
||||
<input type="hidden" id="imgLink" name="imgLink" value="<c:out value='${kakaoVO.imgLink}'/>"> <!-- 이미지 링크정보 -->
|
||||
<input type="hidden" id="adFlag" name="adFlag" value="<c:out value='${kakaoVO.adFlag}'/>"/> <!-- 광고여부 -->
|
||||
|
||||
<input type="hidden" id="spamStatus" name="spamStatus" value="N"/>
|
||||
<input type="hidden" id="atSmishingYn" name="atSmishingYn" value="N"/>
|
||||
|
||||
<input type="hidden" id="kakaoFtPrice" value="<c:out value='${kakaoFtPrice}' />">
|
||||
<input type="hidden" id="eachPrice" name="eachPrice" value="<c:out value='${kakaoFtPrice}' />"/>
|
||||
<input type="hidden" id="totPrice" name="totalPrice" value="<c:out value='${kakaoFtPrice}' />"/>
|
||||
<input type="hidden" id="varValList" name="varValList" value="<c:out value='${kakaoVO.varValList}' />"/>
|
||||
<!-- 버튼 정보 처리 -->
|
||||
<c:forEach var="buttonList" items="${kakaoVO.buttonVOList}" varStatus="status">
|
||||
|
||||
<c:if test="${buttonList.linkType eq 'DS'}">
|
||||
<!-- 배송조회 버튼 -->
|
||||
<input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/>
|
||||
<input type="hidden" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
|
||||
</c:if>
|
||||
|
||||
<c:if test="${buttonList.linkType eq 'WL'}">
|
||||
<!-- 웹링크 버튼 -->
|
||||
<input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/>
|
||||
<input type="hidden" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
|
||||
<input type="hidden" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>">
|
||||
<input type="hidden" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>">
|
||||
</c:if>
|
||||
|
||||
<c:if test="${buttonList.linkType eq 'AL'}">
|
||||
<!-- 앱링크 버튼 -->
|
||||
<input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/>
|
||||
<input type="hidden" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
|
||||
<input type="hidden" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>">
|
||||
<input type="hidden" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>">
|
||||
</c:if>
|
||||
|
||||
<c:if test="${buttonList.linkType eq 'BK'}">
|
||||
<!-- 봇키워드 -->
|
||||
<input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/>
|
||||
<input type="hidden" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
|
||||
</c:if>
|
||||
|
||||
<c:if test="${buttonList.linkType eq 'MD'}">
|
||||
<!-- 메시지 전달 -->
|
||||
<input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" />
|
||||
<input type="hidden" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
|
||||
</c:if>
|
||||
|
||||
<c:if test="${buttonList.linkType eq 'BC'}">
|
||||
<!-- 상담톡 전환 -->
|
||||
<input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" />
|
||||
<input type="hidden" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
|
||||
</c:if>
|
||||
|
||||
<c:if test="${buttonList.linkType eq 'BT'}">
|
||||
<!-- 챗봇전환 -->
|
||||
<input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" />
|
||||
<input type="hidden" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
|
||||
</form>
|
||||
|
||||
<!-- 유저 보유잔액 -->
|
||||
<input type="hidden" id="oriUserMoney" value="<c:out value='${userMoney}' />">
|
||||
|
||||
<div class="test_sendpop kakao_rev_popup" style="width: 770px;">
|
||||
<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 kakao_wrap">
|
||||
<div class="number">
|
||||
<dl>
|
||||
<dt>수신번호</dt>
|
||||
<dd>
|
||||
<input type="text" id="callTo" name="callTo" maxlength="11" oninput="this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*)\./g, '$1');" placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'">
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="price">
|
||||
<dt>발송금액</dt>
|
||||
<dd><span>${kakaoFtPrice}</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">
|
||||
<div class="phoneIn">
|
||||
<p class="prev_p" id="prev_p_top">
|
||||
${kakaoVO.yellowId}
|
||||
</p>
|
||||
<!-- 텍스트 미리보기 -->
|
||||
<div class="text_preview">
|
||||
<div class="allimtalk_title">
|
||||
<img src="/publish/images/content/icon_allimtalk.png" alt="">친구톡
|
||||
</div>
|
||||
<div class="allimtalk_content" id="alimtalkTemplate">
|
||||
<!-- <p class="emphasis_side_text">템플릿을 선택해 주세요</p> -->
|
||||
<c:if test="${kakaoVO.imageType eq 'I' || kakaoVO.imageType eq 'W'}">
|
||||
<div class="kakao_image">
|
||||
<img src="<c:url value='${kakaoVO.templateImageUrl}'/>" alt="">
|
||||
</div>
|
||||
</c:if>
|
||||
<!-- 알림톡 내용 표시 -->
|
||||
<p class="template_text">
|
||||
<c:out value="${fn:replace(fn:replace(kakaoVO.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
|
||||
</p>
|
||||
|
||||
<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
|
||||
<c:forEach var="templatInfoButtonList" items="${kakaoVO.buttonVOList}" varStatus="status">
|
||||
<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 텍스트 미리보기 -->
|
||||
|
||||
<!-- //텍스트 미리보기 -->
|
||||
<!-- <div class="template_info_wrap">
|
||||
<div class="template_byte">
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
File diff suppressed because it is too large
Load Diff
@ -19,12 +19,33 @@
|
||||
<div class="rev_pop_in">
|
||||
<div class="rev_pop_middle clearfix">
|
||||
<span><c:out value="${resultMsgDetail.reqDate }" /></span>
|
||||
<span class="msg_com msg_allimtalk">알림톡</span>
|
||||
<span class="msg_com msg_allimtalk">
|
||||
<c:choose>
|
||||
<c:when test="${msgType eq '8'}">
|
||||
알림톡
|
||||
</c:when>
|
||||
<c:when test="${msgType eq '9'}">
|
||||
친구톡
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</span>
|
||||
</div>
|
||||
<div class="rev_pop_txt">
|
||||
<div class="text_preview">
|
||||
<div class="allimtalk_title">
|
||||
<img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착
|
||||
<img src="/publish/images/content/icon_allimtalk.png" alt="">
|
||||
<c:choose>
|
||||
<c:when test="${msgType eq '8'}">
|
||||
알림톡 도착
|
||||
</c:when>
|
||||
<c:when test="${msgType eq '9'}">
|
||||
친구톡 도착
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
<div class="allimtalk_content">
|
||||
<!-- 강조 텍스트 -->
|
||||
|
||||
@ -27,7 +27,7 @@ $(document).ready(function(){
|
||||
//이전달 첫날/마지막날 조회
|
||||
if(date.getMonth()+1 == 1){
|
||||
lastfulstday = date.getFullYear()-1 + "/12" + "/01";
|
||||
lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
|
||||
lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+"";
|
||||
}else{
|
||||
lastfulstday = date.getFullYear() + "/" ;
|
||||
lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
|
||||
@ -946,7 +946,11 @@ function infoPop(pageUrl){
|
||||
<ul class="list_tab">
|
||||
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
||||
<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
|
||||
<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> -->
|
||||
<c:if test="${fn:contains(pageContext.request.requestURL , 'localhost')
|
||||
|| fn:contains(pageContext.request.requestURL , '192.168.0.33')
|
||||
|| fn:contains(pageContext.request.requestURL , '119.193.215.98')}">
|
||||
<li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
|
||||
</c:if>
|
||||
</ul><!--// tab button -->
|
||||
</div>
|
||||
<!-- 예약관리 > 전체 -->
|
||||
|
||||
@ -972,128 +972,8 @@ $(document).on('click', '.symbolButton, .changeWord', function (){
|
||||
<button type="button" class="btnType btnType7"
|
||||
onclick="miniPopup(this)">카카오 이모티콘</button>
|
||||
<div class="send_miniPop spc_character kakao_emoticon">
|
||||
<div class="cnt_character">
|
||||
<div class="box_character">
|
||||
<a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn_close"
|
||||
onclick="miniPopup(this)">닫기</button>
|
||||
<%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
|
||||
<button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="send_btnWrap">
|
||||
|
||||
@ -886,128 +886,8 @@ $(document).on('click', '.symbolButton, .changeWord', function (){
|
||||
<button type="button" class="btnType btnType7"
|
||||
onclick="miniPopup(this)">카카오 이모티콘</button>
|
||||
<div class="send_miniPop spc_character kakao_emoticon">
|
||||
<div class="cnt_character">
|
||||
<div class="box_character">
|
||||
<a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn_close"
|
||||
onclick="miniPopup(this)">닫기</button>
|
||||
<%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
|
||||
<button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="send_btnWrap">
|
||||
|
||||
@ -895,128 +895,8 @@ $(document).on('click', '.symbolButton, .changeWord', function (){
|
||||
<button type="button" class="btnType btnType7"
|
||||
onclick="miniPopup(this)">이모티콘</button>
|
||||
<div class="send_miniPop spc_character kakao_emoticon">
|
||||
<div class="cnt_character">
|
||||
<div class="box_character">
|
||||
<a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn_close"
|
||||
onclick="miniPopup(this)">닫기</button>
|
||||
<%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
|
||||
<button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="send_btnWrap">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -41,7 +41,7 @@ function selectTemplateListLoad(page){
|
||||
|
||||
//화면 로딩바 보여주기
|
||||
$('.loading_layer').addClass('active');
|
||||
$("#templateList").load("/web/mjon/kakao/template/selectKakaoFriendsTemplateListAjax.do", {"senderKey":selectAgentCode, "categoryCode" : selectTemplateSecondCatagory, "templateStatus" : selectTemplateStatus, "searchKeyword" : keyword, "page" : page, "yellowId" : yellowId, "formListType" : formListType} ,function(){
|
||||
$("#templateList").load("/web/mjon/kakao/template/selectKakaoFriendsTemplateListAjax.do", {"senderKey":selectAgentCode, "categoryCode" : selectTemplateSecondCatagory, "templateStatus" : selectTemplateStatus, "searchKeyword" : keyword, "pageIndex" : page, "yellowId" : yellowId, "formListType" : formListType} ,function(){
|
||||
|
||||
//썸네일 박스 스크롤 적용해주기
|
||||
$(".kakao_template_wrap").mCustomScrollbar({
|
||||
@ -297,15 +297,15 @@ function fnTemplateDelBtn(templateId){
|
||||
}
|
||||
|
||||
//알림톡 상세보기 화면 호출
|
||||
function fnTemplateDetail(templateCode){
|
||||
function fnTemplateDetail(friendId){
|
||||
|
||||
var form = document.templateForm;
|
||||
var selectAgentCode = $("select[name='selectAgentCode_select']").val(); // 선택 채널ID
|
||||
|
||||
form.senderKey.value = selectAgentCode;
|
||||
form.templateCode.value = templateCode;
|
||||
form.friendId.value = friendId;
|
||||
|
||||
form.action="/web/mjon/kakao/template/requestKakaoApiTemplateDetail.do";
|
||||
form.action="/web/mjon/kakao/template/selectKakaoFriendsTemplateDataDetail.do";
|
||||
form.submit();
|
||||
|
||||
}
|
||||
@ -359,7 +359,7 @@ function fnGoSampleTemplate(){
|
||||
<form id="templateForm" name="templateForm" method="post">
|
||||
|
||||
<input type="hidden" id="inputSenderKey" name="senderKey" value=""/>
|
||||
<input type="hidden" id="inputTemplateCode" name="templateCode" value=""/>
|
||||
<input type="hidden" id="inputFriendId" name="friendId" value=""/>
|
||||
<input type="hidden" id="arrTemplateCode" name="arrTemplateCode" value=""/>
|
||||
|
||||
</form>
|
||||
@ -426,7 +426,7 @@ function fnGoSampleTemplate(){
|
||||
</c:forEach>
|
||||
</select>
|
||||
<div class="search">
|
||||
<label for="id" class="label"></label>
|
||||
<label for="inputSearchKeyword" class="label"></label>
|
||||
<input type="text" class="search_input" id="inputSearchKeyword" name="inputSearchKeyword" value="<c:out value=""/>" placeholder="템플릿명을 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'">
|
||||
<button type="button" class="btnType btnType2" onclick="selectTemplateListLoad('1');">검색</button>
|
||||
</div>
|
||||
|
||||
@ -102,6 +102,14 @@ $(function(){
|
||||
</p>
|
||||
</div>
|
||||
<div class="allimtalk_content" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;">
|
||||
|
||||
<!-- 템플릿에 이미지가 있는경우 이미지 표시 -->
|
||||
<c:if test="${not empty templatInfoList.imageType}">
|
||||
<div class="img_box">
|
||||
<img src="<c:url value='${templatInfoList.templateImageUrl}'/>" alt="">
|
||||
</div>
|
||||
</c:if>
|
||||
|
||||
<p class="template_text"><c:out value="${fn:replace(fn:replace(templatInfoList.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/></p>
|
||||
<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
|
||||
<c:forEach var="templatInfoButtonList" items="${templatInfoList.buttonVOList}" varStatus="status">
|
||||
@ -114,9 +122,15 @@ $(function(){
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="kakao_template_info">
|
||||
<dl>
|
||||
<dt>템플릿명</dt>
|
||||
<dd>
|
||||
<c:out value="${templatInfoList.templateName}"/>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>등록일</dt>
|
||||
<dd><c:out value="${templatInfoList.lastUpdtPnttm}"/>
|
||||
<dd><c:out value="${templatInfoList.frstRegistPnttm}"/>
|
||||
<div class="btn_wrap">
|
||||
<button type="button" class="btn_template_edit" title="템플릿 수정" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;"><img src="/publish/images/content/btn_template_edit.png" alt=""></button>
|
||||
<button type="button" class="btn_template_delete" title="템플릿 삭제" onclick="javascript:fnTemplateDelBtn('<c:out value="${templatInfoList.friendId}"/>'); return false;"><img src="/publish/images/content/btn_template_delete.png" alt=""></button>
|
||||
@ -176,7 +190,7 @@ $(function(){
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
<td><c:out value="${templatInfoList.lastUpdtPnttm}"/></td>
|
||||
<td><c:out value="${templatInfoList.frstRegistPnttm}"/></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
|
||||
@ -0,0 +1,217 @@
|
||||
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<% pageContext.setAttribute("newLineChar", "\r\n"); %>
|
||||
<% pageContext.setAttribute("newLineChar2", "\n"); %>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>문자온 - 친구톡 템플릿 선택</title>
|
||||
|
||||
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap"
|
||||
rel="stylesheet">
|
||||
<link rel="stylesheet" href="/publish/css/reset.css">
|
||||
<link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css">
|
||||
<link rel="stylesheet" href="/publish/css/common.css">
|
||||
<link rel="stylesheet" href="/publish/css/button.css">
|
||||
<link rel="stylesheet" href="/publish/css/content.css?date=202301160001">
|
||||
<link rel="stylesheet" href="/publish/css/mem.css">
|
||||
<link rel="stylesheet" href="/publish/css/font.css">
|
||||
<link rel="stylesheet" href="/publish/css/popupLayer.css">
|
||||
|
||||
<script src="/publish/js/jquery-3.5.0.js"></script>
|
||||
<script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
|
||||
<script src="/publish/js/common.js"></script>
|
||||
<script src="/publish/js/content.js?date=202211070003"></script>
|
||||
<script src="/publish/js/popupLayer.js"></script>
|
||||
</head>
|
||||
|
||||
<script>
|
||||
|
||||
//리스트 체크 박스 선택 스크립트
|
||||
//체크박스 전체 선택 및 해제
|
||||
var allChkSts = false; //썸네일 타입 리스트 체크박스 상태
|
||||
var allChkListSts = false; //리스트 타입 리스트 체크박스 상태
|
||||
|
||||
$("#btnAllChk").click(function(){
|
||||
|
||||
if(!allChkSts){// 전체선택이 해제되어 있을 경우
|
||||
|
||||
$("input[name=inputTemplateId]").prop("checked", true);
|
||||
allChkSts = true;
|
||||
|
||||
$("input:checkbox[name='inputTemplateId']:checked").each(function(index){
|
||||
|
||||
var disabledChk = $(this).prop('disabled');
|
||||
if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
||||
|
||||
$(this).prop("checked", false);
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}else{
|
||||
|
||||
$("input[name=inputTemplateId]").prop("checked", false);
|
||||
allChkSts = false;
|
||||
|
||||
}
|
||||
|
||||
//리스트 타입 화면에 있는 체크박스 해제해 주기
|
||||
$("input[name=inputTemplateIdList]").prop("checked", false);
|
||||
$("input[name=allCheckList]").prop("checked", false); //리스트 전체 선택 체크박스 해제해주기
|
||||
|
||||
allChkListSts = false;
|
||||
});
|
||||
|
||||
|
||||
$("#allCheckList").click(function(){
|
||||
|
||||
if(!allChkListSts){// 전체선택이 해제되어 있을 경우
|
||||
|
||||
$("input[name=inputTemplateIdList]").prop("checked", true);
|
||||
allChkListSts = true;
|
||||
|
||||
$("input:checkbox[name='inputTemplateIdList']:checked").each(function(index){
|
||||
|
||||
var disabledChk = $(this).prop('disabled');
|
||||
if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
||||
|
||||
$(this).prop("checked", false);
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}else{
|
||||
|
||||
$("input[name=inputTemplateIdList]").prop("checked", false);
|
||||
allChkListSts = false;
|
||||
|
||||
}
|
||||
|
||||
//썸네일 리스트에 있는 체크박스를 해제해준다.
|
||||
$("input[name=inputTemplateId]").prop("checked", false);
|
||||
allChkSts = false;
|
||||
|
||||
|
||||
});
|
||||
|
||||
function selectTemplateListLoad(page){
|
||||
|
||||
var form = document.listForm;
|
||||
form.searchKeyword.value = $("#inputSearchKeyword").val();
|
||||
form.senderKey.value = $("select[name='selectAgentCode_select']").val();
|
||||
form.pageIndex.value = page;
|
||||
form.action = "/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do";
|
||||
form.submit();
|
||||
|
||||
}
|
||||
|
||||
function fnTemplateDetail(ftId){
|
||||
|
||||
opener.parent.myTemplateSelect(ftId);
|
||||
self.close();
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
<body>
|
||||
|
||||
<form id="listForm" name="listForm" method="post">
|
||||
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
|
||||
<input type="hidden" id="searchKeyword" name="searchKeyword" value=""/>
|
||||
<input type="hidden" id="senderKey" name="senderKey" value=""/>
|
||||
</form>
|
||||
<div class="info_popup ad_layer template_choice_popup adpopup01" style="width:930px;">
|
||||
<div class="popup_heading">
|
||||
<p>친구톡 템플릿 선택</p>
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
<div class="popup_search_wrap type2 grayborder grayfill">
|
||||
<select name="selectAgentCode_select" id="selectAgentCode_select" class="selType2">
|
||||
<option value="">채널ID 선택</option>
|
||||
<c:forEach var="kakaoProfileInfo" items="${resultProfileList}" varStatus="status">
|
||||
<option value="${kakaoProfileInfo.senderKey}" <c:if test="${searchVO.senderKey eq kakaoProfileInfo.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
<label for="searchKeyword" class="label"></label>
|
||||
<input type="text" class="search_input" id="inputSearchKeyword" name="inputSearchKeyword" value="<c:out value="${searchVO.searchKeyword}"/>" placeholder="템플릿명을 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'">
|
||||
<button type="button" class="btnType btnType2" onclick="selectTemplateListLoad('1');">검색</button>
|
||||
</div>
|
||||
<div class="template_list">
|
||||
<ul class="kakao_template_list thumbnail_list">
|
||||
<c:choose>
|
||||
<c:when test="${not empty kakaoTemplateInfoList}">
|
||||
<c:forEach var="templatInfoList" items="${kakaoTemplateInfoList}" varStatus="status">
|
||||
<li onClick="fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;">
|
||||
<div class="kakao_template_wrap">
|
||||
<div class="template_cont">
|
||||
<div class="title">
|
||||
<%-- <div class="check">
|
||||
<input type="checkbox" name="inputTemplateId" id="inputTemplateId" value="<c:out value='${templatInfoList.friendId}'/>">
|
||||
</div> --%>
|
||||
<p title="친구톡 템플릿 내용">
|
||||
<c:if test="${templatInfoList.adFlag eq 'Y'}">(광고)</c:if>
|
||||
<c:out value="${fn:replace(templatInfoList.yellowId, '@', '')}"/>
|
||||
</p>
|
||||
</div>
|
||||
<!-- 템플릿에 이미지가 있는경우 이미지 표시 -->
|
||||
<c:if test="${not empty templatInfoList.imageType}">
|
||||
<div class="img_box">
|
||||
<img src="<c:url value='${templatInfoList.templateImageUrl}'/>" alt="">
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="text_box">
|
||||
<p><c:out value="${fn:replace(fn:replace(templatInfoList.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/></p>
|
||||
<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
|
||||
<c:forEach var="templatInfoButtonList" items="${templatInfoList.buttonVOList}" varStatus="status">
|
||||
<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
<c:if test="${templatInfoList.adFlag eq 'Y'}">
|
||||
<p class="cf_text">수신거부 | 홈 > 채널차단</p>
|
||||
</c:if>
|
||||
</div>
|
||||
<%-- <div class="btn_wrap">
|
||||
<button type="button" class="btnType btnType3 btn_template_use" onClick="fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;">템플릿 사용하기</button>
|
||||
</div> --%>
|
||||
<div class="kakao_template_info">
|
||||
<dl>
|
||||
<dt>템플릿명</dt>
|
||||
<dd>
|
||||
<c:out value="${templatInfoList.templateName}"/>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>등록일</dt>
|
||||
<dd><c:out value="${templatInfoList.frstRegistPnttm}"/></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</li>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<li class="template_none">등록된 템플릿이 없습니다.</li>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- table 안 ul의 가운데 정렬을 위한 style 처리 -->
|
||||
<!-- pagination -->
|
||||
<ul class="pagination">
|
||||
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="selectTemplateListLoad" />
|
||||
</ul><!-- //pageWrap -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -211,6 +211,7 @@ function getTemplateImagUrl(){
|
||||
|
||||
$('.kakao_image').css("display", "block");
|
||||
$("#kakaoImg").attr("src", imgUrl);
|
||||
$("#imageFileName").val(fileName);
|
||||
|
||||
}else if(code == "2002"){//일반 이미지 가로 세로 크기 오류 발생
|
||||
|
||||
@ -319,6 +320,13 @@ function addTemplate(){
|
||||
|
||||
}
|
||||
|
||||
if(inputTemplateImageUrl == ''){
|
||||
|
||||
alert("이미지를 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -356,7 +364,7 @@ function addTemplate(){
|
||||
|
||||
var result = returnData.result;
|
||||
|
||||
if(result == "notLogin") {//차단 발신번호인 경우 등록 불가
|
||||
if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
|
||||
alert("로그인후 진행이 가능합니다.");
|
||||
}else if(returnData.result == "success") {
|
||||
alert("템플릿 저장이 완료되었습니다.");
|
||||
@ -413,7 +421,7 @@ function fnImageDel(){
|
||||
var code = returnData.code;
|
||||
var msg = returnData.msg;
|
||||
|
||||
if(result == "notLogin") {//차단 발신번호인 경우 등록 불가
|
||||
if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
|
||||
alert("로그인후 진행이 가능합니다.");
|
||||
}else if(returnData.result == "success") {
|
||||
|
||||
@ -427,6 +435,7 @@ function fnImageDel(){
|
||||
$("#templateImageUrl").val("");
|
||||
$('.kakao_image').css("display", "none");
|
||||
$("#kakaoImg").attr("src", "");
|
||||
$("#img_file_0").click(); //이미지첨부 안함 라이오 선택해주기
|
||||
return false;
|
||||
|
||||
}else{
|
||||
@ -565,7 +574,7 @@ $(document).on('click', '.symbolButton, .changeWord', function (){
|
||||
<!--// tab button -->
|
||||
</div>
|
||||
<form id="bizForm" name="bizForm" method="multipart/form-data">
|
||||
<input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf">
|
||||
<input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf">
|
||||
<input type="hidden" id="menuSubTab" name="menuSubTab" value="tabSubFt">
|
||||
<input type="hidden" id="inputSenderKey" name="senderKey" value=""/>
|
||||
<input type="hidden" id="yellowId" name="yellowId" value=""/>
|
||||
@ -576,7 +585,7 @@ $(document).on('click', '.symbolButton, .changeWord', function (){
|
||||
<input type="hidden" id="adFlag" name="adFlag" value="">
|
||||
<input type="hidden" id="templateImageUrl" name="templateImageUrl" value="">
|
||||
<input type="hidden" id="templateContent" name="templateContent" value="">
|
||||
|
||||
<input type="hidden" id="imageFileName" name="imageFileName" value=""/>
|
||||
|
||||
<div class="send_general friend_talk_wrap kakao_wrap">
|
||||
<div class="send_left">
|
||||
@ -602,7 +611,7 @@ $(document).on('click', '.symbolButton, .changeWord', function (){
|
||||
<th>템플릿명</th>
|
||||
<td>
|
||||
<input type="text" class="template_name" id="inputTemplateName" name="inputTemplateName" placeholder="템플릿 명을 입력해주세요" maxLength="100">
|
||||
<p class="template_name_cf">최대 100자, 템플릿 관리용</p>
|
||||
<p class="template_name_cf">최대 50자, 템플릿 관리용</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -656,9 +665,8 @@ $(document).on('click', '.symbolButton, .changeWord', function (){
|
||||
<tr>
|
||||
<th>광고포함 여부</th>
|
||||
<td>
|
||||
<input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" checked><label for="ad_Y">광고성 정보
|
||||
포함</label>
|
||||
<input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N"><label for="ad_N">포함 안함</label>
|
||||
<input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" checked><label for="ad_Y">광고성 정보 포함</label>
|
||||
<!-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N"><label for="ad_N">포함 안함</label> -->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -798,128 +806,8 @@ $(document).on('click', '.symbolButton, .changeWord', function (){
|
||||
<button type="button" class="btnType btnType7"
|
||||
onclick="miniPopup(this)">이모티콘</button>
|
||||
<div class="send_miniPop spc_character kakao_emoticon">
|
||||
<div class="cnt_character">
|
||||
<div class="box_character">
|
||||
<a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
|
||||
<a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn_close"
|
||||
onclick="miniPopup(this)">닫기</button>
|
||||
<%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
|
||||
<button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn_popup_wrap template_call_wrap">
|
||||
|
||||
@ -773,9 +773,6 @@ $(document).ready(function (){
|
||||
fnByteString(contents);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
});//문자 바이트수 계산하기 끝
|
||||
|
||||
|
||||
@ -1213,7 +1213,7 @@ function sendMsgAjax_advc(){
|
||||
removeEmptyValues(formData);
|
||||
|
||||
// 선택된 데이터 추가
|
||||
formData["mjonMsgTabulListVO"] = $selectedData;
|
||||
formData["mjonMsgSendVOList"] = $selectedData;
|
||||
|
||||
// JSON 데이터 확인
|
||||
console.log("최종 formData:", JSON.stringify(formData));
|
||||
|
||||
@ -21,7 +21,7 @@ $(document).ready(function(){
|
||||
//이전달 첫날/마지막날 조회
|
||||
if(date.getMonth()+1 == 1){
|
||||
lastfulstday = date.getFullYear()-1 + "/12" + "/01";
|
||||
lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
|
||||
lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+"";
|
||||
}else{
|
||||
lastfulstday = date.getFullYear() + "/" ;
|
||||
lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
|
||||
|
||||
@ -53,6 +53,7 @@ $(document).ready(function(){
|
||||
});
|
||||
|
||||
</script>
|
||||
<input type="button" id="tooltopClick" data-tooltip="rev_popup02" style="display:none;"/>
|
||||
<div class="list_info">
|
||||
<p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
||||
<div>
|
||||
|
||||
@ -25,7 +25,7 @@ $(document).ready(function(){
|
||||
//이전달 첫날/마지막날 조회
|
||||
if(date.getMonth()+1 == 1){
|
||||
lastfulstday = date.getFullYear()-1 + "/12" + "/01";
|
||||
lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
|
||||
lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+"";
|
||||
}else{
|
||||
lastfulstday = date.getFullYear() + "/" ;
|
||||
lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
|
||||
@ -394,6 +394,7 @@ function fnRevDetailPop02(msgGroupId){
|
||||
|
||||
// 전송건별
|
||||
$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
|
||||
|
||||
// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
|
||||
popupTab($('#atBtn'),'1');
|
||||
$('#tooltopClick').trigger('click');
|
||||
@ -683,7 +684,11 @@ function enterKey() {
|
||||
<ul class="list_tab">
|
||||
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
||||
<li class="tab"><button type="button" onclick="fnTabLoad('at',1); return false;">알림톡</button></li>
|
||||
<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft',2); return false;">친구톡</button></li> -->
|
||||
<c:if test="${fn:contains(pageContext.request.requestURL , 'localhost')
|
||||
|| fn:contains(pageContext.request.requestURL , '192.168.0.33')
|
||||
|| fn:contains(pageContext.request.requestURL , '119.193.215.98')}">
|
||||
<li class="tab"><button type="button" onclick="fnTabLoad('ft',2); return false;">친구톡</button></li>
|
||||
</c:if>
|
||||
<!-- <li class="tab"><button type="button" onclick="fnTabLoad('M',3); return false;">그림(MMS)</button></li> -->
|
||||
</ul><!--// tab button -->
|
||||
</div>
|
||||
|
||||
@ -25,7 +25,7 @@ $(document).ready(function(){
|
||||
//이전달 첫날/마지막날 조회
|
||||
if(date.getMonth()+1 == 1){
|
||||
lastfulstday = date.getFullYear()-1 + "/12" + "/01";
|
||||
lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
|
||||
lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+"";
|
||||
}else{
|
||||
lastfulstday = date.getFullYear() + "/" ;
|
||||
lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
|
||||
|
||||
153
src/main/webapp/js/kakao/ft/friendstalkExcel.js
Normal file
153
src/main/webapp/js/kakao/ft/friendstalkExcel.js
Normal file
@ -0,0 +1,153 @@
|
||||
/**
|
||||
*
|
||||
* @author : 우영두
|
||||
* @fileName : friendstalkExcel.js
|
||||
* @date : 2024.01.08
|
||||
* @description : 친구톡 excel 관련된 fuction .js
|
||||
* ===========================================================
|
||||
* DATE AUTHOR NOTE
|
||||
* ----------------------------------------------------------- *
|
||||
* 2024.01.08 우영두 최초 생성
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
//치환문자 없는 엑섹불러오기 버튼 클릭시 파일 첨부 실행
|
||||
$('.c1').click(function(){ // 엑셀파일 불러오기 선택 시
|
||||
|
||||
$("#excelFile").click();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
//엑셀 파일 불러오기
|
||||
function excelExport(event){
|
||||
|
||||
var data = new FormData(document.excelForm);
|
||||
data.append("file0", $('#excelFile').prop('files')[0]);
|
||||
|
||||
var fileValue = $("#excelFile").val().split("\\");
|
||||
var fileName = fileValue[fileValue.length-1];
|
||||
|
||||
var fileExt = fileName.split('.').pop().toLowerCase();
|
||||
|
||||
if(fileExt.length > 0){
|
||||
if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) {
|
||||
|
||||
alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
var url = "";
|
||||
|
||||
if(fileExt == "xls" || fileExt == "xlsx"){
|
||||
|
||||
url = "/web/mjon/msgdata/sendExelFilePhoneNumAjax.do";
|
||||
|
||||
}else if(fileExt = "txt"){
|
||||
|
||||
url = "/web/mjon/msgdata/sendTxtFilePhoneNumAjax.do";
|
||||
|
||||
}else{
|
||||
|
||||
alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
//엑셀 데이터 변수에 자료가 있으면 지워준다.
|
||||
if(excelAddr.length > 0){
|
||||
|
||||
excelAddr = [];
|
||||
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
enctype: 'multipart/form-data',
|
||||
url: url,
|
||||
data: data,
|
||||
dataType:'json',
|
||||
async: true,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
cache: false,
|
||||
//timeout: 600000,
|
||||
success: function (returnData, status) {
|
||||
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
||||
|
||||
if(returnData.success){
|
||||
|
||||
var data = returnData.data;
|
||||
var message = returnData.message;
|
||||
|
||||
if(message != '' ){
|
||||
alert(returnData.message);
|
||||
}
|
||||
|
||||
if(data != null){
|
||||
|
||||
$.each(data, function(i, item){
|
||||
|
||||
if(checkHpNum(item.phone)){
|
||||
|
||||
excelAddr.push({phone: item.phone, name: item.name, rep1: item.replace1, rep2: item.replace2, rep3: item.replace3, rep4: item.replace4});
|
||||
|
||||
}/* else{
|
||||
|
||||
alert("엑셀 파일 데이터의 형식이 맞지 않는 부분이 있습니다.");
|
||||
excelAddr = []; //엑셀 데이터 저장 변수 초기화
|
||||
$("#excelFile").val(""); //첨부파일 input 초기화
|
||||
$("#excelNm").val(""); // 첨부파일 명 초기화
|
||||
fileName = "";
|
||||
return;
|
||||
|
||||
} */
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
alert(returnData.message);
|
||||
// alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
|
||||
excelAddr = []; //엑셀 데이터 저장 변수 초기화
|
||||
$("#excelFile").val(""); //첨부파일 input 초기화
|
||||
$("#excelNm").val(""); // 첨부파일 명 초기화
|
||||
fileName = "";
|
||||
return;
|
||||
|
||||
}
|
||||
} else if(status== 'fail'){
|
||||
alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
|
||||
console.log("status : fail ~");
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
|
||||
console.log("ERROR : ", e);
|
||||
},
|
||||
beforeSend : function(xmlHttpRequest) {
|
||||
//로딩창 show
|
||||
$('.loading_layer').addClass('active');
|
||||
},
|
||||
complete : function(xhr, textStatus) {
|
||||
//로딩창 hide
|
||||
$('.loading_layer').removeClass('active');
|
||||
}
|
||||
});
|
||||
|
||||
$("#excelFile").val("");
|
||||
$("#excelNm").val(fileName);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
329
src/main/webapp/js/kakao/ft/ftPriceClclt.js
Normal file
329
src/main/webapp/js/kakao/ft/ftPriceClclt.js
Normal file
@ -0,0 +1,329 @@
|
||||
/**
|
||||
*
|
||||
* @author : 우영두
|
||||
* @fileName : ftPriceClclt.js
|
||||
* @date : 2024.01.12
|
||||
* @description : 친구톡 및 대체문자 금액 연산.js
|
||||
* ===========================================================
|
||||
* DATE AUTHOR NOTE
|
||||
* ----------------------------------------------------------- *
|
||||
* 2024.01.12 우영두 최초 생성
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} totRows 수신자 수
|
||||
* @description 금액 계산 function
|
||||
* 대체 문자 X
|
||||
* 카카오 금액 * 수신자 수 계산
|
||||
*/
|
||||
function totalFtPriceSum(totRows){
|
||||
|
||||
var collNumCnt = parseInt(totRows); //받는사람 건수
|
||||
var price = $("#kakaoFtPrice").val(); //개별 건수 금액
|
||||
var totalPrice = 0; //전체 금액
|
||||
var totalStr = "0"; //전체 합계 금액
|
||||
var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
|
||||
|
||||
if(!userMoney > 0){
|
||||
|
||||
userMoney = 0;
|
||||
|
||||
}
|
||||
//헤더 영역 보유 금액 콤마 문자 제거
|
||||
if(userMoney != ''){
|
||||
|
||||
userMoney = userMoney.replaceAll("," , "");
|
||||
|
||||
}
|
||||
|
||||
//대체문자가 있는 경우 대체문자의 단/장문에 따른 금액 계산
|
||||
var subMsgSts = $("#send_fail_check").is(":checked");
|
||||
|
||||
if(subMsgSts){
|
||||
|
||||
var conLeng = conByteLeng($('#smsTxtArea').val()); // 내용 문자 입력 바이트 수 계산하기
|
||||
if(conLeng > 90){
|
||||
price = $("#longPrice").val();
|
||||
}else{
|
||||
price = $("#shortPrice").val();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
totalPrice = price * collNumCnt;
|
||||
|
||||
// 소수점 첫째자리 까지 표시
|
||||
totalPrice = totalPrice.toFixed(1);
|
||||
|
||||
if(totalPrice > 0){
|
||||
|
||||
//totalStr = totalPrice.toFixed(2);
|
||||
totalStr = totalPrice;
|
||||
|
||||
}
|
||||
|
||||
//개별 문자 단가 파라미터에 입력
|
||||
$('#eachPrice').val(numberWithCommas(price));
|
||||
|
||||
//결제금액 합계 파라이터에 입력
|
||||
$('#totPrice').val(numberWithCommas(totalStr));
|
||||
|
||||
//결제금액 합계 화면에 표시
|
||||
$('#totalPriceTxt').text(numberWithCommas(totalStr));
|
||||
|
||||
$('#repPriceTxt').hide();
|
||||
|
||||
return totalStr;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* ======================================================================================================================
|
||||
*
|
||||
* */
|
||||
|
||||
//카카오 mms sms 단가 셋팅
|
||||
var KAKAO_FT_PRICE = '';
|
||||
var SHORT_PRICE = '';
|
||||
var LONG_PRICE = '';
|
||||
|
||||
/*$(document).ready(function(){
|
||||
|
||||
// 카카오 mms sms 단가 셋팅
|
||||
KAKAO_FT_PRICE = $('#kakaoFtPrice').val();
|
||||
SHORT_PRICE = $('#shortPrice').val();
|
||||
LONG_PRICE = $('#longPrice').val();
|
||||
|
||||
///////////////////////////////////////// Mutation Observer
|
||||
// 감시 대상 node 선택
|
||||
// 변수X 수신자 목록
|
||||
let target01 = document.getElementById('wrap01_body');
|
||||
// 변수O 수신자 목록
|
||||
let target02 = document.getElementById('wrap02');
|
||||
// 대체 문자 단문 장문 텍스트 노드
|
||||
let target03 = document.getElementById('afterDeny');
|
||||
|
||||
// 감시자의 설정
|
||||
let option = {
|
||||
subtree : true // 대상 노드의 자식 요소뿐만 아니라 후손 요소의 변화까지 감지
|
||||
, childList : true // 대상 노드의 자식 요소(텍스트 포함)의 변화 감지
|
||||
, attributes : true // 해당 노드의 attribute 속성
|
||||
|
||||
// , characterData: true // 대상 노드의 데이터 변화 감지
|
||||
};
|
||||
|
||||
|
||||
// wrap01 감시자 인스턴스 만들기
|
||||
let observer_wrap01 = new MutationObserver((mutations) => {
|
||||
// 노드가 변경 됐을 때의 작업
|
||||
fn_priceClclt();
|
||||
});
|
||||
|
||||
// wrap02 감시자 인스턴스 만들기
|
||||
let observer_wrap02 = new MutationObserver((mutations) => {
|
||||
// 노드가 변경 됐을 때의 작업
|
||||
fn_priceClclt();
|
||||
});
|
||||
|
||||
// wrap03 감시자 인스턴스 만들기
|
||||
let observer_wrap03 = new MutationObserver((mutations) => {
|
||||
// 노드가 변경 됐을 때의 작업
|
||||
fn_priceClclt();
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
// 대상 노드에 감시자 전달
|
||||
observer_wrap01.observe(target01, option);
|
||||
observer_wrap02.observe(target02, option);
|
||||
observer_wrap03.observe(target03, option);
|
||||
|
||||
///////////////////////////////////////// //Mutation Observer
|
||||
|
||||
});*/
|
||||
|
||||
/**
|
||||
* @description 금액 계산 function
|
||||
*/
|
||||
function fn_priceClclt(){
|
||||
|
||||
// 미리보기 텍스트
|
||||
var templateHtml = $('#smsTxtArea').val();
|
||||
// var templateHtml = $('.template_text').html();
|
||||
|
||||
// 수신 번호 개수
|
||||
var phoneSu = $('.phoneArea').length;
|
||||
// 대체문자 있는지 확인
|
||||
var isSendFailChecked = $("#send_fail_check").is(":checked");
|
||||
// 치환문자 여부 확인
|
||||
var txtReplYn = $('#txtReplYn').val()
|
||||
// 대체문자 하위에 장문 / 단문 select
|
||||
var msgTypeText = $('.msg_com').text().trim();
|
||||
|
||||
if(typeof templateHtml == 'undefined') return false;
|
||||
else if(isSendFailChecked && txtReplYn=='Y') fn_sendFailCheckedAndTxtRepl_Y(templateHtml, msgTypeText, phoneSu); // 대체문자 체크 & 치환문자 Y
|
||||
else if(isSendFailChecked && txtReplYn=='N') fn_sendFailCheckedAndTxtRepl_N(msgTypeText, phoneSu); // 대체문자 체크 & 치환문자 N
|
||||
else fn_sendFailUnChecked(phoneSu);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} phoneSu 수신자 수
|
||||
* @description 금액 계산 function
|
||||
* 대체 문자 X
|
||||
* 카카오 금액 * 수신자 수 계산
|
||||
*/
|
||||
function fn_sendFailUnChecked(phoneSu){
|
||||
|
||||
// 카카오 금액 * 수신자 수
|
||||
// fn_writePriceText() 첫 파라미터가 null이면 카카오 전송으로 인식
|
||||
fn_writePriceText('', phoneSu);
|
||||
// $('#totalPriceTxt').text((KAKAO_AT_PRICE * phoneSu).toFixed(1));
|
||||
fn_priceText('알림톡', phoneSu);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} templateHtml 템플릿html
|
||||
* @param {*} msgTypeText 발송 타입
|
||||
* @param {*} phoneSu 수신자 수
|
||||
* @description 금액 계산 function
|
||||
* 대체 문자 O
|
||||
* 치환 문자 O
|
||||
*/
|
||||
function fn_sendFailCheckedAndTxtRepl_Y(templateHtml, msgTypeText, phoneSu){
|
||||
|
||||
// 대체문자 하위에 html 그대로의 byte 계산이 단문일 경우에만 치환 후 장문이 있는지 확인
|
||||
if(msgTypeText == '단문'){
|
||||
msgTypeText = fn_transHtml(msgTypeText, templateHtml);
|
||||
}
|
||||
|
||||
fn_writePriceText(msgTypeText, phoneSu);
|
||||
fn_priceText(msgTypeText, phoneSu);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} msgTypeText 발송 타입
|
||||
* @param {*} phoneSu 수신자 수
|
||||
* @description 금액 계산 function
|
||||
* 대체 문자 O
|
||||
* 치환 문자 X
|
||||
*/
|
||||
function fn_sendFailCheckedAndTxtRepl_N(msgTypeText, phoneSu){
|
||||
|
||||
fn_priceText(msgTypeText, phoneSu);
|
||||
fn_writePriceText(msgTypeText, phoneSu);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} msgTypeText 발송 타입
|
||||
* @param {*} phoneSu 수신자 수
|
||||
* @returns
|
||||
* @description 발송 금액 계산 / 노출
|
||||
*/
|
||||
function fn_priceText(msgTypeText, phoneSu){
|
||||
|
||||
// $("#repPriceTxt").is(":visible") => 발송 금액 show hide 여부
|
||||
if(phoneSu === 0){
|
||||
|
||||
$('#repPriceTxt').empty();
|
||||
$('#repPriceTxt').hide();
|
||||
return false;
|
||||
}
|
||||
// 텍스트 초기화
|
||||
$('#repPriceTxt').show();
|
||||
$('#repPriceTxt').empty();
|
||||
|
||||
var priceText = '$SENDTYPE$ :<strong>$SU$</strong>건';
|
||||
priceText = priceText.replace('$SENDTYPE$', msgTypeText).replace('$SU$', phoneSu);
|
||||
|
||||
$('#repPriceTxt').append(priceText);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 발송금액 라인 text / 금액 초기화
|
||||
*/
|
||||
function priceInit(){
|
||||
if($("#repPriceTxt").is(":visible")){
|
||||
$('#repPriceTxt').empty();
|
||||
$('#repPriceTxt').hide();
|
||||
}
|
||||
$('#totalPriceTxt').text(0.0);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} msgTypeText 발송 타입
|
||||
* @param {*} phoneSu 수신자 수
|
||||
* @description 발송 금액 '발송타입:00건' 노출
|
||||
*/
|
||||
function fn_writePriceText(msgTypeText, phoneSu){
|
||||
|
||||
var price;
|
||||
msgTypeText = msgTypeText.trim();
|
||||
if(msgTypeText == '단문') price = SHORT_PRICE * phoneSu;
|
||||
else if(msgTypeText == '장문') price = LONG_PRICE * phoneSu;
|
||||
else price = KAKAO_AT_PRICE * phoneSu; // 카카오
|
||||
|
||||
$('#totalPriceTxt').text((price).toFixed(1));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} msgTypeText 발송 타입 : 단문
|
||||
* @param {*} templateHtml 템플릿 html
|
||||
* @returns msgTypeText : 단문 or 장문
|
||||
* @description 치환 데이터 있는 경우 단문일 경우만 호출
|
||||
* 치환 후 장문 데이터일경우 'returns 장문'으로 끝남
|
||||
*/
|
||||
function fn_transHtml(msgTypeText, templateHtml){
|
||||
|
||||
// 템플릿
|
||||
templateHtml = templateHtml.trim().replace(/(<br>|<br\/>|<br \/>)/g, '\n');
|
||||
// 치환 부분 '#{내용}'만 추출
|
||||
var varList = $("#excelTemplateContent").val().match(/#\{([^}]+)\}/g);
|
||||
// 템플릿을 반복할때마다 담는 temp 선언
|
||||
var tempTemplateHtml;
|
||||
// 치환 데이터 담는 변수 선언
|
||||
var replaceStr;
|
||||
|
||||
// excelBody 부분 반복 시작
|
||||
$('.excelBody').each(function(i, t){
|
||||
tempTemplateHtml = templateHtml;
|
||||
|
||||
$(this).find('.transData').each(function(index, item){
|
||||
// console.log('item text :: ', $(item).text().trim());
|
||||
replaceStr = $(item).text().trim();
|
||||
tempTemplateHtml = tempTemplateHtml.replace(varList[index], replaceStr);
|
||||
});
|
||||
// 치환 후 byte 계산
|
||||
// 장문이면 break;
|
||||
if(90 < conByteLeng(tempTemplateHtml))
|
||||
{
|
||||
msgTypeText = '장문';
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
return msgTypeText;
|
||||
}
|
||||
|
||||
|
||||
869
src/main/webapp/js/kakao/ft/ftTabulator.js
Normal file
869
src/main/webapp/js/kakao/ft/ftTabulator.js
Normal file
@ -0,0 +1,869 @@
|
||||
/**
|
||||
*
|
||||
* @author : 우영두
|
||||
* @fileName : ftTabulator.js
|
||||
* @date : 2024.01.09
|
||||
* @description : 받는사람 목록 tabulator 관련 js
|
||||
* ===========================================================
|
||||
* DATE AUTHOR NOTE
|
||||
* ----------------------------------------------------------- *
|
||||
* 2024.01.09 우영두 최초 생성
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
$(document).ready(function (){
|
||||
|
||||
//받는사람 연락처 내용 처리
|
||||
//Tabulator AJAX Data Loading
|
||||
tableL = new Tabulator(".callList_box", {
|
||||
height:"255px",
|
||||
layout:"fitColumns",
|
||||
//data:tabledata,
|
||||
//autoColumns:true,
|
||||
headerHozAlign:"center",
|
||||
validationMode:"highlight",
|
||||
//clipboard:false,
|
||||
//clipboardCopySelector:"table",
|
||||
//clipboardPasteAction:"insert", // insert, update, replace
|
||||
placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional)
|
||||
resizableColumns:false,
|
||||
columns:[ //Define Table Columns
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}},
|
||||
{title:"이름", hozAlign:"center", field:"name", editor:"input", validator:["maxLength:12"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
fnReplCell();
|
||||
}},
|
||||
{title:"휴대폰", hozAlign:"center", field:"phone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:12"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
fnDuplPhone();
|
||||
}},
|
||||
{title:"[*1*]", hozAlign:"center", field:"rep1", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
fnReplCell();
|
||||
}},
|
||||
{title:"[*2*]", hozAlign:"center", field:"rep2", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
fnReplCell();
|
||||
}},
|
||||
{title:"[*3*]", hozAlign:"center", field:"rep3", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
fnReplCell();
|
||||
}},
|
||||
{title:"[*4*]", hozAlign:"center", field:"rep4", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
fnReplCell();
|
||||
}},
|
||||
|
||||
],
|
||||
validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 - 아직 잘 모르겠음
|
||||
//take action on validation fail
|
||||
var valid = cell.isValid();
|
||||
var fieldNm = cell.getField();
|
||||
var cellVal = cell.getValue();
|
||||
var returnVal = "";
|
||||
if(!valid){
|
||||
|
||||
if(fieldNm == "name"){
|
||||
alert("받는사람 이름은 최대 12글자까지만 입력 가능합니다.");
|
||||
cell.setValue(strMaxLengthSubstring(cellVal, 11)); //스크립트 함수가 0부터 시작이므로 원하는 글자수 -1을 해줘야한다.
|
||||
cell.clearValidation();
|
||||
}else if(fieldNm == "phone"){
|
||||
alert("휴대폰번호는 하이픈(-)을 제외한 숫자만 정확히 입력해 주세요.");
|
||||
}else{
|
||||
alert("치환문자를 정확히 입력해 주세요. 40글자 이내로 입력 가능합니다.");
|
||||
cell.setValue(strMaxLengthSubstring(cellVal, 39));
|
||||
cell.clearValidation();
|
||||
}
|
||||
|
||||
//해당 셀 데이터 삭제
|
||||
//cell.setValue("");
|
||||
|
||||
}
|
||||
return value % parameters.phone;
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
//주소록 불러오기 팝업 내용
|
||||
//Tabulator AJAX Data Loading
|
||||
tableAddr = new Tabulator(".callAddr_box", {
|
||||
height:"255px",
|
||||
layout:"fitColumns",
|
||||
headerHozAlign:"center",
|
||||
validationMode:"highlight",
|
||||
placeholder:"주소록 그룹을 선택해 주세요.", //fit columns to width of table (optional)
|
||||
resizableColumns:false,
|
||||
columns:[ //Define Table Columns
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}
|
||||
},
|
||||
{title:"그룹명", hozAlign:"center", field:"addrGroupNm", editor:"input", width:120, validator:["required","minLength:2", "maxLength:40"]},
|
||||
{title:"이름", hozAlign:"center", field:"addrName", editor:"input", width:120, validator:["maxLength:12"]},
|
||||
{title:"휴대폰번호", hozAlign:"center", field:"addrPhone", editor:"input", width:120, validator:["required","minLength:10", "maxLength:11"]},
|
||||
|
||||
],
|
||||
validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 - 아직 잘 모르겠음
|
||||
var valid = cell.isValid();
|
||||
var fieldNm = cell.getField();
|
||||
if(!valid){
|
||||
if(fieldNm == "addrName"){
|
||||
alert("받는사람 이름은 최대 12글자까지만 입력 가능합니다.");
|
||||
}else if(fieldNm == "addrPhone"){
|
||||
alert("휴대폰번호는 하이픈(-)을 제외한 숫자만 정확히 입력해 주세요.");
|
||||
}else if(fieldNm == "addrGroupNm"){
|
||||
alert("그룹명을 정확히 입력해 주세요. 2 ~ 40글자 이내로 입력 가능합니다.");
|
||||
}
|
||||
|
||||
//해당 셀 데이터 삭제
|
||||
cell.setValue("");
|
||||
}
|
||||
return value % parameters.addrPhone;
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
//받는사람 번호 버튼 클릭시 Tabulator에 데이터 넣어주기
|
||||
$('.addCallToF').click(function(){
|
||||
|
||||
var callToNum = $('#callTo').val();
|
||||
if(callToNum == null || callToNum == ""){
|
||||
|
||||
alert("받는사람 번호를 입력해 주세요.");
|
||||
return false;
|
||||
|
||||
}else if(!checkHpNum(callToNum)){
|
||||
|
||||
alert("올바른 전화번호를 입력해 주세요.");
|
||||
$('#callTo').val("");
|
||||
return false;
|
||||
}
|
||||
|
||||
//핸드폰 번호에 '-' 문자 제거하기
|
||||
callToNum = removeDash(callToNum);
|
||||
|
||||
//기존 받는사람 연락처 모두 불러오기
|
||||
var data = tableL.getRows();
|
||||
var tableData = [];
|
||||
var dpCnt = 0;
|
||||
for(var i=0; i < tableL.getRows().length; i++){
|
||||
|
||||
if(callToNum == data[i].getData().phone){
|
||||
|
||||
dpCnt++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(dpCnt > 0){
|
||||
|
||||
alert("받는사람 리스트에 동일한 연락처가 있습니다.");
|
||||
$('#callTo').val("");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
tabledata = [{phone: callToNum},];
|
||||
|
||||
//빈 row 데이터 삭제하기
|
||||
var befData = tableL.getRows();
|
||||
var totLen = tableL.getRows().length;
|
||||
|
||||
for(var i=0; i < totLen; i++){
|
||||
|
||||
tableData.push({phone: data[i].getData().phone.trim(), name: data[i].getData().name});
|
||||
|
||||
}
|
||||
|
||||
//연락처 추가해 주기
|
||||
addPhoneInfo(tabledata);
|
||||
|
||||
$('#callTo').val("");
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
//받는사람 전체삭제 버튼 처리
|
||||
$('.all_del').click(function(){
|
||||
|
||||
var data = tableL.getRows();
|
||||
|
||||
if(data == null || data == ""){
|
||||
|
||||
alert("받는사람을 추가해 주세요.");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
if(confirm("받는사람 목록을 모두 삭제하시겠습니까?")){
|
||||
tableL.clearData();
|
||||
$("#rowTotCnt").text(0); //총건수 수정
|
||||
$("#rowDupCnt").text(0); //중복건수 수정
|
||||
totalFtPriceSum(0); //결제 금액 수정
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// 받는사람 선택삭제 버튼 처리해주기
|
||||
$('.select_del').click(function(){
|
||||
|
||||
if(tableL == null || tableL == ""){
|
||||
|
||||
alert("받는사람을 추가해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
var selectedData = tableL.getSelectedRows();
|
||||
|
||||
if(selectedData == "" || selectedData == null){
|
||||
|
||||
alert("삭제할 연락처를 선택해주세요.");
|
||||
return false;
|
||||
|
||||
}else{ // 선택한 Row 데이터 삭제하기
|
||||
|
||||
if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){
|
||||
|
||||
for(var i=0; i < selectedData.length; i++){
|
||||
|
||||
selectedData[i].delete();
|
||||
|
||||
}
|
||||
|
||||
totRows = tableL.getRows().length;
|
||||
|
||||
var smsTxtArea = $('#inputTemplateContent').val();
|
||||
|
||||
//일괄변환 문구 결제금액 처리
|
||||
if(smsTxtArea.indexOf("#{이름}") > -1
|
||||
|| smsTxtArea.indexOf("#{1}") > -1
|
||||
|| smsTxtArea.indexOf("#{2}") > -1
|
||||
|| smsTxtArea.indexOf("#{3}") > -1
|
||||
|| smsTxtArea.indexOf("#{4}") > -1){
|
||||
|
||||
fnFtReplCell();
|
||||
|
||||
}else{
|
||||
//결제 금액 구하기
|
||||
totalFtPriceSum(totRows);
|
||||
}
|
||||
|
||||
//결제금액 합계 파라이터에 입력
|
||||
$('#rowTotCnt').text(numberWithCommas(totRows));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
//주소록 불러오기 버튼 클릭시
|
||||
$('.popupAddr').click(function(){
|
||||
|
||||
var login = '${LoginVO.id}';
|
||||
|
||||
if(login == null || login == ''){
|
||||
|
||||
alert("로그인 후 이용이 가능합니다.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
$("#addrGroupLoad").load("/web/mjon/msgdata/selectAddrGroupListAjax.do", "" ,function(response, status, xhr){
|
||||
//리스트 스크롤 처리해주기
|
||||
$(".adr_pop_list").mCustomScrollbar({
|
||||
axis: 'y',
|
||||
scrollbarPosition: "outside",
|
||||
theme: "dark",
|
||||
autoHideScrollbar: false
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
//엑섹불러오기 버튼 클릭시 파일 첨부 실행
|
||||
$('.upImg').click(function(){ // 엑셀파일 불러오기 선택 시
|
||||
|
||||
$("#imgFile").click();
|
||||
|
||||
});
|
||||
|
||||
//최근전송내역 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기)
|
||||
$(document).on('click', '#latestAddPhone', function (){
|
||||
|
||||
var addPhoneList = []; //신규로 추가할 전화번호 저장변수
|
||||
|
||||
$("input:checkbox[name='latAddrChk']:checked").each(function(index){
|
||||
|
||||
var chkPhone = $(this).val();
|
||||
|
||||
if(!checkHpNum(chkPhone)){
|
||||
|
||||
alert("올바른 전화번호가 아닙니다.");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
if(addPhoneList.length > 0){
|
||||
//연락처 추가해 주기
|
||||
addPhoneInfo(addPhoneList);
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
}
|
||||
else {
|
||||
alert("연락처를 선택해주세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
//중복연락처 제거
|
||||
//var removeDuplData = dupliPhoneData(addPhoneList);
|
||||
|
||||
//받는사람 목록에 추가
|
||||
//tableL.addData(removeDuplData);
|
||||
|
||||
//총 받는사람 수 계산
|
||||
//totRows = tableL.getRows().length;
|
||||
//updateTotCnt(totRows);
|
||||
|
||||
//결제 금액 구하기
|
||||
//totalPriceSum(totRows);
|
||||
|
||||
});
|
||||
|
||||
//최근전송내역 팝업 선택 취소 버튼 처리
|
||||
$(document).on('click', '#latestCancelPhone', function (){
|
||||
|
||||
$("input[name=latAddrChk]").prop("checked", false);
|
||||
|
||||
});
|
||||
|
||||
//최근전송내역 팝업 삭제 버튼 처리
|
||||
$(document).on('click', '#latestAddrDel', function (){
|
||||
|
||||
$(this).parent("#latestLi").remove();
|
||||
|
||||
});
|
||||
|
||||
//자주보내는 번호 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기)
|
||||
$(document).on('click', '#bookMarkAddPhone', function (){
|
||||
|
||||
var addPhoneList = []; //신규로 추가할 전화번호 저장변수
|
||||
|
||||
$("input:checkbox[name='bookAddrChk']:checked").each(function(index){
|
||||
|
||||
var chkPhone = $(this).val();
|
||||
|
||||
if(!checkHpNum(chkPhone)){
|
||||
|
||||
alert("올바른 전화번호가 아닙니다.");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
addPhoneList.push({phone: removeDash(chkPhone.trim())});
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if(addPhoneList.length > 0){
|
||||
//연락처 추가해 주기
|
||||
addPhoneInfo(addPhoneList);
|
||||
$("#btnLatestAddPhoneClose").trigger("click");
|
||||
}
|
||||
else {
|
||||
alert("연락처를 선택해주세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
//중복연락처 제거
|
||||
//var removeDuplData = dupliPhoneData(addPhoneList);
|
||||
|
||||
//받는사람 목록에 추가
|
||||
//tableL.addData(removeDuplData);
|
||||
|
||||
//총 받는사람 수 계산
|
||||
//totRows = tableL.getRows().length;
|
||||
//updateTotCnt(totRows);
|
||||
|
||||
//결제 금액 구하기
|
||||
//totalPriceSum(totRows);
|
||||
|
||||
});
|
||||
|
||||
//자주보내는 번호 팝업 선택 취소 버튼 처리
|
||||
$(document).on('click', '#bookMarkCancelPhone', function (){
|
||||
|
||||
$("input[name=bookAddrChk]").prop("checked", false);
|
||||
|
||||
});
|
||||
|
||||
//자주보내는 번호 팝업 삭제 버튼 처리
|
||||
$(document).on('click', '#bookMarkAddrDel', function (){
|
||||
|
||||
$(this).parent("#bookMarkLi").remove();
|
||||
|
||||
});
|
||||
|
||||
// 자주보내는 번호 팝업 닫기 버튼 처리
|
||||
$(document).on('click', '#btnLatestAddPhoneClose', function (){
|
||||
// 자주보내는 번호 체크박스 해제처리
|
||||
setCheckBoxUnChecked();
|
||||
});
|
||||
|
||||
// 자주보내는 번호 체크박스 해제처리
|
||||
function setCheckBoxUnChecked() {
|
||||
$("input[name=latAddrChk]").prop("checked", false);
|
||||
$("input[name=bookAddrChk]").prop("checked", false);
|
||||
}
|
||||
|
||||
|
||||
//오류 검사 버튼 처리
|
||||
$('.check_validity').click(function(){
|
||||
|
||||
var invalid = tableL.getInvalidCells(); //오류 데이터 체크
|
||||
var dataLen = tableL.getRows().length; //연락처 데이터 갯수
|
||||
var totLen = invalid.length; //오류 데이터 갯수
|
||||
var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수
|
||||
|
||||
if(dataLen > 0){ //연락처 정보가 있으면 수행
|
||||
|
||||
if(totLen > 0){ //내용에 오류가 있으면 수행
|
||||
|
||||
//오류 데이터 값 저장
|
||||
for(var i=0; i < totLen; i++){
|
||||
|
||||
var cellValue = invalid[i].getValue();
|
||||
|
||||
if(i == 0){
|
||||
|
||||
errMsg = cellValue;
|
||||
|
||||
}else{
|
||||
|
||||
errMsg = errMsg +", "+ cellValue;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(errMsg == "" || errMsg == null){
|
||||
|
||||
alert("내용에 오류가 있습니다.");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
alert(errMsg + "의 내용에 오류가 있습니다.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
alert("오류 데이터가 없습니다.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
alert("연락처를 입력해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
var tableErrorData = [];
|
||||
var totRows = 0; // 좌측 받는사람 총 갯수
|
||||
|
||||
|
||||
/*
|
||||
* 토탈 카운트 화면에 노출
|
||||
* 변수 없는 리스트만 체크
|
||||
*/
|
||||
function updateTotCnt(){
|
||||
|
||||
$("#rowTotCnt").text($('#wrap01_body .list_body').length);
|
||||
|
||||
}
|
||||
|
||||
//주소록 불러오기에서 수신자 리스트 화면에 추가해주기
|
||||
function addPhoneInfo(data){
|
||||
|
||||
if(data == null){
|
||||
|
||||
alert("연락처 정보가 없습니다.");
|
||||
return;
|
||||
|
||||
}else{
|
||||
|
||||
var idx = 0;
|
||||
var newData = data;//중복 연락처는 하나만 남기고 모두 제거
|
||||
|
||||
var recTableData = tableL.getRows(); // 받는사람 리스트의 전체 목록을 저장
|
||||
var tableData = [];
|
||||
|
||||
//기존 받는사람 리스트를 배열에 미리 담아둔다.
|
||||
if(recTableData.length > 0){
|
||||
|
||||
for(var j=0; j < recTableData.length; j++){
|
||||
|
||||
tableData.push({phone: removeDash(recTableData[j].getData().phone) , name: recTableData[j].getData().name, rep1: recTableData[j].getData().rep1, rep2: recTableData[j].getData().rep2, rep3: recTableData[j].getData().rep3, rep4: recTableData[j].getData().rep4});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다.
|
||||
for(var i=0; i < newData.length; i++){
|
||||
|
||||
tableData.push({phone: removeDash(newData[i].phone) , name: newData[i].name, rep1: newData[i].rep1, rep2: newData[i].rep2, rep3: newData[i].rep3, rep4: newData[i].rep4});
|
||||
|
||||
}
|
||||
|
||||
var temp = tableData.length;
|
||||
|
||||
//기존 수신 리스트를 지워준 후 신규 전체 리스트를 추가해준다.
|
||||
tableL.clearData(); //기존 받는사람 목록을 삭제.
|
||||
tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기
|
||||
_fileForm2 = []; //form file data 초기화
|
||||
_fileIdx = 0; //form file idx 초기화
|
||||
|
||||
totRows = tableL.getRows().length;
|
||||
|
||||
var smsTxtArea = $('#inputTemplateContent').val();
|
||||
|
||||
//일괄변환 문구 결제금액 처리
|
||||
if(smsTxtArea.indexOf("#{이름}") > -1
|
||||
|| smsTxtArea.indexOf("#{1}") > -1
|
||||
|| smsTxtArea.indexOf("#{2}") > -1
|
||||
|| smsTxtArea.indexOf("#{3}") > -1
|
||||
|| smsTxtArea.indexOf("#{4}") > -1){
|
||||
|
||||
fnFtReplCell();
|
||||
|
||||
}else{
|
||||
|
||||
//결제 금액 구하기
|
||||
totalFtPriceSum(totRows);
|
||||
|
||||
}
|
||||
|
||||
//결제금액 합계 파라이터에 입력
|
||||
$('#rowTotCnt').text(numberWithCommas(totRows));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function addrToList(){
|
||||
|
||||
var selectedData = tableAddr.getSelectedRows();
|
||||
var tableData = [];
|
||||
|
||||
if(selectedData == "" || selectedData == null){
|
||||
|
||||
alert("주소록을 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}else{ // 선택한 Row 데이터 저장해주기
|
||||
|
||||
for(var i=0; i < selectedData.length; i++){
|
||||
|
||||
//좌측 받는사람 리스트를 담아둔 배열에 데이터를 추가해 준다.
|
||||
tableData.push({phone: removeDash(selectedData[i].getData().addrPhone),
|
||||
name: selectedData[i].getData().addrName,
|
||||
rep1: selectedData[i].getData().addrRep1,
|
||||
rep2: selectedData[i].getData().addrRep2,
|
||||
rep3: selectedData[i].getData().addrRep3,
|
||||
rep4: selectedData[i].getData().addrRep4}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
//선택한 데이터 받는사람 리스트에 추가해 주기
|
||||
addPhoneInfo(tableData);
|
||||
$(".closeAddr").trigger("click");
|
||||
|
||||
//주소록 레이어 팝업의 Tabulator 데이터 지워주기
|
||||
tableAddr.clearData();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//특정문구 일괄변환 문자길이 체크 하기
|
||||
function fnFtReplCell(){
|
||||
|
||||
var smsTxtArea = $('#inputTemplateContent').val();
|
||||
|
||||
//이벤트 잔여 캐시 자동 처리 관련 변수
|
||||
var eachPrice = parseFloat($("#eachPrice").val());
|
||||
var kakaoFtPrice = parseFloat($("#kakaoFtPrice").val());
|
||||
var shortPrice = parseFloat($("#shortPrice").val());
|
||||
var longPrice = parseFloat($("#longPrice").val());
|
||||
|
||||
if(smsTxtArea.indexOf("#{이름}") > -1
|
||||
|| smsTxtArea.indexOf("#{1}") > -1
|
||||
|| smsTxtArea.indexOf("#{2}") > -1
|
||||
|| smsTxtArea.indexOf("#{3}") > -1
|
||||
|| smsTxtArea.indexOf("#{4}") > -1){
|
||||
|
||||
|
||||
var rowData = tableL.getRows();
|
||||
var recTableData = tableL.getRows(); // 받는사람 리스트의 전체 목록을 저장
|
||||
//var tableData = [];
|
||||
|
||||
var msg_short = 0; //단문문자 갯수
|
||||
var msg_long = 0; //장문문자 갯수
|
||||
|
||||
//일괄변환문자 포함 여부 변경 - 문자내용에 치환변환 문자는 있지만 받는사람 데이터에 치환 데이터를 안넣는 경우 오류가 발생하여 상태값 입력 위치 상단으로 변경함.
|
||||
//치환데이터가 없는 경우 Alert 띄우고 빠져나가기 때문에 치환문자 상태 체크값이 누락되어서 변경함 - 20230407 우영두
|
||||
$('#txtReplYn').val("Y");
|
||||
|
||||
var nmStatus = false;
|
||||
var rep1Status = false;
|
||||
var rep2Status = false;
|
||||
var rep3Status = false;
|
||||
var rep4Status = false;
|
||||
var varValStatus = true;
|
||||
|
||||
if(smsTxtArea.indexOf("#{이름}") > -1){
|
||||
|
||||
nmStatus = true;
|
||||
}
|
||||
|
||||
if(smsTxtArea.indexOf("#{1}") > -1){
|
||||
|
||||
rep1Status = true;
|
||||
}
|
||||
|
||||
if(smsTxtArea.indexOf("#{2}") > -1){
|
||||
|
||||
rep2Status = true;
|
||||
}
|
||||
|
||||
if(smsTxtArea.indexOf("#{3}") > -1){
|
||||
|
||||
rep3Status = true;
|
||||
}
|
||||
|
||||
if(smsTxtArea.indexOf("#{4}") > -1){
|
||||
|
||||
rep4Status = true;
|
||||
}
|
||||
|
||||
|
||||
//기존 받는사람 리스트를 배열에 미리 담아둔다.
|
||||
if(recTableData.length > 0){
|
||||
|
||||
for(var j=0; j < recTableData.length; j++){
|
||||
|
||||
var smsTxt = smsTxtArea;
|
||||
|
||||
if(typeof recTableData[j].getData().name != 'undefined' && recTableData[j].getData().name != null && recTableData[j].getData().name != ""){
|
||||
|
||||
var name = recTableData[j].getData().name;
|
||||
smsTxt = stringReplaceAll(smsTxt, "#{이름}", name);
|
||||
|
||||
}else{
|
||||
|
||||
if(nmStatus){
|
||||
//alert("#{이름} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
|
||||
varValStatus = false;
|
||||
//break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(typeof recTableData[j].getData().rep1 != 'undefined' && recTableData[j].getData().rep1 != null && recTableData[j].getData().rep1 != ""){
|
||||
|
||||
var rep1 = recTableData[j].getData().rep1;
|
||||
smsTxt = stringReplaceAll(smsTxt, "#{1}", rep1);
|
||||
|
||||
}else{
|
||||
|
||||
if(rep1Status){
|
||||
//alert("#{1} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
|
||||
varValStatus = false;
|
||||
//break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(typeof recTableData[j].getData().rep2 != 'undefined' && recTableData[j].getData().rep2 != null && recTableData[j].getData().rep2 != ""){
|
||||
|
||||
var rep2 = recTableData[j].getData().rep2;
|
||||
smsTxt = stringReplaceAll(smsTxt, "#{2}", rep2);
|
||||
|
||||
}else{
|
||||
|
||||
if(rep2Status){
|
||||
//alert("#{2} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
|
||||
varValStatus = false;
|
||||
//break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(typeof recTableData[j].getData().rep3 != 'undefined' && recTableData[j].getData().rep3 != null && recTableData[j].getData().rep3 != ""){
|
||||
|
||||
var rep3 = recTableData[j].getData().rep3;
|
||||
smsTxt = stringReplaceAll(smsTxt, "#{3}", rep3);
|
||||
|
||||
}else{
|
||||
|
||||
if(rep3Status){
|
||||
//alert("#{3} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
|
||||
varValStatus = false;
|
||||
//break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(typeof recTableData[j].getData().rep4 != 'undefined' && recTableData[j].getData().rep4 != null && recTableData[j].getData().rep4 != ""){
|
||||
|
||||
var rep4 = recTableData[j].getData().rep4;
|
||||
smsTxt = stringReplaceAll(smsTxt, "#{4}", rep4);
|
||||
|
||||
}else{
|
||||
|
||||
if(rep4Status){
|
||||
//alert("#{4} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
|
||||
varValStatus = false;
|
||||
//break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var msgLen = strMaxCharacterCnt(smsTxt);
|
||||
var maxLenChar = 1000;
|
||||
|
||||
var imgType = $("#imageType").val();
|
||||
|
||||
//일반 이미지 첨부시 글자수 최대 400글자
|
||||
if(imgType == "I"){
|
||||
|
||||
maxLenChar = 400;
|
||||
|
||||
}else if(imgType == "W"){
|
||||
//와이드 이미지 첨부시 글자수 최대 76글자
|
||||
maxLenChar = 76;
|
||||
|
||||
}
|
||||
|
||||
if(msgLen < 1){
|
||||
|
||||
|
||||
}else if(msgLen > maxLenChar){
|
||||
|
||||
alert("친구톡 내용은 "+ maxLenChar +" 자를 넘을 수 없습니다.");
|
||||
tableL.clearData(); //기존 받는사람 목록을 삭제.
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//치환문자에 데이터가 누락된 경우 알림 메세지를 보여주고 받는사람 목록을 지워준다.
|
||||
/*if(!varValStatus){
|
||||
|
||||
alert("치환변수 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
|
||||
tableL.clearData(); //기존 받는사람 목록을 삭제.
|
||||
return false;
|
||||
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
//결제 금액 구하기
|
||||
totalFtPriceSum(tableL.getRows().length);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//오류 검사 버튼 처리
|
||||
$('.check_validity').click(function(){
|
||||
|
||||
var invalid = tableL.getInvalidCells(); //오류 데이터 체크
|
||||
var dataLen = tableL.getRows().length; //연락처 데이터 갯수
|
||||
var totLen = invalid.length; //오류 데이터 갯수
|
||||
var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수
|
||||
|
||||
if(dataLen > 0){ //연락처 정보가 있으면 수행
|
||||
|
||||
if(totLen > 0){ //내용에 오류가 있으면 수행
|
||||
|
||||
//오류 데이터 값 저장
|
||||
for(var i=0; i < totLen; i++){
|
||||
|
||||
var cellValue = invalid[i].getValue();
|
||||
|
||||
if(i == 0){
|
||||
|
||||
errMsg = cellValue;
|
||||
|
||||
}else{
|
||||
|
||||
errMsg = errMsg +", "+ cellValue;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(errMsg == "" || errMsg == null){
|
||||
|
||||
alert("내용에 오류가 있습니다.");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
alert(errMsg + "의 내용에 오류가 있습니다.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
alert("오류 데이터가 없습니다.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
alert("연락처를 입력해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
@ -70,27 +70,29 @@ function setContentsLengForFriends(contents){
|
||||
|
||||
}
|
||||
|
||||
|
||||
//제한글자수를 넘겼을 경우 최대 글자수까지 잘라주고 미리보기 및 글자수 표시처리
|
||||
if(conLeng > limitLeng){
|
||||
|
||||
var splicecon = strMaxLengthSubstring(contents, limitLeng-1);
|
||||
$('#inputTemplateContent').val(splicecon);
|
||||
return false;
|
||||
|
||||
}else{//현재 입력한 글자수 우측 하단에 표시해 주기
|
||||
|
||||
var repContent = "";
|
||||
repContent = contents.replace(/(?:\r\n|\r|\n)/g, '<br/>');
|
||||
|
||||
$('.nowChar').text(conLeng + " /");
|
||||
$('.totChar').text(" "+limitLeng);
|
||||
$('.template_text').show();
|
||||
if(repContent != ''){
|
||||
$('.template_text').html(repContent);
|
||||
}else{
|
||||
$('.template_text').html("내용 미리보기");
|
||||
}
|
||||
contents = splicecon;
|
||||
conLeng = strMaxCharacterCnt(contents);
|
||||
|
||||
}
|
||||
|
||||
var repContent = "";
|
||||
repContent = contents.replace(/(?:\r\n|\r|\n)/g, '<br/>');
|
||||
|
||||
$('.nowChar').text(conLeng + " /");
|
||||
$('.totChar').text(" "+limitLeng);
|
||||
$('.template_text').show();
|
||||
if(repContent != ''){
|
||||
$('.template_text').html(repContent);
|
||||
$('#smsTxtArea').val(
|
||||
$('.template_text').html().trim().replace(/(<br>|<br\/>|<br \/>)/g, '\r\n')
|
||||
);
|
||||
}else{
|
||||
$('.template_text').html("내용 미리보기");
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user