Merge branch 'master' of http://hylee@vcs.iten.co.kr:9999/hylee/mjon_git into advc
into advc
@b44427affa302495ab96f675c9246b57a7f273ea
+++ src/main/java/itn/com/cmm/MjonMsgSendVO.java
... | ... | @@ -0,0 +1,116 @@ |
| 1 | +package itn.com.cmm; | |
| 2 | + | |
| 3 | +import lombok.Getter; | |
| 4 | +import lombok.Setter; | |
| 5 | +import lombok.ToString; | |
| 6 | + | |
| 7 | +@Getter | |
| 8 | +@Setter | |
| 9 | +@ToString | |
| 10 | +public class MjonMsgSendVO{ | |
| 11 | + | |
| 12 | + | |
| 13 | + /** | |
| 14 | + * @description : 수신자번호 | |
| 15 | + */ | |
| 16 | + private String phone; | |
| 17 | + | |
| 18 | + /** | |
| 19 | + * @description : [*이름*] - 치환문자 | |
| 20 | + */ | |
| 21 | + private String name; | |
| 22 | + | |
| 23 | + /** | |
| 24 | + * @description : [*1*] - 치환문자 | |
| 25 | + */ | |
| 26 | + private String rep1; | |
| 27 | + | |
| 28 | + /** | |
| 29 | + * @description : [*2*] - 치환문자 | |
| 30 | + */ | |
| 31 | + private String rep2; | |
| 32 | + | |
| 33 | + /** | |
| 34 | + * @description : [*3*] - 치환문자 | |
| 35 | + */ | |
| 36 | + private String rep3; | |
| 37 | + | |
| 38 | + /** | |
| 39 | + * @description : [*4*] - 치환문자 | |
| 40 | + */ | |
| 41 | + private String rep4; | |
| 42 | + | |
| 43 | + /** | |
| 44 | + * @description : 문자ID | |
| 45 | + */ | |
| 46 | + private String msgId; | |
| 47 | + | |
| 48 | + /** | |
| 49 | + * @description : 전송그룹ID (대량문자의 경우 하나의 그룹으로 세팅) | |
| 50 | + */ | |
| 51 | + private String msgGroupId; | |
| 52 | + | |
| 53 | + /** | |
| 54 | + * @description : 문자온 일반회원ID | |
| 55 | + */ | |
| 56 | + private String userId; | |
| 57 | + | |
| 58 | + /** | |
| 59 | + * @description : 발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.) | |
| 60 | + */ | |
| 61 | + private String callFrom; | |
| 62 | + /** | |
| 63 | + * @description : 수신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.) | |
| 64 | + */ | |
| 65 | + private String callTo; | |
| 66 | + /** | |
| 67 | + * @description : 예약 발송일시 | |
| 68 | + */ | |
| 69 | + private String reqDate; | |
| 70 | + /** | |
| 71 | + * @description :전송사(04:다우, 05:JJ, 07:IVT, 01:아이하트 , 02:현대퓨처넷, 03:아이엠오) | |
| 72 | + */ | |
| 73 | + private String agentCode; | |
| 74 | + | |
| 75 | + /** | |
| 76 | + * @description : MMS용 메시지제목 | |
| 77 | + */ | |
| 78 | + private String subject; | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * @description : SMS용 메시지본문 | |
| 82 | + */ | |
| 83 | + private String smsTxt; | |
| 84 | + | |
| 85 | + /** | |
| 86 | + * @description : 메세지타입(4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송) | |
| 87 | + */ | |
| 88 | + private String msgType; | |
| 89 | + | |
| 90 | + /** | |
| 91 | + * @description : 첨부파일 갯수 | |
| 92 | + */ | |
| 93 | + private String fileCnt; | |
| 94 | + | |
| 95 | + /** | |
| 96 | + * @description : 파일이름1 | |
| 97 | + */ | |
| 98 | + private String filePath1; | |
| 99 | + | |
| 100 | + /** | |
| 101 | + * @description : 파일이름2 | |
| 102 | + */ | |
| 103 | + private String filePath2; | |
| 104 | + | |
| 105 | + /** | |
| 106 | + * @description : 파일이름3 | |
| 107 | + */ | |
| 108 | + private String filePath3; | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | +} |
--- src/main/java/itn/com/cmm/MjonMsgTabulVO.java
... | ... | @@ -1,20 +0,0 @@ |
| 1 | -package itn.com.cmm; | |
| 2 | - | |
| 3 | -import lombok.Getter; | |
| 4 | -import lombok.Setter; | |
| 5 | -import lombok.ToString; | |
| 6 | - | |
| 7 | -@Getter | |
| 8 | -@Setter | |
| 9 | -@ToString | |
| 10 | -public class MjonMsgTabulVO{ | |
| 11 | - | |
| 12 | - private static final long serialVersionUID = 1L; | |
| 13 | - | |
| 14 | - private String name; | |
| 15 | - private String phone; | |
| 16 | - private String rep1; | |
| 17 | - private String rep2; | |
| 18 | - private String rep3; | |
| 19 | - private String rep4; | |
| 20 | -} |
--- src/main/java/itn/com/cmm/util/MsgSendUtils.java
+++ src/main/java/itn/com/cmm/util/MsgSendUtils.java
... | ... | @@ -3,16 +3,23 @@ |
| 3 | 3 |
import java.io.UnsupportedEncodingException; |
| 4 | 4 |
import java.math.BigDecimal; |
| 5 | 5 |
import java.math.RoundingMode; |
| 6 |
+import java.util.HashMap; |
|
| 7 |
+import java.util.List; |
|
| 8 |
+import java.util.Map; |
|
| 6 | 9 |
import java.util.Objects; |
| 10 |
+import java.util.function.Function; |
|
| 11 |
+import java.util.regex.Matcher; |
|
| 12 |
+import java.util.regex.Pattern; |
|
| 7 | 13 |
import java.util.stream.Stream; |
| 8 | 14 |
|
| 9 | 15 |
import org.apache.commons.lang3.StringUtils; |
| 10 | 16 |
import org.springframework.beans.factory.annotation.Autowired; |
| 11 | 17 |
import org.springframework.http.HttpStatus; |
| 12 | 18 |
|
| 19 |
+import itn.com.cmm.MjonMsgSendVO; |
|
| 13 | 20 |
import itn.let.mail.service.StatusResponse; |
| 14 | 21 |
import itn.let.mjo.msg.service.MjonMsgVO; |
| 15 |
-import itn.let.mjo.msgdata.service.ReplacementListsVO; |
|
| 22 |
+import itn.let.mjo.spammsg.web.ComGetSpamStringParser; |
|
| 16 | 23 |
import itn.let.module.base.PriceAndPoint; |
| 17 | 24 |
import lombok.extern.slf4j.Slf4j; |
| 18 | 25 |
|
... | ... | @@ -30,6 +37,7 @@ |
| 30 | 37 |
* |
| 31 | 38 |
* |
| 32 | 39 |
*/ |
| 40 |
+@Slf4j |
|
| 33 | 41 |
public final class MsgSendUtils {
|
| 34 | 42 |
|
| 35 | 43 |
|
... | ... | @@ -50,6 +58,7 @@ |
| 50 | 58 |
String smsCont = smsTxt.replace("\r\n", "\n");
|
| 51 | 59 |
smsBytes = smsCont.getBytes(charset).length; |
| 52 | 60 |
} |
| 61 |
+ log.info(" + smsBytes :: [{}]", smsBytes);
|
|
| 53 | 62 |
return smsBytes; |
| 54 | 63 |
} |
| 55 | 64 |
|
... | ... | @@ -61,32 +70,33 @@ |
| 61 | 70 |
* @param mjonMsgVO |
| 62 | 71 |
* @param smsTxtByte |
| 63 | 72 |
* @return |
| 73 |
+ * @throws UnsupportedEncodingException |
|
| 64 | 74 |
*/ |
| 65 |
- public static String getMsgType(MjonMsgVO mjonMsgVO, int smsTxtByte) {
|
|
| 66 |
- String msgType = mjonMsgVO.getMsgType(); |
|
| 75 |
+ public static String getMsgTypeWithByteValidation(MjonMsgSendVO sendVO, String p_smsTxt) throws UnsupportedEncodingException {
|
|
| 76 |
+ |
|
| 77 |
+ |
|
| 78 |
+ int smsTxtByte = getSmsTxtBytes(p_smsTxt); |
|
| 79 |
+ String msgType = "4"; |
|
| 80 |
+ |
|
| 81 |
+ // // 내문자저장함에 저장 후 문자를 발송하는 경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함 |
|
| 82 |
+ // if ("P".equals(msgType) || "L".equals(msgType)) {
|
|
| 83 |
+ // msgType = "6"; |
|
| 84 |
+ // } else if ("S".equals(msgType)) {
|
|
| 85 |
+ // msgType = "4"; |
|
| 86 |
+ // } |
|
| 87 |
+ |
|
| 88 |
+ // 그림 이미지가 첨부된 경우 장문으로 설정 |
|
| 89 |
+ if (StringUtils.isNotEmpty(sendVO.getFilePath1())) {
|
|
| 90 |
+ msgType = "6"; |
|
| 91 |
+ } else if (smsTxtByte > 2000) {
|
|
| 92 |
+ // 2000 Byte를 초과할 경우 에러 처리 (이 부분은 호출부에서 검사하도록 유지할 수도 있음) |
|
| 93 |
+ return "INVALID"; // 이 값은 호출부에서 에러 처리를 하도록 활용할 수 있습니다. |
|
| 94 |
+ } else if (smsTxtByte > 90) {
|
|
| 95 |
+ // 90Byte 초과 시 장문으로 설정 |
|
| 96 |
+ msgType = "6"; |
|
| 97 |
+ } |
|
| 67 | 98 |
|
| 68 |
- // 내문자저장함에 저장 후 문자를 발송하는 경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함 |
|
| 69 |
- if ("P".equals(msgType) || "L".equals(msgType)) {
|
|
| 70 |
- msgType = "6"; |
|
| 71 |
- } else if ("S".equals(msgType)) {
|
|
| 72 |
- msgType = "4"; |
|
| 73 |
- } |
|
| 74 |
- |
|
| 75 |
- // 그림 이미지가 첨부된 경우 장문으로 설정 |
|
| 76 |
- if (mjonMsgVO.getFileName1() != null || (mjonMsgVO.getImgFilePath() != null && mjonMsgVO.getImgFilePath().length > 0)) {
|
|
| 77 |
- msgType = "6"; |
|
| 78 |
- } else if (smsTxtByte > 2000) {
|
|
| 79 |
- // 2000 Byte를 초과할 경우 에러 처리 (이 부분은 호출부에서 검사하도록 유지할 수도 있음) |
|
| 80 |
- return "INVALID"; // 이 값은 호출부에서 에러 처리를 하도록 활용할 수 있습니다. |
|
| 81 |
- } else if (smsTxtByte > 90) {
|
|
| 82 |
- // 90Byte 초과 시 장문으로 설정 |
|
| 83 |
- msgType = "6"; |
|
| 84 |
- } else {
|
|
| 85 |
- // 그 외 단문으로 설정 |
|
| 86 |
- msgType = "4"; |
|
| 87 |
- } |
|
| 88 |
- |
|
| 89 |
- return msgType; |
|
| 99 |
+ return msgType; |
|
| 90 | 100 |
} |
| 91 | 101 |
|
| 92 | 102 |
public static float getValidPrice(Float personalPrice, Float defaultPrice) {
|
... | ... | @@ -129,16 +139,32 @@ |
| 129 | 139 |
return price; |
| 130 | 140 |
} |
| 131 | 141 |
|
| 132 |
- public static boolean isReplacementRequired(MjonMsgVO mjonMsgVO) {
|
|
| 133 |
- return "Y".equals(mjonMsgVO.getTxtReplYn()); |
|
| 142 |
+ |
|
| 143 |
+ /** |
|
| 144 |
+ * @methodName : isReplacementRequired |
|
| 145 |
+ * @author : 이호영 |
|
| 146 |
+ * @date : 2024.11.12 |
|
| 147 |
+ * @description : 치환데이터가 있는지 확인 |
|
| 148 |
+ * @param mjonMsgVO |
|
| 149 |
+ * @return |
|
| 150 |
+ */ |
|
| 151 |
+ public static boolean isRepleasYN(MjonMsgVO mjonMsgVO) {
|
|
| 152 |
+ |
|
| 153 |
+ // 치환 구문 패턴 리스트 |
|
| 154 |
+ String[] placeholders = {"\\[\\*이름\\*\\]", "\\[\\*1\\*\\]", "\\[\\*2\\*\\]", "\\[\\*4\\*\\]", "\\[\\*3\\*\\]"};
|
|
| 155 |
+ |
|
| 156 |
+ for (String placeholder : placeholders) {
|
|
| 157 |
+ Pattern pattern = Pattern.compile(placeholder); |
|
| 158 |
+ Matcher matcher = pattern.matcher(mjonMsgVO.getSmsTxt()); |
|
| 159 |
+ // 해당 패턴이 존재하면 true 반환 |
|
| 160 |
+ if (matcher.find()) {
|
|
| 161 |
+ return true; |
|
| 162 |
+ } |
|
| 163 |
+ } |
|
| 164 |
+ return false; |
|
| 165 |
+ |
|
| 134 | 166 |
} |
| 135 | 167 |
|
| 136 |
- public static ReplacementListsVO createReplacementLists(MjonMsgVO mjonMsgVO) throws UnsupportedEncodingException {
|
|
| 137 |
- ReplacementListsVO lists = new ReplacementListsVO(); |
|
| 138 |
- lists.initializeLists(mjonMsgVO); // 배열을 초기화합니다. |
|
| 139 |
- return lists; |
|
| 140 |
-// return populateReplacementLists(mjonMsgVO, lists); // 데이터를 배열에 채웁니다. |
|
| 141 |
- } |
|
| 142 | 168 |
|
| 143 | 169 |
/** |
| 144 | 170 |
* @methodName : populateReplacementLists |
... | ... | @@ -149,73 +175,168 @@ |
| 149 | 175 |
* @param lists |
| 150 | 176 |
* @param statusResponse |
| 151 | 177 |
* @return |
| 152 |
- * @throws UnsupportedEncodingException |
|
| 178 |
+ * @throws Exception |
|
| 153 | 179 |
*/ |
| 154 |
- public static Boolean populateReplacementLists(MjonMsgVO mjonMsgVO, ReplacementListsVO lists, StatusResponse statusResponse){
|
|
| 180 |
+ public static Boolean populateSendLists(MjonMsgVO mjonMsgVO, List<MjonMsgSendVO> mjonMsgSendListVO, StatusResponse statusResponse, List<String> resultSpamTxt) throws Exception{
|
|
| 155 | 181 |
|
| 156 |
- |
|
| 157 |
- String[] nameList = mjonMsgVO.getNameList(); |
|
| 158 |
- String[] phone = mjonMsgVO.getCallToList(); |
|
| 159 |
- String[] rep1 = mjonMsgVO.getRep1List(); |
|
| 160 |
- String[] rep2 = mjonMsgVO.getRep2List(); |
|
| 161 |
- String[] rep3 = mjonMsgVO.getRep3List(); |
|
| 162 |
- String[] rep4 = mjonMsgVO.getRep4List(); |
|
| 163 |
- String smsTxt = mjonMsgVO.getSmsTxt(); |
|
| 164 |
- int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt()); |
|
| 165 |
- |
|
| 166 |
- // 이름 치환 |
|
| 167 |
- int shortCnt = 0; |
|
| 168 |
- int longCnt = 0; |
|
| 169 |
- int imgCnt = 0; |
|
| 170 |
- |
|
| 171 |
- |
|
| 172 |
- for (int i = 0; i < phone.length; i++) {
|
|
| 173 |
- |
|
| 174 |
- smsTxt = smsTxt.replaceAll(String.valueOf((char) 13), ""); |
|
| 175 |
- |
|
| 182 |
+ log.info(" :: populateSendLists :: ");
|
|
| 176 | 183 |
|
| 177 |
- // 이름 및 치환 문자 처리 |
|
| 178 |
- smsTxt = replacePlaceholder(smsTxt, "[*이름*]", nameList, i); |
|
| 179 |
- smsTxt = replacePlaceholder(smsTxt, "[*1*]", rep1, i); |
|
| 180 |
- smsTxt = replacePlaceholder(smsTxt, "[*2*]", rep2, i); |
|
| 181 |
- smsTxt = replacePlaceholder(smsTxt, "[*3*]", rep3, i); |
|
| 182 |
- smsTxt = replacePlaceholder(smsTxt, "[*4*]", rep4, i); |
|
| 183 |
- |
|
| 184 |
+ int spamChkSize = getSpamChkSize(mjonMsgSendListVO.size()); |
|
| 185 |
+ int sampleCounter = 0; |
|
| 184 | 186 |
|
| 185 |
- try {
|
|
| 186 |
- int bytes = getSmsTxtBytes(smsTxt); |
|
| 187 |
- if(bytes < 2000) {
|
|
| 188 |
- if(fileCount > 0) {
|
|
| 189 |
- populateImgLists(lists, nameList, phone, rep1, rep2, rep3, rep4, smsTxt, i); |
|
| 190 |
- imgCnt++; |
|
| 191 |
- |
|
| 192 |
- }else if(bytes > 90) {//장문문자 리스트 만들기
|
|
| 193 |
- populateLongLists(lists, nameList, phone, rep1, rep2, rep3, rep4, smsTxt, i); |
|
| 194 |
- longCnt++; |
|
| 195 |
- } else {//단문문자 리스트 만들기
|
|
| 196 |
- populateShortLists(lists, nameList, phone, rep1, rep2, rep3, rep4, smsTxt, i); |
|
| 197 |
- shortCnt++; |
|
| 187 |
+ String smsTxtTemp = mjonMsgVO.getSmsTxt(); |
|
| 188 |
+ |
|
| 189 |
+ // 치환 구문과 필드 getter 매핑 |
|
| 190 |
+ Map<String, Function<MjonMsgSendVO, String>> placeholders = new HashMap<>(); |
|
| 191 |
+ placeholders.put("[*이름*]", MjonMsgSendVO::getName);
|
|
| 192 |
+ placeholders.put("[*1*]", MjonMsgSendVO::getRep1);
|
|
| 193 |
+ placeholders.put("[*2*]", MjonMsgSendVO::getRep2);
|
|
| 194 |
+ placeholders.put("[*3*]", MjonMsgSendVO::getRep3);
|
|
| 195 |
+ placeholders.put("[*4*]", MjonMsgSendVO::getRep4);
|
|
| 196 |
+ |
|
| 197 |
+ boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 |
|
| 198 |
+ boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 |
|
| 199 |
+ Boolean replaceYN = getReplaceYN(smsTxtTemp); |
|
| 200 |
+ |
|
| 201 |
+ String msgTypeResult = null; |
|
| 202 |
+ |
|
| 203 |
+ for (MjonMsgSendVO sendVO : mjonMsgSendListVO) {
|
|
| 204 |
+ |
|
| 205 |
+ String smsTxt = smsTxtTemp; |
|
| 206 |
+ // 치환 문자면 |
|
| 207 |
+ if(replaceYN) {
|
|
| 208 |
+ |
|
| 209 |
+ // 각 치환 구문을 확인하고 치환할 값이 없으면 오류 반환 |
|
| 210 |
+ for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
|
|
| 211 |
+ String placeholder = entry.getKey(); |
|
| 212 |
+ String value = entry.getValue().apply(sendVO); |
|
| 213 |
+ if (smsTxtTemp.contains(placeholder)) {
|
|
| 214 |
+ if (StringUtils.isEmpty(value)) {
|
|
| 215 |
+ statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다."); |
|
| 216 |
+ return false; |
|
| 217 |
+ } |
|
| 218 |
+ smsTxt = smsTxtTemp.replace(placeholder, value); |
|
| 198 | 219 |
} |
| 199 |
- }else {
|
|
| 220 |
+ } |
|
| 221 |
+ } |
|
| 222 |
+ |
|
| 223 |
+ String smsSpamChkTxt = mjonMsgVO.getSmsTxt().replaceAll(String.valueOf((char) 13), ""); |
|
| 224 |
+ // 스팸문자 체크 |
|
| 225 |
+ // 치환문자가 아닐 경우 |
|
| 226 |
+ if (!replaceYN && !hasPerformedSpamCheck) {
|
|
| 227 |
+ checkSpamAndSetStatus(mjonMsgVO, smsSpamChkTxt, resultSpamTxt); |
|
| 228 |
+ hasPerformedSpamCheck = true; // 스팸 체크가 한 번만 수행되도록 설정 |
|
| 229 |
+ // 치환 문자가 있는 경우에는 spamChkSize 카운트까지만 수행 |
|
| 230 |
+ } else if (replaceYN && sampleCounter < spamChkSize && !"Y".equals(mjonMsgVO.getSpamStatus())) {
|
|
| 231 |
+ checkSpamAndSetStatus(mjonMsgVO, smsSpamChkTxt, resultSpamTxt); |
|
| 232 |
+ sampleCounter++; |
|
| 233 |
+ } |
|
| 234 |
+ log.info(" ++ smsTxt:: [{}]", smsTxt);
|
|
| 235 |
+ sendVO.setSmsTxt(smsTxt); |
|
| 236 |
+ |
|
| 237 |
+ // 이미지 셋팅 |
|
| 238 |
+ setImagePathsForMsgSendVO(mjonMsgVO, sendVO); |
|
| 239 |
+ |
|
| 240 |
+ |
|
| 241 |
+ // msgType 셋팅 및 문자열 체크 |
|
| 242 |
+ log.info(" + smsTxt :: [{}]", smsTxt);
|
|
| 243 |
+ if (!replaceYN && !hasPerformedMsgType) {
|
|
| 244 |
+ log.info(" 치환 X ");
|
|
| 245 |
+ // byte 체크와 msgType 구하기 |
|
| 246 |
+ msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt); |
|
| 247 |
+ if ("INVALID".equals(msgTypeResult)) {
|
|
| 200 | 248 |
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다."); |
| 201 | 249 |
return false; |
| 202 | 250 |
} |
| 203 |
- |
|
| 204 |
- } catch (UnsupportedEncodingException e) {
|
|
| 205 |
- statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 중 오류가 발생하였습니다."); |
|
| 206 |
- e.printStackTrace(); |
|
| 207 |
- return false; |
|
| 251 |
+ hasPerformedMsgType = true; // 스팸 체크가 한 번만 수행되도록 설정 |
|
| 252 |
+ }else if(replaceYN){
|
|
| 253 |
+ log.info(" 치환 O ");
|
|
| 254 |
+ // byte 체크와 msgType 구하기 |
|
| 255 |
+ msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt); |
|
| 256 |
+ if ("INVALID".equals(msgTypeResult)) {
|
|
| 257 |
+ statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다."); |
|
| 258 |
+ return false; |
|
| 259 |
+ } |
|
| 208 | 260 |
} |
| 261 |
+ |
|
| 262 |
+ sendVO.setMsgType(msgTypeResult); |
|
| 263 |
+ |
|
| 209 | 264 |
} |
| 210 |
- |
|
| 211 |
- lists.setShortCnt(shortCnt); |
|
| 212 |
- lists.setLongCnt(longCnt); |
|
| 213 |
- lists.setImgCnt(imgCnt); |
|
| 214 | 265 |
|
| 215 | 266 |
return true; |
| 216 | 267 |
|
| 217 | 268 |
} |
| 218 | 269 |
|
| 270 |
+ private static void setImagePathsForMsgSendVO(MjonMsgVO mjonMsgVO, MjonMsgSendVO sendVO) {
|
|
| 271 |
+ int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt()); |
|
| 272 |
+ |
|
| 273 |
+ switch (fileCount) {
|
|
| 274 |
+ case 3: |
|
| 275 |
+ sendVO.setFilePath3(mjonMsgVO.getFileName3()); |
|
| 276 |
+ case 2: |
|
| 277 |
+ sendVO.setFilePath2(mjonMsgVO.getFileName2()); |
|
| 278 |
+ case 1: |
|
| 279 |
+ sendVO.setFilePath1(mjonMsgVO.getFileName1()); |
|
| 280 |
+ break; |
|
| 281 |
+ default: |
|
| 282 |
+ // fileCount가 0이거나 설정할 파일이 없는 경우 |
|
| 283 |
+ break; |
|
| 284 |
+ } |
|
| 285 |
+ sendVO.setFileCnt(mjonMsgVO.getFileCnt()); |
|
| 286 |
+ } |
|
| 287 |
+ |
|
| 288 |
+ private static void checkSpamAndSetStatus(MjonMsgVO mjonMsgVO, String personalizedSmsTxt, List<String> resultSpamTxt) throws Exception {
|
|
| 289 |
+ String resultParser = ComGetSpamStringParser.getSpamTextParse(personalizedSmsTxt).trim(); |
|
| 290 |
+ int spmCnt = 0; |
|
| 291 |
+ |
|
| 292 |
+ for (String spmTxt : resultSpamTxt) {
|
|
| 293 |
+ String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim(); |
|
| 294 |
+ if (resultParser.contains(parserStr)) {
|
|
| 295 |
+ spmCnt++; |
|
| 296 |
+ } |
|
| 297 |
+ } |
|
| 298 |
+ |
|
| 299 |
+ if (spmCnt > 0) { // 스팸 문자가 포함된 경우
|
|
| 300 |
+ System.out.println("++++++++++++++ spam smsTxt ::: " + resultParser);
|
|
| 301 |
+ mjonMsgVO.setSpamStatus("Y");
|
|
| 302 |
+ }else {mjonMsgVO.setSpamStatus("N");}
|
|
| 303 |
+ } |
|
| 304 |
+ |
|
| 305 |
+ private static Boolean getReplaceYN(String smsTxtTemplate) {// 여러 치환 구문이 포함된 정규식 패턴
|
|
| 306 |
+ |
|
| 307 |
+ Boolean replaceYN = false; |
|
| 308 |
+ |
|
| 309 |
+ Pattern pattern = Pattern.compile("\\[\\*이름\\*\\]|\\[\\*1\\*\\]|\\[\\*2\\*\\]|\\[\\*3\\*\\]|\\[\\*4\\*\\]");
|
|
| 310 |
+ Matcher matcher = pattern.matcher(smsTxtTemplate); |
|
| 311 |
+ |
|
| 312 |
+ // 정규식 패턴에 해당하는 치환 구문이 존재하는지 확인 |
|
| 313 |
+ if (matcher.find()) {
|
|
| 314 |
+ replaceYN = true; |
|
| 315 |
+ } |
|
| 316 |
+ return replaceYN; |
|
| 317 |
+ } |
|
| 318 |
+ |
|
| 319 |
+ /** |
|
| 320 |
+ * @methodName : getSpamChkSize |
|
| 321 |
+ * @author : 이호영 |
|
| 322 |
+ * @date : 2024.11.13 |
|
| 323 |
+ * @description : 수신자 건수별로 스팸체크하는 갯수 설정 |
|
| 324 |
+ * @param size |
|
| 325 |
+ * @return |
|
| 326 |
+ */ |
|
| 327 |
+ private static int getSpamChkSize(int size) {
|
|
| 328 |
+ int chkSize = 1; // 기본 샘플 크기 |
|
| 329 |
+ |
|
| 330 |
+ // 수신자 수에 따른 샘플 크기 결정 |
|
| 331 |
+ if (size > 100 && size <= 1000) {
|
|
| 332 |
+ chkSize = 10; |
|
| 333 |
+ } else if (size > 1000) {
|
|
| 334 |
+ chkSize = 50; |
|
| 335 |
+ } |
|
| 336 |
+ |
|
| 337 |
+ return chkSize; |
|
| 338 |
+ } |
|
| 339 |
+ |
|
| 219 | 340 |
/** |
| 220 | 341 |
* 특정 플레이스홀더를 리스트에서 가져온 값으로 치환합니다. |
| 221 | 342 |
* |
... | ... | @@ -234,140 +355,6 @@ |
| 234 | 355 |
} |
| 235 | 356 |
} |
| 236 | 357 |
return smsTxt; |
| 237 |
- } |
|
| 238 |
- |
|
| 239 |
- private static void populateShortLists(ReplacementListsVO lists, String[] nameList, String[] phone, String[] rep1, |
|
| 240 |
- String[] rep2, String[] rep3, String[] rep4, String smsTxt, int i) {
|
|
| 241 |
- // 이름 치환 |
|
| 242 |
- if (smsTxt.contains("[*이름*]")) {
|
|
| 243 |
- if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
|
|
| 244 |
- lists.getShortNameList()[i] = StringUtil.getString(nameList[i].replaceAll("§", ","));
|
|
| 245 |
- } else {
|
|
| 246 |
- lists.getShortNameList()[i] = " "; |
|
| 247 |
- } |
|
| 248 |
- } else {
|
|
| 249 |
- lists.getShortNameList()[i] = getSafeValue(nameList, i); |
|
| 250 |
- } |
|
| 251 |
- |
|
| 252 |
- lists.getShortPhone()[i] = getSafeValue(phone, i); |
|
| 253 |
- |
|
| 254 |
- // 문자 1 치환 |
|
| 255 |
- if (smsTxt.contains("[*1*]")) {
|
|
| 256 |
- lists.getShortRep1()[i] = getReplacementValue(rep1, i, "[*1*]"); |
|
| 257 |
- } else {
|
|
| 258 |
- lists.getShortRep1()[i] = getSafeValue(rep1, i); |
|
| 259 |
- } |
|
| 260 |
- |
|
| 261 |
- // 문자 2 치환 |
|
| 262 |
- if (smsTxt.contains("[*2*]")) {
|
|
| 263 |
- lists.getShortRep2()[i] = getReplacementValue(rep2, i, "[*2*]"); |
|
| 264 |
- } else {
|
|
| 265 |
- lists.getShortRep2()[i] = getSafeValue(rep2, i); |
|
| 266 |
- } |
|
| 267 |
- |
|
| 268 |
- // 문자 3 치환 |
|
| 269 |
- if (smsTxt.contains("[*3*]")) {
|
|
| 270 |
- lists.getShortRep3()[i] = getReplacementValue(rep3, i, "[*3*]"); |
|
| 271 |
- } else {
|
|
| 272 |
- lists.getShortRep3()[i] = getSafeValue(rep3, i); |
|
| 273 |
- } |
|
| 274 |
- |
|
| 275 |
- // 문자 4 치환 |
|
| 276 |
- if (smsTxt.contains("[*4*]")) {
|
|
| 277 |
- lists.getShortRep4()[i] = getReplacementValue(rep4, i, "[*4*]"); |
|
| 278 |
- } else {
|
|
| 279 |
- lists.getShortRep4()[i] = getSafeValue(rep4, i); |
|
| 280 |
- } |
|
| 281 |
- } |
|
| 282 |
- |
|
| 283 |
- // 장문 리스트에 데이터를 채우는 메서드 |
|
| 284 |
- private static void populateLongLists(ReplacementListsVO lists, String[] nameList, String[] phone, String[] rep1, String[] rep2, String[] rep3, String[] rep4, String smsTxt, int i) {
|
|
| 285 |
- // 이름 치환 |
|
| 286 |
- if (smsTxt.contains("[*이름*]")) {
|
|
| 287 |
- if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
|
|
| 288 |
- lists.getLongNameList()[i] = StringUtil.getString(nameList[i].replaceAll("§", ","));
|
|
| 289 |
- } else {
|
|
| 290 |
- lists.getLongNameList()[i] = " "; |
|
| 291 |
- } |
|
| 292 |
- } else {
|
|
| 293 |
- lists.getLongNameList()[i] = getSafeValue(nameList, i); |
|
| 294 |
- } |
|
| 295 |
- |
|
| 296 |
- lists.getLongPhone()[i] = getSafeValue(phone, i); |
|
| 297 |
- |
|
| 298 |
- // 문자 1 치환 |
|
| 299 |
- if (smsTxt.contains("[*1*]")) {
|
|
| 300 |
- lists.getLongRep1()[i] = getReplacementValue(rep1, i, "[*1*]"); |
|
| 301 |
- } else {
|
|
| 302 |
- lists.getLongRep1()[i] = getSafeValue(rep1, i); |
|
| 303 |
- } |
|
| 304 |
- |
|
| 305 |
- // 문자 2 치환 |
|
| 306 |
- if (smsTxt.contains("[*2*]")) {
|
|
| 307 |
- lists.getLongRep2()[i] = getReplacementValue(rep2, i, "[*2*]"); |
|
| 308 |
- } else {
|
|
| 309 |
- lists.getLongRep2()[i] = getSafeValue(rep2, i); |
|
| 310 |
- } |
|
| 311 |
- |
|
| 312 |
- // 문자 3 치환 |
|
| 313 |
- if (smsTxt.contains("[*3*]")) {
|
|
| 314 |
- lists.getLongRep3()[i] = getReplacementValue(rep3, i, "[*3*]"); |
|
| 315 |
- } else {
|
|
| 316 |
- lists.getLongRep3()[i] = getSafeValue(rep3, i); |
|
| 317 |
- } |
|
| 318 |
- |
|
| 319 |
- // 문자 4 치환 |
|
| 320 |
- if (smsTxt.contains("[*4*]")) {
|
|
| 321 |
- lists.getLongRep4()[i] = getReplacementValue(rep4, i, "[*4*]"); |
|
| 322 |
- } else {
|
|
| 323 |
- lists.getLongRep4()[i] = getSafeValue(rep4, i); |
|
| 324 |
- } |
|
| 325 |
- } |
|
| 326 |
- |
|
| 327 |
- // 그림 문자 리스트에 데이터를 채우는 메서드 |
|
| 328 |
- private static void populateImgLists(ReplacementListsVO lists, String[] nameList, String[] phone, String[] rep1, String[] rep2, String[] rep3, String[] rep4, String smsTxt, int i) {
|
|
| 329 |
- |
|
| 330 |
- // 이름 치환 |
|
| 331 |
- if (smsTxt.contains("[*이름*]")) {
|
|
| 332 |
- if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
|
|
| 333 |
- lists.getImgNameList()[i] = StringUtil.getString(nameList[i].replaceAll("§", ","));
|
|
| 334 |
- } else {
|
|
| 335 |
- lists.getImgNameList()[i] = " "; |
|
| 336 |
- } |
|
| 337 |
- } else {
|
|
| 338 |
- lists.getImgNameList()[i] = getSafeValue(nameList, i); |
|
| 339 |
- } |
|
| 340 |
- |
|
| 341 |
- lists.getImgPhone()[i] = getSafeValue(phone, i); |
|
| 342 |
- |
|
| 343 |
- // 문자 1 치환 |
|
| 344 |
- if (smsTxt.contains("[*1*]")) {
|
|
| 345 |
- lists.getImgRep1()[i] = getReplacementValue(rep1, i, "[*1*]"); |
|
| 346 |
- } else {
|
|
| 347 |
- lists.getImgRep1()[i] = getSafeValue(rep1, i); |
|
| 348 |
- } |
|
| 349 |
- |
|
| 350 |
- // 문자 2 치환 |
|
| 351 |
- if (smsTxt.contains("[*2*]")) {
|
|
| 352 |
- lists.getImgRep2()[i] = getReplacementValue(rep2, i, "[*2*]"); |
|
| 353 |
- } else {
|
|
| 354 |
- lists.getImgRep2()[i] = getSafeValue(rep2, i); |
|
| 355 |
- } |
|
| 356 |
- |
|
| 357 |
- // 문자 3 치환 |
|
| 358 |
- if (smsTxt.contains("[*3*]")) {
|
|
| 359 |
- lists.getImgRep3()[i] = getReplacementValue(rep3, i, "[*3*]"); |
|
| 360 |
- } else {
|
|
| 361 |
- lists.getImgRep3()[i] = getSafeValue(rep3, i); |
|
| 362 |
- } |
|
| 363 |
- |
|
| 364 |
- // 문자 4 치환 |
|
| 365 |
- if (smsTxt.contains("[*4*]")) {
|
|
| 366 |
- lists.getImgRep4()[i] = getReplacementValue(rep4, i, "[*4*]"); |
|
| 367 |
- } else {
|
|
| 368 |
- lists.getImgRep4()[i] = getSafeValue(rep4, i); |
|
| 369 |
- } |
|
| 370 |
- |
|
| 371 | 358 |
} |
| 372 | 359 |
|
| 373 | 360 |
// 배열 인덱스를 안전하게 접근하는 메서드 |
... | ... | @@ -412,54 +399,27 @@ |
| 412 | 399 |
* @date : 2024.09.25 |
| 413 | 400 |
* @description : 치환문자가 사용될 때 데이터가 올바른지 확인하는 메서드 |
| 414 | 401 |
* @param mjonMsgVO |
| 415 |
- * @param statusResponse |
|
| 402 |
+ * @param list |
|
| 416 | 403 |
* @return boolean |
| 417 | 404 |
*/ |
| 418 |
- public static boolean validateReplacementData(MjonMsgVO mjonMsgVO, StatusResponse statusResponse) {
|
|
| 419 |
- String[] nameList = mjonMsgVO.getNameList(); |
|
| 420 |
- String[] phone = mjonMsgVO.getCallToList(); |
|
| 421 |
- String[] rep1 = mjonMsgVO.getRep1List(); |
|
| 422 |
- String[] rep2 = mjonMsgVO.getRep2List(); |
|
| 423 |
- String[] rep3 = mjonMsgVO.getRep3List(); |
|
| 424 |
- String[] rep4 = mjonMsgVO.getRep4List(); |
|
| 425 |
- |
|
| 426 |
- // 치환 문자 리스트가 모두 비어있는지 확인 |
|
| 427 |
- if (isEmpty(nameList) |
|
| 428 |
- && isEmpty(rep1) |
|
| 429 |
- && isEmpty(rep2) |
|
| 430 |
- && isEmpty(rep3) |
|
| 431 |
- && isEmpty(rep4)) {
|
|
| 432 |
- statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "특정문구 일괄변환 치환문자 데이터가 없습니다."); |
|
| 433 |
- return false; |
|
| 434 |
- } |
|
| 435 |
- |
|
| 436 |
- // 치환 문자 필드 개수와 전화번호 개수가 일치하는지 확인 |
|
| 437 |
- boolean isRepCountOk = true; |
|
| 438 |
- |
|
| 439 |
- if (mjonMsgVO.getSmsTxt().contains("[*이름*]") && nameList.length != phone.length) {
|
|
| 440 |
- isRepCountOk = false; |
|
| 441 |
- } |
|
| 442 |
- if (mjonMsgVO.getSmsTxt().contains("[*1*]") && rep1.length != phone.length) {
|
|
| 443 |
- isRepCountOk = false; |
|
| 444 |
- } |
|
| 445 |
- if (mjonMsgVO.getSmsTxt().contains("[*2*]") && rep2.length != phone.length) {
|
|
| 446 |
- isRepCountOk = false; |
|
| 447 |
- } |
|
| 448 |
- if (mjonMsgVO.getSmsTxt().contains("[*3*]") && rep3.length != phone.length) {
|
|
| 449 |
- isRepCountOk = false; |
|
| 450 |
- } |
|
| 451 |
- if (mjonMsgVO.getSmsTxt().contains("[*4*]") && rep4.length != phone.length) {
|
|
| 452 |
- isRepCountOk = false; |
|
| 453 |
- } |
|
| 454 |
- |
|
| 455 |
- // 필드 개수가 일치하지 않는 경우 에러 메시지 반환 |
|
| 456 |
- if (!isRepCountOk) {
|
|
| 457 |
- statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "특정문구 일괄변환 치환문자 데이터가 일치하지 않습니다."); |
|
| 458 |
- return false; |
|
| 459 |
- } |
|
| 460 |
- |
|
| 461 |
- return true; // 모든 유효성 검사를 통과한 경우 |
|
| 462 |
- } |
|
| 405 |
+ /* |
|
| 406 |
+ * public static boolean validateReplacementData(MjonMsgVO mjonMsgVO, |
|
| 407 |
+ * List<MjonMsgSendVO> list) { // 치환 구문과 필드 getter 매핑 Map<String,
|
|
| 408 |
+ * Function<MjonMsgSendVO, String>> placeholders = new HashMap<>(); |
|
| 409 |
+ * placeholders.put("\\[\\*이름\\*\\]", MjonMsgSendVO::getName);
|
|
| 410 |
+ * placeholders.put("\\[\\*1\\*\\]", MjonMsgSendVO::getRep1);
|
|
| 411 |
+ * placeholders.put("\\[\\*2\\*\\]", MjonMsgSendVO::getRep2);
|
|
| 412 |
+ * placeholders.put("\\[\\*3\\*\\]", MjonMsgSendVO::getRep3);
|
|
| 413 |
+ * placeholders.put("\\[\\*4\\*\\]", MjonMsgSendVO::getRep4);
|
|
| 414 |
+ * |
|
| 415 |
+ * // smsTxt 에서 필요한 치환 구문이 포함되어 있는지 확인 String smsTxt = mjonMsgVO.getSmsTxt(); |
|
| 416 |
+ * for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : |
|
| 417 |
+ * placeholders.entrySet()) { if
|
|
| 418 |
+ * (Pattern.compile(entry.getKey()).matcher(smsTxt).find()) { // 해당 치환 구문이 존재할
|
|
| 419 |
+ * 경우 모든 수신자에서 필드 값 확인 for (MjonMsgSendVO recipient : list) { if
|
|
| 420 |
+ * (StringUtils.isEmpty(entry.getValue().apply(recipient))) { return false; //
|
|
| 421 |
+ * 데이터가 없는 경우 } } } } // 모든 치환 구문이 유효한 데이터를 가지고 있으면 true 반환 return true; } |
|
| 422 |
+ */ |
|
| 463 | 423 |
|
| 464 | 424 |
// 배열이 비어있는지 확인하는 메서드 |
| 465 | 425 |
public static boolean isEmpty(String[] array) {
|
--- src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
+++ src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
... | ... | @@ -149,6 +149,7 @@ |
| 149 | 149 |
private String bizKakaoResendOrgnlTxt; /* 대체 문자( 치환X ) */ |
| 150 | 150 |
private String bizKakaoResendYn; /* 대체 문자 사용 여부*/ |
| 151 | 151 |
private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */ |
| 152 |
+ private String bizKakaoJsonFile; //카카오 친구톡 Json 파일 경로 |
|
| 152 | 153 |
|
| 153 | 154 |
|
| 154 | 155 |
public String getMsgDiv() {
|
... | ... | @@ -1266,5 +1267,11 @@ |
| 1266 | 1267 |
public void setBizKakaoResendType(String bizKakaoResendType) {
|
| 1267 | 1268 |
this.bizKakaoResendType = bizKakaoResendType; |
| 1268 | 1269 |
} |
| 1270 |
+ public String getBizKakaoJsonFile() {
|
|
| 1271 |
+ return bizKakaoJsonFile; |
|
| 1272 |
+ } |
|
| 1273 |
+ public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
|
|
| 1274 |
+ this.bizKakaoJsonFile = bizKakaoJsonFile; |
|
| 1275 |
+ } |
|
| 1269 | 1276 |
|
| 1270 | 1277 |
} |
--- src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoATController.java
+++ src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoATController.java
... | ... | @@ -851,6 +851,7 @@ |
| 851 | 851 |
kakaoVO.setPage(Integer.toString(channelIDVO.getPageIndex())); |
| 852 | 852 |
kakaoVO.setKeyword(channelIDVO.getSearchKeyword()); |
| 853 | 853 |
kakaoVO.setUserId(channelIDVO.getUserId()); |
| 854 |
+ kakaoVO.setYellowId(channelIDVO.getYellowId()); |
|
| 854 | 855 |
|
| 855 | 856 |
String templateStatus = channelIDVO.getTemplateStatus(); |
| 856 | 857 |
String keyword = channelIDVO.getSearchKeyword(); |
--- src/main/java/itn/let/kakao/admin/kakaoFt/web/MjonKakaoFTController.java
+++ src/main/java/itn/let/kakao/admin/kakaoFt/web/MjonKakaoFTController.java
... | ... | @@ -13,14 +13,21 @@ |
| 13 | 13 |
import org.springframework.web.bind.annotation.RequestMapping; |
| 14 | 14 |
import org.springframework.web.servlet.HandlerMapping; |
| 15 | 15 |
|
| 16 |
+import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
|
| 16 | 17 |
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; |
| 18 |
+import itn.com.cmm.LoginVO; |
|
| 17 | 19 |
import itn.com.cmm.service.FileVO; |
| 18 | 20 |
import itn.com.cmm.util.StringUtil; |
| 21 |
+import itn.let.kakao.admin.kakaoAt.service.ChannelIDVO; |
|
| 19 | 22 |
import itn.let.kakao.admin.kakaoFt.service.MjonKakaoFTService; |
| 20 | 23 |
import itn.let.kakao.admin.kakaoFt.service.MjonKakaoFTVO; |
| 24 |
+import itn.let.kakao.kakaoComm.KakaoVO; |
|
| 25 |
+import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; |
|
| 26 |
+import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService; |
|
| 21 | 27 |
import itn.let.mjo.msg.service.MjonMsgResultCodeVO; |
| 22 | 28 |
import itn.let.mjo.msg.service.MjonMsgService; |
| 23 | 29 |
import itn.let.mjo.reservmsg.service.MjonReservMsgService; |
| 30 |
+import itn.let.utl.fcc.service.EgovStringUtil; |
|
| 24 | 31 |
|
| 25 | 32 |
/** |
| 26 | 33 |
* |
... | ... | @@ -51,6 +58,12 @@ |
| 51 | 58 |
|
| 52 | 59 |
@Resource(name = "MjonReservMsgService") |
| 53 | 60 |
private MjonReservMsgService mjonReservMsgService; |
| 61 |
+ |
|
| 62 |
+ @Resource(name = "kakaoFriendsTalkTemplateService") |
|
| 63 |
+ private KakaoFriendsTalkTemplateService kakaoFtTemplateService; |
|
| 64 |
+ |
|
| 65 |
+ @Resource(name = "kakaoApiService") |
|
| 66 |
+ private KakaoApiService kakaoApiService; |
|
| 54 | 67 |
|
| 55 | 68 |
/* |
| 56 | 69 |
@Resource(name = "EgovCmmUseService") |
... | ... | @@ -501,6 +514,125 @@ |
| 501 | 514 |
return "/uss/ion/kakaoft/ReserveKakaoFTModify"; |
| 502 | 515 |
} |
| 503 | 516 |
|
| 517 |
+ |
|
| 518 |
+ /** |
|
| 519 |
+ * 채널 아이디별 등록 친구톡 템플릿 목록 팝업화면 관리자페이지 |
|
| 520 |
+ * @param ChannelIDVO |
|
| 521 |
+ * @param request |
|
| 522 |
+ * @param model |
|
| 523 |
+ * @return |
|
| 524 |
+ * @throws Exception |
|
| 525 |
+ */ |
|
| 526 |
+ @RequestMapping("/uss/ion/kakaoft/KakaoFTChannelIDTemplateListPopupAjax.do")
|
|
| 527 |
+ public String KakaoFTChannelIDTemplateListPopupAjax(@ModelAttribute("searchVO") ChannelIDVO channelIDVO,
|
|
| 528 |
+ HttpServletRequest request , |
|
| 529 |
+ ModelMap model) throws Exception {
|
|
| 530 |
+ |
|
| 531 |
+ |
|
| 532 |
+ try {
|
|
| 533 |
+ |
|
| 534 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 535 |
+ String id = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 536 |
+ if(id == "") {
|
|
| 537 |
+ return "redirect:/uat/uia/EgovLoginUsr.do"; |
|
| 538 |
+ } |
|
| 539 |
+ |
|
| 540 |
+ KakaoVO kakaoVO = new KakaoVO(); |
|
| 541 |
+ |
|
| 542 |
+ //페이징 처리 |
|
| 543 |
+ PaginationInfo paginationInfo = new PaginationInfo(); |
|
| 544 |
+ paginationInfo.setCurrentPageNo(channelIDVO.getPageIndex()); |
|
| 545 |
+ paginationInfo.setRecordCountPerPage(9); |
|
| 546 |
+ paginationInfo.setPageSize(channelIDVO.getPageSize()); |
|
| 547 |
+ |
|
| 548 |
+ kakaoVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); |
|
| 549 |
+ kakaoVO.setLastIndex(paginationInfo.getLastRecordIndex()); |
|
| 550 |
+ kakaoVO.setRecordCountPerPage(9); |
|
| 551 |
+ |
|
| 552 |
+ kakaoVO.setSenderKey(channelIDVO.getSenderKey()); |
|
| 553 |
+ kakaoVO.setPage(Integer.toString(channelIDVO.getPageIndex())); |
|
| 554 |
+ kakaoVO.setSearchKeyword(channelIDVO.getSearchKeyword()); |
|
| 555 |
+ kakaoVO.setUserId(channelIDVO.getUserId()); |
|
| 556 |
+ |
|
| 557 |
+ String templateStatus = channelIDVO.getTemplateStatus(); |
|
| 558 |
+ String keyword = channelIDVO.getSearchKeyword(); |
|
| 559 |
+ |
|
| 560 |
+ /*if(keyword != null && keyword != "") {
|
|
| 561 |
+ kakaoVO.setSearchKeyword(keyword); |
|
| 562 |
+ }else {
|
|
| 563 |
+ kakaoVO.setSearchKeyword("");
|
|
| 564 |
+ }*/ |
|
| 565 |
+ |
|
| 566 |
+ if("".equals(kakaoVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
|
| 567 |
+ kakaoVO.setSearchSortCnd("friendId");
|
|
| 568 |
+ kakaoVO.setSearchSortOrd("desc");
|
|
| 569 |
+ } |
|
| 570 |
+ |
|
| 571 |
+ //채널 아이디 정보 |
|
| 572 |
+ String yellowId = kakaoVO.getYellowId(); |
|
| 573 |
+ |
|
| 574 |
+ kakaoVO.setCount("9"); //페이지 별 템플릿 개수 9개로
|
|
| 575 |
+ List<KakaoVO> kakaoTemplateInfoList = new ArrayList<KakaoVO>(); |
|
| 576 |
+ kakaoTemplateInfoList = kakaoFtTemplateService.selectKakaoFriendsTemplateList(kakaoVO); |
|
| 577 |
+ |
|
| 578 |
+ model.addAttribute("kakaoVO", kakaoVO);
|
|
| 579 |
+ model.addAttribute("paginationInfo", paginationInfo);
|
|
| 580 |
+ model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList); //친구톡 템플릿 리스트
|
|
| 581 |
+ paginationInfo.setTotalRecordCount(kakaoTemplateInfoList.size() > 0 ? ((KakaoVO)kakaoTemplateInfoList.get(0)).getTotCnt() : 0); |
|
| 582 |
+ |
|
| 583 |
+ } catch (Exception e) {
|
|
| 584 |
+ System.out.println("KakaoFTChannelIDTemplateListPopupAjax Contrller Error ::: " + e);
|
|
| 585 |
+ } |
|
| 586 |
+ |
|
| 587 |
+ return "uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateListPop"; |
|
| 588 |
+ } |
|
| 589 |
+ |
|
| 590 |
+ /** |
|
| 591 |
+ * 채널 아이디별 등록 친구톡 템플릿 상세내용 팝업화면 관리자페이지 |
|
| 592 |
+ * @param ChannelIDVO |
|
| 593 |
+ * @param request |
|
| 594 |
+ * @param model |
|
| 595 |
+ * @return |
|
| 596 |
+ * @throws Exception |
|
| 597 |
+ */ |
|
| 598 |
+ @RequestMapping("/uss/ion/kakaoft/KakaoFTChannelIDTemplateDetailPopupAjax.do")
|
|
| 599 |
+ public String KakaoFTChannelIDTemplateDetailPopupAjax(@ModelAttribute("searchVO") ChannelIDVO channelIDVO,
|
|
| 600 |
+ HttpServletRequest request , |
|
| 601 |
+ ModelMap model) throws Exception {
|
|
| 602 |
+ |
|
| 603 |
+ |
|
| 604 |
+ try {
|
|
| 605 |
+ |
|
| 606 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 607 |
+ String id = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 608 |
+ if(id == "") {
|
|
| 609 |
+ return "redirect:/uat/uia/EgovLoginUsr.do"; |
|
| 610 |
+ } |
|
| 611 |
+ |
|
| 612 |
+ KakaoVO kakaoVO = new KakaoVO(); |
|
| 613 |
+ kakaoVO.setSenderKey(channelIDVO.getSenderKey()); |
|
| 614 |
+ kakaoVO.setFriendId(channelIDVO.getTemplateCode()); |
|
| 615 |
+ kakaoVO.setUserId(channelIDVO.getUserId()); |
|
| 616 |
+ |
|
| 617 |
+ String senderKey = kakaoVO.getSenderKey(); |
|
| 618 |
+ model.addAttribute("senderKey", senderKey);
|
|
| 619 |
+ |
|
| 620 |
+ //친구톡 템플릿 조회하기 |
|
| 621 |
+ KakaoVO resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO); |
|
| 622 |
+ model.addAttribute("resultTemplateVO", resultTemplateVO);
|
|
| 623 |
+ |
|
| 624 |
+ // 사용자 아이디를 이용한 발신프로필 조회 |
|
| 625 |
+ kakaoVO.setUserId(channelIDVO.getUserId()); |
|
| 626 |
+ List<KakaoVO> selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); |
|
| 627 |
+ model.addAttribute("kakaoProfileList", selectKakaoProfileList);
|
|
| 628 |
+ |
|
| 629 |
+ } catch (Exception e) {
|
|
| 630 |
+ System.out.println("KakaoFTChannelIDTemplateDetailPopupAjax Contrller Error ::: " + e);
|
|
| 631 |
+ } |
|
| 632 |
+ |
|
| 633 |
+ return "uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateDetailPop"; |
|
| 634 |
+ } |
|
| 635 |
+ |
|
| 504 | 636 |
/** |
| 505 | 637 |
* 카톡 전송사 발송 결과 코드 리스트 |
| 506 | 638 |
* @param MjonMsgResultCodeVO |
--- src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
... | ... | @@ -12,6 +12,7 @@ |
| 12 | 12 |
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave; |
| 13 | 13 |
import itn.let.mjo.msg.service.MjonMsgVO; |
| 14 | 14 |
import itn.let.mjo.msgdata.service.MjonMsgDataService; |
| 15 |
+import itn.let.mjo.spammsg.web.ComGetSpamStringParser; |
|
| 15 | 16 |
import itn.let.sym.site.service.JoinSettingVO; |
| 16 | 17 |
import itn.let.uss.umt.service.MberManageVO; |
| 17 | 18 |
|
... | ... | @@ -149,6 +150,134 @@ |
| 149 | 150 |
return kakaoVO; |
| 150 | 151 |
} |
| 151 | 152 |
|
| 153 |
+ |
|
| 154 |
+ /** |
|
| 155 |
+ * @Method Name : kakaoFTSendPrice |
|
| 156 |
+ * @작성일 : 2024. 1. 17. |
|
| 157 |
+ * @작성자 : WYH |
|
| 158 |
+ * @Method 설명 : 카카오 친구톡 전송 가격 설정 |
|
| 159 |
+ */ |
|
| 160 |
+ public KakaoVO kakaoFTSendPrice(KakaoVO kakaoVO) throws Exception {
|
|
| 161 |
+ |
|
| 162 |
+ //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) |
|
| 163 |
+ String befCash = kakaoVO.getBefCash(); |
|
| 164 |
+ |
|
| 165 |
+ //VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 |
|
| 166 |
+ if("".equals(befCash) || befCash == null) {
|
|
| 167 |
+ |
|
| 168 |
+ } |
|
| 169 |
+ MjonMsgVO mjonMsgVO = new MjonMsgVO(); |
|
| 170 |
+ mjonMsgVO.setUserId(kakaoVO.getUserId()); |
|
| 171 |
+ String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); |
|
| 172 |
+ String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); |
|
| 173 |
+ |
|
| 174 |
+ //1.시스템 기본 단가 정보 불러오기 |
|
| 175 |
+ JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); |
|
| 176 |
+ |
|
| 177 |
+ //2.사용자 개인 단가 정보 불러오기 |
|
| 178 |
+ MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId()); |
|
| 179 |
+ Float kakaoFtPrice = mberManageVO.getKakaoFtPrice(); |
|
| 180 |
+ |
|
| 181 |
+ /** 대체문자 여부 체크(있으면 대체문자 가격으로 없으면 카카오톡 가격으로) */ |
|
| 182 |
+ //대체문자 발송 여부 확인 |
|
| 183 |
+ if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
|
| 184 |
+ |
|
| 185 |
+ |
|
| 186 |
+ String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 |
|
| 187 |
+ int callToCnt = kakaoVO.getCallToList().length; |
|
| 188 |
+ String sendType = ""; |
|
| 189 |
+ |
|
| 190 |
+ for(int count =0; count < callToCnt; count++) {
|
|
| 191 |
+ String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
|
|
| 192 |
+ if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
|
|
| 193 |
+ tempSubMagTxt = kakaoFTSubMagTxtRepl(tempSubMagTxt, kakaoVO, count); |
|
| 194 |
+ } |
|
| 195 |
+ int bytes = tempSubMagTxt.getBytes(charset).length; |
|
| 196 |
+ |
|
| 197 |
+ if(bytes < 2000) {
|
|
| 198 |
+ if(bytes > 90) {
|
|
| 199 |
+ sendType = "MMS"; |
|
| 200 |
+ break; |
|
| 201 |
+ }else {
|
|
| 202 |
+ sendType = "SMS"; |
|
| 203 |
+ } |
|
| 204 |
+ }else {
|
|
| 205 |
+ kakaoVO.setResultCode("2000");
|
|
| 206 |
+ return kakaoVO; |
|
| 207 |
+ } |
|
| 208 |
+ } |
|
| 209 |
+ |
|
| 210 |
+ if(sendType.equals("MMS")) {
|
|
| 211 |
+ //협의 단가가 없으면 시스템 단가로 지정 |
|
| 212 |
+ if(mberManageVO.getLongPrice() < 1) {
|
|
| 213 |
+ kakaoFtPrice = sysJoinSetVO.getLongPrice(); |
|
| 214 |
+ |
|
| 215 |
+ kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice()); |
|
| 216 |
+ kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice()); |
|
| 217 |
+ kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice()); |
|
| 218 |
+ }else {
|
|
| 219 |
+ kakaoFtPrice = mberManageVO.getLongPrice(); |
|
| 220 |
+ |
|
| 221 |
+ kakaoVO.setSmsPrice(mberManageVO.getShortPrice()); |
|
| 222 |
+ kakaoVO.setMmsPrice(mberManageVO.getLongPrice()); |
|
| 223 |
+ |
|
| 224 |
+ if(mberManageVO.getKakaoFtPrice() < 1) {
|
|
| 225 |
+ kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice()); |
|
| 226 |
+ }else {
|
|
| 227 |
+ kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice()); |
|
| 228 |
+ } |
|
| 229 |
+ } |
|
| 230 |
+ }else {
|
|
| 231 |
+ //협의 단가가 없으면 시스템 단가로 지정 |
|
| 232 |
+ if(mberManageVO.getShortPrice() < 1) {
|
|
| 233 |
+ kakaoFtPrice = sysJoinSetVO.getShortPrice(); |
|
| 234 |
+ |
|
| 235 |
+ kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice()); |
|
| 236 |
+ kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice()); |
|
| 237 |
+ kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice()); |
|
| 238 |
+ }else {
|
|
| 239 |
+ kakaoFtPrice = mberManageVO.getShortPrice(); |
|
| 240 |
+ |
|
| 241 |
+ kakaoVO.setSmsPrice(mberManageVO.getShortPrice()); |
|
| 242 |
+ kakaoVO.setMmsPrice(mberManageVO.getLongPrice()); |
|
| 243 |
+ |
|
| 244 |
+ if(mberManageVO.getKakaoFtPrice() < 1) {
|
|
| 245 |
+ kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice()); |
|
| 246 |
+ }else {
|
|
| 247 |
+ kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice()); |
|
| 248 |
+ } |
|
| 249 |
+ } |
|
| 250 |
+ } |
|
| 251 |
+ }else {
|
|
| 252 |
+ |
|
| 253 |
+ if(kakaoFtPrice < 1) { //협의 단가가 없으면 시스템 단가로 지정
|
|
| 254 |
+ kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice(); |
|
| 255 |
+ |
|
| 256 |
+ kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice()); |
|
| 257 |
+ kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice()); |
|
| 258 |
+ kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice()); |
|
| 259 |
+ }else {
|
|
| 260 |
+ kakaoVO.setSmsPrice(mberManageVO.getShortPrice()); |
|
| 261 |
+ kakaoVO.setMmsPrice(mberManageVO.getLongPrice()); |
|
| 262 |
+ kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice()); |
|
| 263 |
+ } |
|
| 264 |
+ } |
|
| 265 |
+ |
|
| 266 |
+ /** 전송인원 확인*/ |
|
| 267 |
+ int totCallCnt = kakaoVO.getCallToList().length; |
|
| 268 |
+ Float kakaoTotPrice = totCallCnt * kakaoFtPrice; // 총결제 금액 = 총 전송수량 * 카카오 친구톡 단가 |
|
| 269 |
+ String totPrice = kakaoTotPrice.toString(); |
|
| 270 |
+ System.out.println("@@@@@@@ : "+kakaoTotPrice +" = "+totCallCnt+" * "+kakaoFtPrice);
|
|
| 271 |
+ |
|
| 272 |
+ kakaoVO.setEachPrice(kakaoFtPrice.toString()); |
|
| 273 |
+ kakaoVO.setBefCash(userMoney); // 고객 충전금액 |
|
| 274 |
+ kakaoVO.setBefPoint(userPoint); // 고객 충전 포인트 |
|
| 275 |
+ kakaoVO.setTotPrice(totPrice); // 총 카카오 전송 금액 |
|
| 276 |
+ |
|
| 277 |
+ return kakaoVO; |
|
| 278 |
+ } |
|
| 279 |
+ |
|
| 280 |
+ |
|
| 152 | 281 |
/** |
| 153 | 282 |
* @methodName : selectSendPriceOfKakaoAtAndSmsAndMms |
| 154 | 283 |
* @author : 이호영 |
... | ... | @@ -170,6 +299,10 @@ |
| 170 | 299 |
// 사용자 개인 단가가 없으면 시스템 단가로 |
| 171 | 300 |
if(mberManageVO.getKakaoAtPrice() == 0.0f) |
| 172 | 301 |
mberManageVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice()); |
| 302 |
+ |
|
| 303 |
+ //카카오 친구톡 개인 단가가 없는 경우 시스템 단가로 |
|
| 304 |
+ if(mberManageVO.getKakaoFtPrice() == 0.0f) |
|
| 305 |
+ mberManageVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice()); |
|
| 173 | 306 |
|
| 174 | 307 |
|
| 175 | 308 |
// SMS 인경우 |
... | ... | @@ -284,6 +417,84 @@ |
| 284 | 417 |
return kakaoVO; |
| 285 | 418 |
} |
| 286 | 419 |
|
| 420 |
+ |
|
| 421 |
+ /** |
|
| 422 |
+ * @Method Name : kakaoFTSendMsg |
|
| 423 |
+ * @작성일 : 2024. 1. 17. |
|
| 424 |
+ * @작성자 : 우영두 |
|
| 425 |
+ * @Method 설명 : 카카오 친톡 전송 메세지 설정 |
|
| 426 |
+ */ |
|
| 427 |
+ public KakaoVO kakaoFTSendMsg(KakaoVO kakaoVO) throws Exception {
|
|
| 428 |
+ List<KakaoVO> kakaoSendList = new ArrayList<KakaoVO>(); |
|
| 429 |
+ //전체 받는사람 수량만큼 반복 확인 |
|
| 430 |
+ int callToCnt = kakaoVO.getCallToList().length; |
|
| 431 |
+ try {
|
|
| 432 |
+ for(int count =0; count < callToCnt; count++) {
|
|
| 433 |
+ |
|
| 434 |
+ KakaoVO setSendMsgVO = new KakaoVO(); |
|
| 435 |
+ |
|
| 436 |
+ setSendMsgVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호 |
|
| 437 |
+ // 카카오 전송내용 설정 |
|
| 438 |
+ // 변환문자 포함(Y), 미포함(N) |
|
| 439 |
+ if(kakaoVO.getTxtReplYn().equals("Y")) {
|
|
| 440 |
+ |
|
| 441 |
+ String templateContent = kakaoFTSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, count); |
|
| 442 |
+ setSendMsgVO.setTemplateContent(templateContent); |
|
| 443 |
+ |
|
| 444 |
+ }else {
|
|
| 445 |
+ |
|
| 446 |
+ // 템플릿 내용 설정 |
|
| 447 |
+ setSendMsgVO.setTemplateContent(kakaoVO.getTemplateContent()); |
|
| 448 |
+ } |
|
| 449 |
+ |
|
| 450 |
+ //대체문자 포함(Y), 미포함(N) |
|
| 451 |
+ if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
|
| 452 |
+ |
|
| 453 |
+ String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 |
|
| 454 |
+ |
|
| 455 |
+ String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
|
|
| 456 |
+ kakaoVO.setKakaoSubMagOrgnlTxt(tempSubMagTxt); |
|
| 457 |
+ if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
|
|
| 458 |
+ tempSubMagTxt = kakaoFTSubMagTxtRepl(tempSubMagTxt, kakaoVO, count); |
|
| 459 |
+ } |
|
| 460 |
+ |
|
| 461 |
+ setSendMsgVO.setSubMsgTxt(tempSubMagTxt); |
|
| 462 |
+ |
|
| 463 |
+ int FrBytes = tempSubMagTxt.getBytes(charset).length; |
|
| 464 |
+ |
|
| 465 |
+ //메세지 길이가 90Byte가 초과시 MMS |
|
| 466 |
+ if(FrBytes > 90) {
|
|
| 467 |
+ setSendMsgVO.setSubMsgType("MMS");
|
|
| 468 |
+ }else {// 아니면 SMS
|
|
| 469 |
+ setSendMsgVO.setSubMsgType("SMS");
|
|
| 470 |
+ } |
|
| 471 |
+ } |
|
| 472 |
+ |
|
| 473 |
+ if(kakaoVO.getBizJsonYn().equals("Y")) {
|
|
| 474 |
+ kakaoVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호 |
|
| 475 |
+ |
|
| 476 |
+ String[] varValInfo = null; |
|
| 477 |
+ if( kakaoVO.getVarValList().size() != 0) {
|
|
| 478 |
+ varValInfo = kakaoVO.getVarValList().get(count); |
|
| 479 |
+ } |
|
| 480 |
+ String jsonFileName = kakaoApiJsonSave.kakaoApiFTJsonSave(kakaoVO); |
|
| 481 |
+// String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, kakaoVO.getVarValList().get(count)); |
|
| 482 |
+ setSendMsgVO.setBizJsonName(jsonFileName); //json 파일명 |
|
| 483 |
+ } |
|
| 484 |
+ |
|
| 485 |
+ kakaoSendList.add(setSendMsgVO); |
|
| 486 |
+ } |
|
| 487 |
+ kakaoVO.setKakaoSendList(kakaoSendList); |
|
| 488 |
+ |
|
| 489 |
+ } catch (Exception e) {
|
|
| 490 |
+ System.out.println(e.toString()); |
|
| 491 |
+ e.printStackTrace(); |
|
| 492 |
+ } |
|
| 493 |
+ |
|
| 494 |
+ return kakaoVO; |
|
| 495 |
+ } |
|
| 496 |
+ |
|
| 497 |
+ |
|
| 287 | 498 |
public String kakaoSendMsgTest(KakaoVO kakaoVO) throws Exception {
|
| 288 | 499 |
String templateContent = ""; |
| 289 | 500 |
try {
|
... | ... | @@ -339,4 +550,159 @@ |
| 339 | 550 |
} |
| 340 | 551 |
return tempSubMagTxt; |
| 341 | 552 |
} |
| 553 |
+ |
|
| 554 |
+ public String kakaoFTSubMagTxtRepl(String tempSubMagTxt, KakaoVO kakaoVO, int count) throws Exception{
|
|
| 555 |
+ |
|
| 556 |
+ List<String[]> varValList = kakaoVO.getVarValList(); |
|
| 557 |
+ |
|
| 558 |
+ tempSubMagTxt = getKakaoFTCntReplace(varValList.get(count)[0], tempSubMagTxt); |
|
| 559 |
+ |
|
| 560 |
+ return tempSubMagTxt; |
|
| 561 |
+ } |
|
| 562 |
+ |
|
| 563 |
+ /* |
|
| 564 |
+ * 카카오 친구톡 치환 내용에 대한 변환 처리 |
|
| 565 |
+ * |
|
| 566 |
+ * |
|
| 567 |
+ * */ |
|
| 568 |
+ public String getKakaoFTCntReplace(String varValStr, String contents) throws Exception{
|
|
| 569 |
+ |
|
| 570 |
+ String[] array = varValStr.split("¶");
|
|
| 571 |
+ String tmpContents = contents; |
|
| 572 |
+ for(int j=0; j < array.length; j++) {
|
|
| 573 |
+ String tmpVarVal = array[j].replaceAll("§", ",");
|
|
| 574 |
+ if(tmpVarVal.length() > 0) {
|
|
| 575 |
+ |
|
| 576 |
+ if(tmpContents.contains("#{이름}") && j == 0) {
|
|
| 577 |
+ tmpContents = tmpContents.replaceAll("\\#\\{이름\\}", tmpVarVal);
|
|
| 578 |
+ } |
|
| 579 |
+ |
|
| 580 |
+ //1번째에 핸드폰 번호가 포함 되어 있어서 건너뜀 |
|
| 581 |
+ |
|
| 582 |
+ if(tmpContents.contains("#{1}") && j == 2) {
|
|
| 583 |
+ tmpContents = tmpContents.replaceAll("\\#\\{1\\}", tmpVarVal);
|
|
| 584 |
+ } |
|
| 585 |
+ |
|
| 586 |
+ if(tmpContents.contains("#{2}") && j == 3) {
|
|
| 587 |
+ tmpContents = tmpContents.replaceAll("\\#\\{2\\}", tmpVarVal);
|
|
| 588 |
+ } |
|
| 589 |
+ |
|
| 590 |
+ if(tmpContents.contains("#{3}") && j == 4) {
|
|
| 591 |
+ tmpContents = tmpContents.replaceAll("\\#\\{3\\}", tmpVarVal);
|
|
| 592 |
+ } |
|
| 593 |
+ |
|
| 594 |
+ if(tmpContents.contains("#{4}") && j == 5) {
|
|
| 595 |
+ tmpContents = tmpContents.replaceAll("\\#\\{4\\}", tmpVarVal);
|
|
| 596 |
+ } |
|
| 597 |
+ |
|
| 598 |
+ } |
|
| 599 |
+ |
|
| 600 |
+ } |
|
| 601 |
+ |
|
| 602 |
+ return tmpContents; |
|
| 603 |
+ } |
|
| 604 |
+ |
|
| 605 |
+ /* |
|
| 606 |
+ * 카카오 친구톡 치환문자 내용 스팸 필터 |
|
| 607 |
+ * 치환변수 내용 및 템플릿 내용, 스팸필터 단어 리스트를 전달하면 스팸 문구 포함 문구 리턴 |
|
| 608 |
+ * 없으면 공백을 리턴 |
|
| 609 |
+ * |
|
| 610 |
+ * */ |
|
| 611 |
+ public String getKakaoFTCntRepToSpamFilter(List<String[]> varValList, List<String> resultSpamTxt, String contents) throws Exception {
|
|
| 612 |
+ String spmFilterTxt = ""; |
|
| 613 |
+ for(int i=0; i < varValList.size(); i++) {
|
|
| 614 |
+ |
|
| 615 |
+ String tmpContents = getKakaoFTCntReplace(varValList.get(i)[0], contents); |
|
| 616 |
+ |
|
| 617 |
+ //입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함. |
|
| 618 |
+ String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim(); |
|
| 619 |
+ //List<String> jasoList = HangulParser.disassemble(resultParser); |
|
| 620 |
+ //String assembleStr = HangulParser.assemble(jasoList); |
|
| 621 |
+ |
|
| 622 |
+ //데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함. |
|
| 623 |
+ int spmCnt = 0; |
|
| 624 |
+ for(String spmTxt : resultSpamTxt) {
|
|
| 625 |
+ |
|
| 626 |
+ String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim(); |
|
| 627 |
+ |
|
| 628 |
+ if(resultParser.contains(parserStr)) {
|
|
| 629 |
+ |
|
| 630 |
+ //스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌. |
|
| 631 |
+ spmFilterTxt += spmTxt + ","; |
|
| 632 |
+ spmCnt++; |
|
| 633 |
+ |
|
| 634 |
+ } |
|
| 635 |
+ |
|
| 636 |
+ } |
|
| 637 |
+ |
|
| 638 |
+ if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리
|
|
| 639 |
+ |
|
| 640 |
+ if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
|
|
| 641 |
+ // 처음부터 idx 만큼 잘라낸 나머지 글자 |
|
| 642 |
+ spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1); |
|
| 643 |
+ |
|
| 644 |
+ } |
|
| 645 |
+ |
|
| 646 |
+ System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
|
|
| 647 |
+ |
|
| 648 |
+ return spmFilterTxt; |
|
| 649 |
+ |
|
| 650 |
+ } |
|
| 651 |
+ |
|
| 652 |
+ } |
|
| 653 |
+ return ""; |
|
| 654 |
+ } |
|
| 655 |
+ |
|
| 656 |
+ /* |
|
| 657 |
+ * 치환문자가 없는 내용에 대한 스팸필터링 처리 |
|
| 658 |
+ * |
|
| 659 |
+ * */ |
|
| 660 |
+ public String getKakaoFTCntToSpamFilter(List<String> resultSpamTxt, String contents) throws Exception {
|
|
| 661 |
+ String spmFilterTxt = ""; |
|
| 662 |
+ //for(int i=0; i < varValList.size(); i++) {
|
|
| 663 |
+ //String[] array = varValList.get(i)[0].split("¶");
|
|
| 664 |
+ String tmpContents = contents; |
|
| 665 |
+ System.out.println(tmpContents); |
|
| 666 |
+ |
|
| 667 |
+ //입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함. |
|
| 668 |
+ String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim(); |
|
| 669 |
+ //List<String> jasoList = HangulParser.disassemble(resultParser); |
|
| 670 |
+ //String assembleStr = HangulParser.assemble(jasoList); |
|
| 671 |
+ |
|
| 672 |
+ System.out.println("++++++++++++++ spam resultParser ::: "+resultParser);
|
|
| 673 |
+ |
|
| 674 |
+ //데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함. |
|
| 675 |
+ int spmCnt = 0; |
|
| 676 |
+ for(String spmTxt : resultSpamTxt) {
|
|
| 677 |
+ |
|
| 678 |
+ String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim(); |
|
| 679 |
+ |
|
| 680 |
+ if(resultParser.contains(parserStr)) {
|
|
| 681 |
+ |
|
| 682 |
+ //스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌. |
|
| 683 |
+ spmFilterTxt += spmTxt + ","; |
|
| 684 |
+ spmCnt++; |
|
| 685 |
+ |
|
| 686 |
+ } |
|
| 687 |
+ |
|
| 688 |
+ } |
|
| 689 |
+ |
|
| 690 |
+ if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리
|
|
| 691 |
+ |
|
| 692 |
+ if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
|
|
| 693 |
+ // 처음부터 idx 만큼 잘라낸 나머지 글자 |
|
| 694 |
+ spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1); |
|
| 695 |
+ |
|
| 696 |
+ } |
|
| 697 |
+ |
|
| 698 |
+ System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
|
|
| 699 |
+ |
|
| 700 |
+ return spmFilterTxt; |
|
| 701 |
+ |
|
| 702 |
+ } |
|
| 703 |
+ |
|
| 704 |
+ //} |
|
| 705 |
+ return ""; |
|
| 706 |
+ } |
|
| 707 |
+ |
|
| 342 | 708 |
} |
--- src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
... | ... | @@ -238,6 +238,7 @@ |
| 238 | 238 |
private String imageTitle; //친구톡 이미지 제목 |
| 239 | 239 |
private String imageLink; //친구톡 이미지 클릭시 링크 주소 |
| 240 | 240 |
private String jsonText; //json 파일 생성시 내용 저장(혹시 몰라서 내용도 별도로 저장함) |
| 241 |
+ private String imageFileName; //친구톡 이미지 원본 파일명 |
|
| 241 | 242 |
|
| 242 | 243 |
private String successDay; |
| 243 | 244 |
private String successMonth; |
... | ... | @@ -1110,6 +1111,14 @@ |
| 1110 | 1111 |
this.jsonText = jsonText; |
| 1111 | 1112 |
} |
| 1112 | 1113 |
|
| 1114 |
+ public String getImageFileName() {
|
|
| 1115 |
+ return imageFileName; |
|
| 1116 |
+ } |
|
| 1117 |
+ |
|
| 1118 |
+ public void setImageFileName(String imageFileName) {
|
|
| 1119 |
+ this.imageFileName = imageFileName; |
|
| 1120 |
+ } |
|
| 1121 |
+ |
|
| 1113 | 1122 |
public String getSbscrbDe() {
|
| 1114 | 1123 |
return sbscrbDe; |
| 1115 | 1124 |
} |
--- src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java
+++ src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java
... | ... | @@ -3,18 +3,14 @@ |
| 3 | 3 |
import java.io.BufferedWriter; |
| 4 | 4 |
import java.io.File; |
| 5 | 5 |
import java.io.FileOutputStream; |
| 6 |
-import java.io.FileWriter; |
|
| 7 | 6 |
import java.io.IOException; |
| 8 | 7 |
import java.io.OutputStreamWriter; |
| 9 | 8 |
import java.text.SimpleDateFormat; |
| 10 |
-import java.time.LocalDateTime; |
|
| 11 |
-import java.time.format.DateTimeFormatter; |
|
| 12 | 9 |
import java.util.Date; |
| 13 | 10 |
import java.util.List; |
| 14 | 11 |
|
| 15 |
-import org.json.simple.JSONObject; |
|
| 16 | 12 |
import org.json.simple.JSONArray; |
| 17 |
- |
|
| 13 |
+import org.json.simple.JSONObject; |
|
| 18 | 14 |
import org.springframework.beans.factory.annotation.Autowired; |
| 19 | 15 |
import org.springframework.beans.factory.annotation.Value; |
| 20 | 16 |
import org.springframework.stereotype.Component; |
... | ... | @@ -159,4 +155,111 @@ |
| 159 | 155 |
} |
| 160 | 156 |
return jsonFileName; |
| 161 | 157 |
} |
| 158 |
+ |
|
| 159 |
+ /* |
|
| 160 |
+ * 친구톡 발송시 이미지, 버튼 추가에 따른 Json 파일 생성 |
|
| 161 |
+ * 2024.01.17 |
|
| 162 |
+ * 우영두 |
|
| 163 |
+ * 파일은 하나만 생성해서 동일하게 사용함. |
|
| 164 |
+ * |
|
| 165 |
+ * */ |
|
| 166 |
+ @SuppressWarnings("unchecked")
|
|
| 167 |
+ public String kakaoApiFTJsonSave(KakaoVO kakaoVO) {
|
|
| 168 |
+ // json파일 저장 |
|
| 169 |
+ |
|
| 170 |
+ Date nowDate = new Date(); |
|
| 171 |
+ SimpleDateFormat todayFrom = new SimpleDateFormat("yyyyMMdd");
|
|
| 172 |
+ SimpleDateFormat timeFrom = new SimpleDateFormat("HHmmss");
|
|
| 173 |
+ String jsonFileName = mjonBizJsonDir+"/"+kakaoVO.getUserId()+"/"+todayFrom.format(nowDate)+"/"+kakaoVO.getSendType(); // 아이디/날짜/타입 |
|
| 174 |
+ |
|
| 175 |
+ String fileName = timeFrom.format(nowDate)+"_"+kakaoVO.getMsgGroupId()+".json"; |
|
| 176 |
+ |
|
| 177 |
+ try {
|
|
| 178 |
+ |
|
| 179 |
+ File userIdFile = new File(jsonFileName); |
|
| 180 |
+ if(!userIdFile.exists()) {
|
|
| 181 |
+ userIdFile.mkdirs(); // 없으면 하위 디렉토리 까지 생성 |
|
| 182 |
+ jsonFileName = jsonFileName +"/"+fileName; |
|
| 183 |
+ }else {
|
|
| 184 |
+ |
|
| 185 |
+ jsonFileName = jsonFileName +"/"+fileName; |
|
| 186 |
+ System.out.println("jsonFileName : "+jsonFileName);
|
|
| 187 |
+ File file1 = new File(jsonFileName); |
|
| 188 |
+ if (file1.isFile()) {
|
|
| 189 |
+ return jsonFileName; |
|
| 190 |
+ } |
|
| 191 |
+ } |
|
| 192 |
+ |
|
| 193 |
+ //KakaoReturnVO templateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 194 |
+ |
|
| 195 |
+ // 버튼리스트 JSON 생성 |
|
| 196 |
+ JSONArray buttonList = new JSONArray(); |
|
| 197 |
+ for(KakaoButtonVO buttonInfoVO : kakaoVO.getButtonVOList()) {
|
|
| 198 |
+ JSONObject buttonInfo = new JSONObject(); |
|
| 199 |
+ |
|
| 200 |
+ buttonInfo.put("name", buttonInfoVO.getName());
|
|
| 201 |
+ buttonInfo.put("type", buttonInfoVO.getLinkType());
|
|
| 202 |
+ |
|
| 203 |
+ if(buttonInfoVO.getLinkType().equals("WL")) {
|
|
| 204 |
+ buttonInfo.put("url_mobile", buttonInfoVO.getLinkMo());
|
|
| 205 |
+ buttonInfo.put("url_pc", buttonInfoVO.getLinkPc());
|
|
| 206 |
+ }else if(buttonInfoVO.getLinkType().equals("AL")) {
|
|
| 207 |
+ buttonInfo.put("scheme_ios", buttonInfoVO.getLinkIos());
|
|
| 208 |
+ buttonInfo.put("scheme_android", buttonInfoVO.getLinkAnd());
|
|
| 209 |
+ }else if(buttonInfoVO.getLinkType().equals("BC")) {
|
|
| 210 |
+ // 상담톡 진행시 등록해야함 |
|
| 211 |
+ }else if(buttonInfoVO.getLinkType().equals("BT")) {
|
|
| 212 |
+ // 봇 전환 시 전달 |
|
| 213 |
+ } |
|
| 214 |
+ buttonList.add(buttonInfo); |
|
| 215 |
+ } |
|
| 216 |
+ |
|
| 217 |
+ // 강조유형 JSON 생성 |
|
| 218 |
+ JSONObject templateImageInfo = new JSONObject(); |
|
| 219 |
+ JSONObject templateImageExtInfo = new JSONObject(); |
|
| 220 |
+ String imageType = kakaoVO.getImageType(); |
|
| 221 |
+ |
|
| 222 |
+ if(!imageType.equals("")) {
|
|
| 223 |
+ templateImageInfo.put("img_url", kakaoVO.getTemplateImageUrl());
|
|
| 224 |
+ templateImageInfo.put("img_link", kakaoVO.getImgLink());
|
|
| 225 |
+ } |
|
| 226 |
+ |
|
| 227 |
+ if(imageType.equals("W")) {
|
|
| 228 |
+ templateImageExtInfo.put("wide", "Y");
|
|
| 229 |
+ } |
|
| 230 |
+ |
|
| 231 |
+ |
|
| 232 |
+ JSONObject jo = new JSONObject(); |
|
| 233 |
+ |
|
| 234 |
+ if(buttonList.size() != 0) {
|
|
| 235 |
+ jo.put("button", buttonList);
|
|
| 236 |
+ } |
|
| 237 |
+ |
|
| 238 |
+ if(templateImageInfo.size() != 0) {
|
|
| 239 |
+ jo.put("image", templateImageInfo);
|
|
| 240 |
+ } |
|
| 241 |
+ |
|
| 242 |
+ if(templateImageExtInfo.size() != 0) {
|
|
| 243 |
+ jo.put("extra", templateImageExtInfo);
|
|
| 244 |
+ } |
|
| 245 |
+ |
|
| 246 |
+ // 입력 json 데이터를 파일로 변경 |
|
| 247 |
+ String jsonStr = jo.toString(); |
|
| 248 |
+ System.out.println("jsonFileName : "+jsonFileName);
|
|
| 249 |
+ |
|
| 250 |
+ File outPut = new File(jsonFileName); |
|
| 251 |
+ outPut.createNewFile(); |
|
| 252 |
+ |
|
| 253 |
+ BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outPut), "utf-8")); |
|
| 254 |
+ bw.write(jsonStr); |
|
| 255 |
+ bw.close(); |
|
| 256 |
+ |
|
| 257 |
+ } catch (IOException e) {
|
|
| 258 |
+ System.out.println("json 생성 실패");
|
|
| 259 |
+ e.printStackTrace(); |
|
| 260 |
+ } |
|
| 261 |
+ return jsonFileName; |
|
| 262 |
+ } |
|
| 263 |
+ |
|
| 264 |
+ |
|
| 162 | 265 |
} |
--- src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
... | ... | @@ -15,8 +15,14 @@ |
| 15 | 15 |
|
| 16 | 16 |
//카카오 알림톡 발신 |
| 17 | 17 |
public MjonMsgReturnVO insertKakaoAtSandAjax(KakaoVO kakaoVO) throws Exception; |
| 18 |
+ |
|
| 19 |
+ //카카오 친구톡 발신 |
|
| 20 |
+ public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception; |
|
| 18 | 21 |
|
| 19 | 22 |
//카카오 알림톡 전송 실패 환불리스트 조회 |
| 20 | 23 |
public void selectKakaoAtSentRefundList() throws Exception; |
| 21 | 24 |
|
| 25 |
+ //카카오 친구톡 전송 실패 환불리스트 조회 |
|
| 26 |
+ public void selectKakaoFtSentRefundList() throws Exception; |
|
| 27 |
+ |
|
| 22 | 28 |
} |
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
... | ... | @@ -7,7 +7,6 @@ |
| 7 | 7 |
|
| 8 | 8 |
import egovframework.rte.psl.dataaccess.EgovAbstractDAO; |
| 9 | 9 |
import itn.let.kakao.kakaoComm.KakaoVO; |
| 10 |
-import itn.let.mjo.msg.service.MjonMsgVO; |
|
| 11 | 10 |
|
| 12 | 11 |
@Repository("kakaoAlimTalkDAO")
|
| 13 | 12 |
public class KakaoAlimTalkDAO extends EgovAbstractDAO {
|
... | ... | @@ -62,6 +61,11 @@ |
| 62 | 61 |
return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoAtSentRefundList");
|
| 63 | 62 |
} |
| 64 | 63 |
|
| 64 |
+ @SuppressWarnings("unchecked")
|
|
| 65 |
+ public List<KakaoVO> selectKakaoFtSentRefundList() throws Exception{
|
|
| 66 |
+ return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoFtSentRefundList");
|
|
| 67 |
+ } |
|
| 68 |
+ |
|
| 65 | 69 |
public KakaoVO selectKakaoAtUmid(KakaoVO kakaoVO) throws Exception{
|
| 66 | 70 |
return (KakaoVO) select("kakaoAlimTalkDAO.selectKakaoAtUmid", kakaoVO);
|
| 67 | 71 |
} |
... | ... | @@ -77,4 +81,17 @@ |
| 77 | 81 |
public void updateKakaoAtNotSend(KakaoVO kakaoVO) {
|
| 78 | 82 |
select("kakaoAlimTalkDAO.updateKakaoAtNotSend", kakaoVO);
|
| 79 | 83 |
} |
| 84 |
+ |
|
| 85 |
+ |
|
| 86 |
+ public void updateKakaoFtSend(KakaoVO kakaoVO) {
|
|
| 87 |
+ select("kakaoAlimTalkDAO.updateKakaoFtSend", kakaoVO);
|
|
| 88 |
+ } |
|
| 89 |
+ |
|
| 90 |
+ public void updateKakaoFtSubMsgSend(KakaoVO kakaoVO) {
|
|
| 91 |
+ select("kakaoAlimTalkDAO.updateKakaoFtSubMsgSend", kakaoVO);
|
|
| 92 |
+ } |
|
| 93 |
+ |
|
| 94 |
+ public void updateKakaoFtNotSend(KakaoVO kakaoVO) {
|
|
| 95 |
+ select("kakaoAlimTalkDAO.updateKakaoFtNotSend", kakaoVO);
|
|
| 96 |
+ } |
|
| 80 | 97 |
} |
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
... | ... | @@ -409,7 +409,343 @@ |
| 409 | 409 |
} |
| 410 | 410 |
return returnVO; |
| 411 | 411 |
} |
| 412 |
+ |
|
| 413 |
+ |
|
| 414 |
+ |
|
| 415 |
+ //카카오 친구톡 발신 |
|
| 416 |
+ @Override |
|
| 417 |
+ public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception {
|
|
| 418 |
+ |
|
| 419 |
+ MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); |
|
| 420 |
+ try {
|
|
| 421 |
+ String agentCode = "04"; // 다우기술 agent 코드 고정 |
|
| 422 |
+ String msgType = "9"; // 카카오 알림톡 전송 코드 : 8번 |
|
| 423 |
+ |
|
| 424 |
+ int totCnt = 1; // 문자 리스트 추가 수량 |
|
| 425 |
+ int resultCnt = 0; // 최종전송 수량 |
|
| 426 |
+ int callToCnt = kakaoVO.getCallToList().length; // 전체 받는사람 건수 |
|
| 427 |
+ |
|
| 428 |
+ //Controller에서 전달 받은 분할 시간 정보 리스트 |
|
| 429 |
+ List<String> dividDayList = kakaoVO.getDividDay(); |
|
| 430 |
+ //String sendTime = kakaoVO.getReqDate(); |
|
| 431 |
+ String[] phoneList = kakaoVO.getCallToList(); //받는사람 연락처 리스트 |
|
| 432 |
+ |
|
| 433 |
+ //카카오 알림톡 전송 리스트 |
|
| 434 |
+ List<KakaoVO> kakaoFtSendList = new ArrayList<KakaoVO>(); |
|
| 435 |
+ |
|
| 436 |
+ //야간스미싱 알림여부 정보 불러오기 |
|
| 437 |
+ JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); |
|
| 438 |
+ String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); |
|
| 439 |
+ |
|
| 440 |
+ //스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 |
|
| 441 |
+ boolean spamSmishingPassStatus = false; //야간스미싱 알림여부가 활성화인 경우 false, 비활성화인경우 true 값을 가지도록 한다. |
|
| 442 |
+ |
|
| 443 |
+ //야간스미싱알리 여부가 비활성화 인경우 무조건 문자를 즉시 보내도록 한다. |
|
| 444 |
+ //현재는 평일, 주말, 휴일 상관없이 N 이면 30분 딜레이 없이 발송 처리하도록 함. |
|
| 445 |
+ if(holiSmishingNoti.equals("Y")) {
|
|
| 446 |
+ |
|
| 447 |
+ MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); |
|
| 448 |
+ |
|
| 449 |
+ msgAlarmSetVO.setUseYn("Y");
|
|
| 450 |
+ msgAlarmSetVO.setFirstIndex(0); |
|
| 451 |
+ |
|
| 452 |
+ List<MsgAlarmSetVO> resultAlarmList = msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO); |
|
| 453 |
+ |
|
| 454 |
+ Calendar calendar = Calendar.getInstance(); |
|
| 455 |
+ int year = calendar.get(Calendar.YEAR); |
|
| 456 |
+ |
|
| 457 |
+ MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); |
|
| 458 |
+ msgHolidayVO.setFirstIndex(0); |
|
| 459 |
+ msgHolidayVO.setRecordCountPerPage(100); |
|
| 460 |
+ msgHolidayVO.setSearchHoliYear(Integer.toString(year)); |
|
| 461 |
+ |
|
| 462 |
+ List<MsgHolidayVO> resultHolidayList = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); |
|
| 463 |
+ |
|
| 464 |
+ MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); |
|
| 465 |
+ |
|
| 466 |
+ boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); |
|
| 467 |
+ |
|
| 468 |
+ spamSmishingPassStatus = smishingAlarmPassSts; |
|
| 469 |
+ }else {
|
|
| 470 |
+ |
|
| 471 |
+ spamSmishingPassStatus = true; |
|
| 472 |
+ |
|
| 473 |
+ } |
|
| 474 |
+ |
|
| 475 |
+ String atSmishingYn = kakaoVO.getAtSmishingYn(); |
|
| 476 |
+ |
|
| 477 |
+ if(spamSmishingPassStatus) {
|
|
| 478 |
+ atSmishingYn = "N"; |
|
| 479 |
+ } |
|
| 480 |
+ |
|
| 481 |
+/** 카카오 알림톡 전송 리스트 생성 (시작)-------------------------------------------*/ |
|
| 482 |
+ for(int i = 0; i < callToCnt; i++) {
|
|
| 483 |
+ |
|
| 484 |
+ KakaoVO kakaoSandInfo = new KakaoVO(); // 전송설정VO |
|
| 485 |
+ |
|
| 486 |
+ kakaoSandInfo.setMsgId(idgenMsgId.getNextStringId()); // 문자 Id 설정 |
|
| 487 |
+ kakaoSandInfo.setMsgGroupId(kakaoVO.getMsgGroupId()); // 문자 그룹ID 설정 |
|
| 488 |
+ kakaoSandInfo.setUserId(kakaoVO.getUserId()); // 사용자 ID |
|
| 489 |
+ kakaoSandInfo.setAgentCode(agentCode); // 전송 agent 설정 |
|
| 490 |
+ |
|
| 491 |
+ kakaoSandInfo.setSenderKey(kakaoVO.getSenderKey()); |
|
| 492 |
+ kakaoSandInfo.setTemplateCode(kakaoVO.getTemplateCode()); |
|
| 493 |
+ |
|
| 494 |
+ |
|
| 495 |
+ kakaoSandInfo.setCallTo(phoneList[i]); // 받는사람 전화번호 |
|
| 496 |
+ kakaoSandInfo.setCallFrom(kakaoVO.getCallFrom()); // 보내는사람 전화전호 |
|
| 497 |
+ kakaoSandInfo.setMsgType(msgType); // 문자전송 타입 설정 |
|
| 498 |
+ |
|
| 499 |
+ |
|
| 500 |
+ List<KakaoVO> kakaoSendMsgList = kakaoVO.getKakaoSendList(); |
|
| 501 |
+ /**문자내용 치환 처리 (시작) --------------------------------------------*/ |
|
| 502 |
+ kakaoSandInfo.setTemplateContent(kakaoSendMsgList.get(i).getTemplateContent()); //템플릿 내용 또는 치환 템플릿 내용 |
|
| 503 |
+ /**문자내용 치환 처리 (끝) ---------------------------------------------*/ |
|
| 504 |
+ |
|
| 505 |
+ kakaoSandInfo.setTemplateTitle(kakaoSendMsgList.get(i).getTemplateTitle()); |
|
| 412 | 506 |
|
| 507 |
+ /**json파일 여부 (시작) --------------------------------------------*/ |
|
| 508 |
+ kakaoSandInfo.setBizJsonYn(kakaoVO.getBizJsonYn()); |
|
| 509 |
+ if(kakaoVO.getBizJsonYn().equals("Y")){
|
|
| 510 |
+ kakaoSandInfo.setBizJsonName(kakaoSendMsgList.get(i).getBizJsonName()); |
|
| 511 |
+ } |
|
| 512 |
+ /**json파일 여부 (끝) ---------------------------------------------*/ |
|
| 513 |
+ |
|
| 514 |
+ /**대체문자 처리 (시작) --------------------------------------------*/ |
|
| 515 |
+ kakaoSandInfo.setSubMsgSendYn(kakaoVO.getSubMsgSendYn()); // 대체문자 전송여부 설정 |
|
| 516 |
+ if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
|
| 517 |
+ kakaoSandInfo.setSubMsgType(kakaoSendMsgList.get(i).getSubMsgType()); // 대체문자 전송 타입 |
|
| 518 |
+ kakaoSandInfo.setSubMsgTxt(kakaoSendMsgList.get(i).getSubMsgTxt()); // 대체문자 전송 내용 |
|
| 519 |
+ } |
|
| 520 |
+ /**대체문자 처리 (끝) ---------------------------------------------*/ |
|
| 521 |
+ |
|
| 522 |
+ /**전송시간 설정 (시작)------------------------------------------------*/ |
|
| 523 |
+ if(!kakaoVO.getReserveYn().equals("N")) {
|
|
| 524 |
+ /** 예약 발송 설정 */ |
|
| 525 |
+ //분할 발송을 체크 한 경우 |
|
| 526 |
+ if(kakaoVO.getDivideChk().equals("Y")) {
|
|
| 527 |
+ |
|
| 528 |
+ kakaoSandInfo.setReqDate(dividDayList.get(i)); //분할 문자 예약 시간 입력해주기 |
|
| 529 |
+ |
|
| 530 |
+ }else {
|
|
| 531 |
+ |
|
| 532 |
+ kakaoSandInfo.setReqDate(kakaoVO.getReqDate()); |
|
| 533 |
+ |
|
| 534 |
+ } |
|
| 535 |
+ }else {
|
|
| 536 |
+ /** 즉시 발송 설정 */ |
|
| 537 |
+ Date now = new Date(); |
|
| 538 |
+ SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 539 |
+ kakaoVO.setReqDate(sdFormat.format(now)); |
|
| 540 |
+ kakaoSandInfo.setReqDate(sdFormat.format(now)); |
|
| 541 |
+ |
|
| 542 |
+ } |
|
| 543 |
+ |
|
| 544 |
+ if(atSmishingYn.equals("Y")) {
|
|
| 545 |
+ String sandDate = ""; |
|
| 546 |
+ |
|
| 547 |
+ if(kakaoVO.getDivideChk().equals("Y")) {
|
|
| 548 |
+ //분할 문자 예약 시간 입력해주기 |
|
| 549 |
+ sandDate = dividDayList.get(i); |
|
| 550 |
+ }else {
|
|
| 551 |
+ //예약 시간 입력해주기 |
|
| 552 |
+ sandDate = kakaoVO.getReqDate(); |
|
| 553 |
+ } |
|
| 554 |
+ |
|
| 555 |
+ if(!kakaoVO.getReserveYn().equals("N")) {
|
|
| 556 |
+ /** 예약 발송 설정 */ |
|
| 557 |
+ if (i == 0) {
|
|
| 558 |
+ SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 559 |
+ Date date = sdFormat.parse(sandDate); |
|
| 560 |
+ |
|
| 561 |
+ Calendar cal1 = Calendar.getInstance(); |
|
| 562 |
+ cal1.setTime(date); // 시간 설정 |
|
| 563 |
+ cal1.add(Calendar.MINUTE, 30); // 30분 연산 |
|
| 564 |
+ |
|
| 565 |
+ String reqDate = sdFormat.format(cal1.getTime()); |
|
| 566 |
+ |
|
| 567 |
+ System.out.println("@@@@@@@@@@@@@@ reqDate : "+reqDate);
|
|
| 568 |
+ kakaoVO.setReqDate(reqDate); |
|
| 569 |
+ kakaoSandInfo.setReqDate(reqDate); |
|
| 570 |
+ } |
|
| 571 |
+ else {
|
|
| 572 |
+ if(kakaoVO.getDivideChk().equals("Y")) {
|
|
| 573 |
+ SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 574 |
+ Date date = sdFormat.parse(sandDate); |
|
| 575 |
+ |
|
| 576 |
+ Calendar cal1 = Calendar.getInstance(); |
|
| 577 |
+ cal1.setTime(date); // 시간 설정 |
|
| 578 |
+ cal1.add(Calendar.MINUTE, 30); // 30분 연산 |
|
| 579 |
+ |
|
| 580 |
+ String reqDate = sdFormat.format(cal1.getTime()); |
|
| 581 |
+ |
|
| 582 |
+ System.out.println("@@@@@@@@@@@@@@ reqDate : "+reqDate);
|
|
| 583 |
+ kakaoVO.setReqDate(reqDate); |
|
| 584 |
+ kakaoSandInfo.setReqDate(reqDate); |
|
| 585 |
+ } |
|
| 586 |
+ } |
|
| 587 |
+ }else {
|
|
| 588 |
+ /** 즉시 발송 설정 */ |
|
| 589 |
+ SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 590 |
+ Date date = sdFormat.parse(sandDate); |
|
| 591 |
+ |
|
| 592 |
+ Calendar cal1 = Calendar.getInstance(); |
|
| 593 |
+ cal1.setTime(date); // 시간 설정 |
|
| 594 |
+ cal1.add(Calendar.MINUTE, 30); // 30분 연산 |
|
| 595 |
+ |
|
| 596 |
+ String reqDate = sdFormat.format(cal1.getTime()); |
|
| 597 |
+ |
|
| 598 |
+ System.out.println("@@@@@@@@@@@@@@ reqDate : "+reqDate);
|
|
| 599 |
+ kakaoVO.setReqDate(reqDate); |
|
| 600 |
+ kakaoSandInfo.setReqDate(reqDate); |
|
| 601 |
+ } |
|
| 602 |
+ } |
|
| 603 |
+ |
|
| 604 |
+ /**전송시간 설정 (끝)------------------------------------------------*/ |
|
| 605 |
+ |
|
| 606 |
+ /**카카오 전송 데이터 추가*/ |
|
| 607 |
+ kakaoFtSendList.add(kakaoSandInfo); |
|
| 608 |
+ |
|
| 609 |
+ |
|
| 610 |
+ int instCnt = 0; // DB등록 완료 수량 |
|
| 611 |
+ //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 |
|
| 612 |
+ if(totCnt == callToCnt) {
|
|
| 613 |
+ |
|
| 614 |
+ if(kakaoFtSendList.size() > 0) {
|
|
| 615 |
+ instCnt = kakaoAlimTalkDAO.insertKakaoAtDataInfo(kakaoFtSendList); |
|
| 616 |
+ } |
|
| 617 |
+ //총 디비 입력 건수 저장하기 |
|
| 618 |
+ resultCnt = resultCnt + instCnt; |
|
| 619 |
+ |
|
| 620 |
+ }else {
|
|
| 621 |
+ |
|
| 622 |
+ } |
|
| 623 |
+ totCnt++; |
|
| 624 |
+ |
|
| 625 |
+ } |
|
| 626 |
+/** 카카오 알림톡 전송 리스트 (종료)-------------------------------------------*/ |
|
| 627 |
+ |
|
| 628 |
+/** |
|
| 629 |
+ * 1. 문자 발송 캐시 차감 ---------------------------------------------- |
|
| 630 |
+ * 2. 문자 그룹 테이블 등록 -------------------------------------------- |
|
| 631 |
+ */ |
|
| 632 |
+ |
|
| 633 |
+ //문자 발송 캐시 차감 해주기 |
|
| 634 |
+ MjonPayVO mjonPayVO = new MjonPayVO(); |
|
| 635 |
+ |
|
| 636 |
+ MjonMsgVO mjonMsgVO = new MjonMsgVO(); |
|
| 637 |
+ |
|
| 638 |
+ //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. |
|
| 639 |
+ //문자 발송 그룹 데이블에 추가 |
|
| 640 |
+ if(resultCnt > 0) {
|
|
| 641 |
+ |
|
| 642 |
+ |
|
| 643 |
+/** 발송 캐시 차감---------------------------------------------*/ |
|
| 644 |
+ |
|
| 645 |
+ |
|
| 646 |
+ int totSendCnt = kakaoVO.getCallToList().length; |
|
| 647 |
+ Float eachPrice = Float.parseFloat(kakaoVO.getEachPrice()); |
|
| 648 |
+ Float totPrice = eachPrice * resultCnt; |
|
| 649 |
+ String strTotPrice = String.format("%.1f", totPrice);
|
|
| 650 |
+ |
|
| 651 |
+ mjonMsgVO.setTotPrice(strTotPrice);//현재 합산 금액 셋팅 |
|
| 652 |
+ mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); |
|
| 653 |
+ mjonPayVO.setUserId(kakaoVO.getUserId()); |
|
| 654 |
+ mjonPayVO.setCash(-Float.parseFloat(strTotPrice)); |
|
| 655 |
+ mjonPayVO.setFrstRegisterId(kakaoVO.getUserId()); |
|
| 656 |
+ mjonPayVO.setMemo("카카오 친구톡 총 "+totSendCnt+"건 중 " + resultCnt + "건 발송");
|
|
| 657 |
+ mjonPayVO.setMsgGroupId(kakaoVO.getMsgGroupId()); |
|
| 658 |
+ |
|
| 659 |
+ |
|
| 660 |
+ mjonPayService.insertCash(mjonPayVO); //캐시차감 |
|
| 661 |
+ mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 |
|
| 662 |
+ |
|
| 663 |
+/** 그룹 테이블 등록-------------------------------------------*/ |
|
| 664 |
+ |
|
| 665 |
+ mjonMsgVO.setUserId(kakaoVO.getUserId()); |
|
| 666 |
+ mjonMsgVO.setMsgGroupId(kakaoVO.getMsgGroupId()); |
|
| 667 |
+ mjonMsgVO.setCallFrom(kakaoVO.getCallFrom()); |
|
| 668 |
+ mjonMsgVO.setSmsTxt(kakaoVO.getTemplateContent()); |
|
| 669 |
+ mjonMsgVO.setReqDate(kakaoVO.getReqDate()); |
|
| 670 |
+ mjonMsgVO.setMsgGroupCnt(Integer.toString(resultCnt)); |
|
| 671 |
+ mjonMsgVO.setMsgType(msgType); |
|
| 672 |
+ mjonMsgVO.setAgentCode(agentCode); |
|
| 673 |
+ mjonMsgVO.setEachPrice(kakaoVO.getEachPrice()); |
|
| 674 |
+ mjonMsgVO.setReserveYn(kakaoVO.getReserveYn()); |
|
| 675 |
+ mjonMsgVO.setBefCash(kakaoVO.getBefCash()); |
|
| 676 |
+ mjonMsgVO.setBefPoint(kakaoVO.getBefPoint()); |
|
| 677 |
+ mjonMsgVO.setKakaoSubMagOrgnlTxt(kakaoVO.getKakaoSubMagOrgnlTxt()); |
|
| 678 |
+ mjonMsgVO.setAtDelayYn(kakaoVO.getAtSmishingYn()); |
|
| 679 |
+ |
|
| 680 |
+ //야간 스미싱 알림 비활성화인 경우 딜레이처리 안하도록 함 20240912 우영두 수정 |
|
| 681 |
+ if(spamSmishingPassStatus) {
|
|
| 682 |
+ mjonMsgVO.setAtDelayYn("N");
|
|
| 683 |
+ }else {
|
|
| 684 |
+ mjonMsgVO.setAtDelayYn(kakaoVO.getAtSmishingYn()); |
|
| 685 |
+ } |
|
| 686 |
+ |
|
| 687 |
+ if(kakaoVO.getBizJsonYn().equals("Y")) {
|
|
| 688 |
+ mjonMsgVO.setFileCnt("1");
|
|
| 689 |
+ }else {
|
|
| 690 |
+ mjonMsgVO.setFileCnt("0");
|
|
| 691 |
+ } |
|
| 692 |
+ |
|
| 693 |
+ mjonMsgVO.setDelayYn(kakaoVO.getDelayYn()); |
|
| 694 |
+ |
|
| 695 |
+ // 등록되어있는 그룹데이터가 있는지 조회 |
|
| 696 |
+ int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO); |
|
| 697 |
+ |
|
| 698 |
+ // 등록되어 있는 그룹데이터가 없으면 insert, 있으면 update를 진행한다. |
|
| 699 |
+ if(msgGroupDataCnt < 1) {
|
|
| 700 |
+ mjonMsgDAO.insertGroupMsgData(mjonMsgVO); |
|
| 701 |
+ |
|
| 702 |
+ /* |
|
| 703 |
+ * 현재 발송하는 카카오 친구톡 및 문자(단/장문) 발송 금액 정보를 mj_msg_group_id와 함께 디비에 저장해준다. |
|
| 704 |
+ * 환불할 때 각 단가를 사용하기 때문에 별도로 저장함. |
|
| 705 |
+ * 히스토리 기록을 위해서도 사용할 수 있을것 같음 |
|
| 706 |
+ * |
|
| 707 |
+ * */ |
|
| 708 |
+ kakaoAlimTalkDAO.insertKakaoSendPrice(kakaoVO); |
|
| 709 |
+ |
|
| 710 |
+ |
|
| 711 |
+ try {
|
|
| 712 |
+ |
|
| 713 |
+ //야간 스미싱 알림이 활성화 이고 알림 예외 일정에 포함되고, 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 우영두 추가 |
|
| 714 |
+ if(holiSmishingNoti.equals("Y") && spamSmishingPassStatus && kakaoVO.getAtSmishingYn().equals("Y")) {
|
|
| 715 |
+ mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); |
|
| 716 |
+ } |
|
| 717 |
+ |
|
| 718 |
+ } catch (Exception e) {
|
|
| 719 |
+ System.out.println("++++++++++++++++++++++++++++++ spamSmishingPassStatus 친구톡 야간 스미싱 알림 데이터 입력 오류 발생 !!!!");
|
|
| 720 |
+ } |
|
| 721 |
+ |
|
| 722 |
+ |
|
| 723 |
+ }else {
|
|
| 724 |
+ mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); |
|
| 725 |
+ } |
|
| 726 |
+ } |
|
| 727 |
+ |
|
| 728 |
+ returnVO.setSendMsgCnt(Integer.toString(resultCnt)); |
|
| 729 |
+ |
|
| 730 |
+ } catch (Exception e) {
|
|
| 731 |
+ // 실패 |
|
| 732 |
+ returnVO.setSendMsgCnt(Integer.toString(0)); //발송 건수 저장 |
|
| 733 |
+ returnVO.setSendMsgBlockCnt(Integer.toString(0)); //수신차단 건수 저장 |
|
| 734 |
+ returnVO.setAgentCode("01");
|
|
| 735 |
+ |
|
| 736 |
+ System.out.println("=========================================================================");
|
|
| 737 |
+ System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfo ERROR !!! : " + e);
|
|
| 738 |
+ System.out.println("=========================================================================");
|
|
| 739 |
+ return returnVO; |
|
| 740 |
+ } |
|
| 741 |
+ return returnVO; |
|
| 742 |
+ } |
|
| 743 |
+ |
|
| 744 |
+ |
|
| 745 |
+ /* |
|
| 746 |
+ * 카카오 알림톡 발송 실패에 따른 금액 환불 처리 |
|
| 747 |
+ * |
|
| 748 |
+ * */ |
|
| 413 | 749 |
@Override |
| 414 | 750 |
public void selectKakaoAtSentRefundList() throws Exception {
|
| 415 | 751 |
|
... | ... | @@ -439,4 +775,45 @@ |
| 439 | 775 |
} |
| 440 | 776 |
} |
| 441 | 777 |
} |
| 778 |
+ |
|
| 779 |
+ |
|
| 780 |
+ /* |
|
| 781 |
+ * 카카오 친구톡 발송 실패에 따른 금액 환불 처리 |
|
| 782 |
+ * 카카오 친구톡 대체문자 선택에 대해 성공시 친구톡과 문자 간 금액 차액의 환불도 처리 됨. |
|
| 783 |
+ * */ |
|
| 784 |
+ @Override |
|
| 785 |
+ public void selectKakaoFtSentRefundList() throws Exception {
|
|
| 786 |
+ |
|
| 787 |
+ /** |
|
| 788 |
+ * 1. 카카오 FT 전송성공 확인 |
|
| 789 |
+ * 2. 카카오 FT 전송실패, 대채문자 전송확인 |
|
| 790 |
+ * 3. 카카오 FT 전송 실패 확인 |
|
| 791 |
+ */ |
|
| 792 |
+ List<KakaoVO> kakaoFtSentRefundList = kakaoAlimTalkDAO.selectKakaoFtSentRefundList(); |
|
| 793 |
+ |
|
| 794 |
+ for(KakaoVO vo : kakaoFtSentRefundList) {
|
|
| 795 |
+ System.out.println(vo.getMsgGroupId() +"________결과 : " +vo.getRsltCode() +" 대체문자 전송 : "+vo.getSubMsgSendYn()); |
|
| 796 |
+ |
|
| 797 |
+ if(vo.getRsltCode().equals("7000")) {//친구톡 발송 성공시
|
|
| 798 |
+ |
|
| 799 |
+ kakaoAlimTalkDAO.updateKakaoFtSend(vo); |
|
| 800 |
+ |
|
| 801 |
+ }else if(vo.getSubMsgSendYn().equals("Y")) {//친구톡 발송 실패 했을 경우
|
|
| 802 |
+ |
|
| 803 |
+ //대체문자 발송 UMID 번호 조회 - 알림톡 쿼리 동일하게 사용 |
|
| 804 |
+ KakaoVO info = kakaoAlimTalkDAO.selectKakaoAtUmid(vo); |
|
| 805 |
+ |
|
| 806 |
+ System.out.println("대체문자 전송 : " + info.getBizUmid());
|
|
| 807 |
+ |
|
| 808 |
+ if (info.getBizUmid() != null) {//대체문자 발송 완료인 경우
|
|
| 809 |
+ kakaoAlimTalkDAO.updateKakaoAtSubMsgSend(vo); |
|
| 810 |
+ }else {
|
|
| 811 |
+ kakaoAlimTalkDAO.updateKakaoFtNotSend(vo); |
|
| 812 |
+ } |
|
| 813 |
+ |
|
| 814 |
+ }else {
|
|
| 815 |
+ kakaoAlimTalkDAO.updateKakaoFtNotSend(vo); |
|
| 816 |
+ } |
|
| 817 |
+ } |
|
| 818 |
+ } |
|
| 442 | 819 |
} |
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkTemplateController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkTemplateController.java
... | ... | @@ -871,6 +871,8 @@ |
| 871 | 871 |
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
| 872 | 872 |
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
| 873 | 873 |
|
| 874 |
+ model.addAttribute("loginVO", loginVO);
|
|
| 875 |
+ |
|
| 874 | 876 |
if(userId == "") {
|
| 875 | 877 |
model.addAttribute("message", "로그인 후 이용이 가능합니다.");
|
| 876 | 878 |
return "redirect:/web/user/login/login.do"; |
--- src/main/java/itn/let/kakao/user/kakaoFt/service/KakaoFriendsTalkTemplateService.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/service/KakaoFriendsTalkTemplateService.java
... | ... | @@ -14,4 +14,13 @@ |
| 14 | 14 |
|
| 15 | 15 |
//친구톡 템플릿 삭제처리하기 |
| 16 | 16 |
int deleteKakaoFriendstalkTemplate(KakaoVO kakaoVO) throws Exception; |
| 17 |
+ |
|
| 18 |
+ //친구톡 템플릿 상세정보 조회 |
|
| 19 |
+ KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception; |
|
| 20 |
+ |
|
| 21 |
+ //친구톡 템플릿 수정처리하기 |
|
| 22 |
+ int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception; |
|
| 23 |
+ |
|
| 24 |
+ //친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리 |
|
| 25 |
+ int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception; |
|
| 17 | 26 |
} |
--- src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateDAO.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateDAO.java
... | ... | @@ -107,4 +107,57 @@ |
| 107 | 107 |
|
| 108 | 108 |
return result; |
| 109 | 109 |
} |
| 110 |
+ |
|
| 111 |
+ |
|
| 112 |
+ //친구톡 템플릿 상세정보 조회 |
|
| 113 |
+ public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{
|
|
| 114 |
+ |
|
| 115 |
+ KakaoVO result = new KakaoVO(); |
|
| 116 |
+ |
|
| 117 |
+ try {
|
|
| 118 |
+ |
|
| 119 |
+ result = (KakaoVO) select("kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail", kakaoVO);
|
|
| 120 |
+ |
|
| 121 |
+ } catch (Exception e) {
|
|
| 122 |
+ System.out.println("selectKakaoFriendsTemplateDetail DAO Error !!! " + e);
|
|
| 123 |
+ } |
|
| 124 |
+ |
|
| 125 |
+ return result; |
|
| 126 |
+ |
|
| 127 |
+ } |
|
| 128 |
+ |
|
| 129 |
+ //친구톡 템플릿 수정처리하기 |
|
| 130 |
+ public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
|
|
| 131 |
+ |
|
| 132 |
+ int result = 0; |
|
| 133 |
+ |
|
| 134 |
+ try {
|
|
| 135 |
+ |
|
| 136 |
+ result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData", kakaoVO);
|
|
| 137 |
+ |
|
| 138 |
+ } catch (Exception e) {
|
|
| 139 |
+ System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e);
|
|
| 140 |
+ } |
|
| 141 |
+ |
|
| 142 |
+ return result; |
|
| 143 |
+ |
|
| 144 |
+ } |
|
| 145 |
+ |
|
| 146 |
+ //친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리 |
|
| 147 |
+ public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{
|
|
| 148 |
+ |
|
| 149 |
+ int result = 0; |
|
| 150 |
+ |
|
| 151 |
+ try {
|
|
| 152 |
+ |
|
| 153 |
+ result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel",kakaoVO);
|
|
| 154 |
+ |
|
| 155 |
+ } catch (Exception e) {
|
|
| 156 |
+ System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e);
|
|
| 157 |
+ } |
|
| 158 |
+ |
|
| 159 |
+ return result; |
|
| 160 |
+ |
|
| 161 |
+ } |
|
| 162 |
+ |
|
| 110 | 163 |
} |
--- src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateServiceImpl.java
... | ... | @@ -126,4 +126,102 @@ |
| 126 | 126 |
return result; |
| 127 | 127 |
} |
| 128 | 128 |
|
| 129 |
+ //친구톡 템플릿 상세정보 조회 |
|
| 130 |
+ @Override |
|
| 131 |
+ public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{
|
|
| 132 |
+ |
|
| 133 |
+ KakaoVO result = new KakaoVO(); |
|
| 134 |
+ |
|
| 135 |
+ try {
|
|
| 136 |
+ |
|
| 137 |
+ result = kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail(kakaoVO); |
|
| 138 |
+ |
|
| 139 |
+ //템플릿에 등록된 버튼정보가 있는지 확인하여 추가 |
|
| 140 |
+ if(result != null) {
|
|
| 141 |
+ |
|
| 142 |
+ List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>(); |
|
| 143 |
+ MjonKakaoTemplateButtonVO buttonVO = new MjonKakaoTemplateButtonVO(); |
|
| 144 |
+ buttonVO.setTemplateId(kakaoVO.getFriendId()); |
|
| 145 |
+ buttonVO.setTemplateUseType("F");
|
|
| 146 |
+ buttonList = kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateButtons(buttonVO); |
|
| 147 |
+ |
|
| 148 |
+ if(buttonList != null) {
|
|
| 149 |
+ result.setButtonVOList(buttonList); |
|
| 150 |
+ } |
|
| 151 |
+ |
|
| 152 |
+ } |
|
| 153 |
+ |
|
| 154 |
+ } catch (Exception e) {
|
|
| 155 |
+ System.out.println("selectKakaoFriendsTemplateDetail ServiceImple Error !!! " + e);
|
|
| 156 |
+ } |
|
| 157 |
+ |
|
| 158 |
+ return result; |
|
| 159 |
+ |
|
| 160 |
+ } |
|
| 161 |
+ |
|
| 162 |
+ //친구톡 템플릿 수정처리하기 |
|
| 163 |
+ @Override |
|
| 164 |
+ public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
|
|
| 165 |
+ |
|
| 166 |
+ int result = 0; |
|
| 167 |
+ int resultBtn = 0; |
|
| 168 |
+ |
|
| 169 |
+ try {
|
|
| 170 |
+ |
|
| 171 |
+ //템플릿 정보 수정 |
|
| 172 |
+ result = kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData(kakaoVO); |
|
| 173 |
+ |
|
| 174 |
+ String friendId = kakaoVO.getFriendId(); |
|
| 175 |
+ if(result > 0) {
|
|
| 176 |
+ |
|
| 177 |
+ //기존 버튼 정보 삭제 |
|
| 178 |
+ int resultBtnCnt = kakaoFriendsTalkTemplateDAO.deleteKakaoFriendstalkButtons(kakaoVO); |
|
| 179 |
+ |
|
| 180 |
+ //신규 버튼 정보 입력 |
|
| 181 |
+ for(KakaoButtonVO button: kakaoVO.getButtonVOList()) {
|
|
| 182 |
+ |
|
| 183 |
+ MjonKakaoTemplateButtonVO tmpButtonVO = new MjonKakaoTemplateButtonVO(); |
|
| 184 |
+ |
|
| 185 |
+ tmpButtonVO.setTemplateId(friendId); |
|
| 186 |
+ tmpButtonVO.setTemplateUseType("F");
|
|
| 187 |
+ tmpButtonVO.setButtonName(button.getName()); |
|
| 188 |
+ tmpButtonVO.setButtonLinktype(button.getLinkType()); |
|
| 189 |
+ tmpButtonVO.setButtonLinkpc(button.getLinkPc()); |
|
| 190 |
+ tmpButtonVO.setButtonLinkmo(button.getLinkMo()); |
|
| 191 |
+ tmpButtonVO.setButtonLinkios(button.getLinkIos()); |
|
| 192 |
+ tmpButtonVO.setButtonLinkand(button.getLinkAnd()); |
|
| 193 |
+ tmpButtonVO.setUserId(kakaoVO.getUserId()); |
|
| 194 |
+ |
|
| 195 |
+ int resultCnt = kakaoFriendsTalkTemplateDAO.insertKakaoFriendsTemplateButtonData(tmpButtonVO); |
|
| 196 |
+ resultBtn = resultBtn + resultCnt; |
|
| 197 |
+ |
|
| 198 |
+ } |
|
| 199 |
+ |
|
| 200 |
+ } |
|
| 201 |
+ |
|
| 202 |
+ } catch (Exception e) {
|
|
| 203 |
+ System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e);
|
|
| 204 |
+ } |
|
| 205 |
+ |
|
| 206 |
+ return result; |
|
| 207 |
+ } |
|
| 208 |
+ |
|
| 209 |
+ //친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리 |
|
| 210 |
+ @Override |
|
| 211 |
+ public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{
|
|
| 212 |
+ |
|
| 213 |
+ int result = 0; |
|
| 214 |
+ |
|
| 215 |
+ try {
|
|
| 216 |
+ |
|
| 217 |
+ result = kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel(kakaoVO); |
|
| 218 |
+ |
|
| 219 |
+ } catch (Exception e) {
|
|
| 220 |
+ System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e);
|
|
| 221 |
+ } |
|
| 222 |
+ |
|
| 223 |
+ return result; |
|
| 224 |
+ |
|
| 225 |
+ } |
|
| 226 |
+ |
|
| 129 | 227 |
} |
--- src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
... | ... | @@ -1,30 +1,57 @@ |
| 1 | 1 |
package itn.let.kakao.user.kakaoFt.web; |
| 2 | 2 |
|
| 3 |
+import java.math.BigDecimal; |
|
| 4 |
+import java.math.RoundingMode; |
|
| 5 |
+import java.text.SimpleDateFormat; |
|
| 3 | 6 |
import java.util.ArrayList; |
| 7 |
+import java.util.Arrays; |
|
| 8 |
+import java.util.Calendar; |
|
| 9 |
+import java.util.Date; |
|
| 4 | 10 |
import java.util.List; |
| 5 | 11 |
|
| 6 | 12 |
import javax.annotation.Resource; |
| 13 |
+import javax.servlet.http.HttpServletRequest; |
|
| 7 | 14 |
|
| 15 |
+import org.springframework.beans.factory.annotation.Autowired; |
|
| 8 | 16 |
import org.springframework.stereotype.Controller; |
| 9 | 17 |
import org.springframework.ui.ModelMap; |
| 10 | 18 |
import org.springframework.web.bind.annotation.ModelAttribute; |
| 11 | 19 |
import org.springframework.web.bind.annotation.RequestMapping; |
| 12 | 20 |
import org.springframework.web.servlet.ModelAndView; |
| 13 | 21 |
|
| 22 |
+import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
|
| 14 | 23 |
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
| 15 | 24 |
import itn.com.cmm.EgovMessageSource; |
| 16 | 25 |
import itn.com.cmm.LoginVO; |
| 17 | 26 |
import itn.com.cmm.util.MJUtil; |
| 18 | 27 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 28 |
+import itn.let.kakao.kakaoComm.KakaoSendUtil; |
|
| 19 | 29 |
import itn.let.kakao.kakaoComm.KakaoVO; |
| 20 | 30 |
import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; |
| 31 |
+import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; |
|
| 32 |
+import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService; |
|
| 33 |
+import itn.let.mjo.mjocommon.MjonCommon; |
|
| 34 |
+import itn.let.mjo.mjocommon.MjonHolidayApi; |
|
| 21 | 35 |
import itn.let.mjo.msgdata.service.MjonMsgDataService; |
| 36 |
+import itn.let.mjo.msgdata.service.MjonMsgDataVO; |
|
| 37 |
+import itn.let.mjo.msgdata.service.MjonMsgReturnVO; |
|
| 38 |
+import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; |
|
| 39 |
+import itn.let.mjo.msgholiday.service.MsgHolidayService; |
|
| 40 |
+import itn.let.mjo.msgholiday.service.MsgHolidayVO; |
|
| 22 | 41 |
import itn.let.mjo.symbol.service.MjonSymbolService; |
| 23 | 42 |
import itn.let.mjo.symbol.service.MjonSymbolVO; |
| 43 |
+import itn.let.sym.site.service.EgovSiteManagerService; |
|
| 44 |
+import itn.let.sym.site.service.JoinSettingVO; |
|
| 45 |
+import itn.let.uss.umt.service.EgovUserManageService; |
|
| 46 |
+import itn.let.uss.umt.service.MberManageVO; |
|
| 47 |
+import itn.let.uss.umt.service.UserManageVO; |
|
| 24 | 48 |
|
| 25 | 49 |
@Controller |
| 26 | 50 |
public class KakaoFriendsTalkSendController {
|
| 27 | 51 |
|
| 52 |
+ @Resource(name = "egovMjonMsgGroupIdGnrService") |
|
| 53 |
+ private EgovIdGnrService idgenMjonMsgGroupId; |
|
| 54 |
+ |
|
| 28 | 55 |
/** EgovMessageSource */ |
| 29 | 56 |
@Resource(name="egovMessageSource") |
| 30 | 57 |
EgovMessageSource egovMessageSource; |
... | ... | @@ -38,37 +65,159 @@ |
| 38 | 65 |
@Resource(name = "MjonMsgDataService") |
| 39 | 66 |
private MjonMsgDataService mjonMsgDataService; |
| 40 | 67 |
|
| 68 |
+ @Resource(name = "kakaoFriendsTalkTemplateService") |
|
| 69 |
+ private KakaoFriendsTalkTemplateService kakaoFtTemplateService; |
|
| 70 |
+ |
|
| 71 |
+ /** userManageService */ |
|
| 72 |
+ @Resource(name = "userManageService") |
|
| 73 |
+ private EgovUserManageService userManageService; |
|
| 74 |
+ |
|
| 75 |
+ @Resource(name = "kakaoAlimTalkService") |
|
| 76 |
+ private KakaoAlimTalkService kakaoAlimTalkService; |
|
| 77 |
+ |
|
| 78 |
+ /** 사이트 설정 */ |
|
| 79 |
+ @Resource(name = "egovSiteManagerService") |
|
| 80 |
+ EgovSiteManagerService egovSiteManagerService; |
|
| 81 |
+ |
|
| 82 |
+ @Resource(name = "MsgHolidayService") |
|
| 83 |
+ private MsgHolidayService msgHolidayService; |
|
| 84 |
+ |
|
| 85 |
+ @Autowired |
|
| 86 |
+ KakaoSendUtil kakaoSendUtil; |
|
| 87 |
+ |
|
| 88 |
+ |
|
| 89 |
+ |
|
| 90 |
+ /** |
|
| 91 |
+ * @methodName : kakaoFriendsTalkMsgDataView |
|
| 92 |
+ * @author : 우영두 |
|
| 93 |
+ * @date : 2024.01.05 |
|
| 94 |
+ * @description : kakaoFriendsTalkMsgDataView 카카오 친구톡 발송 화면 |
|
| 95 |
+ * @param kakaoVO |
|
| 96 |
+ * @param model |
|
| 97 |
+ * @param response |
|
| 98 |
+ * @return |
|
| 99 |
+ * @throws Exception |
|
| 100 |
+ */ |
|
| 101 |
+ |
|
| 41 | 102 |
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do"})
|
| 42 | 103 |
public String KakaoAlimtalkMsgDataView(ModelMap model |
| 43 | 104 |
, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
| 44 | 105 |
|
| 45 | 106 |
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
| 107 |
+ String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); |
|
| 46 | 108 |
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
| 47 |
- if(userId == "") {
|
|
| 109 |
+ |
|
| 110 |
+ /*if(userId == "") {
|
|
| 48 | 111 |
return "redirect:/web/user/login/login.do"; |
| 49 |
- } |
|
| 112 |
+ }*/ |
|
| 113 |
+ |
|
| 114 |
+ model.addAttribute("loginVO", loginVO);
|
|
| 50 | 115 |
|
| 51 | 116 |
try {
|
| 52 | 117 |
|
| 53 |
- //사용자 등록 발신프로필 정보 조회해오기 |
|
| 54 |
- kakaoVO.setUserId(userId); |
|
| 55 |
- List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); |
|
| 56 |
- model.addAttribute("resultProfileList", resultProfileList);
|
|
| 118 |
+ if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
|
|
| 57 | 119 |
|
| 58 |
- // 특수문자 리스트 불러오기 |
|
| 59 |
- MjonSymbolVO symbolVO = new MjonSymbolVO(); |
|
| 60 |
- List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); |
|
| 61 |
- model.addAttribute("symbolList", symbolList);
|
|
| 120 |
+ //사용자 등록 발신프로필 정보 조회해오기 |
|
| 121 |
+ kakaoVO.setUserId(userId); |
|
| 122 |
+ List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); |
|
| 123 |
+ model.addAttribute("resultProfileList", resultProfileList);
|
|
| 124 |
+ |
|
| 125 |
+ // 특수문자 리스트 불러오기 |
|
| 126 |
+ MjonSymbolVO symbolVO = new MjonSymbolVO(); |
|
| 127 |
+ List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); |
|
| 128 |
+ model.addAttribute("symbolList", symbolList);
|
|
| 129 |
+ |
|
| 130 |
+ //아이디 발신번호 리스트 불러오기. |
|
| 131 |
+ List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); |
|
| 132 |
+ List<String> resultPhonList = new ArrayList<String>(); |
|
| 133 |
+ MJUtil mjUtil = new MJUtil(); |
|
| 134 |
+ for(String phone : resultSendPhonList) {
|
|
| 135 |
+ resultPhonList.add(mjUtil.addDash(phone)); |
|
| 136 |
+ } |
|
| 137 |
+ model.addAttribute("resultPhonList", resultPhonList);
|
|
| 138 |
+ |
|
| 139 |
+ |
|
| 140 |
+ MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); |
|
| 141 |
+ |
|
| 142 |
+ model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn());
|
|
| 143 |
+ |
|
| 144 |
+ //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 |
|
| 145 |
+ /*Float shortPrice = mberManageVO.getShortPrice(); |
|
| 146 |
+ Float longPrice = mberManageVO.getLongPrice(); |
|
| 147 |
+ Float picturePrice = mberManageVO.getPicturePrice(); |
|
| 148 |
+ Float picture2Price = mberManageVO.getPicture2Price(); |
|
| 149 |
+ Float picture3Price = mberManageVO.getPicture3Price();*/ |
|
| 150 |
+ BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); |
|
| 151 |
+ |
|
| 152 |
+ model.addAttribute("userMoney", userMoney);
|
|
| 153 |
+ |
|
| 154 |
+ |
|
| 155 |
+ ////////////////////////////////////////////////////////////////// |
|
| 156 |
+ |
|
| 157 |
+ //최근 전송 내역 |
|
| 158 |
+ MjonMsgDataVO searchVO = new MjonMsgDataVO(); |
|
| 159 |
+ Calendar cal = Calendar.getInstance(); |
|
| 160 |
+ Date now = new Date(); |
|
| 161 |
+ SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
|
|
| 162 |
+ cal.setTime(now); |
|
| 163 |
+ cal.add(Calendar.DATE, -3); |
|
| 164 |
+ String chkDate = format.format(cal.getTime()); |
|
| 165 |
+ searchVO.setUserId(userId); |
|
| 166 |
+ searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 |
|
| 167 |
+ model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO));
|
|
| 168 |
+ |
|
| 169 |
+ //자주보내는 번호 |
|
| 170 |
+ model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO));
|
|
| 171 |
+ |
|
| 172 |
+ // 사용자 정의 단가 정보 불러오기(시스템 단가 혹은 협의 단가) |
|
| 173 |
+ model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
|
|
| 174 |
+ |
|
| 175 |
+ |
|
| 176 |
+ //사용자 템플릿 정보 조회 |
|
| 177 |
+ String friendId = kakaoVO.getFriendId(); |
|
| 178 |
+ KakaoVO resultTemplateVO = new KakaoVO(); |
|
| 179 |
+ |
|
| 180 |
+ if(friendId != null) {
|
|
| 181 |
+ resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO); |
|
| 182 |
+ } |
|
| 183 |
+ model.addAttribute("resultTemplateVO", resultTemplateVO);
|
|
| 184 |
+ |
|
| 185 |
+ |
|
| 186 |
+ //친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지 |
|
| 187 |
+ |
|
| 188 |
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
| 189 |
+ |
|
| 190 |
+ Date nows = new Date(); |
|
| 191 |
+ String nowDate = sdf1.format(nows); |
|
| 192 |
+ cal.setTime(nows); |
|
| 193 |
+ |
|
| 194 |
+ int hours = cal.get(Calendar.HOUR_OF_DAY); |
|
| 195 |
+ int minuts = cal.get(Calendar.MINUTE); |
|
| 196 |
+ |
|
| 197 |
+ boolean sendStatus = true; |
|
| 198 |
+ |
|
| 199 |
+ if(hours >= 20) {
|
|
| 200 |
+ |
|
| 201 |
+ if(minuts >= 50) {
|
|
| 202 |
+ |
|
| 203 |
+ System.out.println("발송금지 시간" + hours + ":" + minuts);
|
|
| 204 |
+ sendStatus = false; |
|
| 205 |
+ |
|
| 206 |
+ } |
|
| 207 |
+ |
|
| 208 |
+ } |
|
| 209 |
+ |
|
| 210 |
+ if(hours < 8) {
|
|
| 211 |
+ |
|
| 212 |
+ System.out.println("발송금지 시간" + hours + ":" + minuts);
|
|
| 213 |
+ sendStatus = false; |
|
| 214 |
+ |
|
| 215 |
+ } |
|
| 216 |
+ |
|
| 217 |
+ System.out.println("발송상태는 ::: "+sendStatus);
|
|
| 218 |
+ model.addAttribute("sendStatus", sendStatus);
|
|
| 62 | 219 |
|
| 63 |
- //아이디 발신번호 리스트 불러오기. |
|
| 64 |
- List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); |
|
| 65 |
- List<String> resultPhonList = new ArrayList<String>(); |
|
| 66 |
- MJUtil mjUtil = new MJUtil(); |
|
| 67 |
- for(String phone : resultSendPhonList) {
|
|
| 68 |
- resultPhonList.add(mjUtil.addDash(phone)); |
|
| 69 | 220 |
} |
| 70 |
- model.addAttribute("resultPhonList", resultPhonList);
|
|
| 71 |
- |
|
| 72 | 221 |
|
| 73 | 222 |
} catch (Exception e) {
|
| 74 | 223 |
System.out.println(" kakaoFriendsTalkMsgDataViewDataRegist Error ::: " + e);
|
... | ... | @@ -78,30 +227,535 @@ |
| 78 | 227 |
} |
| 79 | 228 |
|
| 80 | 229 |
|
| 81 |
- @RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"})
|
|
| 82 |
- public ModelAndView kakaoFriendsTalkMsgSendAjax( |
|
| 83 |
- @ModelAttribute("kakaoVO") KakaoVO kakaoVO
|
|
| 84 |
- ) throws Exception {
|
|
| 85 |
- ModelAndView modelAndView = new ModelAndView(); |
|
| 230 |
+ /** |
|
| 231 |
+ * @Method Name : selectSpamKakaoFriendsTalkMsgChkAjax |
|
| 232 |
+ * @작성일 : 2024. 1. 15. |
|
| 233 |
+ * @작성자 : 우영두 |
|
| 234 |
+ * @Method 설명 : 카카오 친구톡 전송시 스팸문구 확인 체크 |
|
| 235 |
+ */ |
|
| 236 |
+ @RequestMapping(value= {"/web/mjon/kakao/friendstalk/selectSpamKakaoFriendsTalkMsgChkAjax.do"})
|
|
| 237 |
+ public ModelAndView selectSpamKakaoFriendsTalkMsgChkAjax(ModelMap model |
|
| 238 |
+ , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
|
| 239 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 86 | 240 |
modelAndView.setViewName("jsonView");
|
| 87 | 241 |
|
| 88 |
- int sendCount = 0; //발송결과 건수 |
|
| 242 |
+ try {
|
|
| 243 |
+ List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); |
|
| 244 |
+ System.out.println("친구톡 스팸 필터링");
|
|
| 245 |
+ |
|
| 246 |
+ if(resultSpamTxt == null) {
|
|
| 247 |
+ modelAndView.addObject("result", "listEmpty");
|
|
| 248 |
+ return modelAndView; |
|
| 249 |
+ }else {
|
|
| 250 |
+ //변환변수 포함(Y) 미포함(N) |
|
| 251 |
+ String spmFilterTxt = ""; |
|
| 252 |
+ |
|
| 253 |
+ if(kakaoVO.getTxtReplYn().equals("Y")) {
|
|
| 254 |
+ List<String[]> varValList = kakaoVO.getVarValList(); // value 값 |
|
| 255 |
+ |
|
| 256 |
+ String resultSpam = kakaoSendUtil.getKakaoFTCntRepToSpamFilter(varValList, resultSpamTxt, kakaoVO.getTemplateContent()); |
|
| 257 |
+ |
|
| 258 |
+ if(resultSpam.length() > 0) {
|
|
| 259 |
+ |
|
| 260 |
+ modelAndView.addObject("result", "spams");
|
|
| 261 |
+ return modelAndView; |
|
| 262 |
+ |
|
| 263 |
+ } |
|
| 264 |
+ |
|
| 265 |
+ if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
|
| 266 |
+ |
|
| 267 |
+ String resultSmsTxtSpam = kakaoSendUtil.getKakaoFTCntRepToSpamFilter(varValList, resultSpamTxt, kakaoVO.getSmsTxtArea()); |
|
| 268 |
+ |
|
| 269 |
+ if(resultSmsTxtSpam.length() > 0) {
|
|
| 270 |
+ |
|
| 271 |
+ modelAndView.addObject("result", "spams");
|
|
| 272 |
+ return modelAndView; |
|
| 273 |
+ |
|
| 274 |
+ } |
|
| 275 |
+ |
|
| 276 |
+ } |
|
| 277 |
+ |
|
| 278 |
+ }else {//치환문자가 없는 경우 스팸 필터링
|
|
| 279 |
+ |
|
| 280 |
+ String resultSpam = kakaoSendUtil.getKakaoFTCntToSpamFilter(resultSpamTxt, kakaoVO.getTemplateContent()); |
|
| 281 |
+ |
|
| 282 |
+ if(resultSpam.length() > 0) {
|
|
| 283 |
+ |
|
| 284 |
+ modelAndView.addObject("result", "spams");
|
|
| 285 |
+ return modelAndView; |
|
| 286 |
+ |
|
| 287 |
+ } |
|
| 288 |
+ |
|
| 289 |
+ if(kakaoVO.getSubMsgSendYn().equals("Y")) {
|
|
| 290 |
+ |
|
| 291 |
+ String resultSmsTxtSpam = kakaoSendUtil.getKakaoFTCntToSpamFilter(resultSpamTxt, kakaoVO.getSmsTxtArea()); |
|
| 292 |
+ |
|
| 293 |
+ if(resultSmsTxtSpam.length() > 0) {
|
|
| 294 |
+ |
|
| 295 |
+ modelAndView.addObject("result", "spams");
|
|
| 296 |
+ return modelAndView; |
|
| 297 |
+ |
|
| 298 |
+ } |
|
| 299 |
+ |
|
| 300 |
+ } |
|
| 301 |
+ |
|
| 302 |
+ } |
|
| 303 |
+ |
|
| 304 |
+ } |
|
| 305 |
+ |
|
| 306 |
+ }catch (Exception e) {
|
|
| 307 |
+ e.printStackTrace(); |
|
| 308 |
+ modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select"));
|
|
| 309 |
+ modelAndView.addObject("result", "fail");
|
|
| 310 |
+ return modelAndView; |
|
| 311 |
+ } |
|
| 312 |
+ |
|
| 313 |
+ return modelAndView; |
|
| 314 |
+ } |
|
| 315 |
+ |
|
| 316 |
+ |
|
| 317 |
+ |
|
| 318 |
+ /** |
|
| 319 |
+ * @Method Name : kakaoFriendsTalkMsgSendAjax |
|
| 320 |
+ * @작성일 : 2024. 1. 16. |
|
| 321 |
+ * @작성자 : 우영두 |
|
| 322 |
+ * @Method 설명 : 카카오 친구톡 전송 |
|
| 323 |
+ */ |
|
| 324 |
+ @RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"})
|
|
| 325 |
+ public ModelAndView kakaoFriendsTalkMsgSendAjax(ModelMap model |
|
| 326 |
+ , HttpServletRequest request |
|
| 327 |
+ , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
|
| 328 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 329 |
+ modelAndView.setViewName("jsonView");
|
|
| 330 |
+ |
|
| 331 |
+ |
|
| 332 |
+ int resultSts = 0; //발송결과 건수 |
|
| 333 |
+ int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 |
|
| 334 |
+ |
|
| 335 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 336 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 337 |
+ |
|
| 89 | 338 |
try {
|
| 90 | 339 |
|
| 91 |
- /** 카카오톡 전송 기본 설정 -------------------------------------------*/ |
|
| 92 |
- /** 카카오톡 전송 금액 설정 -------------------------------------------*/ |
|
| 93 |
- /** 카카오톡 전송 분할 설정 -------------------------------------------*/ |
|
| 94 |
- /** 카카오톡 예약 전송 설정 -------------------------------------------*/ |
|
| 95 |
- /** 카카오톡 전송 메시지 설정 ------------------------------------------*/ |
|
| 96 |
- /** 카카오톡 발송 처리 -----------------------------------------------*/ |
|
| 97 |
- |
|
| 98 |
- }catch (Exception e) {
|
|
| 99 |
- System.out.println(" kakaoFriendsTalkMsgSendAjax Error ::: " + e);
|
|
| 340 |
+ if(userId == "") {
|
|
| 341 |
+ modelAndView.addObject("message", "로그인 후 이용이 가능합니다.");
|
|
| 342 |
+ modelAndView.addObject("result", "loginFail");
|
|
| 343 |
+ return modelAndView; |
|
| 344 |
+ }else {
|
|
| 345 |
+ |
|
| 346 |
+ /** |
|
| 347 |
+ * 회원 정지된 상태이면 알림톡 발송이 안되도록 처리함 |
|
| 348 |
+ * 현재 로그인 세션도 만료 처리함 |
|
| 349 |
+ * */ |
|
| 350 |
+ boolean mberSttus = userManageService.selectUserStatusInfo(userId); |
|
| 351 |
+ |
|
| 352 |
+ if(!mberSttus) {
|
|
| 353 |
+ |
|
| 354 |
+ modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
|
| 355 |
+ modelAndView.addObject("result", "authFail");
|
|
| 356 |
+ |
|
| 357 |
+ request.getSession().invalidate(); |
|
| 358 |
+ |
|
| 359 |
+ return modelAndView; |
|
| 360 |
+ |
|
| 361 |
+ } |
|
| 362 |
+ } |
|
| 363 |
+ |
|
| 364 |
+/** 카카오톡 전송 기본 설정 -------------------------------------------*/ |
|
| 365 |
+ kakaoVO.setSendType("FT");
|
|
| 366 |
+ kakaoVO.setMsgType("9");
|
|
| 367 |
+ kakaoVO.setUserId(userId); |
|
| 368 |
+ |
|
| 369 |
+ |
|
| 370 |
+/** 전송금액 설정 --------------------------------------------------*/ |
|
| 371 |
+ KakaoVO priceSet = kakaoSendUtil.kakaoFTSendPrice(kakaoVO); |
|
| 372 |
+ |
|
| 373 |
+ if(priceSet.getResultCode() != null && priceSet.getResultCode().equals("2000")) {
|
|
| 374 |
+ |
|
| 375 |
+ modelAndView.addObject("message", "대체문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
|
| 376 |
+ modelAndView.addObject("result", "fail");
|
|
| 377 |
+ return modelAndView; |
|
| 378 |
+ } |
|
| 379 |
+ |
|
| 380 |
+ BigDecimal befCash = new BigDecimal(priceSet.getBefCash()).setScale(2, RoundingMode.HALF_EVEN); |
|
| 381 |
+ BigDecimal totMsgPrice = new BigDecimal(priceSet.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN); |
|
| 382 |
+ |
|
| 383 |
+ kakaoVO.setEachPrice(priceSet.getEachPrice()); |
|
| 384 |
+ kakaoVO.setBefCash(befCash.toString()); |
|
| 385 |
+ kakaoVO.setTotPrice(totMsgPrice.toString()); |
|
| 386 |
+ |
|
| 387 |
+ //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 |
|
| 388 |
+ //BigDecimal 비교 연산 |
|
| 389 |
+ // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 |
|
| 390 |
+ if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice,
|
|
| 391 |
+ |
|
| 392 |
+ kakaoVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); // 문자 그룹ID 설정 |
|
| 393 |
+ |
|
| 394 |
+/** 카카오톡 전송 분할 설정 ----------------------------------------------*/ |
|
| 395 |
+ |
|
| 396 |
+ String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열 |
|
| 397 |
+ List<String[]> tempVarValList = new ArrayList<String[]>(); //임시 변수 리스트 저장용 |
|
| 398 |
+ |
|
| 399 |
+ String[] phoneList = kakaoVO.getCallToList(); |
|
| 400 |
+ List<String[]> varValList = null; |
|
| 401 |
+ |
|
| 402 |
+ |
|
| 403 |
+ //치환문자 포함 여부 |
|
| 404 |
+ if(kakaoVO.getTxtReplYn().equals("Y")) {
|
|
| 405 |
+ varValList = kakaoVO.getVarValList(); |
|
| 406 |
+ } |
|
| 407 |
+ |
|
| 408 |
+ System.out.println("+++++++++++++++++ 회원 스미싱 의심 온/오프 ::: "+kakaoVO.getAtSmishingYn());
|
|
| 409 |
+ |
|
| 410 |
+ //스팸 스미싱 여부 - 내용에 스팸 문자열 유무 체크 |
|
| 411 |
+ if(kakaoVO.getSpamStatus().equals("Y") || kakaoVO.getAtSmishingYn().equals("Y")) {
|
|
| 412 |
+ kakaoVO.setAtSmishingYn("Y");
|
|
| 413 |
+ }else {
|
|
| 414 |
+ kakaoVO.setAtSmishingYn("N");
|
|
| 415 |
+ } |
|
| 416 |
+ |
|
| 417 |
+ //스미싱 의심이 아니면 delayYn 값 셋팅 |
|
| 418 |
+ if(kakaoVO.getAtSmishingYn().equals("N")) {
|
|
| 419 |
+ kakaoVO.setAtDelayYn("N");
|
|
| 420 |
+ }else {
|
|
| 421 |
+ kakaoVO.setAtDelayYn("Y");
|
|
| 422 |
+ } |
|
| 423 |
+ |
|
| 424 |
+ //분할발송 여부 - 친구톡은 분할 발송이 없기애 N으로 픽스 |
|
| 425 |
+ kakaoVO.setDivideChk("N");
|
|
| 426 |
+ |
|
| 427 |
+ int callToListCnt = kakaoVO.getCallToList().length; |
|
| 428 |
+ kakaoVO.setTotalCallCnt(callToListCnt); |
|
| 429 |
+ |
|
| 430 |
+/** 예약 문자인 경우 설정 ----------------------------------------------*/ |
|
| 431 |
+ //분할문자 시간에 간격시간 더해주기 |
|
| 432 |
+ String dividDay = null; |
|
| 433 |
+ Calendar cal = Calendar.getInstance(); |
|
| 434 |
+ |
|
| 435 |
+ //예약시간 변환 |
|
| 436 |
+ SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 437 |
+ |
|
| 438 |
+ int turmMin = 0; |
|
| 439 |
+ int totalCallCnt = 0; // 수신자 전체 갯수 |
|
| 440 |
+ int divideCnt = 0; |
|
| 441 |
+ int count = 1; //분할 카운트 |
|
| 442 |
+ |
|
| 443 |
+ if(!kakaoVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅
|
|
| 444 |
+ |
|
| 445 |
+ Date toDate = transFormat.parse(kakaoVO.getReqDate()); |
|
| 446 |
+ cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 |
|
| 447 |
+ |
|
| 448 |
+ //turmMin = Integer.parseInt(kakaoVO.getDivideTime()); //분할발송 시간 간격 |
|
| 449 |
+ //dividDay = transFormat.format(cal.getTime()); |
|
| 450 |
+ |
|
| 451 |
+ totalCallCnt = kakaoVO.getCallToList().length; // 수신자 전체 갯수 |
|
| 452 |
+ //divideCnt = Integer.parseInt(kakaoVO.getDivideCnt()); //분할 발송 갯수 |
|
| 453 |
+ |
|
| 454 |
+ } |
|
| 455 |
+ |
|
| 456 |
+ //분할 예약 시간 저장 리스트 생성 |
|
| 457 |
+ List<String> dividDayList = new ArrayList<String>(); |
|
| 458 |
+ |
|
| 459 |
+ if(callToListCnt > 200) {
|
|
| 460 |
+ |
|
| 461 |
+ int sendCnt = 0; |
|
| 462 |
+ /** 카카오톡 전송 200개 이상일때 ----------------------------------------------*/ |
|
| 463 |
+ for(int i =0; i < callToListCnt; i++) {
|
|
| 464 |
+ |
|
| 465 |
+ //분할 발송을 체크 한 경우 |
|
| 466 |
+ /*if(kakaoVO.getDivideChk().equals("Y")) {
|
|
| 467 |
+ if(count > divideCnt) {
|
|
| 468 |
+ count = 1; |
|
| 469 |
+ cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다. |
|
| 470 |
+ dividDay = transFormat.format(cal.getTime()); |
|
| 471 |
+ dividDayList.add(dividDay); |
|
| 472 |
+ count++; |
|
| 473 |
+ }else {
|
|
| 474 |
+ dividDayList.add(dividDay); |
|
| 475 |
+ count++; |
|
| 476 |
+ } |
|
| 477 |
+ }*/ |
|
| 478 |
+ |
|
| 479 |
+ |
|
| 480 |
+ if((i < callToListCnt -1) && sendCnt == 199) {
|
|
| 481 |
+ |
|
| 482 |
+ tempPhoneList[sendCnt] = phoneList[i]; |
|
| 483 |
+ |
|
| 484 |
+ if(varValList != null) {
|
|
| 485 |
+ tempVarValList.add(varValList.get(i)); |
|
| 486 |
+ } |
|
| 487 |
+ |
|
| 488 |
+ List<String> arrPhoneList = new ArrayList<String>(); |
|
| 489 |
+ for(String temp : tempPhoneList) {
|
|
| 490 |
+ if(temp != null) {
|
|
| 491 |
+ arrPhoneList.add(temp); |
|
| 492 |
+ } |
|
| 493 |
+ } |
|
| 494 |
+ |
|
| 495 |
+ String[] sendPhoneList = new String[arrPhoneList.size()]; |
|
| 496 |
+ for(int j=0; j< arrPhoneList.size(); j++) {
|
|
| 497 |
+ sendPhoneList[j] = arrPhoneList.get(j); |
|
| 498 |
+ } |
|
| 499 |
+ |
|
| 500 |
+/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/ |
|
| 501 |
+ kakaoVO.setCallToList(sendPhoneList); |
|
| 502 |
+ kakaoVO.setVarValList(tempVarValList); |
|
| 503 |
+ KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO); |
|
| 504 |
+ kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); |
|
| 505 |
+ |
|
| 506 |
+/** 카카오톡 발송 처리 --------------------------------------------------*/ |
|
| 507 |
+ kakaoVO.setDividDay(dividDayList); |
|
| 508 |
+ MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO); |
|
| 509 |
+ resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); |
|
| 510 |
+ //전송 초기화 |
|
| 511 |
+ sendCnt = 0; |
|
| 512 |
+ Arrays.fill(tempPhoneList, null); |
|
| 513 |
+ tempVarValList.clear(); |
|
| 514 |
+ dividDayList.clear(); |
|
| 515 |
+ |
|
| 516 |
+ }else if((i == callToListCnt -1) && sendCnt < 200){//200개의 마지막일 경우 처리
|
|
| 517 |
+ |
|
| 518 |
+ tempPhoneList[sendCnt] = phoneList[i]; |
|
| 519 |
+ |
|
| 520 |
+ if(varValList != null) {
|
|
| 521 |
+ |
|
| 522 |
+ tempVarValList.add(varValList.get(i)); |
|
| 523 |
+ |
|
| 524 |
+ } |
|
| 525 |
+ |
|
| 526 |
+ List<String> arrPhoneList = new ArrayList<String>(); |
|
| 527 |
+ for(String temp : tempPhoneList) {
|
|
| 528 |
+ if(temp != null) {
|
|
| 529 |
+ arrPhoneList.add(temp); |
|
| 530 |
+ } |
|
| 531 |
+ } |
|
| 532 |
+ |
|
| 533 |
+ String[] sendPhoneList = new String[arrPhoneList.size()]; |
|
| 534 |
+ for(int j=0; j< arrPhoneList.size(); j++) {
|
|
| 535 |
+ sendPhoneList[j] = arrPhoneList.get(j); |
|
| 536 |
+ } |
|
| 537 |
+ |
|
| 538 |
+/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/ |
|
| 539 |
+ kakaoVO.setCallToList(sendPhoneList); |
|
| 540 |
+ kakaoVO.setVarValList(tempVarValList); |
|
| 541 |
+ KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO); |
|
| 542 |
+ kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); |
|
| 543 |
+ kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt()); |
|
| 544 |
+/** 카카오톡 발송 처리 --------------------------------------------------*/ |
|
| 545 |
+ kakaoVO.setDividDay(dividDayList); |
|
| 546 |
+ MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO); |
|
| 547 |
+ resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); |
|
| 548 |
+ }else {//198개가 될때까지 배열에 데이터를 쌓는다
|
|
| 549 |
+ |
|
| 550 |
+ tempPhoneList[sendCnt] = phoneList[i]; |
|
| 551 |
+ |
|
| 552 |
+ if(varValList != null && varValList.get(i).length > 0) {
|
|
| 553 |
+ tempVarValList.add(varValList.get(i)); |
|
| 554 |
+ } |
|
| 555 |
+ |
|
| 556 |
+ sendCnt++; |
|
| 557 |
+ } |
|
| 558 |
+ } |
|
| 559 |
+ }else {
|
|
| 560 |
+ /** 카카오톡 전송 200개 미만일때 ----------------------------------------------*/ |
|
| 561 |
+ //분할 발송을 체크 한 경우 |
|
| 562 |
+ /*if(kakaoVO.getDivideChk().equals("Y")) {
|
|
| 563 |
+ for(int i =0; i < callToListCnt; i++) {
|
|
| 564 |
+ if(count > divideCnt) {
|
|
| 565 |
+ count = 1; |
|
| 566 |
+ cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다. |
|
| 567 |
+ dividDay = transFormat.format(cal.getTime()); |
|
| 568 |
+ dividDayList.add(dividDay); |
|
| 569 |
+ count++; |
|
| 570 |
+ }else {
|
|
| 571 |
+ dividDayList.add(dividDay); |
|
| 572 |
+ count++; |
|
| 573 |
+ } |
|
| 574 |
+ } |
|
| 575 |
+ }*/ |
|
| 576 |
+ |
|
| 577 |
+ |
|
| 578 |
+ |
|
| 579 |
+/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/ |
|
| 580 |
+ KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO); |
|
| 581 |
+ kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); |
|
| 582 |
+ kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt()); |
|
| 583 |
+ |
|
| 584 |
+/** 카카오톡 발송 처리 --------------------------------------------------*/ |
|
| 585 |
+ kakaoVO.setDividDay(dividDayList); |
|
| 586 |
+ MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO); |
|
| 587 |
+ resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); |
|
| 588 |
+ |
|
| 589 |
+ } |
|
| 590 |
+ |
|
| 591 |
+/** 카카오톡 결과 처리 --------------------------------------------------*/ |
|
| 592 |
+ }else {
|
|
| 593 |
+ modelAndView.addObject("message", "친구톡 발송에 필요한 보유 잔액이 부족 합니다.");
|
|
| 594 |
+ modelAndView.addObject("result", "fail");
|
|
| 595 |
+ return modelAndView; |
|
| 596 |
+ } |
|
| 597 |
+ |
|
| 598 |
+ } catch (Exception e) {
|
|
| 599 |
+ System.out.println("kakaoFriendsTalkMsgSendAjax Controller Error !!!! "+e);
|
|
| 100 | 600 |
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
|
| 101 | 601 |
modelAndView.addObject("result", "fail");
|
| 102 | 602 |
return modelAndView; |
| 103 | 603 |
} |
| 604 |
+ |
|
| 605 |
+ modelAndView.addObject("message", "친구톡 전송이 완료되었습니다.");
|
|
| 606 |
+ modelAndView.addObject("result", "success");
|
|
| 607 |
+ modelAndView.addObject("resultSts", resultSts);
|
|
| 608 |
+ |
|
| 609 |
+ |
|
| 610 |
+/** 카카오 친구톡 발송 내용 법인폰, 친구톡 결과 처리 --------------------------------------------------*/ |
|
| 611 |
+ try {
|
|
| 612 |
+ String adminSmsNoticeYn = "Y"; |
|
| 613 |
+ String spamStatus = kakaoVO.getAtSmishingYn(); // 스미싱 의심으로 체크된 고객 정보 |
|
| 614 |
+ |
|
| 615 |
+ UserManageVO userManageVO = new UserManageVO(); |
|
| 616 |
+ userManageVO.setMberId(userId); |
|
| 617 |
+ |
|
| 618 |
+ if(!userId.equals("")) {
|
|
| 619 |
+ userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); |
|
| 620 |
+ adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); |
|
| 621 |
+ } |
|
| 622 |
+ |
|
| 623 |
+ //법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송 |
|
| 624 |
+ if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y")) {
|
|
| 625 |
+ |
|
| 626 |
+ if(spamStatus.equals("Y")) {
|
|
| 627 |
+ kakaoVO.setAtDelayYn("Y");
|
|
| 628 |
+ } |
|
| 629 |
+ |
|
| 630 |
+ // 법인폰 알람여부 체크 |
|
| 631 |
+ JoinSettingVO joinSettingVO = new JoinSettingVO(); |
|
| 632 |
+ joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); |
|
| 633 |
+ |
|
| 634 |
+ String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); |
|
| 635 |
+ |
|
| 636 |
+ //야간 스미싱의심 알림이 활성화 되어있는 경우 예외 알림 시간대가 아닌경우 슬랙 알림 발송 처리한다. |
|
| 637 |
+ if(holiSmishingNoti.equals("Y")) {
|
|
| 638 |
+ |
|
| 639 |
+ // SLACK 체크 |
|
| 640 |
+ if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
|
|
| 641 |
+ |
|
| 642 |
+ MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); |
|
| 643 |
+ |
|
| 644 |
+ msgAlarmSetVO.setUseYn("Y");
|
|
| 645 |
+ msgAlarmSetVO.setFirstIndex(0); |
|
| 646 |
+ |
|
| 647 |
+ List<MsgAlarmSetVO> resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); |
|
| 648 |
+ |
|
| 649 |
+ Calendar calendar = Calendar.getInstance(); |
|
| 650 |
+ int year = calendar.get(Calendar.YEAR); |
|
| 651 |
+ |
|
| 652 |
+ MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); |
|
| 653 |
+ msgHolidayVO.setFirstIndex(0); |
|
| 654 |
+ msgHolidayVO.setRecordCountPerPage(100); |
|
| 655 |
+ msgHolidayVO.setSearchHoliYear(Integer.toString(year)); |
|
| 656 |
+ |
|
| 657 |
+ List<MsgHolidayVO> resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO); |
|
| 658 |
+ |
|
| 659 |
+ MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); |
|
| 660 |
+ |
|
| 661 |
+ boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); |
|
| 662 |
+ |
|
| 663 |
+ if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송
|
|
| 664 |
+ |
|
| 665 |
+ MjonCommon comm = new MjonCommon(); |
|
| 666 |
+ comm.getAdminKakaoAtSandSlack(kakaoVO); |
|
| 667 |
+ |
|
| 668 |
+ } |
|
| 669 |
+ |
|
| 670 |
+ } |
|
| 671 |
+ |
|
| 672 |
+ } |
|
| 673 |
+ |
|
| 674 |
+ // SLACK 체크 |
|
| 675 |
+ /*if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
|
|
| 676 |
+ //Slack으로 메세지 전송 처리 |
|
| 677 |
+ MjonCommon comm = new MjonCommon(); |
|
| 678 |
+ comm.getAdminKakaoAtSandSlack(kakaoVO); |
|
| 679 |
+ }*/ |
|
| 680 |
+ } |
|
| 681 |
+ |
|
| 682 |
+ } catch (Exception e) {
|
|
| 683 |
+ throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e);
|
|
| 684 |
+ } |
|
| 685 |
+ |
|
| 686 |
+ |
|
| 104 | 687 |
return modelAndView; |
| 105 | 688 |
} |
| 106 | 689 |
|
| 690 |
+ |
|
| 691 |
+ /** |
|
| 692 |
+ * @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax |
|
| 693 |
+ * @작성일 : 2024. 1. 18. |
|
| 694 |
+ * @작성자 : 우영두 |
|
| 695 |
+ * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 |
|
| 696 |
+ */ |
|
| 697 |
+ @RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendRefundTestAjax.do"})
|
|
| 698 |
+ public ModelAndView kakaoFriendsTalkMsgSendRefundTestAjax(ModelMap model |
|
| 699 |
+ , HttpServletRequest request |
|
| 700 |
+ , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
|
| 701 |
+ |
|
| 702 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 703 |
+ modelAndView.setViewName("jsonView");
|
|
| 704 |
+ |
|
| 705 |
+ kakaoAlimTalkService.selectKakaoFtSentRefundList(); |
|
| 706 |
+ |
|
| 707 |
+ modelAndView.addObject("result", "success");
|
|
| 708 |
+ return modelAndView; |
|
| 709 |
+ } |
|
| 710 |
+ |
|
| 711 |
+ /** |
|
| 712 |
+ * @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax |
|
| 713 |
+ * @작성일 : 2024. 1. 18. |
|
| 714 |
+ * @작성자 : 우영두 |
|
| 715 |
+ * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 |
|
| 716 |
+ */ |
|
| 717 |
+ @RequestMapping(value= {"/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do"})
|
|
| 718 |
+ public String selectKakaoFriendsTalkTestSendPopup(ModelMap model |
|
| 719 |
+ , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
|
| 720 |
+ |
|
| 721 |
+ |
|
| 722 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 723 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 724 |
+ if(userId == "") {
|
|
| 725 |
+ return "redirect:/web/user/login/login.do"; |
|
| 726 |
+ }else {
|
|
| 727 |
+ //1.시스템 기본 단가 정보 불러오기 |
|
| 728 |
+ JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); |
|
| 729 |
+ |
|
| 730 |
+ //2.사용자 개인 단가 정보 불러오기 |
|
| 731 |
+ MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); |
|
| 732 |
+ Float kakaoFtPrice = mberManageVO.getKakaoFtPrice(); |
|
| 733 |
+ |
|
| 734 |
+ if(kakaoFtPrice < 1) {
|
|
| 735 |
+ kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice(); |
|
| 736 |
+ } |
|
| 737 |
+ |
|
| 738 |
+ BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); |
|
| 739 |
+ model.addAttribute("userMoney", userMoney);
|
|
| 740 |
+ model.addAttribute("kakaoFtPrice", kakaoFtPrice);
|
|
| 741 |
+ } |
|
| 742 |
+ |
|
| 743 |
+ String tmpContents = kakaoVO.getTemplateContent(); |
|
| 744 |
+ String txtReplYn = kakaoVO.getTxtReplYn(); |
|
| 745 |
+ |
|
| 746 |
+ if(txtReplYn.equals("Y")) {
|
|
| 747 |
+ |
|
| 748 |
+ String[] varValStr = kakaoVO.getVarValList().get(0); |
|
| 749 |
+ tmpContents = kakaoSendUtil.getKakaoFTCntReplace(varValStr[0], tmpContents); |
|
| 750 |
+ |
|
| 751 |
+ kakaoVO.setTemplateContent(tmpContents); |
|
| 752 |
+ |
|
| 753 |
+ } |
|
| 754 |
+ |
|
| 755 |
+ model.addAttribute("kakaoVO", kakaoVO);
|
|
| 756 |
+ |
|
| 757 |
+ return "web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataTestPop"; |
|
| 758 |
+ } |
|
| 759 |
+ |
|
| 760 |
+ |
|
| 107 | 761 |
} |
--- src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java
... | ... | @@ -34,6 +34,7 @@ |
| 34 | 34 |
import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService; |
| 35 | 35 |
import itn.let.mjo.symbol.service.MjonSymbolService; |
| 36 | 36 |
import itn.let.mjo.symbol.service.MjonSymbolVO; |
| 37 |
+import itn.let.uss.umt.service.EgovUserManageService; |
|
| 37 | 38 |
|
| 38 | 39 |
@Controller |
| 39 | 40 |
public class KakaoFriendsTalkTemplateController {
|
... | ... | @@ -53,6 +54,10 @@ |
| 53 | 54 |
|
| 54 | 55 |
@Resource(name = "mjonSymbolService") |
| 55 | 56 |
private MjonSymbolService mjonSymbolService; |
| 57 |
+ |
|
| 58 |
+ /** userManageService */ |
|
| 59 |
+ @Resource(name = "userManageService") |
|
| 60 |
+ private EgovUserManageService userManageService; |
|
| 56 | 61 |
|
| 57 | 62 |
@Autowired |
| 58 | 63 |
KakaoApiProfile kakaoApiProfile; |
... | ... | @@ -90,6 +95,8 @@ |
| 90 | 95 |
if(userId == "") {
|
| 91 | 96 |
return "redirect:/web/user/login/login.do"; |
| 92 | 97 |
} |
| 98 |
+ |
|
| 99 |
+ model.addAttribute("loginVO", loginVO);
|
|
| 93 | 100 |
|
| 94 | 101 |
try {
|
| 95 | 102 |
|
... | ... | @@ -260,11 +267,21 @@ |
| 260 | 267 |
|
| 261 | 268 |
KakaoReturnVO result = kakaoApiImageUpload.kakaoApiImageDelete(kakaoVO); |
| 262 | 269 |
|
| 270 |
+ String code = result.getBizReturnCode(); |
|
| 271 |
+ |
|
| 272 |
+ if(code.equals("200")) {//이미지 삭제 성공시 템플릿 디비에 있는 이미지 정보도 함께 지워준다.
|
|
| 273 |
+ |
|
| 274 |
+ kakaoVO.setUserId(userId); |
|
| 275 |
+ kakaoVO.setLastUpdusrId(userId); |
|
| 276 |
+ kakaoFtTemplateService.updateKakaoFriendsTemplateImageDataDel(kakaoVO); |
|
| 277 |
+ |
|
| 278 |
+ } |
|
| 279 |
+ |
|
| 263 | 280 |
modelAndView.addObject("code", result.getBizReturnCode());
|
| 264 | 281 |
modelAndView.addObject("msg", result.getBizReturnMsg());
|
| 265 | 282 |
modelAndView.addObject("result", "success");
|
| 266 | 283 |
} |
| 267 |
- }catch(Exception ex){
|
|
| 284 |
+ }catch(Exception ex){
|
|
| 268 | 285 |
ex.printStackTrace(); |
| 269 | 286 |
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
|
| 270 | 287 |
modelAndView.addObject("result", "fail");
|
... | ... | @@ -276,10 +293,10 @@ |
| 276 | 293 |
|
| 277 | 294 |
|
| 278 | 295 |
/** |
| 279 |
- * @methodName : deleteKakaoFriendsImageDataAjax |
|
| 296 |
+ * @methodName : selectKakaoFriendsTemplateList |
|
| 280 | 297 |
* @author : 우영두 |
| 281 | 298 |
* @date : 2023.03.23 |
| 282 |
- * @description : deleteKakaoFriendsImageDataAjax 카카오 친구톡 이미지 삭제요청 |
|
| 299 |
+ * @description : selectKakaoFriendsTemplateList 카카오 친구톡 템플릿 리스트 화면 |
|
| 283 | 300 |
* @param kakaoVO |
| 284 | 301 |
* @param model |
| 285 | 302 |
* @param response |
... | ... | @@ -297,7 +314,18 @@ |
| 297 | 314 |
return "redirect:/web/user/login/login.do"; |
| 298 | 315 |
} |
| 299 | 316 |
|
| 317 |
+ model.addAttribute("loginVO", loginVO);
|
|
| 318 |
+ |
|
| 300 | 319 |
try {
|
| 320 |
+ |
|
| 321 |
+ /** |
|
| 322 |
+ * 회원 정지된 상태이면 알림톡 템플릿 등록 화면으로 이동되지 않도록 처리 |
|
| 323 |
+ * */ |
|
| 324 |
+ boolean mberSttus = userManageService.selectUserStatusInfo(userId); |
|
| 325 |
+ |
|
| 326 |
+ if(!mberSttus) {
|
|
| 327 |
+ return "redirect:/web/uat/uia/actionLogout.do"; |
|
| 328 |
+ } |
|
| 301 | 329 |
|
| 302 | 330 |
//사용자 등록 발신프로필 정보 조회해오기 |
| 303 | 331 |
searchVO.setUserId(userId); |
... | ... | @@ -319,10 +347,10 @@ |
| 319 | 347 |
|
| 320 | 348 |
|
| 321 | 349 |
/** |
| 322 |
- * @methodName : deleteKakaoFriendsImageDataAjax |
|
| 350 |
+ * @methodName : selectKakaoFriendsTemplateListAjax |
|
| 323 | 351 |
* @author : 우영두 |
| 324 | 352 |
* @date : 2023.03.23 |
| 325 |
- * @description : deleteKakaoFriendsImageDataAjax 카카오 친구톡 이미지 삭제요청 |
|
| 353 |
+ * @description : selectKakaoFriendsTemplateListAjax 카카오 친구톡 템플릿 하단 리스트 정보 조회 |
|
| 326 | 354 |
* @param kakaoVO |
| 327 | 355 |
* @param model |
| 328 | 356 |
* @param response |
... | ... | @@ -345,12 +373,12 @@ |
| 345 | 373 |
/** pageing */ |
| 346 | 374 |
PaginationInfo paginationInfo = new PaginationInfo(); |
| 347 | 375 |
paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); |
| 348 |
- paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); |
|
| 376 |
+ paginationInfo.setRecordCountPerPage(9); |
|
| 349 | 377 |
paginationInfo.setPageSize(searchVO.getPageSize()); |
| 350 | 378 |
|
| 351 | 379 |
searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); |
| 352 | 380 |
searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); |
| 353 |
- searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); |
|
| 381 |
+ searchVO.setRecordCountPerPage(9); |
|
| 354 | 382 |
|
| 355 | 383 |
if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
| 356 | 384 |
searchVO.setSearchSortCnd("FRIEND_ID");
|
... | ... | @@ -456,4 +484,184 @@ |
| 456 | 484 |
return modelAndView; |
| 457 | 485 |
} |
| 458 | 486 |
|
| 487 |
+ |
|
| 488 |
+ /** |
|
| 489 |
+ * @methodName : selectKakaoFriendsTemplateDataDetail |
|
| 490 |
+ * @author : 우영두 |
|
| 491 |
+ * @date : 2024.01.04 |
|
| 492 |
+ * @description : selectKakaoFriendsTemplateDataDetail 카카오 친구톡 템플릿 상세 화면 |
|
| 493 |
+ * @param kakaoVO |
|
| 494 |
+ * @param model |
|
| 495 |
+ * @param response |
|
| 496 |
+ * @return |
|
| 497 |
+ * @throws Exception |
|
| 498 |
+ */ |
|
| 499 |
+ @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateDataDetail.do"})
|
|
| 500 |
+ public String selectKakaoFriendsTemplateDataDetail( |
|
| 501 |
+ @ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response
|
|
| 502 |
+ ) throws Exception {
|
|
| 503 |
+ |
|
| 504 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 505 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 506 |
+ if(userId == "") {
|
|
| 507 |
+ return "redirect:/web/user/login/login.do"; |
|
| 508 |
+ } |
|
| 509 |
+ |
|
| 510 |
+ model.addAttribute("loginVO", loginVO);
|
|
| 511 |
+ |
|
| 512 |
+ try {
|
|
| 513 |
+ |
|
| 514 |
+ //사용자 등록 발신프로필 정보 조회해오기 |
|
| 515 |
+ kakaoVO.setUserId(userId); |
|
| 516 |
+ List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); |
|
| 517 |
+ model.addAttribute("resultProfileList", resultProfileList);
|
|
| 518 |
+ |
|
| 519 |
+ // 특수문자 리스트 불러오기 |
|
| 520 |
+ MjonSymbolVO symbolVO = new MjonSymbolVO(); |
|
| 521 |
+ List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); |
|
| 522 |
+ model.addAttribute("symbolList", symbolList);
|
|
| 523 |
+ |
|
| 524 |
+ KakaoVO resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO); |
|
| 525 |
+ |
|
| 526 |
+ System.out.println("++++++++++++++++++ templateCode ::: "+kakaoVO.getFriendId());
|
|
| 527 |
+ System.out.println("++++++++++++++++++ senderKey ::: "+kakaoVO.getSenderKey());
|
|
| 528 |
+ |
|
| 529 |
+ model.addAttribute("resultTemplateVO", resultTemplateVO);
|
|
| 530 |
+ |
|
| 531 |
+ } catch (Exception e) {
|
|
| 532 |
+ System.out.println(" selectKakaoFriendsTemplateDataDetail Error ::: " + e);
|
|
| 533 |
+ } |
|
| 534 |
+ |
|
| 535 |
+ return "/web/kakao/template/ft/KakaoFriendstalkTemplateDetail"; |
|
| 536 |
+ } |
|
| 537 |
+ |
|
| 538 |
+ // 카카오 친구톡 템플릿 수정요청 |
|
| 539 |
+ /** |
|
| 540 |
+ * @methodName : updateKakaoFriendsTemplateDataAjax |
|
| 541 |
+ * @author : 우영두 |
|
| 542 |
+ * @date : 2024.01.05 |
|
| 543 |
+ * @description : updateKakaoFriendsTemplateDataAjax 카카오 친구톡 템플릿 수정요청 |
|
| 544 |
+ * @param kakaoVO |
|
| 545 |
+ * @param model |
|
| 546 |
+ * @param response |
|
| 547 |
+ * @return |
|
| 548 |
+ * @throws Exception |
|
| 549 |
+ */ |
|
| 550 |
+ @RequestMapping(value= {"/web/mjon/kakao/template/updateKakaoFriendsTemplateDataAjax.do"})
|
|
| 551 |
+ public ModelAndView updateKakaoFriendsTemplateDataAjax( |
|
| 552 |
+ @ModelAttribute("kakaoVO") KakaoVO kakaoVO
|
|
| 553 |
+ , final MultipartHttpServletRequest multiRequest |
|
| 554 |
+ ) throws Exception {
|
|
| 555 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 556 |
+ modelAndView.setViewName("jsonView");
|
|
| 557 |
+ |
|
| 558 |
+ try {
|
|
| 559 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 560 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 561 |
+ |
|
| 562 |
+ if(userId == "") {
|
|
| 563 |
+ modelAndView.addObject("result", "loginFail");
|
|
| 564 |
+ return modelAndView; |
|
| 565 |
+ }else {
|
|
| 566 |
+ |
|
| 567 |
+ kakaoVO.setUserId(userId); |
|
| 568 |
+ kakaoVO.setUserCallbackYn(userId); |
|
| 569 |
+ kakaoVO.setFrstRegisterId(userId); |
|
| 570 |
+ kakaoVO.setLastUpdusrId(userId); |
|
| 571 |
+ kakaoVO.setSendType("FT");
|
|
| 572 |
+ |
|
| 573 |
+ String imgUrl = kakaoVO.getTemplateImageUrl(); |
|
| 574 |
+ int buttonSize = kakaoVO.getButtonVOList().size(); |
|
| 575 |
+ |
|
| 576 |
+ if(!imgUrl.equals("") || buttonSize > 0) {
|
|
| 577 |
+ |
|
| 578 |
+ //json 파일 생성 처리 |
|
| 579 |
+ String resultJsonPath = kakaoFTJsonSave.kakaoApiJsonSave(kakaoVO); |
|
| 580 |
+ kakaoVO.setBizJsonName(resultJsonPath); |
|
| 581 |
+ |
|
| 582 |
+ } |
|
| 583 |
+ |
|
| 584 |
+ int result = kakaoFtTemplateService.updateKakaoFriendsTemplateData(kakaoVO); |
|
| 585 |
+ |
|
| 586 |
+ if(result > 0) {
|
|
| 587 |
+ modelAndView.addObject("result", "success");
|
|
| 588 |
+ }else {
|
|
| 589 |
+ modelAndView.addObject("result", "fail");
|
|
| 590 |
+ } |
|
| 591 |
+ } |
|
| 592 |
+ }catch(Exception ex){
|
|
| 593 |
+ ex.printStackTrace(); |
|
| 594 |
+ modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
|
|
| 595 |
+ modelAndView.addObject("result", "fail");
|
|
| 596 |
+ return modelAndView; |
|
| 597 |
+ } |
|
| 598 |
+ |
|
| 599 |
+ return modelAndView; |
|
| 600 |
+ } |
|
| 601 |
+ |
|
| 602 |
+ |
|
| 603 |
+ /** |
|
| 604 |
+ * @methodName : selectKakaoFriendsTemplateListPopupAjax |
|
| 605 |
+ * @author : 우영두 |
|
| 606 |
+ * @date : 2024.01.05 |
|
| 607 |
+ * @description : selectKakaoFriendsTemplateListPopupAjax 카카오 친구톡 발송화면 템플릿 팝업 리스트 화면 |
|
| 608 |
+ * @param kakaoVO |
|
| 609 |
+ * @param model |
|
| 610 |
+ * @param response |
|
| 611 |
+ * @return |
|
| 612 |
+ * @throws Exception |
|
| 613 |
+ */ |
|
| 614 |
+ @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do"})
|
|
| 615 |
+ public String selectKakaoFriendsTemplateListPopupAjax(@ModelAttribute("searchVO") KakaoVO searchVO,
|
|
| 616 |
+ HttpServletRequest request , |
|
| 617 |
+ ModelMap model) throws Exception{
|
|
| 618 |
+ |
|
| 619 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 620 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 621 |
+ if(userId == "") {
|
|
| 622 |
+ return "redirect:/uat/uia/EgovLoginUsr.do"; |
|
| 623 |
+ } |
|
| 624 |
+ |
|
| 625 |
+ try {
|
|
| 626 |
+ |
|
| 627 |
+ searchVO.setUserId(userId); |
|
| 628 |
+ |
|
| 629 |
+ /** pageing */ |
|
| 630 |
+ PaginationInfo paginationInfo = new PaginationInfo(); |
|
| 631 |
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); |
|
| 632 |
+ paginationInfo.setRecordCountPerPage(6); |
|
| 633 |
+ paginationInfo.setPageSize(searchVO.getPageSize()); |
|
| 634 |
+ |
|
| 635 |
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); |
|
| 636 |
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); |
|
| 637 |
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); |
|
| 638 |
+ |
|
| 639 |
+ if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
|
| 640 |
+ searchVO.setSearchSortCnd("FRIEND_ID");
|
|
| 641 |
+ searchVO.setSearchSortOrd("desc");
|
|
| 642 |
+ } |
|
| 643 |
+ |
|
| 644 |
+ List<KakaoVO> kakaoTemplateInfoList = new ArrayList<KakaoVO>(); |
|
| 645 |
+ // 문자발송 완료건은 모두 보이도록 처리 |
|
| 646 |
+ searchVO.setUserId(userId); |
|
| 647 |
+ kakaoTemplateInfoList = kakaoFtTemplateService.selectKakaoFriendsTemplateList(searchVO); |
|
| 648 |
+ model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList);
|
|
| 649 |
+ model.addAttribute("searchVO", searchVO);
|
|
| 650 |
+ |
|
| 651 |
+ paginationInfo.setTotalRecordCount(kakaoTemplateInfoList.size() > 0 ? ((KakaoVO)kakaoTemplateInfoList.get(0)).getTotCnt() : 0); |
|
| 652 |
+ model.addAttribute("paginationInfo", paginationInfo);
|
|
| 653 |
+ |
|
| 654 |
+ //사용자 등록 발신프로필 정보 조회해오기 |
|
| 655 |
+ searchVO.setUserId(userId); |
|
| 656 |
+ List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(searchVO); |
|
| 657 |
+ model.addAttribute("resultProfileList", resultProfileList);
|
|
| 658 |
+ |
|
| 659 |
+ } catch (Exception e) {
|
|
| 660 |
+ System.out.println("selectKakaoFriendsTemplateListAjax Controller Error !!! " + e);
|
|
| 661 |
+ } |
|
| 662 |
+ |
|
| 663 |
+ return "/web/kakao/template/ft/KakaoFriendstalkTemplateListPopupAjax"; |
|
| 664 |
+ |
|
| 665 |
+ } |
|
| 666 |
+ |
|
| 459 | 667 |
} |
--- src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
+++ src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
... | ... | @@ -1,5 +1,6 @@ |
| 1 | 1 |
package itn.let.kakao.user.sent.web; |
| 2 | 2 |
|
| 3 |
+import java.io.FileReader; |
|
| 3 | 4 |
import java.io.OutputStream; |
| 4 | 5 |
import java.text.SimpleDateFormat; |
| 5 | 6 |
import java.util.ArrayList; |
... | ... | @@ -19,6 +20,9 @@ |
| 19 | 20 |
import org.apache.poi.ss.usermodel.Sheet; |
| 20 | 21 |
import org.apache.poi.ss.util.CellRangeAddress; |
| 21 | 22 |
import org.apache.poi.xssf.streaming.SXSSFWorkbook; |
| 23 |
+import org.json.simple.JSONArray; |
|
| 24 |
+import org.json.simple.JSONObject; |
|
| 25 |
+import org.json.simple.parser.JSONParser; |
|
| 22 | 26 |
import org.slf4j.Logger; |
| 23 | 27 |
import org.slf4j.LoggerFactory; |
| 24 | 28 |
import org.springframework.beans.factory.annotation.Autowired; |
... | ... | @@ -35,6 +39,7 @@ |
| 35 | 39 |
import itn.com.cmm.util.StringUtil2; |
| 36 | 40 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 37 | 41 |
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; |
| 42 |
+import itn.let.kakao.kakaoComm.KakaoButtonVO; |
|
| 38 | 43 |
import itn.let.kakao.kakaoComm.KakaoReturnVO; |
| 39 | 44 |
import itn.let.kakao.kakaoComm.KakaoVO; |
| 40 | 45 |
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; |
... | ... | @@ -244,16 +249,36 @@ |
| 244 | 249 |
mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt())); |
| 245 | 250 |
model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
| 246 | 251 |
|
| 247 |
- // 템플릿 api 가져오기 |
|
| 248 |
- KakaoVO kakaoVO = new KakaoVO(); |
|
| 249 |
- kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); |
|
| 250 |
- kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); |
|
| 252 |
+ String msgType = mjonKakaoATResultVO.getMsgType(); |
|
| 251 | 253 |
|
| 252 |
- KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 254 |
+ if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리
|
|
| 255 |
+ |
|
| 256 |
+ // 템플릿 api 가져오기 |
|
| 257 |
+ KakaoVO kakaoVO = new KakaoVO(); |
|
| 258 |
+ kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); |
|
| 259 |
+ kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); |
|
| 260 |
+ |
|
| 261 |
+ KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 262 |
+ |
|
| 263 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 264 |
+ // //템플릿 api 가져오기 |
|
| 265 |
+ |
|
| 266 |
+ }else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리
|
|
| 267 |
+ |
|
| 268 |
+ //String smsTxt = mjonKakaoATResultVO.getSmsTxt(); |
|
| 269 |
+ |
|
| 270 |
+ KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); |
|
| 271 |
+ //kakaoTemplateInfo.setTemplateContent(smsTxt); |
|
| 272 |
+ |
|
| 273 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 274 |
+ |
|
| 275 |
+ }else {
|
|
| 276 |
+ |
|
| 277 |
+ model.addAttribute("kakaoTemplateInfo", "");
|
|
| 278 |
+ |
|
| 279 |
+ } |
|
| 253 | 280 |
|
| 254 |
- model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 255 |
- // //템플릿 api 가져오기 |
|
| 256 |
- |
|
| 281 |
+ model.addAttribute("msgType", msgType);
|
|
| 257 | 282 |
return "web/kakao/sent/KakaoSentDetailPopAjax"; |
| 258 | 283 |
} |
| 259 | 284 |
|
... | ... | @@ -278,27 +303,45 @@ |
| 278 | 303 |
|
| 279 | 304 |
//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) |
| 280 | 305 |
MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailData2Ajax(mjonKakaoATVO); |
| 281 |
- // 대체문자 엔터키 치환 |
|
| 282 |
- mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans())); |
|
| 283 | 306 |
|
| 284 |
- // 강조형 타이틀이 있는지 없는지 구분 |
|
| 285 |
- if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle())) |
|
| 286 |
- {
|
|
| 287 |
- String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
|
|
| 288 |
- mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]); |
|
| 289 |
- mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]); |
|
| 307 |
+ String msgType = mjonKakaoATResultVO.getMsgType(); |
|
| 308 |
+ |
|
| 309 |
+ if(msgType.equals("8")) {
|
|
| 310 |
+ |
|
| 311 |
+ // 대체문자 엔터키 치환 |
|
| 312 |
+ mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans())); |
|
| 313 |
+ |
|
| 314 |
+ // 강조형 타이틀이 있는지 없는지 구분 |
|
| 315 |
+ if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle())) |
|
| 316 |
+ {
|
|
| 317 |
+ String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
|
|
| 318 |
+ mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]); |
|
| 319 |
+ mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]); |
|
| 320 |
+ } |
|
| 321 |
+ |
|
| 322 |
+ model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
|
| 323 |
+ |
|
| 324 |
+ // 템플릿 api 가져오기 |
|
| 325 |
+ KakaoVO kakaoVO = new KakaoVO(); |
|
| 326 |
+ kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); |
|
| 327 |
+ kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); |
|
| 328 |
+ |
|
| 329 |
+ KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 330 |
+ |
|
| 331 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 332 |
+ |
|
| 333 |
+ }else if(msgType.equals("9")) {
|
|
| 334 |
+ |
|
| 335 |
+ KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); |
|
| 336 |
+ |
|
| 337 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 338 |
+ model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
|
| 339 |
+ |
|
| 340 |
+ }else {
|
|
| 341 |
+ |
|
| 342 |
+ model.addAttribute("kakaoTemplateInfo", "");
|
|
| 343 |
+ |
|
| 290 | 344 |
} |
| 291 |
- |
|
| 292 |
- model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
|
| 293 |
- |
|
| 294 |
- // 템플릿 api 가져오기 |
|
| 295 |
- KakaoVO kakaoVO = new KakaoVO(); |
|
| 296 |
- kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); |
|
| 297 |
- kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); |
|
| 298 |
- |
|
| 299 |
- KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 300 |
- |
|
| 301 |
- model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 302 | 345 |
|
| 303 | 346 |
return "web/kakao/sent/KakaoSentDetailPop2Ajax"; |
| 304 | 347 |
} |
... | ... | @@ -846,5 +889,101 @@ |
| 846 | 889 |
|
| 847 | 890 |
} |
| 848 | 891 |
|
| 892 |
+ |
|
| 893 |
+ /* |
|
| 894 |
+ * 20240122 우영두 추가 |
|
| 895 |
+ * 친구톡 발송 결과 내용 팝업 처리 |
|
| 896 |
+ * 발송 내용 처리 및 첨부 이미지, 버튼 정보 처리 |
|
| 897 |
+ * |
|
| 898 |
+ * */ |
|
| 899 |
+ public KakaoReturnVO getKakaoFTSendTemplateInfo(MjonKakaoATVO kakaoATVO) throws Exception {
|
|
| 900 |
+ |
|
| 901 |
+ KakaoReturnVO returnVO = new KakaoReturnVO(); |
|
| 902 |
+ try {
|
|
| 903 |
+ |
|
| 904 |
+ String tmpContent = kakaoATVO.getSmsTxtTrans(); |
|
| 905 |
+ String jsonFilePath = kakaoATVO.getBizKakaoJsonFile(); |
|
| 906 |
+ |
|
| 907 |
+ //친구톡 이미지 또는 버튼 정보가 있다면 실행 |
|
| 908 |
+ if(jsonFilePath != null && jsonFilePath.length() > 0) {
|
|
| 909 |
+ |
|
| 910 |
+ FileReader reader = new FileReader(jsonFilePath); |
|
| 911 |
+ int ch; |
|
| 912 |
+ String resultStr = ""; |
|
| 913 |
+ while ((ch = reader.read()) != -1) {
|
|
| 914 |
+ |
|
| 915 |
+ resultStr = resultStr + (char)ch; |
|
| 916 |
+ } |
|
| 917 |
+ |
|
| 918 |
+ JSONParser parser = new JSONParser(); |
|
| 919 |
+ Object obj = parser.parse(resultStr); |
|
| 920 |
+ JSONObject object = (JSONObject) obj; |
|
| 921 |
+ |
|
| 922 |
+ String image = (object.get("image") == null) ? null : object.get("image").toString();
|
|
| 923 |
+ String button = (object.get("button") == null) ? null : object.get("button").toString();
|
|
| 924 |
+ |
|
| 925 |
+ if(image != null) {
|
|
| 926 |
+ |
|
| 927 |
+ Object imagObj = parser.parse(image); |
|
| 928 |
+ JSONObject jsonImgObj = (JSONObject) imagObj; |
|
| 929 |
+ |
|
| 930 |
+ System.out.println(jsonImgObj.toJSONString()); |
|
| 931 |
+ |
|
| 932 |
+ String imgUrl = (jsonImgObj.get("img_url") == null) ? null : jsonImgObj.get("img_url").toString();
|
|
| 933 |
+ |
|
| 934 |
+ System.out.println(imgUrl); |
|
| 935 |
+ |
|
| 936 |
+ returnVO.setTemplateEmphasizeType("IMAGE");
|
|
| 937 |
+ returnVO.setTemplateImageUrl(imgUrl); |
|
| 938 |
+ |
|
| 939 |
+ } |
|
| 940 |
+ |
|
| 941 |
+ if(button != null) {
|
|
| 942 |
+ |
|
| 943 |
+ JSONArray buttonJsonList = (JSONArray) object.get("button");
|
|
| 944 |
+ |
|
| 945 |
+ System.out.println(buttonJsonList.size()); |
|
| 946 |
+ |
|
| 947 |
+ List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>(); |
|
| 948 |
+ |
|
| 949 |
+ for(int i=0; i < buttonJsonList.size(); i++) {
|
|
| 950 |
+ |
|
| 951 |
+ JSONObject itemInfo = (JSONObject)buttonJsonList.get(i); |
|
| 952 |
+ |
|
| 953 |
+ String name = itemInfo.get("name").toString();
|
|
| 954 |
+ |
|
| 955 |
+ System.out.println(name); |
|
| 956 |
+ |
|
| 957 |
+ KakaoButtonVO buttonVO = new KakaoButtonVO(); |
|
| 958 |
+ |
|
| 959 |
+ buttonVO.setName(name); |
|
| 960 |
+ |
|
| 961 |
+ buttonList.add(buttonVO); |
|
| 962 |
+ |
|
| 963 |
+ } |
|
| 964 |
+ |
|
| 965 |
+ returnVO.setButtonList(buttonList); |
|
| 966 |
+ |
|
| 967 |
+ for(KakaoButtonVO butVO : returnVO.getButtonList()) {
|
|
| 968 |
+ |
|
| 969 |
+ System.out.println("+++++++++++++ btn name ::: "+butVO.getName());
|
|
| 970 |
+ |
|
| 971 |
+ } |
|
| 972 |
+ |
|
| 973 |
+ } |
|
| 974 |
+ |
|
| 975 |
+ } |
|
| 976 |
+ |
|
| 977 |
+ //친구톡 내용 셋팅 |
|
| 978 |
+ returnVO.setTemplateContent(tmpContent); |
|
| 979 |
+ |
|
| 980 |
+ } catch (Exception e) {
|
|
| 981 |
+ e.printStackTrace(); |
|
| 982 |
+ } |
|
| 983 |
+ |
|
| 984 |
+ return returnVO; |
|
| 985 |
+ |
|
| 986 |
+ } |
|
| 987 |
+ |
|
| 849 | 988 |
|
| 850 | 989 |
} |
--- src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
+++ src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
... | ... | @@ -265,7 +265,12 @@ |
| 265 | 265 |
String smisingSmsTxt = ""; |
| 266 | 266 |
//예약문자를 발송하는 경우 문자 내용 앞에 "[예약]" 표시되도록 처리 |
| 267 | 267 |
if(reserveYn.equals("Y")) {
|
| 268 |
- reservSmsTxt = "[예약]" + smsTxt; |
|
| 268 |
+ |
|
| 269 |
+ if(atDelayYn.equals("Y")) {//예약문자 중 스미싱의심 일 경우
|
|
| 270 |
+ reservSmsTxt = "[스미싱의심][예약]" + smsTxt; |
|
| 271 |
+ }else {
|
|
| 272 |
+ reservSmsTxt = "[예약]" + smsTxt; |
|
| 273 |
+ } |
|
| 269 | 274 |
smsTxt = reservSmsTxt; |
| 270 | 275 |
}else if(atDelayYn.equals("Y")) {
|
| 271 | 276 |
|
... | ... | @@ -280,7 +285,7 @@ |
| 280 | 285 |
if(kakaoVO.getMsgType().equals("8")) {
|
| 281 | 286 |
msgType = "[알림톡]"; |
| 282 | 287 |
}else if(kakaoVO.getMsgType().equals("9")){
|
| 283 |
- |
|
| 288 |
+ msgType = "[친구톡]"; |
|
| 284 | 289 |
} |
| 285 | 290 |
sandName = "[" + userId + "]" + "[" + sandName + "]" + msgType; |
| 286 | 291 |
|
--- src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
+++ src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
... | ... | @@ -6,7 +6,7 @@ |
| 6 | 6 |
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
| 7 | 7 |
|
| 8 | 8 |
import itn.com.cmm.ComDefaultVO; |
| 9 |
-import itn.com.cmm.MjonMsgTabulVO; |
|
| 9 |
+import itn.com.cmm.MjonMsgSendVO; |
|
| 10 | 10 |
import lombok.Getter; |
| 11 | 11 |
import lombok.Setter; |
| 12 | 12 |
|
... | ... | @@ -305,6 +305,6 @@ |
| 305 | 305 |
|
| 306 | 306 |
private String detailType; |
| 307 | 307 |
|
| 308 |
- private List<MjonMsgTabulVO> mjonMsgTabulListVO = new ArrayList<>(); |
|
| 308 |
+ private List<MjonMsgSendVO> mjonMsgSendVOList = new ArrayList<>(); |
|
| 309 | 309 |
|
| 310 | 310 |
} |
--- src/main/java/itn/let/mjo/msgdata/service/ReplacementListsVO.java
... | ... | @@ -1,59 +0,0 @@ |
| 1 | -package itn.let.mjo.msgdata.service; | |
| 2 | - | |
| 3 | -import itn.let.mjo.msg.service.MjonMsgVO; | |
| 4 | -import lombok.Getter; | |
| 5 | -import lombok.NoArgsConstructor; | |
| 6 | -import lombok.Setter; | |
| 7 | - | |
| 8 | -@Getter | |
| 9 | -@Setter | |
| 10 | -@NoArgsConstructor | |
| 11 | -public class ReplacementListsVO { | |
| 12 | - String[] shortNameList; | |
| 13 | - String[] shortPhone; | |
| 14 | - String[] shortRep1; | |
| 15 | - String[] shortRep2; | |
| 16 | - String[] shortRep3; | |
| 17 | - String[] shortRep4; | |
| 18 | - int shortCnt; | |
| 19 | - | |
| 20 | - String[] longNameList; | |
| 21 | - String[] longPhone; | |
| 22 | - String[] longRep1; | |
| 23 | - String[] longRep2; | |
| 24 | - String[] longRep3; | |
| 25 | - String[] longRep4; | |
| 26 | - int longCnt; | |
| 27 | - | |
| 28 | - String[] imgNameList; | |
| 29 | - String[] imgPhone; | |
| 30 | - String[] imgRep1; | |
| 31 | - String[] imgRep2; | |
| 32 | - String[] imgRep3; | |
| 33 | - String[] imgRep4; | |
| 34 | - int imgCnt; | |
| 35 | - | |
| 36 | - // 배열을 초기화하는 메서드 | |
| 37 | - public void initializeLists(MjonMsgVO mjonMsgVO) { | |
| 38 | - shortNameList = new String[Integer.parseInt(mjonMsgVO.getShortMsgCnt())]; | |
| 39 | - shortPhone = new String[shortNameList.length]; | |
| 40 | - shortRep1 = new String[shortNameList.length]; | |
| 41 | - shortRep2 = new String[shortNameList.length]; | |
| 42 | - shortRep3 = new String[shortNameList.length]; | |
| 43 | - shortRep4 = new String[shortNameList.length]; | |
| 44 | - | |
| 45 | - longNameList = new String[Integer.parseInt(mjonMsgVO.getLongMsgCnt())]; | |
| 46 | - longPhone = new String[longNameList.length]; | |
| 47 | - longRep1 = new String[longNameList.length]; | |
| 48 | - longRep2 = new String[longNameList.length]; | |
| 49 | - longRep3 = new String[longNameList.length]; | |
| 50 | - longRep4 = new String[longNameList.length]; | |
| 51 | - | |
| 52 | - imgNameList = new String[mjonMsgVO.getCallToList().length]; | |
| 53 | - imgPhone = new String[imgNameList.length]; | |
| 54 | - imgRep1 = new String[imgNameList.length]; | |
| 55 | - imgRep2 = new String[imgNameList.length]; | |
| 56 | - imgRep3 = new String[imgNameList.length]; | |
| 57 | - imgRep4 = new String[imgNameList.length]; | |
| 58 | - } | |
| 59 | -} |
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
... | ... | @@ -27,6 +27,7 @@ |
| 27 | 27 |
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
| 28 | 28 |
import egovframework.rte.psl.dataaccess.util.EgovMap; |
| 29 | 29 |
import itn.com.cmm.LoginVO; |
| 30 |
+import itn.com.cmm.MjonMsgSendVO; |
|
| 30 | 31 |
import itn.com.cmm.util.MJUtil; |
| 31 | 32 |
import itn.com.cmm.util.MsgSendUtils; |
| 32 | 33 |
import itn.com.cmm.util.StringUtil; |
... | ... | @@ -47,7 +48,6 @@ |
| 47 | 48 |
import itn.let.mjo.msgdata.service.MjonMsgDataService; |
| 48 | 49 |
import itn.let.mjo.msgdata.service.MjonMsgDataVO; |
| 49 | 50 |
import itn.let.mjo.msgdata.service.MjonMsgReturnVO; |
| 50 |
-import itn.let.mjo.msgdata.service.ReplacementListsVO; |
|
| 51 | 51 |
import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; |
| 52 | 52 |
import itn.let.mjo.msgholiday.service.MsgHolidayVO; |
| 53 | 53 |
import itn.let.mjo.msgholiday.service.impl.MsgHolidayDAO; |
... | ... | @@ -4022,6 +4022,7 @@ |
| 4022 | 4022 |
smsTxt = "(광고)"+smsTxt |
| 4023 | 4023 |
+"\n"+"무료거부 0808800858"; |
| 4024 | 4024 |
} |
| 4025 |
+ mjonMsgVO.setSmsTxt(smsTxt); |
|
| 4025 | 4026 |
|
| 4026 | 4027 |
log.debug(" :: smsTxt :: [{}]", smsTxt);
|
| 4027 | 4028 |
|
... | ... | @@ -4034,16 +4035,6 @@ |
| 4034 | 4035 |
|
| 4035 | 4036 |
log.debug(" + mjonMsgVO.getFileCnt() :: [{}]", mjonMsgVO.getFileCnt());
|
| 4036 | 4037 |
|
| 4037 |
- ////////////////////////////////// |
|
| 4038 |
- ////////////////////////////////// |
|
| 4039 |
- ////////////////////////////////// |
|
| 4040 |
- if(true) {
|
|
| 4041 |
- return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 테스트 실패"); |
|
| 4042 |
- } |
|
| 4043 |
- ////////////////////////////////// |
|
| 4044 |
- ////////////////////////////////// |
|
| 4045 |
- ////////////////////////////////// |
|
| 4046 |
- |
|
| 4047 | 4038 |
|
| 4048 | 4039 |
/* |
| 4049 | 4040 |
* 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기 |
... | ... | @@ -4052,23 +4043,23 @@ |
| 4052 | 4043 |
* 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌. |
| 4053 | 4044 |
*/ |
| 4054 | 4045 |
|
| 4055 |
- int smsTxtByte = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt()); |
|
| 4056 |
- if(smsTxtByte > 2000) {
|
|
| 4057 |
- return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다."); |
|
| 4058 |
- } |
|
| 4046 |
+// int smsTxtByte = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt()); |
|
| 4047 |
+// if(smsTxtByte > 2000) {
|
|
| 4048 |
+// return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다."); |
|
| 4049 |
+// } |
|
| 4059 | 4050 |
|
| 4060 | 4051 |
// MSG_TYPE 설정 |
| 4061 |
- String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsTxtByte); |
|
| 4062 |
- if ("INVALID".equals(msgType)) {
|
|
| 4063 |
- return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다."); |
|
| 4064 |
- } |
|
| 4065 |
- mjonMsgVO.setMsgType(msgType); |
|
| 4052 |
+// String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsTxtByte); |
|
| 4053 |
+// if ("INVALID".equals(msgType)) {
|
|
| 4054 |
+// return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다."); |
|
| 4055 |
+// } |
|
| 4056 |
+// mjonMsgVO.setMsgType(msgType); |
|
| 4066 | 4057 |
|
| 4067 |
- |
|
| 4068 |
- |
|
| 4069 |
- MjonEventVO mjonEventVO = new MjonEventVO(); |
|
| 4070 |
- mjonEventVO.setMberId(userId); |
|
| 4071 |
- |
|
| 4058 |
+ |
|
| 4059 |
+ ///////////////////////////////////////////////////////////////////////////// |
|
| 4060 |
+ // 금액 관련은 끝에서 이벤트 발송 / 기존금액 박송으로 나눠야하기 때문에 나중에 수정 |
|
| 4061 |
+ ///////////////////////////////////////////////////////////////////////////// |
|
| 4062 |
+ /* |
|
| 4072 | 4063 |
//1.시스템 기본 단가 정보 불러오기 |
| 4073 | 4064 |
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); |
| 4074 | 4065 |
|
... | ... | @@ -4089,7 +4080,11 @@ |
| 4089 | 4080 |
// 기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 |
| 4090 | 4081 |
// boolean compareEndDate = false; |
| 4091 | 4082 |
float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); |
| 4083 |
+ |
|
| 4092 | 4084 |
|
| 4085 |
+ |
|
| 4086 |
+ MjonEventVO mjonEventVO = new MjonEventVO(); |
|
| 4087 |
+ mjonEventVO.setMberId(userId); |
|
| 4093 | 4088 |
|
| 4094 | 4089 |
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); |
| 4095 | 4090 |
// 호출부에서 handleEventStatus를 호출하고 예외 처리를 추가 |
... | ... | @@ -4113,7 +4108,10 @@ |
| 4113 | 4108 |
picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); |
| 4114 | 4109 |
} |
| 4115 | 4110 |
} |
| 4116 |
- |
|
| 4111 |
+ |
|
| 4112 |
+ |
|
| 4113 |
+ |
|
| 4114 |
+ |
|
| 4117 | 4115 |
|
| 4118 | 4116 |
// 토탈금액 "," 리플레이스 처리 |
| 4119 | 4117 |
mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", ""));
|
... | ... | @@ -4126,35 +4124,83 @@ |
| 4126 | 4124 |
int tmpTotCallCnt = mjonMsgVO.getCallToList().length; |
| 4127 | 4125 |
float tmpTotPrice = tmpTotCallCnt * tmpEachPrice; |
| 4128 | 4126 |
mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice)); |
| 4129 |
- |
|
| 4127 |
+*/ |
|
| 4128 |
+ ///////////////////////////////////////////////////////////////////////////// |
|
| 4129 |
+ // 금액 관련은 끝에서 이벤트 발송 / 기존금액 박송으로 나눠야하기 때문에 나중에 수정 |
|
| 4130 |
+ ///////////////////////////////////////////////////////////////////////////// |
|
| 4130 | 4131 |
|
| 4131 | 4132 |
|
| 4132 | 4133 |
//////////////////////////////////////////////// |
| 4133 | 4134 |
// 치환 여부 |
| 4134 | 4135 |
//////////////////////////////////////////////// |
| 4135 |
- if (MsgSendUtils.isReplacementRequired(mjonMsgVO)) {
|
|
| 4136 |
+ List<MjonMsgSendVO> mjonMsgSendVOList = mjonMsgVO.getMjonMsgSendVOList(); |
|
| 4137 |
+// if (MsgSendUtils.isRepleasYN(mjonMsgVO)) {
|
|
| 4136 | 4138 |
|
| 4137 |
- if (!MsgSendUtils.validateReplacementData(mjonMsgVO, statusResponse)) {
|
|
| 4138 |
- //특정문구 일괄변환 치환문자 데이터가 없습니다. |
|
| 4139 |
- return statusResponse; // 유효성 검사 실패 시 처리 |
|
| 4140 |
- } |
|
| 4139 |
+// if (!MsgSendUtils.validateReplacementData(mjonMsgVO, mjonMsgTabulVO)) {
|
|
| 4140 |
+// //특정문구 일괄변환 치환문자 데이터가 없습니다. |
|
| 4141 |
+// return statusResponse; // 유효성 검사 실패 시 처리 |
|
| 4142 |
+// } |
|
| 4141 | 4143 |
|
| 4142 | 4144 |
|
| 4143 |
- |
|
| 4144 |
- // 치환 문자 리스트 생성 |
|
| 4145 |
- ReplacementListsVO intiLists = MsgSendUtils.createReplacementLists(mjonMsgVO); |
|
| 4146 |
- if(!MsgSendUtils.populateReplacementLists(mjonMsgVO ,intiLists, statusResponse)) {;
|
|
| 4147 |
- //문자 치환 후 전송 문자 길이를 초과하였습니다. |
|
| 4148 |
- //문자 치환 중 오류가 발생하였습니다. |
|
| 4149 |
- return statusResponse; |
|
| 4150 |
- } |
|
| 4151 |
- |
|
| 4152 |
- // 발송 처리 |
|
| 4153 |
- statusResponse = processMessageSending(mjonMsgVO, intiLists, statusResponse); |
|
| 4154 |
- } else {
|
|
| 4155 |
- // 일반 문자 발송 |
|
| 4156 |
- statusResponse = fncSendMsg(mjonMsgVO); |
|
| 4145 |
+ |
|
| 4146 |
+ log.info(" ++ mjonMsgVO.getSpamStatus() :: [{}]", mjonMsgVO.getSpamStatus());
|
|
| 4147 |
+ // smstxt 치환 및 스팸체크 후 mjonMsgSendVOList 에 add() |
|
| 4148 |
+ List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); |
|
| 4149 |
+ if(!MsgSendUtils.populateSendLists(mjonMsgVO, mjonMsgSendVOList, statusResponse, resultSpamTxt)) {;
|
|
| 4150 |
+ //문자 치환 후 전송 문자 길이를 초과하였습니다. |
|
| 4151 |
+ //문자 치환 중 오류가 발생하였습니다. |
|
| 4152 |
+ return statusResponse; |
|
| 4157 | 4153 |
} |
| 4154 |
+ log.info(" ++ mjonMsgVO.getSpamStatus() :: [{}]", mjonMsgVO.getSpamStatus());
|
|
| 4155 |
+ |
|
| 4156 |
+ |
|
| 4157 |
+ // 수신목록 셋팅 |
|
| 4158 |
+ |
|
| 4159 |
+ |
|
| 4160 |
+ |
|
| 4161 |
+ // 수신거부 목록 불러오기 |
|
| 4162 |
+ List<String> userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); |
|
| 4163 |
+ |
|
| 4164 |
+ List<String> dupliBlockList = MJUtil.getDuplicateList(userBlockList); |
|
| 4165 |
+ int usrBlockCnt = dupliBlockList.size(); |
|
| 4166 |
+ |
|
| 4167 |
+ |
|
| 4168 |
+ |
|
| 4169 |
+ |
|
| 4170 |
+ |
|
| 4171 |
+ |
|
| 4172 |
+ |
|
| 4173 |
+ |
|
| 4174 |
+ |
|
| 4175 |
+ |
|
| 4176 |
+ |
|
| 4177 |
+ |
|
| 4178 |
+ |
|
| 4179 |
+// mjonMsgSendVOList.stream().forEach(t-> System.out.println(t.toString())); |
|
| 4180 |
+ |
|
| 4181 |
+// mjonMsgSendVOList.stream() |
|
| 4182 |
+// .map(MjonMsgSendVO::getSmsTxt) // 각 객체의 getSmsTxt() 호출 |
|
| 4183 |
+// .forEach(System.out::println); // 결과를 바로 출력 |
|
| 4184 |
+ |
|
| 4185 |
+ |
|
| 4186 |
+ |
|
| 4187 |
+ |
|
| 4188 |
+ ////////////////////////////////// |
|
| 4189 |
+ ////////////////////////////////// |
|
| 4190 |
+ ////////////////////////////////// |
|
| 4191 |
+// if(true) {
|
|
| 4192 |
+// return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 테스트 실패"); |
|
| 4193 |
+// } |
|
| 4194 |
+ ////////////////////////////////// |
|
| 4195 |
+ ////////////////////////////////// |
|
| 4196 |
+ ////////////////////////////////// |
|
| 4197 |
+ |
|
| 4198 |
+ // 발송 처리 |
|
| 4199 |
+// statusResponse = processMessageSending(mjonMsgVO, intiLists, statusResponse); |
|
| 4200 |
+// } else {
|
|
| 4201 |
+// // 일반 문자 발송 |
|
| 4202 |
+// statusResponse = fncSendMsg(mjonMsgVO); |
|
| 4203 |
+// } |
|
| 4158 | 4204 |
|
| 4159 | 4205 |
return statusResponse; |
| 4160 | 4206 |
|
... | ... | @@ -4208,6 +4254,7 @@ |
| 4208 | 4254 |
|
| 4209 | 4255 |
String imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(fileId[i]); |
| 4210 | 4256 |
|
| 4257 |
+ log.info("imgFilePath : [{}]", imgFilePath);
|
|
| 4211 | 4258 |
if (StringUtils.isEmpty(imgFilePath)) {
|
| 4212 | 4259 |
statusResponse.setStatus(HttpStatus.NO_CONTENT); |
| 4213 | 4260 |
statusResponse.setMessage("문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다.");
|
... | ... | @@ -4262,7 +4309,7 @@ |
| 4262 | 4309 |
|
| 4263 | 4310 |
|
| 4264 | 4311 |
|
| 4265 |
- |
|
| 4312 |
+ /* |
|
| 4266 | 4313 |
// 그림 문자 발송 처리 메서드 |
| 4267 | 4314 |
private StatusResponse processMessageSending(MjonMsgVO mjonMsgVO, ReplacementListsVO lists, StatusResponse statusResponse) throws Exception {
|
| 4268 | 4315 |
|
... | ... | @@ -4288,7 +4335,7 @@ |
| 4288 | 4335 |
|
| 4289 | 4336 |
return statusResponse; |
| 4290 | 4337 |
} |
| 4291 |
- |
|
| 4338 |
+*/ |
|
| 4292 | 4339 |
|
| 4293 | 4340 |
private Map<String, String> fncSendMsgRtnMap(MjonMsgVO mjonMsgVO) throws Exception {
|
| 4294 | 4341 |
Map<String, String> returnMap = new HashMap<String, String>(); |
... | ... | @@ -4437,6 +4484,8 @@ |
| 4437 | 4484 |
* 20241002 이호영 |
| 4438 | 4485 |
* 치환 후 장문, 단문이 모두 있을 수 있기 때문에 아래 로직처럼 모든 if를 열어둠 |
| 4439 | 4486 |
*/ |
| 4487 |
+ |
|
| 4488 |
+ /* |
|
| 4440 | 4489 |
private Map<String, String> sendMessages(MjonMsgVO msgVO, ReplacementListsVO lists) throws Exception {
|
| 4441 | 4490 |
|
| 4442 | 4491 |
Map<String, String> resultMap = new HashMap<>(); |
... | ... | @@ -4568,8 +4617,9 @@ |
| 4568 | 4617 |
return fncSendMsgRtnMap(msgVO); |
| 4569 | 4618 |
|
| 4570 | 4619 |
*/ |
| 4620 |
+ /* |
|
| 4571 | 4621 |
} |
| 4572 |
- |
|
| 4622 |
+*/ |
|
| 4573 | 4623 |
|
| 4574 | 4624 |
// 20240924 이호영 |
| 4575 | 4625 |
// 이벤트 상태를 처리하는 메서드 |
... | ... | @@ -4622,7 +4672,8 @@ |
| 4622 | 4672 |
|
| 4623 | 4673 |
|
| 4624 | 4674 |
// Step 1: 메시지 내용이 있는지 확인 후 msgType 정하기 |
| 4625 |
- String msgType = checkMessageContent(mjonMsgVO); |
|
| 4675 |
+// String msgType = checkMessageContent(mjonMsgVO); |
|
| 4676 |
+ String msgType = ""; |
|
| 4626 | 4677 |
if (msgType == null) {
|
| 4627 | 4678 |
return new StatusResponse(HttpStatus.BAD_REQUEST, "입력 문자 내용을 확인할 수 없습니다. 문자 내용을 입력해 주세요."); |
| 4628 | 4679 |
} |
... | ... | @@ -4677,27 +4728,27 @@ |
| 4677 | 4728 |
* @throws IllegalArgumentException 메시지 길이가 초과된 경우 예외 발생 |
| 4678 | 4729 |
* @작성자 20241007 이호영 |
| 4679 | 4730 |
*/ |
| 4680 |
- private String checkMessageContent(MjonMsgVO mjonMsgVO) {
|
|
| 4681 |
- try {
|
|
| 4682 |
- // 문자 바이트 계산을 MsgSendUtils의 유틸리티 메서드를 사용하여 처리 |
|
| 4683 |
- int smsBytes = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt()); |
|
| 4684 |
- |
|
| 4685 |
- // 메시지 내용이 없는 경우 null 반환 |
|
| 4686 |
- if (smsBytes < 1) {
|
|
| 4687 |
- return null; |
|
| 4688 |
- } |
|
| 4689 |
- |
|
| 4690 |
- // 메시지 타입 결정 로직을 MsgSendUtils의 getMsgType 메서드를 사용하여 처리 |
|
| 4691 |
- String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsBytes); |
|
| 4692 |
- if ("INVALID".equals(msgType)) {
|
|
| 4693 |
- return "INVALID"; |
|
| 4694 |
- } |
|
| 4695 |
- |
|
| 4696 |
- return msgType; |
|
| 4697 |
- } catch (UnsupportedEncodingException e) {
|
|
| 4698 |
- throw new IllegalArgumentException("문자 인코딩 중 오류가 발생하였습니다.", e);
|
|
| 4699 |
- } |
|
| 4700 |
- } |
|
| 4731 |
+// private String checkMessageContent(MjonMsgVO mjonMsgVO) {
|
|
| 4732 |
+// try {
|
|
| 4733 |
+// // 문자 바이트 계산을 MsgSendUtils의 유틸리티 메서드를 사용하여 처리 |
|
| 4734 |
+// int smsBytes = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt()); |
|
| 4735 |
+// |
|
| 4736 |
+// // 메시지 내용이 없는 경우 null 반환 |
|
| 4737 |
+// if (smsBytes < 1) {
|
|
| 4738 |
+// return null; |
|
| 4739 |
+// } |
|
| 4740 |
+// |
|
| 4741 |
+// // 메시지 타입 결정 로직을 MsgSendUtils의 getMsgType 메서드를 사용하여 처리 |
|
| 4742 |
+// String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsBytes); |
|
| 4743 |
+// if ("INVALID".equals(msgType)) {
|
|
| 4744 |
+// return "INVALID"; |
|
| 4745 |
+// } |
|
| 4746 |
+// |
|
| 4747 |
+// return msgType; |
|
| 4748 |
+// } catch (UnsupportedEncodingException e) {
|
|
| 4749 |
+// throw new IllegalArgumentException("문자 인코딩 중 오류가 발생하였습니다.", e);
|
|
| 4750 |
+// } |
|
| 4751 |
+// } |
|
| 4701 | 4752 |
|
| 4702 | 4753 |
|
| 4703 | 4754 |
|
--- src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
+++ src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
... | ... | @@ -69,7 +69,7 @@ |
| 69 | 69 |
import itn.com.cmm.EgovMessageSource; |
| 70 | 70 |
import itn.com.cmm.JsonResult; |
| 71 | 71 |
import itn.com.cmm.LoginVO; |
| 72 |
-import itn.com.cmm.MjonMsgTabulVO; |
|
| 72 |
+import itn.com.cmm.MjonMsgSendVO; |
|
| 73 | 73 |
import itn.com.cmm.service.EgovFileMngService; |
| 74 | 74 |
import itn.com.cmm.service.EgovFileMngUtil; |
| 75 | 75 |
import itn.com.cmm.service.FileVO; |
... | ... | @@ -2071,6 +2071,7 @@ |
| 2071 | 2071 |
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim(); |
| 2072 | 2072 |
|
| 2073 | 2073 |
System.out.println("spmTxt : "+ spmTxt);
|
| 2074 |
+ System.out.println("parserStr : "+ parserStr);
|
|
| 2074 | 2075 |
if(resultParser.contains(parserStr)) {
|
| 2075 | 2076 |
//스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌. |
| 2076 | 2077 |
spmFilterTxt += spmTxt + ","; |
... | ... | @@ -3077,6 +3078,7 @@ |
| 3077 | 3078 |
String smishingYn = "N"; |
| 3078 | 3079 |
String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보 |
| 3079 | 3080 |
|
| 3081 |
+ |
|
| 3080 | 3082 |
UserManageVO userManageVO = new UserManageVO(); |
| 3081 | 3083 |
userManageVO.setMberId(userId); |
| 3082 | 3084 |
|
... | ... | @@ -3172,8 +3174,8 @@ |
| 3172 | 3174 |
ModelMap model) throws Exception {
|
| 3173 | 3175 |
|
| 3174 | 3176 |
// 디버깅 출력 |
| 3175 |
- System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgTabulListVO().toString());
|
|
| 3176 |
- System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgTabulListVO().size());
|
|
| 3177 |
+ System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().toString());
|
|
| 3178 |
+ System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().size());
|
|
| 3177 | 3179 |
|
| 3178 | 3180 |
return ResponseEntity.ok().body(mjonMsgDataService.sendMsgData_advc(mjonMsgVO, request)) ; |
| 3179 | 3181 |
// return null; |
--- src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser.java
+++ src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser.java
... | ... | @@ -6,156 +6,128 @@ |
| 6 | 6 |
|
| 7 | 7 |
public class ComGetSpamStringParser {
|
| 8 | 8 |
|
| 9 |
- /* |
|
| 10 |
- * 스팸 문자 필터링을 위한 변형된 한글 SMS 문장의 정규화 기법을 기반으로 개발 |
|
| 11 |
- * Kang Seung-Shik |
|
| 12 |
- * |
|
| 13 |
- * 20230419 |
|
| 14 |
- * */ |
|
| 15 |
- |
|
| 16 |
- //이상문자열 파싱 후 결합하여 |
|
| 17 |
- public static String getSpamTextParse(String strString) throws Exception {
|
|
| 18 |
- |
|
| 19 |
- String smsTxt = strString; |
|
| 20 |
- String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", ""); //한글, 영문, 숫자 이외의 문자는 제거
|
|
| 21 |
- String[] split = repSmsTxt.split(" "); //띄어쓰기를 기준으로 분할
|
|
| 22 |
- String reMakeStringText = ""; |
|
| 23 |
- |
|
| 24 |
- try {
|
|
| 25 |
- |
|
| 26 |
- for(String txt : split) {
|
|
| 27 |
- |
|
| 28 |
- for(int i=0; i < txt.length(); i++) {
|
|
| 29 |
- |
|
| 30 |
- char test = txt.charAt(i); |
|
| 31 |
- if(test >= 0xAC00) {//한글 문자이면 스킵
|
|
| 32 |
- continue; |
|
| 33 |
- }else {
|
|
| 34 |
- |
|
| 35 |
- String tmpStr = Character.toString(test); |
|
| 36 |
- if(tmpStr.matches(".*[ㄱ-ㅎ]+.*")) {
|
|
| 37 |
- |
|
| 38 |
- String nextCharAt = Character.toString(txt.charAt(i+1));//현재 단어 다음 단어가 어떤것인지 가져온다. |
|
| 39 | 9 |
|
| 40 |
- if(i == txt.length() - 1 ) {//일단 마지막 자음은 스킵 한다.
|
|
| 41 |
- break; |
|
| 42 |
- }/*else if(!nextCharAt.matches(".*[ㄱ-ㅎㅏ-ㅣa-zA-Z]+.*")) {//현재 자음이면서 다음글자가 자/모음이 아니면 삭제 액ㄱ정 이런 경우 삭제하려고 함.
|
|
| 43 |
- txt = txt.replace(tmpStr, ""); |
|
| 44 |
- break; |
|
| 45 |
- }*/ |
|
| 46 |
- |
|
| 47 |
- |
|
| 48 |
- if(nextCharAt.matches(".*[a-zA-Z]+.*")) {//다음 단어가 영문이면 영문과 유사한 한글 모음을 찾아서 합쳐준다.
|
|
| 49 |
- |
|
| 50 |
- String repCharAt = getEngToHanglue(nextCharAt); |
|
| 51 |
- String repStringChar = tmpStr + repCharAt; |
|
| 52 |
- |
|
| 53 |
- String repTxt = tmpStr + nextCharAt; |
|
| 54 |
- |
|
| 55 |
- txt = txt.replace(repTxt, repStringChar); |
|
| 56 |
- //System.out.println(txt); |
|
| 57 |
- |
|
| 58 |
- |
|
| 59 |
- }/*else if(nextCharAt.matches(".*[ㅏ-ㅣ]+.*")) {//다음 단어가 모음이면 앞 자음과 합쳐 주기
|
|
| 60 |
- |
|
| 61 |
- String repStringChar = tmpStr + nextCharAt; |
|
| 62 |
- //String norString = Normalizer.normalize(repStringChar, Normalizer.Form.NFC); |
|
| 63 |
- //System.out.println(repStringChar); |
|
| 64 |
- |
|
| 65 |
- //txt = txt.replace(repStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다. |
|
| 66 |
- |
|
| 67 |
- //System.out.println(txt); |
|
| 68 |
- |
|
| 69 |
- }*/ |
|
| 70 |
- |
|
| 71 |
- }else if(tmpStr.matches(".*[a-zA-Z]+.*")) {//영문단어가 나오면 앞뒤 단어 체크하여 연관성 없으면 삭제 처리.
|
|
| 72 |
- |
|
| 73 |
- String engStr = tmpStr; |
|
| 74 |
- if(i < txt.length() - 1) {//마지막 글자 제외
|
|
| 75 |
- char nextEngChar = txt.charAt(i+1); |
|
| 76 |
- if(i > 0) {//첫글자가 영문인 경우 제외
|
|
| 77 |
- |
|
| 78 |
- char befEngChar = txt.charAt(i-1); |
|
| 79 |
- |
|
| 80 |
- //한글 단어사이에 영문자 한글자만 있는 경우 삭제 처리함. |
|
| 81 |
- if(nextEngChar >= 0xAC00 && befEngChar >= 0xAC00) {
|
|
| 82 |
- |
|
| 83 |
- if(tmpStr.toLowerCase().equals("b")) {//B를 넣어서 한글로 읽힐수 있게도 함, 서B스 와 같은 형태
|
|
| 84 |
- txt = txt.replace(engStr, "비"); |
|
| 85 |
- }else {
|
|
| 86 |
- txt = txt.replace(engStr, ""); |
|
| 87 |
- } |
|
| 88 |
- } |
|
| 89 |
- |
|
| 90 |
- } |
|
| 91 |
- |
|
| 92 |
- }else {
|
|
| 93 |
- |
|
| 94 |
- char befEngChar = txt.charAt(i-1); |
|
| 95 |
- //마지막 글자이고 앞글자가 한글이면 마지막 영단어 삭제 처리 |
|
| 96 |
- if(befEngChar >= 0xAC00) {
|
|
| 97 |
- txt = txt.replace(engStr, ""); |
|
| 98 |
- //continue; |
|
| 99 |
- } |
|
| 100 |
- |
|
| 101 |
- } |
|
| 102 |
- |
|
| 103 |
- }else if(tmpStr.matches(".*[0-9]+.*")) {
|
|
| 104 |
- |
|
| 105 |
- if(i-1 < 0) {//한글자만 있는경우 패스
|
|
| 106 |
- continue; |
|
| 107 |
- } |
|
| 108 |
- |
|
| 109 |
- String befString = Character.toString(txt.charAt(i-1)); |
|
| 110 |
- |
|
| 111 |
- if(befString.matches(".*[ㄱ-ㅎ]+.*")) {//이전 글자가 자음이면 변환 문자 체크
|
|
| 112 |
- |
|
| 113 |
- String numToStr = getNumberToString(tmpStr); //숫자를 모음으로 변환 처리 |
|
| 114 |
- |
|
| 115 |
- String orgStringChar = befString + tmpStr; //원래 앞자음 + 숫자 |
|
| 116 |
- String repStringChar = befString + numToStr; //원래 앞자음 + 숫자를 변환한 모음 |
|
| 117 |
- |
|
| 118 |
- txt = txt.replace(orgStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다. |
|
| 119 |
- //System.out.println(txt); |
|
| 120 |
- |
|
| 121 |
- }else {
|
|
| 122 |
- //숫자면 스킵 |
|
| 123 |
- continue; |
|
| 124 |
- } |
|
| 125 |
- |
|
| 126 |
- }else {
|
|
| 127 |
- //특수문자들 처리 |
|
| 128 |
- String repSpcStr = getRepSpacialString(tmpStr); |
|
| 129 |
- if(!repSpcStr.equals("")) {//변환문자가 있는경우만 치환
|
|
| 130 |
- txt = txt.replace(tmpStr, repSpcStr); |
|
| 131 |
- } |
|
| 132 |
- |
|
| 133 |
- } |
|
| 134 |
- |
|
| 135 |
- } |
|
| 136 |
- |
|
| 137 |
- } |
|
| 138 |
- |
|
| 139 |
- reMakeStringText = reMakeStringText + " " + txt; |
|
| 140 |
- |
|
| 10 |
+ /** |
|
| 11 |
+ * @methodName : getSpamTextParse |
|
| 12 |
+ * @author : 이호영 |
|
| 13 |
+ * @date : 2024.11.13 |
|
| 14 |
+ * @description : 리펙토링 |
|
| 15 |
+ * 원본 : ComGetSpamStringParser_advc_backup_20241113.java |
|
| 16 |
+ * @param strString |
|
| 17 |
+ * @return |
|
| 18 |
+ * @throws Exception |
|
| 19 |
+ */ |
|
| 20 |
+ public static String getSpamTextParse(String strString) throws Exception {
|
|
| 21 |
+ String smsTxt = strString; |
|
| 22 |
+ String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", ""); // 한글, 영문, 숫자 이외의 문자는 제거
|
|
| 23 |
+ String[] split = repSmsTxt.split(" ");
|
|
| 24 |
+ StringBuilder reMakeStringText = new StringBuilder(); |
|
| 25 |
+ |
|
| 26 |
+ try {
|
|
| 27 |
+ for (String txt : split) {
|
|
| 28 |
+ txt = processCharacters(txt); |
|
| 29 |
+ reMakeStringText.append(" ").append(txt);
|
|
| 141 | 30 |
} |
| 142 |
- |
|
| 143 |
- //System.out.println("++++++++++++++ ::: "+reMakeStringText);
|
|
| 144 |
- //넘어오는 모든 글자에서 한글에 대해서 자/모음을 분리해준다. |
|
| 145 |
- List<String> jasoList = HangulParser.disassemble(reMakeStringText); |
|
| 146 |
- |
|
| 147 |
- //분리된 자/모음 리스트를 다시 한글로 합쳐준다. |
|
| 31 |
+ |
|
| 32 |
+ // 분리된 자/모음을 합쳐 최종 문자열 생성 |
|
| 33 |
+ List<String> jasoList = HangulParser.disassemble(reMakeStringText.toString()); |
|
| 148 | 34 |
String assembleStr = HangulParser.assemble(jasoList); |
| 149 |
- |
|
| 150 |
- reMakeStringText = assembleStr; |
|
| 151 |
- |
|
| 35 |
+ |
|
| 36 |
+ return assembleStr; |
|
| 37 |
+ |
|
| 152 | 38 |
} catch (Exception e) {
|
| 153 |
- System.out.println("++++++++++ getSpamTextParse Error !!! "+e);
|
|
| 39 |
+ System.out.println("++++++++++ getSpamTextParse Error !!! " + e);
|
|
| 154 | 40 |
return "getSpamTextParse 오류가 발생하였습니다."; |
| 155 | 41 |
} |
| 156 |
- |
|
| 157 |
- return reMakeStringText; |
|
| 158 |
- |
|
| 42 |
+ } |
|
| 43 |
+ |
|
| 44 |
+ // 한 단어 내 각 문자에 대한 처리 로직 |
|
| 45 |
+ private static String processCharacters(String txt) throws Exception {
|
|
| 46 |
+ StringBuilder processedText = new StringBuilder(txt); |
|
| 47 |
+ |
|
| 48 |
+ for (int i = 0; i < txt.length(); i++) {
|
|
| 49 |
+ char currentChar = txt.charAt(i); |
|
| 50 |
+ if (isKorean(currentChar)) continue; |
|
| 51 |
+ |
|
| 52 |
+ String tmpStr = Character.toString(currentChar); |
|
| 53 |
+ |
|
| 54 |
+ // 자음, 영문, 숫자, 특수문자 각각에 대한 처리 |
|
| 55 |
+ if (isKoreanConsonant(tmpStr)) {
|
|
| 56 |
+ txt = handleConsonant(txt, tmpStr, i); |
|
| 57 |
+ } else if (isEnglish(tmpStr)) {
|
|
| 58 |
+ txt = handleEnglish(txt, tmpStr, i); |
|
| 59 |
+ } else if (isNumber(tmpStr)) {
|
|
| 60 |
+ txt = handleNumber(txt, tmpStr, i); |
|
| 61 |
+ } else {
|
|
| 62 |
+ txt = handleSpecialCharacter(txt, tmpStr); |
|
| 63 |
+ } |
|
| 64 |
+ } |
|
| 65 |
+ |
|
| 66 |
+ return processedText.toString(); |
|
| 67 |
+ } |
|
| 68 |
+ |
|
| 69 |
+ // 자음 처리 로직 |
|
| 70 |
+ private static String handleConsonant(String txt, String tmpStr, int index) throws Exception {
|
|
| 71 |
+ if (index == txt.length() - 1) return txt; |
|
| 72 |
+ |
|
| 73 |
+ String nextCharAt = Character.toString(txt.charAt(index + 1)); |
|
| 74 |
+ if (isEnglish(nextCharAt)) {
|
|
| 75 |
+ String repCharAt = getEngToHanglue(nextCharAt); |
|
| 76 |
+ txt = txt.replace(tmpStr + nextCharAt, tmpStr + repCharAt); |
|
| 77 |
+ } |
|
| 78 |
+ return txt; |
|
| 79 |
+ } |
|
| 80 |
+ |
|
| 81 |
+ // 영문 처리 로직 |
|
| 82 |
+ private static String handleEnglish(String txt, String engStr, int index) {
|
|
| 83 |
+ if (index < txt.length() - 1 && index > 0) {
|
|
| 84 |
+ char nextChar = txt.charAt(index + 1); |
|
| 85 |
+ char previousChar = txt.charAt(index - 1); |
|
| 86 |
+ if (isKorean(previousChar) && isKorean(nextChar)) {
|
|
| 87 |
+ txt = txt.replace(engStr, engStr.equalsIgnoreCase("b") ? "비" : "");
|
|
| 88 |
+ } |
|
| 89 |
+ } else if (index > 0 && isKorean(txt.charAt(index - 1))) {
|
|
| 90 |
+ txt = txt.replace(engStr, ""); |
|
| 91 |
+ } |
|
| 92 |
+ return txt; |
|
| 93 |
+ } |
|
| 94 |
+ |
|
| 95 |
+ // 숫자 처리 로직 |
|
| 96 |
+ private static String handleNumber(String txt, String tmpStr, int index) throws Exception {
|
|
| 97 |
+ if (index == 0) return txt; |
|
| 98 |
+ String previousStr = Character.toString(txt.charAt(index - 1)); |
|
| 99 |
+ |
|
| 100 |
+ if (isKoreanConsonant(previousStr)) {
|
|
| 101 |
+ String numToStr = getNumberToString(tmpStr); |
|
| 102 |
+ txt = txt.replace(previousStr + tmpStr, previousStr + numToStr); |
|
| 103 |
+ } |
|
| 104 |
+ return txt; |
|
| 105 |
+ } |
|
| 106 |
+ |
|
| 107 |
+ // 특수문자 처리 로직 |
|
| 108 |
+ private static String handleSpecialCharacter(String txt, String tmpStr) throws Exception {
|
|
| 109 |
+ String repSpcStr = getRepSpacialString(tmpStr); |
|
| 110 |
+ if (!repSpcStr.isEmpty()) {
|
|
| 111 |
+ txt = txt.replace(tmpStr, repSpcStr); |
|
| 112 |
+ } |
|
| 113 |
+ return txt; |
|
| 114 |
+ } |
|
| 115 |
+ |
|
| 116 |
+ // 문자 유형 판별 메서드 |
|
| 117 |
+ private static boolean isKorean(char ch) {
|
|
| 118 |
+ return ch >= 0xAC00; |
|
| 119 |
+ } |
|
| 120 |
+ |
|
| 121 |
+ private static boolean isKoreanConsonant(String str) {
|
|
| 122 |
+ return str.matches(".*[ㄱ-ㅎ]+.*");
|
|
| 123 |
+ } |
|
| 124 |
+ |
|
| 125 |
+ private static boolean isEnglish(String str) {
|
|
| 126 |
+ return str.matches(".*[a-zA-Z]+.*");
|
|
| 127 |
+ } |
|
| 128 |
+ |
|
| 129 |
+ private static boolean isNumber(String str) {
|
|
| 130 |
+ return str.matches(".*[0-9]+.*");
|
|
| 159 | 131 |
} |
| 160 | 132 |
|
| 161 | 133 |
/* |
+++ src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser_advc_backup_20241113.java
... | ... | @@ -0,0 +1,249 @@ |
| 1 | +package itn.let.mjo.spammsg.web; | |
| 2 | + | |
| 3 | +import java.util.List; | |
| 4 | + | |
| 5 | +import itn.let.hangulparser.HangulParser; | |
| 6 | + | |
| 7 | +public class ComGetSpamStringParser_advc_backup_20241113 { | |
| 8 | + | |
| 9 | + /* | |
| 10 | + * 스팸 문자 필터링을 위한 변형된 한글 SMS 문장의 정규화 기법을 기반으로 개발 | |
| 11 | + * Kang Seung-Shik | |
| 12 | + * | |
| 13 | + * 20230419 | |
| 14 | + * */ | |
| 15 | + | |
| 16 | + //이상문자열 파싱 후 결합하여 | |
| 17 | + public static String getSpamTextParse(String strString) throws Exception { | |
| 18 | + | |
| 19 | + String smsTxt = strString; | |
| 20 | + String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", ""); //한글, 영문, 숫자 이외의 문자는 제거 | |
| 21 | + String[] split = repSmsTxt.split(" "); //띄어쓰기를 기준으로 분할 | |
| 22 | + String reMakeStringText = ""; | |
| 23 | + | |
| 24 | + try { | |
| 25 | + | |
| 26 | + for(String txt : split) { | |
| 27 | + | |
| 28 | + for(int i=0; i < txt.length(); i++) { | |
| 29 | + | |
| 30 | + char test = txt.charAt(i); | |
| 31 | + if(test >= 0xAC00) {//한글 문자이면 스킵 | |
| 32 | + continue; | |
| 33 | + }else { | |
| 34 | + | |
| 35 | + String tmpStr = Character.toString(test); | |
| 36 | + if(tmpStr.matches(".*[ㄱ-ㅎ]+.*")) { | |
| 37 | + | |
| 38 | + String nextCharAt = Character.toString(txt.charAt(i+1));//현재 단어 다음 단어가 어떤것인지 가져온다. | |
| 39 | + | |
| 40 | + if(i == txt.length() - 1 ) {//일단 마지막 자음은 스킵 한다. | |
| 41 | + break; | |
| 42 | + }/*else if(!nextCharAt.matches(".*[ㄱ-ㅎㅏ-ㅣa-zA-Z]+.*")) {//현재 자음이면서 다음글자가 자/모음이 아니면 삭제 액ㄱ정 이런 경우 삭제하려고 함. | |
| 43 | + txt = txt.replace(tmpStr, ""); | |
| 44 | + break; | |
| 45 | + }*/ | |
| 46 | + | |
| 47 | + | |
| 48 | + if(nextCharAt.matches(".*[a-zA-Z]+.*")) {//다음 단어가 영문이면 영문과 유사한 한글 모음을 찾아서 합쳐준다. | |
| 49 | + | |
| 50 | + String repCharAt = getEngToHanglue(nextCharAt); | |
| 51 | + String repStringChar = tmpStr + repCharAt; | |
| 52 | + | |
| 53 | + String repTxt = tmpStr + nextCharAt; | |
| 54 | + | |
| 55 | + txt = txt.replace(repTxt, repStringChar); | |
| 56 | + //System.out.println(txt); | |
| 57 | + | |
| 58 | + | |
| 59 | + }/*else if(nextCharAt.matches(".*[ㅏ-ㅣ]+.*")) {//다음 단어가 모음이면 앞 자음과 합쳐 주기 | |
| 60 | + | |
| 61 | + String repStringChar = tmpStr + nextCharAt; | |
| 62 | + //String norString = Normalizer.normalize(repStringChar, Normalizer.Form.NFC); | |
| 63 | + //System.out.println(repStringChar); | |
| 64 | + | |
| 65 | + //txt = txt.replace(repStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다. | |
| 66 | + | |
| 67 | + //System.out.println(txt); | |
| 68 | + | |
| 69 | + }*/ | |
| 70 | + | |
| 71 | + }else if(tmpStr.matches(".*[a-zA-Z]+.*")) {//영문단어가 나오면 앞뒤 단어 체크하여 연관성 없으면 삭제 처리. | |
| 72 | + | |
| 73 | + String engStr = tmpStr; | |
| 74 | + if(i < txt.length() - 1) {//마지막 글자 제외 | |
| 75 | + char nextEngChar = txt.charAt(i+1); | |
| 76 | + if(i > 0) {//첫글자가 영문인 경우 제외 | |
| 77 | + | |
| 78 | + char befEngChar = txt.charAt(i-1); | |
| 79 | + | |
| 80 | + //한글 단어사이에 영문자 한글자만 있는 경우 삭제 처리함. | |
| 81 | + if(nextEngChar >= 0xAC00 && befEngChar >= 0xAC00) { | |
| 82 | + | |
| 83 | + if(tmpStr.toLowerCase().equals("b")) {//B를 넣어서 한글로 읽힐수 있게도 함, 서B스 와 같은 형태 | |
| 84 | + txt = txt.replace(engStr, "비"); | |
| 85 | + }else { | |
| 86 | + txt = txt.replace(engStr, ""); | |
| 87 | + } | |
| 88 | + } | |
| 89 | + | |
| 90 | + } | |
| 91 | + | |
| 92 | + }else { | |
| 93 | + | |
| 94 | + char befEngChar = txt.charAt(i-1); | |
| 95 | + //마지막 글자이고 앞글자가 한글이면 마지막 영단어 삭제 처리 | |
| 96 | + if(befEngChar >= 0xAC00) { | |
| 97 | + txt = txt.replace(engStr, ""); | |
| 98 | + //continue; | |
| 99 | + } | |
| 100 | + | |
| 101 | + } | |
| 102 | + | |
| 103 | + }else if(tmpStr.matches(".*[0-9]+.*")) { | |
| 104 | + | |
| 105 | + if(i-1 < 0) {//한글자만 있는경우 패스 | |
| 106 | + continue; | |
| 107 | + } | |
| 108 | + | |
| 109 | + String befString = Character.toString(txt.charAt(i-1)); | |
| 110 | + | |
| 111 | + if(befString.matches(".*[ㄱ-ㅎ]+.*")) {//이전 글자가 자음이면 변환 문자 체크 | |
| 112 | + | |
| 113 | + String numToStr = getNumberToString(tmpStr); //숫자를 모음으로 변환 처리 | |
| 114 | + | |
| 115 | + String orgStringChar = befString + tmpStr; //원래 앞자음 + 숫자 | |
| 116 | + String repStringChar = befString + numToStr; //원래 앞자음 + 숫자를 변환한 모음 | |
| 117 | + | |
| 118 | + txt = txt.replace(orgStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다. | |
| 119 | + //System.out.println(txt); | |
| 120 | + | |
| 121 | + }else { | |
| 122 | + //숫자면 스킵 | |
| 123 | + continue; | |
| 124 | + } | |
| 125 | + | |
| 126 | + }else { | |
| 127 | + //특수문자들 처리 | |
| 128 | + String repSpcStr = getRepSpacialString(tmpStr); | |
| 129 | + if(!repSpcStr.equals("")) {//변환문자가 있는경우만 치환 | |
| 130 | + txt = txt.replace(tmpStr, repSpcStr); | |
| 131 | + } | |
| 132 | + | |
| 133 | + } | |
| 134 | + | |
| 135 | + } | |
| 136 | + | |
| 137 | + } | |
| 138 | + | |
| 139 | + reMakeStringText = reMakeStringText + " " + txt; | |
| 140 | + | |
| 141 | + } | |
| 142 | + | |
| 143 | + //System.out.println("++++++++++++++ ::: "+reMakeStringText); | |
| 144 | + //넘어오는 모든 글자에서 한글에 대해서 자/모음을 분리해준다. | |
| 145 | + List<String> jasoList = HangulParser.disassemble(reMakeStringText); | |
| 146 | + | |
| 147 | + //분리된 자/모음 리스트를 다시 한글로 합쳐준다. | |
| 148 | + String assembleStr = HangulParser.assemble(jasoList); | |
| 149 | + | |
| 150 | + reMakeStringText = assembleStr; | |
| 151 | + | |
| 152 | + } catch (Exception e) { | |
| 153 | + System.out.println("++++++++++ getSpamTextParse Error !!! "+e); | |
| 154 | + return "getSpamTextParse 오류가 발생하였습니다."; | |
| 155 | + } | |
| 156 | + | |
| 157 | + return reMakeStringText; | |
| 158 | + | |
| 159 | + } | |
| 160 | + | |
| 161 | + /* | |
| 162 | + * | |
| 163 | + * 한글과 유사한 영문자를 변환 처리함 | |
| 164 | + * | |
| 165 | + * */ | |
| 166 | + public static String getEngToHanglue(String strWord) throws Exception { | |
| 167 | + | |
| 168 | + String returnStr = ""; | |
| 169 | + | |
| 170 | + try { | |
| 171 | + | |
| 172 | + if(strWord.toLowerCase().equals("r")) { | |
| 173 | + | |
| 174 | + returnStr = "ㅏ"; | |
| 175 | + | |
| 176 | + }else if(strWord.toLowerCase().equals("h")) { | |
| 177 | + | |
| 178 | + returnStr = "ㅐ"; | |
| 179 | + | |
| 180 | + }else if(strWord.toLowerCase().equals("i") || strWord.toLowerCase().equals("I") || strWord.toLowerCase().equals("l")) { | |
| 181 | + | |
| 182 | + returnStr = "ㅣ"; | |
| 183 | + | |
| 184 | + } | |
| 185 | + | |
| 186 | + } catch (Exception e) { | |
| 187 | + System.out.println("++++++++++++++ getEngToHanglue Error !!! "+e); | |
| 188 | + } | |
| 189 | + | |
| 190 | + return returnStr; | |
| 191 | + } | |
| 192 | + | |
| 193 | + | |
| 194 | + /* | |
| 195 | + * | |
| 196 | + * 한글과 유사한 숫자를 변환처리함 | |
| 197 | + * | |
| 198 | + * */ | |
| 199 | + public static String getNumberToString(String strWord) throws Exception { | |
| 200 | + | |
| 201 | + String returnStr = ""; | |
| 202 | + | |
| 203 | + try { | |
| 204 | + | |
| 205 | + if(strWord.equals("1")) { | |
| 206 | + | |
| 207 | + returnStr = "ㅣ"; | |
| 208 | + | |
| 209 | + } | |
| 210 | + | |
| 211 | + } catch (Exception e) { | |
| 212 | + System.out.println("++++++++++++++ getNumberToString Error !!! "+e); | |
| 213 | + } | |
| 214 | + | |
| 215 | + return returnStr; | |
| 216 | + } | |
| 217 | + | |
| 218 | + /* | |
| 219 | + * | |
| 220 | + * 한글과 유사한 특수문자들 변환처리함 | |
| 221 | + * | |
| 222 | + * */ | |
| 223 | + public static String getRepSpacialString(String strWord) throws Exception{ | |
| 224 | + | |
| 225 | + String returnStr = ""; | |
| 226 | + | |
| 227 | + try { | |
| 228 | + | |
| 229 | + if(strWord.equals("ⓒ")) { | |
| 230 | + returnStr = "c"; | |
| 231 | + }else if(strWord.equals("β")) { | |
| 232 | + returnStr = "비"; | |
| 233 | + }else if(strWord.equals("⒪")) { | |
| 234 | + returnStr = "ㅇ"; | |
| 235 | + }else if(strWord.equals("㈄")) { | |
| 236 | + returnStr = "ㅁ"; | |
| 237 | + }else if(strWord.equals("①")) { | |
| 238 | + returnStr = "ㅣ"; | |
| 239 | + } | |
| 240 | + | |
| 241 | + } catch (Exception e) { | |
| 242 | + System.out.println("++++++++++++++ getRepSpacialString Error !!! "+e); | |
| 243 | + } | |
| 244 | + | |
| 245 | + return returnStr; | |
| 246 | + | |
| 247 | + } | |
| 248 | + | |
| 249 | +} |
--- src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
+++ src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
... | ... | @@ -425,8 +425,12 @@ |
| 425 | 425 |
//카카오 환불 처리 리스트 |
| 426 | 426 |
public void kakaoFailPayBack() throws Exception {
|
| 427 | 427 |
|
| 428 |
+ //카카오 알림톡 환불 처리 |
|
| 428 | 429 |
kakaoAlimTalkService.selectKakaoAtSentRefundList(); |
| 429 | 430 |
|
| 431 |
+ //카카오 친구톡 환불 처리 |
|
| 432 |
+ kakaoAlimTalkService.selectKakaoFtSentRefundList(); |
|
| 433 |
+ |
|
| 430 | 434 |
} |
| 431 | 435 |
|
| 432 | 436 |
@Override |
--- src/main/java/itn/let/sym/site/service/JoinSettingVO.java
+++ src/main/java/itn/let/sym/site/service/JoinSettingVO.java
... | ... | @@ -36,6 +36,7 @@ |
| 36 | 36 |
private float customEdit3Price; // 이미지 편집(첨부이미지 3장이하) |
| 37 | 37 |
private float customTextPrice; // 텍스트 단순수정 |
| 38 | 38 |
private float kakaoAtPrice; // 카카오 알림톡 단가 |
| 39 |
+ private float kakaoFtPrice; // 카카오 친구톡 단가 |
|
| 39 | 40 |
private float faxPrice; // 팩스 단가 |
| 40 | 41 |
|
| 41 | 42 |
private float refundPer; //환불 비율 |
... | ... | @@ -210,6 +211,14 @@ |
| 210 | 211 |
this.kakaoAtPrice = kakaoAtPrice; |
| 211 | 212 |
} |
| 212 | 213 |
|
| 214 |
+ public float getKakaoFtPrice() {
|
|
| 215 |
+ return kakaoFtPrice; |
|
| 216 |
+ } |
|
| 217 |
+ |
|
| 218 |
+ public void setKakaoFtPrice(float kakaoFtPrice) {
|
|
| 219 |
+ this.kakaoFtPrice = kakaoFtPrice; |
|
| 220 |
+ } |
|
| 221 |
+ |
|
| 213 | 222 |
public float getFaxPrice() {
|
| 214 | 223 |
return faxPrice; |
| 215 | 224 |
} |
--- src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
+++ src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
... | ... | @@ -1105,6 +1105,7 @@ |
| 1105 | 1105 |
model.addAttribute("sysPicture3Price", sysJoinSetVO.getPicture3Price());
|
| 1106 | 1106 |
model.addAttribute("sysPicture3Price", sysJoinSetVO.getPicture3Price());
|
| 1107 | 1107 |
model.addAttribute("sysKakaoAtPrice", sysJoinSetVO.getKakaoAtPrice());
|
| 1108 |
+ model.addAttribute("sysKakaoFtPrice", sysJoinSetVO.getKakaoFtPrice());
|
|
| 1108 | 1109 |
|
| 1109 | 1110 |
// 등급제 단가 추출 => 시스템 단가에 적용 |
| 1110 | 1111 |
sysJoinSetVO = mberGrdService.selectMberGrdDefaultInfo(sysJoinSetVO, userId); |
... | ... | @@ -1116,6 +1117,7 @@ |
| 1116 | 1117 |
Float picture2Price = mberManageVO.getPicture2Price(); |
| 1117 | 1118 |
Float picture3Price = mberManageVO.getPicture3Price(); |
| 1118 | 1119 |
Float kakaoAtPrice = mberManageVO.getKakaoAtPrice(); |
| 1120 |
+ Float kakaoFtPrice = mberManageVO.getKakaoFtPrice(); |
|
| 1119 | 1121 |
Float faxPrice = mberManageVO.getFaxPrice(); |
| 1120 | 1122 |
System.out.println("mberManageVO.getFaxPrice() : " + mberManageVO.getFaxPrice());
|
| 1121 | 1123 |
|
... | ... | @@ -1131,6 +1133,11 @@ |
| 1131 | 1133 |
if(kakaoAtPrice < 1) {
|
| 1132 | 1134 |
kakaoAtPrice = sysJoinSetVO.getKakaoAtPrice(); |
| 1133 | 1135 |
} |
| 1136 |
+ |
|
| 1137 |
+ if(kakaoFtPrice < 1) {
|
|
| 1138 |
+ kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice(); |
|
| 1139 |
+ } |
|
| 1140 |
+ |
|
| 1134 | 1141 |
if(faxPrice < 1) {
|
| 1135 | 1142 |
faxPrice = sysJoinSetVO.getFaxPrice(); |
| 1136 | 1143 |
} |
... | ... | @@ -1141,6 +1148,7 @@ |
| 1141 | 1148 |
model.addAttribute("picture2Price", picture2Price);
|
| 1142 | 1149 |
model.addAttribute("picture3Price", picture3Price);
|
| 1143 | 1150 |
model.addAttribute("kakaoAtPrice", kakaoAtPrice);
|
| 1151 |
+ model.addAttribute("kakaoFtPrice", kakaoFtPrice);
|
|
| 1144 | 1152 |
model.addAttribute("faxPrice", faxPrice);
|
| 1145 | 1153 |
model.addAttribute("sysJoinSetVO", sysJoinSetVO);
|
| 1146 | 1154 |
|
... | ... | @@ -1319,6 +1327,9 @@ |
| 1319 | 1327 |
double kakaoAtCost = 0.00; |
| 1320 | 1328 |
double kakaoAtMargin = 0.00; |
| 1321 | 1329 |
|
| 1330 |
+ double kakaoFtCost = 0.00; |
|
| 1331 |
+ double kakaoFtMargin = 0.00; |
|
| 1332 |
+ |
|
| 1322 | 1333 |
double faxCost = 0.00; |
| 1323 | 1334 |
double faxMargin = 0.00; |
| 1324 | 1335 |
|
... | ... | @@ -1351,10 +1362,23 @@ |
| 1351 | 1362 |
avgPriceP = Double.parseDouble(item.getAgentPrice()); |
| 1352 | 1363 |
} |
| 1353 | 1364 |
} |
| 1365 |
+ |
|
| 1366 |
+ /* |
|
| 1367 |
+ * 알림톡,친구톡 원가 정보 조회 |
|
| 1368 |
+ * Agent 코드 번호를 넘겨준다. |
|
| 1369 |
+ * 다우기술 04번으로 넘겨줌 |
|
| 1370 |
+ * */ |
|
| 1354 | 1371 |
|
| 1355 |
- // kakao 원가 |
|
| 1356 |
- kakaoAtCost = kakaoApiService.selectKakaoCost(); |
|
| 1372 |
+ MjonMsgAgentStsVO resultAgentCost = mjonMsgAgentStsService.selectHotLineAgentCost("04");
|
|
| 1373 |
+ kakaoAtCost = resultAgentCost.getKakaoAtCost(); //알림톡 원가 |
|
| 1374 |
+ kakaoFtCost = resultAgentCost.getKakaoFtCost(); //친구톡 원가 |
|
| 1375 |
+ |
|
| 1376 |
+ // kakao 알림톡 마진률 계산 |
|
| 1377 |
+ //kakaoAtCost = kakaoApiService.selectKakaoCost(); |
|
| 1357 | 1378 |
kakaoAtMargin = (1-(kakaoAtCost / kakaoAtPrice))*100; |
| 1379 |
+ |
|
| 1380 |
+ //kakao 친구톡 마진률 계산 |
|
| 1381 |
+ kakaoFtMargin = (1-(kakaoFtCost / kakaoFtPrice))*100; |
|
| 1358 | 1382 |
|
| 1359 | 1383 |
// fax 원가 SELECT |
| 1360 | 1384 |
faxCost = faxService.getFaxCost(); |
... | ... | @@ -1372,7 +1396,9 @@ |
| 1372 | 1396 |
model.addAttribute("avgPriceL", avgPriceL);
|
| 1373 | 1397 |
model.addAttribute("avgPriceP", avgPriceP);
|
| 1374 | 1398 |
model.addAttribute("kakaoAtCost", kakaoAtCost);
|
| 1399 |
+ model.addAttribute("kakaoFtCost", kakaoFtCost);
|
|
| 1375 | 1400 |
model.addAttribute("kakaoAtMargin", kakaoAtMargin);
|
| 1401 |
+ model.addAttribute("kakaoFtMargin", kakaoFtMargin);
|
|
| 1376 | 1402 |
model.addAttribute("faxCost", faxCost);
|
| 1377 | 1403 |
model.addAttribute("faxMargin", faxMargin);
|
| 1378 | 1404 |
} |
... | ... | @@ -3045,6 +3071,11 @@ |
| 3045 | 3071 |
// 알림톡 => 수정하려는 단가가 시스템기본단가와 동일할경우 0으로 세팅 |
| 3046 | 3072 |
if (Float.compare(sysJoinSetVO.getKakaoAtPrice(), mberManageVO.getKakaoAtPrice()) == 0) {
|
| 3047 | 3073 |
mberManageVO.setKakaoAtPrice(0); |
| 3074 |
+ } |
|
| 3075 |
+ |
|
| 3076 |
+ // 친구톡 => 수정하려는 단가가 시스템기본단가와 동일할경우 0으로 세팅 |
|
| 3077 |
+ if (Float.compare(sysJoinSetVO.getKakaoFtPrice(), mberManageVO.getKakaoFtPrice()) == 0) {
|
|
| 3078 |
+ mberManageVO.setKakaoFtPrice(0); |
|
| 3048 | 3079 |
} |
| 3049 | 3080 |
|
| 3050 | 3081 |
int resultCnt = mberManageService.updateUserPrice(mberManageVO); |
... | ... | @@ -4942,7 +4973,7 @@ |
| 4942 | 4973 |
* 회원 이용정지 사유 조회하기 |
| 4943 | 4974 |
* @param searchVO |
| 4944 | 4975 |
* @param model |
| 4945 |
- * @return "/uss/umt/user/uss/umt/user/EgovGnrlselectedUserView.do.do" |
|
| 4976 |
+ * @return "/uss/umt/user/uss/umt/user/selectMberSpamBlockMemoDetailAjax.do" |
|
| 4946 | 4977 |
* @throws Exception |
| 4947 | 4978 |
*/ |
| 4948 | 4979 |
@RequestMapping(value = {"/uss/umt/user/selectMberSpamBlockMemoDetailAjax.do"})
|
--- src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml
... | ... | @@ -367,11 +367,11 @@ |
| 367 | 367 |
AND C.RSLT_CODE != '7000' |
| 368 | 368 |
AND C.MSG_TYPE = '8' |
| 369 | 369 |
) AS atFailCount , |
| 370 |
- <!-- ( SELECT COUNT(0) |
|
| 370 |
+ ( SELECT COUNT(0) |
|
| 371 | 371 |
FROM MJ_MSG_DATA C |
| 372 | 372 |
WHERE C.DEL_FLAG = 'N' |
| 373 | 373 |
AND C.RESERVE_C_YN = 'N' |
| 374 |
- AND C.MSG_GROUP_ID = MG.MSG_GROUP_ID |
|
| 374 |
+ AND C.MSG_GROUP_ID = M2.msgGroupId |
|
| 375 | 375 |
AND C.RSLT_CODE = '7000' |
| 376 | 376 |
AND C.MSG_TYPE = '9' |
| 377 | 377 |
) AS ftSuccessCount , |
... | ... | @@ -379,12 +379,12 @@ |
| 379 | 379 |
FROM MJ_MSG_DATA C |
| 380 | 380 |
WHERE C.DEL_FLAG = 'N' |
| 381 | 381 |
AND C.RESERVE_C_YN = 'N' |
| 382 |
- AND C.MSG_GROUP_ID = MG.MSG_GROUP_ID |
|
| 382 |
+ AND C.MSG_GROUP_ID = M2.msgGroupId |
|
| 383 | 383 |
AND C.RSLT_CODE != '7000' |
| 384 | 384 |
AND C.MSG_TYPE = '9' |
| 385 |
- ) AS ftFailCount , --> |
|
| 386 |
- '0' AS ftSuccessCount, |
|
| 387 |
- '0' AS ftFailCount, |
|
| 385 |
+ ) AS ftFailCount , |
|
| 386 |
+ <!-- '0' AS ftSuccessCount, |
|
| 387 |
+ '0' AS ftFailCount, --> |
|
| 388 | 388 |
M2.bizUmid, |
| 389 | 389 |
M2.callStatus, |
| 390 | 390 |
M2.bizKakaoResendYn, |
... | ... | @@ -525,7 +525,7 @@ |
| 525 | 525 |
</isNotEmpty> |
| 526 | 526 |
AND MG.DEL_FLAG ='N' |
| 527 | 527 |
AND MG.RESERVE_C_YN = 'N' |
| 528 |
- AND MG.MSG_TYPE = '8' |
|
| 528 |
+ AND MG.MSG_TYPE IN ('8', '9')
|
|
| 529 | 529 |
)M |
| 530 | 530 |
LEFT JOIN MJ_KAKAO_PROFILE_INFO MKPI |
| 531 | 531 |
ON M.MSG_NOTICETALK_SENDER_KEY = MKPI.SENDER_KEY |
... | ... | @@ -1142,7 +1142,7 @@ |
| 1142 | 1142 |
AND C.RSLT_CODE != '7000' |
| 1143 | 1143 |
AND C.MSG_TYPE = '8' |
| 1144 | 1144 |
) AS atFailCount , |
| 1145 |
- <!-- ( SELECT COUNT(0) |
|
| 1145 |
+ ( SELECT COUNT(0) |
|
| 1146 | 1146 |
FROM MJ_MSG_DATA C |
| 1147 | 1147 |
WHERE C.DEL_FLAG = 'N' |
| 1148 | 1148 |
AND C.RESERVE_C_YN = 'N' |
... | ... | @@ -1157,9 +1157,9 @@ |
| 1157 | 1157 |
AND C.MSG_GROUP_ID = M2.msgGroupId |
| 1158 | 1158 |
AND C.RSLT_CODE != '7000' |
| 1159 | 1159 |
AND C.MSG_TYPE = '9' |
| 1160 |
- ) AS ftFailCount ,--> |
|
| 1161 |
- '0' AS ftSuccessCount, |
|
| 1162 |
- '0' AS ftFailCount, |
|
| 1160 |
+ ) AS ftFailCount , |
|
| 1161 |
+ <!-- '0' AS ftSuccessCount, |
|
| 1162 |
+ '0' AS ftFailCount, --> |
|
| 1163 | 1163 |
M2.bizUmid, |
| 1164 | 1164 |
M2.callStatus, |
| 1165 | 1165 |
M2.bizKakaoResendYn, |
... | ... | @@ -1290,7 +1290,7 @@ |
| 1290 | 1290 |
</isNotEmpty> |
| 1291 | 1291 |
AND MG.DEL_FLAG ='N' |
| 1292 | 1292 |
AND MG.RESERVE_C_YN = 'N' |
| 1293 |
- AND MG.MSG_TYPE = '8' |
|
| 1293 |
+ AND MG.MSG_TYPE IN ('8', '9')
|
|
| 1294 | 1294 |
)M |
| 1295 | 1295 |
LEFT JOIN MJ_KAKAO_PROFILE_INFO MKPI |
| 1296 | 1296 |
ON M.MSG_NOTICETALK_SENDER_KEY = MKPI.SENDER_KEY |
... | ... | @@ -1363,7 +1363,8 @@ |
| 1363 | 1363 |
|
| 1364 | 1364 |
<isNotEmpty property="pageType"> |
| 1365 | 1365 |
<isEqual property="pageType" compareValue="sand"> |
| 1366 |
- AND M.AT_DELAY_COMPLETE_YN ='Y' |
|
| 1366 |
+ /** 20240119 우영두 수정 - 딜레이 승인된 건들만 조회하고 있어서 AND 조건 에서 OR 조건으로 변경 처리함 */ |
|
| 1367 |
+ OR M.AT_DELAY_COMPLETE_YN ='Y' |
|
| 1367 | 1368 |
/*AND M.REFUND_YN = 'N'*/ |
| 1368 | 1369 |
</isEqual> |
| 1369 | 1370 |
</isNotEmpty> |
... | ... | @@ -2386,7 +2387,7 @@ |
| 2386 | 2387 |
MJ_MSG_DATA A |
| 2387 | 2388 |
WHERE 1=1 |
| 2388 | 2389 |
AND A.USER_ID = #userId# |
| 2389 |
- AND A.MSG_TYPE IN (8) |
|
| 2390 |
+ AND A.MSG_TYPE IN ('8', '9')
|
|
| 2390 | 2391 |
GROUP BY A.MSG_GROUP_ID |
| 2391 | 2392 |
)A |
| 2392 | 2393 |
LEFT JOIN MJ_MSG_GROUP_DATA MGD |
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
... | ... | @@ -911,6 +911,7 @@ |
| 911 | 911 |
SELECT |
| 912 | 912 |
MGD.MSG_GROUP_ID as msgGroupId |
| 913 | 913 |
, MGD.USER_ID as userId |
| 914 |
+ , MD.MSG_TYPE as msgType |
|
| 914 | 915 |
, MD.REQ_DATE as reqDate /* 발송 시간 */ |
| 915 | 916 |
, MD.MSG_NOTICETALK_SENDER_KEY as msgNoticetalkSenderKey /* api key */ |
| 916 | 917 |
, MD.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey /* 특정 템플릿 key */ |
... | ... | @@ -921,6 +922,7 @@ |
| 921 | 922 |
, MD.BIZ_KAKAO_RESEND_TYPE as bizKakaoResendType /* MMS / LMS / SMS */ |
| 922 | 923 |
, MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */ |
| 923 | 924 |
, MGD.BIZ_KAKAO_RESEND_ORGNL_TXT as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */ |
| 925 |
+ , MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */ |
|
| 924 | 926 |
FROM MJ_MSG_GROUP_DATA MGD |
| 925 | 927 |
INNER JOIN MJ_MSG_DATA MD |
| 926 | 928 |
ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID |
... | ... | @@ -937,6 +939,7 @@ |
| 937 | 939 |
|
| 938 | 940 |
SELECT |
| 939 | 941 |
MD.REQ_DATE as reqDate /* 발송 시간 */ |
| 942 |
+ , MD.MSG_TYPE as msgType |
|
| 940 | 943 |
, MD.MSG_NOTICETALK_SENDER_KEY as msgNoticetalkSenderKey /* api key */ |
| 941 | 944 |
, MD.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey /* 특정 템플릿 key */ |
| 942 | 945 |
, MD.SMS_TXT as smsTxtTrans /* 알림톡 본문 내용 치환(O)*/ |
... | ... | @@ -944,6 +947,7 @@ |
| 944 | 947 |
, MD.BIZ_KAKAO_RESEND_YN as bizKakaoResendYn /* 대체 문자 사용 여부*/ |
| 945 | 948 |
, MD.BIZ_KAKAO_RESEND_TYPE as bizKakaoResendType /* MMS / LMS / SMS */ |
| 946 | 949 |
, MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */ |
| 950 |
+ , MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */ |
|
| 947 | 951 |
FROM MJ_MSG_DATA MD |
| 948 | 952 |
WHERE |
| 949 | 953 |
MD.MSG_ID = #msgId# |
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
... | ... | @@ -103,6 +103,32 @@ |
| 103 | 103 |
AND MMD.MSG_TYPE = 8 |
| 104 | 104 |
</select> |
| 105 | 105 |
|
| 106 |
+ <select id="kakaoAlimTalkDAO.selectKakaoFtSentRefundList" resultClass="kakaoVO"> |
|
| 107 |
+ SELECT |
|
| 108 |
+ MMD.USER_ID AS userId |
|
| 109 |
+ , MMD.MSG_GROUP_ID AS msgGroupId |
|
| 110 |
+ , MMD.MSG_SEQ AS msgSeq |
|
| 111 |
+ , MMD.USERDATA AS userData |
|
| 112 |
+ , MMD.REFUND_YN AS refundYn |
|
| 113 |
+ , MMD.RSLT_CODE AS rsltCode |
|
| 114 |
+ , MMD.RSLT_CODE2 AS rsltCode2 |
|
| 115 |
+ , MMD.AGENT_CODE AS agentCode |
|
| 116 |
+ , DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T') AS sentDate |
|
| 117 |
+ , DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate |
|
| 118 |
+ , MMD.BIZ_KAKAO_RESEND_YN AS subMsgSendYn |
|
| 119 |
+ , MMD.BIZ_KAKAO_RESEND_TYPE AS subMsgType |
|
| 120 |
+ |
|
| 121 |
+ FROM |
|
| 122 |
+ MJ_MSG_DATA MMD |
|
| 123 |
+ INNER JOIN LETTNGNRLMBER MB |
|
| 124 |
+ ON MMD.USER_ID = MB.MBER_ID |
|
| 125 |
+ WHERE 1=1 |
|
| 126 |
+ AND MMD.CUR_STATE = '3' |
|
| 127 |
+ AND MMD.REFUND_YN = 'N' |
|
| 128 |
+ AND MMD.RESERVE_C_YN = 'N' |
|
| 129 |
+ AND MMD.MSG_TYPE = 9 |
|
| 130 |
+ </select> |
|
| 131 |
+ |
|
| 106 | 132 |
<select id="kakaoAlimTalkDAO.selectKakaoAtUmid" resultClass="kakaoVO" parameterClass="kakaoVO"> |
| 107 | 133 |
SELECT |
| 108 | 134 |
BIZ_UMID AS bizUmid |
... | ... | @@ -126,4 +152,22 @@ |
| 126 | 152 |
<procedure id="kakaoAlimTalkDAO.updateKakaoAtNotSend" parameterClass="kakaoVO"> |
| 127 | 153 |
{call kakaoAt_NotSend(#userId#, #msgGroupId#, #userData#)}
|
| 128 | 154 |
</procedure> |
| 155 |
+ |
|
| 156 |
+ |
|
| 157 |
+ |
|
| 158 |
+ <!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 성공 관련 - 대체문자 선택시 차액 환불 처리) --> |
|
| 159 |
+ <procedure id="kakaoAlimTalkDAO.updateKakaoFtSend" parameterClass="kakaoVO"> |
|
| 160 |
+ {call kakaoFt_Send(#userId#, #msgGroupId#, #userData#)}
|
|
| 161 |
+ </procedure> |
|
| 162 |
+ |
|
| 163 |
+ <!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 실패시 대체문자 관련 - 대체문자 발송 완료 된 경우) --> |
|
| 164 |
+ <procedure id="kakaoAlimTalkDAO.updateKakaoFtSubMsgSend" parameterClass="kakaoVO"> |
|
| 165 |
+ {call kakaoFt_SubMsg_Send(#userId#, #msgGroupId#, #userData#)}
|
|
| 166 |
+ </procedure> |
|
| 167 |
+ |
|
| 168 |
+ <!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 실패시 대체문자 관련 - 대체문자 발송 실패 된 경우) --> |
|
| 169 |
+ <procedure id="kakaoAlimTalkDAO.updateKakaoFtNotSend" parameterClass="kakaoVO"> |
|
| 170 |
+ {call kakaoFt_NotSend(#userId#, #msgGroupId#, #userData#)}
|
|
| 171 |
+ </procedure> |
|
| 172 |
+ |
|
| 129 | 173 |
</sqlMap>(No newline at end of file) |
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_FT_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_FT_SQL_Mysql.xml
... | ... | @@ -20,6 +20,7 @@ |
| 20 | 20 |
USER_ID, |
| 21 | 21 |
ATCH_FILE_ID, |
| 22 | 22 |
TEMPLATE_NAME, |
| 23 |
+ IMAGE_FILE_NAME, |
|
| 23 | 24 |
IMAGE_URL, |
| 24 | 25 |
IMAGE_TYPE, |
| 25 | 26 |
IMAGE_TITLE, |
... | ... | @@ -38,6 +39,7 @@ |
| 38 | 39 |
, #userId# |
| 39 | 40 |
, #bizJsonName# |
| 40 | 41 |
, #templateName# |
| 42 |
+ , #imageFileName# |
|
| 41 | 43 |
, #templateImageUrl# |
| 42 | 44 |
, #imageType# |
| 43 | 45 |
, #imgTitle# |
... | ... | @@ -94,72 +96,60 @@ |
| 94 | 96 |
|
| 95 | 97 |
<select id="kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateList" parameterClass="kakaoVO" resultClass="kakaoVO"> |
| 96 | 98 |
|
| 97 |
- SELECT COUNT(A.FRIEND_ID) OVER() AS totCnt , |
|
| 98 |
- A.FRIEND_ID AS friendId, |
|
| 99 |
- A.USER_ID AS userId, |
|
| 100 |
- A.SENDER_KEY AS senderKey, |
|
| 101 |
- KPI.YELLOW_ID AS yellowId, |
|
| 102 |
- A.TEMPLATE_NAME AS templateName, |
|
| 103 |
- A.IMAGE_URL AS templateImageUrl, |
|
| 104 |
- A.IMAGE_TYPE AS imageType, |
|
| 105 |
- A.IMAGE_TITLE AS imgTitle, |
|
| 106 |
- A.IMAGE_LINK AS imgLink, |
|
| 107 |
- A.TEMPLATE_CONTENTS AS templateContent, |
|
| 108 |
- A.AD_FLAG AS adFlag, |
|
| 109 |
- DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm, |
|
| 110 |
- A.FRST_REGISTER_ID AS frstRegisterId, |
|
| 111 |
- DATE_FORMAT(A.LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm, |
|
| 112 |
- A.LAST_UPDUSR_ID AS lastUpdusrId |
|
| 113 |
- FROM ( SELECT KFT.FRIEND_ID, |
|
| 114 |
- KFT.USER_ID, |
|
| 115 |
- KFT.SENDER_KEY, |
|
| 116 |
- KFT.TEMPLATE_NAME, |
|
| 117 |
- KFT.IMAGE_URL, |
|
| 118 |
- KFT.IMAGE_TYPE, |
|
| 119 |
- KFT.IMAGE_TITLE, |
|
| 120 |
- KFT.IMAGE_LINK, |
|
| 121 |
- KFT.TEMPLATE_CONTENTS, |
|
| 122 |
- KFT.AD_FLAG, |
|
| 123 |
- KFT.FRST_REGIST_PNTTM, |
|
| 124 |
- KFT.FRST_REGISTER_ID, |
|
| 125 |
- KFT.LAST_UPDT_PNTTM, |
|
| 126 |
- KFT.LAST_UPDUSR_ID |
|
| 127 |
- FROM MJ_KAKAO_FRIENDS_TEMPLATE KFT |
|
| 128 |
- WHERE DELETE_YN = 'N' |
|
| 129 |
- AND USER_ID = #userId# |
|
| 130 |
- AND SENDER_KEY = #senderKey# |
|
| 131 |
- <isNotEmpty property="searchKeyword"> |
|
| 132 |
- AND KFT.TEMPLATE_NAME LIKE CONCAT ('%', #searchKeyword#,'%')
|
|
| 133 |
- </isNotEmpty> |
|
| 134 |
- <isNotEmpty property="startDate"> |
|
| 135 |
- <![CDATA[ |
|
| 136 |
- AND DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d') |
|
| 137 |
- ]]> |
|
| 138 |
- </isNotEmpty> |
|
| 139 |
- <isNotEmpty property="startDate"> |
|
| 140 |
- <![CDATA[ |
|
| 141 |
- AND DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') <= DATE_FORMAT(#endDate#, '%Y-%m-%d') |
|
| 142 |
- ]]> |
|
| 143 |
- </isNotEmpty> |
|
| 144 |
- ORDER BY 1 =1 |
|
| 145 |
- <isNotEmpty property="searchSortCnd"> |
|
| 146 |
- <isEqual property="searchSortCnd" compareValue="curState"> |
|
| 147 |
- , curState $searchSortOrd$ |
|
| 148 |
- , orderByrsltCode |
|
| 149 |
- </isEqual> |
|
| 150 |
- <isNotEqual property="searchSortCnd" compareValue="curState"> |
|
| 151 |
- ,$searchSortCnd$ |
|
| 152 |
- </isNotEqual> |
|
| 153 |
- </isNotEmpty> |
|
| 154 |
- <isNotEmpty property="searchSortOrd"> |
|
| 155 |
- $searchSortOrd$ |
|
| 156 |
- </isNotEmpty> |
|
| 157 |
- LIMIT #recordCountPerPage# OFFSET #firstIndex# |
|
| 158 |
- ) |
|
| 159 |
- A |
|
| 160 |
- LEFT JOIN MJ_KAKAO_PROFILE_INFO KPI |
|
| 161 |
- ON A.USER_ID = KPI.USER_ID |
|
| 162 |
- AND A.SENDER_KEY = KPI.SENDER_KEY |
|
| 99 |
+ SELECT COUNT(KFT.FRIEND_ID) OVER() AS totCnt, |
|
| 100 |
+ KFT.FRIEND_ID AS friendId, |
|
| 101 |
+ KFT.USER_ID AS userId, |
|
| 102 |
+ KFT.SENDER_KEY AS senderKey, |
|
| 103 |
+ KPI.YELLOW_ID AS yellowId, |
|
| 104 |
+ KFT.TEMPLATE_NAME AS templateName, |
|
| 105 |
+ KFT.IMAGE_FILE_NAME AS imageFileName, |
|
| 106 |
+ KFT.IMAGE_URL AS templateImageUrl, |
|
| 107 |
+ KFT.IMAGE_TYPE AS imageType, |
|
| 108 |
+ KFT.IMAGE_TITLE AS imgTitle, |
|
| 109 |
+ KFT.IMAGE_LINK AS imgLink, |
|
| 110 |
+ KFT.TEMPLATE_CONTENTS AS templateContent, |
|
| 111 |
+ KFT.AD_FLAG AS adFlag, |
|
| 112 |
+ DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm, |
|
| 113 |
+ KFT.FRST_REGISTER_ID AS frstRegisterId, |
|
| 114 |
+ DATE_FORMAT(KFT.LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm, |
|
| 115 |
+ KFT.LAST_UPDUSR_ID AS lastUpdusrId |
|
| 116 |
+ FROM MJ_KAKAO_FRIENDS_TEMPLATE KFT |
|
| 117 |
+ LEFT JOIN MJ_KAKAO_PROFILE_INFO KPI |
|
| 118 |
+ ON KFT.USER_ID = KPI.USER_ID |
|
| 119 |
+ AND KFT.SENDER_KEY = KPI.SENDER_KEY |
|
| 120 |
+ WHERE KFT.DELETE_YN = 'N' |
|
| 121 |
+ AND KFT.USER_ID = #userId# |
|
| 122 |
+ <isNotEmpty property="senderKey"> |
|
| 123 |
+ AND KFT.SENDER_KEY = #senderKey# |
|
| 124 |
+ </isNotEmpty> |
|
| 125 |
+ <isNotEmpty property="searchKeyword"> |
|
| 126 |
+ AND KFT.TEMPLATE_NAME LIKE CONCAT ('%', #searchKeyword#,'%')
|
|
| 127 |
+ </isNotEmpty> |
|
| 128 |
+ <isNotEmpty property="startDate"> |
|
| 129 |
+ <![CDATA[ |
|
| 130 |
+ AND DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d') |
|
| 131 |
+ ]]> |
|
| 132 |
+ </isNotEmpty> |
|
| 133 |
+ <isNotEmpty property="startDate"> |
|
| 134 |
+ <![CDATA[ |
|
| 135 |
+ AND DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') <= DATE_FORMAT(#endDate#, '%Y-%m-%d') |
|
| 136 |
+ ]]> |
|
| 137 |
+ </isNotEmpty> |
|
| 138 |
+ ORDER BY 1 =1 |
|
| 139 |
+ <isNotEmpty property="searchSortCnd"> |
|
| 140 |
+ <isEqual property="searchSortCnd" compareValue="curState"> |
|
| 141 |
+ , curState $searchSortOrd$ |
|
| 142 |
+ , orderByrsltCode |
|
| 143 |
+ </isEqual> |
|
| 144 |
+ <isNotEqual property="searchSortCnd" compareValue="curState"> |
|
| 145 |
+ ,$searchSortCnd$ |
|
| 146 |
+ </isNotEqual> |
|
| 147 |
+ </isNotEmpty> |
|
| 148 |
+ <isNotEmpty property="searchSortOrd"> |
|
| 149 |
+ $searchSortOrd$ |
|
| 150 |
+ </isNotEmpty> |
|
| 151 |
+ LIMIT #recordCountPerPage# OFFSET #firstIndex# |
|
| 152 |
+ |
|
| 163 | 153 |
|
| 164 | 154 |
</select> |
| 165 | 155 |
|
... | ... | @@ -199,5 +189,87 @@ |
| 199 | 189 |
|
| 200 | 190 |
</delete> |
| 201 | 191 |
|
| 192 |
+ <select id="kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail" parameterClass="kakaoVO" resultClass="kakaoVO"> |
|
| 193 |
+ SELECT A.FRIEND_ID AS friendId, |
|
| 194 |
+ A.USER_ID AS userId, |
|
| 195 |
+ A.SENDER_KEY AS senderKey, |
|
| 196 |
+ KPI.YELLOW_ID AS yellowId, |
|
| 197 |
+ A.TEMPLATE_NAME AS templateName, |
|
| 198 |
+ A.IMAGE_FILE_NAME AS imageFileName, |
|
| 199 |
+ A.IMAGE_URL AS templateImageUrl, |
|
| 200 |
+ A.IMAGE_TYPE AS imageType, |
|
| 201 |
+ A.IMAGE_TITLE AS imgTitle, |
|
| 202 |
+ A.IMAGE_LINK AS imgLink, |
|
| 203 |
+ A.TEMPLATE_CONTENTS AS templateContent, |
|
| 204 |
+ A.AD_FLAG AS adFlag, |
|
| 205 |
+ DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm, |
|
| 206 |
+ A.FRST_REGISTER_ID AS frstRegisterId, |
|
| 207 |
+ DATE_FORMAT(A.LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm, |
|
| 208 |
+ A.LAST_UPDUSR_ID AS lastUpdusrId |
|
| 209 |
+ FROM ( SELECT KFT.FRIEND_ID, |
|
| 210 |
+ KFT.USER_ID, |
|
| 211 |
+ KFT.SENDER_KEY, |
|
| 212 |
+ KFT.TEMPLATE_NAME, |
|
| 213 |
+ KFT.IMAGE_FILE_NAME, |
|
| 214 |
+ KFT.IMAGE_URL, |
|
| 215 |
+ KFT.IMAGE_TYPE, |
|
| 216 |
+ KFT.IMAGE_TITLE, |
|
| 217 |
+ KFT.IMAGE_LINK, |
|
| 218 |
+ KFT.TEMPLATE_CONTENTS, |
|
| 219 |
+ KFT.AD_FLAG, |
|
| 220 |
+ KFT.FRST_REGIST_PNTTM, |
|
| 221 |
+ KFT.FRST_REGISTER_ID, |
|
| 222 |
+ KFT.LAST_UPDT_PNTTM, |
|
| 223 |
+ KFT.LAST_UPDUSR_ID |
|
| 224 |
+ FROM MJ_KAKAO_FRIENDS_TEMPLATE KFT |
|
| 225 |
+ WHERE DELETE_YN = 'N' |
|
| 226 |
+ AND USER_ID = #userId# |
|
| 227 |
+ AND FRIEND_ID = #friendId# |
|
| 228 |
+ ) |
|
| 229 |
+ A |
|
| 230 |
+ LEFT JOIN MJ_KAKAO_PROFILE_INFO KPI |
|
| 231 |
+ ON A.USER_ID = KPI.USER_ID |
|
| 232 |
+ AND A.SENDER_KEY = KPI.SENDER_KEY |
|
| 233 |
+ |
|
| 234 |
+ </select> |
|
| 235 |
+ |
|
| 236 |
+ <update id="kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData" parameterClass="kakaoVO" > |
|
| 237 |
+ |
|
| 238 |
+ UPDATE MJ_KAKAO_FRIENDS_TEMPLATE |
|
| 239 |
+ SET ATCH_FILE_ID = #bizJsonName#, |
|
| 240 |
+ TEMPLATE_NAME = #templateName#, |
|
| 241 |
+ IMAGE_FILE_NAME = #imageFileName#, |
|
| 242 |
+ IMAGE_URL = #templateImageUrl#, |
|
| 243 |
+ IMAGE_TYPE = #imageType#, |
|
| 244 |
+ IMAGE_TITLE = #imgTitle#, |
|
| 245 |
+ IMAGE_LINK = #imgLink#, |
|
| 246 |
+ SENDER_KEY = #senderKey#, |
|
| 247 |
+ TEMPLATE_CONTENTS = #templateContent#, |
|
| 248 |
+ AD_FLAG = #adFlag#, |
|
| 249 |
+ LAST_UPDT_PNTTM = NOW(), |
|
| 250 |
+ LAST_UPDUSR_ID = #lastUpdusrId# |
|
| 251 |
+ WHERE |
|
| 252 |
+ FRIEND_ID = #friendId# |
|
| 253 |
+ AND USER_ID = #userId# |
|
| 254 |
+ AND SENDER_KEY = #senderKey# |
|
| 255 |
+ |
|
| 256 |
+ </update> |
|
| 257 |
+ |
|
| 258 |
+ <update id="kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel" parameterClass="kakaoVO"> |
|
| 259 |
+ |
|
| 260 |
+ UPDATE MJ_KAKAO_FRIENDS_TEMPLATE |
|
| 261 |
+ SET IMAGE_FILE_NAME = '', |
|
| 262 |
+ IMAGE_URL = '', |
|
| 263 |
+ IMAGE_TYPE = '', |
|
| 264 |
+ IMAGE_TITLE = '', |
|
| 265 |
+ IMAGE_LINK = '', |
|
| 266 |
+ LAST_UPDT_PNTTM = NOW(), |
|
| 267 |
+ LAST_UPDUSR_ID = #lastUpdusrId# |
|
| 268 |
+ WHERE |
|
| 269 |
+ FRIEND_ID = #friendId# |
|
| 270 |
+ AND USER_ID = #userId# |
|
| 271 |
+ |
|
| 272 |
+ </update> |
|
| 273 |
+ |
|
| 202 | 274 |
|
| 203 | 275 |
</sqlMap>(No newline at end of file) |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
... | ... | @@ -2105,6 +2105,7 @@ |
| 2105 | 2105 |
, CUSTOM_TEXT_PRICE AS customTextPrice |
| 2106 | 2106 |
, POINT_PER AS pointPer |
| 2107 | 2107 |
, KAKAO_AT_PRICE AS kakaoAtPrice |
| 2108 |
+ , KAKAO_FT_PRICE AS kakaoFtPrice |
|
| 2108 | 2109 |
, FAX_PRICE AS faxPrice |
| 2109 | 2110 |
FROM MJ_MBER_SETTING |
| 2110 | 2111 |
|
--- src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
... | ... | @@ -1217,6 +1217,7 @@ |
| 1217 | 1217 |
, PICTURE2_PRICE = #picture2Price# |
| 1218 | 1218 |
, PICTURE3_PRICE = #picture3Price# |
| 1219 | 1219 |
, KAKAO_AT_PRICE = #kakaoAtPrice# |
| 1220 |
+ , KAKAO_FT_PRICE = #kakaoFtPrice# |
|
| 1220 | 1221 |
, KAKAO_FT_IMG_PRICE = #kakaoFtImgPrice# |
| 1221 | 1222 |
, KAKAO_FT_WIDE_IMG_PRICE = #kakaoFtWideImgPrice# |
| 1222 | 1223 |
WHERE MBER_ID = #mberId# |
--- src/main/webapp/WEB-INF/decorators.xml
+++ src/main/webapp/WEB-INF/decorators.xml
... | ... | @@ -183,6 +183,7 @@ |
| 183 | 183 |
<pattern>*/web/pop/*</pattern> |
| 184 | 184 |
<pattern>/web/mjon/kakao/template/selectKakaoAlimtalkTemplateListPopupAjax.do</pattern> |
| 185 | 185 |
<pattern>/web/mjon/kakao/alimtalk/selectKakaoAlimtalkTemplateDataTestPopup.do</pattern> |
| 186 |
+ <pattern>/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do</pattern> |
|
| 186 | 187 |
<pattern>/web/mjon/fax/faxSendDetailPopup.do</pattern> |
| 187 | 188 |
</decorator> |
| 188 | 189 |
|
--- src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
+++ src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
... | ... | @@ -5289,7 +5289,7 @@ |
| 5289 | 5289 |
<tr> |
| 5290 | 5290 |
<th>구분</th> |
| 5291 | 5291 |
<th>알림톡(<fmt:formatNumber value="${sysJoinSetVO.kakaoAtPrice}" pattern="###.#" />원)</th>
|
| 5292 |
- <th>친구톡(준비중)</th> |
|
| 5292 |
+ <th>친구톡(<fmt:formatNumber value="${sysJoinSetVO.kakaoFtPrice}" pattern="###.#" />원)</th>
|
|
| 5293 | 5293 |
<th>팩스(<fmt:formatNumber value="${sysJoinSetVO.faxPrice}" pattern="###.#" />원)</th>
|
| 5294 | 5294 |
</tr> |
| 5295 | 5295 |
</thead> |
... | ... | @@ -5297,7 +5297,7 @@ |
| 5297 | 5297 |
<tr> |
| 5298 | 5298 |
<td>문자온 원가</td> |
| 5299 | 5299 |
<td><c:out value="${kakaoAtCost}"/></td>
|
| 5300 |
- <td>준비중</td> |
|
| 5300 |
+ <td><c:out value="${kakaoFtCost}"/></td>
|
|
| 5301 | 5301 |
<td><c:out value="${faxCost}"/></td>
|
| 5302 | 5302 |
</tr> |
| 5303 | 5303 |
<tr> |
... | ... | @@ -5306,7 +5306,7 @@ |
| 5306 | 5306 |
<fmt:formatNumber value='${kakaoAtPrice}' pattern='###.#' />
|
| 5307 | 5307 |
</td> |
| 5308 | 5308 |
<td> |
| 5309 |
- 준비중 |
|
| 5309 |
+ <fmt:formatNumber value='${kakaoFtPrice}' pattern='###.#' />
|
|
| 5310 | 5310 |
</td> |
| 5311 | 5311 |
<td> |
| 5312 | 5312 |
<fmt:formatNumber value='${faxPrice}' pattern='###.#' />
|
... | ... | @@ -5315,7 +5315,7 @@ |
| 5315 | 5315 |
<tr> |
| 5316 | 5316 |
<td>마진률</td> |
| 5317 | 5317 |
<td><fmt:formatNumber value="${kakaoAtMargin}" pattern=".0" />%</td>
|
| 5318 |
- <td>준비중</td> |
|
| 5318 |
+ <td><fmt:formatNumber value="${kakaoFtMargin}" pattern=".0" />%</td>
|
|
| 5319 | 5319 |
<td><fmt:formatNumber value="${faxMargin}" pattern=".0" />%</td>
|
| 5320 | 5320 |
</tr> |
| 5321 | 5321 |
</tbody> |
... | ... | @@ -5772,6 +5772,10 @@ |
| 5772 | 5772 |
<th>알림톡 금액</th> |
| 5773 | 5773 |
<td><input type="text" name="kakaoAtPrice" id="kakaoAtPrice" value="<c:out value='${kakaoAtPrice}'/>"/></td>
|
| 5774 | 5774 |
</tr> |
| 5775 |
+ <tr> |
|
| 5776 |
+ <th>친구톡 금액</th> |
|
| 5777 |
+ <td><input type="text" name="kakaoFtPrice" id="kakaoFtPrice" value="<c:out value='${kakaoFtPrice}'/>"/></td>
|
|
| 5778 |
+ </tr> |
|
| 5775 | 5779 |
</tbody> |
| 5776 | 5780 |
</table> |
| 5777 | 5781 |
<div class="button_box"> |
--- src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/KakaoATChannelIDList.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/KakaoATChannelIDList.jsp
... | ... | @@ -83,13 +83,27 @@ |
| 83 | 83 |
} |
| 84 | 84 |
|
| 85 | 85 |
//선택 채널 알림톡 템플릿 리스트 불러오기 |
| 86 |
-function fnTemplateListPop(senderKey, userId){
|
|
| 86 |
+function fnAtTemplateListPop(yellowId, senderKey, userId){
|
|
| 87 |
+ |
|
| 88 |
+ document.popupForm.senderKey.value = senderKey; |
|
| 89 |
+ document.popupForm.userId.value = userId; |
|
| 90 |
+ document.popupForm.yellowId.value = yellowId; |
|
| 91 |
+ |
|
| 92 |
+ 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');
|
|
| 93 |
+ document.popupForm.action = "<c:url value='/uss/ion/kakaoat/KakaoATChannelIDTemplateListPopupAjax.do'/>"; |
|
| 94 |
+ document.popupForm.target = "listPopup"; |
|
| 95 |
+ document.popupForm.submit(); |
|
| 96 |
+ |
|
| 97 |
+} |
|
| 98 |
+ |
|
| 99 |
+//선택 채널 친구톡 템플릿 리스트 불러오기 |
|
| 100 |
+function fnFtTemplateListPop(senderKey, userId){
|
|
| 87 | 101 |
|
| 88 | 102 |
document.popupForm.senderKey.value = senderKey; |
| 89 | 103 |
document.popupForm.userId.value = userId; |
| 90 | 104 |
|
| 91 | 105 |
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');
|
| 92 |
- document.popupForm.action = "<c:url value='/uss/ion/kakaoat/KakaoATChannelIDTemplateListPopupAjax.do'/>"; |
|
| 106 |
+ document.popupForm.action = "<c:url value='/uss/ion/kakaoft/KakaoFTChannelIDTemplateListPopupAjax.do'/>"; |
|
| 93 | 107 |
document.popupForm.target = "listPopup"; |
| 94 | 108 |
document.popupForm.submit(); |
| 95 | 109 |
|
... | ... | @@ -118,6 +132,7 @@ |
| 118 | 132 |
<input type="hidden" name="mberId"/> |
| 119 | 133 |
<input type="hidden" id="senderKey" name="senderKey" value=""/> |
| 120 | 134 |
<input type="hidden" name="userId" value=""/> |
| 135 |
+ <input type="hidden" name="yellowId" value=""/> |
|
| 121 | 136 |
</form> |
| 122 | 137 |
|
| 123 | 138 |
|
... | ... | @@ -193,6 +208,7 @@ |
| 193 | 208 |
<col style="width: 19%"> |
| 194 | 209 |
<col style="width: 24%"> |
| 195 | 210 |
<col style="width: 10%"> |
| 211 |
+ <col style="width: 10%"> |
|
| 196 | 212 |
<col style="width: 11%"> |
| 197 | 213 |
<col style="width: 11%"> |
| 198 | 214 |
<col style="width: 10%"> |
... | ... | @@ -204,6 +220,7 @@ |
| 204 | 220 |
<th>채널ID<input type="button" class="sort sortBtn" id="sort_yellowId"></th> |
| 205 | 221 |
<th>채널명<input type="button" class="sort sortBtn" id="sort_yellowId"></th> |
| 206 | 222 |
<th>등록상태</th> |
| 223 |
+ <th>템플릿</th> |
|
| 207 | 224 |
<th>채널생성일</th> |
| 208 | 225 |
<th>채널등록일<input type="button" class="sort sortBtn" id="sort_lastUpdtPnttm"></th> |
| 209 | 226 |
<th>삭제여부<input type="button" class="sort sortBtn" id="sort_deleteYn"></th> |
... | ... | @@ -226,7 +243,7 @@ |
| 226 | 243 |
<td onClick="fnTemplateListPop('<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" style="cursor:pointer;">
|
| 227 | 244 |
<c:out value="${result.uuid}"/>
|
| 228 | 245 |
</td> |
| 229 |
- <td onClick="fnTemplateListPop('<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" style="cursor:pointer;">
|
|
| 246 |
+ <td> |
|
| 230 | 247 |
<c:out value="${result.name}"/>
|
| 231 | 248 |
</td> |
| 232 | 249 |
<td> |
... | ... | @@ -249,6 +266,10 @@ |
| 249 | 266 |
<c:otherwise> |
| 250 | 267 |
</c:otherwise> |
| 251 | 268 |
</c:choose> |
| 269 |
+ </td> |
|
| 270 |
+ <td> |
|
| 271 |
+ <input type="button" class="btnType1" onClick="fnAtTemplateListPop('<c:out value="${result.uuid}"/>','<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" value="AT"/>
|
|
| 272 |
+ <input type="button" class="btnType1" onClick="fnFtTemplateListPop('<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" value="FT"/>
|
|
| 252 | 273 |
</td> |
| 253 | 274 |
<td> |
| 254 | 275 |
<fmt:parseDate value="${result.createdAt}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
... | ... | @@ -342,14 +363,14 @@ |
| 342 | 363 |
</tr> |
| 343 | 364 |
</c:forEach> |
| 344 | 365 |
<c:if test="${empty resultChannelList}">
|
| 345 |
- <tr><td colspan="14"><spring:message code="common.nodata.msg" /></td></tr> |
|
| 366 |
+ <tr><td colspan="9"><spring:message code="common.nodata.msg" /></td></tr> |
|
| 346 | 367 |
</c:if> |
| 347 | 368 |
</tbody> |
| 348 | 369 |
</table> |
| 349 | 370 |
</div> |
| 350 |
- <!-- <div class="btnWrap"> |
|
| 351 |
- <input type="button" class="btnType2" onclick="javascript:fnSttusYAll(); return false;" value="일괄승인"> |
|
| 352 |
- </div> --> |
|
| 371 |
+ <div class="btnWrap"> |
|
| 372 |
+ <!-- <input type="button" class="btnType2" onclick="javascript:fnSttusYAll(); return false;" value="일괄승인"> --> |
|
| 373 |
+ </div> |
|
| 353 | 374 |
<!-- 페이지 네비게이션 시작 --> |
| 354 | 375 |
<c:if test="${!empty resultChannelList}">
|
| 355 | 376 |
<div class="page"> |
--- src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/ReserveKakaoATModify.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/ReserveKakaoATModify.jsp
... | ... | @@ -358,14 +358,17 @@ |
| 358 | 358 |
<c:out value="${mjonKakaoATDetailVO.yellowId}"/>
|
| 359 | 359 |
</td> |
| 360 | 360 |
</tr> |
| 361 |
- <tr> |
|
| 362 |
- <th><span class="reqArea">템플릿명</span></th> |
|
| 363 |
- <td colspan="3"> |
|
| 364 |
- <div class="btnWrap"> |
|
| 365 |
- <input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
|
|
| 366 |
- </div> |
|
| 367 |
- </td> |
|
| 368 |
- </tr> |
|
| 361 |
+ <c:if test="${not empty mjonKakaoATDetailVO.msgNoticetalkTmpKey}">
|
|
| 362 |
+ <!-- 알림톡 템플릿 상세 팝업 호출 --> |
|
| 363 |
+ <tr> |
|
| 364 |
+ <th><span class="reqArea">템플릿명</span></th> |
|
| 365 |
+ <td colspan="3"> |
|
| 366 |
+ <div class="btnWrap"> |
|
| 367 |
+ <input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
|
|
| 368 |
+ </div> |
|
| 369 |
+ </td> |
|
| 370 |
+ </tr> |
|
| 371 |
+ </c:if> |
|
| 369 | 372 |
<%-- <tr> |
| 370 | 373 |
<th><span class="reqArea">발신번호</span></th> |
| 371 | 374 |
<td colspan="3"> |
--- src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/SendKakaoATModify.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/SendKakaoATModify.jsp
... | ... | @@ -358,14 +358,17 @@ |
| 358 | 358 |
<c:out value="${mjonKakaoATDetailVO.yellowId}"/>
|
| 359 | 359 |
</td> |
| 360 | 360 |
</tr> |
| 361 |
- <tr> |
|
| 362 |
- <th><span class="reqArea">템플릿명</span></th> |
|
| 363 |
- <td colspan="3"> |
|
| 364 |
- <div class="btnWrap"> |
|
| 365 |
- <input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
|
|
| 366 |
- </div> |
|
| 367 |
- </td> |
|
| 368 |
- </tr> |
|
| 361 |
+ <c:if test="${not empty mjonKakaoATDetailVO.msgNoticetalkTmpKey}">
|
|
| 362 |
+ <!-- 알림톡 템플릿 상세 팝업 호출 --> |
|
| 363 |
+ <tr> |
|
| 364 |
+ <th><span class="reqArea">템플릿명</span></th> |
|
| 365 |
+ <td colspan="3"> |
|
| 366 |
+ <div class="btnWrap"> |
|
| 367 |
+ <input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
|
|
| 368 |
+ </div> |
|
| 369 |
+ </td> |
|
| 370 |
+ </tr> |
|
| 371 |
+ </c:if> |
|
| 369 | 372 |
<%-- <tr> |
| 370 | 373 |
<th><span class="reqArea">발신번호</span></th> |
| 371 | 374 |
<td colspan="3"> |
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateDetailPop.jsp
... | ... | @@ -0,0 +1,1112 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> | |
| 3 | +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> | |
| 4 | +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> | |
| 5 | +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> | |
| 6 | +<!DOCTYPE html> | |
| 7 | +<html lang="ko"> | |
| 8 | +<head> | |
| 9 | +<title> 친구톡 템플릿 상세보기</title> | |
| 10 | +<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" rel="stylesheet"> | |
| 11 | + <link rel="stylesheet" href="/publish/css/reset.css"> | |
| 12 | + <link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css"> | |
| 13 | + <link rel="stylesheet" href="/publish/css/common.css"> | |
| 14 | + <link rel="stylesheet" href="/publish/css/button.css"> | |
| 15 | + <link rel="stylesheet" href="/publish/css/content.css"> | |
| 16 | + <link rel="stylesheet" href="/publish/css/adrbook.css"> | |
| 17 | + <link rel="stylesheet" href="/publish/css/font.css"> | |
| 18 | + <link rel="stylesheet" href="/publish/css/popupLayer.css"> | |
| 19 | + <link rel="stylesheet" href="/publish/js/datepicker/classic.css"> | |
| 20 | + <link rel="stylesheet" href="/publish/js/datepicker/classic.date.css"> | |
| 21 | + | |
| 22 | + | |
| 23 | + <script src="/publish/js/jquery-3.5.0.js"></script> | |
| 24 | + <script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script> | |
| 25 | + <script src="/publish/js/common.js"></script> | |
| 26 | + <script src="/publish/js/content.js"></script> | |
| 27 | + <script src="/publish/js/popupLayer.js"></script> | |
| 28 | + <script type="text/javascript" src="/publish/js/datepicker/picker.js"></script> | |
| 29 | + <script type="text/javascript" src="/publish/js/datepicker/picker.date.js"></script> | |
| 30 | + <script type="text/javascript" src="/publish/js/datepicker/ko_KR.js"></script> | |
| 31 | + | |
| 32 | + <script src="/js/MJUtill.js"></script> | |
| 33 | + <script src="/js/kakao/templateComm.js"></script> | |
| 34 | + | |
| 35 | +<script type="text/javascript"> | |
| 36 | + | |
| 37 | +/* 파일등록 */ | |
| 38 | +var _fileIdx = 0; | |
| 39 | +var _fileForm2 = new Array(); | |
| 40 | +var fileExt = ""; // 첨부파일 확장자 | |
| 41 | + | |
| 42 | +$(document).ready(function (){ | |
| 43 | + | |
| 44 | + initFormChk(); | |
| 45 | + | |
| 46 | + //첫로딩시 우측 미리보기 화면 숨김처리 | |
| 47 | + //$('.emphasis_title_text').hide(); //강조유형 타이틀 | |
| 48 | + //$('.emphasis_side_text').hide(); //강조유형 보조문구 | |
| 49 | + //$('.template_text').hide(); //내용 미리보기 | |
| 50 | + //$('.side_info_text').hide(); //부가정보 내용 | |
| 51 | + //$('.channel_info_text').hide(); //채널추가 텍스트 내용 | |
| 52 | + //$('.btnAd').hide(); //샘플 채널추가 버튼 | |
| 53 | + //$('.btnEmpty').hide(); //샘플 버튼 | |
| 54 | + | |
| 55 | + $("#selectTemplateFirstCatagory").on("change", function(){ | |
| 56 | + $("#selectTemplateSecondCatagory option").remove(); | |
| 57 | + templateCatagoryChange("2", $(this).val(), "insert"); | |
| 58 | + }); | |
| 59 | + | |
| 60 | + $("#selectTemplateFirstCatagory_select").on("change", function(){ | |
| 61 | + $("#selectTemplateSecondCatagory_select option").remove(); | |
| 62 | + templateCatagoryChange("2", $(this).val(), "select"); | |
| 63 | + }); | |
| 64 | + | |
| 65 | + //메시지 유형에 따른 화면 변경 기능 추가 | |
| 66 | + $("#selectTemplateType").on("change", function(){ | |
| 67 | + if($(this).val() == 'BA'){ | |
| 68 | + $("#ExTr").hide(); | |
| 69 | + $("#AdTr").hide(); | |
| 70 | + $("#buttonChannelAdd").hide(); | |
| 71 | + }else if($(this).val() == 'EX'){ | |
| 72 | + $("#ExTr").show(); | |
| 73 | + $("#AdTr").hide(); | |
| 74 | + $("#buttonChannelAdd").hide(); | |
| 75 | + }else if($(this).val() == 'AD'){ | |
| 76 | + $("#ExTr").hide(); | |
| 77 | + $("#AdTr").show(); | |
| 78 | + $("#buttonChannelAdd").show(); | |
| 79 | + | |
| 80 | + }else{ | |
| 81 | + | |
| 82 | + } | |
| 83 | + }); | |
| 84 | + | |
| 85 | + //템플릿 강조유형에 따른 화면 변경 기능 추가 | |
| 86 | + $("#selectTemplateEmphasizeType").on("change", function(){ | |
| 87 | + if($(this).val() == 'NONE'){ | |
| 88 | + $("#imageNameTr").hide(); | |
| 89 | + $("#imageUrlTr").hide(); | |
| 90 | + $("#titleTr").hide(); | |
| 91 | + $("#subTitleTr").hide(); | |
| 92 | + }else if($(this).val() == 'IMAGE'){ | |
| 93 | + $("#imageNameTr").show(); | |
| 94 | + $("#imageUrlTr").show(); | |
| 95 | + $("#titleTr").hide(); | |
| 96 | + $("#subTitleTr").hide(); | |
| 97 | + }else if($(this).val() == 'TEXT'){ | |
| 98 | + $("#imageNameTr").hide(); | |
| 99 | + $("#imageUrlTr").hide(); | |
| 100 | + $("#titleTr").show(); | |
| 101 | + $("#subTitleTr").show(); | |
| 102 | + } | |
| 103 | + }); | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + //템플릿명 입력 글자수 체크 해주기 | |
| 108 | + $("#inputTemplateName").keyup(function(e){ | |
| 109 | + | |
| 110 | + var contents = $('#inputTemplateName').val(); | |
| 111 | + var conLeng = strMaxCharacterCnt(contents); | |
| 112 | + | |
| 113 | + if(conLeng > 100){ | |
| 114 | + | |
| 115 | + alert("템플릿명은 100자를 넘을 수 없습니다."); | |
| 116 | + var splicecon = strMaxLengthSubstring(contents, 99); | |
| 117 | + $('#inputTemplateName').val(splicecon); | |
| 118 | + return false; | |
| 119 | + | |
| 120 | + } | |
| 121 | + | |
| 122 | + }); | |
| 123 | + | |
| 124 | + //템플릿 내용 입력 글자수 체크 해주기 | |
| 125 | + $("#inputTemplateContent").keyup(function(e){ | |
| 126 | + | |
| 127 | + var contents = $('#inputTemplateContent').val(); | |
| 128 | + setContentsLeng(contents); | |
| 129 | + | |
| 130 | + }); | |
| 131 | + | |
| 132 | + | |
| 133 | + //강조표기 타이틀 입력시 우측 미리보기 화면에 표시해주기 | |
| 134 | + $("#inputTemplateTitle").keyup(function(e){ | |
| 135 | + | |
| 136 | + var title = $('#inputTemplateTitle').val(); | |
| 137 | + $('.emphasis_title_text').show(); | |
| 138 | + $('.emphasis_title_text').text(title); | |
| 139 | + | |
| 140 | + }); | |
| 141 | + | |
| 142 | + //강조표기 타이틀 입력시 우측 미리보기 화면에 표시해주기 | |
| 143 | + $("#inputTemplateSubTitle").keyup(function(e){ | |
| 144 | + | |
| 145 | + var subTitle = $('#inputTemplateSubTitle').val(); | |
| 146 | + $('.emphasis_side_text').show(); | |
| 147 | + $('.emphasis_side_text').text(subTitle); | |
| 148 | + | |
| 149 | + }); | |
| 150 | + | |
| 151 | + //부가정보 내용 입력시 우측 미리보기 화면에 표시해주기 | |
| 152 | + $("#inputTemplateExtra").keyup(function(e){ | |
| 153 | + | |
| 154 | + var extraCon = $('#inputTemplateExtra').val(); | |
| 155 | + $('.side_info_text').show(); | |
| 156 | + $('.side_info_text').text(extraCon); | |
| 157 | + | |
| 158 | + }); | |
| 159 | + | |
| 160 | + //채널추가형 내용 입력시 우측 미리보기 화면에 표시해주기 | |
| 161 | + $("#inputTemplateAd").keyup(function(e){ | |
| 162 | + | |
| 163 | + var contentsAd = $('#inputTemplateAd').val(); | |
| 164 | + $('.channel_info_text').show(); | |
| 165 | + $('.channel_info_text').text(contentsAd); | |
| 166 | + | |
| 167 | + }); | |
| 168 | + | |
| 169 | + //메세지 유형이 채널추가인경우 미리보기에 채널 추가 버튼 표시해주기 | |
| 170 | + var msgTypeVal = $('#selectTemplateType option:selected').val(); | |
| 171 | + if(msgTypeVal == 'AD'){ | |
| 172 | + | |
| 173 | + $(".btnAd").css("display", "block"); | |
| 174 | + | |
| 175 | + }else if(msgTypeVal == 'MI'){//복합형인경우 부가정보 및 채널추가 버튼 모두 표시 | |
| 176 | + | |
| 177 | + $(".side_info_text").css("display", "block"); | |
| 178 | + $(".btnAd").css("display", "block"); | |
| 179 | + | |
| 180 | + } | |
| 181 | + | |
| 182 | +}); | |
| 183 | + | |
| 184 | +//화면 초기 로딩시 셀렉트 박스 등 처리 해주기 | |
| 185 | +function initFormChk(){ | |
| 186 | + | |
| 187 | + //첫로딩시 우측 미리보기 화면 숨김처리 | |
| 188 | + $('.emphasis_title_text').hide(); //강조유형 타이틀 | |
| 189 | + $('.emphasis_side_text').hide(); //강조유형 보조문구 | |
| 190 | + //$('.template_text').hide(); //내용 미리보기 | |
| 191 | + $('.side_info_text').hide(); //부가정보 내용 | |
| 192 | + $('.channel_info_text').hide(); //채널추가 텍스트 내용 | |
| 193 | + $('.btnAd').hide(); //샘플 채널추가 버튼 | |
| 194 | + $('.btnEmpty').hide(); //샘플 버튼 | |
| 195 | + | |
| 196 | + //채널ID 정보 미리보기에 표시해주기 | |
| 197 | + fnAgentCodeChg(); | |
| 198 | + | |
| 199 | + //템플릿 등록 이미지가 있는 경우 이미지 정보 표시해 주기 | |
| 200 | + var imgType = $("input[name=img_file_add]:checked").val(); | |
| 201 | + | |
| 202 | + if(!imgType == ''){ | |
| 203 | + | |
| 204 | + if($("input[name='img_file_add']:checked").attr("id")=="img_file_1"){ | |
| 205 | + $(".basic_img_add_wrap").show().siblings(".img_add_info_wrap").hide(); | |
| 206 | + $(".img_file_add_wrap").show(); | |
| 207 | + }else if($("input[name='img_file_add']:checked").attr("id")=="img_file_2"){ | |
| 208 | + $(".wide_img_add_wrap").show().siblings(".img_add_info_wrap").hide(); | |
| 209 | + $(".img_file_add_wrap").show(); | |
| 210 | + } else{ | |
| 211 | + $(".img_add_info_wrap, .img_file_add_wrap").hide(); | |
| 212 | + } | |
| 213 | + | |
| 214 | + } | |
| 215 | + var imageFileName = '${resultTemplateVO.imageFileName}'; | |
| 216 | + $("#imgNm").text(imageFileName); | |
| 217 | + | |
| 218 | + //미리보기에 이미지 표시해주기 | |
| 219 | + var imgUrl = '${resultTemplateVO.templateImageUrl}'; | |
| 220 | + $('.kakao_image').css("display", "block"); | |
| 221 | + $("#kakaoImg").attr("src", imgUrl); | |
| 222 | + | |
| 223 | + | |
| 224 | + //초기 템플릿 내용 글자수 처리해주기 | |
| 225 | + var tmpContents = $('#inputTemplateContent').val(); | |
| 226 | + setContentsLengForFriends(tmpContents); | |
| 227 | + | |
| 228 | + //초기 광고포함 여부 처리 | |
| 229 | + var adFlagVal = $("input[name=ad_flag]:checked").val(); | |
| 230 | + advTextChange(adFlagVal); | |
| 231 | + | |
| 232 | +} | |
| 233 | + | |
| 234 | +// 카테고리 선택 조회 | |
| 235 | +function templateCatagoryChange(depth, code, type){ | |
| 236 | + var categoryDepth = depth; | |
| 237 | + var categoryCode = code; | |
| 238 | + | |
| 239 | + $.ajax({ | |
| 240 | + type: "POST" | |
| 241 | + , url: "/web/mjon/test/selectKakaoTemplateCategoryAjax.do" | |
| 242 | + , data:{ "categoryDepth":categoryDepth, "categoryCode" : categoryCode} | |
| 243 | + , dataType:'json' | |
| 244 | + , cache: false | |
| 245 | + , async: false | |
| 246 | + , timeout: 600000 | |
| 247 | + , success: function (returnData, status) { | |
| 248 | + if(status == 'success'){ | |
| 249 | + if(categoryDepth == '2'){ | |
| 250 | + | |
| 251 | + if(type == "insert"){ | |
| 252 | + var list = returnData.selectCatagoryList; | |
| 253 | + $("#selectTemplateSecondCatagory").append("<option value=''>카테고리 선택</option>"); | |
| 254 | + for(var i=0; i < list.length; i++){ | |
| 255 | + $("#selectTemplateSecondCatagory").append("<option value='"+list[i].categoryCode+"'>"+list[i].categoryGroupName+"</option>"); | |
| 256 | + } | |
| 257 | + }else if(type == "select"){ | |
| 258 | + var list = returnData.selectCatagoryList; | |
| 259 | + $("#selectTemplateSecondCatagory_select").append("<option value=''>카테고리 선택</option>"); | |
| 260 | + for(var i=0; i < list.length; i++){ | |
| 261 | + $("#selectTemplateSecondCatagory_select").append("<option value='"+list[i].categoryCode+"'>"+list[i].categoryGroupName+"</option>"); | |
| 262 | + } | |
| 263 | + } | |
| 264 | + } | |
| 265 | + } else if(status== 'fail'){ | |
| 266 | + alert("저장에 실패하였습니다. !!"); | |
| 267 | + } | |
| 268 | + } | |
| 269 | + ,error: function (e) { | |
| 270 | + console.log("ERROR : ", e); | |
| 271 | + alert("삭제처리에 실패하였습니다."); | |
| 272 | + } | |
| 273 | + }); | |
| 274 | + | |
| 275 | + | |
| 276 | +} | |
| 277 | + | |
| 278 | +//--------------첨부파일 처리 함수 시작-------------------------- | |
| 279 | + | |
| 280 | +/* 파일사이즈 가져오기 */ | |
| 281 | +function getStrFileSize(filesize){ | |
| 282 | + var sizeStr=""; | |
| 283 | + var sizeKB = filesize/1024; | |
| 284 | + if(parseInt(sizeKB) > 1024){ | |
| 285 | + var sizeMB = sizeKB/1024; | |
| 286 | + sizeStr = sizeMB.toFixed(2)+" MB"; | |
| 287 | + }else{ | |
| 288 | + sizeStr = sizeKB.toFixed(2)+" KB"; | |
| 289 | + } | |
| 290 | + return sizeStr; | |
| 291 | +} | |
| 292 | + | |
| 293 | +//첨부 이미지 정보 확인 처리 해주기(이미지 리사이징 전단계) | |
| 294 | +function imgResizeInfo(event){ | |
| 295 | + | |
| 296 | + var fileValue = $("#imgFile").val().split("\\"); | |
| 297 | + var fileName = fileValue[fileValue.length-1]; | |
| 298 | + | |
| 299 | + var fileExt = fileName.split('.').pop().toLowerCase(); | |
| 300 | + | |
| 301 | + if(fileExt.length > 0){ | |
| 302 | + if($.inArray(fileExt, ['jpg','jpeg','png']) == -1) { | |
| 303 | + alert('jpg, jpeg, png 파일만 업로드 할수 있습니다.'); | |
| 304 | + return false; | |
| 305 | + } | |
| 306 | + | |
| 307 | + $("#imgNm").val(fileName); | |
| 308 | + } | |
| 309 | + | |
| 310 | + //알림톡 이미지 등록 요청하기 | |
| 311 | + getTemplateImagUrl(); | |
| 312 | +} | |
| 313 | + | |
| 314 | +function getTemplateImagUrl(){ | |
| 315 | + | |
| 316 | + var bizForm = document.bizForm; | |
| 317 | + var data = new FormData(bizForm); | |
| 318 | + var atchFileSts = true; //첨부파일 갯수 상태 값 | |
| 319 | + | |
| 320 | + data.append("file0", $('#imgFile').prop('files')[0]); | |
| 321 | + | |
| 322 | + var fileValue = $("#imgFile").val().split("\\"); | |
| 323 | + var fileName = fileValue[fileValue.length-1]; | |
| 324 | + | |
| 325 | + var fileExt = fileName.split('.').pop().toLowerCase(); | |
| 326 | + | |
| 327 | + if($.inArray(fileExt, ['jpg','jpeg', 'png']) == -1) { | |
| 328 | + | |
| 329 | + alert('jpg, jpeg 파일만 업로드 할수 있습니다.'); | |
| 330 | + return false; | |
| 331 | + | |
| 332 | + } | |
| 333 | + | |
| 334 | + var url = ""; | |
| 335 | + | |
| 336 | + if(fileExt == "jpg" || fileExt == "jpeg" || fileExt == "png"){ | |
| 337 | + | |
| 338 | + url = "/web/mjon/kakao/template/sendKakaoTemplateImageUploadAjax.do"; | |
| 339 | + | |
| 340 | + }else{ | |
| 341 | + | |
| 342 | + alert('jpg, jpeg 파일만 업로드 할수 있습니다.'); | |
| 343 | + return; | |
| 344 | + | |
| 345 | + } | |
| 346 | + | |
| 347 | + $.ajax({ | |
| 348 | + type : 'POST' | |
| 349 | + , enctype : 'multipart/form-data' | |
| 350 | + , url : url | |
| 351 | + , data : data | |
| 352 | + , dataType:'json' | |
| 353 | + , async:false | |
| 354 | + , processData: false | |
| 355 | + , contentType: false | |
| 356 | + , cache : false | |
| 357 | + , success : function(returnData, status){ | |
| 358 | + if(returnData.result == "success") { | |
| 359 | + | |
| 360 | + var code = returnData.code; | |
| 361 | + var msg = returnData.msg; | |
| 362 | + var imgUrl = returnData.imgUrl; | |
| 363 | + | |
| 364 | + if(code == "200"){//등록 성공시 메시지 및 이미지 표시 처리 | |
| 365 | + alert("이미지 등록이 완료 되었습니다."); | |
| 366 | + $("#templateImageName").val(fileName); | |
| 367 | + $("#templateImageUrl").val(imgUrl); | |
| 368 | + | |
| 369 | + $('.kakao_image').css("display", "block"); | |
| 370 | + $("#kakaoImg").attr("src", imgUrl); | |
| 371 | + | |
| 372 | + }else if(code == "2002"){//일반 이미지 가로 세로 크기 오류 발생 | |
| 373 | + | |
| 374 | + alert("권장 이미지 사이즈는 가로 800px 세로 400px(가로:세로 비율이 2:1 아닐 경우, 가로 500px, 세로 250px 이하일 경우 업로드 불가)입니다."); | |
| 375 | + $("#imgNm").val(""); | |
| 376 | + return false; | |
| 377 | + | |
| 378 | + }else{//기타 실패 | |
| 379 | + | |
| 380 | + alert(msg); | |
| 381 | + $("#imgNm").val(""); | |
| 382 | + return false; | |
| 383 | + } | |
| 384 | + | |
| 385 | + }else if(returnData.result == "loginFail"){ | |
| 386 | + location.href="/web/user/login/login.do"; | |
| 387 | + }else{ | |
| 388 | + alert("이미지 등록 중 오류가 발생하였습니다.!!!"); | |
| 389 | + return false; | |
| 390 | + } | |
| 391 | + } | |
| 392 | + ,error : function(request , status, error){ | |
| 393 | + alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error); | |
| 394 | + } | |
| 395 | + }); | |
| 396 | + | |
| 397 | + //첨부파일 이름 및 데이터 지워주기 - 완료 후 팝업이 자동으로 닫힘. | |
| 398 | + $("#imgFile").val(""); | |
| 399 | + //$("#imgNm").val(""); | |
| 400 | + | |
| 401 | +} | |
| 402 | + | |
| 403 | +//파일첨부 버튼 클릭시 파일 첨부 실행 | |
| 404 | +function upImgClick(){ | |
| 405 | + | |
| 406 | + $("#imgFile").click(); | |
| 407 | + | |
| 408 | +} | |
| 409 | + | |
| 410 | + | |
| 411 | +//발신 템플릿 등록 | |
| 412 | +function updateTemplate(){ | |
| 413 | + | |
| 414 | + var selectAgentCode = $("select[name='selectAgentCode']").val(); // 선택 채널ID | |
| 415 | + var inputTemplateName = $("#inputTemplateName").val(); // 입력 템플릿 이름 | |
| 416 | + | |
| 417 | + var selectTemplateType = $("select[name='selectTemplateType']").val(); // 선택 템플릿 메시지 유형 | |
| 418 | + var inputTemplateContent = $("#inputTemplateContent").val(); // 템플릿 내용 | |
| 419 | + var inputTemplateExtra = $("#inputTemplateExtra").val(); // 부가정보 내용 | |
| 420 | + var inputTemplateAd = $("#inputTemplateAd").val(); // 광고성메시지 | |
| 421 | + | |
| 422 | + var selectTemplateEmphasizeType = $("select[name='selectTemplateEmphasizeType']").val(); // 선택 템플릿 강조 유형 | |
| 423 | + var inputTemplateImageName = $("#templateImageName").val(); // 템플릿 이미지 파일명 | |
| 424 | + var inputTemplateImageUrl = $("#templateImageUrl").val(); // 템플릿 이미지 링크 | |
| 425 | + var inputTemplateTitle = $("#inputTemplateTitle").val(); // 템플릿 타이틀 | |
| 426 | + var inputTemplateSubTitle = $("#inputTemplateSubTitle").val(); // 템플릿 서브 타이틀 | |
| 427 | + | |
| 428 | + var selectTemplateSecondCatagory = $("select[name='selectTemplateSecondCatagory']").val(); // 선택 템플릿 카테고리 | |
| 429 | + | |
| 430 | + // 공통 유효성 검사 조회 | |
| 431 | + if(selectAgentCode == null || selectAgentCode == ""){ | |
| 432 | + alert("채널ID를 선택해 주세요"); | |
| 433 | + return; | |
| 434 | + }; | |
| 435 | + | |
| 436 | + if(inputTemplateName == null || inputTemplateName == ""){ | |
| 437 | + alert("템플릿 이름을 입력해 주세요"); | |
| 438 | + $("#inputTemplateName").focus(); | |
| 439 | + return; | |
| 440 | + }; | |
| 441 | + | |
| 442 | + if(selectTemplateSecondCatagory == null || selectTemplateSecondCatagory == ""){ | |
| 443 | + alert("템플릿 카테고리를 선택해 주세요"); | |
| 444 | + return; | |
| 445 | + }; | |
| 446 | + | |
| 447 | + if(inputTemplateContent == null || inputTemplateContent == ""){ | |
| 448 | + alert("템플릿 내용을 입력해 주세요."); | |
| 449 | + return; | |
| 450 | + }; | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + // 메시지 유형 선택여부에 따른 필수값 체크 | |
| 455 | + if(selectTemplateType == "EX"){ | |
| 456 | + if(inputTemplateExtra == null || inputTemplateExtra == ""){ | |
| 457 | + alert("템플릿 내용을 입력해 주세요"); | |
| 458 | + $("#inputTemplateExtra").focus(); | |
| 459 | + return; | |
| 460 | + }; | |
| 461 | + }else if(selectTemplateType == "AD"){ | |
| 462 | + if(inputTemplateAd == null || inputTemplateAd == ""){ | |
| 463 | + alert("광고성 메시지 내용을 입력해 주세요"); | |
| 464 | + $("#inputTemplateAd").focus(); | |
| 465 | + return; | |
| 466 | + }; | |
| 467 | + } | |
| 468 | + | |
| 469 | + // 템플릿 강조유형에 따른 필수값 체크 | |
| 470 | + if(selectTemplateEmphasizeType == "TEXT"){ | |
| 471 | + if(inputTemplateTitle == null || inputTemplateTitle == ""){ | |
| 472 | + alert("템플릿 타이틀을 입력해 주세요"); | |
| 473 | + $("#inputTemplateTitle").focus(); | |
| 474 | + return; | |
| 475 | + }else{ | |
| 476 | + | |
| 477 | + var returnMatch = inputTemplateContent.match(inputTemplateTitle); | |
| 478 | + if(returnMatch == null){ | |
| 479 | + | |
| 480 | + alert("강조표기타이틀은 템플릿 본문에 있는 내용/변수만 입력 가능합니다."); | |
| 481 | + return false; | |
| 482 | + } | |
| 483 | + | |
| 484 | + }; | |
| 485 | + if(inputTemplateSubTitle == null || inputTemplateSubTitle == ""){ | |
| 486 | + alert("템플릿 서브타이틀을 입력해 주세요"); | |
| 487 | + $("#inputTemplateSubTitle").focus(); | |
| 488 | + return; | |
| 489 | + }else{ | |
| 490 | + | |
| 491 | + var returnMatch = inputTemplateContent.match(inputTemplateSubTitle); | |
| 492 | + | |
| 493 | + if(returnMatch == null){ | |
| 494 | + | |
| 495 | + alert("강조표기보조문구는 템플릿 본문에 있는 내용만 입력 가능합니다."); | |
| 496 | + return false; | |
| 497 | + } | |
| 498 | + | |
| 499 | + //보조문구에 변수를 입력했는지 체크 | |
| 500 | + var varValue = inputTemplateSubTitle.match(/#\{([^}]+)\}/g); | |
| 501 | + | |
| 502 | + if(varValue != null){ | |
| 503 | + | |
| 504 | + alert("강조 표기 보조 문구에 변수를 입력할 수 없습니다."); | |
| 505 | + return false; | |
| 506 | + | |
| 507 | + } | |
| 508 | + | |
| 509 | + }; | |
| 510 | + }else if(selectTemplateEmphasizeType == "IMAGE"){ | |
| 511 | + if(inputTemplateImageName == null || inputTemplateImageName == ""){ | |
| 512 | + alert("템플릿 이미지 파일명을 입력해 주세요"); | |
| 513 | + $("#inputTemplateImageName").focus(); | |
| 514 | + return; | |
| 515 | + }; | |
| 516 | + if(inputTemplateImageUrl == null || inputTemplateImageUrl == ""){ | |
| 517 | + alert("탬플릿 이미지 링크를 입력해주세요"); | |
| 518 | + $("#inputTemplateImageUrl").focus(); | |
| 519 | + return; | |
| 520 | + }; | |
| 521 | + }else if(selectTemplateEmphasizeType == "ITEM_LIST"){ | |
| 522 | + | |
| 523 | + } | |
| 524 | + | |
| 525 | + var bizForm = document.bizForm; | |
| 526 | + bizForm.senderKey.value = selectAgentCode; | |
| 527 | + bizForm.templateName.value = inputTemplateName; | |
| 528 | + bizForm.templateMessageType.value = selectTemplateType; | |
| 529 | + bizForm.templateEmphasizeType.value = selectTemplateEmphasizeType; | |
| 530 | + bizForm.templateContent.value = inputTemplateContent; | |
| 531 | + bizForm.categoryCode.value = selectTemplateSecondCatagory; | |
| 532 | + | |
| 533 | + // 메시지 유형 선택여부에 따른 필수값 체크 | |
| 534 | + if(selectTemplateType == "EX"){ | |
| 535 | + bizForm.templateExtra.value = inputTemplateExtra; | |
| 536 | + }else if(selectTemplateType == "AD"){ | |
| 537 | + bizForm.tamplateAd.value = inputTemplateAd; | |
| 538 | + } | |
| 539 | + | |
| 540 | + // 템플릿 강조유형에 따른 필수값 체크 | |
| 541 | + if(selectTemplateEmphasizeType == "TEXT"){ | |
| 542 | + bizForm.templateTitle.value = inputTemplateTitle; | |
| 543 | + bizForm.templateSubtitle.value = inputTemplateSubTitle; | |
| 544 | + }else if(selectTemplateEmphasizeType == "IMAGE"){ | |
| 545 | + bizForm.templateImageName.value = inputTemplateImageName; | |
| 546 | + bizForm.templateImageUrl.value = inputTemplateImageUrl; | |
| 547 | + }else if(selectTemplateEmphasizeType == "ITEM_LIST"){ | |
| 548 | + | |
| 549 | + } | |
| 550 | + | |
| 551 | + | |
| 552 | + var data = new FormData(bizForm); | |
| 553 | + | |
| 554 | + if(confirm("템플릿을 수정하시겠습니까?")){ | |
| 555 | + | |
| 556 | + $.ajax({ | |
| 557 | + type: "POST" | |
| 558 | + , url: "/web/mjon/kakao/template/updateKakaoApiTemplateAjax.do" | |
| 559 | + , data: data | |
| 560 | + , dataType: 'json' | |
| 561 | + , async: false | |
| 562 | + , processData: false | |
| 563 | + , contentType: false | |
| 564 | + , cache: false | |
| 565 | + , success: function (returnData, status) { | |
| 566 | + | |
| 567 | + var result = returnData.result; | |
| 568 | + var code = returnData.code; | |
| 569 | + var msg = returnData.msg; | |
| 570 | + | |
| 571 | + if(result == "notLogin") {//차단 발신번호인 경우 등록 불가 | |
| 572 | + alert("로그인후 진행이 가능합니다."); | |
| 573 | + }else if(returnData.result == "success") { | |
| 574 | + if(code == "200"){ | |
| 575 | + alert("템플릿 수정이 완료되었습니다."); | |
| 576 | + location.href="/web/mjon/kakao/template/selectKaKaoTemplateList.do"; | |
| 577 | + }else{ | |
| 578 | + alert(msg); | |
| 579 | + return false; | |
| 580 | + } | |
| 581 | + }else{ | |
| 582 | + | |
| 583 | + if(msg != 'msg'){ | |
| 584 | + alert(msg); | |
| 585 | + return false; | |
| 586 | + }else{ | |
| 587 | + | |
| 588 | + alert("알림톡 템플릿 수정에 오류가 발생하였습니다."); | |
| 589 | + return false; | |
| 590 | + | |
| 591 | + } | |
| 592 | + | |
| 593 | + console.log(); | |
| 594 | + return false; | |
| 595 | + | |
| 596 | + } | |
| 597 | + } | |
| 598 | + ,error: function (e) { | |
| 599 | + console.log("ERROR : ", e); | |
| 600 | + alert("알림톡 템플릿 수정에 오류가 발생하였습니다."); | |
| 601 | + } | |
| 602 | + }); | |
| 603 | + | |
| 604 | + } | |
| 605 | + | |
| 606 | +} | |
| 607 | + | |
| 608 | + | |
| 609 | +//알림톡 내용 초기화 해주기 | |
| 610 | +function fnContentsReset(){ | |
| 611 | + | |
| 612 | + $("#inputTemplateContent").val(""); | |
| 613 | + $('.nowChar').text("0 /"); | |
| 614 | + | |
| 615 | +} | |
| 616 | + | |
| 617 | +//우측 미리보기 화면 채널 아이디 정보 변경해 주기 | |
| 618 | +function fnAgentCodeChg(){ | |
| 619 | + | |
| 620 | + var yellowId = $("#selectAgentCode option:checked").text(); | |
| 621 | + if(yellowId != ''){ | |
| 622 | + | |
| 623 | + $('#spnYellowid').text(yellowId); | |
| 624 | + } | |
| 625 | + | |
| 626 | +} | |
| 627 | + | |
| 628 | +$(document).on('click', '.symbolButton, .changeWord', function (){ | |
| 629 | + var templateContents = $('#inputTemplateContent').val(); | |
| 630 | + $('#inputTemplateContent').val(templateContents + $(this).attr("value")); | |
| 631 | + | |
| 632 | + setContentsLeng($('#inputTemplateContent').val()); | |
| 633 | +}); | |
| 634 | + | |
| 635 | +</script> | |
| 636 | +</head> | |
| 637 | +<body> | |
| 638 | + | |
| 639 | + | |
| 640 | +<form id="templateForm" name="templateForm" method="post"> | |
| 641 | + | |
| 642 | + <input type="hidden" id="inputSenderKey" name="senderKey" value=""/> | |
| 643 | + <input type="hidden" id="inputTemplateCode" name="templateCode" value=""/> | |
| 644 | + | |
| 645 | +</form> | |
| 646 | + | |
| 647 | +<div id="container" class="adminCont sub"> | |
| 648 | +<!-- content 영역 --> | |
| 649 | +<div class="inner"> | |
| 650 | + <!-- send top --> | |
| 651 | + <div class="send_top"> | |
| 652 | + <!-- tab button --> | |
| 653 | + <%-- <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> --%> | |
| 654 | + <!--// tab button --> | |
| 655 | + <!-- 카카오톡 설정 - 알림톡 템플릿 등록/관리 - 내템플릿 --> | |
| 656 | + <div class="top_content kakaotalkset_cont current pay_tab_wrap"> | |
| 657 | + <div class="heading"> | |
| 658 | + <h2>카카오 친구톡 템플릿 상세보기</h2> | |
| 659 | + <!-- <button type="button" class="button info" | |
| 660 | + onclick="window.open('popup_kakaoset_template.html','_blank','width=790, height=300, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')">사용안내</button> --> | |
| 661 | + </div> | |
| 662 | + <div class="list_tab_wrap2 type2 "> | |
| 663 | + <!-- tab button --> | |
| 664 | + <%-- <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkSubMenuTap.jsp" %> --%> | |
| 665 | + <!--// tab button --> | |
| 666 | + </div> | |
| 667 | + | |
| 668 | + <form id="bizForm" name="bizForm" method="post"> | |
| 669 | + <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf"> | |
| 670 | + <input type="hidden" id="menuSubTab" name="menuSubTab" value="tabTemplate"> | |
| 671 | + <input type="hidden" id="templateCode" name="templateCode" value="<c:out value='${kakaoReturnVO.templateCode}'/>"> | |
| 672 | + <input type="hidden" id="senderKey" name="senderKey" value="<c:out value='${senderKey}'/>"> | |
| 673 | + <input type="hidden" id="templateName" name="templateName" value=""> | |
| 674 | + <input type="hidden" id="templateMessageType" name="templateMessageType" value=""> | |
| 675 | + <input type="hidden" id="templateEmphasizeType" name="templateEmphasizeType" value=""> | |
| 676 | + <input type="hidden" id="templateContent" name="templateContent" value=""> | |
| 677 | + <input type="hidden" id="categoryCode" name="categoryCode" value=""> | |
| 678 | + | |
| 679 | + <input type="hidden" id="templateExtra" name="templateExtra" value=""> | |
| 680 | + <input type="hidden" id="tamplateAd" name="tamplateAd" value=""> | |
| 681 | + | |
| 682 | + <input type="hidden" id="templateTitle" name="templateTitle" value=""> | |
| 683 | + <input type="hidden" id="templateSubtitle" name="templateSubtitle" value=""> | |
| 684 | + <input type="hidden" id="templateImageName" name="templateImageName" value="<c:out value='${kakaoReturnVO.templateImageName}'/>"> | |
| 685 | + <input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${kakaoReturnVO.templateImageUrl}'/>"> | |
| 686 | + | |
| 687 | + | |
| 688 | + <div class="send_general friend_talk_wrap kakao_wrap"> | |
| 689 | + <div class="send_left"> | |
| 690 | + <!-- <p class="tType1_title">알림톡 템플릿 수정</p> --> | |
| 691 | + <table class="tType1"> | |
| 692 | + <colgroup> | |
| 693 | + <col style="width: 190px;"> | |
| 694 | + <col style="width: auto;"> | |
| 695 | + </colgroup> | |
| 696 | + <tbody> | |
| 697 | + <tr> | |
| 698 | + <th>채널ID</th> | |
| 699 | + <td> | |
| 700 | + <select class="select_gray_type" name="selectAgentCode" id="selectAgentCode" onchange="javascript:fnAgentCodeChg();"> | |
| 701 | + <option value="">채널ID 선택</option> | |
| 702 | + <c:forEach var="kakaoProfileInfo" items="${kakaoProfileList}" varStatus="status"> | |
| 703 | + <option value="${kakaoProfileInfo.senderKey}" <c:if test="${senderKey eq kakaoProfileInfo.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option> | |
| 704 | + </c:forEach> | |
| 705 | + </select> | |
| 706 | + </td> | |
| 707 | + </tr> | |
| 708 | + <tr> | |
| 709 | + <th>템플릿명</th> | |
| 710 | + <td> | |
| 711 | + <input type="text" class="template_name" id="inputTemplateName" name="inputTemplateName" value="<c:out value='${resultTemplateVO.templateName}'/>" placeholder="템플릿 명을 입력해주세요" maxlength="100"> | |
| 712 | + <p class="template_name_cf">최대 50자, 템플릿 관리용</p> | |
| 713 | + </td> | |
| 714 | + </tr> | |
| 715 | + <tr> | |
| 716 | + <th>이미지 첨부</th> | |
| 717 | + <td class="img_file_add_td"> | |
| 718 | + <div class="img_sort_wrap"> | |
| 719 | + <input type="radio" name="img_file_add" id="img_file_0" value="" <c:if test="${resultTemplateVO.imageType eq ''}">checked</c:if> ><label for="img_file_0">첨부 안함</label> | |
| 720 | + <input type="radio" name="img_file_add" id="img_file_1" value="I" <c:if test="${resultTemplateVO.imageType eq 'I'}">checked</c:if> ><label for="img_file_1">이미지 첨부</label> | |
| 721 | + <input type="radio" name="img_file_add" id="img_file_2" value="W" <c:if test="${resultTemplateVO.imageType eq 'W'}">checked</c:if>><label for="img_file_2">와이드 이미지 첨부</label> | |
| 722 | + <div class="img_add_info_wrap basic_img_add_wrap"> | |
| 723 | + <p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p> | |
| 724 | + <ul class="info_text"> | |
| 725 | + <li>- 권장사이즈 : 720px * 720px</li> | |
| 726 | + <li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li> | |
| 727 | + <li>- 파일형식 : jpg, png (최대 500kb)</li> | |
| 728 | + <li>- 이미지 첨부시 메시지 내용은 최대 400자까지 입력할 수 있습니다.</li> | |
| 729 | + </ul> | |
| 730 | + </div> | |
| 731 | + <div class="img_add_info_wrap wide_img_add_wrap"> | |
| 732 | + <p class="info_title_text"><span class="c_e40000">*</span> 와이드 이미지 첨부 안내</p> | |
| 733 | + <ul class="info_text"> | |
| 734 | + <li>- 권장사이즈 : 800px * 600px</li> | |
| 735 | + <!-- <li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li> --> | |
| 736 | + <li>- 파일형식 : jpg, png (최대 2mb)</li> | |
| 737 | + <li>- 와이드 이미지 첨부시 메시지 내용은 최대 76자, 버튼 1개까지 입력할 수 있습니다.</li> | |
| 738 | + </ul> | |
| 739 | + </div> | |
| 740 | + </div> | |
| 741 | + <div class="img_file_add_wrap"> | |
| 742 | + <ul class="img_file_info_wrap"> | |
| 743 | + <li> | |
| 744 | + <p>이미지 제목</p> | |
| 745 | + <input type="text" id="imgTitle" name="imgTitle" value="<c:out value='${resultTemplateVO.imgTitle}'/>" class="img_url" maxLength="50"> | |
| 746 | + </li> | |
| 747 | + <li> | |
| 748 | + <p>이미지 클릭시 이동할 URL</p> | |
| 749 | + <input type="text" id="imgLink" name="imgLink" value="<c:out value='${resultTemplateVO.imgLink}'/>" placeholder="http://" class="img_url" maxLength="1000"> | |
| 750 | + </li> | |
| 751 | + <li> | |
| 752 | + <p class="file_name" id="imgNm" name="imgNm">첨부파일 이미지</p> | |
| 753 | + <input type="file" id="imgFile" accept=".jpg, .jpeg, .png" onchange="imgResizeInfo(event); return false;" style="display:none"/> | |
| 754 | + <!-- <button type="button" class="btn_del btnImgDel" onclick="buttonTypeDel(this);"> | |
| 755 | + <img src="/publish/images/btn_delete.png" id="imgDel" alt="이미지 삭제" onclick="fnImageDel();"> | |
| 756 | + </button> --> | |
| 757 | + </li> | |
| 758 | + </ul> | |
| 759 | + <!-- <button type="button" class="btnType btnType8 btn_img_upload" title="이미지 불러오기" onclick="javascript:upImgClick(); return false;">이미지 불러오기</button> --> | |
| 760 | + </div> | |
| 761 | + </td> | |
| 762 | + </tr> | |
| 763 | + <tr> | |
| 764 | + <th>광고포함 여부</th> | |
| 765 | + <td> | |
| 766 | + <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label> | |
| 767 | + <%-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N" <c:if test="${resultTemplateVO.adFlag eq 'N'}">checked</c:if> ><label for="ad_N">포함 안함</label> --%> | |
| 768 | + </td> | |
| 769 | + </tr> | |
| 770 | + <tr> | |
| 771 | + <th>내용</th> | |
| 772 | + <td class="kakao_template_text"> | |
| 773 | + <div class="put_left short"> | |
| 774 | + <!-- <input type="text" class="template_name"> --> | |
| 775 | + <div class="put_text_wrap"> | |
| 776 | + <div class="ad_txt"> | |
| 777 | + <p><span id="adFlagFront">(광고)</span> <span id="yellowIdCon" >채널ID</span></p> | |
| 778 | + </div> | |
| 779 | + <label for="inputTemplateContent" class="label"></label> | |
| 780 | + <textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."><c:out value="${resultTemplateVO.templateContent}"/></textarea> | |
| 781 | + <div class="text_length"> | |
| 782 | + <div> | |
| 783 | + <p class="adFlagAfter">수신거부 : 홈 > 채널차단</p> | |
| 784 | + </div> | |
| 785 | + <div> | |
| 786 | + <p><span class="fwMd nowChar">0 /</span><span class="c_002c9a fwMd totChar">1000</span>자</p> | |
| 787 | + </div> | |
| 788 | + </div> | |
| 789 | + </div> | |
| 790 | + </div> | |
| 791 | + <div class="put_right"> | |
| 792 | + <div class="btn_popup_wrap"> | |
| 793 | + <button type="button" class="btnType btnType7" | |
| 794 | + onclick="miniPopup(this)">특수문자</button> | |
| 795 | + <div class="send_miniPop spc_character"> | |
| 796 | + <div class="tab_character"> | |
| 797 | + <a href="#none" class="on">특수문자</a> | |
| 798 | + <a href="#none">웃음</a> | |
| 799 | + <a href="#none">슬픔</a> | |
| 800 | + <a href="#none">분노</a> | |
| 801 | + <a href="#none">사랑</a> | |
| 802 | + <a href="#none">그외</a> | |
| 803 | + </div> | |
| 804 | + <!-- 특수문자 --> | |
| 805 | + <div class="cnt_character on"> | |
| 806 | + <div class="box_character"> | |
| 807 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 808 | + <c:if test="${symbolList.symbolType == 'D'}"> | |
| 809 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}"><c:out value="${symbolList.symbol}"/></a> | |
| 810 | + </c:if> | |
| 811 | + </c:forEach> | |
| 812 | + </div> | |
| 813 | + </div> | |
| 814 | + <!-- //특수문자 --> | |
| 815 | + | |
| 816 | + <!-- 웃음 --> | |
| 817 | + <div class="cnt_character emt_character"> | |
| 818 | + <div class="box_character"> | |
| 819 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 820 | + <c:if test="${symbolList.symbolType == 'S'}"> | |
| 821 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 822 | + </c:if> | |
| 823 | + </c:forEach> | |
| 824 | + </div> | |
| 825 | + </div> | |
| 826 | + <!-- //웃음 --> | |
| 827 | + | |
| 828 | + <!-- 슬픔 --> | |
| 829 | + <div class="cnt_character emt_character"> | |
| 830 | + <div class="box_character"> | |
| 831 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 832 | + <c:if test="${symbolList.symbolType == 'C'}"> | |
| 833 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 834 | + </c:if> | |
| 835 | + </c:forEach> | |
| 836 | + </div> | |
| 837 | + </div> | |
| 838 | + <!-- //슬픔 --> | |
| 839 | + | |
| 840 | + <!-- 분노 --> | |
| 841 | + <div class="cnt_character emt_character"> | |
| 842 | + <div class="box_character"> | |
| 843 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 844 | + <c:if test="${symbolList.symbolType == 'A'}"> | |
| 845 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 846 | + </c:if> | |
| 847 | + </c:forEach> | |
| 848 | + </div> | |
| 849 | + </div> | |
| 850 | + <!-- //분노 --> | |
| 851 | + | |
| 852 | + <!-- 사랑 --> | |
| 853 | + <div class="cnt_character emt_character"> | |
| 854 | + <div class="box_character"> | |
| 855 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 856 | + <c:if test="${symbolList.symbolType == 'L'}"> | |
| 857 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 858 | + </c:if> | |
| 859 | + </c:forEach> | |
| 860 | + </div> | |
| 861 | + </div> | |
| 862 | + <!-- //사랑 --> | |
| 863 | + | |
| 864 | + <!-- 그외 --> | |
| 865 | + <div class="cnt_character emt_character emt_etc "> | |
| 866 | + <div class="box_character"> | |
| 867 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 868 | + <c:if test="${symbolList.symbolType == 'E'}"> | |
| 869 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 870 | + </c:if> | |
| 871 | + </c:forEach> | |
| 872 | + </div> | |
| 873 | + </div> | |
| 874 | + <!-- //그외 --> | |
| 875 | + <button type="button" class="btn_close" | |
| 876 | + onclick="miniPopup(this)">닫기</button> | |
| 877 | + </div> | |
| 878 | + </div> | |
| 879 | + <div class="btn_popup_wrap convers_wrap"> | |
| 880 | + <button type="button" class="btnType btnType7" | |
| 881 | + onclick="miniPopup(this)">특정문구 일괄변환<i | |
| 882 | + class="qmMark"></i></button> | |
| 883 | + <div class="send_miniPop convers"> | |
| 884 | + <div> | |
| 885 | + <div class="convers_top"> | |
| 886 | + <span>특정문구 일괄변환이란?</span> | |
| 887 | + <p>주소록, 엑셀에 입력된 내용을 이용해 수신자마다 다른 내용의 메시지를 발송하는 기능</p> | |
| 888 | + </div> | |
| 889 | + <div class="convers_middle"> | |
| 890 | + <a href="javascript:void(0)" class="changeWord" value="\#{이름}"><c:out value="\#{이름}"/></a> | |
| 891 | + </div> | |
| 892 | + <div class="convers_bottom"> | |
| 893 | + <a href="javascript:void(0)" class="changeWord" value="\#{1}"><c:out value="\#{1}"/></a> | |
| 894 | + <a href="javascript:void(0)" class="changeWord" value="\#{2}"><c:out value="\#{2}"/></a> | |
| 895 | + <a href="javascript:void(0)" class="changeWord" value="\#{3}"><c:out value="\#{3}"/></a> | |
| 896 | + <a href="javascript:void(0)" class="changeWord" value="\#{4}"><c:out value="\#{4}"/></a> | |
| 897 | + </div> | |
| 898 | + </div> | |
| 899 | + <button type="button" class="btn_close" | |
| 900 | + onclick="miniPopup(this)">닫기</button> | |
| 901 | + </div> | |
| 902 | + </div> | |
| 903 | + <div class="btn_popup_wrap spc_wrap"> | |
| 904 | + <button type="button" class="btnType btnType7" | |
| 905 | + onclick="miniPopup(this)">이모티콘</button> | |
| 906 | + <div class="send_miniPop spc_character kakao_emoticon"> | |
| 907 | + <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %> | |
| 908 | + <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> | |
| 909 | + </div> | |
| 910 | + </div> | |
| 911 | + <div class="btn_popup_wrap template_call_wrap"> | |
| 912 | + <!-- <button type="button" class="btnType btnType8">템플릿 불러오기</button> --> | |
| 913 | + </div> | |
| 914 | + <div class="send_btnWrap"> | |
| 915 | + <!-- <button type="button" class="btnType btn_text_save">내용 저장하기</button> --> | |
| 916 | + <!-- <button type="button" class="btnType btnType9" onclick="javascript:fnContentsReset();">초기화</button> --> | |
| 917 | + </div> | |
| 918 | + </div> | |
| 919 | + </td> | |
| 920 | + </tr> | |
| 921 | + <tr> | |
| 922 | + <th>버튼</th> | |
| 923 | + <td class="template_button"> | |
| 924 | + <%-- <select name="" id="" class="select_gray_type template_button_select"> | |
| 925 | + <option value="button_type_0">버튼타입 선택</option> | |
| 926 | + <option value="button_type_1">배송조회</option> | |
| 927 | + <option value="button_type_2">웹링크</option> | |
| 928 | + <option value="button_type_3">앱링크</option> | |
| 929 | + <option value="button_type_5">메시지전달</option> | |
| 930 | + <option value="button_type_4">봇키워드</option> | |
| 931 | + <option value="button_type_6">상담톡전환</option> | |
| 932 | + <option value="button_type_7">챗봇전환</option> | |
| 933 | + </select> | |
| 934 | + <button type="button" class="btnType btnType6" onclick="friendTemplateButtonAdd();">추가</button> --%> | |
| 935 | + <div class="button_add_wrap"> | |
| 936 | + <c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status"> | |
| 937 | + <c:if test="${buttonList.linkType eq 'DS'}"> | |
| 938 | + <!-- 배송조회 버튼 --> | |
| 939 | + <dl class="button_type_wrap type1"> | |
| 940 | + <dt>배송조회</dt> | |
| 941 | + <dd class="button_type_input"> | |
| 942 | + <input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/> | |
| 943 | + <input type="text" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 944 | + <p class="cf_text">*이용가능 택배사 : KG로지스, 우체국택배,일양로지스, GTX로지스, FedEx, 경동택배, 합동택배, 롯데택배</p> | |
| 945 | + </dd> | |
| 946 | + <dd> | |
| 947 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> | |
| 948 | + </dd> | |
| 949 | + </dl> | |
| 950 | + </c:if> | |
| 951 | + | |
| 952 | + <c:if test="${buttonList.linkType eq 'WL'}"> | |
| 953 | + <!-- 웹링크 버튼 --> | |
| 954 | + <dl class="button_type_wrap type2"> | |
| 955 | + <dt>웹링크</dt> | |
| 956 | + <dd class="button_type_input"> | |
| 957 | + <ul> | |
| 958 | + <li> | |
| 959 | + <input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/> | |
| 960 | + <input type="text" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 961 | + </li> | |
| 962 | + <li> | |
| 963 | + <input type="text" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>" placeholder="모바일 링크 입력"> | |
| 964 | + </li> | |
| 965 | + <li> | |
| 966 | + <input type="text" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>" placeholder="PC 링크 입력"> | |
| 967 | + </li> | |
| 968 | + </ul> | |
| 969 | + </dd> | |
| 970 | + <dd> | |
| 971 | + <!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> --> | |
| 972 | + </dd> | |
| 973 | + </dl> | |
| 974 | + </c:if> | |
| 975 | + | |
| 976 | + <c:if test="${buttonList.linkType eq 'AL'}"> | |
| 977 | + <!-- 앱링크 버튼 --> | |
| 978 | + <dl class="button_type_wrap type3"> | |
| 979 | + <dt>앱링크</dt> | |
| 980 | + <dd class="button_type_input"> | |
| 981 | + <ul> | |
| 982 | + <li> | |
| 983 | + <input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/> | |
| 984 | + <input type="text" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 985 | + </li> | |
| 986 | + <li> | |
| 987 | + <input type="text" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>" placeholder="Android 링크 입력"> | |
| 988 | + </li> | |
| 989 | + <li> | |
| 990 | + <input type="text" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>" placeholder="IOS 링크 입력"> | |
| 991 | + </li> | |
| 992 | + </ul> | |
| 993 | + </dd> | |
| 994 | + <dd> | |
| 995 | + <!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> --> | |
| 996 | + </dd> | |
| 997 | + </dl> | |
| 998 | + </c:if> | |
| 999 | + | |
| 1000 | + <c:if test="${buttonList.linkType eq 'BK'}"> | |
| 1001 | + <!-- 봇키워드 --> | |
| 1002 | + <dl class="button_type_wrap type4"> | |
| 1003 | + <dt>봇키워드</dt> | |
| 1004 | + <dd class="button_type_input"> | |
| 1005 | + <input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/> | |
| 1006 | + <input type="text" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 1007 | + </dd> | |
| 1008 | + <dd> | |
| 1009 | + <!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 1010 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 1011 | + </button> --> | |
| 1012 | + </dd> | |
| 1013 | + </dl> | |
| 1014 | + </c:if> | |
| 1015 | + | |
| 1016 | + <c:if test="${buttonList.linkType eq 'MD'}"> | |
| 1017 | + <!-- 메시지 전달 --> | |
| 1018 | + <dl class="button_type_wrap type5"> | |
| 1019 | + <dt>메시지전달</dt> | |
| 1020 | + <dd class="button_type_input"> | |
| 1021 | + <input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" /> | |
| 1022 | + <input type="text" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 1023 | + </dd> | |
| 1024 | + <dd> | |
| 1025 | + <!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 1026 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 1027 | + </button> --> | |
| 1028 | + </dd> | |
| 1029 | + </dl> | |
| 1030 | + </c:if> | |
| 1031 | + | |
| 1032 | + <c:if test="${buttonList.linkType eq 'BC'}"> | |
| 1033 | + <!-- 상담톡 전환 --> | |
| 1034 | + <dl class="button_type_wrap type6"> | |
| 1035 | + <dt>상담톡전환</dt> | |
| 1036 | + <dd class="button_type_input"> | |
| 1037 | + <input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" /> | |
| 1038 | + <input type="text" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 1039 | + </dd> | |
| 1040 | + <dd> | |
| 1041 | + <!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 1042 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 1043 | + </button> --> | |
| 1044 | + </dd> | |
| 1045 | + </dl> | |
| 1046 | + </c:if> | |
| 1047 | + | |
| 1048 | + <c:if test="${buttonList.linkType eq 'BT'}"> | |
| 1049 | + <!-- 챗봇전환 --> | |
| 1050 | + <dl class="button_type_wrap type7"> | |
| 1051 | + <dt>챗봇전환</dt> | |
| 1052 | + <dd class="button_type_input"> | |
| 1053 | + <input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" /> | |
| 1054 | + <input type="text" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="" placeholder="버튼명 입력(최대 14자)"> | |
| 1055 | + </dd> | |
| 1056 | + <dd> | |
| 1057 | + <!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 1058 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 1059 | + </button> --> | |
| 1060 | + </dd> | |
| 1061 | + </dl> | |
| 1062 | + </c:if> | |
| 1063 | + </c:forEach> | |
| 1064 | + </div> | |
| 1065 | + </td> | |
| 1066 | + </tr> | |
| 1067 | + </tbody> | |
| 1068 | + </table> | |
| 1069 | + </div> | |
| 1070 | + <div class="send_right"> | |
| 1071 | + <div class="phone"> | |
| 1072 | + <div class="phoneIn"> | |
| 1073 | + <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""> | |
| 1074 | + <span id="spnYellowid">@채널ID</span> | |
| 1075 | + </p> | |
| 1076 | + <!-- 텍스트 미리보기 --> | |
| 1077 | + <div class="text_preview"> | |
| 1078 | + <p class="friend_talk_title"><span class="adFlag">(광고)</span> <span id="spnYellowidAt">채널ID</span></p> | |
| 1079 | + <div class="allimtalk_content"> | |
| 1080 | + <div class="kakao_image" style="display:none;"> | |
| 1081 | + <img src="" id="kakaoImg" alt=""> | |
| 1082 | + </div> | |
| 1083 | + <p class="template_text">내용 미리보기</p> | |
| 1084 | + <div class="btnViewArea"> | |
| 1085 | + <c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status"> | |
| 1086 | + <button type="button" class="btn_kakao_type" style="display:block;"><c:out value="${buttonList.name}"/></button> | |
| 1087 | + </c:forEach> | |
| 1088 | + </div> | |
| 1089 | + </div> | |
| 1090 | + <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p> | |
| 1091 | + | |
| 1092 | + </div> | |
| 1093 | + <!-- //텍스트 미리보기 --> | |
| 1094 | + </div> | |
| 1095 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p> | |
| 1096 | + <div class="phone_bottom"> | |
| 1097 | + <div class="send_btn"> | |
| 1098 | + <button type="button" class="btnType btnType11" onclick="self.close();">닫기</button> | |
| 1099 | + <!-- <button type="button" class="btnType btnType10"onclick="location.href='/web/mjon/kakao/template/selectKakaoFriendsTemplateList.do';">취소</button> --> | |
| 1100 | + </div> | |
| 1101 | + </div> | |
| 1102 | + </div> | |
| 1103 | + </div> | |
| 1104 | + </div> | |
| 1105 | + </form> | |
| 1106 | + </div> | |
| 1107 | + </div> | |
| 1108 | +</div> | |
| 1109 | +<!--// send top --> | |
| 1110 | +</div> | |
| 1111 | +</body> | |
| 1112 | +</html>(No newline at end of file) |
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateListPop.jsp
... | ... | @@ -0,0 +1,190 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> | |
| 5 | +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> | |
| 6 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 7 | +<% pageContext.setAttribute("newLineChar", "\r\n"); %> | |
| 8 | +<% pageContext.setAttribute("newLineChar2", "\n"); %> | |
| 9 | + | |
| 10 | +<!DOCTYPE html> | |
| 11 | +<html lang="ko"> | |
| 12 | +<head> | |
| 13 | +<title>친구톡 템플릿 목록</title> | |
| 14 | +<meta http-equiv="content-type" content="text/html; charset=utf-8"> | |
| 15 | + <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" | |
| 16 | + rel="stylesheet"> | |
| 17 | + <link rel="stylesheet" href="/publish/css/reset.css"> | |
| 18 | + <link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css"> | |
| 19 | + <link rel="stylesheet" href="/publish/css/common.css"> | |
| 20 | + <link rel="stylesheet" href="/publish/css/button.css"> | |
| 21 | + <link rel="stylesheet" href="/publish/css/content.css?date=202301160001"> | |
| 22 | + <link rel="stylesheet" href="/publish/css/mem.css"> | |
| 23 | + <link rel="stylesheet" href="/publish/css/font.css"> | |
| 24 | + <link rel="stylesheet" href="/publish/css/popupLayer.css"> | |
| 25 | + | |
| 26 | + <script src="/publish/js/jquery-3.5.0.js"></script> | |
| 27 | + <script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script> | |
| 28 | + <script src="/publish/js/common.js"></script> | |
| 29 | + <script src="/publish/js/content.js?date=202211070003"></script> | |
| 30 | + <script src="/publish/js/popupLayer.js"></script> | |
| 31 | + | |
| 32 | +<script> | |
| 33 | + | |
| 34 | +function linkPage(page){ | |
| 35 | + | |
| 36 | + form = document.listForm; | |
| 37 | + | |
| 38 | + form.pageIndex.value=page; | |
| 39 | + form.action="<c:url value='/uss/ion/kakaoft/KakaoFTChannelIDTemplateListPopupAjax.do'/>"; | |
| 40 | + form.submit(); | |
| 41 | + | |
| 42 | +} | |
| 43 | + | |
| 44 | +function fnSearch(){ | |
| 45 | + | |
| 46 | + var templateStatus = $("select[name=selectTemplateStatus]").val(); | |
| 47 | + var searchKeyword = $("input[name=inputSearchKeyword]").val(); | |
| 48 | + | |
| 49 | + if(searchKeyword != ''){ | |
| 50 | + | |
| 51 | + if(searchKeyword.length < 2 || searchKeyword.length > 50){ | |
| 52 | + | |
| 53 | + alert("검색어는 최소 2자 이상 50자 이내로 입력해야 합니다."); | |
| 54 | + return false; | |
| 55 | + | |
| 56 | + } | |
| 57 | + | |
| 58 | + } | |
| 59 | + | |
| 60 | + var form = document.listForm; | |
| 61 | + | |
| 62 | + form.searchKeyword.value = searchKeyword; | |
| 63 | + form.templateStatus.value = templateStatus; | |
| 64 | + | |
| 65 | + linkPage(1); | |
| 66 | + | |
| 67 | +} | |
| 68 | + | |
| 69 | +function fnTemplateDetail(friendId){ | |
| 70 | + | |
| 71 | + var form = document.templateForm; | |
| 72 | + | |
| 73 | + form.templateCode.value = friendId; | |
| 74 | + | |
| 75 | + 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'); | |
| 76 | + form.action = "<c:url value='/uss/ion/kakaoft/KakaoFTChannelIDTemplateDetailPopupAjax.do'/>"; | |
| 77 | + form.target = "popupTemplateDetail"; | |
| 78 | + form.submit(); | |
| 79 | + | |
| 80 | +} | |
| 81 | + | |
| 82 | +</script> | |
| 83 | + | |
| 84 | +</head> | |
| 85 | +<body> | |
| 86 | +<div class="loading_layer"> | |
| 87 | + <div class="loading_container"> | |
| 88 | + <div class="bar"></div> | |
| 89 | + <div class="text">Loading</div> | |
| 90 | + </div> | |
| 91 | +</div> | |
| 92 | +<div class="top_content kakaotalkset_cont current pay_tab_wrap"> | |
| 93 | + <form id="templateForm" name="templateForm" method="post"> | |
| 94 | + <input type="hidden" name="SenderKey" value="<c:out value="${kakaoVO.senderKey }"/>"> | |
| 95 | + <input type="hidden" id="templateCode" name="templateCode" value=""> | |
| 96 | + <input type="hidden" id="tmpUserId" name="userId" value="<c:out value="${kakaoVO.userId}"/>"> | |
| 97 | + </form> | |
| 98 | + <form id="listForm" name="listForm" method="post"> | |
| 99 | + <input type="hidden" name="SenderKey" value="<c:out value="${kakaoVO.senderKey }"/>"> | |
| 100 | + <input type="hidden" name="yellowId" value="<c:out value="${kakaoVO.yellowId }"/>"> | |
| 101 | + <input type="hidden" id="page" name="page" value=""> | |
| 102 | + <input type="hidden" id="pageIndex" name="pageIndex" value=""> | |
| 103 | + <input type="hidden" id="searchKeyword" name="searchKeyword" value=""> | |
| 104 | + <input type="hidden" id="templateStatus" name="templateStatus" value=""> | |
| 105 | + <input type="hidden" id="templateCode" name="templateCode" value=""> | |
| 106 | + <input type="hidden" id="listUserId" name="userId" value="<c:out value="${kakaoVO.userId}"/>"> | |
| 107 | + </form> | |
| 108 | + <div class="info_popup ad_layer template_choice_popup adpopup01" style="width:930px; margin-left:45px;"> | |
| 109 | + <div class="top_content kakaotalkset_cont current pay_tab_wrap" style="width:930px;"> | |
| 110 | + <div class="popup_heading"> | |
| 111 | + <p>친구톡 템플릿 선택</p> | |
| 112 | + </div> | |
| 113 | + <div class="layer_in"> | |
| 114 | + <div class="popup_search_wrap type2 grayborder grayfill"> | |
| 115 | + <input type="text" name="inputSearchKeyword" id="inputSearchKeyword" placeholder="템플릿명을 입력해주세요." class="inputType template_name" value="<c:out value='${kakaoVO.keyword}'/>"> | |
| 116 | + <button type="button" class="popup_button_type bluefill" onclick="fnSearch(); return false;">검색</button> | |
| 117 | + </div> | |
| 118 | + <div class="template_list"> | |
| 119 | + <ul class="kakao_template_list thumbnail_list"> | |
| 120 | + <c:choose> | |
| 121 | + <c:when test="${not empty kakaoTemplateInfoList}"> | |
| 122 | + <c:forEach var="templatInfoList" items="${kakaoTemplateInfoList}" varStatus="status"> | |
| 123 | + <li> | |
| 124 | + <div class="kakao_template_wrap"> | |
| 125 | + <div class="template_cont"> | |
| 126 | + <div class="title"> | |
| 127 | + <div class="check"> | |
| 128 | + </div> | |
| 129 | + <p title="친구톡 템플릿 내용" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;"> | |
| 130 | + <c:if test="${templatInfoList.adFlag eq 'Y'}">(광고)</c:if> | |
| 131 | + <c:out value="${fn:replace(templatInfoList.yellowId, '@', '')}"/> | |
| 132 | + </p> | |
| 133 | + </div> | |
| 134 | + <div class="allimtalk_content" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;"> | |
| 135 | + <!-- 템플릿에 이미지가 있는경우 이미지 표시 --> | |
| 136 | + <c:if test="${not empty templatInfoList.imageType}"> | |
| 137 | + <div class="img_box"> | |
| 138 | + <img src="<c:url value='${templatInfoList.templateImageUrl}'/>" alt=""> | |
| 139 | + </div> | |
| 140 | + </c:if> | |
| 141 | + | |
| 142 | + <p class="template_text"><c:out value="${fn:replace(fn:replace(templatInfoList.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/></p> | |
| 143 | + <!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 --> | |
| 144 | + <c:forEach var="templatInfoButtonList" items="${templatInfoList.buttonVOList}" varStatus="status"> | |
| 145 | + <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button> | |
| 146 | + </c:forEach> | |
| 147 | + </div> | |
| 148 | + </div> | |
| 149 | + <c:if test="${templatInfoList.adFlag eq 'Y'}"> | |
| 150 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 151 | + </c:if> | |
| 152 | + </div> | |
| 153 | + <div class="kakao_template_info"> | |
| 154 | + <dl> | |
| 155 | + <dt>템플릿명</dt> | |
| 156 | + <dd> | |
| 157 | + <c:out value="${templatInfoList.templateName}"/> | |
| 158 | + </dd> | |
| 159 | + </dl> | |
| 160 | + <dl> | |
| 161 | + <dt>등록일</dt> | |
| 162 | + <dd><c:out value="${templatInfoList.frstRegistPnttm}"/> | |
| 163 | + <%-- <div class="btn_wrap"> | |
| 164 | + <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> | |
| 165 | + <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> | |
| 166 | + </div> --%> | |
| 167 | + </dd> | |
| 168 | + </dl> | |
| 169 | + </div> | |
| 170 | + </li> | |
| 171 | + </c:forEach> | |
| 172 | + </c:when> | |
| 173 | + <c:otherwise> | |
| 174 | + <li class="template_none">등록된 템플릿이 없습니다.</li> | |
| 175 | + </c:otherwise> | |
| 176 | + </c:choose> | |
| 177 | + </ul> | |
| 178 | + </div> | |
| 179 | + <!-- pagination --> | |
| 180 | + <c:if test="${not empty kakaoTemplateInfoList}"> | |
| 181 | + <ul class="pagination"> | |
| 182 | + <ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" /> | |
| 183 | + </ul><!-- //pageWrap --> | |
| 184 | + </c:if> | |
| 185 | + </div> | |
| 186 | + </div> | |
| 187 | + </div> | |
| 188 | + </div> | |
| 189 | +</body> | |
| 190 | +</html>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkSubMenuTap.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkSubMenuTap.jsp
... | ... | @@ -1,4 +1,6 @@ |
| 1 | 1 |
<%@ page language="java" contentType="text/html; charset=UTF-8" %> |
| 2 |
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> |
|
| 3 |
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> |
|
| 2 | 4 |
|
| 3 | 5 |
<script type="text/javascript"> |
| 4 | 6 |
|
... | ... | @@ -88,5 +90,8 @@ |
| 88 | 90 |
<li id="tabStep" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabStep');">사용안내</button></li>
|
| 89 | 91 |
<li id="tabProfile" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabProfile');">채널ID 등록/관리</button></li>
|
| 90 | 92 |
<li id="tabTemplate" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabTemplate');">알림톡 템플릿 등록/관리</button></li>
|
| 91 |
-<!-- <li id="tabSubFt" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabSubFt');">친구톡 템플릿 등록/관리</button></li> -->
|
|
| 93 |
+ <c:if test="${loginVO.id eq 'rosewiper'}">
|
|
| 94 |
+ <li id="tabSubFt" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabSubFt');">친구톡 템플릿 등록/관리</button></li>
|
|
| 95 |
+ </c:if> |
|
| 96 |
+ |
|
| 92 | 97 |
</ul>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
... | ... | @@ -1,4 +1,6 @@ |
| 1 | 1 |
<%@ page language="java" contentType="text/html; charset=UTF-8" %> |
| 2 |
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> |
|
| 3 |
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> |
|
| 2 | 4 |
|
| 3 | 5 |
<script type="text/javascript"> |
| 4 | 6 |
|
... | ... | @@ -27,6 +29,11 @@ |
| 27 | 29 |
}else if(menuTopTab == 'tabAlim'){
|
| 28 | 30 |
$(".topTab").removeClass("active");
|
| 29 | 31 |
$("#tabAt").addClass("active");
|
| 32 |
+ |
|
| 33 |
+ }else if(menuTopTab == 'tabFriend'){
|
|
| 34 |
+ $(".topTab").removeClass("active");
|
|
| 35 |
+ $("#tabFt").addClass("active");
|
|
| 36 |
+ |
|
| 30 | 37 |
}else if(menuTopTab == 'tabIntro'){
|
| 31 | 38 |
$(".topTab").removeClass("active");
|
| 32 | 39 |
$("#tabIntro").addClass("active");
|
... | ... | @@ -51,16 +58,18 @@ |
| 51 | 58 |
|
| 52 | 59 |
}else if(tabInfo == 'tabFriend'){
|
| 53 | 60 |
|
| 54 |
- alert("친구톡 메뉴는 현재 개발이 진행 중입니다.");
|
|
| 55 |
- return false |
|
| 61 |
+ url = "<c:url value='/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do'/>"; |
|
| 62 |
+ |
|
| 56 | 63 |
}else if(tabInfo == 'tabAlimtalkIntrd'){
|
| 57 | 64 |
|
| 58 | 65 |
url = "<c:url value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>"; |
| 59 | 66 |
|
| 60 | 67 |
} |
| 61 | 68 |
|
| 62 |
- form.action =url; |
|
| 63 |
- form.submit(); |
|
| 69 |
+ //form.action =url; |
|
| 70 |
+ //form.submit(); |
|
| 71 |
+ //메뉴 선택시 폼 데이터로 인한 오류 발생하여 location으로 변경 - 20240117 우영두 |
|
| 72 |
+ location.href=url; |
|
| 64 | 73 |
|
| 65 | 74 |
} |
| 66 | 75 |
|
... | ... | @@ -133,6 +142,11 @@ |
| 133 | 142 |
|
| 134 | 143 |
<ul class="tabType4"> |
| 135 | 144 |
<li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li>
|
| 145 |
+ <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost')
|
|
| 146 |
+ || fn:contains(pageContext.request.requestURL , '192.168.0.33') |
|
| 147 |
+ || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> |
|
| 148 |
+ <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
|
|
| 149 |
+ </c:if> |
|
| 136 | 150 |
<li id="tabConf" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabConf');">카카오톡 설정</button></li>
|
| 137 | 151 |
<li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlimtalkIntrd');">알림톡 소개</button></li>
|
| 138 | 152 |
</ul>(No newline at end of file) |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp
... | ... | @@ -0,0 +1,122 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" %> | |
| 2 | + | |
| 3 | +<div class="cnt_character"> | |
| 4 | + <div class="box_character"> | |
| 5 | + <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a> | |
| 6 | + <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a> | |
| 7 | + <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a> | |
| 8 | + <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a> | |
| 9 | + <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a> | |
| 10 | + <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a> | |
| 11 | + <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a> | |
| 12 | + <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a> | |
| 13 | + <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a> | |
| 14 | + <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a> | |
| 15 | + <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a> | |
| 16 | + <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a> | |
| 17 | + <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a> | |
| 18 | + <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a> | |
| 19 | + <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a> | |
| 20 | + <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a> | |
| 21 | + <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a> | |
| 22 | + <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a> | |
| 23 | + <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a> | |
| 24 | + <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a> | |
| 25 | + <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a> | |
| 26 | + <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a> | |
| 27 | + <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a> | |
| 28 | + <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a> | |
| 29 | + <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a> | |
| 30 | + <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a> | |
| 31 | + <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a> | |
| 32 | + <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a> | |
| 33 | + <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a> | |
| 34 | + <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a> | |
| 35 | + <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a> | |
| 36 | + <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a> | |
| 37 | + <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a> | |
| 38 | + <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a> | |
| 39 | + <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a> | |
| 40 | + <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a> | |
| 41 | + <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a> | |
| 42 | + <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a> | |
| 43 | + <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a> | |
| 44 | + <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a> | |
| 45 | + <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a> | |
| 46 | + <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a> | |
| 47 | + <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a> | |
| 48 | + <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a> | |
| 49 | + <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a> | |
| 50 | + <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a> | |
| 51 | + <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a> | |
| 52 | + <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a> | |
| 53 | + <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a> | |
| 54 | + <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a> | |
| 55 | + <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a> | |
| 56 | + <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a> | |
| 57 | + <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a> | |
| 58 | + <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a> | |
| 59 | + <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a> | |
| 60 | + <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a> | |
| 61 | + <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a> | |
| 62 | + <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a> | |
| 63 | + <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a> | |
| 64 | + <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a> | |
| 65 | + <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a> | |
| 66 | + <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a> | |
| 67 | + <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a> | |
| 68 | + <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a> | |
| 69 | + <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a> | |
| 70 | + <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a> | |
| 71 | + <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a> | |
| 72 | + <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a> | |
| 73 | + <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a> | |
| 74 | + <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a> | |
| 75 | + <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a> | |
| 76 | + <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a> | |
| 77 | + <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a> | |
| 78 | + <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a> | |
| 79 | + <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a> | |
| 80 | + <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a> | |
| 81 | + <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a> | |
| 82 | + <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a> | |
| 83 | + <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a> | |
| 84 | + <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a> | |
| 85 | + <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a> | |
| 86 | + <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a> | |
| 87 | + <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a> | |
| 88 | + <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a> | |
| 89 | + <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a> | |
| 90 | + <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a> | |
| 91 | + <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a> | |
| 92 | + <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a> | |
| 93 | + <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a> | |
| 94 | + <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a> | |
| 95 | + <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a> | |
| 96 | + <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a> | |
| 97 | + <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a> | |
| 98 | + <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a> | |
| 99 | + <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a> | |
| 100 | + <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a> | |
| 101 | + <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a> | |
| 102 | + <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a> | |
| 103 | + <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a> | |
| 104 | + <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a> | |
| 105 | + <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a> | |
| 106 | + <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a> | |
| 107 | + <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a> | |
| 108 | + <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a> | |
| 109 | + <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a> | |
| 110 | + <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a> | |
| 111 | + <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a> | |
| 112 | + <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a> | |
| 113 | + <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a> | |
| 114 | + <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a> | |
| 115 | + <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a> | |
| 116 | + <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a> | |
| 117 | + <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a> | |
| 118 | + <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a> | |
| 119 | + <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a> | |
| 120 | + <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a> | |
| 121 | + </div> | |
| 122 | +</div>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataTestPop.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataTestPop.jsp
... | ... | @@ -135,7 +135,7 @@ |
| 135 | 135 |
<!-- 텍스트 미리보기 --> |
| 136 | 136 |
<div class="text_preview"> |
| 137 | 137 |
<div class="allimtalk_title"> |
| 138 |
- <img src="/publish/images/content/icon_allimtalk.png" alt="">친구톡 수정 |
|
| 138 |
+ <img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착 |
|
| 139 | 139 |
</div> |
| 140 | 140 |
<div class="allimtalk_content" id="alimtalkTemplate"> |
| 141 | 141 |
<!-- <p class="emphasis_side_text">템플릿을 선택해 주세요</p> --> |
... | ... | @@ -196,10 +196,10 @@ |
| 196 | 196 |
<!-- 텍스트 미리보기 --> |
| 197 | 197 |
|
| 198 | 198 |
<!-- //텍스트 미리보기 --> |
| 199 |
- <div class="template_info_wrap"> |
|
| 199 |
+ <!-- <div class="template_info_wrap"> |
|
| 200 | 200 |
<div class="template_byte"> |
| 201 | 201 |
</div> |
| 202 |
- </div> |
|
| 202 |
+ </div> --> |
|
| 203 | 203 |
</div> |
| 204 | 204 |
<p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p> |
| 205 | 205 |
</div> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
... | ... | @@ -1188,11 +1188,11 @@ |
| 1188 | 1188 |
<!-- 문자발송 성공 레이어팝업 --> |
| 1189 | 1189 |
<div class="popup-com pop_msg_success"> |
| 1190 | 1190 |
<div class="popup_heading"> |
| 1191 |
- <p>알람톡 전송 결과</p> |
|
| 1191 |
+ <p>알림톡 전송 결과</p> |
|
| 1192 | 1192 |
<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
| 1193 | 1193 |
</div> |
| 1194 | 1194 |
<div class="layer_in"> |
| 1195 |
- <div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div> |
|
| 1195 |
+ <div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>알림톡이 발송 되었습니다.</div> |
|
| 1196 | 1196 |
</div> |
| 1197 | 1197 |
<div class="popup_btn"> |
| 1198 | 1198 |
<button type="button" onclick="msgResultLink(); return false;">알림톡 발송결과 바로가기</button> |
... | ... | @@ -1249,7 +1249,7 @@ |
| 1249 | 1249 |
<tr> |
| 1250 | 1250 |
<th>채널ID</th> |
| 1251 | 1251 |
<td> |
| 1252 |
- <label for="" class="채널ID 선택"></label> |
|
| 1252 |
+ <label for="selectKakaoProfileList" class="채널ID 선택"></label> |
|
| 1253 | 1253 |
<select class="select_gray_type" id="selectKakaoProfileList" name="selectKakaoProfileList"> |
| 1254 | 1254 |
<option value="">채널ID 선택</option> |
| 1255 | 1255 |
<c:forEach var="kakaoProfileInfo" items="${kakaoProfileList}" varStatus="status">
|
... | ... | @@ -1285,7 +1285,7 @@ |
| 1285 | 1285 |
<td class="putText"> |
| 1286 | 1286 |
<div class="clearfix receipt_num receiver_wrap01"> |
| 1287 | 1287 |
<div class="receipt_num_top"> |
| 1288 |
- <label for="" class="label">받는 번호입력</label> |
|
| 1288 |
+ <label for="callTo" class="label">받는 번호입력</label> |
|
| 1289 | 1289 |
<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;"> |
| 1290 | 1290 |
<button type="button" class="btnType btnType6 addCallToF">번호추가</button> |
| 1291 | 1291 |
</br> |
... | ... | @@ -1301,7 +1301,7 @@ |
| 1301 | 1301 |
<div class="listType list01" > |
| 1302 | 1302 |
<div class="list_table list_head"> |
| 1303 | 1303 |
<div class="cb_wrap"> |
| 1304 |
- <label for="" class="label"></label> |
|
| 1304 |
+ <label for="select_all" class="label"></label> |
|
| 1305 | 1305 |
<input type="checkbox" id="select_all"> |
| 1306 | 1306 |
</div> |
| 1307 | 1307 |
<div class="list_table_num"> |
... | ... | @@ -1416,7 +1416,7 @@ |
| 1416 | 1416 |
<tr> |
| 1417 | 1417 |
<th>발신번호</th> |
| 1418 | 1418 |
<td class="put_num"> |
| 1419 |
- <label for="callFrom" class="label"></label> |
|
| 1419 |
+ <label for="callFromList" class="label"></label> |
|
| 1420 | 1420 |
<select id="callFromList" name="callFromList" class="sel_number"> |
| 1421 | 1421 |
<c:choose> |
| 1422 | 1422 |
<c:when test="${not empty resultPhonList}">
|
... | ... | @@ -1522,7 +1522,7 @@ |
| 1522 | 1522 |
<div class="calendar_wrap"> |
| 1523 | 1523 |
<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"> |
| 1524 | 1524 |
</div> |
| 1525 |
- <label for="" class="label">시 선택</label> |
|
| 1525 |
+ <label for="msgResHour" class="label">시 선택</label> |
|
| 1526 | 1526 |
<div class="selBox"> |
| 1527 | 1527 |
<select class="selType1" id="msgResHour" name="msgResHour"> |
| 1528 | 1528 |
<c:forEach var="hour" begin="0" end="23" step="1" varStatus="status"> |
... | ... | @@ -1536,7 +1536,7 @@ |
| 1536 | 1536 |
</c:choose> |
| 1537 | 1537 |
</c:forEach> |
| 1538 | 1538 |
</select> |
| 1539 |
- <label for="" class="label">분 선택</label> |
|
| 1539 |
+ <label for="msgResMin" class="label">분 선택</label> |
|
| 1540 | 1540 |
<select class="selType1" id="msgResMin" name="msgResMin"> |
| 1541 | 1541 |
<c:forEach var="min" begin="0" end="55" step="5"> |
| 1542 | 1542 |
<c:choose> |
... | ... | @@ -1553,9 +1553,9 @@ |
| 1553 | 1553 |
</div> |
| 1554 | 1554 |
<div class="rev_bottom"> |
| 1555 | 1555 |
<input type="checkbox" id="inputDivideChk" name="inputDivideChk"> |
| 1556 |
- <label for="">분할전송</label> |
|
| 1556 |
+ <label for="inputDivideChk">분할전송</label> |
|
| 1557 | 1557 |
<input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/> |
| 1558 |
- <label for="divideCnt">건씩</label> |
|
| 1558 |
+ <label for="frmDivideCnt">건씩</label> |
|
| 1559 | 1559 |
<select class="selType1" id="divideTime" name="divideTime"> |
| 1560 | 1560 |
<option value="5">05분</option> |
| 1561 | 1561 |
<option value="10">10분</option> |
... | ... | @@ -1596,7 +1596,7 @@ |
| 1596 | 1596 |
<input type="hidden" name="searchCondition" id="searchCondition" value="0" /> |
| 1597 | 1597 |
<div class="adr_pop_left"> |
| 1598 | 1598 |
<div class="adr_left_search"> |
| 1599 |
- <label for="searchKeyword" class="label">그룹명 검색</label> |
|
| 1599 |
+ <label for="searchGrpKeyword" class="label">그룹명 검색</label> |
|
| 1600 | 1600 |
<input type="text" name="searchGrpKeyword" id="searchGrpKeyword" placeholder="그룹명 검색" onfocus="this.placeholder=''" onblur="this.placeholder='그룹명 검색'" class="inputLight"> |
| 1601 | 1601 |
<button type="button" onClick="javascrit:fnAddrGrpSearch(); return false;"><img src="/publish/images/popup/search.png" alt="검색"></button> |
| 1602 | 1602 |
</div> |
... | ... | @@ -1737,7 +1737,7 @@ |
| 1737 | 1737 |
<button type="button" class="excel_btn" onclick="location.href='/download/msg/알림톡_엑셀주소록_등록양식.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button> |
| 1738 | 1738 |
</div> |
| 1739 | 1739 |
<div class="attachedFile"> |
| 1740 |
- <label for="" class="attachedFile_label">첨부파일</label> |
|
| 1740 |
+ <label for="excelNm01" class="attachedFile_label">첨부파일</label> |
|
| 1741 | 1741 |
<input type="text" id="excelNm01" value="" readonly> |
| 1742 | 1742 |
<input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExportAjax(event); return false;" style="display:none"/> |
| 1743 | 1743 |
<!-- <input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExport01(event); return false;" style="display:none"/> --> |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataTestPop.jsp
... | ... | @@ -0,0 +1,221 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> | |
| 5 | +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> | |
| 6 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> | |
| 7 | +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> | |
| 8 | +<% pageContext.setAttribute("newLineChar", "\r\n"); %> | |
| 9 | +<% pageContext.setAttribute("newLineChar2", "\n"); %> | |
| 10 | + | |
| 11 | +<script> | |
| 12 | + | |
| 13 | + function fn_testSendMsgData(){ | |
| 14 | + | |
| 15 | + var callNum = $("#callTo").val(); // 받는 전화번호 | |
| 16 | + var userMoney = $('#oriUserMoney').val(); // 사용자 금액 | |
| 17 | + var kakaoFtPrice = $('#kakaoFtPrice').val(); // 카카오전송 금액 | |
| 18 | + var resutlPrice = parseFloat(userMoney)-parseFloat(kakaoFtPrice); // 금액 확인 | |
| 19 | + | |
| 20 | + // 음수면 -1 값 | |
| 21 | + if(Math.sign(resutlPrice) < 0){ | |
| 22 | + alert("발송에 필요한 회원님의 보유 잔액이 부족 합니다."); | |
| 23 | + return false; | |
| 24 | + } | |
| 25 | + | |
| 26 | + $('#bizForm #callToList').val(callNum); | |
| 27 | + | |
| 28 | + var data = new FormData(document.bizForm); | |
| 29 | + $.ajax({ | |
| 30 | + type: "POST" | |
| 31 | + , url: "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do" | |
| 32 | + , data: data | |
| 33 | + , dataType: 'json' | |
| 34 | + , async: true | |
| 35 | + , processData: false | |
| 36 | + , contentType: false | |
| 37 | + , cache: false | |
| 38 | + , success: function (returnData, status) { | |
| 39 | + if(status == 'success'){ | |
| 40 | + if("loginFail" == returnData.result){ | |
| 41 | + | |
| 42 | + alert(returnData.message); | |
| 43 | + return false; | |
| 44 | + | |
| 45 | + }else if('fail' == returnData.result){ | |
| 46 | + | |
| 47 | + alert(returnData.message); | |
| 48 | + return false; | |
| 49 | + | |
| 50 | + } else if(status == 'success'){ | |
| 51 | + alert("테스트 친구톡 전송이 완료 되었습니다.") | |
| 52 | + window.close(); | |
| 53 | + } | |
| 54 | + } | |
| 55 | + } | |
| 56 | + ,beforeSend : function(xmlHttpRequest) { | |
| 57 | + //로딩창 show | |
| 58 | + $('.loading_layer').addClass('active'); | |
| 59 | + } | |
| 60 | + ,complete : function(xhr, textStatus) { | |
| 61 | + //로딩창 hide | |
| 62 | + $('.loading_layer').removeClass('active'); | |
| 63 | + } | |
| 64 | + ,error: function (e) { | |
| 65 | + console.log("ERROR : ", e); | |
| 66 | + alert("카카오 친구톡 전송에 실패하였습니다."); | |
| 67 | + } | |
| 68 | + }); | |
| 69 | + } | |
| 70 | +</script> | |
| 71 | + | |
| 72 | + | |
| 73 | +<form id="bizForm" name="bizForm" method="post"> | |
| 74 | + <input type="hidden" id="senderKey" name="senderKey" value="<c:out value='${kakaoVO.senderKey}'/>"> <!-- 카카오 보내는 사람 Key --> | |
| 75 | + <input type="hidden" id="templateContent" name="templateContent" value="<c:out value='${kakaoVO.templateContent }'/>"> <!-- 카카오 전송 templat내용 --> | |
| 76 | + <input type="hidden" id="callToList" name="callToList" value=""> <!-- 카카오 전송 전화번호 --> | |
| 77 | + <input type="hidden" id="txtReplYn" name="txtReplYn" value="N"> <!-- 치환문자 여부 - --> | |
| 78 | + | |
| 79 | + | |
| 80 | + <input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N"> <!-- 대체문자 전송여부 --> | |
| 81 | + <input type="hidden" id="reserveYn" name="reserveYn" value="N"> <!-- 예약문자 여부 --> | |
| 82 | + <input type="hidden" id="divideChk" name="divideChk" value="N"> <!--분할발성 체크 여부--> | |
| 83 | + <input type="hidden" id="reqDate" name="reqDate" value=""> <!--전송일자--> | |
| 84 | + | |
| 85 | + <input type="hidden" id="bizJsonYn" name="bizJsonYn" value="<c:out value='${kakaoVO.bizJsonYn}' />"> <!-- JSON 생성 여부 --> | |
| 86 | + | |
| 87 | + <input type="hidden" id="imageType" name="imageType" value="<c:out value='${kakaoVO.imageType}'/>"/> <!-- 이미지 종류 --> | |
| 88 | + <input type="hidden" id="imageFileName" name="imageFileName" value="<c:out value='${kakaoVO.imageFileName}'/>"> <!-- 이미지 파일 이름 --> | |
| 89 | + <input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${kakaoVO.templateImageUrl}'/>"> <!-- 이미지 경로 --> | |
| 90 | + <input type="hidden" id="imgTitle" name="imgTitle" value="<c:out value='${kakaoVO.imgTitle}'/>"> <!-- 이미지 타이틀 --> | |
| 91 | + <input type="hidden" id="imgLink" name="imgLink" value="<c:out value='${kakaoVO.imgLink}'/>"> <!-- 이미지 링크정보 --> | |
| 92 | + <input type="hidden" id="adFlag" name="adFlag" value="<c:out value='${kakaoVO.adFlag}'/>"/> <!-- 광고여부 --> | |
| 93 | + | |
| 94 | + <input type="hidden" id="spamStatus" name="spamStatus" value="N"/> | |
| 95 | + <input type="hidden" id="atSmishingYn" name="atSmishingYn" value="N"/> | |
| 96 | + | |
| 97 | + <input type="hidden" id="kakaoFtPrice" value="<c:out value='${kakaoFtPrice}' />"> | |
| 98 | + <input type="hidden" id="eachPrice" name="eachPrice" value="<c:out value='${kakaoFtPrice}' />"/> | |
| 99 | + <input type="hidden" id="totPrice" name="totalPrice" value="<c:out value='${kakaoFtPrice}' />"/> | |
| 100 | + <input type="hidden" id="varValList" name="varValList" value="<c:out value='${kakaoVO.varValList}' />"/> | |
| 101 | + <!-- 버튼 정보 처리 --> | |
| 102 | + <c:forEach var="buttonList" items="${kakaoVO.buttonVOList}" varStatus="status"> | |
| 103 | + | |
| 104 | + <c:if test="${buttonList.linkType eq 'DS'}"> | |
| 105 | + <!-- 배송조회 버튼 --> | |
| 106 | + <input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/> | |
| 107 | + <input type="hidden" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>"> | |
| 108 | + </c:if> | |
| 109 | + | |
| 110 | + <c:if test="${buttonList.linkType eq 'WL'}"> | |
| 111 | + <!-- 웹링크 버튼 --> | |
| 112 | + <input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/> | |
| 113 | + <input type="hidden" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>"> | |
| 114 | + <input type="hidden" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>"> | |
| 115 | + <input type="hidden" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>"> | |
| 116 | + </c:if> | |
| 117 | + | |
| 118 | + <c:if test="${buttonList.linkType eq 'AL'}"> | |
| 119 | + <!-- 앱링크 버튼 --> | |
| 120 | + <input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/> | |
| 121 | + <input type="hidden" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>"> | |
| 122 | + <input type="hidden" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>"> | |
| 123 | + <input type="hidden" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>"> | |
| 124 | + </c:if> | |
| 125 | + | |
| 126 | + <c:if test="${buttonList.linkType eq 'BK'}"> | |
| 127 | + <!-- 봇키워드 --> | |
| 128 | + <input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/> | |
| 129 | + <input type="hidden" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>"> | |
| 130 | + </c:if> | |
| 131 | + | |
| 132 | + <c:if test="${buttonList.linkType eq 'MD'}"> | |
| 133 | + <!-- 메시지 전달 --> | |
| 134 | + <input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" /> | |
| 135 | + <input type="hidden" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>"> | |
| 136 | + </c:if> | |
| 137 | + | |
| 138 | + <c:if test="${buttonList.linkType eq 'BC'}"> | |
| 139 | + <!-- 상담톡 전환 --> | |
| 140 | + <input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" /> | |
| 141 | + <input type="hidden" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>"> | |
| 142 | + </c:if> | |
| 143 | + | |
| 144 | + <c:if test="${buttonList.linkType eq 'BT'}"> | |
| 145 | + <!-- 챗봇전환 --> | |
| 146 | + <input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" /> | |
| 147 | + <input type="hidden" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>"> | |
| 148 | + </c:if> | |
| 149 | + </c:forEach> | |
| 150 | + | |
| 151 | +</form> | |
| 152 | + | |
| 153 | +<!-- 유저 보유잔액 --> | |
| 154 | +<input type="hidden" id="oriUserMoney" value="<c:out value='${userMoney}' />"> | |
| 155 | + | |
| 156 | +<div class="test_sendpop kakao_rev_popup" style="width: 770px;"> | |
| 157 | + <div class="info_popup"> | |
| 158 | + <div class="popup_heading"> | |
| 159 | + <p>테스트 발송</p> | |
| 160 | + </div> | |
| 161 | + <div class="layer_in"> | |
| 162 | + <ul class="info_list"> | |
| 163 | + <li>테스트 발송은 친구톡을 본인에게 발송하여 친구톡 내용을 미리 확인하는 서비스 입니다.</li> | |
| 164 | + </ul> | |
| 165 | + </div> | |
| 166 | + </div> | |
| 167 | + <div class="test_wrap kakao_wrap"> | |
| 168 | + <div class="number"> | |
| 169 | + <dl> | |
| 170 | + <dt>수신번호</dt> | |
| 171 | + <dd> | |
| 172 | + <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='번호를 입력하세요'"> | |
| 173 | + </dd> | |
| 174 | + </dl> | |
| 175 | + <dl class="price"> | |
| 176 | + <dt>발송금액</dt> | |
| 177 | + <dd><span>${kakaoFtPrice}</span>원</dd> | |
| 178 | + </dl> | |
| 179 | + <p class="text">발송하시겠습니까?<span>※ 친구톡 발송과 동일하게 요금이 차감됩니다.</span></p> | |
| 180 | + <button type="button" class="btnType btnType10" onclick="fn_testSendMsgData(); return false;">테스트발송</button> | |
| 181 | + </div> | |
| 182 | + <div class="phone"> | |
| 183 | + <div class="phoneIn"> | |
| 184 | + <p class="prev_p" id="prev_p_top"> | |
| 185 | + ${kakaoVO.yellowId} | |
| 186 | + </p> | |
| 187 | + <!-- 텍스트 미리보기 --> | |
| 188 | + <div class="text_preview"> | |
| 189 | + <div class="allimtalk_title"> | |
| 190 | + <img src="/publish/images/content/icon_allimtalk.png" alt="">친구톡 | |
| 191 | + </div> | |
| 192 | + <div class="allimtalk_content" id="alimtalkTemplate"> | |
| 193 | +<!-- <p class="emphasis_side_text">템플릿을 선택해 주세요</p> --> | |
| 194 | + <c:if test="${kakaoVO.imageType eq 'I' || kakaoVO.imageType eq 'W'}"> | |
| 195 | + <div class="kakao_image"> | |
| 196 | + <img src="<c:url value='${kakaoVO.templateImageUrl}'/>" alt=""> | |
| 197 | + </div> | |
| 198 | + </c:if> | |
| 199 | + <!-- 알림톡 내용 표시 --> | |
| 200 | + <p class="template_text"> | |
| 201 | + <c:out value="${fn:replace(fn:replace(kakaoVO.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/> | |
| 202 | + </p> | |
| 203 | + | |
| 204 | + <!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 --> | |
| 205 | + <c:forEach var="templatInfoButtonList" items="${kakaoVO.buttonVOList}" varStatus="status"> | |
| 206 | + <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button> | |
| 207 | + </c:forEach> | |
| 208 | + </div> | |
| 209 | + </div> | |
| 210 | + <!-- 텍스트 미리보기 --> | |
| 211 | + | |
| 212 | + <!-- //텍스트 미리보기 --> | |
| 213 | + <!-- <div class="template_info_wrap"> | |
| 214 | + <div class="template_byte"> | |
| 215 | + </div> | |
| 216 | + </div> --> | |
| 217 | + </div> | |
| 218 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p> | |
| 219 | + </div> | |
| 220 | + </div> | |
| 221 | +</div>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
... | ... | @@ -2,34 +2,33 @@ |
| 2 | 2 |
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> |
| 3 | 3 |
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> |
| 4 | 4 |
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> |
| 5 |
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> |
|
| 5 | 6 |
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> |
| 6 |
- |
|
| 7 |
+<%@ page import="itn.com.cmm.LoginVO" %> |
|
| 7 | 8 |
<script src="/js/kakao/templateComm.js"></script> |
| 9 |
+ |
|
| 10 |
+<script type="text/javascript" src="<c:out value='/js/MJUtill.js' />"></script> |
|
| 11 |
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/ftPriceClclt.js' />"></script> |
|
| 12 |
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/ftTabulator.js' />"></script> |
|
| 13 |
+<script type="text/javascript" src="<c:out value='/js/txtSpecialReplace.js' />"></script> |
|
| 14 |
+<script type="text/javascript" src="<c:out value='/js/kakao/at/addr.js' />"></script> |
|
| 15 |
+<script type="text/javascript" src="<c:out value='/js/common/popup.js' />"></script> |
|
| 16 |
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/friendstalkExcel.js' />"></script> |
|
| 8 | 17 |
|
| 9 | 18 |
|
| 10 | 19 |
<script type="text/javascript"> |
| 20 |
+ |
|
| 21 |
+var loginVO = '${loginVO}';
|
|
| 11 | 22 |
/* 파일등록 */ |
| 12 | 23 |
var _fileIdx = 0; |
| 13 | 24 |
var _fileForm2 = new Array(); |
| 14 | 25 |
var fileExt = ""; // 첨부파일 확장자 |
| 26 |
+var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변수 |
|
| 15 | 27 |
|
| 16 | 28 |
$(document).ready(function (){
|
| 17 | 29 |
|
| 18 |
- //광고성 정보 포함 선택에 따른 텍스트 표시 부분 처리 |
|
| 19 |
- $(".inputAdFlag").change(function(){
|
|
| 20 |
- var adFlagVal = $(this).val(); |
|
| 21 |
- if(adFlagVal == 'N'){//광고 표시 숨김처리
|
|
| 22 |
- $('.adFlag').hide();
|
|
| 23 |
- $('.kakao_block_text').hide();
|
|
| 24 |
- $('#adFlagFront').hide();
|
|
| 25 |
- $('.adFlagAfter').hide();
|
|
| 26 |
- }else{
|
|
| 27 |
- $('.adFlag').show();
|
|
| 28 |
- $('.kakao_block_text').show();
|
|
| 29 |
- $('#adFlagFront').show();
|
|
| 30 |
- $('.adFlagAfter').show();
|
|
| 31 |
- } |
|
| 32 |
- }); |
|
| 30 |
+ //화면 초기 로딩시 화면 처리해주기 - 템플릿 불러오기 했을 경우를 위함 |
|
| 31 |
+ initFormChk(); |
|
| 33 | 32 |
|
| 34 | 33 |
//이모티콘 삽입 기능 처리 |
| 35 | 34 |
$(".symbolButton, .changeWord").on('click', function(){
|
... | ... | @@ -48,15 +47,184 @@ |
| 48 | 47 |
$('#bizForm #reserveYn').val($(this).val());
|
| 49 | 48 |
}); |
| 50 | 49 |
|
| 50 |
+ //예약 발송 라디오 버튼 선택시 숨김 해제처리 |
|
| 51 |
+ $("#reserYnY").on('click', function(){
|
|
| 52 |
+ $('.rev_selected').show();
|
|
| 53 |
+ $('.send_rev .send_content').css('padding-bottom','0');
|
|
| 54 |
+ $('.send_btn .btnType:first-child').html('예약하기');
|
|
| 55 |
+ $('#bizForm #reserveYn').val($(this).val());
|
|
| 56 |
+ }); |
|
| 57 |
+ |
|
| 51 | 58 |
//템플릿 내용 입력 글자수 체크 해주기 |
| 52 | 59 |
$("#inputTemplateContent").keyup(function(e){
|
| 53 | 60 |
|
| 54 | 61 |
var contents = $('#inputTemplateContent').val();
|
| 55 |
- console.log(contents); |
|
| 56 | 62 |
setContentsLengForFriends(contents); |
| 57 | 63 |
|
| 58 | 64 |
}); |
| 65 |
+ |
|
| 66 |
+ $("#excelAdd").click(function(){
|
|
| 67 |
+ |
|
| 68 |
+ if(excelAddr.length > 0){
|
|
| 69 |
+ |
|
| 70 |
+ //첨부파일로 불러온 데이터를 받는사람 목록에 추가해 준다. |
|
| 71 |
+ addPhoneInfo(excelAddr); |
|
| 72 |
+ |
|
| 73 |
+ //첨부파일 초기화 시켜주기 |
|
| 74 |
+ $("#excelFile").val("");
|
|
| 75 |
+ $("#excelNm").val("");
|
|
| 76 |
+ |
|
| 77 |
+ }else{
|
|
| 78 |
+ |
|
| 79 |
+ alert("추가 엑셀 데이터가 없습니다.");
|
|
| 80 |
+ return false; |
|
| 81 |
+ |
|
| 82 |
+ } |
|
| 83 |
+ |
|
| 84 |
+ }); |
|
| 85 |
+ |
|
| 86 |
+ |
|
| 87 |
+ $("#send_fail_check").change(function(){
|
|
| 88 |
+ if($("#send_fail_check").is(":checked")){
|
|
| 89 |
+ |
|
| 90 |
+ |
|
| 91 |
+ if(loginVO == "" || loginVO == null){
|
|
| 92 |
+ alert("로그인 후 사용 가능한 기능입니다.");
|
|
| 93 |
+ location.href="<c:url value='/web/user/login/login.do'/>"; |
|
| 94 |
+ return false; |
|
| 95 |
+ |
|
| 96 |
+ $("#send_fail_check").prop("checked", false);
|
|
| 97 |
+ } |
|
| 98 |
+ |
|
| 99 |
+ if($('#callFromList').val() === ''){
|
|
| 100 |
+ |
|
| 101 |
+ if(confirm('대체문자 전송을 위한 발신번호가 등록되지 않았습니다. \n대체문자 발신번호를 지금 등록하시겠습니까?')){
|
|
| 102 |
+ window.location="<c:out value='/web/user/sendNumberManage.do' />"; |
|
| 103 |
+ } |
|
| 104 |
+ $("#send_fail_check").prop("checked", false);
|
|
| 105 |
+ |
|
| 106 |
+ }else{
|
|
| 107 |
+ // 에러버튼 체크 초기화 |
|
| 108 |
+ fn_insertErrorYN('N');
|
|
| 109 |
+ |
|
| 110 |
+ $('#smsTxtArea').val('');
|
|
| 111 |
+// // 미리보기 텍스트를 가져와 줄바꿈 처리 후 대체문자 내용으로 입력 |
|
| 112 |
+ $('#smsTxtArea').val(
|
|
| 113 |
+ $('.template_text').html().trim().replace(/(<br>|<br\/>|<br \/>)/g, '\r\n')
|
|
| 114 |
+ ); |
|
| 115 |
+ |
|
| 116 |
+// //문자 내용 입력시 바이트수 계산하기 |
|
| 117 |
+ |
|
| 118 |
+ $(".replace_send_wrap").slideDown(400);
|
|
| 119 |
+ thisFnByteString($('#smsTxtArea').val());
|
|
| 120 |
+ } |
|
| 121 |
+ }else{
|
|
| 122 |
+ $(".replace_send_wrap").slideUp(400);
|
|
| 123 |
+ // 초기화 버튼 클릭 |
|
| 124 |
+ $('#failCheckInit').click();
|
|
| 125 |
+ $('.send_top .send_right .phone').css({'top': '0','transition': 'top .4s linear'});
|
|
| 126 |
+ } |
|
| 127 |
+ |
|
| 128 |
+ // 금액 계산 fn 호출 |
|
| 129 |
+ totalFtPriceSum(tableL.getRows().length); |
|
| 130 |
+ //fn_priceClclt(); |
|
| 131 |
+ }); |
|
| 132 |
+ |
|
| 133 |
+ // 대체문자 내용 수정 |
|
| 134 |
+ $('#smsTxtArea').keyup(function(){
|
|
| 135 |
+ // 금액 계산 fn 호출 |
|
| 136 |
+ totalFtPriceSum(tableL.getRows().length); |
|
| 137 |
+ //fn_priceClclt(); |
|
| 138 |
+ // 문자 바이트수 체크 |
|
| 139 |
+ thisFnByteString($('#smsTxtArea').val());
|
|
| 140 |
+ // 에러버튼 체크 초기화 |
|
| 141 |
+ fn_insertErrorYN('N');
|
|
| 142 |
+ |
|
| 143 |
+ }); |
|
| 144 |
+ |
|
| 145 |
+ |
|
| 146 |
+ //대체문자 초기화 버튼 선택 처리 |
|
| 147 |
+ $("#failCheckInit").click(function(){
|
|
| 148 |
+ |
|
| 149 |
+ $('#smsTxtArea').val("");
|
|
| 150 |
+ |
|
| 151 |
+ // 금액 계산 fn 호출 |
|
| 152 |
+ totalFtPriceSum(tableL.getRows().length); |
|
| 153 |
+ //fn_priceClclt(); |
|
| 154 |
+ // 문자 바이트수 체크 |
|
| 155 |
+ thisFnByteString($('#smsTxtArea').val());
|
|
| 156 |
+ // 에러버튼 체크 초기화 |
|
| 157 |
+ fn_insertErrorYN('N');
|
|
| 158 |
+ |
|
| 159 |
+ }); |
|
| 160 |
+ |
|
| 161 |
+ |
|
| 59 | 162 |
}); |
| 163 |
+ |
|
| 164 |
+function initFormChk(){
|
|
| 165 |
+ |
|
| 166 |
+ //첫로딩시 우측 미리보기 화면 숨김처리 |
|
| 167 |
+ $('.emphasis_title_text').hide(); //강조유형 타이틀
|
|
| 168 |
+ $('.emphasis_side_text').hide(); //강조유형 보조문구
|
|
| 169 |
+ //$('.template_text').hide(); //내용 미리보기
|
|
| 170 |
+ $('.side_info_text').hide(); //부가정보 내용
|
|
| 171 |
+ $('.channel_info_text').hide(); //채널추가 텍스트 내용
|
|
| 172 |
+ $('.btnAd').hide(); //샘플 채널추가 버튼
|
|
| 173 |
+ //$('.btnEmpty').hide(); //샘플 버튼
|
|
| 174 |
+ |
|
| 175 |
+ //채널ID 정보 미리보기에 표시해주기 |
|
| 176 |
+ fnAgentCodeChg(); |
|
| 177 |
+ |
|
| 178 |
+ //템플릿 등록 이미지가 있는 경우 이미지 정보 표시해 주기 |
|
| 179 |
+ var imgType = $("input[name=img_file_add]:checked").val();
|
|
| 180 |
+ |
|
| 181 |
+ if(!imgType == ''){
|
|
| 182 |
+ |
|
| 183 |
+ if($("input[name='img_file_add']:checked").attr("id")=="img_file_1"){
|
|
| 184 |
+ $(".basic_img_add_wrap").show().siblings(".img_add_info_wrap").hide();
|
|
| 185 |
+ $(".img_file_add_wrap").show();
|
|
| 186 |
+ }else if($("input[name='img_file_add']:checked").attr("id")=="img_file_2"){
|
|
| 187 |
+ $(".wide_img_add_wrap").show().siblings(".img_add_info_wrap").hide();
|
|
| 188 |
+ $(".img_file_add_wrap").show();
|
|
| 189 |
+ } else{
|
|
| 190 |
+ $(".img_add_info_wrap, .img_file_add_wrap").hide();
|
|
| 191 |
+ } |
|
| 192 |
+ |
|
| 193 |
+ }else{
|
|
| 194 |
+ |
|
| 195 |
+ $("#img_file_0").prop('checked',true);
|
|
| 196 |
+ |
|
| 197 |
+ } |
|
| 198 |
+ var imageFileName = '${resultTemplateVO.imageFileName}';
|
|
| 199 |
+ $("#imgNm").text(imageFileName);
|
|
| 200 |
+ |
|
| 201 |
+ //미리보기에 이미지 표시해주기 |
|
| 202 |
+ var imgUrl = '${resultTemplateVO.templateImageUrl}';
|
|
| 203 |
+ |
|
| 204 |
+ if(imgUrl != ''){
|
|
| 205 |
+ $('.kakao_image').css("display", "block");
|
|
| 206 |
+ $("#kakaoImg").attr("src", imgUrl);
|
|
| 207 |
+ } |
|
| 208 |
+ |
|
| 209 |
+ //초기 템플릿 내용 글자수 처리해주기 |
|
| 210 |
+ var tmpContents = $('#inputTemplateContent').val();
|
|
| 211 |
+ setContentsLengForFriends(tmpContents); |
|
| 212 |
+ |
|
| 213 |
+ //초기 광고포함 여부 처리 |
|
| 214 |
+ var adFlagVal = $("input[name=ad_flag]:checked").val();
|
|
| 215 |
+ advTextChange(adFlagVal); |
|
| 216 |
+ |
|
| 217 |
+ var reserYn = $("input[name=reserYn]:checked").val();
|
|
| 218 |
+ if(reserYn == 'N'){
|
|
| 219 |
+ |
|
| 220 |
+ $('.rev_selected').hide();
|
|
| 221 |
+ $('.send_rev .send_content').css('padding-bottom','108px');
|
|
| 222 |
+ $('.send_btn .btnType:first-child').html('발송하기');
|
|
| 223 |
+ $('#bizForm #reserveYn').val('N');
|
|
| 224 |
+ |
|
| 225 |
+ } |
|
| 226 |
+ |
|
| 227 |
+} |
|
| 60 | 228 |
|
| 61 | 229 |
//우측 미리보기 화면 채널 아이디 정보 변경해 주기 |
| 62 | 230 |
function fnAgentCodeChg(){
|
... | ... | @@ -219,6 +387,7 @@ |
| 219 | 387 |
|
| 220 | 388 |
$('.kakao_image').css("display", "block");
|
| 221 | 389 |
$("#kakaoImg").attr("src", imgUrl);
|
| 390 |
+ $("#imageFileName").val(fileName);
|
|
| 222 | 391 |
|
| 223 | 392 |
}else if(code == "2002"){//일반 이미지 가로 세로 크기 오류 발생
|
| 224 | 393 |
|
... | ... | @@ -287,6 +456,16 @@ |
| 287 | 456 |
|
| 288 | 457 |
} |
| 289 | 458 |
|
| 459 |
+ var tmpFriendId = $("#tmpFriendId").val();
|
|
| 460 |
+ |
|
| 461 |
+ if(tmpFriendId != ''){
|
|
| 462 |
+ |
|
| 463 |
+ if(!confirm("불러온 템플릿의 이미지도 함께 삭제 됩니다. 계속하시겠습니까?")){
|
|
| 464 |
+ return false; |
|
| 465 |
+ } |
|
| 466 |
+ |
|
| 467 |
+ } |
|
| 468 |
+ |
|
| 290 | 469 |
var data = new FormData(bizForm); |
| 291 | 470 |
|
| 292 | 471 |
if(confirm("등록된 이미지를 삭제하시겠습니까?")){
|
... | ... | @@ -319,6 +498,8 @@ |
| 319 | 498 |
$("#templateImageUrl").val("");
|
| 320 | 499 |
$('.kakao_image').css("display", "none");
|
| 321 | 500 |
$("#kakaoImg").attr("src", "");
|
| 501 |
+ $("#imageFileName").val(""); //이미지 파일명 삭제
|
|
| 502 |
+ $("#img_file_0").click(); //이미지 첨부 안함 선택
|
|
| 322 | 503 |
return false; |
| 323 | 504 |
|
| 324 | 505 |
}else{
|
... | ... | @@ -345,6 +526,1165 @@ |
| 345 | 526 |
$('.nowChar').text("0 /");
|
| 346 | 527 |
} |
| 347 | 528 |
|
| 529 |
+//저장 템플릿 불러오기 선택시 |
|
| 530 |
+function myTemplateSelect(ftId){
|
|
| 531 |
+ |
|
| 532 |
+ var form = document.templateForm; |
|
| 533 |
+ |
|
| 534 |
+ form.friendId.value = ftId; |
|
| 535 |
+ |
|
| 536 |
+ form.action="/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do"; |
|
| 537 |
+ form.submit(); |
|
| 538 |
+ |
|
| 539 |
+ |
|
| 540 |
+} |
|
| 541 |
+ |
|
| 542 |
+//광고성 정보 포함 선택에 따른 텍스트 표시 부분 처리 |
|
| 543 |
+$(document).on('change', '.inputAdFlag', function(){
|
|
| 544 |
+ |
|
| 545 |
+ var adFlagVal = $(this).val(); |
|
| 546 |
+ advTextChange(adFlagVal); |
|
| 547 |
+ |
|
| 548 |
+}); |
|
| 549 |
+ |
|
| 550 |
+function advTextChange(adFlagVal){
|
|
| 551 |
+ |
|
| 552 |
+ if(typeof adFlagVal == "undefined" || adFlagVal == null || adFlagVal == ""){
|
|
| 553 |
+ |
|
| 554 |
+ $("#ad_Y").prop('checked',true);
|
|
| 555 |
+ |
|
| 556 |
+ }else if(adFlagVal == 'N'){//광고 표시 숨김처리
|
|
| 557 |
+ |
|
| 558 |
+ $('.adFlag').hide();
|
|
| 559 |
+ $('.kakao_block_text').hide();
|
|
| 560 |
+ $('#adFlagFront').hide();
|
|
| 561 |
+ $('.adFlagAfter').hide();
|
|
| 562 |
+ |
|
| 563 |
+ }else{
|
|
| 564 |
+ $('.adFlag').show();
|
|
| 565 |
+ $('.kakao_block_text').show();
|
|
| 566 |
+ $('#adFlagFront').show();
|
|
| 567 |
+ $('.adFlagAfter').show();
|
|
| 568 |
+ } |
|
| 569 |
+ |
|
| 570 |
+} |
|
| 571 |
+ |
|
| 572 |
+ |
|
| 573 |
+//친구톡 내용 템플릿으로 저장하기 - 내용 저장하기 |
|
| 574 |
+function myTemplateSave(){
|
|
| 575 |
+ |
|
| 576 |
+ var selectAgentCode = $("select[name='selectAgentCode']").val(); // 선택 채널ID
|
|
| 577 |
+ var yellowId = $("select[name='selectAgentCode'] option:selected").text().replaceAll('@',''); // 선택 채널명
|
|
| 578 |
+ var inputTemplateName = $("#inputTemplateName").val(); // 입력 템플릿 이름
|
|
| 579 |
+ var imageType = $("input[name=img_file_add]:checked").val(); // 첨부 이미지 종류(없음, 일반, 와이드 이미지)
|
|
| 580 |
+ var imageTitle = $("#imgTitle").val(); //첨부이미지 제목
|
|
| 581 |
+ var imageLink = $("#imgLink").val(); //첨부이미지 클릭시 이동 링크 주소
|
|
| 582 |
+ var inputTemplateAd = $("input[name=ad_flag]:checked").val(); // 광고성메시지 선택 여부
|
|
| 583 |
+ var inputTemplateContent = $("#inputTemplateContent").val(); // 템플릿 내용
|
|
| 584 |
+ |
|
| 585 |
+ var inputTemplateImageName = $("#templateImageName").val(); // 템플릿 이미지 파일명
|
|
| 586 |
+ var inputTemplateImageUrl = $("#templateImageUrl").val(); // 템플릿 이미지 링크
|
|
| 587 |
+ |
|
| 588 |
+ // 공통 유효성 검사 조회 |
|
| 589 |
+ if(selectAgentCode == null || selectAgentCode == ""){
|
|
| 590 |
+ alert("채널ID를 선택해 주세요");
|
|
| 591 |
+ return; |
|
| 592 |
+ }; |
|
| 593 |
+ |
|
| 594 |
+ if(inputTemplateName == null || inputTemplateName == ""){
|
|
| 595 |
+ alert("템플릿 명을 입력해 주세요");
|
|
| 596 |
+ $("#inputTemplateName").focus();
|
|
| 597 |
+ return; |
|
| 598 |
+ }; |
|
| 599 |
+ |
|
| 600 |
+ if(imageType == 'I' || imageType == 'W'){
|
|
| 601 |
+ |
|
| 602 |
+ if(imageTitle == ''){
|
|
| 603 |
+ |
|
| 604 |
+ alert("이미지 제목을 입력해 주세요.");
|
|
| 605 |
+ return false; |
|
| 606 |
+ |
|
| 607 |
+ } |
|
| 608 |
+ |
|
| 609 |
+ if(imageLink == ''){
|
|
| 610 |
+ |
|
| 611 |
+ alert("이미지 클릭시 이동할 URL을 입력해 주세요.");
|
|
| 612 |
+ return false; |
|
| 613 |
+ |
|
| 614 |
+ }else{
|
|
| 615 |
+ |
|
| 616 |
+ if(imageLink.search("http://") == -1 && imageLink.search("https://") == -1){
|
|
| 617 |
+ |
|
| 618 |
+ alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다.");
|
|
| 619 |
+ return false; |
|
| 620 |
+ |
|
| 621 |
+ } |
|
| 622 |
+ |
|
| 623 |
+ } |
|
| 624 |
+ |
|
| 625 |
+ if(inputTemplateImageUrl == ''){
|
|
| 626 |
+ |
|
| 627 |
+ alert("이미지를 선택해 주세요.");
|
|
| 628 |
+ return false; |
|
| 629 |
+ |
|
| 630 |
+ } |
|
| 631 |
+ |
|
| 632 |
+ } |
|
| 633 |
+ |
|
| 634 |
+ |
|
| 635 |
+ if(inputTemplateContent == null || inputTemplateContent == ""){
|
|
| 636 |
+ alert("템플릿 내용을 입력해 주세요.");
|
|
| 637 |
+ return; |
|
| 638 |
+ }; |
|
| 639 |
+ |
|
| 640 |
+ var bizForm = document.bizForm; |
|
| 641 |
+ bizForm.senderKey.value = selectAgentCode; |
|
| 642 |
+ //bizForm.yellowId.value = yellowId; |
|
| 643 |
+ bizForm.templateName.value = inputTemplateName; |
|
| 644 |
+ //bizForm.imageType.value = imageType; |
|
| 645 |
+ //bizForm.imgTitle.value = imageTitle; |
|
| 646 |
+ //bizForm.imgLink.value = imageLink; |
|
| 647 |
+ bizForm.adFlag.value = inputTemplateAd; |
|
| 648 |
+ bizForm.templateContent.value = inputTemplateContent; |
|
| 649 |
+ |
|
| 650 |
+ var data = new FormData(bizForm); |
|
| 651 |
+ |
|
| 652 |
+ if(confirm("템플릿을 저장하시겠습니까?")){
|
|
| 653 |
+ |
|
| 654 |
+ $.ajax({
|
|
| 655 |
+ type: "POST" |
|
| 656 |
+ , url: "/web/mjon/kakao/template/insertKakaoFriendsTemplateDataAjax.do" |
|
| 657 |
+ , data: data |
|
| 658 |
+ , dataType: 'json' |
|
| 659 |
+ , async: false |
|
| 660 |
+ , processData: false |
|
| 661 |
+ , contentType: false |
|
| 662 |
+ , cache: false |
|
| 663 |
+ , success: function (returnData, status) {
|
|
| 664 |
+ |
|
| 665 |
+ var result = returnData.result; |
|
| 666 |
+ |
|
| 667 |
+ if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
|
|
| 668 |
+ alert("로그인후 진행이 가능합니다.");
|
|
| 669 |
+ }else if(returnData.result == "success") {
|
|
| 670 |
+ alert("템플릿 저장이 완료되었습니다.");
|
|
| 671 |
+ return false; |
|
| 672 |
+ }else{
|
|
| 673 |
+ |
|
| 674 |
+ alert("템플릿 저장에 오류가 발생하였습니다.");
|
|
| 675 |
+ return false; |
|
| 676 |
+ |
|
| 677 |
+ } |
|
| 678 |
+ } |
|
| 679 |
+ ,error: function (e) {
|
|
| 680 |
+ console.log("ERROR : ", e);
|
|
| 681 |
+ alert("템플릿 저장에 오류가 발생하였습니다.");
|
|
| 682 |
+ } |
|
| 683 |
+ }); |
|
| 684 |
+ |
|
| 685 |
+ } |
|
| 686 |
+ |
|
| 687 |
+} |
|
| 688 |
+ |
|
| 689 |
+//주소록 불러오기 버튼 클릭시 |
|
| 690 |
+$('.popupAddr').click(function(){
|
|
| 691 |
+ |
|
| 692 |
+ if(loginVO == "" || loginVO == null){
|
|
| 693 |
+ alert("주소록 불러오기 서비스는 로그인 후 이용 가능합니다.");
|
|
| 694 |
+ location.href="<c:url value='/web/user/login/login.do'/>"; |
|
| 695 |
+ return false; |
|
| 696 |
+ } |
|
| 697 |
+ |
|
| 698 |
+ $("#addrGroupLoad").load("/web/mjon/msgdata/selectAddrGroupListAjax.do", "" ,function(response, status, xhr){
|
|
| 699 |
+ //리스트 스크롤 처리해주기 |
|
| 700 |
+ $(".adr_pop_list").mCustomScrollbar({
|
|
| 701 |
+ axis: 'y', |
|
| 702 |
+ scrollbarPosition: "outside", |
|
| 703 |
+ theme: "dark", |
|
| 704 |
+ autoHideScrollbar: false |
|
| 705 |
+ }); |
|
| 706 |
+ }); |
|
| 707 |
+ |
|
| 708 |
+}); |
|
| 709 |
+ |
|
| 710 |
+function fnEmptyId(){
|
|
| 711 |
+ |
|
| 712 |
+ alert("로그인 후 이용이 가능합니다.");
|
|
| 713 |
+ return false; |
|
| 714 |
+ |
|
| 715 |
+} |
|
| 716 |
+ |
|
| 717 |
+//분할전송 건수 데이터 체크 |
|
| 718 |
+function checkNumber(event) {
|
|
| 719 |
+ var divideCnt = $('#frmDivideCnt').val();
|
|
| 720 |
+ if(!(event.key >= 0 && event.key <= 9)) {
|
|
| 721 |
+ return false; |
|
| 722 |
+ } |
|
| 723 |
+ |
|
| 724 |
+ var totCnt = divideCnt + "" + event.key; |
|
| 725 |
+ if(Number(totCnt) > 5000){
|
|
| 726 |
+ alert("분할전송 건수는 5,000건을 초과할 수 없습니다.");
|
|
| 727 |
+ $('#frmDivideCnt').val("20");
|
|
| 728 |
+ return false; |
|
| 729 |
+ } |
|
| 730 |
+ |
|
| 731 |
+ return true; |
|
| 732 |
+} |
|
| 733 |
+ |
|
| 734 |
+function fnSelectMinChk(){
|
|
| 735 |
+ |
|
| 736 |
+ var resHour = $("#msgResHour option:selected").val();
|
|
| 737 |
+ var resMin = $("#msgResMin option:selected").val();
|
|
| 738 |
+ |
|
| 739 |
+ if(resHour == '20'){
|
|
| 740 |
+ |
|
| 741 |
+ if(resMin >= 50 && resMin <= 59){
|
|
| 742 |
+ |
|
| 743 |
+ alert("친구톡은 20:50 ~ 익일 08:00까지 발송할 수 없습니다.");
|
|
| 744 |
+ $("#msgResMin").val("40").prop("selected", true);
|
|
| 745 |
+ |
|
| 746 |
+ } |
|
| 747 |
+ |
|
| 748 |
+ } |
|
| 749 |
+ |
|
| 750 |
+} |
|
| 751 |
+ |
|
| 752 |
+ |
|
| 753 |
+//친구톡 발송 금지 시간 처리 |
|
| 754 |
+function fn_noTimeSend(){
|
|
| 755 |
+ |
|
| 756 |
+ var id = '${loginVO.id}';
|
|
| 757 |
+ |
|
| 758 |
+ if(id == ""){
|
|
| 759 |
+ |
|
| 760 |
+ alert("로그인 후 이용이 가능합니다.");
|
|
| 761 |
+ return false; |
|
| 762 |
+ |
|
| 763 |
+ } |
|
| 764 |
+ |
|
| 765 |
+ alert("친구톡은 20:50 ~ 익일 08:00까지 발송할 수 없습니다.");
|
|
| 766 |
+ return false; |
|
| 767 |
+ |
|
| 768 |
+} |
|
| 769 |
+ |
|
| 770 |
+//친구톡 데이터 전송 처리 |
|
| 771 |
+function fn_sendMsgData(){
|
|
| 772 |
+ |
|
| 773 |
+ var senderKey = $("#selectAgentCode option:checked").val();
|
|
| 774 |
+ |
|
| 775 |
+ if(senderKey == ''){
|
|
| 776 |
+ |
|
| 777 |
+ alert("채널ID를 선택해 주세요.");
|
|
| 778 |
+ return false; |
|
| 779 |
+ |
|
| 780 |
+ }else{
|
|
| 781 |
+ |
|
| 782 |
+ $("#inputSenderKey").val(senderKey);
|
|
| 783 |
+ |
|
| 784 |
+ } |
|
| 785 |
+ |
|
| 786 |
+ //이미지 첨부 체크 |
|
| 787 |
+ var imgChk = $("input[name=img_file_add]:checked").val();
|
|
| 788 |
+ if(!getFtImageType(imgChk)){
|
|
| 789 |
+ return false; |
|
| 790 |
+ } |
|
| 791 |
+ |
|
| 792 |
+ //템플릿 버튼 갯수 체크 |
|
| 793 |
+ var buttonCnt = $(".btn_kakao_type").length;
|
|
| 794 |
+ |
|
| 795 |
+ if(buttonCnt > 0){
|
|
| 796 |
+ //json 파일 필요 유무 셋팅 |
|
| 797 |
+ $("#bizJsonYn").val("Y");
|
|
| 798 |
+ } |
|
| 799 |
+ |
|
| 800 |
+ //친구톡 내용 체크 |
|
| 801 |
+ var tmpContents = $('#inputTemplateContent').val();
|
|
| 802 |
+ |
|
| 803 |
+ if(tmpContents == ""){
|
|
| 804 |
+ |
|
| 805 |
+ alert("친구톡 내용을 입력해 주세요.");
|
|
| 806 |
+ return false; |
|
| 807 |
+ |
|
| 808 |
+ } |
|
| 809 |
+ |
|
| 810 |
+ var rtnStr = strChinJpnCheck(tmpContents); |
|
| 811 |
+ |
|
| 812 |
+ //문자내용에 이모지가 있는지 체크 |
|
| 813 |
+ if(!emojiCheck(tmpContents)) return false; |
|
| 814 |
+ |
|
| 815 |
+ if(rtnStr.length > 0){
|
|
| 816 |
+ |
|
| 817 |
+ alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다.");
|
|
| 818 |
+ |
|
| 819 |
+ } |
|
| 820 |
+ |
|
| 821 |
+ |
|
| 822 |
+ //수신번호 리스트 체크하기 |
|
| 823 |
+ var numCnt = 0; |
|
| 824 |
+ var nameList = []; //치환문자 이름 |
|
| 825 |
+ var phoneNum = []; //받는사람 |
|
| 826 |
+ var rep1List = []; //치환문자1 |
|
| 827 |
+ var rep2List = []; //치환문자2 |
|
| 828 |
+ var rep3List = []; //치환문자3 |
|
| 829 |
+ var rep4List = []; //치환문자4 |
|
| 830 |
+ |
|
| 831 |
+ var varValList = []; //치환문자 연결시킬 변수 셋팅 |
|
| 832 |
+ |
|
| 833 |
+ var selectedData = tableL.getRows(); |
|
| 834 |
+ |
|
| 835 |
+ var varValStatus = true; //치환분자 데이터 체크용 |
|
| 836 |
+ |
|
| 837 |
+ if(selectedData == "" || selectedData == null){
|
|
| 838 |
+ |
|
| 839 |
+ alert("받는사람 주소를 한 건 이상 입력해주세요.");
|
|
| 840 |
+ return false; |
|
| 841 |
+ |
|
| 842 |
+ }else{ // 선택한 Row '-' 문자 삭제하기
|
|
| 843 |
+ |
|
| 844 |
+ var txtReplYn = $("#txtReplYn").val();
|
|
| 845 |
+ |
|
| 846 |
+ if(txtReplYn == 'Y'){//치환문자가 있는 경우 변수 치환 처리
|
|
| 847 |
+ |
|
| 848 |
+ for(var i=0; i < selectedData.length; i++){
|
|
| 849 |
+ |
|
| 850 |
+ var nmStatus = false; |
|
| 851 |
+ var rep1Status = false; |
|
| 852 |
+ var rep2Status = false; |
|
| 853 |
+ var rep3Status = false; |
|
| 854 |
+ var rep4Status = false; |
|
| 855 |
+ |
|
| 856 |
+ |
|
| 857 |
+ if(tmpContents.indexOf("\#{이름}") > -1){
|
|
| 858 |
+ |
|
| 859 |
+ nmStatus = true; |
|
| 860 |
+ } |
|
| 861 |
+ |
|
| 862 |
+ if(tmpContents.indexOf("\#{1}") > -1){
|
|
| 863 |
+ |
|
| 864 |
+ rep1Status = true; |
|
| 865 |
+ } |
|
| 866 |
+ |
|
| 867 |
+ if(tmpContents.indexOf("\#{2}") > -1){
|
|
| 868 |
+ |
|
| 869 |
+ rep2Status = true; |
|
| 870 |
+ } |
|
| 871 |
+ |
|
| 872 |
+ if(tmpContents.indexOf("\#{3}") > -1){
|
|
| 873 |
+ |
|
| 874 |
+ rep3Status = true; |
|
| 875 |
+ } |
|
| 876 |
+ |
|
| 877 |
+ if(tmpContents.indexOf("\#{4}") > -1){
|
|
| 878 |
+ |
|
| 879 |
+ rep4Status = true; |
|
| 880 |
+ } |
|
| 881 |
+ |
|
| 882 |
+ //일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다. |
|
| 883 |
+ var name = tableL.getRows()[i].getData().name; |
|
| 884 |
+ var phone = removeDash(tableL.getRows()[i].getData().phone); |
|
| 885 |
+ var rep1 = tableL.getRows()[i].getData().rep1; |
|
| 886 |
+ var rep2 = tableL.getRows()[i].getData().rep2; |
|
| 887 |
+ var rep3 = tableL.getRows()[i].getData().rep3; |
|
| 888 |
+ var rep4 = tableL.getRows()[i].getData().rep4; |
|
| 889 |
+ var varValStr = ""; //¶ 구분자 |
|
| 890 |
+ |
|
| 891 |
+ if(phone == ""){
|
|
| 892 |
+ |
|
| 893 |
+ alert("수신 목록에 핸드폰 번호가 없는 항목이 있습니다.");
|
|
| 894 |
+ return false; |
|
| 895 |
+ |
|
| 896 |
+ }else if(!checkHpNum(phone)){
|
|
| 897 |
+ |
|
| 898 |
+ alert("수신 목록에 잘 못된 핸드폰 번호가 있습니다. 핸드폰 번호 : " + phone + " 입니다.");
|
|
| 899 |
+ return false; |
|
| 900 |
+ |
|
| 901 |
+ }else{
|
|
| 902 |
+ |
|
| 903 |
+ if(typeof(name) != 'undefined' && name != null && name !=""){
|
|
| 904 |
+ if(!emojiCheck(name)){//이모지 체크 해주기
|
|
| 905 |
+ return false; |
|
| 906 |
+ } |
|
| 907 |
+ |
|
| 908 |
+ //이름 치환변수가 있으면 저장 |
|
| 909 |
+ if(nmStatus){
|
|
| 910 |
+ //nameList[i] = name.replaceAll(",","§");
|
|
| 911 |
+ if(varValStr == ''){
|
|
| 912 |
+ |
|
| 913 |
+ varValStr = name.replaceAll(",","§");
|
|
| 914 |
+ }else{
|
|
| 915 |
+ |
|
| 916 |
+ varValStr = varValStr + "¶" + name.replaceAll(",","§");
|
|
| 917 |
+ |
|
| 918 |
+ } |
|
| 919 |
+ } |
|
| 920 |
+ }else{
|
|
| 921 |
+ if(nmStatus){
|
|
| 922 |
+ varValStatus = false; |
|
| 923 |
+ } |
|
| 924 |
+ } |
|
| 925 |
+ |
|
| 926 |
+ |
|
| 927 |
+ if(phone != '' && phone != null){
|
|
| 928 |
+ //연락처 변수 저장하기 |
|
| 929 |
+ phoneNum[i] = phone; |
|
| 930 |
+ if(varValStr == ''){
|
|
| 931 |
+ varValStr = phone; |
|
| 932 |
+ }else{
|
|
| 933 |
+ varValStr = varValStr + "¶" + phone; |
|
| 934 |
+ } |
|
| 935 |
+ }else{
|
|
| 936 |
+ varValStatus = false; |
|
| 937 |
+ } |
|
| 938 |
+ |
|
| 939 |
+ if(typeof(rep1) != 'undefined' && rep1 != null && rep1 !=""){
|
|
| 940 |
+ if(!emojiCheck(rep1)){//이모지 체크 해주기
|
|
| 941 |
+ return false; |
|
| 942 |
+ } |
|
| 943 |
+ |
|
| 944 |
+ if(rep1Status){
|
|
| 945 |
+ |
|
| 946 |
+ if(varValStr == ''){
|
|
| 947 |
+ //rep1List[i] = rep1.replaceAll(",","§");
|
|
| 948 |
+ varValStr = rep1.replaceAll(",","§");
|
|
| 949 |
+ }else{
|
|
| 950 |
+ //rep1List[i] = rep1.replaceAll(",","§");
|
|
| 951 |
+ varValStr = varValStr + "¶" + rep1.replaceAll(",","§");
|
|
| 952 |
+ } |
|
| 953 |
+ } |
|
| 954 |
+ }else{
|
|
| 955 |
+ if(rep1Status){
|
|
| 956 |
+ varValStatus = false; |
|
| 957 |
+ } |
|
| 958 |
+ } |
|
| 959 |
+ |
|
| 960 |
+ if(typeof(rep2) != 'undefined' && rep2 != null && rep2 !=""){
|
|
| 961 |
+ if(!emojiCheck(rep2)){//이모지 체크 해주기
|
|
| 962 |
+ return false; |
|
| 963 |
+ } |
|
| 964 |
+ |
|
| 965 |
+ if(rep2Status){
|
|
| 966 |
+ |
|
| 967 |
+ if(varValStr == ''){
|
|
| 968 |
+ varValStr = rep2.replaceAll(",","§");
|
|
| 969 |
+ }else{
|
|
| 970 |
+ //rep2List[i] = rep2.replaceAll(",","§");
|
|
| 971 |
+ varValStr = varValStr + "¶" + rep2.replaceAll(",","§");
|
|
| 972 |
+ } |
|
| 973 |
+ } |
|
| 974 |
+ }else{
|
|
| 975 |
+ if(rep2Status){
|
|
| 976 |
+ varValStatus = false; |
|
| 977 |
+ } |
|
| 978 |
+ } |
|
| 979 |
+ |
|
| 980 |
+ |
|
| 981 |
+ if(typeof(rep3) != 'undefined' && rep3 != null && rep3 !=""){
|
|
| 982 |
+ if(!emojiCheck(rep3)){//이모지 체크 해주기
|
|
| 983 |
+ return false; |
|
| 984 |
+ } |
|
| 985 |
+ |
|
| 986 |
+ if(rep3Status){
|
|
| 987 |
+ |
|
| 988 |
+ if(varValStr == ''){
|
|
| 989 |
+ varValStr = rep3.replaceAll(",","§");
|
|
| 990 |
+ }else{
|
|
| 991 |
+ //rep3List[i] = rep3.replaceAll(",","§");
|
|
| 992 |
+ varValStr = varValStr + "¶" + rep3.replaceAll(",","§");
|
|
| 993 |
+ } |
|
| 994 |
+ } |
|
| 995 |
+ }else{
|
|
| 996 |
+ if(rep3Status){
|
|
| 997 |
+ varValStatus = false; |
|
| 998 |
+ } |
|
| 999 |
+ } |
|
| 1000 |
+ |
|
| 1001 |
+ |
|
| 1002 |
+ if(typeof(rep4) != 'undefined' && rep4 != null && rep4 !=""){
|
|
| 1003 |
+ if(!emojiCheck(rep4)){//이모지 체크 해주기
|
|
| 1004 |
+ return false; |
|
| 1005 |
+ } |
|
| 1006 |
+ |
|
| 1007 |
+ if(rep4Status){
|
|
| 1008 |
+ |
|
| 1009 |
+ if(varValStr == ''){
|
|
| 1010 |
+ varValStr = rep4.replaceAll(",","§");
|
|
| 1011 |
+ }else{
|
|
| 1012 |
+ //rep4List[i] = rep4.replaceAll(",","§");
|
|
| 1013 |
+ varValStr = varValStr + "¶" + rep4.replaceAll(",","§");
|
|
| 1014 |
+ } |
|
| 1015 |
+ } |
|
| 1016 |
+ }else{
|
|
| 1017 |
+ if(rep4Status){
|
|
| 1018 |
+ varValStatus = false; |
|
| 1019 |
+ } |
|
| 1020 |
+ } |
|
| 1021 |
+ |
|
| 1022 |
+ } |
|
| 1023 |
+ |
|
| 1024 |
+ varValList[i] = varValStr; |
|
| 1025 |
+ |
|
| 1026 |
+ } |
|
| 1027 |
+ |
|
| 1028 |
+ }else{//치환문자가 없는 경우 휴대폰 번호만 입력
|
|
| 1029 |
+ |
|
| 1030 |
+ for(var i=0; i < selectedData.length; i++){
|
|
| 1031 |
+ |
|
| 1032 |
+ //일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다. |
|
| 1033 |
+ var phone = removeDash(tableL.getRows()[i].getData().phone); |
|
| 1034 |
+ |
|
| 1035 |
+ if(phone == ""){
|
|
| 1036 |
+ |
|
| 1037 |
+ alert("수신 목록에 핸드폰 번호가 없는 항목이 있습니다.");
|
|
| 1038 |
+ return false; |
|
| 1039 |
+ |
|
| 1040 |
+ }else if(!checkHpNum(phone)){
|
|
| 1041 |
+ |
|
| 1042 |
+ alert("수신 목록에 잘 못된 핸드폰 번호가 있습니다. 핸드폰 번호 : " + phone + " 입니다.");
|
|
| 1043 |
+ return false; |
|
| 1044 |
+ |
|
| 1045 |
+ }else{
|
|
| 1046 |
+ |
|
| 1047 |
+ phoneNum[i] = phone; |
|
| 1048 |
+ |
|
| 1049 |
+ } |
|
| 1050 |
+ |
|
| 1051 |
+ } |
|
| 1052 |
+ |
|
| 1053 |
+ } |
|
| 1054 |
+ |
|
| 1055 |
+ } |
|
| 1056 |
+ |
|
| 1057 |
+ //예약문자 시간 체크 |
|
| 1058 |
+ var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
|
|
| 1059 |
+ |
|
| 1060 |
+ if(reserYn == 'Y'){
|
|
| 1061 |
+ |
|
| 1062 |
+ var date = $(".resDate").val();//form.msgResDate.value;
|
|
| 1063 |
+ var hour = $("#msgResHour option:selected").val();
|
|
| 1064 |
+ var min = $("#msgResMin option:selected").val();
|
|
| 1065 |
+ |
|
| 1066 |
+ if(date == ""){
|
|
| 1067 |
+ |
|
| 1068 |
+ alert("예약전송 날짜를 선택해 주세요.");
|
|
| 1069 |
+ return false; |
|
| 1070 |
+ |
|
| 1071 |
+ }else{
|
|
| 1072 |
+ |
|
| 1073 |
+ var now = new Date(); |
|
| 1074 |
+ var reqDate = date + " " + hour + ":" + min + ":00"; |
|
| 1075 |
+ var gapDate = getGapDayTime(date, hour, min); |
|
| 1076 |
+ |
|
| 1077 |
+ if(gapDate < 0){ // 음수이면 이전날짜, 크면 이후 날짜.
|
|
| 1078 |
+ alert("예약 날짜는 현재 시간 이후의 날짜 및 시간을 선택해 주세요.");
|
|
| 1079 |
+ return false; |
|
| 1080 |
+ }else{
|
|
| 1081 |
+ $("#reqDate").val(reqDate); //예약일자 파라미터 저장
|
|
| 1082 |
+ } |
|
| 1083 |
+ } |
|
| 1084 |
+ |
|
| 1085 |
+ }else{
|
|
| 1086 |
+ |
|
| 1087 |
+ $("#reqDate").val(""); //예약일자 파라미터 저장
|
|
| 1088 |
+ |
|
| 1089 |
+ } |
|
| 1090 |
+ |
|
| 1091 |
+ |
|
| 1092 |
+ //대체문자 선택 및 내용 체크 |
|
| 1093 |
+ var subMsgSendYn = "N"; |
|
| 1094 |
+ |
|
| 1095 |
+ if($("#send_fail_check").is(":checked")){
|
|
| 1096 |
+ |
|
| 1097 |
+ subMsgSendYn = "Y"; |
|
| 1098 |
+ $("#subMsgSendYn").val("Y");
|
|
| 1099 |
+ |
|
| 1100 |
+ //대체문자 체크사항 함수 호출 |
|
| 1101 |
+ if(!fn_subMsgCheck()){
|
|
| 1102 |
+ |
|
| 1103 |
+ /* $("#send_fail_check").prop("checked", false);
|
|
| 1104 |
+ $(".replace_send_wrap").slideUp(400);
|
|
| 1105 |
+ // 초기화 버튼 클릭 |
|
| 1106 |
+ $('#failCheckInit').click();
|
|
| 1107 |
+ $('.send_top .send_right .phone').css({'top': '0','transition': 'top .4s linear'}); */
|
|
| 1108 |
+ return false; |
|
| 1109 |
+ |
|
| 1110 |
+ } |
|
| 1111 |
+ |
|
| 1112 |
+ }else{
|
|
| 1113 |
+ |
|
| 1114 |
+ subMsgSendYn = "N"; |
|
| 1115 |
+ $("#subMsgSendYn").val("N");
|
|
| 1116 |
+ |
|
| 1117 |
+ } |
|
| 1118 |
+ |
|
| 1119 |
+ //수신전화번호 목록 |
|
| 1120 |
+ $("#callToList").val(phoneNum);
|
|
| 1121 |
+ |
|
| 1122 |
+ //치환변수 데이터 정보 목록(수신번호 포함, tabulator 정보 모두 ) |
|
| 1123 |
+ $("#varValList").val(varValList);
|
|
| 1124 |
+ |
|
| 1125 |
+ //템플릿 내용 입력 |
|
| 1126 |
+ $("#templateContent").val(tmpContents);
|
|
| 1127 |
+ |
|
| 1128 |
+ //광고포함 여부 |
|
| 1129 |
+ var adFlag = $("input[name=ad_flag]:checked").val();
|
|
| 1130 |
+ $("#adFlag").val(adFlag);
|
|
| 1131 |
+ |
|
| 1132 |
+ //치환문자에 대한 데이터 누락 체크 |
|
| 1133 |
+ if(!varValStatus){
|
|
| 1134 |
+ |
|
| 1135 |
+ alert("특정문구 일괄변환에 대한 일부 데이터가 누락된 부분이 있습니다. 데이터를 확인해 주세요.");
|
|
| 1136 |
+ return false; |
|
| 1137 |
+ |
|
| 1138 |
+ } |
|
| 1139 |
+ |
|
| 1140 |
+ if(!confirm("친구톡을 발송하시겠습니까?")){
|
|
| 1141 |
+ |
|
| 1142 |
+ return false; |
|
| 1143 |
+ |
|
| 1144 |
+ } |
|
| 1145 |
+ |
|
| 1146 |
+ var spamChk = true; |
|
| 1147 |
+ |
|
| 1148 |
+ var spmData = new FormData(document.bizForm); |
|
| 1149 |
+ $.ajax({
|
|
| 1150 |
+ type: "POST" |
|
| 1151 |
+ , url: "/web/mjon/kakao/friendstalk/selectSpamKakaoFriendsTalkMsgChkAjax.do" |
|
| 1152 |
+ , data: spmData |
|
| 1153 |
+ , dataType:'json' |
|
| 1154 |
+ , async: false |
|
| 1155 |
+ , processData: false |
|
| 1156 |
+ , contentType: false |
|
| 1157 |
+ , cache: false |
|
| 1158 |
+ , success: function (returnData, status) {
|
|
| 1159 |
+ if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 1160 |
+ |
|
| 1161 |
+ if("fail" == returnData.result){
|
|
| 1162 |
+ alert(returnData.message); |
|
| 1163 |
+ spamChk = false; |
|
| 1164 |
+ return false; |
|
| 1165 |
+ }else if("loginFail" == returnData.result){
|
|
| 1166 |
+ alert(returnData.message); |
|
| 1167 |
+ spamChk = false; |
|
| 1168 |
+ return false; |
|
| 1169 |
+ }else if("spams" == returnData.result){
|
|
| 1170 |
+ //alert("전송 내용에 스팸문구가 포함되어 있습니다.")
|
|
| 1171 |
+ $("#spamStatus").val("Y");
|
|
| 1172 |
+ return false; |
|
| 1173 |
+ }else{
|
|
| 1174 |
+ spamChk = true; |
|
| 1175 |
+ return false; |
|
| 1176 |
+ } |
|
| 1177 |
+ |
|
| 1178 |
+ } else if(status== 'fail'){
|
|
| 1179 |
+ alert(returnData.message); |
|
| 1180 |
+ return false; |
|
| 1181 |
+ } |
|
| 1182 |
+ } |
|
| 1183 |
+ , error: function (e) {
|
|
| 1184 |
+ alert("문자 발송에 실패하였습니다.");
|
|
| 1185 |
+ console.log("ERROR : ", e);
|
|
| 1186 |
+ return false; |
|
| 1187 |
+ } |
|
| 1188 |
+ }); |
|
| 1189 |
+ |
|
| 1190 |
+ if(spamChk){
|
|
| 1191 |
+ var data = new FormData(document.bizForm); |
|
| 1192 |
+ $.ajax({
|
|
| 1193 |
+ type: "POST" |
|
| 1194 |
+ , url: "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do" |
|
| 1195 |
+ , data: data |
|
| 1196 |
+ , dataType: 'json' |
|
| 1197 |
+ , async: true |
|
| 1198 |
+ , processData: false |
|
| 1199 |
+ , contentType: false |
|
| 1200 |
+ , cache: false |
|
| 1201 |
+ , success: function (returnData, status) {
|
|
| 1202 |
+ if(status == 'success'){
|
|
| 1203 |
+ if("loginFail" == returnData.result){
|
|
| 1204 |
+ |
|
| 1205 |
+ alert(returnData.message); |
|
| 1206 |
+ return false; |
|
| 1207 |
+ |
|
| 1208 |
+ }else if('fail' == returnData.result){
|
|
| 1209 |
+ |
|
| 1210 |
+ alert(returnData.message); |
|
| 1211 |
+ return false; |
|
| 1212 |
+ |
|
| 1213 |
+ }else if('authFail' == returnData.result){
|
|
| 1214 |
+ |
|
| 1215 |
+ alert(returnData.message); |
|
| 1216 |
+ location.reload(); |
|
| 1217 |
+ |
|
| 1218 |
+ } else if(status == 'success'){
|
|
| 1219 |
+ |
|
| 1220 |
+ var kakaoSendCnt = returnData.resultSts; |
|
| 1221 |
+ |
|
| 1222 |
+ $('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
| 1223 |
+ |
|
| 1224 |
+ //예약발송 건의 경우 결과 팝업 문구 변경 |
|
| 1225 |
+ if(reserYn == 'Y'){
|
|
| 1226 |
+ $('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>친구톡이 예약 되었습니다.");
|
|
| 1227 |
+ }else{
|
|
| 1228 |
+ $('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>친구톡이 발송 되었습니다.");
|
|
| 1229 |
+ } |
|
| 1230 |
+ |
|
| 1231 |
+ $('.mask').addClass('on');
|
|
| 1232 |
+ } |
|
| 1233 |
+ } |
|
| 1234 |
+ } |
|
| 1235 |
+ ,beforeSend : function(xmlHttpRequest) {
|
|
| 1236 |
+ //로딩창 show |
|
| 1237 |
+ $('.loading_layer').addClass('active');
|
|
| 1238 |
+ } |
|
| 1239 |
+ ,complete : function(xhr, textStatus) {
|
|
| 1240 |
+ //로딩창 hide |
|
| 1241 |
+ $('.loading_layer').removeClass('active');
|
|
| 1242 |
+ } |
|
| 1243 |
+ ,error: function (e) {
|
|
| 1244 |
+ console.log("ERROR : ", e);
|
|
| 1245 |
+ alert("카카오 친구톡 전송에 실패하였습니다.");
|
|
| 1246 |
+ } |
|
| 1247 |
+ }); |
|
| 1248 |
+ } |
|
| 1249 |
+ |
|
| 1250 |
+} |
|
| 1251 |
+ |
|
| 1252 |
+ |
|
| 1253 |
+/** |
|
| 1254 |
+ * @description 대체문자 오류체크 funciton |
|
| 1255 |
+ */ |
|
| 1256 |
+function fn_errorChk(){
|
|
| 1257 |
+ |
|
| 1258 |
+ // 대체문자가 없을 시 return false; |
|
| 1259 |
+ if($('#txtReplYn').val() === 'N')
|
|
| 1260 |
+ {
|
|
| 1261 |
+ alert('오류가 없습니다.');
|
|
| 1262 |
+ return false; |
|
| 1263 |
+ } |
|
| 1264 |
+ |
|
| 1265 |
+ // 치환 부분 변수명만 추출 = 배열 |
|
| 1266 |
+ var varList = $("#inputTemplateContent").val().match(/#\{([^}]+)\}/g);
|
|
| 1267 |
+ |
|
| 1268 |
+ var smsTxt = $('#smsTxtArea').val();
|
|
| 1269 |
+ for(var i=0; i < varList.length; i++){
|
|
| 1270 |
+ if(smsTxt.indexOf(varList[i]) < 0){
|
|
| 1271 |
+ if(confirm(varList[i] + '값이 없습니다. 치환문자 없이 진행하시겠습니까?')){
|
|
| 1272 |
+ fn_insertErrorYN('Y');
|
|
| 1273 |
+ }; |
|
| 1274 |
+ return false; |
|
| 1275 |
+ } |
|
| 1276 |
+ smsTxt = smsTxt.replace(varList[i], ''); |
|
| 1277 |
+ }; |
|
| 1278 |
+ alert('오류가 없습니다.');
|
|
| 1279 |
+ fn_insertErrorYN('Y');
|
|
| 1280 |
+} |
|
| 1281 |
+ |
|
| 1282 |
+ |
|
| 1283 |
+function fn_insertErrorYN(val){
|
|
| 1284 |
+ $('#errorChk').val(val);
|
|
| 1285 |
+} |
|
| 1286 |
+ |
|
| 1287 |
+/* |
|
| 1288 |
+ *대체문자 필수 항목 체크 |
|
| 1289 |
+ * |
|
| 1290 |
+ **/ |
|
| 1291 |
+ |
|
| 1292 |
+function fn_subMsgCheck(){
|
|
| 1293 |
+ |
|
| 1294 |
+ if($('#callFromList').val() === ''){
|
|
| 1295 |
+ |
|
| 1296 |
+ if(confirm('대체문자 전송을 위한 발신번호가 등록되지 않았습니다. \n대체문자 발신번호를 지금 등록하시겠습니까?')){
|
|
| 1297 |
+ window.location="<c:out value='/web/user/sendNumberManage.do' />"; |
|
| 1298 |
+ } |
|
| 1299 |
+ $("#send_fail_check").prop("checked", false);
|
|
| 1300 |
+ |
|
| 1301 |
+ return false; |
|
| 1302 |
+ |
|
| 1303 |
+ }else{
|
|
| 1304 |
+ |
|
| 1305 |
+ //발신번호 입력 처리 |
|
| 1306 |
+ $("#callFrom").val(removeDash($('#callFromList').val()));
|
|
| 1307 |
+ |
|
| 1308 |
+ } |
|
| 1309 |
+ |
|
| 1310 |
+ if($("#smsTxtArea").val() === ''){
|
|
| 1311 |
+ |
|
| 1312 |
+ alert("대체문자 내용을 입력해 주세요.");
|
|
| 1313 |
+ return false; |
|
| 1314 |
+ |
|
| 1315 |
+ }else{//대체문자에 치환문자 여부 체크
|
|
| 1316 |
+ |
|
| 1317 |
+ var smsTxtArea = $("#smsTxtArea").val();
|
|
| 1318 |
+ var replStatus = false; |
|
| 1319 |
+ |
|
| 1320 |
+ if(smsTxtArea.indexOf("\#{이름}") > -1){
|
|
| 1321 |
+ replStatus = true; |
|
| 1322 |
+ } |
|
| 1323 |
+ |
|
| 1324 |
+ if(smsTxtArea.indexOf("\#{1}") > -1){
|
|
| 1325 |
+ replStatus = true; |
|
| 1326 |
+ } |
|
| 1327 |
+ |
|
| 1328 |
+ if(smsTxtArea.indexOf("\#{2}") > -1){
|
|
| 1329 |
+ replStatus = true; |
|
| 1330 |
+ } |
|
| 1331 |
+ |
|
| 1332 |
+ if(smsTxtArea.indexOf("\#{3}") > -1){
|
|
| 1333 |
+ replStatus = true; |
|
| 1334 |
+ } |
|
| 1335 |
+ |
|
| 1336 |
+ if(smsTxtArea.indexOf("\#{4}") > -1){
|
|
| 1337 |
+ replStatus = true; |
|
| 1338 |
+ } |
|
| 1339 |
+ |
|
| 1340 |
+ if(replStatus){
|
|
| 1341 |
+ $("#subMsgTxtReplYn").val("Y");
|
|
| 1342 |
+ }else{
|
|
| 1343 |
+ $("#subMsgTxtReplYn").val("N");
|
|
| 1344 |
+ } |
|
| 1345 |
+ |
|
| 1346 |
+ $("#subMsgTxt").val(smsTxtArea);
|
|
| 1347 |
+ |
|
| 1348 |
+ } |
|
| 1349 |
+ |
|
| 1350 |
+ |
|
| 1351 |
+ |
|
| 1352 |
+ return true; |
|
| 1353 |
+ |
|
| 1354 |
+} |
|
| 1355 |
+ |
|
| 1356 |
+//문자 바이트수 계산하기 함수 |
|
| 1357 |
+function thisFnByteString(contents){
|
|
| 1358 |
+ var totalByte = 0; |
|
| 1359 |
+ //var content = contents; |
|
| 1360 |
+ var adverYn = $("input[name='send_adYn']:checked").val();
|
|
| 1361 |
+ var adTxtLeng = 0; |
|
| 1362 |
+ var denyTxtLeng = 0; |
|
| 1363 |
+ |
|
| 1364 |
+ $('#msgLeng').html("");
|
|
| 1365 |
+ $('#limitLeng').html("");
|
|
| 1366 |
+ var conLeng = conByteLeng(contents); // 내용 문자 입력 바이트 수 계산하기 |
|
| 1367 |
+ |
|
| 1368 |
+ |
|
| 1369 |
+ $('#msgLeng').text(conLeng);
|
|
| 1370 |
+ |
|
| 1371 |
+ //문자 길이 변수에 저장해주기 |
|
| 1372 |
+ $('#smsLen').val(conLeng);
|
|
| 1373 |
+ |
|
| 1374 |
+ |
|
| 1375 |
+ if(conLeng > 90){
|
|
| 1376 |
+ |
|
| 1377 |
+ $('#msgLeng').html(conLeng + " / ");
|
|
| 1378 |
+ $('#limitLeng').html("2000");
|
|
| 1379 |
+ $('.msg_com').html("장문");
|
|
| 1380 |
+ $('#msgType').val("6"); // 메세지 타입 설정
|
|
| 1381 |
+ |
|
| 1382 |
+ $('.msg_com').removeClass("msg_short"); //단문 클래스 삭제하고
|
|
| 1383 |
+ $('.put_left').removeClass("short"); //내용 입력 박스 클래스 삭제
|
|
| 1384 |
+ $('.msg_com').addClass("msg_long"); // 장문 클래스 삽입
|
|
| 1385 |
+ $("#subMsgType").val("LMS");
|
|
| 1386 |
+ |
|
| 1387 |
+ }else{
|
|
| 1388 |
+ |
|
| 1389 |
+ $('#msgLeng').html(conLeng + " / ");
|
|
| 1390 |
+ $('#limitLeng').html("90");
|
|
| 1391 |
+ $('.msg_com').html("단문");
|
|
| 1392 |
+ $('#msgType').val("4"); // 메세지 타입 설정
|
|
| 1393 |
+ $('.msg_com').removeClass("msg_long"); //단문 클래스 삭제하고
|
|
| 1394 |
+ $('.put_left').removeClass("long"); //내용 입력 박스 클래스 삭제
|
|
| 1395 |
+ $('.msg_com').addClass("msg_short"); // 장문 클래스 삽입
|
|
| 1396 |
+ $("#subMsgType").val("SMS");
|
|
| 1397 |
+ |
|
| 1398 |
+ } |
|
| 1399 |
+ |
|
| 1400 |
+} |
|
| 1401 |
+ |
|
| 1402 |
+function msgSuccessClose(obj){
|
|
| 1403 |
+ $(obj).closest('.pop_msg_success').attr('style','');
|
|
| 1404 |
+ location.reload(true); |
|
| 1405 |
+ $('html').scrollTop(0);
|
|
| 1406 |
+} |
|
| 1407 |
+ |
|
| 1408 |
+function getFtImageType(imgChk){
|
|
| 1409 |
+ |
|
| 1410 |
+ if(imgChk == 'I' || imgChk == 'W'){
|
|
| 1411 |
+ |
|
| 1412 |
+ var imgTitle = $("#imgTitle").val();
|
|
| 1413 |
+ var imgLink = $("#imgLink").val();
|
|
| 1414 |
+ var imgFileName = $("#imageFileName").val();
|
|
| 1415 |
+ |
|
| 1416 |
+ if(imgTitle == ''){
|
|
| 1417 |
+ |
|
| 1418 |
+ alert("친구톡 이미지 제목정보를 입력해 주세요.");
|
|
| 1419 |
+ return false; |
|
| 1420 |
+ |
|
| 1421 |
+ } |
|
| 1422 |
+ |
|
| 1423 |
+ if(imgLink == ''){
|
|
| 1424 |
+ |
|
| 1425 |
+ alert("친구톡 이미지 선택시 이동할 링크 주소를 입력해 주세요.");
|
|
| 1426 |
+ return false; |
|
| 1427 |
+ |
|
| 1428 |
+ } |
|
| 1429 |
+ |
|
| 1430 |
+ if(imgFileName == ''){
|
|
| 1431 |
+ |
|
| 1432 |
+ alert("친구톡 이미지를 등록해 주세요.");
|
|
| 1433 |
+ return false; |
|
| 1434 |
+ |
|
| 1435 |
+ } |
|
| 1436 |
+ |
|
| 1437 |
+ $("#imageType").val(imgChk);
|
|
| 1438 |
+ |
|
| 1439 |
+ //json 파일 필요 유무 셋팅 |
|
| 1440 |
+ $("#bizJsonYn").val("Y");
|
|
| 1441 |
+ } |
|
| 1442 |
+ |
|
| 1443 |
+ return true; |
|
| 1444 |
+ |
|
| 1445 |
+} |
|
| 1446 |
+ |
|
| 1447 |
+ |
|
| 1448 |
+function goToKakaoTestPopUp(){
|
|
| 1449 |
+ |
|
| 1450 |
+ if(loginVO == "" || loginVO == null){
|
|
| 1451 |
+ alert("테스트 발송 서비스는 로그인 후 이용 가능합니다.");
|
|
| 1452 |
+ location.href="<c:url value='/web/user/login/login.do'/>"; |
|
| 1453 |
+ return false; |
|
| 1454 |
+ } |
|
| 1455 |
+ |
|
| 1456 |
+ //기업회원 체크 |
|
| 1457 |
+ if(!usrDeptChk()){
|
|
| 1458 |
+ return false; |
|
| 1459 |
+ } |
|
| 1460 |
+ |
|
| 1461 |
+ var form = document.bizForm; |
|
| 1462 |
+ var senderKey = $("#selectAgentCode option:checked").val();
|
|
| 1463 |
+ var yellowId = $("#selectAgentCode option:checked").text();
|
|
| 1464 |
+ |
|
| 1465 |
+ if(senderKey == ''){
|
|
| 1466 |
+ alert("채널ID를 선택해 주세요.");
|
|
| 1467 |
+ return false; |
|
| 1468 |
+ }else{
|
|
| 1469 |
+ $("#inputSenderKey").val(senderKey);
|
|
| 1470 |
+ $("#yellowId").val(yellowId);
|
|
| 1471 |
+ } |
|
| 1472 |
+ |
|
| 1473 |
+ var imgChk = $("input[name=img_file_add]:checked").val();
|
|
| 1474 |
+ if(!getFtImageType(imgChk)){
|
|
| 1475 |
+ return false; |
|
| 1476 |
+ } |
|
| 1477 |
+ |
|
| 1478 |
+ //템플릿 버튼 갯수 체크 |
|
| 1479 |
+ var buttonCnt = $(".btn_kakao_type").length;
|
|
| 1480 |
+ |
|
| 1481 |
+ if(buttonCnt > 0){
|
|
| 1482 |
+ //json 파일 필요 유무 셋팅 |
|
| 1483 |
+ $("#bizJsonYn").val("Y");
|
|
| 1484 |
+ } |
|
| 1485 |
+ |
|
| 1486 |
+ //친구톡 내용 체크 |
|
| 1487 |
+ var tmpContents = $('#inputTemplateContent').val();
|
|
| 1488 |
+ |
|
| 1489 |
+ if(tmpContents == ""){
|
|
| 1490 |
+ |
|
| 1491 |
+ alert("친구톡 내용을 입력해 주세요.");
|
|
| 1492 |
+ return false; |
|
| 1493 |
+ |
|
| 1494 |
+ }else{
|
|
| 1495 |
+ |
|
| 1496 |
+ //템플릿 내용 입력 |
|
| 1497 |
+ $("#templateContent").val(tmpContents);
|
|
| 1498 |
+ |
|
| 1499 |
+ } |
|
| 1500 |
+ |
|
| 1501 |
+ var rtnStr = strChinJpnCheck(tmpContents); |
|
| 1502 |
+ |
|
| 1503 |
+ //문자내용에 이모지가 있는지 체크 |
|
| 1504 |
+ if(!emojiCheck(tmpContents)) return false; |
|
| 1505 |
+ |
|
| 1506 |
+ if(rtnStr.length > 0){
|
|
| 1507 |
+ |
|
| 1508 |
+ alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다.");
|
|
| 1509 |
+ |
|
| 1510 |
+ } |
|
| 1511 |
+ |
|
| 1512 |
+ |
|
| 1513 |
+ var selectedData = tableL.getRows(); |
|
| 1514 |
+ |
|
| 1515 |
+ if(selectedData == "" || selectedData == null){
|
|
| 1516 |
+ |
|
| 1517 |
+ alert("받는사람 주소를 한 건 이상 입력해주세요.");
|
|
| 1518 |
+ return false; |
|
| 1519 |
+ |
|
| 1520 |
+ }else{
|
|
| 1521 |
+ |
|
| 1522 |
+ //치환문구 변환 |
|
| 1523 |
+ var txtReplYn = $("#txtReplYn").val();
|
|
| 1524 |
+ |
|
| 1525 |
+ if(txtReplYn == 'Y'){
|
|
| 1526 |
+ |
|
| 1527 |
+ var name = tableL.getRows()[0].getData().name; |
|
| 1528 |
+ var phone = removeDash(tableL.getRows()[0].getData().phone); |
|
| 1529 |
+ var rep1 = tableL.getRows()[0].getData().rep1; |
|
| 1530 |
+ var rep2 = tableL.getRows()[0].getData().rep2; |
|
| 1531 |
+ var rep3 = tableL.getRows()[0].getData().rep3; |
|
| 1532 |
+ var rep4 = tableL.getRows()[0].getData().rep4; |
|
| 1533 |
+ |
|
| 1534 |
+ var varValList = []; //치환문자 연결시킬 변수 셋팅 |
|
| 1535 |
+ |
|
| 1536 |
+ |
|
| 1537 |
+ var nmStatus = false; |
|
| 1538 |
+ var rep1Status = false; |
|
| 1539 |
+ var rep2Status = false; |
|
| 1540 |
+ var rep3Status = false; |
|
| 1541 |
+ var rep4Status = false; |
|
| 1542 |
+ |
|
| 1543 |
+ var varValStr = ""; |
|
| 1544 |
+ var varValStatus = true; |
|
| 1545 |
+ |
|
| 1546 |
+ |
|
| 1547 |
+ if(tmpContents.indexOf("\#{이름}") > -1){
|
|
| 1548 |
+ nmStatus = true; |
|
| 1549 |
+ } |
|
| 1550 |
+ |
|
| 1551 |
+ if(tmpContents.indexOf("\#{1}") > -1){
|
|
| 1552 |
+ rep1Status = true; |
|
| 1553 |
+ } |
|
| 1554 |
+ |
|
| 1555 |
+ if(tmpContents.indexOf("\#{2}") > -1){
|
|
| 1556 |
+ rep2Status = true; |
|
| 1557 |
+ } |
|
| 1558 |
+ |
|
| 1559 |
+ if(tmpContents.indexOf("\#{3}") > -1){
|
|
| 1560 |
+ rep3Status = true; |
|
| 1561 |
+ } |
|
| 1562 |
+ |
|
| 1563 |
+ if(tmpContents.indexOf("\#{4}") > -1){
|
|
| 1564 |
+ rep4Status = true; |
|
| 1565 |
+ } |
|
| 1566 |
+ |
|
| 1567 |
+ |
|
| 1568 |
+ if(nmStatus && (typeof(name) != 'undefined' && name != null && name !="")){
|
|
| 1569 |
+ |
|
| 1570 |
+ if(varValStr == ''){
|
|
| 1571 |
+ varValStr = name.replaceAll(",","§");
|
|
| 1572 |
+ }else{
|
|
| 1573 |
+ varValStr = varValStr + "¶" + name.replaceAll(",","§");
|
|
| 1574 |
+ } |
|
| 1575 |
+ |
|
| 1576 |
+ }else{
|
|
| 1577 |
+ |
|
| 1578 |
+ if(nmStatus){
|
|
| 1579 |
+ varValStatus = false; |
|
| 1580 |
+ } |
|
| 1581 |
+ |
|
| 1582 |
+ } |
|
| 1583 |
+ |
|
| 1584 |
+ if(varValStr == ''){
|
|
| 1585 |
+ varValStr = phone; |
|
| 1586 |
+ }else{
|
|
| 1587 |
+ varValStr = varValStr + "¶" + phone; |
|
| 1588 |
+ } |
|
| 1589 |
+ |
|
| 1590 |
+ if(rep1Status && (typeof(rep1) != 'undefined' && rep1 != null && rep1 !="")){
|
|
| 1591 |
+ |
|
| 1592 |
+ if(varValStr == ''){
|
|
| 1593 |
+ varValStr = rep1.replaceAll(",","§");
|
|
| 1594 |
+ }else{
|
|
| 1595 |
+ varValStr = varValStr + "¶" + rep1.replaceAll(",","§");
|
|
| 1596 |
+ } |
|
| 1597 |
+ |
|
| 1598 |
+ }else{
|
|
| 1599 |
+ |
|
| 1600 |
+ if(rep1Status){
|
|
| 1601 |
+ varValStatus = false; |
|
| 1602 |
+ } |
|
| 1603 |
+ |
|
| 1604 |
+ } |
|
| 1605 |
+ |
|
| 1606 |
+ |
|
| 1607 |
+ if(rep2Status && (typeof(rep2) != 'undefined' && rep2 != null && rep2 !="")){
|
|
| 1608 |
+ |
|
| 1609 |
+ if(varValStr == ''){
|
|
| 1610 |
+ varValStr = rep2.replaceAll(",","§");
|
|
| 1611 |
+ }else{
|
|
| 1612 |
+ varValStr = varValStr + "¶" + rep2.replaceAll(",","§");
|
|
| 1613 |
+ } |
|
| 1614 |
+ |
|
| 1615 |
+ }else{
|
|
| 1616 |
+ |
|
| 1617 |
+ if(rep2Status){
|
|
| 1618 |
+ varValStatus = false; |
|
| 1619 |
+ } |
|
| 1620 |
+ |
|
| 1621 |
+ } |
|
| 1622 |
+ |
|
| 1623 |
+ if(rep3Status && (typeof(rep3) != 'undefined' && rep3 != null && rep3 !="")){
|
|
| 1624 |
+ |
|
| 1625 |
+ if(varValStr == ''){
|
|
| 1626 |
+ varValStr = rep3.replaceAll(",","§");
|
|
| 1627 |
+ }else{
|
|
| 1628 |
+ varValStr = varValStr + "¶" + rep3.replaceAll(",","§");
|
|
| 1629 |
+ } |
|
| 1630 |
+ |
|
| 1631 |
+ }else{
|
|
| 1632 |
+ |
|
| 1633 |
+ if(rep3Status){
|
|
| 1634 |
+ varValStatus = false; |
|
| 1635 |
+ } |
|
| 1636 |
+ |
|
| 1637 |
+ } |
|
| 1638 |
+ |
|
| 1639 |
+ if(rep4Status && (typeof(rep4) != 'undefined' && rep4 != null && rep4 !="")){
|
|
| 1640 |
+ |
|
| 1641 |
+ if(varValStr == ''){
|
|
| 1642 |
+ varValStr = rep4.replaceAll(",","§");
|
|
| 1643 |
+ }else{
|
|
| 1644 |
+ varValStr = varValStr + "¶" + rep4.replaceAll(",","§");
|
|
| 1645 |
+ } |
|
| 1646 |
+ |
|
| 1647 |
+ }else{
|
|
| 1648 |
+ |
|
| 1649 |
+ if(rep4Status){
|
|
| 1650 |
+ varValStatus = false; |
|
| 1651 |
+ } |
|
| 1652 |
+ |
|
| 1653 |
+ } |
|
| 1654 |
+ |
|
| 1655 |
+ if(!varValStatus){
|
|
| 1656 |
+ |
|
| 1657 |
+ alert("특정문구 일괄변환에 대한 일부 데이터가 누락된 부분이 있습니다. 데이터를 확인해 주세요.");
|
|
| 1658 |
+ return false; |
|
| 1659 |
+ |
|
| 1660 |
+ } |
|
| 1661 |
+ |
|
| 1662 |
+ varValList[0] = varValStr; |
|
| 1663 |
+ |
|
| 1664 |
+ $("#varValList").val(varValList);
|
|
| 1665 |
+ } |
|
| 1666 |
+ |
|
| 1667 |
+ } |
|
| 1668 |
+ |
|
| 1669 |
+ form.method = "post"; |
|
| 1670 |
+ window.open("about:blank", 'testSendPop', 'width=770, height=850, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
|
|
| 1671 |
+ form.target = "testSendPop"; |
|
| 1672 |
+ form.action = "/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do"; |
|
| 1673 |
+ form.submit(); |
|
| 1674 |
+} |
|
| 1675 |
+ |
|
| 1676 |
+ |
|
| 1677 |
+function msgResultLink(){
|
|
| 1678 |
+ var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
|
|
| 1679 |
+ if(reserYn == 'Y'){
|
|
| 1680 |
+ |
|
| 1681 |
+ location.href="/web/mjon/reservmsg/selectReservKaKaoView.do"; |
|
| 1682 |
+ |
|
| 1683 |
+ }else{
|
|
| 1684 |
+ location.href="/web/kakao/sent/selectKakaoSentView.do"; |
|
| 1685 |
+ } |
|
| 1686 |
+} |
|
| 1687 |
+ |
|
| 348 | 1688 |
</script> |
| 349 | 1689 |
|
| 350 | 1690 |
<!-- 로딩바 --> |
... | ... | @@ -365,11 +1705,62 @@ |
| 365 | 1705 |
<h2>친구톡 전송</h2> |
| 366 | 1706 |
<button type="button" class="button info">친구톡 사용방법</button> |
| 367 | 1707 |
</div> |
| 1708 |
+ |
|
| 1709 |
+ <!-- 유저 보유잔액 --> |
|
| 1710 |
+ <input type="hidden" id="oriUserMoney" value="<c:out value='${userMoney}' />">
|
|
| 1711 |
+ |
|
| 1712 |
+ <!-- 각 금액 단가 --> |
|
| 1713 |
+ <input type="hidden" id="kakaoFtPrice" value="<c:out value='${sendPrice.kakaoFtPrice}' />"> <!-- 친구톡 단가 -->
|
|
| 1714 |
+ <input type="hidden" id="longPrice" value="<c:out value='${sendPrice.longPrice}' />"> <!-- mms 단가 -->
|
|
| 1715 |
+ <input type="hidden" id="shortPrice" value="<c:out value='${sendPrice.shortPrice}' />"> <!-- sms 단가 -->
|
|
| 1716 |
+ |
|
| 368 | 1717 |
<form id="bizForm" name="bizForm" method="multipart/form-data"> |
| 369 |
- <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf"> |
|
| 370 |
- <input type="hidden" id="imageType" name="imageType" value=""/> |
|
| 371 |
- <input type="hidden" id="inputSenderKey" name="senderKey" value=""/> |
|
| 372 |
- <input type="hidden" id="templateImageUrl" name="templateImageUrl" value=""> |
|
| 1718 |
+ <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabFriend"> |
|
| 1719 |
+ <input type="hidden" id="imageType" name="imageType" value="<c:out value='${resultTemplateVO.imageType}'/>"/>
|
|
| 1720 |
+ <input type="hidden" id="inputSenderKey" name="senderKey" value="<c:out value='${resultTemplateVO.senderKey}'/>"/>
|
|
| 1721 |
+ <input type="hidden" id="imageFileName" name="imageFileName" value="<c:out value='${resultTemplateVO.imageFileName}'/>">
|
|
| 1722 |
+ <input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${resultTemplateVO.templateImageUrl}'/>">
|
|
| 1723 |
+ <input type="hidden" id="tmpFriendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>">
|
|
| 1724 |
+ <input type="hidden" id="templateName" name="templateName" value=""/> |
|
| 1725 |
+ <input type="hidden" id="adFlag" name="adFlag" value="N"/> |
|
| 1726 |
+ <input type="hidden" id="templateContent" name="templateContent" value=""/> |
|
| 1727 |
+ |
|
| 1728 |
+ <!-- 예약발송 여부 --> |
|
| 1729 |
+ <input type="hidden" id="reserveYn" name="reserveYn" value="N"/> |
|
| 1730 |
+ <input type="hidden" id="reqDate" name="reqDate" value=""/> |
|
| 1731 |
+ |
|
| 1732 |
+ <!-- 변환문자 유무 --> |
|
| 1733 |
+ <input type="hidden" id="txtReplYn" name="txtReplYn" value="N"/> |
|
| 1734 |
+ <input type="hidden" id="varValList" name="varValList" value=""/> |
|
| 1735 |
+ |
|
| 1736 |
+ <!-- 수신목록 --> |
|
| 1737 |
+ <input type="hidden" id="callToList" name="callToList" value=""/> |
|
| 1738 |
+ |
|
| 1739 |
+ <!-- 스팸 문구 유무 --> |
|
| 1740 |
+ <input type="hidden" id="spamStatus" name="spamStatus" value="N"/> |
|
| 1741 |
+ <input type="hidden" id="atSmishingYn" name="atSmishingYn" value="<c:out value='${atSmishingYn}' />"/>
|
|
| 1742 |
+ |
|
| 1743 |
+ <!-- 오류 체크 --> |
|
| 1744 |
+ <input type="hidden" id="errorChk" name="errorChk" value="N"/> |
|
| 1745 |
+ |
|
| 1746 |
+ <!-- 대체문자 여부 --> |
|
| 1747 |
+ <input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N"/> |
|
| 1748 |
+ <input type="hidden" id="subMsgType" name="subMsgType" value="SMS"/> |
|
| 1749 |
+ <input type="hidden" id="subMsgTxtReplYn" name="subMsgTxtReplYn" value="N"/> |
|
| 1750 |
+ <input type="hidden" id="subMsgTxt" name="subMsgTxt" value=""/> |
|
| 1751 |
+ |
|
| 1752 |
+ <!-- 발신번호정보 --> |
|
| 1753 |
+ <input type="hidden" id="callFrom" name="callFrom" value=""/> |
|
| 1754 |
+ |
|
| 1755 |
+ <!-- 친구톡 발송 단가 정보 --> |
|
| 1756 |
+ <input type="hidden" id="kakaoFtPrice" name="kakaoFtPrice" value="<c:out value='${sendPrice.kakaoFtPrice}' />"/>
|
|
| 1757 |
+ <input type="hidden" id="eachPrice" name="eachPrice" value="0"/> |
|
| 1758 |
+ <input type="hidden" id="totPrice" name="totalPrice" value="0"/> |
|
| 1759 |
+ |
|
| 1760 |
+ <!-- 친구톡 발송 json 파일 필요 유무 --> |
|
| 1761 |
+ <input type="hidden" id="bizJsonYn" name="bizJsonYn" value="N"/> |
|
| 1762 |
+ |
|
| 1763 |
+ <input type="hidden" id="yellowId" name="yellowId" value=""/> |
|
| 373 | 1764 |
|
| 374 | 1765 |
|
| 375 | 1766 |
<div class="send_general friend_talk_wrap kakao_wrap"> |
... | ... | @@ -383,22 +1774,29 @@ |
| 383 | 1774 |
<tr> |
| 384 | 1775 |
<th>채널ID</th> |
| 385 | 1776 |
<td> |
| 386 |
- <label for="" class="채널ID 선택"></label> |
|
| 1777 |
+ <label for="selectAgentCode" class="채널ID 선택"></label> |
|
| 387 | 1778 |
<select class="select_gray_type" name="selectAgentCode" id="selectAgentCode" onchange="javascript:fnAgentCodeChg();"> |
| 388 | 1779 |
<option value="">채널ID 선택</option> |
| 389 | 1780 |
<c:forEach var="kakaoProfileInfo" items="${resultProfileList}" varStatus="status">
|
| 390 |
- <option value="${kakaoProfileInfo.senderKey}"><c:out value='${kakaoProfileInfo.yellowId}'/></option>
|
|
| 1781 |
+ <option value="${kakaoProfileInfo.senderKey}" <c:if test="${kakaoProfileInfo.senderKey eq resultTemplateVO.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option>
|
|
| 391 | 1782 |
</c:forEach> |
| 392 | 1783 |
</select> |
| 393 | 1784 |
</td> |
| 394 | 1785 |
</tr> |
| 395 | 1786 |
<tr> |
| 1787 |
+ <th>템플릿명</th> |
|
| 1788 |
+ <td> |
|
| 1789 |
+ <input type="text" class="template_name" id="inputTemplateName" name="inputTemplateName" value="<c:out value='${resultTemplateVO.templateName}'/>" placeholder="템플릿명을 입력해주세요. (최대 50자)">
|
|
| 1790 |
+ <p class="template_name_cf">최대 50자, 템플릿 관리용</p> |
|
| 1791 |
+ </td> |
|
| 1792 |
+ </tr> |
|
| 1793 |
+ <tr> |
|
| 396 | 1794 |
<th>이미지 첨부</th> |
| 397 | 1795 |
<td> |
| 398 | 1796 |
<div class="img_sort_wrap"> |
| 399 |
- <input type="radio" name="img_file_add" id="img_file_0" value="" checked> <label for="img_file_0">첨부안함</label> |
|
| 400 |
- <input type="radio" name="img_file_add" id="img_file_1" value="I"> <label for="img_file_1">이미지 첨부</label> |
|
| 401 |
- <input type="radio" name="img_file_add" id="img_file_2" value="W"> <label for="img_file_2">와이드 이미지 첨부</label> |
|
| 1797 |
+ <input type="radio" name="img_file_add" id="img_file_0" value="" <c:if test="${resultTemplateVO.imageType eq ''}">checked</c:if> > <label for="img_file_0">첨부안함</label>
|
|
| 1798 |
+ <input type="radio" name="img_file_add" id="img_file_1" value="I" <c:if test="${resultTemplateVO.imageType eq 'I'}">checked</c:if> > <label for="img_file_1">이미지 첨부</label>
|
|
| 1799 |
+ <input type="radio" name="img_file_add" id="img_file_2" value="W" <c:if test="${resultTemplateVO.imageType eq 'W'}">checked</c:if> > <label for="img_file_2">와이드 이미지 첨부</label>
|
|
| 402 | 1800 |
<div class="img_add_info_wrap basic_img_add_wrap"> |
| 403 | 1801 |
<p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p> |
| 404 | 1802 |
<ul class="info_text"> |
... | ... | @@ -422,11 +1820,11 @@ |
| 422 | 1820 |
<ul class="img_file_info_wrap"> |
| 423 | 1821 |
<li> |
| 424 | 1822 |
<p>이미지 제목</p> |
| 425 |
- <input type="text" id="imgTitle" name="imgTitle" class="img_url" maxLength="50"> |
|
| 1823 |
+ <input type="text" id="imgTitle" name="imgTitle" value="<c:out value='${resultTemplateVO.imgTitle}'/>" class="img_url" maxLength="50">
|
|
| 426 | 1824 |
</li> |
| 427 | 1825 |
<li> |
| 428 | 1826 |
<p>이미지 클릭시 이동할 URL</p> |
| 429 |
- <input type="text" id="imgLink" name="imgLink" placeholder="http://" class="img_url" maxLength="1000"> |
|
| 1827 |
+ <input type="text" id="imgLink" name="imgLink" value="<c:out value='${resultTemplateVO.imgLink}'/>" placeholder="http://" class="img_url" maxLength="1000">
|
|
| 430 | 1828 |
</li> |
| 431 | 1829 |
<li> |
| 432 | 1830 |
<p class="file_name" id="imgNm" name="imgNm">첨부파일 이미지</p> |
... | ... | @@ -443,21 +1841,20 @@ |
| 443 | 1841 |
<tr> |
| 444 | 1842 |
<th>광고포함 여부</th> |
| 445 | 1843 |
<td> |
| 446 |
- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" checked><label for="ad_Y">광고성 정보 포함</label> |
|
| 447 |
- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N"><label for="ad_N">포함 안함</label> |
|
| 1844 |
+ <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label>
|
|
| 1845 |
+ <%-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N" <c:if test="${resultTemplateVO.adFlag eq 'N'}">checked</c:if> ><label for="ad_N">포함 안함</label> --%>
|
|
| 448 | 1846 |
</td> |
| 449 | 1847 |
</tr> |
| 450 | 1848 |
<tr> |
| 451 | 1849 |
<th>내용</th> |
| 452 | 1850 |
<td class="kakao_template_text"> |
| 453 | 1851 |
<div class="put_left short"> |
| 454 |
- <input type="text" class="template_name" placeholder="템플릿명을 입력해주세요. (최대 50자)"> |
|
| 455 | 1852 |
<div class="put_text_wrap"> |
| 456 | 1853 |
<div class="ad_txt"> |
| 457 | 1854 |
<p><span id="adFlagFront">(광고)</span> <span id="yellowIdCon" >채널ID</span></p> |
| 458 | 1855 |
</div> |
| 459 | 1856 |
<label for="inputTemplateContent" class="label"></label> |
| 460 |
- <textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."></textarea> |
|
| 1857 |
+ <textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."><c:out value="${resultTemplateVO.templateContent}"/></textarea>
|
|
| 461 | 1858 |
<div class="text_length"> |
| 462 | 1859 |
<div> |
| 463 | 1860 |
<p class="adFlagAfter">수신거부 : 홈 > 채널차단</p> |
... | ... | @@ -563,7 +1960,7 @@ |
| 563 | 1960 |
<p>주소록, 엑셀에 입력된 내용을 이용해 수신자마다 다른 내용의 메시지를 발송하는 기능</p> |
| 564 | 1961 |
</div> |
| 565 | 1962 |
<div class="convers_middle"> |
| 566 |
- <a href="#"><c:out value="\#{이름}"/></a>
|
|
| 1963 |
+ <a href="javascript:void(0)" class="changeWord" value="\#{이름}"><c:out value="\#{이름}"/></a>
|
|
| 567 | 1964 |
</div> |
| 568 | 1965 |
<div class="convers_bottom"> |
| 569 | 1966 |
<a href="javascript:void(0)" class="changeWord" value="\#{1}"><c:out value="\#{1}"/></a>
|
... | ... | @@ -578,134 +1975,30 @@ |
| 578 | 1975 |
<div class="btn_popup_wrap spc_wrap"> |
| 579 | 1976 |
<button type="button" class="btnType btnType7" onclick="miniPopup(this)">이모티콘</button> |
| 580 | 1977 |
<div class="send_miniPop spc_character kakao_emoticon"> |
| 581 |
- <div class="cnt_character"> |
|
| 582 |
- <div class="box_character"> |
|
| 583 |
- <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a> |
|
| 584 |
- <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a> |
|
| 585 |
- <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a> |
|
| 586 |
- <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a> |
|
| 587 |
- <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a> |
|
| 588 |
- <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a> |
|
| 589 |
- <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a> |
|
| 590 |
- <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a> |
|
| 591 |
- <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a> |
|
| 592 |
- <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a> |
|
| 593 |
- <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a> |
|
| 594 |
- <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a> |
|
| 595 |
- <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a> |
|
| 596 |
- <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a> |
|
| 597 |
- <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a> |
|
| 598 |
- <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a> |
|
| 599 |
- <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a> |
|
| 600 |
- <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a> |
|
| 601 |
- <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a> |
|
| 602 |
- <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a> |
|
| 603 |
- <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a> |
|
| 604 |
- <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a> |
|
| 605 |
- <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a> |
|
| 606 |
- <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a> |
|
| 607 |
- <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a> |
|
| 608 |
- <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a> |
|
| 609 |
- <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a> |
|
| 610 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a> |
|
| 611 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a> |
|
| 612 |
- <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a> |
|
| 613 |
- <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a> |
|
| 614 |
- <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a> |
|
| 615 |
- <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a> |
|
| 616 |
- <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a> |
|
| 617 |
- <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a> |
|
| 618 |
- <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a> |
|
| 619 |
- <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a> |
|
| 620 |
- <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a> |
|
| 621 |
- <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a> |
|
| 622 |
- <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a> |
|
| 623 |
- <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a> |
|
| 624 |
- <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a> |
|
| 625 |
- <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a> |
|
| 626 |
- <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a> |
|
| 627 |
- <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a> |
|
| 628 |
- <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a> |
|
| 629 |
- <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a> |
|
| 630 |
- <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a> |
|
| 631 |
- <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a> |
|
| 632 |
- <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a> |
|
| 633 |
- <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a> |
|
| 634 |
- <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a> |
|
| 635 |
- <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a> |
|
| 636 |
- <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a> |
|
| 637 |
- <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a> |
|
| 638 |
- <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a> |
|
| 639 |
- <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a> |
|
| 640 |
- <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a> |
|
| 641 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a> |
|
| 642 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a> |
|
| 643 |
- <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a> |
|
| 644 |
- <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a> |
|
| 645 |
- <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a> |
|
| 646 |
- <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a> |
|
| 647 |
- <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a> |
|
| 648 |
- <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a> |
|
| 649 |
- <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a> |
|
| 650 |
- <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a> |
|
| 651 |
- <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a> |
|
| 652 |
- <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a> |
|
| 653 |
- <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a> |
|
| 654 |
- <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a> |
|
| 655 |
- <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a> |
|
| 656 |
- <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a> |
|
| 657 |
- <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a> |
|
| 658 |
- <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a> |
|
| 659 |
- <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a> |
|
| 660 |
- <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a> |
|
| 661 |
- <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a> |
|
| 662 |
- <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a> |
|
| 663 |
- <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a> |
|
| 664 |
- <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a> |
|
| 665 |
- <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a> |
|
| 666 |
- <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a> |
|
| 667 |
- <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a> |
|
| 668 |
- <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a> |
|
| 669 |
- <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a> |
|
| 670 |
- <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a> |
|
| 671 |
- <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a> |
|
| 672 |
- <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a> |
|
| 673 |
- <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a> |
|
| 674 |
- <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a> |
|
| 675 |
- <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a> |
|
| 676 |
- <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a> |
|
| 677 |
- <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a> |
|
| 678 |
- <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a> |
|
| 679 |
- <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a> |
|
| 680 |
- <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a> |
|
| 681 |
- <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a> |
|
| 682 |
- <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a> |
|
| 683 |
- <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a> |
|
| 684 |
- <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a> |
|
| 685 |
- <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a> |
|
| 686 |
- <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a> |
|
| 687 |
- <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a> |
|
| 688 |
- <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a> |
|
| 689 |
- <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a> |
|
| 690 |
- <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a> |
|
| 691 |
- <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a> |
|
| 692 |
- <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a> |
|
| 693 |
- <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a> |
|
| 694 |
- <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a> |
|
| 695 |
- <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a> |
|
| 696 |
- <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a> |
|
| 697 |
- <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a> |
|
| 698 |
- <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a> |
|
| 699 |
- </div> |
|
| 700 |
- </div> |
|
| 1978 |
+ <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %> |
|
| 701 | 1979 |
<button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> |
| 702 | 1980 |
</div> |
| 703 | 1981 |
</div> |
| 704 | 1982 |
<div class="btn_popup_wrap template_call_wrap"> |
| 705 |
- <button type="button" class="btnType btnType8">템플릿 불러오기</button> |
|
| 1983 |
+ <c:choose> |
|
| 1984 |
+ <c:when test="${not empty loginVO.id}">
|
|
| 1985 |
+ <button type="button" class="btnType btnType8" onclick="window.open('/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do','_blank','width=930, height=780, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')">템플릿 불러오기</button>
|
|
| 1986 |
+ </c:when> |
|
| 1987 |
+ <c:otherwise> |
|
| 1988 |
+ <button type="button" class="btnType btnType8" onclick="javascript:fnEmptyId();">템플릿 불러오기</button> |
|
| 1989 |
+ </c:otherwise> |
|
| 1990 |
+ </c:choose> |
|
| 706 | 1991 |
</div> |
| 707 | 1992 |
<div class="send_btnWrap"> |
| 708 |
- <button type="button" class="btnType btn_text_save">내용 저장하기</button> |
|
| 1993 |
+ <c:choose> |
|
| 1994 |
+ <c:when test="${not empty loginVO.id}">
|
|
| 1995 |
+ <button type="button" class="btnType btn_text_save" onclick="javascript:myTemplateSave();">내용 저장하기</button> |
|
| 1996 |
+ </c:when> |
|
| 1997 |
+ <c:otherwise> |
|
| 1998 |
+ <button type="button" class="btnType btn_text_save" onclick="javascript:fnEmptyId();">내용 저장하기</button> |
|
| 1999 |
+ </c:otherwise> |
|
| 2000 |
+ </c:choose> |
|
| 2001 |
+ |
|
| 709 | 2002 |
<button type="button" class="btnType btnType9" onclick="javascript:fnContentsReset();">초기화</button> |
| 710 | 2003 |
</div> |
| 711 | 2004 |
</div> |
... | ... | @@ -714,7 +2007,7 @@ |
| 714 | 2007 |
<tr> |
| 715 | 2008 |
<th>버튼</th> |
| 716 | 2009 |
<td class="template_button"> |
| 717 |
- <select name="" id="" class="select_gray_type template_button_select"> |
|
| 2010 |
+ <select name="tmpBtnSelect" id="tmpBtnSelect" class="select_gray_type template_button_select"> |
|
| 718 | 2011 |
<option value="button_type_0">버튼타입 선택</option> |
| 719 | 2012 |
<option value="button_type_1">배송조회</option> |
| 720 | 2013 |
<option value="button_type_2">웹링크</option> |
... | ... | @@ -726,7 +2019,132 @@ |
| 726 | 2019 |
<span class="c_e40000 fwBold">*</span> 버튼 타입중 <span class="c_e40000">봇키워드, 메시지전달</span>은 <span class="c_222">카카오톡 채널 관리자센터(https://center-pf.kakao.com)</span>에서 설정을 직접 한 후 이용하셔야 동작합니다. (최대 5개까지 등록가능) |
| 727 | 2020 |
</p> |
| 728 | 2021 |
<div class="button_add_wrap"> |
| 729 |
- </div> |
|
| 2022 |
+ <c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
|
|
| 2023 |
+ |
|
| 2024 |
+ <c:if test="${buttonList.linkType eq 'DS'}">
|
|
| 2025 |
+ <!-- 배송조회 버튼 --> |
|
| 2026 |
+ <dl class="button_type_wrap type1"> |
|
| 2027 |
+ <dt>배송조회</dt> |
|
| 2028 |
+ <dd class="button_type_input"> |
|
| 2029 |
+ <input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/>
|
|
| 2030 |
+ <input type="text" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
|
|
| 2031 |
+ <p class="cf_text">*이용가능 택배사 : KG로지스, 우체국택배,일양로지스, GTX로지스, FedEx, 경동택배, 합동택배, 롯데택배</p> |
|
| 2032 |
+ </dd> |
|
| 2033 |
+ <dd> |
|
| 2034 |
+ <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> |
|
| 2035 |
+ </dd> |
|
| 2036 |
+ </dl> |
|
| 2037 |
+ </c:if> |
|
| 2038 |
+ |
|
| 2039 |
+ <c:if test="${buttonList.linkType eq 'WL'}">
|
|
| 2040 |
+ <!-- 웹링크 버튼 --> |
|
| 2041 |
+ <dl class="button_type_wrap type2"> |
|
| 2042 |
+ <dt>웹링크</dt> |
|
| 2043 |
+ <dd class="button_type_input"> |
|
| 2044 |
+ <ul> |
|
| 2045 |
+ <li> |
|
| 2046 |
+ <input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/>
|
|
| 2047 |
+ <input type="text" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
|
|
| 2048 |
+ </li> |
|
| 2049 |
+ <li> |
|
| 2050 |
+ <input type="text" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>" placeholder="모바일 링크 입력">
|
|
| 2051 |
+ </li> |
|
| 2052 |
+ <li> |
|
| 2053 |
+ <input type="text" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>" placeholder="PC 링크 입력">
|
|
| 2054 |
+ </li> |
|
| 2055 |
+ </ul> |
|
| 2056 |
+ </dd> |
|
| 2057 |
+ <dd> |
|
| 2058 |
+ <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> |
|
| 2059 |
+ </dd> |
|
| 2060 |
+ </dl> |
|
| 2061 |
+ </c:if> |
|
| 2062 |
+ |
|
| 2063 |
+ <c:if test="${buttonList.linkType eq 'AL'}">
|
|
| 2064 |
+ <!-- 앱링크 버튼 --> |
|
| 2065 |
+ <dl class="button_type_wrap type3"> |
|
| 2066 |
+ <dt>앱링크</dt> |
|
| 2067 |
+ <dd class="button_type_input"> |
|
| 2068 |
+ <ul> |
|
| 2069 |
+ <li> |
|
| 2070 |
+ <input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/>
|
|
| 2071 |
+ <input type="text" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
|
|
| 2072 |
+ </li> |
|
| 2073 |
+ <li> |
|
| 2074 |
+ <input type="text" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>" placeholder="Android 링크 입력">
|
|
| 2075 |
+ </li> |
|
| 2076 |
+ <li> |
|
| 2077 |
+ <input type="text" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>" placeholder="IOS 링크 입력">
|
|
| 2078 |
+ </li> |
|
| 2079 |
+ </ul> |
|
| 2080 |
+ </dd> |
|
| 2081 |
+ <dd> |
|
| 2082 |
+ <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> |
|
| 2083 |
+ </dd> |
|
| 2084 |
+ </dl> |
|
| 2085 |
+ </c:if> |
|
| 2086 |
+ |
|
| 2087 |
+ <c:if test="${buttonList.linkType eq 'BK'}">
|
|
| 2088 |
+ <!-- 봇키워드 --> |
|
| 2089 |
+ <dl class="button_type_wrap type4"> |
|
| 2090 |
+ <dt>봇키워드</dt> |
|
| 2091 |
+ <dd class="button_type_input"> |
|
| 2092 |
+ <input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/>
|
|
| 2093 |
+ <input type="text" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
|
|
| 2094 |
+ </dd> |
|
| 2095 |
+ <dd><button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button></dd> |
|
| 2096 |
+ </dl> |
|
| 2097 |
+ </c:if> |
|
| 2098 |
+ |
|
| 2099 |
+ <c:if test="${buttonList.linkType eq 'MD'}">
|
|
| 2100 |
+ <!-- 메시지 전달 --> |
|
| 2101 |
+ <dl class="button_type_wrap type5"> |
|
| 2102 |
+ <dt>메시지전달</dt> |
|
| 2103 |
+ <dd class="button_type_input"> |
|
| 2104 |
+ <input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" />
|
|
| 2105 |
+ <input type="text" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
|
|
| 2106 |
+ </dd> |
|
| 2107 |
+ <dd> |
|
| 2108 |
+ <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> |
|
| 2109 |
+ <img src="/publish/images/btn_delete.png" alt=""> |
|
| 2110 |
+ </button> |
|
| 2111 |
+ </dd> |
|
| 2112 |
+ </dl> |
|
| 2113 |
+ </c:if> |
|
| 2114 |
+ |
|
| 2115 |
+ <c:if test="${buttonList.linkType eq 'BC'}">
|
|
| 2116 |
+ <!-- 상담톡 전환 --> |
|
| 2117 |
+ <dl class="button_type_wrap type6"> |
|
| 2118 |
+ <dt>상담톡전환</dt> |
|
| 2119 |
+ <dd class="button_type_input"> |
|
| 2120 |
+ <input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" />
|
|
| 2121 |
+ <input type="text" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
|
|
| 2122 |
+ </dd> |
|
| 2123 |
+ <dd> |
|
| 2124 |
+ <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> |
|
| 2125 |
+ <img src="/publish/images/btn_delete.png" alt=""> |
|
| 2126 |
+ </button> |
|
| 2127 |
+ </dd> |
|
| 2128 |
+ </dl> |
|
| 2129 |
+ </c:if> |
|
| 2130 |
+ |
|
| 2131 |
+ <c:if test="${buttonList.linkType eq 'BT'}">
|
|
| 2132 |
+ <!-- 챗봇전환 --> |
|
| 2133 |
+ <dl class="button_type_wrap type7"> |
|
| 2134 |
+ <dt>챗봇전환</dt> |
|
| 2135 |
+ <dd class="button_type_input"> |
|
| 2136 |
+ <input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" />
|
|
| 2137 |
+ <input type="text" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="" placeholder="버튼명 입력(최대 14자)">
|
|
| 2138 |
+ </dd> |
|
| 2139 |
+ <dd> |
|
| 2140 |
+ <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> |
|
| 2141 |
+ <img src="/publish/images/btn_delete.png" alt=""> |
|
| 2142 |
+ </button> |
|
| 2143 |
+ </dd> |
|
| 2144 |
+ </dl> |
|
| 2145 |
+ </c:if> |
|
| 2146 |
+ </c:forEach> |
|
| 2147 |
+ </div> |
|
| 730 | 2148 |
</td> |
| 731 | 2149 |
</tr> |
| 732 | 2150 |
<tr> |
... | ... | @@ -734,35 +2152,35 @@ |
| 734 | 2152 |
<td class="putText"> |
| 735 | 2153 |
<div class="clearfix receipt_num"> |
| 736 | 2154 |
<div class="receipt_num_top"> |
| 737 |
- <label for="" class="label">받는 번호입력</label> |
|
| 738 |
- <input type="text" placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;"> |
|
| 739 |
- <button type="button" class="btnType btnType6">번호추가</button> |
|
| 2155 |
+ <label for="callTo" class="label">받는 번호입력</label> |
|
| 2156 |
+ <input type="text" placeholder="번호를 입력하세요" id="callTo" name="callTo" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;"> |
|
| 2157 |
+ <button type="button" class="btnType btnType6 addCallToF">번호추가</button> |
|
| 740 | 2158 |
<span><span class="vMiddle">*</span> 중복번호는 한번만 발송됩니다.</span> |
| 741 | 2159 |
</div> |
| 742 | 2160 |
<div class="receipt_num_midde"> |
| 743 |
- <div class="listType list01"> |
|
| 2161 |
+ <div class="listType list01 callList_box" id="callList_box"> |
|
| 744 | 2162 |
<div class="list_table list_head"> |
| 745 | 2163 |
<div class="cb_wrap"> |
| 746 |
- <label for="" class="label"></label> |
|
| 2164 |
+ <label for="select_all" class="label"></label> |
|
| 747 | 2165 |
<input type="checkbox" id="select_all"> |
| 748 | 2166 |
</div> |
| 749 | 2167 |
<div class="list_table_num"> |
| 750 | 2168 |
<p>휴대폰</p> |
| 751 |
- <!-- <img src="/publish/images/sortUp.png"> |
|
| 752 |
- <img src="/publish/images/sortDown.png"> --> |
|
| 2169 |
+ <img src="/publish/images/sortUp.png"> |
|
| 2170 |
+ <img src="/publish/images/sortDown.png"> |
|
| 753 | 2171 |
</div> |
| 754 |
- <!-- <div class="list_table_name"> |
|
| 2172 |
+ <div class="list_table_name"> |
|
| 755 | 2173 |
<p>이름</p> |
| 756 | 2174 |
<img src="/publish/images/sortUp.png"> |
| 757 | 2175 |
<img src="/publish/images/sortDown.png"> |
| 758 |
- </div> --> |
|
| 2176 |
+ </div> |
|
| 759 | 2177 |
</div> |
| 760 | 2178 |
<div class="list_body_wrap" id="wrap01_body"> |
| 761 | 2179 |
</div> |
| 762 | 2180 |
</div> |
| 763 | 2181 |
<div class="put_right"> |
| 764 | 2182 |
<div class="btn_popup_wrap spc_wrap"> |
| 765 |
- <button type="button" data-tooltip="popup06" class="btnType btnType7">주소록 불러오기</button> |
|
| 2183 |
+ <button type="button" data-tooltip="popup06" class="btnType btnType7 popupAddr">주소록 불러오기</button> |
|
| 766 | 2184 |
</div> |
| 767 | 2185 |
<div class="btn_popup_wrap"> |
| 768 | 2186 |
<button type="button" data-tooltip="popup02" class="btnType btnType7">엑셀 불러오기</button> |
... | ... | @@ -774,18 +2192,18 @@ |
| 774 | 2192 |
<button type="button" data-tooltip="popup03" class="btnType btnType7 tab2">자주보내는 번호</button> |
| 775 | 2193 |
</div> |
| 776 | 2194 |
<div class="btn_popup_wrap check_validity_wrap"> |
| 777 |
- <button type="button" class="btnType btnType7">오류 검사<i class="qmMark error_qm"></i></button> |
|
| 2195 |
+ <button type="button" class="btnType btnType7 check_validity">오류 검사<i class="qmMark error_qm"></i></button> |
|
| 778 | 2196 |
<div class="error_hover_cont send_hover_cont"> |
| 779 |
- <p>등록하신 전화번호(형식 등)가 정확하게 입력되었는지 오류여부를 자동으로 검사할 수 있습니다.</p> |
|
| 780 |
- <span>(예시) 010-1234-0001(O),<br> 010-123-0001(X)</span> |
|
| 2197 |
+ <p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> |
|
| 2198 |
+ <span>(예시) 010-1234-0001(O) / 010-12345-0001(X)</span> |
|
| 781 | 2199 |
</div> |
| 782 | 2200 |
</div> |
| 783 | 2201 |
</div> |
| 784 | 2202 |
</div> |
| 785 | 2203 |
<div class="list_bottom clearfix"> |
| 786 | 2204 |
<div class="remove_btnWrap"> |
| 787 |
- <button type="button" class="btnType15" id="all_del"><i class="remove_img"></i>전체삭제</button> |
|
| 788 |
- <button type="button" class="btnType15" id="select_del"><i class="remove_img"></i>선택삭제</button> |
|
| 2205 |
+ <button type="button" class="btnType15 all_del"><i class="remove_img"></i>전체삭제</button> |
|
| 2206 |
+ <button type="button" class="btnType15 select_del"><i class="remove_img"></i>선택삭제</button> |
|
| 789 | 2207 |
</div> |
| 790 | 2208 |
<div class="list_bottom_right"> |
| 791 | 2209 |
<p>총 <span class="c_e40000" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a" id="rowDupCnt">0</span>건</p> |
... | ... | @@ -814,7 +2232,8 @@ |
| 814 | 2232 |
<input type="radio" id="radio_bill_1" name="radio_bill" checked="checked"> |
| 815 | 2233 |
<label for="radio_bill_1">보유잔액</label> |
| 816 | 2234 |
<label for="userMoney" class="label">보유잔액</label> |
| 817 |
- <input type="text" id="userMoney" name="userMoney" value="0" readonly=""> |
|
| 2235 |
+ <fmt:formatNumber type="number" maxFractionDigits="3" value="${sendPrice.userMoney}" var="commaPrice" />
|
|
| 2236 |
+ <input type="text" id="userMoney" name="userMoney" value="<c:out value='${commaPrice}'/>" readonly="">
|
|
| 818 | 2237 |
<span class="won">원</span> |
| 819 | 2238 |
<button type="button" class="btnType btnType21" onclick="location.href='/web/member/pay/PayView.do'">충전</button> |
| 820 | 2239 |
</div> |
... | ... | @@ -826,7 +2245,8 @@ |
| 826 | 2245 |
<tr> |
| 827 | 2246 |
<th colspan="2" class="replace_send_th"> |
| 828 | 2247 |
<div class="title_th"><p>대체문자</p> |
| 829 |
- <input type="checkbox" id="send_fail_check" class="send_fail_check"><label for="send_fail_check">친구톡 전송 실패 시 문자 전송</label> |
|
| 2248 |
+ <input type="checkbox" id="send_fail_check" name="send_fail_check" class="send_fail_check"> |
|
| 2249 |
+ <label for="send_fail_check">친구톡 전송 실패 시 문자 전송</label> |
|
| 830 | 2250 |
</div> |
| 831 | 2251 |
<div class="replace_send_wrap"> |
| 832 | 2252 |
<table class="tType1"> |
... | ... | @@ -838,7 +2258,7 @@ |
| 838 | 2258 |
<tr> |
| 839 | 2259 |
<th>발신번호</th> |
| 840 | 2260 |
<td> |
| 841 |
- <label for="callFrom" class="label"></label> |
|
| 2261 |
+ <label for="callFromList" class="label"></label> |
|
| 842 | 2262 |
<select id="callFromList" name="callFromList" class="sel_number"> |
| 843 | 2263 |
<c:choose> |
| 844 | 2264 |
<c:when test="${not empty resultPhonList}">
|
... | ... | @@ -870,7 +2290,7 @@ |
| 870 | 2290 |
<span class="fwMd" id="msgLeng">0 /</span> |
| 871 | 2291 |
<span class="c_002c9a fwMd" id="limitLeng">90</span>byte |
| 872 | 2292 |
</p> |
| 873 |
- <spanclass="msg_com msg_short">단문</span> |
|
| 2293 |
+ <span class="msg_com msg_short">단문</span> |
|
| 874 | 2294 |
</div> |
| 875 | 2295 |
</div> |
| 876 | 2296 |
</div> |
... | ... | @@ -879,7 +2299,6 @@ |
| 879 | 2299 |
<button type="button" class="btnType btnType7" onclick="javascript:fn_errorChk(); return false;">오류검사<i class="qmMark"></i></button> |
| 880 | 2300 |
</div> |
| 881 | 2301 |
</div> |
| 882 |
- <p>* 현재 [<span id="nowMsgType">단문</span>] <span class="c_e40000 fwBold nowMsgCnt">0</span>건 발송 가능합니다.</p> |
|
| 883 | 2302 |
</td> |
| 884 | 2303 |
</tr> |
| 885 | 2304 |
</tbody> |
... | ... | @@ -891,7 +2310,7 @@ |
| 891 | 2310 |
</table> |
| 892 | 2311 |
</div> |
| 893 | 2312 |
<div class="send_right"> |
| 894 |
- <div class="phone"> |
|
| 2313 |
+ <div class="phone" style="top: 201px;"> |
|
| 895 | 2314 |
<div class="phoneIn"> |
| 896 | 2315 |
<p class="prev_p"> |
| 897 | 2316 |
<img src="/publish/images/content/kakao_prev_icon.png" alt=""> |
... | ... | @@ -909,7 +2328,9 @@ |
| 909 | 2328 |
</div> |
| 910 | 2329 |
<p class="template_text">내용 미리보기</p> |
| 911 | 2330 |
<div class="btnViewArea"> |
| 912 |
- <button type="button" class="btn_kakao_type" style="display:none;">문자온 바로가기</button> |
|
| 2331 |
+ <c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
|
|
| 2332 |
+ <button type="button" class="btn_kakao_type btnEmpty" style="display:block;"><c:out value="${buttonList.name}"/></button>
|
|
| 2333 |
+ </c:forEach> |
|
| 913 | 2334 |
</div> |
| 914 | 2335 |
</div> |
| 915 | 2336 |
<p class="kakao_block_text">수신거부 : 홈 > 채널차단</p> |
... | ... | @@ -932,20 +2353,28 @@ |
| 932 | 2353 |
</ul> |
| 933 | 2354 |
</div> |
| 934 | 2355 |
<div class="send_btn"> |
| 935 |
- <button type="button" class="btnType btnType11" onclick="javascript:fn_sendMsgData(); return false;">발송하기</button> |
|
| 936 |
- <button type="button" class="btnType btnType10" onclick="javascript:fnTestSend(); return false;">테스트발송</button> |
|
| 2356 |
+ <%-- 친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지 --%> |
|
| 2357 |
+ <c:choose> |
|
| 2358 |
+ <c:when test="${sendStatus eq 'true'}">
|
|
| 2359 |
+ <button type="button" class="btnType btnType11" onclick="javascript:fn_sendMsgData(); return false;">발송하기</button> |
|
| 2360 |
+ </c:when> |
|
| 2361 |
+ <c:otherwise> |
|
| 2362 |
+ <button type="button" class="btnType btnType11" onclick="javascript:fn_noTimeSend(); return false;">발송하기</button> |
|
| 2363 |
+ </c:otherwise> |
|
| 2364 |
+ </c:choose> |
|
| 2365 |
+ <button type="button" class="btnType btnType10" onclick="javascript:goToKakaoTestPopUp(); return false;">테스트발송</button> |
|
| 937 | 2366 |
</div> |
| 938 | 2367 |
</div> |
| 939 |
- <div class="rev_selected"> |
|
| 2368 |
+ <div class="rev_selected" > |
|
| 940 | 2369 |
<div class="rev_top"> |
| 941 | 2370 |
<span>날짜 :</span> |
| 942 | 2371 |
<div class="calendar_wrap"> |
| 943 | 2372 |
<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"> |
| 944 | 2373 |
</div> |
| 945 | 2374 |
<div class="selBox"> |
| 946 |
- <label for="" class="label">시 선택</label> |
|
| 2375 |
+ <label for="msgResHour" class="label">시 선택</label> |
|
| 947 | 2376 |
<select class="selType1" id="msgResHour" name="msgResHour"> |
| 948 |
- <c:forEach var="hour" begin="0" end="23" step="1" varStatus="status"> |
|
| 2377 |
+ <c:forEach var="hour" begin="8" end="20" step="1" varStatus="status"> |
|
| 949 | 2378 |
<c:choose> |
| 950 | 2379 |
<c:when test="${hour < 10}">
|
| 951 | 2380 |
<option value="0${hour}">0${hour}시</option>
|
... | ... | @@ -956,9 +2385,9 @@ |
| 956 | 2385 |
</c:choose> |
| 957 | 2386 |
</c:forEach> |
| 958 | 2387 |
</select> |
| 959 |
- <label for="" class="label">분 선택</label> |
|
| 960 |
- <select class="selType1" id="msgResMin" name="msgResMin"> |
|
| 961 |
- <c:forEach var="min" begin="0" end="55" step="5"> |
|
| 2388 |
+ <label for="msgResMin" class="label">분 선택</label> |
|
| 2389 |
+ <select class="selType1" id="msgResMin" name="msgResMin" onChange="fnSelectMinChk();"> |
|
| 2390 |
+ <c:forEach var="min" begin="0" end="59" step="1"> |
|
| 962 | 2391 |
<c:choose> |
| 963 | 2392 |
<c:when test="${min < 10}">
|
| 964 | 2393 |
<option value="0${min}">0${min}분</option>
|
... | ... | @@ -971,15 +2400,10 @@ |
| 971 | 2400 |
</select> |
| 972 | 2401 |
</div> |
| 973 | 2402 |
</div> |
| 974 |
- <div class="rev_bottom"> |
|
| 2403 |
+ <%-- <div class="rev_bottom"> |
|
| 975 | 2404 |
<input type="checkbox" id="inputDivideChk" name="inputDivideChk"> |
| 976 |
- <label for="">분할전송</label> |
|
| 977 |
- <select class="selType1" id="divideCnt" name="divideCnt"> |
|
| 978 |
- <option value="2">2</option> |
|
| 979 |
- <option value="10">10</option> |
|
| 980 |
- <option value="20">20</option> |
|
| 981 |
- <option value="30">30</option> |
|
| 982 |
- </select> |
|
| 2405 |
+ <label for="inputDivideChk">분할전송</label> |
|
| 2406 |
+ <input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/> |
|
| 983 | 2407 |
<label for="divideCnt">건</label> |
| 984 | 2408 |
<select class="selType1" id="divideTime" name="divideTime"> |
| 985 | 2409 |
<option value="5">05분</option> |
... | ... | @@ -989,7 +2413,7 @@ |
| 989 | 2413 |
<option value="30">30분</option> |
| 990 | 2414 |
</select> |
| 991 | 2415 |
<label for="divideTime">간격</label> |
| 992 |
- </div> |
|
| 2416 |
+ </div> --%> |
|
| 993 | 2417 |
</div> |
| 994 | 2418 |
</div> |
| 995 | 2419 |
</div> |
... | ... | @@ -998,4 +2422,128 @@ |
| 998 | 2422 |
</form> |
| 999 | 2423 |
</div> |
| 1000 | 2424 |
</div> |
| 1001 |
-</div>(No newline at end of file) |
|
| 2425 |
+</div> |
|
| 2426 |
+ |
|
| 2427 |
+<!-- 문자발송 성공 레이어팝업 --> |
|
| 2428 |
+<div class="tooltip-wrap"> |
|
| 2429 |
+ <div class="popup-com pop_msg_success"> |
|
| 2430 |
+ <div class="popup_heading"> |
|
| 2431 |
+ <p>친구톡 전송 결과</p> |
|
| 2432 |
+ <button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 2433 |
+ </div> |
|
| 2434 |
+ <div class="layer_in"> |
|
| 2435 |
+ <div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div> |
|
| 2436 |
+ </div> |
|
| 2437 |
+ <div class="popup_btn"> |
|
| 2438 |
+ <button type="button" onclick="msgResultLink(); return false;">친구톡 발송결과 바로가기</button> |
|
| 2439 |
+ <button type="button" class="tooltip-close" onclick="msgSuccessClose(this);">확인</button> |
|
| 2440 |
+ </div> |
|
| 2441 |
+ </div> |
|
| 2442 |
+</div> |
|
| 2443 |
+ |
|
| 2444 |
+<!-- 주소록 불러오기 --> |
|
| 2445 |
+<div class="tooltip-wrap"> |
|
| 2446 |
+ <div class="popup-com import_layer popup06" tabindex="0" data-tooltip-con="popup06" data-focus="popup06" data-focus-prev="popup06-close" style="width: 1000px"> |
|
| 2447 |
+ <div class="popup_heading"> |
|
| 2448 |
+ <p><span>주소록 불러오기</p> |
|
| 2449 |
+ <button type="button" onClick="javascript:addrClose(); return false;"> |
|
| 2450 |
+ <img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 2451 |
+ </div> |
|
| 2452 |
+ <div class="layer_in"> |
|
| 2453 |
+ <div class="titBox titBox_pad"> |
|
| 2454 |
+ <p>- 주소록 수정 및 변경은 <span>[주소록 관리]</span>에서만 가능합니다.</p> |
|
| 2455 |
+ <button type="button" class="adr_admin" onClick="location.href='/web/mjon/addr/selectAddrList.do'">주소록 관리</button> |
|
| 2456 |
+ </div> |
|
| 2457 |
+ <div class="adr_wrap"> |
|
| 2458 |
+ <form id="searchAddrGrpForm" name="searchAddrGrpForm" method="post" style="display: flex; justify-content: space-between;"> |
|
| 2459 |
+ <input type="hidden" id="searchAddrGrpId" name="searchAddrGrpId" value=""/> |
|
| 2460 |
+ <input type="hidden" id="type" name="type" value="all"/> |
|
| 2461 |
+ <input type="hidden" id="searchKeyword" name="searchKeyword" value=""/> |
|
| 2462 |
+ <input type="hidden" name="searchCondition" id="searchCondition" value="0" /> |
|
| 2463 |
+ <div class="adr_pop_left"> |
|
| 2464 |
+ <div class="adr_left_search"> |
|
| 2465 |
+ <label for="searchGrpKeyword" class="label">그룹명 검색</label> |
|
| 2466 |
+ <input type="text" name="searchGrpKeyword" id="searchGrpKeyword" placeholder="그룹명 검색" onfocus="this.placeholder=''" onblur="this.placeholder='그룹명 검색'" class="inputLight"> |
|
| 2467 |
+ <button type="button" onClick="javascrit:fnAddrGrpSearch(); return false;"><img src="/publish/images/popup/search.png" alt="검색"></button> |
|
| 2468 |
+ </div> |
|
| 2469 |
+ <div class="adr_pop_box"> |
|
| 2470 |
+ <div id="addrGroupLoad"> |
|
| 2471 |
+ </div> |
|
| 2472 |
+ </div> |
|
| 2473 |
+ <!-- <div class="popup_btn"> |
|
| 2474 |
+ <button type="button" class="btnType" onClick="javascript:fnSelectAddrGrpList(); return false;">선택 그룹 추가</button> |
|
| 2475 |
+ </div> --> |
|
| 2476 |
+ </div> |
|
| 2477 |
+ <div class="adr_pop_right"> |
|
| 2478 |
+ <div class="clearfix"> |
|
| 2479 |
+ <div class="btnWrap_last"> |
|
| 2480 |
+ <label for="searchAddrCondition" class="label">카테고리 선택</label> |
|
| 2481 |
+ <select id="searchAddrCondition" name="searchAddrCondition" class="selType2"> |
|
| 2482 |
+ <option value='0'>전체</option> |
|
| 2483 |
+ <option value='1'>그룹명</option> |
|
| 2484 |
+ <option value='2'>이름</option> |
|
| 2485 |
+ <option value='3'>핸드폰번호</option> |
|
| 2486 |
+ </select> |
|
| 2487 |
+ <label for="searchAddrKeyword" class="label">검색어 입력</label> |
|
| 2488 |
+ <input type="text" id="searchAddrKeyword" name="searchAddrKeyword" placeholder="검색어를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요'" > |
|
| 2489 |
+ <button type="button" class="btnType btnType17" onClick="javascrit:fnAddrSearch(); return false;">검색</button> |
|
| 2490 |
+ </div> |
|
| 2491 |
+ <!-- table --> |
|
| 2492 |
+ <div class="adr_excel adr_pop_list2 callAddr_box"> |
|
| 2493 |
+ </div> |
|
| 2494 |
+ <!--// table --> |
|
| 2495 |
+ </div> |
|
| 2496 |
+ <div class="popup_btn_wrap2"> |
|
| 2497 |
+ <button type="button" onClick="javascript:addrToList(); return false;">추가</button> |
|
| 2498 |
+ <button type="button" onClick="javascript:addrClose(); return false;">닫기</button> |
|
| 2499 |
+ </div> |
|
| 2500 |
+ <%-- 주소록 레이어 팝업 닫기 실행 코드 --%> |
|
| 2501 |
+ <input type="hidden" name="btnAddrClose" id="btnAddrClose" class="tooltip-close closeAddr" data-focus="popup06-close" /> |
|
| 2502 |
+ </div> |
|
| 2503 |
+ </form> |
|
| 2504 |
+ </div> |
|
| 2505 |
+ </div> |
|
| 2506 |
+ </div> |
|
| 2507 |
+</div> |
|
| 2508 |
+<!--// 주소록 불러오기 --> |
|
| 2509 |
+ |
|
| 2510 |
+<!-- 엑셀 불러오기 --> |
|
| 2511 |
+<form id="excelToolTipForm" name="excelToolTipForm" method="post"> |
|
| 2512 |
+ <div class="tooltip-wrap"> |
|
| 2513 |
+ <div class="popup-com import_layer popup02" tabindex="0" data-tooltip-con="popup02" data-focus="popup02" data-focus-prev="popup02-close"> |
|
| 2514 |
+ <div class="popup_heading"> |
|
| 2515 |
+ <p><span>엑셀</span> 불러오기</p> |
|
| 2516 |
+ <button type="button" class="tooltip-close" data-focus="popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 2517 |
+ </div> |
|
| 2518 |
+ <div class="layer_in"> |
|
| 2519 |
+ <!-- 엑셀파일 불러오기 --> |
|
| 2520 |
+ <div class="hascont"> |
|
| 2521 |
+ <div class="titBox"> |
|
| 2522 |
+ <p>- 최대 2만 건까지 등록할 수 있습니다.</p> |
|
| 2523 |
+ <p>- [엑셀 불러오기]시 문서의 A, B열을 불러옵니다.(지원하는 파일 형식 : xls, xlsx)</p> |
|
| 2524 |
+ <p>- 휴대폰 항목은 숫자, 하이픈(-)만 인식하며, 번호 앞에 0이 생략되어도 정상 등록됩니다. |
|
| 2525 |
+ </p> |
|
| 2526 |
+ <!-- <button type="button" class="excel_btn" onclick="location.href='/cmm/fms/FileDown.do?atchFileId=FILE_000000000011651&fileSn=1'"><i></i>샘플파일 다운로드</button> --> |
|
| 2527 |
+ <button type="button" class="excel_btn" onclick="location.href='/download/msg/엑셀주소록_등록양식.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button> |
|
| 2528 |
+ </div> |
|
| 2529 |
+ <div class="attachedFile"> |
|
| 2530 |
+ <label for="excelNm" class="attachedFile_label">첨부파일</label> |
|
| 2531 |
+ <input type="text" id="excelNm" value="" readonly> |
|
| 2532 |
+ <input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExport(event); return false;" style="display:none"/> |
|
| 2533 |
+ <button type="button" class="btnType btnType6 c1">찾아보기</button> |
|
| 2534 |
+<!-- <p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p> --> |
|
| 2535 |
+ <p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p> |
|
| 2536 |
+ </div> |
|
| 2537 |
+ </div><!--// 엑셀파일 불러오기 --> |
|
| 2538 |
+ <div class="popup_btn_wrap2"> |
|
| 2539 |
+ <button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02" id="excelAdd">추가</button> |
|
| 2540 |
+ <button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02">닫기</button> |
|
| 2541 |
+ </div> |
|
| 2542 |
+ </div> |
|
| 2543 |
+ </div> |
|
| 2544 |
+ </div><!--// 엑셀 불러오기 --> |
|
| 2545 |
+</form> |
|
| 2546 |
+ |
|
| 2547 |
+<form id="templateForm" name="templateForm" method="post"> |
|
| 2548 |
+ <input type="hidden" id="friendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>"/>
|
|
| 2549 |
+</form>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
... | ... | @@ -19,12 +19,33 @@ |
| 19 | 19 |
<div class="rev_pop_in"> |
| 20 | 20 |
<div class="rev_pop_middle clearfix"> |
| 21 | 21 |
<span><c:out value="${resultMsgDetail.reqDate }" /></span>
|
| 22 |
- <span class="msg_com msg_allimtalk">알림톡</span> |
|
| 22 |
+ <span class="msg_com msg_allimtalk"> |
|
| 23 |
+ <c:choose> |
|
| 24 |
+ <c:when test="${msgType eq '8'}">
|
|
| 25 |
+ 알림톡 |
|
| 26 |
+ </c:when> |
|
| 27 |
+ <c:when test="${msgType eq '9'}">
|
|
| 28 |
+ 친구톡 |
|
| 29 |
+ </c:when> |
|
| 30 |
+ <c:otherwise> |
|
| 31 |
+ </c:otherwise> |
|
| 32 |
+ </c:choose> |
|
| 33 |
+ </span> |
|
| 23 | 34 |
</div> |
| 24 | 35 |
<div class="rev_pop_txt"> |
| 25 | 36 |
<div class="text_preview"> |
| 26 | 37 |
<div class="allimtalk_title"> |
| 27 |
- <img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착 |
|
| 38 |
+ <img src="/publish/images/content/icon_allimtalk.png" alt=""> |
|
| 39 |
+ <c:choose> |
|
| 40 |
+ <c:when test="${msgType eq '8'}">
|
|
| 41 |
+ 알림톡 도착 |
|
| 42 |
+ </c:when> |
|
| 43 |
+ <c:when test="${msgType eq '9'}">
|
|
| 44 |
+ 친구톡 도착 |
|
| 45 |
+ </c:when> |
|
| 46 |
+ <c:otherwise> |
|
| 47 |
+ </c:otherwise> |
|
| 48 |
+ </c:choose> |
|
| 28 | 49 |
</div> |
| 29 | 50 |
<div class="allimtalk_content"> |
| 30 | 51 |
<!-- 강조 텍스트 --> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
... | ... | @@ -27,7 +27,7 @@ |
| 27 | 27 |
//이전달 첫날/마지막날 조회 |
| 28 | 28 |
if(date.getMonth()+1 == 1){
|
| 29 | 29 |
lastfulstday = date.getFullYear()-1 + "/12" + "/01"; |
| 30 |
- lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0); |
|
| 30 |
+ lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+""; |
|
| 31 | 31 |
}else{
|
| 32 | 32 |
lastfulstday = date.getFullYear() + "/" ; |
| 33 | 33 |
lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ; |
... | ... | @@ -946,7 +946,11 @@ |
| 946 | 946 |
<ul class="list_tab"> |
| 947 | 947 |
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
| 948 | 948 |
<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
|
| 949 |
- <!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> -->
|
|
| 949 |
+ <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost')
|
|
| 950 |
+ || fn:contains(pageContext.request.requestURL , '192.168.0.33') |
|
| 951 |
+ || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> |
|
| 952 |
+ <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
|
|
| 953 |
+ </c:if> |
|
| 950 | 954 |
</ul><!--// tab button --> |
| 951 | 955 |
</div> |
| 952 | 956 |
<!-- 예약관리 > 전체 --> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateDetail.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateDetail.jsp
... | ... | @@ -972,128 +972,8 @@ |
| 972 | 972 |
<button type="button" class="btnType btnType7" |
| 973 | 973 |
onclick="miniPopup(this)">카카오 이모티콘</button> |
| 974 | 974 |
<div class="send_miniPop spc_character kakao_emoticon"> |
| 975 |
- <div class="cnt_character"> |
|
| 976 |
- <div class="box_character"> |
|
| 977 |
- <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a> |
|
| 978 |
- <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a> |
|
| 979 |
- <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a> |
|
| 980 |
- <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a> |
|
| 981 |
- <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a> |
|
| 982 |
- <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a> |
|
| 983 |
- <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a> |
|
| 984 |
- <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a> |
|
| 985 |
- <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a> |
|
| 986 |
- <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a> |
|
| 987 |
- <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a> |
|
| 988 |
- <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a> |
|
| 989 |
- <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a> |
|
| 990 |
- <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a> |
|
| 991 |
- <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a> |
|
| 992 |
- <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a> |
|
| 993 |
- <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a> |
|
| 994 |
- <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a> |
|
| 995 |
- <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a> |
|
| 996 |
- <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a> |
|
| 997 |
- <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a> |
|
| 998 |
- <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a> |
|
| 999 |
- <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a> |
|
| 1000 |
- <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a> |
|
| 1001 |
- <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a> |
|
| 1002 |
- <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a> |
|
| 1003 |
- <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a> |
|
| 1004 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a> |
|
| 1005 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a> |
|
| 1006 |
- <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a> |
|
| 1007 |
- <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a> |
|
| 1008 |
- <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a> |
|
| 1009 |
- <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a> |
|
| 1010 |
- <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a> |
|
| 1011 |
- <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a> |
|
| 1012 |
- <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a> |
|
| 1013 |
- <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a> |
|
| 1014 |
- <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a> |
|
| 1015 |
- <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a> |
|
| 1016 |
- <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a> |
|
| 1017 |
- <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a> |
|
| 1018 |
- <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a> |
|
| 1019 |
- <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a> |
|
| 1020 |
- <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a> |
|
| 1021 |
- <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a> |
|
| 1022 |
- <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a> |
|
| 1023 |
- <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a> |
|
| 1024 |
- <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a> |
|
| 1025 |
- <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a> |
|
| 1026 |
- <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a> |
|
| 1027 |
- <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a> |
|
| 1028 |
- <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a> |
|
| 1029 |
- <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a> |
|
| 1030 |
- <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a> |
|
| 1031 |
- <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a> |
|
| 1032 |
- <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a> |
|
| 1033 |
- <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a> |
|
| 1034 |
- <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a> |
|
| 1035 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a> |
|
| 1036 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a> |
|
| 1037 |
- <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a> |
|
| 1038 |
- <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a> |
|
| 1039 |
- <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a> |
|
| 1040 |
- <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a> |
|
| 1041 |
- <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a> |
|
| 1042 |
- <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a> |
|
| 1043 |
- <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a> |
|
| 1044 |
- <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a> |
|
| 1045 |
- <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a> |
|
| 1046 |
- <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a> |
|
| 1047 |
- <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a> |
|
| 1048 |
- <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a> |
|
| 1049 |
- <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a> |
|
| 1050 |
- <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a> |
|
| 1051 |
- <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a> |
|
| 1052 |
- <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a> |
|
| 1053 |
- <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a> |
|
| 1054 |
- <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a> |
|
| 1055 |
- <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a> |
|
| 1056 |
- <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a> |
|
| 1057 |
- <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a> |
|
| 1058 |
- <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a> |
|
| 1059 |
- <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a> |
|
| 1060 |
- <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a> |
|
| 1061 |
- <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a> |
|
| 1062 |
- <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a> |
|
| 1063 |
- <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a> |
|
| 1064 |
- <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a> |
|
| 1065 |
- <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a> |
|
| 1066 |
- <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a> |
|
| 1067 |
- <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a> |
|
| 1068 |
- <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a> |
|
| 1069 |
- <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a> |
|
| 1070 |
- <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a> |
|
| 1071 |
- <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a> |
|
| 1072 |
- <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a> |
|
| 1073 |
- <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a> |
|
| 1074 |
- <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a> |
|
| 1075 |
- <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a> |
|
| 1076 |
- <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a> |
|
| 1077 |
- <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a> |
|
| 1078 |
- <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a> |
|
| 1079 |
- <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a> |
|
| 1080 |
- <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a> |
|
| 1081 |
- <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a> |
|
| 1082 |
- <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a> |
|
| 1083 |
- <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a> |
|
| 1084 |
- <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a> |
|
| 1085 |
- <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a> |
|
| 1086 |
- <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a> |
|
| 1087 |
- <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a> |
|
| 1088 |
- <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a> |
|
| 1089 |
- <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a> |
|
| 1090 |
- <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a> |
|
| 1091 |
- <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a> |
|
| 1092 |
- <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a> |
|
| 1093 |
- </div> |
|
| 1094 |
- </div> |
|
| 1095 |
- <button type="button" class="btn_close" |
|
| 1096 |
- onclick="miniPopup(this)">닫기</button> |
|
| 975 |
+ <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %> |
|
| 976 |
+ <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> |
|
| 1097 | 977 |
</div> |
| 1098 | 978 |
</div> |
| 1099 | 979 |
<div class="send_btnWrap"> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateRegist.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateRegist.jsp
... | ... | @@ -886,128 +886,8 @@ |
| 886 | 886 |
<button type="button" class="btnType btnType7" |
| 887 | 887 |
onclick="miniPopup(this)">카카오 이모티콘</button> |
| 888 | 888 |
<div class="send_miniPop spc_character kakao_emoticon"> |
| 889 |
- <div class="cnt_character"> |
|
| 890 |
- <div class="box_character"> |
|
| 891 |
- <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a> |
|
| 892 |
- <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a> |
|
| 893 |
- <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a> |
|
| 894 |
- <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a> |
|
| 895 |
- <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a> |
|
| 896 |
- <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a> |
|
| 897 |
- <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a> |
|
| 898 |
- <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a> |
|
| 899 |
- <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a> |
|
| 900 |
- <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a> |
|
| 901 |
- <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a> |
|
| 902 |
- <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a> |
|
| 903 |
- <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a> |
|
| 904 |
- <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a> |
|
| 905 |
- <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a> |
|
| 906 |
- <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a> |
|
| 907 |
- <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a> |
|
| 908 |
- <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a> |
|
| 909 |
- <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a> |
|
| 910 |
- <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a> |
|
| 911 |
- <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a> |
|
| 912 |
- <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a> |
|
| 913 |
- <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a> |
|
| 914 |
- <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a> |
|
| 915 |
- <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a> |
|
| 916 |
- <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a> |
|
| 917 |
- <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a> |
|
| 918 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a> |
|
| 919 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a> |
|
| 920 |
- <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a> |
|
| 921 |
- <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a> |
|
| 922 |
- <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a> |
|
| 923 |
- <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a> |
|
| 924 |
- <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a> |
|
| 925 |
- <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a> |
|
| 926 |
- <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a> |
|
| 927 |
- <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a> |
|
| 928 |
- <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a> |
|
| 929 |
- <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a> |
|
| 930 |
- <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a> |
|
| 931 |
- <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a> |
|
| 932 |
- <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a> |
|
| 933 |
- <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a> |
|
| 934 |
- <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a> |
|
| 935 |
- <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a> |
|
| 936 |
- <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a> |
|
| 937 |
- <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a> |
|
| 938 |
- <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a> |
|
| 939 |
- <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a> |
|
| 940 |
- <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a> |
|
| 941 |
- <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a> |
|
| 942 |
- <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a> |
|
| 943 |
- <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a> |
|
| 944 |
- <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a> |
|
| 945 |
- <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a> |
|
| 946 |
- <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a> |
|
| 947 |
- <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a> |
|
| 948 |
- <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a> |
|
| 949 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a> |
|
| 950 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a> |
|
| 951 |
- <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a> |
|
| 952 |
- <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a> |
|
| 953 |
- <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a> |
|
| 954 |
- <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a> |
|
| 955 |
- <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a> |
|
| 956 |
- <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a> |
|
| 957 |
- <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a> |
|
| 958 |
- <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a> |
|
| 959 |
- <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a> |
|
| 960 |
- <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a> |
|
| 961 |
- <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a> |
|
| 962 |
- <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a> |
|
| 963 |
- <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a> |
|
| 964 |
- <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a> |
|
| 965 |
- <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a> |
|
| 966 |
- <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a> |
|
| 967 |
- <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a> |
|
| 968 |
- <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a> |
|
| 969 |
- <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a> |
|
| 970 |
- <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a> |
|
| 971 |
- <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a> |
|
| 972 |
- <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a> |
|
| 973 |
- <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a> |
|
| 974 |
- <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a> |
|
| 975 |
- <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a> |
|
| 976 |
- <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a> |
|
| 977 |
- <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a> |
|
| 978 |
- <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a> |
|
| 979 |
- <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a> |
|
| 980 |
- <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a> |
|
| 981 |
- <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a> |
|
| 982 |
- <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a> |
|
| 983 |
- <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a> |
|
| 984 |
- <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a> |
|
| 985 |
- <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a> |
|
| 986 |
- <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a> |
|
| 987 |
- <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a> |
|
| 988 |
- <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a> |
|
| 989 |
- <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a> |
|
| 990 |
- <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a> |
|
| 991 |
- <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a> |
|
| 992 |
- <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a> |
|
| 993 |
- <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a> |
|
| 994 |
- <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a> |
|
| 995 |
- <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a> |
|
| 996 |
- <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a> |
|
| 997 |
- <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a> |
|
| 998 |
- <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a> |
|
| 999 |
- <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a> |
|
| 1000 |
- <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a> |
|
| 1001 |
- <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a> |
|
| 1002 |
- <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a> |
|
| 1003 |
- <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a> |
|
| 1004 |
- <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a> |
|
| 1005 |
- <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a> |
|
| 1006 |
- <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a> |
|
| 1007 |
- </div> |
|
| 1008 |
- </div> |
|
| 1009 |
- <button type="button" class="btn_close" |
|
| 1010 |
- onclick="miniPopup(this)">닫기</button> |
|
| 889 |
+ <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %> |
|
| 890 |
+ <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> |
|
| 1011 | 891 |
</div> |
| 1012 | 892 |
</div> |
| 1013 | 893 |
<div class="send_btnWrap"> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateSampleToRegist.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateSampleToRegist.jsp
... | ... | @@ -895,128 +895,8 @@ |
| 895 | 895 |
<button type="button" class="btnType btnType7" |
| 896 | 896 |
onclick="miniPopup(this)">이모티콘</button> |
| 897 | 897 |
<div class="send_miniPop spc_character kakao_emoticon"> |
| 898 |
- <div class="cnt_character"> |
|
| 899 |
- <div class="box_character"> |
|
| 900 |
- <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a> |
|
| 901 |
- <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a> |
|
| 902 |
- <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a> |
|
| 903 |
- <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a> |
|
| 904 |
- <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a> |
|
| 905 |
- <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a> |
|
| 906 |
- <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a> |
|
| 907 |
- <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a> |
|
| 908 |
- <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a> |
|
| 909 |
- <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a> |
|
| 910 |
- <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a> |
|
| 911 |
- <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a> |
|
| 912 |
- <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a> |
|
| 913 |
- <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a> |
|
| 914 |
- <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a> |
|
| 915 |
- <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a> |
|
| 916 |
- <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a> |
|
| 917 |
- <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a> |
|
| 918 |
- <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a> |
|
| 919 |
- <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a> |
|
| 920 |
- <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a> |
|
| 921 |
- <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a> |
|
| 922 |
- <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a> |
|
| 923 |
- <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a> |
|
| 924 |
- <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a> |
|
| 925 |
- <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a> |
|
| 926 |
- <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a> |
|
| 927 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a> |
|
| 928 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a> |
|
| 929 |
- <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a> |
|
| 930 |
- <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a> |
|
| 931 |
- <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a> |
|
| 932 |
- <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a> |
|
| 933 |
- <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a> |
|
| 934 |
- <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a> |
|
| 935 |
- <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a> |
|
| 936 |
- <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a> |
|
| 937 |
- <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a> |
|
| 938 |
- <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a> |
|
| 939 |
- <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a> |
|
| 940 |
- <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a> |
|
| 941 |
- <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a> |
|
| 942 |
- <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a> |
|
| 943 |
- <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a> |
|
| 944 |
- <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a> |
|
| 945 |
- <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a> |
|
| 946 |
- <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a> |
|
| 947 |
- <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a> |
|
| 948 |
- <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a> |
|
| 949 |
- <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a> |
|
| 950 |
- <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a> |
|
| 951 |
- <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a> |
|
| 952 |
- <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a> |
|
| 953 |
- <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a> |
|
| 954 |
- <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a> |
|
| 955 |
- <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a> |
|
| 956 |
- <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a> |
|
| 957 |
- <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a> |
|
| 958 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a> |
|
| 959 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a> |
|
| 960 |
- <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a> |
|
| 961 |
- <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a> |
|
| 962 |
- <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a> |
|
| 963 |
- <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a> |
|
| 964 |
- <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a> |
|
| 965 |
- <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a> |
|
| 966 |
- <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a> |
|
| 967 |
- <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a> |
|
| 968 |
- <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a> |
|
| 969 |
- <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a> |
|
| 970 |
- <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a> |
|
| 971 |
- <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a> |
|
| 972 |
- <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a> |
|
| 973 |
- <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a> |
|
| 974 |
- <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a> |
|
| 975 |
- <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a> |
|
| 976 |
- <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a> |
|
| 977 |
- <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a> |
|
| 978 |
- <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a> |
|
| 979 |
- <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a> |
|
| 980 |
- <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a> |
|
| 981 |
- <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a> |
|
| 982 |
- <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a> |
|
| 983 |
- <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a> |
|
| 984 |
- <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a> |
|
| 985 |
- <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a> |
|
| 986 |
- <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a> |
|
| 987 |
- <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a> |
|
| 988 |
- <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a> |
|
| 989 |
- <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a> |
|
| 990 |
- <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a> |
|
| 991 |
- <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a> |
|
| 992 |
- <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a> |
|
| 993 |
- <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a> |
|
| 994 |
- <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a> |
|
| 995 |
- <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a> |
|
| 996 |
- <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a> |
|
| 997 |
- <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a> |
|
| 998 |
- <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a> |
|
| 999 |
- <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a> |
|
| 1000 |
- <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a> |
|
| 1001 |
- <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a> |
|
| 1002 |
- <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a> |
|
| 1003 |
- <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a> |
|
| 1004 |
- <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a> |
|
| 1005 |
- <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a> |
|
| 1006 |
- <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a> |
|
| 1007 |
- <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a> |
|
| 1008 |
- <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a> |
|
| 1009 |
- <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a> |
|
| 1010 |
- <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a> |
|
| 1011 |
- <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a> |
|
| 1012 |
- <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a> |
|
| 1013 |
- <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a> |
|
| 1014 |
- <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a> |
|
| 1015 |
- <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a> |
|
| 1016 |
- </div> |
|
| 1017 |
- </div> |
|
| 1018 |
- <button type="button" class="btn_close" |
|
| 1019 |
- onclick="miniPopup(this)">닫기</button> |
|
| 898 |
+ <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %> |
|
| 899 |
+ <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> |
|
| 1020 | 900 |
</div> |
| 1021 | 901 |
</div> |
| 1022 | 902 |
<div class="send_btnWrap"> |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateDetail.jsp
... | ... | @@ -0,0 +1,1063 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> | |
| 3 | +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> | |
| 4 | +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> | |
| 5 | +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> | |
| 6 | +<script src="/js/MJUtill.js"></script> | |
| 7 | +<script src="/js/kakao/templateComm.js"></script> | |
| 8 | +<script type="text/javascript"> | |
| 9 | + | |
| 10 | +/* 파일등록 */ | |
| 11 | +var _fileIdx = 0; | |
| 12 | +var _fileForm2 = new Array(); | |
| 13 | +var fileExt = ""; // 첨부파일 확장자 | |
| 14 | + | |
| 15 | +$(document).ready(function (){ | |
| 16 | + | |
| 17 | + //화면 초기 로딩시 화면 처리해주기 | |
| 18 | + initFormChk(); | |
| 19 | + | |
| 20 | + | |
| 21 | + //템플릿명 입력 글자수 체크 해주기 | |
| 22 | + $("#inputTemplateName").keyup(function(e){ | |
| 23 | + | |
| 24 | + var contents = $('#inputTemplateName').val(); | |
| 25 | + var conLeng = strMaxCharacterCnt(contents); | |
| 26 | + | |
| 27 | + if(conLeng > 100){ | |
| 28 | + | |
| 29 | + alert("템플릿명은 100자를 넘을 수 없습니다."); | |
| 30 | + var splicecon = strMaxLengthSubstring(contents, 99); | |
| 31 | + $('#inputTemplateName').val(splicecon); | |
| 32 | + return false; | |
| 33 | + | |
| 34 | + } | |
| 35 | + | |
| 36 | + }); | |
| 37 | + | |
| 38 | + //템플릿 내용 입력 글자수 체크 해주기 | |
| 39 | + $("#inputTemplateContent").keyup(function(e){ | |
| 40 | + | |
| 41 | + var contents = $('#inputTemplateContent').val(); | |
| 42 | + setContentsLengForFriends(contents); | |
| 43 | + | |
| 44 | + }); | |
| 45 | + | |
| 46 | + | |
| 47 | +}); | |
| 48 | + | |
| 49 | + | |
| 50 | +function initFormChk(){ | |
| 51 | + | |
| 52 | + //첫로딩시 우측 미리보기 화면 숨김처리 | |
| 53 | + $('.emphasis_title_text').hide(); //강조유형 타이틀 | |
| 54 | + $('.emphasis_side_text').hide(); //강조유형 보조문구 | |
| 55 | + //$('.template_text').hide(); //내용 미리보기 | |
| 56 | + $('.side_info_text').hide(); //부가정보 내용 | |
| 57 | + $('.channel_info_text').hide(); //채널추가 텍스트 내용 | |
| 58 | + $('.btnAd').hide(); //샘플 채널추가 버튼 | |
| 59 | + $('.btnEmpty').hide(); //샘플 버튼 | |
| 60 | + | |
| 61 | + //채널ID 정보 미리보기에 표시해주기 | |
| 62 | + fnAgentCodeChg(); | |
| 63 | + | |
| 64 | + //템플릿 등록 이미지가 있는 경우 이미지 정보 표시해 주기 | |
| 65 | + var imgType = $("input[name=img_file_add]:checked").val(); | |
| 66 | + | |
| 67 | + if(!imgType == ''){ | |
| 68 | + | |
| 69 | + if($("input[name='img_file_add']:checked").attr("id")=="img_file_1"){ | |
| 70 | + $(".basic_img_add_wrap").show().siblings(".img_add_info_wrap").hide(); | |
| 71 | + $(".img_file_add_wrap").show(); | |
| 72 | + }else if($("input[name='img_file_add']:checked").attr("id")=="img_file_2"){ | |
| 73 | + $(".wide_img_add_wrap").show().siblings(".img_add_info_wrap").hide(); | |
| 74 | + $(".img_file_add_wrap").show(); | |
| 75 | + } else{ | |
| 76 | + $(".img_add_info_wrap, .img_file_add_wrap").hide(); | |
| 77 | + } | |
| 78 | + | |
| 79 | + } | |
| 80 | + var imageFileName = '${resultTemplateVO.imageFileName}'; | |
| 81 | + $("#imgNm").text(imageFileName); | |
| 82 | + | |
| 83 | + //미리보기에 이미지 표시해주기 | |
| 84 | + var imgUrl = '${resultTemplateVO.templateImageUrl}'; | |
| 85 | + $('.kakao_image').css("display", "block"); | |
| 86 | + $("#kakaoImg").attr("src", imgUrl); | |
| 87 | + | |
| 88 | + | |
| 89 | + //초기 템플릿 내용 글자수 처리해주기 | |
| 90 | + var tmpContents = $('#inputTemplateContent').val(); | |
| 91 | + setContentsLengForFriends(tmpContents); | |
| 92 | + | |
| 93 | + //초기 광고포함 여부 처리 | |
| 94 | + var adFlagVal = $("input[name=ad_flag]:checked").val(); | |
| 95 | + advTextChange(adFlagVal); | |
| 96 | + | |
| 97 | +} | |
| 98 | + | |
| 99 | +//--------------첨부파일 처리 함수 시작-------------------------- | |
| 100 | + | |
| 101 | +/* 파일사이즈 가져오기 */ | |
| 102 | +function getStrFileSize(filesize){ | |
| 103 | + var sizeStr=""; | |
| 104 | + var sizeKB = filesize/1024; | |
| 105 | + if(parseInt(sizeKB) > 1024){ | |
| 106 | + var sizeMB = sizeKB/1024; | |
| 107 | + sizeStr = sizeMB.toFixed(2)+" MB"; | |
| 108 | + }else{ | |
| 109 | + sizeStr = sizeKB.toFixed(2)+" KB"; | |
| 110 | + } | |
| 111 | + return sizeStr; | |
| 112 | +} | |
| 113 | + | |
| 114 | +//첨부 이미지 정보 확인 처리 해주기(이미지 리사이징 전단계) | |
| 115 | +function imgResizeInfo(event){ | |
| 116 | + | |
| 117 | + var fileValue = $("#imgFile").val().split("\\"); | |
| 118 | + var fileName = fileValue[fileValue.length-1]; | |
| 119 | + | |
| 120 | + var fileExt = fileName.split('.').pop().toLowerCase(); | |
| 121 | + | |
| 122 | + if(fileExt.length > 0){ | |
| 123 | + if($.inArray(fileExt, ['jpg','jpeg','png']) == -1) { | |
| 124 | + alert('jpg, jpeg, png 파일만 업로드 할수 있습니다.'); | |
| 125 | + return false; | |
| 126 | + } | |
| 127 | + | |
| 128 | + $("#imgNm").text(fileName); | |
| 129 | + } | |
| 130 | + | |
| 131 | + //알림톡 이미지 등록 요청하기 | |
| 132 | + getTemplateImagUrl(); | |
| 133 | +} | |
| 134 | + | |
| 135 | +//파일첨부 버튼 클릭시 파일 첨부 실행 | |
| 136 | +function upImgClick(){ | |
| 137 | + | |
| 138 | + var selectChennelID = $("select[name='selectAgentCode']").val(); //채널ID 정보 | |
| 139 | + var imageType = $("input[name=img_file_add]:checked").val(); //이미지 종류 정보(일반, 와이드) | |
| 140 | + var title = $("#imgTitle").val(); | |
| 141 | + var link = $("#imgLink").val(); | |
| 142 | + | |
| 143 | + if(selectChennelID == ''){ | |
| 144 | + | |
| 145 | + $("#imgNm").text(""); | |
| 146 | + $("#imgFile").val(""); | |
| 147 | + alert("채널ID를 선택해 주세요."); | |
| 148 | + return false; | |
| 149 | + | |
| 150 | + } | |
| 151 | + | |
| 152 | + if(imageType != ''){ | |
| 153 | + | |
| 154 | + bizForm.imageType.value = imageType; | |
| 155 | + | |
| 156 | + }else{ | |
| 157 | + | |
| 158 | + $("#imgNm").text(""); | |
| 159 | + $("#imgFile").val(""); | |
| 160 | + alert("이미지 종류를 선택해 주세요."); | |
| 161 | + return false; | |
| 162 | + | |
| 163 | + } | |
| 164 | + | |
| 165 | + if(title == ''){ | |
| 166 | + | |
| 167 | + $("#imgNm").text(""); | |
| 168 | + $("#imgFile").val(""); | |
| 169 | + alert("이미지 제목을 입력해 주세요."); | |
| 170 | + return false; | |
| 171 | + | |
| 172 | + } | |
| 173 | + | |
| 174 | + //이미지 선택시 링크 정보 및 url 패턴 검사 | |
| 175 | + if(link == ''){ | |
| 176 | + | |
| 177 | + $("#imgNm").text(""); | |
| 178 | + $("#imgFile").val(""); | |
| 179 | + alert("이미지 클릭시 이동할 URL 주소를 http:// 또는 https:// 포함하여 입력해 주세요."); | |
| 180 | + return false; | |
| 181 | + | |
| 182 | + }else{ | |
| 183 | + | |
| 184 | + if(link.search("http://") == -1 && link.search("https://") == -1){ | |
| 185 | + | |
| 186 | + $("#imgNm").text(""); | |
| 187 | + $("#imgFile").val(""); | |
| 188 | + alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다."); | |
| 189 | + return false; | |
| 190 | + | |
| 191 | + } | |
| 192 | + | |
| 193 | + } | |
| 194 | + | |
| 195 | + //첨부파일 선택 팝업 호출해주기 | |
| 196 | + $("#imgFile").click(); | |
| 197 | + | |
| 198 | +} | |
| 199 | + | |
| 200 | +//카카오 친구톡 이미지 등록 요청 API 호출해주기 | |
| 201 | +function getTemplateImagUrl(){ | |
| 202 | + | |
| 203 | + var bizForm = document.bizForm; | |
| 204 | + | |
| 205 | + var data = new FormData(bizForm); | |
| 206 | + var atchFileSts = true; //첨부파일 갯수 상태 값1 | |
| 207 | + | |
| 208 | + data.append("file0", $('#imgFile').prop('files')[0]); | |
| 209 | + | |
| 210 | + var fileValue = $("#imgFile").val().split("\\"); | |
| 211 | + var fileName = fileValue[fileValue.length-1]; | |
| 212 | + | |
| 213 | + var fileExt = fileName.split('.').pop().toLowerCase(); | |
| 214 | + | |
| 215 | + if($.inArray(fileExt, ['jpg','jpeg', 'png']) == -1) { | |
| 216 | + | |
| 217 | + alert('jpg, jpeg 파일만 업로드 할수 있습니다.'); | |
| 218 | + return false; | |
| 219 | + | |
| 220 | + } | |
| 221 | + | |
| 222 | + var url = ""; | |
| 223 | + | |
| 224 | + if(fileExt == "jpg" || fileExt == "jpeg" || fileExt == "png"){ | |
| 225 | + | |
| 226 | + url = "/web/mjon/kakao/template/sendKakaoFriendsTemplateImageUploadAjax.do"; | |
| 227 | + | |
| 228 | + }else{ | |
| 229 | + | |
| 230 | + alert('jpg, jpeg 파일만 업로드 할수 있습니다.'); | |
| 231 | + return; | |
| 232 | + | |
| 233 | + } | |
| 234 | + | |
| 235 | + $.ajax({ | |
| 236 | + type : 'POST' | |
| 237 | + , enctype : 'multipart/form-data' | |
| 238 | + , url : url | |
| 239 | + , data : data | |
| 240 | + , dataType:'json' | |
| 241 | + , async:true | |
| 242 | + , processData: false | |
| 243 | + , contentType: false | |
| 244 | + , cache : false | |
| 245 | + , success : function(returnData, status){ | |
| 246 | + if(returnData.result == "success") { | |
| 247 | + | |
| 248 | + var code = returnData.code; | |
| 249 | + var msg = returnData.msg; | |
| 250 | + var imgUrl = returnData.imgUrl; | |
| 251 | + | |
| 252 | + if(code == "200"){//등록 성공시 메시지 및 이미지 표시 처리 | |
| 253 | + alert("이미지 등록이 완료 되었습니다."); | |
| 254 | + $("#templateImageName").val(fileName); | |
| 255 | + $("#templateImageUrl").val(imgUrl); | |
| 256 | + | |
| 257 | + $('.kakao_image').css("display", "block"); | |
| 258 | + $("#kakaoImg").attr("src", imgUrl); | |
| 259 | + $("#imageFileName").val(fileName); | |
| 260 | + | |
| 261 | + }else if(code == "2002"){//일반 이미지 가로 세로 크기 오류 발생 | |
| 262 | + | |
| 263 | + alert("권장 이미지 사이즈는 가로 720px 세로 720px(가로:세로 비율이 2:1 아닐 경우, 가로 500px, 세로 250px 이하일 경우 업로드 불가), 최대용량 500KB 입니다."); | |
| 264 | + | |
| 265 | + //첨부파일 정보를 지워준다. | |
| 266 | + $("#imgFile").val(""); | |
| 267 | + $("#imgNm").text(""); | |
| 268 | + return false; | |
| 269 | + | |
| 270 | + }else if(code == "405"){ | |
| 271 | + | |
| 272 | + alert("권장 이미지 사이즈는 가로 800px 세로 600px(가로:세로 비율이 2:1 아닐 경우, 가로 500px, 세로 250px 이하일 경우 업로드 불가), 최대용량 2MB 입니다."); | |
| 273 | + | |
| 274 | + //첨부파일 정보를 지워준다. | |
| 275 | + $("#imgFile").val(""); | |
| 276 | + $("#imgNm").text(""); | |
| 277 | + return false; | |
| 278 | + | |
| 279 | + }else{ | |
| 280 | + | |
| 281 | + alert(msg); | |
| 282 | + | |
| 283 | + //첨부파일 정보를 지워준다. | |
| 284 | + $("#imgFile").val(""); | |
| 285 | + $("#imgNm").text(""); | |
| 286 | + return false; | |
| 287 | + } | |
| 288 | + | |
| 289 | + }else if(returnData.result == "loginFail"){ | |
| 290 | + location.href="/web/user/login/login.do"; | |
| 291 | + }else{ | |
| 292 | + alert("이미지 등록 중 오류가 발생하였습니다.!!!"); | |
| 293 | + return false; | |
| 294 | + } | |
| 295 | + }, | |
| 296 | + beforeSend : function(xmlHttpRequest) { | |
| 297 | + //로딩창 show | |
| 298 | + $('.loading_layer').addClass('active'); | |
| 299 | + }, | |
| 300 | + complete : function(xhr, textStatus) { | |
| 301 | + //로딩창 hide | |
| 302 | + $('.loading_layer').removeClass('active'); | |
| 303 | + }, | |
| 304 | + error : function(request , status, error){ | |
| 305 | + alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error); | |
| 306 | + } | |
| 307 | + }); | |
| 308 | + | |
| 309 | + //첨부파일 이름 및 데이터 지워주기 - 완료 후 팝업이 자동으로 닫힘. | |
| 310 | + $("#imgFile").val(""); | |
| 311 | + //$("#imgNm").val(""); | |
| 312 | + | |
| 313 | +} | |
| 314 | + | |
| 315 | + | |
| 316 | +//발신 템플릿 등록 | |
| 317 | +function updateTemplate(){ | |
| 318 | + | |
| 319 | + var selectAgentCode = $("select[name='selectAgentCode']").val(); // 선택 채널ID | |
| 320 | + var yellowId = $("select[name='selectAgentCode'] option:selected").text().replaceAll('@',''); // 선택 채널명 | |
| 321 | + var inputTemplateName = $("#inputTemplateName").val(); // 입력 템플릿 이름 | |
| 322 | + var imageType = $("input[name=img_file_add]:checked").val(); // 첨부 이미지 종류(없음, 일반, 와이드 이미지) | |
| 323 | + var imageTitle = $("#imgTitle").val(); //첨부이미지 제목 | |
| 324 | + var imageLink = $("#imgLink").val(); //첨부이미지 클릭시 이동 링크 주소 | |
| 325 | + var inputTemplateAd = $("input[name=ad_flag]:checked").val(); // 광고성메시지 선택 여부 | |
| 326 | + var inputTemplateContent = $("#inputTemplateContent").val(); // 템플릿 내용 | |
| 327 | + | |
| 328 | + var inputTemplateImageName = $("#templateImageName").val(); // 템플릿 이미지 파일명 | |
| 329 | + var inputTemplateImageUrl = $("#templateImageUrl").val(); // 템플릿 이미지 링크 | |
| 330 | + | |
| 331 | + // 공통 유효성 검사 조회 | |
| 332 | + if(selectAgentCode == null || selectAgentCode == ""){ | |
| 333 | + alert("채널ID를 선택해 주세요"); | |
| 334 | + return; | |
| 335 | + }; | |
| 336 | + | |
| 337 | + if(inputTemplateName == null || inputTemplateName == ""){ | |
| 338 | + alert("템플릿 명을 입력해 주세요"); | |
| 339 | + $("#inputTemplateName").focus(); | |
| 340 | + return; | |
| 341 | + }; | |
| 342 | + | |
| 343 | + if(imageType == 'I' || imageType == 'W'){ | |
| 344 | + | |
| 345 | + if(imageTitle == ''){ | |
| 346 | + | |
| 347 | + alert("이미지 제목을 입력해 주세요."); | |
| 348 | + return false; | |
| 349 | + | |
| 350 | + } | |
| 351 | + | |
| 352 | + if(imageLink == ''){ | |
| 353 | + | |
| 354 | + alert("이미지 클릭시 이동할 URL을 입력해 주세요."); | |
| 355 | + return false; | |
| 356 | + | |
| 357 | + }else{ | |
| 358 | + | |
| 359 | + if(imageLink.search("http://") == -1 && imageLink.search("https://") == -1){ | |
| 360 | + | |
| 361 | + alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다."); | |
| 362 | + return false; | |
| 363 | + | |
| 364 | + } | |
| 365 | + | |
| 366 | + } | |
| 367 | + | |
| 368 | + if(inputTemplateImageUrl == ''){ | |
| 369 | + | |
| 370 | + alert("이미지를 선택해 주세요."); | |
| 371 | + return false; | |
| 372 | + | |
| 373 | + } | |
| 374 | + | |
| 375 | + } | |
| 376 | + | |
| 377 | + | |
| 378 | + if(inputTemplateContent == null || inputTemplateContent == ""){ | |
| 379 | + alert("템플릿 내용을 입력해 주세요."); | |
| 380 | + return; | |
| 381 | + }; | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + var bizForm = document.bizForm; | |
| 386 | + bizForm.senderKey.value = selectAgentCode; | |
| 387 | + bizForm.yellowId.value = yellowId; | |
| 388 | + bizForm.templateName.value = inputTemplateName; | |
| 389 | + bizForm.imageType.value = imageType; | |
| 390 | + bizForm.imgTitle.value = imageTitle | |
| 391 | + bizForm.imgLink.value = imageLink | |
| 392 | + bizForm.adFlag.value = inputTemplateAd; | |
| 393 | + bizForm.templateContent.value = inputTemplateContent; | |
| 394 | + | |
| 395 | + var data = new FormData(bizForm); | |
| 396 | + | |
| 397 | + if(confirm("템플릿을 수정하시겠습니까?")){ | |
| 398 | + | |
| 399 | + $.ajax({ | |
| 400 | + type: "POST" | |
| 401 | + , url: "/web/mjon/kakao/template/updateKakaoFriendsTemplateDataAjax.do" | |
| 402 | + , data: data | |
| 403 | + , dataType: 'json' | |
| 404 | + , async: false | |
| 405 | + , processData: false | |
| 406 | + , contentType: false | |
| 407 | + , cache: false | |
| 408 | + , success: function (returnData, status) { | |
| 409 | + | |
| 410 | + var result = returnData.result; | |
| 411 | + | |
| 412 | + if(result == "loginFail") {//차단 발신번호인 경우 등록 불가 | |
| 413 | + alert("로그인후 진행이 가능합니다."); | |
| 414 | + }else if(returnData.result == "success") { | |
| 415 | + alert("템플릿 수정이 완료되었습니다."); | |
| 416 | + //location.href="/web/mjon/kakao/template/selectKakaoFriendsTemplateList.do"; | |
| 417 | + //return false; | |
| 418 | + location.reload(); | |
| 419 | + }else{ | |
| 420 | + | |
| 421 | + alert("템플릿 수정에 오류가 발생하였습니다."); | |
| 422 | + return false; | |
| 423 | + | |
| 424 | + } | |
| 425 | + } | |
| 426 | + ,error: function (e) { | |
| 427 | + console.log("ERROR : ", e); | |
| 428 | + alert("템플릿 수정에 오류가 발생하였습니다."); | |
| 429 | + } | |
| 430 | + }); | |
| 431 | + | |
| 432 | + } | |
| 433 | + | |
| 434 | +} | |
| 435 | + | |
| 436 | +function fnImageDel(){ | |
| 437 | + | |
| 438 | + var selectAgentCode = $("select[name='selectAgentCode']").val(); // 선택 채널ID | |
| 439 | + var imageUrl = $("#templateImageUrl").val(); | |
| 440 | + var bizForm = document.bizForm; | |
| 441 | + | |
| 442 | + bizForm.senderKey.value = selectAgentCode; | |
| 443 | + | |
| 444 | + if(imageUrl == ''){ | |
| 445 | + | |
| 446 | + alert("등록된 이미지가 없습니다."); | |
| 447 | + return false; | |
| 448 | + | |
| 449 | + } | |
| 450 | + | |
| 451 | + var data = new FormData(bizForm); | |
| 452 | + | |
| 453 | + if(confirm("등록된 이미지를 삭제하시겠습니까?")){ | |
| 454 | + | |
| 455 | + $.ajax({ | |
| 456 | + type: "POST" | |
| 457 | + , url: "/web/mjon/kakao/template/deleteKakaoFriendsImageDataAjax.do" | |
| 458 | + , data: data | |
| 459 | + , dataType: 'json' | |
| 460 | + , async: false | |
| 461 | + , processData: false | |
| 462 | + , contentType: false | |
| 463 | + , cache: false | |
| 464 | + , success: function (returnData, status) { | |
| 465 | + | |
| 466 | + var result = returnData.result; | |
| 467 | + var code = returnData.code; | |
| 468 | + var msg = returnData.msg; | |
| 469 | + | |
| 470 | + if(result == "loginFail") {//차단 발신번호인 경우 등록 불가 | |
| 471 | + alert("로그인후 진행이 가능합니다."); | |
| 472 | + }else if(returnData.result == "success") { | |
| 473 | + | |
| 474 | + if(code == "200"){ | |
| 475 | + | |
| 476 | + alert("등록된 이미지가 삭제되었습니다."); | |
| 477 | + $("#imgTitle").val(""); | |
| 478 | + $("#imgLink").val(""); | |
| 479 | + $("#imgFile").val(""); | |
| 480 | + $("#imgNm").text("첨부파일 이미지"); | |
| 481 | + $("#templateImageUrl").val(""); | |
| 482 | + $('.kakao_image').css("display", "none"); | |
| 483 | + $("#kakaoImg").attr("src", ""); | |
| 484 | + $("#imageFileName").val(""); | |
| 485 | + $("#img_file_0").click(); //이미지첨부 안함 라이오 선택해주기 | |
| 486 | + return false; | |
| 487 | + | |
| 488 | + }else{ | |
| 489 | + | |
| 490 | + alert(msg); | |
| 491 | + return false; | |
| 492 | + } | |
| 493 | + | |
| 494 | + | |
| 495 | + }else{ | |
| 496 | + | |
| 497 | + alert("이미지 삭제에 오류가 발생하였습니다."); | |
| 498 | + return false; | |
| 499 | + | |
| 500 | + } | |
| 501 | + } | |
| 502 | + ,error: function (e) { | |
| 503 | + console.log("ERROR : ", e); | |
| 504 | + alert("이미지 삭제에 오류가 발생하였습니다."); | |
| 505 | + } | |
| 506 | + }); | |
| 507 | + | |
| 508 | + } | |
| 509 | + | |
| 510 | +} | |
| 511 | + | |
| 512 | + | |
| 513 | +//알림톡 내용 초기화 해주기 | |
| 514 | +function fnContentsReset(){ | |
| 515 | + | |
| 516 | + $("#inputTemplateContent").val(""); | |
| 517 | + $(".template_text").text("내용 미리보기"); | |
| 518 | + | |
| 519 | + $('.nowChar').text("0 /"); | |
| 520 | + | |
| 521 | +} | |
| 522 | + | |
| 523 | +//우측 미리보기 화면 채널 아이디 정보 변경해 주기 | |
| 524 | +function fnAgentCodeChg(){ | |
| 525 | + | |
| 526 | + var yellowIdVal = $("#selectAgentCode option:checked").val(); | |
| 527 | + var yellowId = $("#selectAgentCode option:checked").text(); | |
| 528 | + var yellowIdAt = yellowId.replaceAll('@',''); | |
| 529 | + if(yellowIdVal != ''){ | |
| 530 | + | |
| 531 | + $('#spnYellowid').text(yellowId); //미리보기화면 채널ID | |
| 532 | + $('#spnYellowidAt').text(yellowIdAt); //미리보기화면 채널ID @제거 | |
| 533 | + $('#yellowIdCon').text(yellowIdAt); //내용 입력 부분 채널ID | |
| 534 | + | |
| 535 | + | |
| 536 | + }else{ | |
| 537 | + | |
| 538 | + $('#spnYellowid').text("채널ID"); //미리보기화면 채널ID | |
| 539 | + $('#spnYellowidAt').text("채널ID"); //미리보기화면 채널ID @제거 | |
| 540 | + $('#yellowIdCon').text("채널ID"); //내용 입력 부분 채널ID | |
| 541 | + } | |
| 542 | + | |
| 543 | +} | |
| 544 | + | |
| 545 | +$(document).on('change', 'input[name=img_file_add]', function(){ | |
| 546 | + | |
| 547 | + var contents = $('#inputTemplateContent').val(); | |
| 548 | + if(contents != ''){ | |
| 549 | + setContentsLengForFriends(contents); | |
| 550 | + } | |
| 551 | + | |
| 552 | + $("#imgTitle").val(""); | |
| 553 | + $("#imgLink").val(""); | |
| 554 | + $("#imgFile").val(""); | |
| 555 | + $("#imgNm").text("첨부파일 이미지"); | |
| 556 | + $("#templateImageUrl").val(""); | |
| 557 | + | |
| 558 | + | |
| 559 | +}) | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | +//광고성 정보 포함 선택에 따른 텍스트 표시 부분 처리 | |
| 564 | +$(document).on('change', '.inputAdFlag', function(){ | |
| 565 | + | |
| 566 | + var adFlagVal = $(this).val(); | |
| 567 | + advTextChange(adFlagVal); | |
| 568 | + | |
| 569 | +}); | |
| 570 | + | |
| 571 | +function advTextChange(adFlagVal){ | |
| 572 | + | |
| 573 | + if(adFlagVal == 'N'){//광고 표시 숨김처리 | |
| 574 | + | |
| 575 | + $('.adFlag').hide(); | |
| 576 | + $('.kakao_block_text').hide(); | |
| 577 | + $('#adFlagFront').hide(); | |
| 578 | + $('.adFlagAfter').hide(); | |
| 579 | + | |
| 580 | + }else{ | |
| 581 | + $('.adFlag').show(); | |
| 582 | + $('.kakao_block_text').show(); | |
| 583 | + $('#adFlagFront').show(); | |
| 584 | + $('.adFlagAfter').show(); | |
| 585 | + } | |
| 586 | + | |
| 587 | +} | |
| 588 | + | |
| 589 | +//이모티콘 삽입 기능 처리 | |
| 590 | +$(document).on('click', '.symbolButton, .changeWord', function (){ | |
| 591 | + //var templateContents = $('#inputTemplateContent').val(); | |
| 592 | + //$('#inputTemplateContent').val(templateContents + $(this).attr("value")); | |
| 593 | + | |
| 594 | + // 커서 위치에 삽입 | |
| 595 | + setCursorInsertText("inputTemplateContent", $(this).attr("value")); | |
| 596 | + | |
| 597 | + setContentsLeng($('#inputTemplateContent').val()); | |
| 598 | +}); | |
| 599 | + | |
| 600 | +</script> | |
| 601 | + | |
| 602 | +<!-- 로딩바 --> | |
| 603 | +<div class="loading_layer"> | |
| 604 | + <div class="loading_container"> | |
| 605 | + <div class="bar"></div> | |
| 606 | + <div class="text">Loading</div> | |
| 607 | + </div> | |
| 608 | +</div> | |
| 609 | + | |
| 610 | +<!-- content 영역 --> | |
| 611 | +<div class="inner"> | |
| 612 | + <!-- send top --> | |
| 613 | + <div class="send_top"> | |
| 614 | + <!-- tab button --> | |
| 615 | + <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> | |
| 616 | + <!--// tab button --> | |
| 617 | + <!-- 카카오톡 설정 - 알림톡 템플릿 등록/관리 - 내템플릿 --> | |
| 618 | + <div class="top_content kakaotalkset_cont current pay_tab_wrap"> | |
| 619 | + <div class="heading"> | |
| 620 | + <h2>카카오톡 설정</h2> | |
| 621 | + <button type="button" class="button info" | |
| 622 | + onclick="window.open('popup_kakaoset_template.html','_blank','width=790, height=300, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')">사용안내</button> | |
| 623 | + </div> | |
| 624 | + <div class="list_tab_wrap2 type2"> | |
| 625 | + <!-- tab button --> | |
| 626 | + <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkSubMenuTap.jsp" %> | |
| 627 | + <!--// tab button --> | |
| 628 | + </div> | |
| 629 | + <form id="bizForm" name="bizForm" method="multipart/form-data"> | |
| 630 | + <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf"> | |
| 631 | + <input type="hidden" id="menuSubTab" name="menuSubTab" value="tabSubFt"> | |
| 632 | + <input type="hidden" id="inputSenderKey" name="senderKey" value=""/> | |
| 633 | + <input type="hidden" id="friendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>"/> | |
| 634 | + <input type="hidden" id="yellowId" name="yellowId" value=""/> | |
| 635 | + <input type="hidden" id="templateName" name="templateName" value=""/> | |
| 636 | + <input type="hidden" id="imageFileName" name="imageFileName" value="<c:out value='${resultTemplateVO.imageFileName}'/>"/> | |
| 637 | + <input type="hidden" id="imageType" name="imageType" value=""/> | |
| 638 | + <input type="hidden" id="imageTitle" name="imageTitle" value=""> | |
| 639 | + <input type="hidden" id="imageLink" name="imageLink" value=""> | |
| 640 | + <input type="hidden" id="adFlag" name="adFlag" value=""> | |
| 641 | + <input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${resultTemplateVO.templateImageUrl}'/>"> | |
| 642 | + <input type="hidden" id="templateContent" name="templateContent" value=""> | |
| 643 | + | |
| 644 | + | |
| 645 | + <div class="send_general friend_talk_wrap kakao_wrap"> | |
| 646 | + <div class="send_left"> | |
| 647 | + <p class="tType1_title">친구톡 템플릿 상세</p> | |
| 648 | + <table class="tType1"> | |
| 649 | + <colgroup> | |
| 650 | + <col style="width: 190px;"> | |
| 651 | + <col style="width: auto;"> | |
| 652 | + </colgroup> | |
| 653 | + <tbody> | |
| 654 | + <tr> | |
| 655 | + <th>채널ID</th> | |
| 656 | + <td> | |
| 657 | + <select class="select_gray_type" name="selectAgentCode" id="selectAgentCode" onchange="javascript:fnAgentCodeChg();"> | |
| 658 | + <option value="">채널ID 선택</option> | |
| 659 | + <c:forEach var="kakaoProfileInfo" items="${resultProfileList}" varStatus="status"> | |
| 660 | + <option value="${kakaoProfileInfo.senderKey}" <c:if test="${kakaoProfileInfo.senderKey eq resultTemplateVO.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option> | |
| 661 | + </c:forEach> | |
| 662 | + </select> | |
| 663 | + </td> | |
| 664 | + </tr> | |
| 665 | + <tr> | |
| 666 | + <th>템플릿명</th> | |
| 667 | + <td> | |
| 668 | + <input type="text" class="template_name" id="inputTemplateName" name="inputTemplateName" value="<c:out value='${resultTemplateVO.templateName}'/>" placeholder="템플릿 명을 입력해주세요" maxLength="100"> | |
| 669 | + <p class="template_name_cf">최대 100자, 템플릿 관리용</p> | |
| 670 | + </td> | |
| 671 | + </tr> | |
| 672 | + <tr> | |
| 673 | + <th>이미지 첨부</th> | |
| 674 | + <td class="img_file_add_td"> | |
| 675 | + <div class="img_sort_wrap"> | |
| 676 | + <input type="radio" name="img_file_add" id="img_file_0" value="" <c:if test="${resultTemplateVO.imageType eq ''}">checked</c:if> ><label for="img_file_0">첨부 안함</label> | |
| 677 | + <input type="radio" name="img_file_add" id="img_file_1" value="I" <c:if test="${resultTemplateVO.imageType eq 'I'}">checked</c:if> ><label for="img_file_1">이미지 첨부</label> | |
| 678 | + <input type="radio" name="img_file_add" id="img_file_2" value="W" <c:if test="${resultTemplateVO.imageType eq 'W'}">checked</c:if>><label for="img_file_2">와이드 이미지 첨부</label> | |
| 679 | + <div class="img_add_info_wrap basic_img_add_wrap"> | |
| 680 | + <p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p> | |
| 681 | + <ul class="info_text"> | |
| 682 | + <li>- 권장사이즈 : 720px * 720px</li> | |
| 683 | + <li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li> | |
| 684 | + <li>- 파일형식 : jpg, png (최대 500kb)</li> | |
| 685 | + <li>- 이미지 첨부시 메시지 내용은 최대 400자까지 입력할 수 있습니다.</li> | |
| 686 | + </ul> | |
| 687 | + </div> | |
| 688 | + <div class="img_add_info_wrap wide_img_add_wrap"> | |
| 689 | + <p class="info_title_text"><span class="c_e40000">*</span> 와이드 이미지 첨부 안내</p> | |
| 690 | + <ul class="info_text"> | |
| 691 | + <li>- 권장사이즈 : 800px * 600px</li> | |
| 692 | + <!-- <li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li> --> | |
| 693 | + <li>- 파일형식 : jpg, png (최대 2mb)</li> | |
| 694 | + <li>- 와이드 이미지 첨부시 메시지 내용은 최대 76자, 버튼 1개까지 입력할 수 있습니다.</li> | |
| 695 | + </ul> | |
| 696 | + </div> | |
| 697 | + </div> | |
| 698 | + <div class="img_file_add_wrap"> | |
| 699 | + <ul class="img_file_info_wrap"> | |
| 700 | + <li> | |
| 701 | + <p>이미지 제목</p> | |
| 702 | + <input type="text" id="imgTitle" name="imgTitle" value="<c:out value='${resultTemplateVO.imgTitle}'/>" class="img_url" maxLength="50"> | |
| 703 | + </li> | |
| 704 | + <li> | |
| 705 | + <p>이미지 클릭시 이동할 URL</p> | |
| 706 | + <input type="text" id="imgLink" name="imgLink" value="<c:out value='${resultTemplateVO.imgLink}'/>" placeholder="http://" class="img_url" maxLength="1000"> | |
| 707 | + </li> | |
| 708 | + <li> | |
| 709 | + <p class="file_name" id="imgNm" name="imgNm">첨부파일 이미지</p> | |
| 710 | + <input type="file" id="imgFile" accept=".jpg, .jpeg, .png" onchange="imgResizeInfo(event); return false;" style="display:none"/> | |
| 711 | + <button type="button" class="btn_del btnImgDel" onclick="buttonTypeDel(this);"> | |
| 712 | + <img src="/publish/images/btn_delete.png" id="imgDel" alt="이미지 삭제" onclick="fnImageDel();"> | |
| 713 | + </button> | |
| 714 | + </li> | |
| 715 | + </ul> | |
| 716 | + <button type="button" class="btnType btnType8 btn_img_upload" title="이미지 불러오기" onclick="javascript:upImgClick(); return false;">이미지 불러오기</button> | |
| 717 | + </div> | |
| 718 | + </td> | |
| 719 | + </tr> | |
| 720 | + <tr> | |
| 721 | + <th>광고포함 여부</th> | |
| 722 | + <td> | |
| 723 | + <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label> | |
| 724 | + <%-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N" <c:if test="${resultTemplateVO.adFlag eq 'N'}">checked</c:if> ><label for="ad_N">포함 안함</label> --%> | |
| 725 | + </td> | |
| 726 | + </tr> | |
| 727 | + <tr> | |
| 728 | + <th>내용</th> | |
| 729 | + <td class="kakao_template_text"> | |
| 730 | + <div class="put_left short"> | |
| 731 | + <!-- <input type="text" class="template_name"> --> | |
| 732 | + <div class="put_text_wrap"> | |
| 733 | + <div class="ad_txt"> | |
| 734 | + <p><span id="adFlagFront">(광고)</span> <span id="yellowIdCon" >채널ID</span></p> | |
| 735 | + </div> | |
| 736 | + <label for="inputTemplateContent" class="label"></label> | |
| 737 | + <textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."><c:out value="${resultTemplateVO.templateContent}"/></textarea> | |
| 738 | + <div class="text_length"> | |
| 739 | + <div> | |
| 740 | + <p class="adFlagAfter">수신거부 : 홈 > 채널차단</p> | |
| 741 | + </div> | |
| 742 | + <div> | |
| 743 | + <p><span class="fwMd nowChar">0 /</span><span class="c_002c9a fwMd totChar">1000</span>자</p> | |
| 744 | + </div> | |
| 745 | + </div> | |
| 746 | + </div> | |
| 747 | + </div> | |
| 748 | + <div class="put_right"> | |
| 749 | + <div class="btn_popup_wrap"> | |
| 750 | + <button type="button" class="btnType btnType7" | |
| 751 | + onclick="miniPopup(this)">특수문자</button> | |
| 752 | + <div class="send_miniPop spc_character"> | |
| 753 | + <div class="tab_character"> | |
| 754 | + <a href="#none" class="on">특수문자</a> | |
| 755 | + <a href="#none">웃음</a> | |
| 756 | + <a href="#none">슬픔</a> | |
| 757 | + <a href="#none">분노</a> | |
| 758 | + <a href="#none">사랑</a> | |
| 759 | + <a href="#none">그외</a> | |
| 760 | + </div> | |
| 761 | + <!-- 특수문자 --> | |
| 762 | + <div class="cnt_character on"> | |
| 763 | + <div class="box_character"> | |
| 764 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 765 | + <c:if test="${symbolList.symbolType == 'D'}"> | |
| 766 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}"><c:out value="${symbolList.symbol}"/></a> | |
| 767 | + </c:if> | |
| 768 | + </c:forEach> | |
| 769 | + </div> | |
| 770 | + </div> | |
| 771 | + <!-- //특수문자 --> | |
| 772 | + | |
| 773 | + <!-- 웃음 --> | |
| 774 | + <div class="cnt_character emt_character"> | |
| 775 | + <div class="box_character"> | |
| 776 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 777 | + <c:if test="${symbolList.symbolType == 'S'}"> | |
| 778 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 779 | + </c:if> | |
| 780 | + </c:forEach> | |
| 781 | + </div> | |
| 782 | + </div> | |
| 783 | + <!-- //웃음 --> | |
| 784 | + | |
| 785 | + <!-- 슬픔 --> | |
| 786 | + <div class="cnt_character emt_character"> | |
| 787 | + <div class="box_character"> | |
| 788 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 789 | + <c:if test="${symbolList.symbolType == 'C'}"> | |
| 790 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 791 | + </c:if> | |
| 792 | + </c:forEach> | |
| 793 | + </div> | |
| 794 | + </div> | |
| 795 | + <!-- //슬픔 --> | |
| 796 | + | |
| 797 | + <!-- 분노 --> | |
| 798 | + <div class="cnt_character emt_character"> | |
| 799 | + <div class="box_character"> | |
| 800 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 801 | + <c:if test="${symbolList.symbolType == 'A'}"> | |
| 802 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 803 | + </c:if> | |
| 804 | + </c:forEach> | |
| 805 | + </div> | |
| 806 | + </div> | |
| 807 | + <!-- //분노 --> | |
| 808 | + | |
| 809 | + <!-- 사랑 --> | |
| 810 | + <div class="cnt_character emt_character"> | |
| 811 | + <div class="box_character"> | |
| 812 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 813 | + <c:if test="${symbolList.symbolType == 'L'}"> | |
| 814 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 815 | + </c:if> | |
| 816 | + </c:forEach> | |
| 817 | + </div> | |
| 818 | + </div> | |
| 819 | + <!-- //사랑 --> | |
| 820 | + | |
| 821 | + <!-- 그외 --> | |
| 822 | + <div class="cnt_character emt_character emt_etc "> | |
| 823 | + <div class="box_character"> | |
| 824 | + <c:forEach var="symbolList" items="${symbolList}" varStatus="status"> | |
| 825 | + <c:if test="${symbolList.symbolType == 'E'}"> | |
| 826 | + <a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a> | |
| 827 | + </c:if> | |
| 828 | + </c:forEach> | |
| 829 | + </div> | |
| 830 | + </div> | |
| 831 | + <!-- //그외 --> | |
| 832 | + <button type="button" class="btn_close" | |
| 833 | + onclick="miniPopup(this)">닫기</button> | |
| 834 | + </div> | |
| 835 | + </div> | |
| 836 | + <div class="btn_popup_wrap convers_wrap"> | |
| 837 | + <button type="button" class="btnType btnType7" | |
| 838 | + onclick="miniPopup(this)">특정문구 일괄변환<i | |
| 839 | + class="qmMark"></i></button> | |
| 840 | + <div class="send_miniPop convers"> | |
| 841 | + <div> | |
| 842 | + <div class="convers_top"> | |
| 843 | + <span>특정문구 일괄변환이란?</span> | |
| 844 | + <p>주소록, 엑셀에 입력된 내용을 이용해 수신자마다 다른 내용의 메시지를 발송하는 기능</p> | |
| 845 | + </div> | |
| 846 | + <div class="convers_middle"> | |
| 847 | + <a href="javascript:void(0)" class="changeWord" value="\#{이름}"><c:out value="\#{이름}"/></a> | |
| 848 | + </div> | |
| 849 | + <div class="convers_bottom"> | |
| 850 | + <a href="javascript:void(0)" class="changeWord" value="\#{1}"><c:out value="\#{1}"/></a> | |
| 851 | + <a href="javascript:void(0)" class="changeWord" value="\#{2}"><c:out value="\#{2}"/></a> | |
| 852 | + <a href="javascript:void(0)" class="changeWord" value="\#{3}"><c:out value="\#{3}"/></a> | |
| 853 | + <a href="javascript:void(0)" class="changeWord" value="\#{4}"><c:out value="\#{4}"/></a> | |
| 854 | + </div> | |
| 855 | + </div> | |
| 856 | + <button type="button" class="btn_close" | |
| 857 | + onclick="miniPopup(this)">닫기</button> | |
| 858 | + </div> | |
| 859 | + </div> | |
| 860 | + <div class="btn_popup_wrap spc_wrap"> | |
| 861 | + <button type="button" class="btnType btnType7" | |
| 862 | + onclick="miniPopup(this)">이모티콘</button> | |
| 863 | + <div class="send_miniPop spc_character kakao_emoticon"> | |
| 864 | + <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %> | |
| 865 | + <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> | |
| 866 | + </div> | |
| 867 | + </div> | |
| 868 | + <div class="btn_popup_wrap template_call_wrap"> | |
| 869 | + <button type="button" class="btnType btnType8">템플릿 불러오기</button> | |
| 870 | + </div> | |
| 871 | + <div class="send_btnWrap"> | |
| 872 | + <!-- <button type="button" class="btnType btn_text_save">내용 저장하기</button> --> | |
| 873 | + <button type="button" class="btnType btnType9" onclick="javascript:fnContentsReset();">초기화</button> | |
| 874 | + </div> | |
| 875 | + </div> | |
| 876 | + </td> | |
| 877 | + </tr> | |
| 878 | + <tr> | |
| 879 | + <th>버튼</th> | |
| 880 | + <td class="template_button"> | |
| 881 | + <select name="" id="" class="select_gray_type template_button_select"> | |
| 882 | + <option value="button_type_0">버튼타입 선택</option> | |
| 883 | + <option value="button_type_1">배송조회</option> | |
| 884 | + <option value="button_type_2">웹링크</option> | |
| 885 | + <option value="button_type_3">앱링크</option> | |
| 886 | + <option value="button_type_5">메시지전달</option> | |
| 887 | + <%-- <option value="button_type_4">봇키워드</option> | |
| 888 | + <option value="button_type_6">상담톡전환</option> | |
| 889 | + <option value="button_type_7">챗봇전환</option> --%> | |
| 890 | + </select> | |
| 891 | + <button type="button" class="btnType btnType6" onclick="friendTemplateButtonAdd();">추가</button> | |
| 892 | + <div class="button_add_wrap"> | |
| 893 | + <c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status"> | |
| 894 | + | |
| 895 | + <c:if test="${buttonList.linkType eq 'DS'}"> | |
| 896 | + <!-- 배송조회 버튼 --> | |
| 897 | + <dl class="button_type_wrap type1"> | |
| 898 | + <dt>배송조회</dt> | |
| 899 | + <dd class="button_type_input"> | |
| 900 | + <input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/> | |
| 901 | + <input type="text" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 902 | + <p class="cf_text">*이용가능 택배사 : KG로지스, 우체국택배,일양로지스, GTX로지스, FedEx, 경동택배, 합동택배, 롯데택배</p> | |
| 903 | + </dd> | |
| 904 | + <dd> | |
| 905 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> | |
| 906 | + </dd> | |
| 907 | + </dl> | |
| 908 | + </c:if> | |
| 909 | + | |
| 910 | + <c:if test="${buttonList.linkType eq 'WL'}"> | |
| 911 | + <!-- 웹링크 버튼 --> | |
| 912 | + <dl class="button_type_wrap type2"> | |
| 913 | + <dt>웹링크</dt> | |
| 914 | + <dd class="button_type_input"> | |
| 915 | + <ul> | |
| 916 | + <li> | |
| 917 | + <input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/> | |
| 918 | + <input type="text" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 919 | + </li> | |
| 920 | + <li> | |
| 921 | + <input type="text" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>" placeholder="모바일 링크 입력"> | |
| 922 | + </li> | |
| 923 | + <li> | |
| 924 | + <input type="text" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>" placeholder="PC 링크 입력"> | |
| 925 | + </li> | |
| 926 | + </ul> | |
| 927 | + </dd> | |
| 928 | + <dd> | |
| 929 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> | |
| 930 | + </dd> | |
| 931 | + </dl> | |
| 932 | + </c:if> | |
| 933 | + | |
| 934 | + <c:if test="${buttonList.linkType eq 'AL'}"> | |
| 935 | + <!-- 앱링크 버튼 --> | |
| 936 | + <dl class="button_type_wrap type3"> | |
| 937 | + <dt>앱링크</dt> | |
| 938 | + <dd class="button_type_input"> | |
| 939 | + <ul> | |
| 940 | + <li> | |
| 941 | + <input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/> | |
| 942 | + <input type="text" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 943 | + </li> | |
| 944 | + <li> | |
| 945 | + <input type="text" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>" placeholder="Android 링크 입력"> | |
| 946 | + </li> | |
| 947 | + <li> | |
| 948 | + <input type="text" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>" placeholder="IOS 링크 입력"> | |
| 949 | + </li> | |
| 950 | + </ul> | |
| 951 | + </dd> | |
| 952 | + <dd> | |
| 953 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> | |
| 954 | + </dd> | |
| 955 | + </dl> | |
| 956 | + </c:if> | |
| 957 | + | |
| 958 | + <c:if test="${buttonList.linkType eq 'BK'}"> | |
| 959 | + <!-- 봇키워드 --> | |
| 960 | + <dl class="button_type_wrap type4"> | |
| 961 | + <dt>봇키워드</dt> | |
| 962 | + <dd class="button_type_input"> | |
| 963 | + <input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/> | |
| 964 | + <input type="text" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 965 | + </dd> | |
| 966 | + <dd><button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button></dd> | |
| 967 | + </dl> | |
| 968 | + </c:if> | |
| 969 | + | |
| 970 | + <c:if test="${buttonList.linkType eq 'MD'}"> | |
| 971 | + <!-- 메시지 전달 --> | |
| 972 | + <dl class="button_type_wrap type5"> | |
| 973 | + <dt>메시지전달</dt> | |
| 974 | + <dd class="button_type_input"> | |
| 975 | + <input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" /> | |
| 976 | + <input type="text" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 977 | + </dd> | |
| 978 | + <dd> | |
| 979 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 980 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 981 | + </button> | |
| 982 | + </dd> | |
| 983 | + </dl> | |
| 984 | + </c:if> | |
| 985 | + | |
| 986 | + <c:if test="${buttonList.linkType eq 'BC'}"> | |
| 987 | + <!-- 상담톡 전환 --> | |
| 988 | + <dl class="button_type_wrap type6"> | |
| 989 | + <dt>상담톡전환</dt> | |
| 990 | + <dd class="button_type_input"> | |
| 991 | + <input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" /> | |
| 992 | + <input type="text" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)"> | |
| 993 | + </dd> | |
| 994 | + <dd> | |
| 995 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 996 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 997 | + </button> | |
| 998 | + </dd> | |
| 999 | + </dl> | |
| 1000 | + </c:if> | |
| 1001 | + | |
| 1002 | + <c:if test="${buttonList.linkType eq 'BT'}"> | |
| 1003 | + <!-- 챗봇전환 --> | |
| 1004 | + <dl class="button_type_wrap type7"> | |
| 1005 | + <dt>챗봇전환</dt> | |
| 1006 | + <dd class="button_type_input"> | |
| 1007 | + <input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" /> | |
| 1008 | + <input type="text" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="" placeholder="버튼명 입력(최대 14자)"> | |
| 1009 | + </dd> | |
| 1010 | + <dd> | |
| 1011 | + <button type="button" class="btn_del" onclick="buttonTypeDel(this);"> | |
| 1012 | + <img src="/publish/images/btn_delete.png" alt=""> | |
| 1013 | + </button> | |
| 1014 | + </dd> | |
| 1015 | + </dl> | |
| 1016 | + </c:if> | |
| 1017 | + </c:forEach> | |
| 1018 | + </div> | |
| 1019 | + </td> | |
| 1020 | + </tr> | |
| 1021 | + </tbody> | |
| 1022 | + </table> | |
| 1023 | + </div> | |
| 1024 | + <div class="send_right"> | |
| 1025 | + <div class="phone"> | |
| 1026 | + <div class="phoneIn"> | |
| 1027 | + <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""> | |
| 1028 | + <span id="spnYellowid">@채널ID</span> | |
| 1029 | + </p> | |
| 1030 | + <!-- 텍스트 미리보기 --> | |
| 1031 | + <div class="text_preview"> | |
| 1032 | + <p class="friend_talk_title"><span class="adFlag">(광고)</span> <span id="spnYellowidAt">채널ID</span></p> | |
| 1033 | + <div class="allimtalk_content"> | |
| 1034 | + <div class="kakao_image" style="display:none;"> | |
| 1035 | + <img src="" id="kakaoImg" alt=""> | |
| 1036 | + </div> | |
| 1037 | + <p class="template_text">내용 미리보기</p> | |
| 1038 | + <div class="btnViewArea"> | |
| 1039 | + <c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status"> | |
| 1040 | + <button type="button" class="btn_kakao_type" style="display:block;"><c:out value="${buttonList.name}"/></button> | |
| 1041 | + </c:forEach> | |
| 1042 | + </div> | |
| 1043 | + </div> | |
| 1044 | + <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p> | |
| 1045 | + | |
| 1046 | + </div> | |
| 1047 | + <!-- //텍스트 미리보기 --> | |
| 1048 | + </div> | |
| 1049 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p> | |
| 1050 | + <div class="phone_bottom"> | |
| 1051 | + <div class="send_btn"> | |
| 1052 | + <button type="button" class="btnType btnType11" onclick="javascript:updateTemplate();">수정하기</button> | |
| 1053 | + <button type="button" class="btnType btnType10"onclick="location.href='/web/mjon/kakao/template/selectKakaoFriendsTemplateList.do';">취소</button> | |
| 1054 | + </div> | |
| 1055 | + </div> | |
| 1056 | + </div> | |
| 1057 | + </div> | |
| 1058 | + </div> | |
| 1059 | + </form> | |
| 1060 | + </div> | |
| 1061 | + </div> | |
| 1062 | +</div> | |
| 1063 | +<!--// send top --> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateList.jsp
... | ... | @@ -41,7 +41,7 @@ |
| 41 | 41 |
|
| 42 | 42 |
//화면 로딩바 보여주기 |
| 43 | 43 |
$('.loading_layer').addClass('active');
|
| 44 |
- $("#templateList").load("/web/mjon/kakao/template/selectKakaoFriendsTemplateListAjax.do", {"senderKey":selectAgentCode, "categoryCode" : selectTemplateSecondCatagory, "templateStatus" : selectTemplateStatus, "searchKeyword" : keyword, "page" : page, "yellowId" : yellowId, "formListType" : formListType} ,function(){
|
|
| 44 |
+ $("#templateList").load("/web/mjon/kakao/template/selectKakaoFriendsTemplateListAjax.do", {"senderKey":selectAgentCode, "categoryCode" : selectTemplateSecondCatagory, "templateStatus" : selectTemplateStatus, "searchKeyword" : keyword, "pageIndex" : page, "yellowId" : yellowId, "formListType" : formListType} ,function(){
|
|
| 45 | 45 |
|
| 46 | 46 |
//썸네일 박스 스크롤 적용해주기 |
| 47 | 47 |
$(".kakao_template_wrap").mCustomScrollbar({
|
... | ... | @@ -297,15 +297,15 @@ |
| 297 | 297 |
} |
| 298 | 298 |
|
| 299 | 299 |
//알림톡 상세보기 화면 호출 |
| 300 |
-function fnTemplateDetail(templateCode){
|
|
| 300 |
+function fnTemplateDetail(friendId){
|
|
| 301 | 301 |
|
| 302 | 302 |
var form = document.templateForm; |
| 303 | 303 |
var selectAgentCode = $("select[name='selectAgentCode_select']").val(); // 선택 채널ID
|
| 304 | 304 |
|
| 305 | 305 |
form.senderKey.value = selectAgentCode; |
| 306 |
- form.templateCode.value = templateCode; |
|
| 306 |
+ form.friendId.value = friendId; |
|
| 307 | 307 |
|
| 308 |
- form.action="/web/mjon/kakao/template/requestKakaoApiTemplateDetail.do"; |
|
| 308 |
+ form.action="/web/mjon/kakao/template/selectKakaoFriendsTemplateDataDetail.do"; |
|
| 309 | 309 |
form.submit(); |
| 310 | 310 |
|
| 311 | 311 |
} |
... | ... | @@ -359,7 +359,7 @@ |
| 359 | 359 |
<form id="templateForm" name="templateForm" method="post"> |
| 360 | 360 |
|
| 361 | 361 |
<input type="hidden" id="inputSenderKey" name="senderKey" value=""/> |
| 362 |
- <input type="hidden" id="inputTemplateCode" name="templateCode" value=""/> |
|
| 362 |
+ <input type="hidden" id="inputFriendId" name="friendId" value=""/> |
|
| 363 | 363 |
<input type="hidden" id="arrTemplateCode" name="arrTemplateCode" value=""/> |
| 364 | 364 |
|
| 365 | 365 |
</form> |
... | ... | @@ -426,7 +426,7 @@ |
| 426 | 426 |
</c:forEach> |
| 427 | 427 |
</select> |
| 428 | 428 |
<div class="search"> |
| 429 |
- <label for="id" class="label"></label> |
|
| 429 |
+ <label for="inputSearchKeyword" class="label"></label> |
|
| 430 | 430 |
<input type="text" class="search_input" id="inputSearchKeyword" name="inputSearchKeyword" value="<c:out value=""/>" placeholder="템플릿명을 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'"> |
| 431 | 431 |
<button type="button" class="btnType btnType2" onclick="selectTemplateListLoad('1');">검색</button>
|
| 432 | 432 |
</div> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateListAjax.jsp
... | ... | @@ -102,6 +102,14 @@ |
| 102 | 102 |
</p> |
| 103 | 103 |
</div> |
| 104 | 104 |
<div class="allimtalk_content" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;">
|
| 105 |
+ |
|
| 106 |
+ <!-- 템플릿에 이미지가 있는경우 이미지 표시 --> |
|
| 107 |
+ <c:if test="${not empty templatInfoList.imageType}">
|
|
| 108 |
+ <div class="img_box"> |
|
| 109 |
+ <img src="<c:url value='${templatInfoList.templateImageUrl}'/>" alt="">
|
|
| 110 |
+ </div> |
|
| 111 |
+ </c:if> |
|
| 112 |
+ |
|
| 105 | 113 |
<p class="template_text"><c:out value="${fn:replace(fn:replace(templatInfoList.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/></p>
|
| 106 | 114 |
<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 --> |
| 107 | 115 |
<c:forEach var="templatInfoButtonList" items="${templatInfoList.buttonVOList}" varStatus="status">
|
... | ... | @@ -114,9 +122,15 @@ |
| 114 | 122 |
</c:if> |
| 115 | 123 |
</div> |
| 116 | 124 |
<div class="kakao_template_info"> |
| 125 |
+ <dl> |
|
| 126 |
+ <dt>템플릿명</dt> |
|
| 127 |
+ <dd> |
|
| 128 |
+ <c:out value="${templatInfoList.templateName}"/>
|
|
| 129 |
+ </dd> |
|
| 130 |
+ </dl> |
|
| 117 | 131 |
<dl> |
| 118 | 132 |
<dt>등록일</dt> |
| 119 |
- <dd><c:out value="${templatInfoList.lastUpdtPnttm}"/>
|
|
| 133 |
+ <dd><c:out value="${templatInfoList.frstRegistPnttm}"/>
|
|
| 120 | 134 |
<div class="btn_wrap"> |
| 121 | 135 |
<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>
|
| 122 | 136 |
<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 @@ |
| 176 | 190 |
</c:otherwise> |
| 177 | 191 |
</c:choose> |
| 178 | 192 |
</td> |
| 179 |
- <td><c:out value="${templatInfoList.lastUpdtPnttm}"/></td>
|
|
| 193 |
+ <td><c:out value="${templatInfoList.frstRegistPnttm}"/></td>
|
|
| 180 | 194 |
</tr> |
| 181 | 195 |
</c:forEach> |
| 182 | 196 |
</c:when> |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateListPopupAjax.jsp
... | ... | @@ -0,0 +1,217 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> | |
| 5 | +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> | |
| 6 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 7 | +<% pageContext.setAttribute("newLineChar", "\r\n"); %> | |
| 8 | +<% pageContext.setAttribute("newLineChar2", "\n"); %> | |
| 9 | +<!DOCTYPE html> | |
| 10 | +<html lang="ko"> | |
| 11 | +<head> | |
| 12 | + <meta charset="UTF-8"> | |
| 13 | + <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
| 14 | + <title>문자온 - 친구톡 템플릿 선택</title> | |
| 15 | + | |
| 16 | + <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" | |
| 17 | + rel="stylesheet"> | |
| 18 | + <link rel="stylesheet" href="/publish/css/reset.css"> | |
| 19 | + <link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css"> | |
| 20 | + <link rel="stylesheet" href="/publish/css/common.css"> | |
| 21 | + <link rel="stylesheet" href="/publish/css/button.css"> | |
| 22 | + <link rel="stylesheet" href="/publish/css/content.css?date=202301160001"> | |
| 23 | + <link rel="stylesheet" href="/publish/css/mem.css"> | |
| 24 | + <link rel="stylesheet" href="/publish/css/font.css"> | |
| 25 | + <link rel="stylesheet" href="/publish/css/popupLayer.css"> | |
| 26 | + | |
| 27 | + <script src="/publish/js/jquery-3.5.0.js"></script> | |
| 28 | + <script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script> | |
| 29 | + <script src="/publish/js/common.js"></script> | |
| 30 | + <script src="/publish/js/content.js?date=202211070003"></script> | |
| 31 | + <script src="/publish/js/popupLayer.js"></script> | |
| 32 | +</head> | |
| 33 | + | |
| 34 | +<script> | |
| 35 | + | |
| 36 | + //리스트 체크 박스 선택 스크립트 | |
| 37 | + //체크박스 전체 선택 및 해제 | |
| 38 | + var allChkSts = false; //썸네일 타입 리스트 체크박스 상태 | |
| 39 | + var allChkListSts = false; //리스트 타입 리스트 체크박스 상태 | |
| 40 | + | |
| 41 | + $("#btnAllChk").click(function(){ | |
| 42 | + | |
| 43 | + if(!allChkSts){// 전체선택이 해제되어 있을 경우 | |
| 44 | + | |
| 45 | + $("input[name=inputTemplateId]").prop("checked", true); | |
| 46 | + allChkSts = true; | |
| 47 | + | |
| 48 | + $("input:checkbox[name='inputTemplateId']:checked").each(function(index){ | |
| 49 | + | |
| 50 | + var disabledChk = $(this).prop('disabled'); | |
| 51 | + if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 | |
| 52 | + | |
| 53 | + $(this).prop("checked", false); | |
| 54 | + | |
| 55 | + } | |
| 56 | + | |
| 57 | + }); | |
| 58 | + | |
| 59 | + }else{ | |
| 60 | + | |
| 61 | + $("input[name=inputTemplateId]").prop("checked", false); | |
| 62 | + allChkSts = false; | |
| 63 | + | |
| 64 | + } | |
| 65 | + | |
| 66 | + //리스트 타입 화면에 있는 체크박스 해제해 주기 | |
| 67 | + $("input[name=inputTemplateIdList]").prop("checked", false); | |
| 68 | + $("input[name=allCheckList]").prop("checked", false); //리스트 전체 선택 체크박스 해제해주기 | |
| 69 | + | |
| 70 | + allChkListSts = false; | |
| 71 | + }); | |
| 72 | + | |
| 73 | + | |
| 74 | + $("#allCheckList").click(function(){ | |
| 75 | + | |
| 76 | + if(!allChkListSts){// 전체선택이 해제되어 있을 경우 | |
| 77 | + | |
| 78 | + $("input[name=inputTemplateIdList]").prop("checked", true); | |
| 79 | + allChkListSts = true; | |
| 80 | + | |
| 81 | + $("input:checkbox[name='inputTemplateIdList']:checked").each(function(index){ | |
| 82 | + | |
| 83 | + var disabledChk = $(this).prop('disabled'); | |
| 84 | + if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 | |
| 85 | + | |
| 86 | + $(this).prop("checked", false); | |
| 87 | + | |
| 88 | + } | |
| 89 | + | |
| 90 | + }); | |
| 91 | + | |
| 92 | + }else{ | |
| 93 | + | |
| 94 | + $("input[name=inputTemplateIdList]").prop("checked", false); | |
| 95 | + allChkListSts = false; | |
| 96 | + | |
| 97 | + } | |
| 98 | + | |
| 99 | + //썸네일 리스트에 있는 체크박스를 해제해준다. | |
| 100 | + $("input[name=inputTemplateId]").prop("checked", false); | |
| 101 | + allChkSts = false; | |
| 102 | + | |
| 103 | + | |
| 104 | + }); | |
| 105 | + | |
| 106 | + function selectTemplateListLoad(page){ | |
| 107 | + | |
| 108 | + var form = document.listForm; | |
| 109 | + form.searchKeyword.value = $("#inputSearchKeyword").val(); | |
| 110 | + form.senderKey.value = $("select[name='selectAgentCode_select']").val(); | |
| 111 | + form.pageIndex.value = page; | |
| 112 | + form.action = "/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do"; | |
| 113 | + form.submit(); | |
| 114 | + | |
| 115 | + } | |
| 116 | + | |
| 117 | + function fnTemplateDetail(ftId){ | |
| 118 | + | |
| 119 | + opener.parent.myTemplateSelect(ftId); | |
| 120 | + self.close(); | |
| 121 | + | |
| 122 | + } | |
| 123 | + | |
| 124 | + | |
| 125 | +</script> | |
| 126 | +<body> | |
| 127 | + | |
| 128 | + <form id="listForm" name="listForm" method="post"> | |
| 129 | + <input type="hidden" id="pageIndex" name="pageIndex" value="1"/> | |
| 130 | + <input type="hidden" id="searchKeyword" name="searchKeyword" value=""/> | |
| 131 | + <input type="hidden" id="senderKey" name="senderKey" value=""/> | |
| 132 | + </form> | |
| 133 | + <div class="info_popup ad_layer template_choice_popup adpopup01" style="width:930px;"> | |
| 134 | + <div class="popup_heading"> | |
| 135 | + <p>친구톡 템플릿 선택</p> | |
| 136 | + </div> | |
| 137 | + <div class="layer_in"> | |
| 138 | + <div class="popup_search_wrap type2 grayborder grayfill"> | |
| 139 | + <select name="selectAgentCode_select" id="selectAgentCode_select" class="selType2"> | |
| 140 | + <option value="">채널ID 선택</option> | |
| 141 | + <c:forEach var="kakaoProfileInfo" items="${resultProfileList}" varStatus="status"> | |
| 142 | + <option value="${kakaoProfileInfo.senderKey}" <c:if test="${searchVO.senderKey eq kakaoProfileInfo.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option> | |
| 143 | + </c:forEach> | |
| 144 | + </select> | |
| 145 | + <label for="searchKeyword" class="label"></label> | |
| 146 | + <input type="text" class="search_input" id="inputSearchKeyword" name="inputSearchKeyword" value="<c:out value="${searchVO.searchKeyword}"/>" placeholder="템플릿명을 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'"> | |
| 147 | + <button type="button" class="btnType btnType2" onclick="selectTemplateListLoad('1');">검색</button> | |
| 148 | + </div> | |
| 149 | + <div class="template_list"> | |
| 150 | + <ul class="kakao_template_list thumbnail_list"> | |
| 151 | + <c:choose> | |
| 152 | + <c:when test="${not empty kakaoTemplateInfoList}"> | |
| 153 | + <c:forEach var="templatInfoList" items="${kakaoTemplateInfoList}" varStatus="status"> | |
| 154 | + <li onClick="fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;"> | |
| 155 | + <div class="kakao_template_wrap"> | |
| 156 | + <div class="template_cont"> | |
| 157 | + <div class="title"> | |
| 158 | + <%-- <div class="check"> | |
| 159 | + <input type="checkbox" name="inputTemplateId" id="inputTemplateId" value="<c:out value='${templatInfoList.friendId}'/>"> | |
| 160 | + </div> --%> | |
| 161 | + <p title="친구톡 템플릿 내용"> | |
| 162 | + <c:if test="${templatInfoList.adFlag eq 'Y'}">(광고)</c:if> | |
| 163 | + <c:out value="${fn:replace(templatInfoList.yellowId, '@', '')}"/> | |
| 164 | + </p> | |
| 165 | + </div> | |
| 166 | + <!-- 템플릿에 이미지가 있는경우 이미지 표시 --> | |
| 167 | + <c:if test="${not empty templatInfoList.imageType}"> | |
| 168 | + <div class="img_box"> | |
| 169 | + <img src="<c:url value='${templatInfoList.templateImageUrl}'/>" alt=""> | |
| 170 | + </div> | |
| 171 | + </c:if> | |
| 172 | + <div class="text_box"> | |
| 173 | + <p><c:out value="${fn:replace(fn:replace(templatInfoList.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/></p> | |
| 174 | + <!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 --> | |
| 175 | + <c:forEach var="templatInfoButtonList" items="${templatInfoList.buttonVOList}" varStatus="status"> | |
| 176 | + <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button> | |
| 177 | + </c:forEach> | |
| 178 | + </div> | |
| 179 | + </div> | |
| 180 | + <c:if test="${templatInfoList.adFlag eq 'Y'}"> | |
| 181 | + <p class="cf_text">수신거부 | 홈 > 채널차단</p> | |
| 182 | + </c:if> | |
| 183 | + </div> | |
| 184 | + <%-- <div class="btn_wrap"> | |
| 185 | + <button type="button" class="btnType btnType3 btn_template_use" onClick="fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;">템플릿 사용하기</button> | |
| 186 | + </div> --%> | |
| 187 | + <div class="kakao_template_info"> | |
| 188 | + <dl> | |
| 189 | + <dt>템플릿명</dt> | |
| 190 | + <dd> | |
| 191 | + <c:out value="${templatInfoList.templateName}"/> | |
| 192 | + </dd> | |
| 193 | + </dl> | |
| 194 | + <dl> | |
| 195 | + <dt>등록일</dt> | |
| 196 | + <dd><c:out value="${templatInfoList.frstRegistPnttm}"/></dd> | |
| 197 | + </dl> | |
| 198 | + </div> | |
| 199 | + </li> | |
| 200 | + </c:forEach> | |
| 201 | + </c:when> | |
| 202 | + <c:otherwise> | |
| 203 | + <li class="template_none">등록된 템플릿이 없습니다.</li> | |
| 204 | + </c:otherwise> | |
| 205 | + </c:choose> | |
| 206 | + </ul> | |
| 207 | + </div> | |
| 208 | + <!-- table 안 ul의 가운데 정렬을 위한 style 처리 --> | |
| 209 | + <!-- pagination --> | |
| 210 | + <ul class="pagination"> | |
| 211 | + <ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="selectTemplateListLoad" /> | |
| 212 | + </ul><!-- //pageWrap --> | |
| 213 | + </div> | |
| 214 | + </div> | |
| 215 | + | |
| 216 | +</body> | |
| 217 | +</html>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateRegist.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateRegist.jsp
... | ... | @@ -211,6 +211,7 @@ |
| 211 | 211 |
|
| 212 | 212 |
$('.kakao_image').css("display", "block");
|
| 213 | 213 |
$("#kakaoImg").attr("src", imgUrl);
|
| 214 |
+ $("#imageFileName").val(fileName);
|
|
| 214 | 215 |
|
| 215 | 216 |
}else if(code == "2002"){//일반 이미지 가로 세로 크기 오류 발생
|
| 216 | 217 |
|
... | ... | @@ -319,6 +320,13 @@ |
| 319 | 320 |
|
| 320 | 321 |
} |
| 321 | 322 |
|
| 323 |
+ if(inputTemplateImageUrl == ''){
|
|
| 324 |
+ |
|
| 325 |
+ alert("이미지를 선택해 주세요.");
|
|
| 326 |
+ return false; |
|
| 327 |
+ |
|
| 328 |
+ } |
|
| 329 |
+ |
|
| 322 | 330 |
} |
| 323 | 331 |
|
| 324 | 332 |
|
... | ... | @@ -356,7 +364,7 @@ |
| 356 | 364 |
|
| 357 | 365 |
var result = returnData.result; |
| 358 | 366 |
|
| 359 |
- if(result == "notLogin") {//차단 발신번호인 경우 등록 불가
|
|
| 367 |
+ if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
|
|
| 360 | 368 |
alert("로그인후 진행이 가능합니다.");
|
| 361 | 369 |
}else if(returnData.result == "success") {
|
| 362 | 370 |
alert("템플릿 저장이 완료되었습니다.");
|
... | ... | @@ -413,7 +421,7 @@ |
| 413 | 421 |
var code = returnData.code; |
| 414 | 422 |
var msg = returnData.msg; |
| 415 | 423 |
|
| 416 |
- if(result == "notLogin") {//차단 발신번호인 경우 등록 불가
|
|
| 424 |
+ if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
|
|
| 417 | 425 |
alert("로그인후 진행이 가능합니다.");
|
| 418 | 426 |
}else if(returnData.result == "success") {
|
| 419 | 427 |
|
... | ... | @@ -427,6 +435,7 @@ |
| 427 | 435 |
$("#templateImageUrl").val("");
|
| 428 | 436 |
$('.kakao_image').css("display", "none");
|
| 429 | 437 |
$("#kakaoImg").attr("src", "");
|
| 438 |
+ $("#img_file_0").click(); //이미지첨부 안함 라이오 선택해주기
|
|
| 430 | 439 |
return false; |
| 431 | 440 |
|
| 432 | 441 |
}else{
|
... | ... | @@ -565,7 +574,7 @@ |
| 565 | 574 |
<!--// tab button --> |
| 566 | 575 |
</div> |
| 567 | 576 |
<form id="bizForm" name="bizForm" method="multipart/form-data"> |
| 568 |
- <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf"> |
|
| 577 |
+ <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf"> |
|
| 569 | 578 |
<input type="hidden" id="menuSubTab" name="menuSubTab" value="tabSubFt"> |
| 570 | 579 |
<input type="hidden" id="inputSenderKey" name="senderKey" value=""/> |
| 571 | 580 |
<input type="hidden" id="yellowId" name="yellowId" value=""/> |
... | ... | @@ -576,7 +585,7 @@ |
| 576 | 585 |
<input type="hidden" id="adFlag" name="adFlag" value=""> |
| 577 | 586 |
<input type="hidden" id="templateImageUrl" name="templateImageUrl" value=""> |
| 578 | 587 |
<input type="hidden" id="templateContent" name="templateContent" value=""> |
| 579 |
- |
|
| 588 |
+ <input type="hidden" id="imageFileName" name="imageFileName" value=""/> |
|
| 580 | 589 |
|
| 581 | 590 |
<div class="send_general friend_talk_wrap kakao_wrap"> |
| 582 | 591 |
<div class="send_left"> |
... | ... | @@ -602,7 +611,7 @@ |
| 602 | 611 |
<th>템플릿명</th> |
| 603 | 612 |
<td> |
| 604 | 613 |
<input type="text" class="template_name" id="inputTemplateName" name="inputTemplateName" placeholder="템플릿 명을 입력해주세요" maxLength="100"> |
| 605 |
- <p class="template_name_cf">최대 100자, 템플릿 관리용</p> |
|
| 614 |
+ <p class="template_name_cf">최대 50자, 템플릿 관리용</p> |
|
| 606 | 615 |
</td> |
| 607 | 616 |
</tr> |
| 608 | 617 |
<tr> |
... | ... | @@ -656,9 +665,8 @@ |
| 656 | 665 |
<tr> |
| 657 | 666 |
<th>광고포함 여부</th> |
| 658 | 667 |
<td> |
| 659 |
- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" checked><label for="ad_Y">광고성 정보 |
|
| 660 |
- 포함</label> |
|
| 661 |
- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N"><label for="ad_N">포함 안함</label> |
|
| 668 |
+ <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" checked><label for="ad_Y">광고성 정보 포함</label> |
|
| 669 |
+ <!-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N"><label for="ad_N">포함 안함</label> --> |
|
| 662 | 670 |
</td> |
| 663 | 671 |
</tr> |
| 664 | 672 |
<tr> |
... | ... | @@ -798,128 +806,8 @@ |
| 798 | 806 |
<button type="button" class="btnType btnType7" |
| 799 | 807 |
onclick="miniPopup(this)">이모티콘</button> |
| 800 | 808 |
<div class="send_miniPop spc_character kakao_emoticon"> |
| 801 |
- <div class="cnt_character"> |
|
| 802 |
- <div class="box_character"> |
|
| 803 |
- <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a> |
|
| 804 |
- <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a> |
|
| 805 |
- <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a> |
|
| 806 |
- <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a> |
|
| 807 |
- <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a> |
|
| 808 |
- <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a> |
|
| 809 |
- <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a> |
|
| 810 |
- <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a> |
|
| 811 |
- <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a> |
|
| 812 |
- <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a> |
|
| 813 |
- <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a> |
|
| 814 |
- <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a> |
|
| 815 |
- <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a> |
|
| 816 |
- <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a> |
|
| 817 |
- <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a> |
|
| 818 |
- <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a> |
|
| 819 |
- <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a> |
|
| 820 |
- <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a> |
|
| 821 |
- <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a> |
|
| 822 |
- <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a> |
|
| 823 |
- <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a> |
|
| 824 |
- <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a> |
|
| 825 |
- <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a> |
|
| 826 |
- <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a> |
|
| 827 |
- <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a> |
|
| 828 |
- <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a> |
|
| 829 |
- <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a> |
|
| 830 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a> |
|
| 831 |
- <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a> |
|
| 832 |
- <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a> |
|
| 833 |
- <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a> |
|
| 834 |
- <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a> |
|
| 835 |
- <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a> |
|
| 836 |
- <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a> |
|
| 837 |
- <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a> |
|
| 838 |
- <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a> |
|
| 839 |
- <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a> |
|
| 840 |
- <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a> |
|
| 841 |
- <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a> |
|
| 842 |
- <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a> |
|
| 843 |
- <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a> |
|
| 844 |
- <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a> |
|
| 845 |
- <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a> |
|
| 846 |
- <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a> |
|
| 847 |
- <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a> |
|
| 848 |
- <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a> |
|
| 849 |
- <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a> |
|
| 850 |
- <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a> |
|
| 851 |
- <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a> |
|
| 852 |
- <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a> |
|
| 853 |
- <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a> |
|
| 854 |
- <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a> |
|
| 855 |
- <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a> |
|
| 856 |
- <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a> |
|
| 857 |
- <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a> |
|
| 858 |
- <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a> |
|
| 859 |
- <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a> |
|
| 860 |
- <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a> |
|
| 861 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a> |
|
| 862 |
- <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a> |
|
| 863 |
- <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a> |
|
| 864 |
- <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a> |
|
| 865 |
- <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a> |
|
| 866 |
- <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a> |
|
| 867 |
- <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a> |
|
| 868 |
- <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a> |
|
| 869 |
- <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a> |
|
| 870 |
- <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a> |
|
| 871 |
- <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a> |
|
| 872 |
- <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a> |
|
| 873 |
- <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a> |
|
| 874 |
- <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a> |
|
| 875 |
- <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a> |
|
| 876 |
- <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a> |
|
| 877 |
- <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a> |
|
| 878 |
- <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a> |
|
| 879 |
- <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a> |
|
| 880 |
- <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a> |
|
| 881 |
- <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a> |
|
| 882 |
- <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a> |
|
| 883 |
- <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a> |
|
| 884 |
- <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a> |
|
| 885 |
- <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a> |
|
| 886 |
- <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a> |
|
| 887 |
- <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a> |
|
| 888 |
- <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a> |
|
| 889 |
- <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a> |
|
| 890 |
- <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a> |
|
| 891 |
- <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a> |
|
| 892 |
- <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a> |
|
| 893 |
- <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a> |
|
| 894 |
- <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a> |
|
| 895 |
- <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a> |
|
| 896 |
- <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a> |
|
| 897 |
- <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a> |
|
| 898 |
- <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a> |
|
| 899 |
- <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a> |
|
| 900 |
- <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a> |
|
| 901 |
- <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a> |
|
| 902 |
- <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a> |
|
| 903 |
- <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a> |
|
| 904 |
- <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a> |
|
| 905 |
- <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a> |
|
| 906 |
- <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a> |
|
| 907 |
- <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a> |
|
| 908 |
- <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a> |
|
| 909 |
- <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a> |
|
| 910 |
- <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a> |
|
| 911 |
- <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a> |
|
| 912 |
- <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a> |
|
| 913 |
- <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a> |
|
| 914 |
- <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a> |
|
| 915 |
- <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a> |
|
| 916 |
- <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a> |
|
| 917 |
- <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a> |
|
| 918 |
- <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a> |
|
| 919 |
- </div> |
|
| 920 |
- </div> |
|
| 921 |
- <button type="button" class="btn_close" |
|
| 922 |
- onclick="miniPopup(this)">닫기</button> |
|
| 809 |
+ <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %> |
|
| 810 |
+ <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button> |
|
| 923 | 811 |
</div> |
| 924 | 812 |
</div> |
| 925 | 813 |
<div class="btn_popup_wrap template_call_wrap"> |
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
... | ... | @@ -773,9 +773,6 @@ |
| 773 | 773 |
fnByteString(contents); |
| 774 | 774 |
|
| 775 | 775 |
} |
| 776 |
- |
|
| 777 |
- |
|
| 778 |
- |
|
| 779 | 776 |
|
| 780 | 777 |
});//문자 바이트수 계산하기 끝 |
| 781 | 778 |
|
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp
... | ... | @@ -1213,7 +1213,7 @@ |
| 1213 | 1213 |
removeEmptyValues(formData); |
| 1214 | 1214 |
|
| 1215 | 1215 |
// 선택된 데이터 추가 |
| 1216 |
- formData["mjonMsgTabulListVO"] = $selectedData; |
|
| 1216 |
+ formData["mjonMsgSendVOList"] = $selectedData; |
|
| 1217 | 1217 |
|
| 1218 | 1218 |
// JSON 데이터 확인 |
| 1219 | 1219 |
console.log("최종 formData:", JSON.stringify(formData));
|
--- src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
... | ... | @@ -21,7 +21,7 @@ |
| 21 | 21 |
//이전달 첫날/마지막날 조회 |
| 22 | 22 |
if(date.getMonth()+1 == 1){
|
| 23 | 23 |
lastfulstday = date.getFullYear()-1 + "/12" + "/01"; |
| 24 |
- lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0); |
|
| 24 |
+ lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+""; |
|
| 25 | 25 |
}else{
|
| 26 | 26 |
lastfulstday = date.getFullYear() + "/" ; |
| 27 | 27 |
lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ; |
--- src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoCancelListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoCancelListAjax.jsp
... | ... | @@ -53,6 +53,7 @@ |
| 53 | 53 |
}); |
| 54 | 54 |
|
| 55 | 55 |
</script> |
| 56 |
+ <input type="button" id="tooltopClick" data-tooltip="rev_popup02" style="display:none;"/> |
|
| 56 | 57 |
<div class="list_info"> |
| 57 | 58 |
<p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
| 58 | 59 |
<div> |
--- src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoView.jsp
... | ... | @@ -25,7 +25,7 @@ |
| 25 | 25 |
//이전달 첫날/마지막날 조회 |
| 26 | 26 |
if(date.getMonth()+1 == 1){
|
| 27 | 27 |
lastfulstday = date.getFullYear()-1 + "/12" + "/01"; |
| 28 |
- lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0); |
|
| 28 |
+ lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+""; |
|
| 29 | 29 |
}else{
|
| 30 | 30 |
lastfulstday = date.getFullYear() + "/" ; |
| 31 | 31 |
lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ; |
... | ... | @@ -394,6 +394,7 @@ |
| 394 | 394 |
|
| 395 | 395 |
// 전송건별 |
| 396 | 396 |
$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
|
| 397 |
+ |
|
| 397 | 398 |
// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정 |
| 398 | 399 |
popupTab($('#atBtn'),'1');
|
| 399 | 400 |
$('#tooltopClick').trigger('click');
|
... | ... | @@ -683,7 +684,11 @@ |
| 683 | 684 |
<ul class="list_tab"> |
| 684 | 685 |
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
| 685 | 686 |
<li class="tab"><button type="button" onclick="fnTabLoad('at',1); return false;">알림톡</button></li>
|
| 686 |
-<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft',2); return false;">친구톡</button></li> -->
|
|
| 687 |
+ <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost')
|
|
| 688 |
+ || fn:contains(pageContext.request.requestURL , '192.168.0.33') |
|
| 689 |
+ || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> |
|
| 690 |
+ <li class="tab"><button type="button" onclick="fnTabLoad('ft',2); return false;">친구톡</button></li>
|
|
| 691 |
+ </c:if> |
|
| 687 | 692 |
<!-- <li class="tab"><button type="button" onclick="fnTabLoad('M',3); return false;">그림(MMS)</button></li> -->
|
| 688 | 693 |
</ul><!--// tab button --> |
| 689 | 694 |
</div> |
--- src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedMsgView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedMsgView.jsp
... | ... | @@ -25,7 +25,7 @@ |
| 25 | 25 |
//이전달 첫날/마지막날 조회 |
| 26 | 26 |
if(date.getMonth()+1 == 1){
|
| 27 | 27 |
lastfulstday = date.getFullYear()-1 + "/12" + "/01"; |
| 28 |
- lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0); |
|
| 28 |
+ lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+""; |
|
| 29 | 29 |
}else{
|
| 30 | 30 |
lastfulstday = date.getFullYear() + "/" ; |
| 31 | 31 |
lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ; |
+++ src/main/webapp/js/kakao/ft/friendstalkExcel.js
... | ... | @@ -0,0 +1,153 @@ |
| 1 | +/** | |
| 2 | + * | |
| 3 | + * @author : 우영두 | |
| 4 | + * @fileName : friendstalkExcel.js | |
| 5 | + * @date : 2024.01.08 | |
| 6 | + * @description : 친구톡 excel 관련된 fuction .js | |
| 7 | + * =========================================================== | |
| 8 | + * DATE AUTHOR NOTE | |
| 9 | + * ----------------------------------------------------------- * | |
| 10 | + * 2024.01.08 우영두 최초 생성 | |
| 11 | + * | |
| 12 | + * | |
| 13 | + * | |
| 14 | + */ | |
| 15 | + | |
| 16 | + | |
| 17 | +$(document).ready(function(){ | |
| 18 | + | |
| 19 | + //치환문자 없는 엑섹불러오기 버튼 클릭시 파일 첨부 실행 | |
| 20 | + $('.c1').click(function(){ // 엑셀파일 불러오기 선택 시 | |
| 21 | + | |
| 22 | + $("#excelFile").click(); | |
| 23 | + | |
| 24 | + }); | |
| 25 | + | |
| 26 | +}); | |
| 27 | + | |
| 28 | + | |
| 29 | +//엑셀 파일 불러오기 | |
| 30 | +function excelExport(event){ | |
| 31 | + | |
| 32 | + var data = new FormData(document.excelForm); | |
| 33 | + data.append("file0", $('#excelFile').prop('files')[0]); | |
| 34 | + | |
| 35 | + var fileValue = $("#excelFile").val().split("\\"); | |
| 36 | + var fileName = fileValue[fileValue.length-1]; | |
| 37 | + | |
| 38 | + var fileExt = fileName.split('.').pop().toLowerCase(); | |
| 39 | + | |
| 40 | + if(fileExt.length > 0){ | |
| 41 | + if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) { | |
| 42 | + | |
| 43 | + alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.'); | |
| 44 | + return false; | |
| 45 | + | |
| 46 | + } | |
| 47 | + | |
| 48 | + | |
| 49 | + var url = ""; | |
| 50 | + | |
| 51 | + if(fileExt == "xls" || fileExt == "xlsx"){ | |
| 52 | + | |
| 53 | + url = "/web/mjon/msgdata/sendExelFilePhoneNumAjax.do"; | |
| 54 | + | |
| 55 | + }else if(fileExt = "txt"){ | |
| 56 | + | |
| 57 | + url = "/web/mjon/msgdata/sendTxtFilePhoneNumAjax.do"; | |
| 58 | + | |
| 59 | + }else{ | |
| 60 | + | |
| 61 | + alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.'); | |
| 62 | + return; | |
| 63 | + | |
| 64 | + } | |
| 65 | + | |
| 66 | + //엑셀 데이터 변수에 자료가 있으면 지워준다. | |
| 67 | + if(excelAddr.length > 0){ | |
| 68 | + | |
| 69 | + excelAddr = []; | |
| 70 | + | |
| 71 | + } | |
| 72 | + | |
| 73 | + $.ajax({ | |
| 74 | + type: "POST", | |
| 75 | + enctype: 'multipart/form-data', | |
| 76 | + url: url, | |
| 77 | + data: data, | |
| 78 | + dataType:'json', | |
| 79 | + async: true, | |
| 80 | + processData: false, | |
| 81 | + contentType: false, | |
| 82 | + cache: false, | |
| 83 | + //timeout: 600000, | |
| 84 | + success: function (returnData, status) { | |
| 85 | + if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 | |
| 86 | + | |
| 87 | + if(returnData.success){ | |
| 88 | + | |
| 89 | + var data = returnData.data; | |
| 90 | + var message = returnData.message; | |
| 91 | + | |
| 92 | + if(message != '' ){ | |
| 93 | + alert(returnData.message); | |
| 94 | + } | |
| 95 | + | |
| 96 | + if(data != null){ | |
| 97 | + | |
| 98 | + $.each(data, function(i, item){ | |
| 99 | + | |
| 100 | + if(checkHpNum(item.phone)){ | |
| 101 | + | |
| 102 | + excelAddr.push({phone: item.phone, name: item.name, rep1: item.replace1, rep2: item.replace2, rep3: item.replace3, rep4: item.replace4}); | |
| 103 | + | |
| 104 | + }/* else{ | |
| 105 | + | |
| 106 | + alert("엑셀 파일 데이터의 형식이 맞지 않는 부분이 있습니다."); | |
| 107 | + excelAddr = []; //엑셀 데이터 저장 변수 초기화 | |
| 108 | + $("#excelFile").val(""); //첨부파일 input 초기화 | |
| 109 | + $("#excelNm").val(""); // 첨부파일 명 초기화 | |
| 110 | + fileName = ""; | |
| 111 | + return; | |
| 112 | + | |
| 113 | + } */ | |
| 114 | + | |
| 115 | + }); | |
| 116 | + | |
| 117 | + } | |
| 118 | + | |
| 119 | + }else{ | |
| 120 | + alert(returnData.message); | |
| 121 | +// alert("첨부파일 불러오는 중 오류가 발생하였습니다."); | |
| 122 | + excelAddr = []; //엑셀 데이터 저장 변수 초기화 | |
| 123 | + $("#excelFile").val(""); //첨부파일 input 초기화 | |
| 124 | + $("#excelNm").val(""); // 첨부파일 명 초기화 | |
| 125 | + fileName = ""; | |
| 126 | + return; | |
| 127 | + | |
| 128 | + } | |
| 129 | + } else if(status== 'fail'){ | |
| 130 | + alert("첨부파일 불러오는 중 오류가 발생하였습니다."); | |
| 131 | + console.log("status : fail ~"); | |
| 132 | + } | |
| 133 | + }, | |
| 134 | + error: function (e) { | |
| 135 | + alert("첨부파일 불러오는 중 오류가 발생하였습니다."); | |
| 136 | + console.log("ERROR : ", e); | |
| 137 | + }, | |
| 138 | + beforeSend : function(xmlHttpRequest) { | |
| 139 | + //로딩창 show | |
| 140 | + $('.loading_layer').addClass('active'); | |
| 141 | + }, | |
| 142 | + complete : function(xhr, textStatus) { | |
| 143 | + //로딩창 hide | |
| 144 | + $('.loading_layer').removeClass('active'); | |
| 145 | + } | |
| 146 | + }); | |
| 147 | + | |
| 148 | + $("#excelFile").val(""); | |
| 149 | + $("#excelNm").val(fileName); | |
| 150 | + | |
| 151 | + } | |
| 152 | + | |
| 153 | +} |
+++ src/main/webapp/js/kakao/ft/ftPriceClclt.js
... | ... | @@ -0,0 +1,329 @@ |
| 1 | +/** | |
| 2 | + * | |
| 3 | + * @author : 우영두 | |
| 4 | + * @fileName : ftPriceClclt.js | |
| 5 | + * @date : 2024.01.12 | |
| 6 | + * @description : 친구톡 및 대체문자 금액 연산.js | |
| 7 | + * =========================================================== | |
| 8 | + * DATE AUTHOR NOTE | |
| 9 | + * ----------------------------------------------------------- * | |
| 10 | + * 2024.01.12 우영두 최초 생성 | |
| 11 | + * | |
| 12 | + * | |
| 13 | + * | |
| 14 | + */ | |
| 15 | + | |
| 16 | + | |
| 17 | +/** | |
| 18 | + * | |
| 19 | + * @param {*} totRows 수신자 수 | |
| 20 | + * @description 금액 계산 function | |
| 21 | + * 대체 문자 X | |
| 22 | + * 카카오 금액 * 수신자 수 계산 | |
| 23 | + */ | |
| 24 | +function totalFtPriceSum(totRows){ | |
| 25 | + | |
| 26 | + var collNumCnt = parseInt(totRows); //받는사람 건수 | |
| 27 | + var price = $("#kakaoFtPrice").val(); //개별 건수 금액 | |
| 28 | + var totalPrice = 0; //전체 금액 | |
| 29 | + var totalStr = "0"; //전체 합계 금액 | |
| 30 | + var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기 | |
| 31 | + | |
| 32 | + if(!userMoney > 0){ | |
| 33 | + | |
| 34 | + userMoney = 0; | |
| 35 | + | |
| 36 | + } | |
| 37 | + //헤더 영역 보유 금액 콤마 문자 제거 | |
| 38 | + if(userMoney != ''){ | |
| 39 | + | |
| 40 | + userMoney = userMoney.replaceAll("," , ""); | |
| 41 | + | |
| 42 | + } | |
| 43 | + | |
| 44 | + //대체문자가 있는 경우 대체문자의 단/장문에 따른 금액 계산 | |
| 45 | + var subMsgSts = $("#send_fail_check").is(":checked"); | |
| 46 | + | |
| 47 | + if(subMsgSts){ | |
| 48 | + | |
| 49 | + var conLeng = conByteLeng($('#smsTxtArea').val()); // 내용 문자 입력 바이트 수 계산하기 | |
| 50 | + if(conLeng > 90){ | |
| 51 | + price = $("#longPrice").val(); | |
| 52 | + }else{ | |
| 53 | + price = $("#shortPrice").val(); | |
| 54 | + } | |
| 55 | + | |
| 56 | + } | |
| 57 | + | |
| 58 | + totalPrice = price * collNumCnt; | |
| 59 | + | |
| 60 | + // 소수점 첫째자리 까지 표시 | |
| 61 | + totalPrice = totalPrice.toFixed(1); | |
| 62 | + | |
| 63 | + if(totalPrice > 0){ | |
| 64 | + | |
| 65 | + //totalStr = totalPrice.toFixed(2); | |
| 66 | + totalStr = totalPrice; | |
| 67 | + | |
| 68 | + } | |
| 69 | + | |
| 70 | + //개별 문자 단가 파라미터에 입력 | |
| 71 | + $('#eachPrice').val(numberWithCommas(price)); | |
| 72 | + | |
| 73 | + //결제금액 합계 파라이터에 입력 | |
| 74 | + $('#totPrice').val(numberWithCommas(totalStr)); | |
| 75 | + | |
| 76 | + //결제금액 합계 화면에 표시 | |
| 77 | + $('#totalPriceTxt').text(numberWithCommas(totalStr)); | |
| 78 | + | |
| 79 | + $('#repPriceTxt').hide(); | |
| 80 | + | |
| 81 | + return totalStr; | |
| 82 | + | |
| 83 | +} | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | +/* | |
| 88 | + * ====================================================================================================================== | |
| 89 | + * | |
| 90 | + * */ | |
| 91 | + | |
| 92 | +//카카오 mms sms 단가 셋팅 | |
| 93 | +var KAKAO_FT_PRICE = ''; | |
| 94 | +var SHORT_PRICE = ''; | |
| 95 | +var LONG_PRICE = ''; | |
| 96 | + | |
| 97 | +/*$(document).ready(function(){ | |
| 98 | + | |
| 99 | + // 카카오 mms sms 단가 셋팅 | |
| 100 | + KAKAO_FT_PRICE = $('#kakaoFtPrice').val(); | |
| 101 | + SHORT_PRICE = $('#shortPrice').val(); | |
| 102 | + LONG_PRICE = $('#longPrice').val(); | |
| 103 | + | |
| 104 | + ///////////////////////////////////////// Mutation Observer | |
| 105 | + // 감시 대상 node 선택 | |
| 106 | + // 변수X 수신자 목록 | |
| 107 | + let target01 = document.getElementById('wrap01_body'); | |
| 108 | + // 변수O 수신자 목록 | |
| 109 | + let target02 = document.getElementById('wrap02'); | |
| 110 | + // 대체 문자 단문 장문 텍스트 노드 | |
| 111 | + let target03 = document.getElementById('afterDeny'); | |
| 112 | + | |
| 113 | + // 감시자의 설정 | |
| 114 | + let option = { | |
| 115 | + subtree : true // 대상 노드의 자식 요소뿐만 아니라 후손 요소의 변화까지 감지 | |
| 116 | + , childList : true // 대상 노드의 자식 요소(텍스트 포함)의 변화 감지 | |
| 117 | + , attributes : true // 해당 노드의 attribute 속성 | |
| 118 | + | |
| 119 | + // , characterData: true // 대상 노드의 데이터 변화 감지 | |
| 120 | + }; | |
| 121 | + | |
| 122 | + | |
| 123 | + // wrap01 감시자 인스턴스 만들기 | |
| 124 | + let observer_wrap01 = new MutationObserver((mutations) => { | |
| 125 | + // 노드가 변경 됐을 때의 작업 | |
| 126 | + fn_priceClclt(); | |
| 127 | + }); | |
| 128 | + | |
| 129 | + // wrap02 감시자 인스턴스 만들기 | |
| 130 | + let observer_wrap02 = new MutationObserver((mutations) => { | |
| 131 | + // 노드가 변경 됐을 때의 작업 | |
| 132 | + fn_priceClclt(); | |
| 133 | + }); | |
| 134 | + | |
| 135 | + // wrap03 감시자 인스턴스 만들기 | |
| 136 | + let observer_wrap03 = new MutationObserver((mutations) => { | |
| 137 | + // 노드가 변경 됐을 때의 작업 | |
| 138 | + fn_priceClclt(); | |
| 139 | + }); | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + // 대상 노드에 감시자 전달 | |
| 145 | + observer_wrap01.observe(target01, option); | |
| 146 | + observer_wrap02.observe(target02, option); | |
| 147 | + observer_wrap03.observe(target03, option); | |
| 148 | + | |
| 149 | + ///////////////////////////////////////// //Mutation Observer | |
| 150 | + | |
| 151 | +});*/ | |
| 152 | + | |
| 153 | +/** | |
| 154 | + * @description 금액 계산 function | |
| 155 | + */ | |
| 156 | +function fn_priceClclt(){ | |
| 157 | + | |
| 158 | + // 미리보기 텍스트 | |
| 159 | + var templateHtml = $('#smsTxtArea').val(); | |
| 160 | + // var templateHtml = $('.template_text').html(); | |
| 161 | + | |
| 162 | + // 수신 번호 개수 | |
| 163 | + var phoneSu = $('.phoneArea').length; | |
| 164 | + // 대체문자 있는지 확인 | |
| 165 | + var isSendFailChecked = $("#send_fail_check").is(":checked"); | |
| 166 | + // 치환문자 여부 확인 | |
| 167 | + var txtReplYn = $('#txtReplYn').val() | |
| 168 | + // 대체문자 하위에 장문 / 단문 select | |
| 169 | + var msgTypeText = $('.msg_com').text().trim(); | |
| 170 | + | |
| 171 | + if(typeof templateHtml == 'undefined') return false; | |
| 172 | + else if(isSendFailChecked && txtReplYn=='Y') fn_sendFailCheckedAndTxtRepl_Y(templateHtml, msgTypeText, phoneSu); // 대체문자 체크 & 치환문자 Y | |
| 173 | + else if(isSendFailChecked && txtReplYn=='N') fn_sendFailCheckedAndTxtRepl_N(msgTypeText, phoneSu); // 대체문자 체크 & 치환문자 N | |
| 174 | + else fn_sendFailUnChecked(phoneSu); | |
| 175 | + | |
| 176 | +} | |
| 177 | + | |
| 178 | +/** | |
| 179 | + * | |
| 180 | + * @param {*} phoneSu 수신자 수 | |
| 181 | + * @description 금액 계산 function | |
| 182 | + * 대체 문자 X | |
| 183 | + * 카카오 금액 * 수신자 수 계산 | |
| 184 | + */ | |
| 185 | +function fn_sendFailUnChecked(phoneSu){ | |
| 186 | + | |
| 187 | + // 카카오 금액 * 수신자 수 | |
| 188 | + // fn_writePriceText() 첫 파라미터가 null이면 카카오 전송으로 인식 | |
| 189 | + fn_writePriceText('', phoneSu); | |
| 190 | + // $('#totalPriceTxt').text((KAKAO_AT_PRICE * phoneSu).toFixed(1)); | |
| 191 | + fn_priceText('알림톡', phoneSu); | |
| 192 | +} | |
| 193 | + | |
| 194 | +/** | |
| 195 | + * | |
| 196 | + * @param {*} templateHtml 템플릿html | |
| 197 | + * @param {*} msgTypeText 발송 타입 | |
| 198 | + * @param {*} phoneSu 수신자 수 | |
| 199 | + * @description 금액 계산 function | |
| 200 | + * 대체 문자 O | |
| 201 | + * 치환 문자 O | |
| 202 | + */ | |
| 203 | +function fn_sendFailCheckedAndTxtRepl_Y(templateHtml, msgTypeText, phoneSu){ | |
| 204 | + | |
| 205 | + // 대체문자 하위에 html 그대로의 byte 계산이 단문일 경우에만 치환 후 장문이 있는지 확인 | |
| 206 | + if(msgTypeText == '단문'){ | |
| 207 | + msgTypeText = fn_transHtml(msgTypeText, templateHtml); | |
| 208 | + } | |
| 209 | + | |
| 210 | + fn_writePriceText(msgTypeText, phoneSu); | |
| 211 | + fn_priceText(msgTypeText, phoneSu); | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | +} | |
| 216 | + | |
| 217 | +/** | |
| 218 | + * | |
| 219 | + * @param {*} msgTypeText 발송 타입 | |
| 220 | + * @param {*} phoneSu 수신자 수 | |
| 221 | + * @description 금액 계산 function | |
| 222 | + * 대체 문자 O | |
| 223 | + * 치환 문자 X | |
| 224 | + */ | |
| 225 | +function fn_sendFailCheckedAndTxtRepl_N(msgTypeText, phoneSu){ | |
| 226 | + | |
| 227 | + fn_priceText(msgTypeText, phoneSu); | |
| 228 | + fn_writePriceText(msgTypeText, phoneSu); | |
| 229 | +} | |
| 230 | + | |
| 231 | + | |
| 232 | +/** | |
| 233 | + * | |
| 234 | + * @param {*} msgTypeText 발송 타입 | |
| 235 | + * @param {*} phoneSu 수신자 수 | |
| 236 | + * @returns | |
| 237 | + * @description 발송 금액 계산 / 노출 | |
| 238 | + */ | |
| 239 | +function fn_priceText(msgTypeText, phoneSu){ | |
| 240 | + | |
| 241 | + // $("#repPriceTxt").is(":visible") => 발송 금액 show hide 여부 | |
| 242 | + if(phoneSu === 0){ | |
| 243 | + | |
| 244 | + $('#repPriceTxt').empty(); | |
| 245 | + $('#repPriceTxt').hide(); | |
| 246 | + return false; | |
| 247 | + } | |
| 248 | + // 텍스트 초기화 | |
| 249 | + $('#repPriceTxt').show(); | |
| 250 | + $('#repPriceTxt').empty(); | |
| 251 | + | |
| 252 | + var priceText = '$SENDTYPE$ :<strong>$SU$</strong>건'; | |
| 253 | + priceText = priceText.replace('$SENDTYPE$', msgTypeText).replace('$SU$', phoneSu); | |
| 254 | + | |
| 255 | + $('#repPriceTxt').append(priceText); | |
| 256 | +} | |
| 257 | + | |
| 258 | +/** | |
| 259 | + * @description 발송금액 라인 text / 금액 초기화 | |
| 260 | + */ | |
| 261 | +function priceInit(){ | |
| 262 | + if($("#repPriceTxt").is(":visible")){ | |
| 263 | + $('#repPriceTxt').empty(); | |
| 264 | + $('#repPriceTxt').hide(); | |
| 265 | + } | |
| 266 | + $('#totalPriceTxt').text(0.0); | |
| 267 | + | |
| 268 | +} | |
| 269 | + | |
| 270 | +/** | |
| 271 | + * | |
| 272 | + * @param {*} msgTypeText 발송 타입 | |
| 273 | + * @param {*} phoneSu 수신자 수 | |
| 274 | + * @description 발송 금액 '발송타입:00건' 노출 | |
| 275 | + */ | |
| 276 | +function fn_writePriceText(msgTypeText, phoneSu){ | |
| 277 | + | |
| 278 | + var price; | |
| 279 | + msgTypeText = msgTypeText.trim(); | |
| 280 | + if(msgTypeText == '단문') price = SHORT_PRICE * phoneSu; | |
| 281 | + else if(msgTypeText == '장문') price = LONG_PRICE * phoneSu; | |
| 282 | + else price = KAKAO_AT_PRICE * phoneSu; // 카카오 | |
| 283 | + | |
| 284 | + $('#totalPriceTxt').text((price).toFixed(1)); | |
| 285 | +} | |
| 286 | + | |
| 287 | + | |
| 288 | +/** | |
| 289 | + * | |
| 290 | + * @param {*} msgTypeText 발송 타입 : 단문 | |
| 291 | + * @param {*} templateHtml 템플릿 html | |
| 292 | + * @returns msgTypeText : 단문 or 장문 | |
| 293 | + * @description 치환 데이터 있는 경우 단문일 경우만 호출 | |
| 294 | + * 치환 후 장문 데이터일경우 'returns 장문'으로 끝남 | |
| 295 | + */ | |
| 296 | +function fn_transHtml(msgTypeText, templateHtml){ | |
| 297 | + | |
| 298 | + // 템플릿 | |
| 299 | + templateHtml = templateHtml.trim().replace(/(<br>|<br\/>|<br \/>)/g, '\n'); | |
| 300 | + // 치환 부분 '#{내용}'만 추출 | |
| 301 | + var varList = $("#excelTemplateContent").val().match(/#\{([^}]+)\}/g); | |
| 302 | + // 템플릿을 반복할때마다 담는 temp 선언 | |
| 303 | + var tempTemplateHtml; | |
| 304 | + // 치환 데이터 담는 변수 선언 | |
| 305 | + var replaceStr; | |
| 306 | + | |
| 307 | + // excelBody 부분 반복 시작 | |
| 308 | + $('.excelBody').each(function(i, t){ | |
| 309 | + tempTemplateHtml = templateHtml; | |
| 310 | + | |
| 311 | + $(this).find('.transData').each(function(index, item){ | |
| 312 | + // console.log('item text :: ', $(item).text().trim()); | |
| 313 | + replaceStr = $(item).text().trim(); | |
| 314 | + tempTemplateHtml = tempTemplateHtml.replace(varList[index], replaceStr); | |
| 315 | + }); | |
| 316 | + // 치환 후 byte 계산 | |
| 317 | + // 장문이면 break; | |
| 318 | + if(90 < conByteLeng(tempTemplateHtml)) | |
| 319 | + { | |
| 320 | + msgTypeText = '장문'; | |
| 321 | + return false; | |
| 322 | + } | |
| 323 | + }); | |
| 324 | + | |
| 325 | + | |
| 326 | + return msgTypeText; | |
| 327 | +} | |
| 328 | + | |
| 329 | + (No newline at end of file) |
+++ src/main/webapp/js/kakao/ft/ftTabulator.js
... | ... | @@ -0,0 +1,869 @@ |
| 1 | +/** | |
| 2 | + * | |
| 3 | + * @author : 우영두 | |
| 4 | + * @fileName : ftTabulator.js | |
| 5 | + * @date : 2024.01.09 | |
| 6 | + * @description : 받는사람 목록 tabulator 관련 js | |
| 7 | + * =========================================================== | |
| 8 | + * DATE AUTHOR NOTE | |
| 9 | + * ----------------------------------------------------------- * | |
| 10 | + * 2024.01.09 우영두 최초 생성 | |
| 11 | + * | |
| 12 | + * | |
| 13 | + * | |
| 14 | + */ | |
| 15 | + | |
| 16 | +$(document).ready(function (){ | |
| 17 | + | |
| 18 | + //받는사람 연락처 내용 처리 | |
| 19 | + //Tabulator AJAX Data Loading | |
| 20 | + tableL = new Tabulator(".callList_box", { | |
| 21 | + height:"255px", | |
| 22 | + layout:"fitColumns", | |
| 23 | + //data:tabledata, | |
| 24 | + //autoColumns:true, | |
| 25 | + headerHozAlign:"center", | |
| 26 | + validationMode:"highlight", | |
| 27 | + //clipboard:false, | |
| 28 | + //clipboardCopySelector:"table", | |
| 29 | + //clipboardPasteAction:"insert", // insert, update, replace | |
| 30 | + placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional) | |
| 31 | + resizableColumns:false, | |
| 32 | + columns:[ //Define Table Columns | |
| 33 | + {formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){ | |
| 34 | + cell.getRow().toggleSelect(); | |
| 35 | + }}, | |
| 36 | + {title:"이름", hozAlign:"center", field:"name", editor:"input", validator:["maxLength:12"], cellEdited:function(cell){ | |
| 37 | + //cell - cell component | |
| 38 | + fnReplCell(); | |
| 39 | + }}, | |
| 40 | + {title:"휴대폰", hozAlign:"center", field:"phone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:12"], cellEdited:function(cell){ | |
| 41 | + //cell - cell component | |
| 42 | + fnDuplPhone(); | |
| 43 | + }}, | |
| 44 | + {title:"[*1*]", hozAlign:"center", field:"rep1", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ | |
| 45 | + //cell - cell component | |
| 46 | + fnReplCell(); | |
| 47 | + }}, | |
| 48 | + {title:"[*2*]", hozAlign:"center", field:"rep2", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ | |
| 49 | + //cell - cell component | |
| 50 | + fnReplCell(); | |
| 51 | + }}, | |
| 52 | + {title:"[*3*]", hozAlign:"center", field:"rep3", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ | |
| 53 | + //cell - cell component | |
| 54 | + fnReplCell(); | |
| 55 | + }}, | |
| 56 | + {title:"[*4*]", hozAlign:"center", field:"rep4", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ | |
| 57 | + //cell - cell component | |
| 58 | + fnReplCell(); | |
| 59 | + }}, | |
| 60 | + | |
| 61 | + ], | |
| 62 | + validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 - 아직 잘 모르겠음 | |
| 63 | + //take action on validation fail | |
| 64 | + var valid = cell.isValid(); | |
| 65 | + var fieldNm = cell.getField(); | |
| 66 | + var cellVal = cell.getValue(); | |
| 67 | + var returnVal = ""; | |
| 68 | + if(!valid){ | |
| 69 | + | |
| 70 | + if(fieldNm == "name"){ | |
| 71 | + alert("받는사람 이름은 최대 12글자까지만 입력 가능합니다."); | |
| 72 | + cell.setValue(strMaxLengthSubstring(cellVal, 11)); //스크립트 함수가 0부터 시작이므로 원하는 글자수 -1을 해줘야한다. | |
| 73 | + cell.clearValidation(); | |
| 74 | + }else if(fieldNm == "phone"){ | |
| 75 | + alert("휴대폰번호는 하이픈(-)을 제외한 숫자만 정확히 입력해 주세요."); | |
| 76 | + }else{ | |
| 77 | + alert("치환문자를 정확히 입력해 주세요. 40글자 이내로 입력 가능합니다."); | |
| 78 | + cell.setValue(strMaxLengthSubstring(cellVal, 39)); | |
| 79 | + cell.clearValidation(); | |
| 80 | + } | |
| 81 | + | |
| 82 | + //해당 셀 데이터 삭제 | |
| 83 | + //cell.setValue(""); | |
| 84 | + | |
| 85 | + } | |
| 86 | + return value % parameters.phone; | |
| 87 | + }, | |
| 88 | + | |
| 89 | + }); | |
| 90 | + | |
| 91 | + | |
| 92 | + //주소록 불러오기 팝업 내용 | |
| 93 | + //Tabulator AJAX Data Loading | |
| 94 | + tableAddr = new Tabulator(".callAddr_box", { | |
| 95 | + height:"255px", | |
| 96 | + layout:"fitColumns", | |
| 97 | + headerHozAlign:"center", | |
| 98 | + validationMode:"highlight", | |
| 99 | + placeholder:"주소록 그룹을 선택해 주세요.", //fit columns to width of table (optional) | |
| 100 | + resizableColumns:false, | |
| 101 | + columns:[ //Define Table Columns | |
| 102 | + {formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){ | |
| 103 | + cell.getRow().toggleSelect(); | |
| 104 | + } | |
| 105 | + }, | |
| 106 | + {title:"그룹명", hozAlign:"center", field:"addrGroupNm", editor:"input", width:120, validator:["required","minLength:2", "maxLength:40"]}, | |
| 107 | + {title:"이름", hozAlign:"center", field:"addrName", editor:"input", width:120, validator:["maxLength:12"]}, | |
| 108 | + {title:"휴대폰번호", hozAlign:"center", field:"addrPhone", editor:"input", width:120, validator:["required","minLength:10", "maxLength:11"]}, | |
| 109 | + | |
| 110 | + ], | |
| 111 | + validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 - 아직 잘 모르겠음 | |
| 112 | + var valid = cell.isValid(); | |
| 113 | + var fieldNm = cell.getField(); | |
| 114 | + if(!valid){ | |
| 115 | + if(fieldNm == "addrName"){ | |
| 116 | + alert("받는사람 이름은 최대 12글자까지만 입력 가능합니다."); | |
| 117 | + }else if(fieldNm == "addrPhone"){ | |
| 118 | + alert("휴대폰번호는 하이픈(-)을 제외한 숫자만 정확히 입력해 주세요."); | |
| 119 | + }else if(fieldNm == "addrGroupNm"){ | |
| 120 | + alert("그룹명을 정확히 입력해 주세요. 2 ~ 40글자 이내로 입력 가능합니다."); | |
| 121 | + } | |
| 122 | + | |
| 123 | + //해당 셀 데이터 삭제 | |
| 124 | + cell.setValue(""); | |
| 125 | + } | |
| 126 | + return value % parameters.addrPhone; | |
| 127 | + }, | |
| 128 | + | |
| 129 | + }); | |
| 130 | + | |
| 131 | + | |
| 132 | + //받는사람 번호 버튼 클릭시 Tabulator에 데이터 넣어주기 | |
| 133 | + $('.addCallToF').click(function(){ | |
| 134 | + | |
| 135 | + var callToNum = $('#callTo').val(); | |
| 136 | + if(callToNum == null || callToNum == ""){ | |
| 137 | + | |
| 138 | + alert("받는사람 번호를 입력해 주세요."); | |
| 139 | + return false; | |
| 140 | + | |
| 141 | + }else if(!checkHpNum(callToNum)){ | |
| 142 | + | |
| 143 | + alert("올바른 전화번호를 입력해 주세요."); | |
| 144 | + $('#callTo').val(""); | |
| 145 | + return false; | |
| 146 | + } | |
| 147 | + | |
| 148 | + //핸드폰 번호에 '-' 문자 제거하기 | |
| 149 | + callToNum = removeDash(callToNum); | |
| 150 | + | |
| 151 | + //기존 받는사람 연락처 모두 불러오기 | |
| 152 | + var data = tableL.getRows(); | |
| 153 | + var tableData = []; | |
| 154 | + var dpCnt = 0; | |
| 155 | + for(var i=0; i < tableL.getRows().length; i++){ | |
| 156 | + | |
| 157 | + if(callToNum == data[i].getData().phone){ | |
| 158 | + | |
| 159 | + dpCnt++; | |
| 160 | + | |
| 161 | + } | |
| 162 | + | |
| 163 | + } | |
| 164 | + | |
| 165 | + if(dpCnt > 0){ | |
| 166 | + | |
| 167 | + alert("받는사람 리스트에 동일한 연락처가 있습니다."); | |
| 168 | + $('#callTo').val(""); | |
| 169 | + return false; | |
| 170 | + | |
| 171 | + }else{ | |
| 172 | + | |
| 173 | + tabledata = [{phone: callToNum},]; | |
| 174 | + | |
| 175 | + //빈 row 데이터 삭제하기 | |
| 176 | + var befData = tableL.getRows(); | |
| 177 | + var totLen = tableL.getRows().length; | |
| 178 | + | |
| 179 | + for(var i=0; i < totLen; i++){ | |
| 180 | + | |
| 181 | + tableData.push({phone: data[i].getData().phone.trim(), name: data[i].getData().name}); | |
| 182 | + | |
| 183 | + } | |
| 184 | + | |
| 185 | + //연락처 추가해 주기 | |
| 186 | + addPhoneInfo(tabledata); | |
| 187 | + | |
| 188 | + $('#callTo').val(""); | |
| 189 | + | |
| 190 | + } | |
| 191 | + | |
| 192 | + }); | |
| 193 | + | |
| 194 | + | |
| 195 | + //받는사람 전체삭제 버튼 처리 | |
| 196 | + $('.all_del').click(function(){ | |
| 197 | + | |
| 198 | + var data = tableL.getRows(); | |
| 199 | + | |
| 200 | + if(data == null || data == ""){ | |
| 201 | + | |
| 202 | + alert("받는사람을 추가해 주세요."); | |
| 203 | + return false; | |
| 204 | + | |
| 205 | + }else{ | |
| 206 | + | |
| 207 | + if(confirm("받는사람 목록을 모두 삭제하시겠습니까?")){ | |
| 208 | + tableL.clearData(); | |
| 209 | + $("#rowTotCnt").text(0); //총건수 수정 | |
| 210 | + $("#rowDupCnt").text(0); //중복건수 수정 | |
| 211 | + totalFtPriceSum(0); //결제 금액 수정 | |
| 212 | + } | |
| 213 | + | |
| 214 | + } | |
| 215 | + | |
| 216 | + }); | |
| 217 | + | |
| 218 | + // 받는사람 선택삭제 버튼 처리해주기 | |
| 219 | + $('.select_del').click(function(){ | |
| 220 | + | |
| 221 | + if(tableL == null || tableL == ""){ | |
| 222 | + | |
| 223 | + alert("받는사람을 추가해 주세요."); | |
| 224 | + return false; | |
| 225 | + | |
| 226 | + } | |
| 227 | + | |
| 228 | + var selectedData = tableL.getSelectedRows(); | |
| 229 | + | |
| 230 | + if(selectedData == "" || selectedData == null){ | |
| 231 | + | |
| 232 | + alert("삭제할 연락처를 선택해주세요."); | |
| 233 | + return false; | |
| 234 | + | |
| 235 | + }else{ // 선택한 Row 데이터 삭제하기 | |
| 236 | + | |
| 237 | + if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){ | |
| 238 | + | |
| 239 | + for(var i=0; i < selectedData.length; i++){ | |
| 240 | + | |
| 241 | + selectedData[i].delete(); | |
| 242 | + | |
| 243 | + } | |
| 244 | + | |
| 245 | + totRows = tableL.getRows().length; | |
| 246 | + | |
| 247 | + var smsTxtArea = $('#inputTemplateContent').val(); | |
| 248 | + | |
| 249 | + //일괄변환 문구 결제금액 처리 | |
| 250 | + if(smsTxtArea.indexOf("#{이름}") > -1 | |
| 251 | + || smsTxtArea.indexOf("#{1}") > -1 | |
| 252 | + || smsTxtArea.indexOf("#{2}") > -1 | |
| 253 | + || smsTxtArea.indexOf("#{3}") > -1 | |
| 254 | + || smsTxtArea.indexOf("#{4}") > -1){ | |
| 255 | + | |
| 256 | + fnFtReplCell(); | |
| 257 | + | |
| 258 | + }else{ | |
| 259 | + //결제 금액 구하기 | |
| 260 | + totalFtPriceSum(totRows); | |
| 261 | + } | |
| 262 | + | |
| 263 | + //결제금액 합계 파라이터에 입력 | |
| 264 | + $('#rowTotCnt').text(numberWithCommas(totRows)); | |
| 265 | + | |
| 266 | + } | |
| 267 | + | |
| 268 | + } | |
| 269 | + | |
| 270 | + }); | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + //주소록 불러오기 버튼 클릭시 | |
| 275 | + $('.popupAddr').click(function(){ | |
| 276 | + | |
| 277 | + var login = '${LoginVO.id}'; | |
| 278 | + | |
| 279 | + if(login == null || login == ''){ | |
| 280 | + | |
| 281 | + alert("로그인 후 이용이 가능합니다."); | |
| 282 | + return false; | |
| 283 | + | |
| 284 | + } | |
| 285 | + | |
| 286 | + $("#addrGroupLoad").load("/web/mjon/msgdata/selectAddrGroupListAjax.do", "" ,function(response, status, xhr){ | |
| 287 | + //리스트 스크롤 처리해주기 | |
| 288 | + $(".adr_pop_list").mCustomScrollbar({ | |
| 289 | + axis: 'y', | |
| 290 | + scrollbarPosition: "outside", | |
| 291 | + theme: "dark", | |
| 292 | + autoHideScrollbar: false | |
| 293 | + }); | |
| 294 | + }); | |
| 295 | + | |
| 296 | + }); | |
| 297 | + | |
| 298 | + | |
| 299 | + //엑섹불러오기 버튼 클릭시 파일 첨부 실행 | |
| 300 | + $('.upImg').click(function(){ // 엑셀파일 불러오기 선택 시 | |
| 301 | + | |
| 302 | + $("#imgFile").click(); | |
| 303 | + | |
| 304 | + }); | |
| 305 | + | |
| 306 | + //최근전송내역 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기) | |
| 307 | + $(document).on('click', '#latestAddPhone', function (){ | |
| 308 | + | |
| 309 | + var addPhoneList = []; //신규로 추가할 전화번호 저장변수 | |
| 310 | + | |
| 311 | + $("input:checkbox[name='latAddrChk']:checked").each(function(index){ | |
| 312 | + | |
| 313 | + var chkPhone = $(this).val(); | |
| 314 | + | |
| 315 | + if(!checkHpNum(chkPhone)){ | |
| 316 | + | |
| 317 | + alert("올바른 전화번호가 아닙니다."); | |
| 318 | + return false; | |
| 319 | + | |
| 320 | + }else{ | |
| 321 | + | |
| 322 | + addPhoneList.push({phone: removeDash(chkPhone.trim())}); | |
| 323 | + | |
| 324 | + } | |
| 325 | + | |
| 326 | + }); | |
| 327 | + | |
| 328 | + | |
| 329 | + if(addPhoneList.length > 0){ | |
| 330 | + //연락처 추가해 주기 | |
| 331 | + addPhoneInfo(addPhoneList); | |
| 332 | + $("#btnLatestAddPhoneClose").trigger("click"); | |
| 333 | + } | |
| 334 | + else { | |
| 335 | + alert("연락처를 선택해주세요."); | |
| 336 | + return false; | |
| 337 | + } | |
| 338 | + | |
| 339 | + //중복연락처 제거 | |
| 340 | + //var removeDuplData = dupliPhoneData(addPhoneList); | |
| 341 | + | |
| 342 | + //받는사람 목록에 추가 | |
| 343 | + //tableL.addData(removeDuplData); | |
| 344 | + | |
| 345 | + //총 받는사람 수 계산 | |
| 346 | + //totRows = tableL.getRows().length; | |
| 347 | + //updateTotCnt(totRows); | |
| 348 | + | |
| 349 | + //결제 금액 구하기 | |
| 350 | + //totalPriceSum(totRows); | |
| 351 | + | |
| 352 | + }); | |
| 353 | + | |
| 354 | + //최근전송내역 팝업 선택 취소 버튼 처리 | |
| 355 | + $(document).on('click', '#latestCancelPhone', function (){ | |
| 356 | + | |
| 357 | + $("input[name=latAddrChk]").prop("checked", false); | |
| 358 | + | |
| 359 | + }); | |
| 360 | + | |
| 361 | + //최근전송내역 팝업 삭제 버튼 처리 | |
| 362 | + $(document).on('click', '#latestAddrDel', function (){ | |
| 363 | + | |
| 364 | + $(this).parent("#latestLi").remove(); | |
| 365 | + | |
| 366 | + }); | |
| 367 | + | |
| 368 | + //자주보내는 번호 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기) | |
| 369 | + $(document).on('click', '#bookMarkAddPhone', function (){ | |
| 370 | + | |
| 371 | + var addPhoneList = []; //신규로 추가할 전화번호 저장변수 | |
| 372 | + | |
| 373 | + $("input:checkbox[name='bookAddrChk']:checked").each(function(index){ | |
| 374 | + | |
| 375 | + var chkPhone = $(this).val(); | |
| 376 | + | |
| 377 | + if(!checkHpNum(chkPhone)){ | |
| 378 | + | |
| 379 | + alert("올바른 전화번호가 아닙니다."); | |
| 380 | + return false; | |
| 381 | + | |
| 382 | + }else{ | |
| 383 | + | |
| 384 | + addPhoneList.push({phone: removeDash(chkPhone.trim())}); | |
| 385 | + | |
| 386 | + } | |
| 387 | + | |
| 388 | + }); | |
| 389 | + | |
| 390 | + if(addPhoneList.length > 0){ | |
| 391 | + //연락처 추가해 주기 | |
| 392 | + addPhoneInfo(addPhoneList); | |
| 393 | + $("#btnLatestAddPhoneClose").trigger("click"); | |
| 394 | + } | |
| 395 | + else { | |
| 396 | + alert("연락처를 선택해주세요."); | |
| 397 | + return false; | |
| 398 | + } | |
| 399 | + | |
| 400 | + //중복연락처 제거 | |
| 401 | + //var removeDuplData = dupliPhoneData(addPhoneList); | |
| 402 | + | |
| 403 | + //받는사람 목록에 추가 | |
| 404 | + //tableL.addData(removeDuplData); | |
| 405 | + | |
| 406 | + //총 받는사람 수 계산 | |
| 407 | + //totRows = tableL.getRows().length; | |
| 408 | + //updateTotCnt(totRows); | |
| 409 | + | |
| 410 | + //결제 금액 구하기 | |
| 411 | + //totalPriceSum(totRows); | |
| 412 | + | |
| 413 | + }); | |
| 414 | + | |
| 415 | + //자주보내는 번호 팝업 선택 취소 버튼 처리 | |
| 416 | + $(document).on('click', '#bookMarkCancelPhone', function (){ | |
| 417 | + | |
| 418 | + $("input[name=bookAddrChk]").prop("checked", false); | |
| 419 | + | |
| 420 | + }); | |
| 421 | + | |
| 422 | + //자주보내는 번호 팝업 삭제 버튼 처리 | |
| 423 | + $(document).on('click', '#bookMarkAddrDel', function (){ | |
| 424 | + | |
| 425 | + $(this).parent("#bookMarkLi").remove(); | |
| 426 | + | |
| 427 | + }); | |
| 428 | + | |
| 429 | + // 자주보내는 번호 팝업 닫기 버튼 처리 | |
| 430 | + $(document).on('click', '#btnLatestAddPhoneClose', function (){ | |
| 431 | + // 자주보내는 번호 체크박스 해제처리 | |
| 432 | + setCheckBoxUnChecked(); | |
| 433 | + }); | |
| 434 | + | |
| 435 | + // 자주보내는 번호 체크박스 해제처리 | |
| 436 | + function setCheckBoxUnChecked() { | |
| 437 | + $("input[name=latAddrChk]").prop("checked", false); | |
| 438 | + $("input[name=bookAddrChk]").prop("checked", false); | |
| 439 | + } | |
| 440 | + | |
| 441 | + | |
| 442 | + //오류 검사 버튼 처리 | |
| 443 | + $('.check_validity').click(function(){ | |
| 444 | + | |
| 445 | + var invalid = tableL.getInvalidCells(); //오류 데이터 체크 | |
| 446 | + var dataLen = tableL.getRows().length; //연락처 데이터 갯수 | |
| 447 | + var totLen = invalid.length; //오류 데이터 갯수 | |
| 448 | + var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수 | |
| 449 | + | |
| 450 | + if(dataLen > 0){ //연락처 정보가 있으면 수행 | |
| 451 | + | |
| 452 | + if(totLen > 0){ //내용에 오류가 있으면 수행 | |
| 453 | + | |
| 454 | + //오류 데이터 값 저장 | |
| 455 | + for(var i=0; i < totLen; i++){ | |
| 456 | + | |
| 457 | + var cellValue = invalid[i].getValue(); | |
| 458 | + | |
| 459 | + if(i == 0){ | |
| 460 | + | |
| 461 | + errMsg = cellValue; | |
| 462 | + | |
| 463 | + }else{ | |
| 464 | + | |
| 465 | + errMsg = errMsg +", "+ cellValue; | |
| 466 | + | |
| 467 | + } | |
| 468 | + | |
| 469 | + } | |
| 470 | + | |
| 471 | + if(errMsg == "" || errMsg == null){ | |
| 472 | + | |
| 473 | + alert("내용에 오류가 있습니다."); | |
| 474 | + return false; | |
| 475 | + | |
| 476 | + }else{ | |
| 477 | + | |
| 478 | + alert(errMsg + "의 내용에 오류가 있습니다."); | |
| 479 | + return false; | |
| 480 | + | |
| 481 | + } | |
| 482 | + | |
| 483 | + }else{ | |
| 484 | + | |
| 485 | + alert("오류 데이터가 없습니다."); | |
| 486 | + return false; | |
| 487 | + | |
| 488 | + } | |
| 489 | + | |
| 490 | + }else{ | |
| 491 | + | |
| 492 | + alert("연락처를 입력해 주세요."); | |
| 493 | + return false; | |
| 494 | + | |
| 495 | + } | |
| 496 | + | |
| 497 | + }); | |
| 498 | + | |
| 499 | +}); | |
| 500 | + | |
| 501 | +var tableErrorData = []; | |
| 502 | +var totRows = 0; // 좌측 받는사람 총 갯수 | |
| 503 | + | |
| 504 | + | |
| 505 | +/* | |
| 506 | +* 토탈 카운트 화면에 노출 | |
| 507 | +* 변수 없는 리스트만 체크 | |
| 508 | +*/ | |
| 509 | +function updateTotCnt(){ | |
| 510 | + | |
| 511 | + $("#rowTotCnt").text($('#wrap01_body .list_body').length); | |
| 512 | + | |
| 513 | +} | |
| 514 | + | |
| 515 | +//주소록 불러오기에서 수신자 리스트 화면에 추가해주기 | |
| 516 | +function addPhoneInfo(data){ | |
| 517 | + | |
| 518 | + if(data == null){ | |
| 519 | + | |
| 520 | + alert("연락처 정보가 없습니다."); | |
| 521 | + return; | |
| 522 | + | |
| 523 | + }else{ | |
| 524 | + | |
| 525 | + var idx = 0; | |
| 526 | + var newData = data;//중복 연락처는 하나만 남기고 모두 제거 | |
| 527 | + | |
| 528 | + var recTableData = tableL.getRows(); // 받는사람 리스트의 전체 목록을 저장 | |
| 529 | + var tableData = []; | |
| 530 | + | |
| 531 | + //기존 받는사람 리스트를 배열에 미리 담아둔다. | |
| 532 | + if(recTableData.length > 0){ | |
| 533 | + | |
| 534 | + for(var j=0; j < recTableData.length; j++){ | |
| 535 | + | |
| 536 | + 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}); | |
| 537 | + | |
| 538 | + } | |
| 539 | + | |
| 540 | + } | |
| 541 | + | |
| 542 | + //받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다. | |
| 543 | + for(var i=0; i < newData.length; i++){ | |
| 544 | + | |
| 545 | + 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}); | |
| 546 | + | |
| 547 | + } | |
| 548 | + | |
| 549 | + var temp = tableData.length; | |
| 550 | + | |
| 551 | + //기존 수신 리스트를 지워준 후 신규 전체 리스트를 추가해준다. | |
| 552 | + tableL.clearData(); //기존 받는사람 목록을 삭제. | |
| 553 | + tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기 | |
| 554 | + _fileForm2 = []; //form file data 초기화 | |
| 555 | + _fileIdx = 0; //form file idx 초기화 | |
| 556 | + | |
| 557 | + totRows = tableL.getRows().length; | |
| 558 | + | |
| 559 | + var smsTxtArea = $('#inputTemplateContent').val(); | |
| 560 | + | |
| 561 | + //일괄변환 문구 결제금액 처리 | |
| 562 | + if(smsTxtArea.indexOf("#{이름}") > -1 | |
| 563 | + || smsTxtArea.indexOf("#{1}") > -1 | |
| 564 | + || smsTxtArea.indexOf("#{2}") > -1 | |
| 565 | + || smsTxtArea.indexOf("#{3}") > -1 | |
| 566 | + || smsTxtArea.indexOf("#{4}") > -1){ | |
| 567 | + | |
| 568 | + fnFtReplCell(); | |
| 569 | + | |
| 570 | + }else{ | |
| 571 | + | |
| 572 | + //결제 금액 구하기 | |
| 573 | + totalFtPriceSum(totRows); | |
| 574 | + | |
| 575 | + } | |
| 576 | + | |
| 577 | + //결제금액 합계 파라이터에 입력 | |
| 578 | + $('#rowTotCnt').text(numberWithCommas(totRows)); | |
| 579 | + | |
| 580 | + } | |
| 581 | + | |
| 582 | +} | |
| 583 | + | |
| 584 | + | |
| 585 | +function addrToList(){ | |
| 586 | + | |
| 587 | + var selectedData = tableAddr.getSelectedRows(); | |
| 588 | + var tableData = []; | |
| 589 | + | |
| 590 | + if(selectedData == "" || selectedData == null){ | |
| 591 | + | |
| 592 | + alert("주소록을 선택해 주세요."); | |
| 593 | + return false; | |
| 594 | + | |
| 595 | + }else{ // 선택한 Row 데이터 저장해주기 | |
| 596 | + | |
| 597 | + for(var i=0; i < selectedData.length; i++){ | |
| 598 | + | |
| 599 | + //좌측 받는사람 리스트를 담아둔 배열에 데이터를 추가해 준다. | |
| 600 | + tableData.push({phone: removeDash(selectedData[i].getData().addrPhone), | |
| 601 | + name: selectedData[i].getData().addrName, | |
| 602 | + rep1: selectedData[i].getData().addrRep1, | |
| 603 | + rep2: selectedData[i].getData().addrRep2, | |
| 604 | + rep3: selectedData[i].getData().addrRep3, | |
| 605 | + rep4: selectedData[i].getData().addrRep4} | |
| 606 | + ); | |
| 607 | + | |
| 608 | + } | |
| 609 | + | |
| 610 | + //선택한 데이터 받는사람 리스트에 추가해 주기 | |
| 611 | + addPhoneInfo(tableData); | |
| 612 | + $(".closeAddr").trigger("click"); | |
| 613 | + | |
| 614 | + //주소록 레이어 팝업의 Tabulator 데이터 지워주기 | |
| 615 | + tableAddr.clearData(); | |
| 616 | + | |
| 617 | + } | |
| 618 | + | |
| 619 | +} | |
| 620 | + | |
| 621 | + | |
| 622 | +//특정문구 일괄변환 문자길이 체크 하기 | |
| 623 | +function fnFtReplCell(){ | |
| 624 | + | |
| 625 | + var smsTxtArea = $('#inputTemplateContent').val(); | |
| 626 | + | |
| 627 | + //이벤트 잔여 캐시 자동 처리 관련 변수 | |
| 628 | + var eachPrice = parseFloat($("#eachPrice").val()); | |
| 629 | + var kakaoFtPrice = parseFloat($("#kakaoFtPrice").val()); | |
| 630 | + var shortPrice = parseFloat($("#shortPrice").val()); | |
| 631 | + var longPrice = parseFloat($("#longPrice").val()); | |
| 632 | + | |
| 633 | + if(smsTxtArea.indexOf("#{이름}") > -1 | |
| 634 | + || smsTxtArea.indexOf("#{1}") > -1 | |
| 635 | + || smsTxtArea.indexOf("#{2}") > -1 | |
| 636 | + || smsTxtArea.indexOf("#{3}") > -1 | |
| 637 | + || smsTxtArea.indexOf("#{4}") > -1){ | |
| 638 | + | |
| 639 | + | |
| 640 | + var rowData = tableL.getRows(); | |
| 641 | + var recTableData = tableL.getRows(); // 받는사람 리스트의 전체 목록을 저장 | |
| 642 | + //var tableData = []; | |
| 643 | + | |
| 644 | + var msg_short = 0; //단문문자 갯수 | |
| 645 | + var msg_long = 0; //장문문자 갯수 | |
| 646 | + | |
| 647 | + //일괄변환문자 포함 여부 변경 - 문자내용에 치환변환 문자는 있지만 받는사람 데이터에 치환 데이터를 안넣는 경우 오류가 발생하여 상태값 입력 위치 상단으로 변경함. | |
| 648 | + //치환데이터가 없는 경우 Alert 띄우고 빠져나가기 때문에 치환문자 상태 체크값이 누락되어서 변경함 - 20230407 우영두 | |
| 649 | + $('#txtReplYn').val("Y"); | |
| 650 | + | |
| 651 | + var nmStatus = false; | |
| 652 | + var rep1Status = false; | |
| 653 | + var rep2Status = false; | |
| 654 | + var rep3Status = false; | |
| 655 | + var rep4Status = false; | |
| 656 | + var varValStatus = true; | |
| 657 | + | |
| 658 | + if(smsTxtArea.indexOf("#{이름}") > -1){ | |
| 659 | + | |
| 660 | + nmStatus = true; | |
| 661 | + } | |
| 662 | + | |
| 663 | + if(smsTxtArea.indexOf("#{1}") > -1){ | |
| 664 | + | |
| 665 | + rep1Status = true; | |
| 666 | + } | |
| 667 | + | |
| 668 | + if(smsTxtArea.indexOf("#{2}") > -1){ | |
| 669 | + | |
| 670 | + rep2Status = true; | |
| 671 | + } | |
| 672 | + | |
| 673 | + if(smsTxtArea.indexOf("#{3}") > -1){ | |
| 674 | + | |
| 675 | + rep3Status = true; | |
| 676 | + } | |
| 677 | + | |
| 678 | + if(smsTxtArea.indexOf("#{4}") > -1){ | |
| 679 | + | |
| 680 | + rep4Status = true; | |
| 681 | + } | |
| 682 | + | |
| 683 | + | |
| 684 | + //기존 받는사람 리스트를 배열에 미리 담아둔다. | |
| 685 | + if(recTableData.length > 0){ | |
| 686 | + | |
| 687 | + for(var j=0; j < recTableData.length; j++){ | |
| 688 | + | |
| 689 | + var smsTxt = smsTxtArea; | |
| 690 | + | |
| 691 | + if(typeof recTableData[j].getData().name != 'undefined' && recTableData[j].getData().name != null && recTableData[j].getData().name != ""){ | |
| 692 | + | |
| 693 | + var name = recTableData[j].getData().name; | |
| 694 | + smsTxt = stringReplaceAll(smsTxt, "#{이름}", name); | |
| 695 | + | |
| 696 | + }else{ | |
| 697 | + | |
| 698 | + if(nmStatus){ | |
| 699 | + //alert("#{이름} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요."); | |
| 700 | + varValStatus = false; | |
| 701 | + //break; | |
| 702 | + } | |
| 703 | + | |
| 704 | + } | |
| 705 | + | |
| 706 | + if(typeof recTableData[j].getData().rep1 != 'undefined' && recTableData[j].getData().rep1 != null && recTableData[j].getData().rep1 != ""){ | |
| 707 | + | |
| 708 | + var rep1 = recTableData[j].getData().rep1; | |
| 709 | + smsTxt = stringReplaceAll(smsTxt, "#{1}", rep1); | |
| 710 | + | |
| 711 | + }else{ | |
| 712 | + | |
| 713 | + if(rep1Status){ | |
| 714 | + //alert("#{1} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요."); | |
| 715 | + varValStatus = false; | |
| 716 | + //break; | |
| 717 | + } | |
| 718 | + | |
| 719 | + } | |
| 720 | + | |
| 721 | + if(typeof recTableData[j].getData().rep2 != 'undefined' && recTableData[j].getData().rep2 != null && recTableData[j].getData().rep2 != ""){ | |
| 722 | + | |
| 723 | + var rep2 = recTableData[j].getData().rep2; | |
| 724 | + smsTxt = stringReplaceAll(smsTxt, "#{2}", rep2); | |
| 725 | + | |
| 726 | + }else{ | |
| 727 | + | |
| 728 | + if(rep2Status){ | |
| 729 | + //alert("#{2} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요."); | |
| 730 | + varValStatus = false; | |
| 731 | + //break; | |
| 732 | + } | |
| 733 | + | |
| 734 | + } | |
| 735 | + | |
| 736 | + if(typeof recTableData[j].getData().rep3 != 'undefined' && recTableData[j].getData().rep3 != null && recTableData[j].getData().rep3 != ""){ | |
| 737 | + | |
| 738 | + var rep3 = recTableData[j].getData().rep3; | |
| 739 | + smsTxt = stringReplaceAll(smsTxt, "#{3}", rep3); | |
| 740 | + | |
| 741 | + }else{ | |
| 742 | + | |
| 743 | + if(rep3Status){ | |
| 744 | + //alert("#{3} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요."); | |
| 745 | + varValStatus = false; | |
| 746 | + //break; | |
| 747 | + } | |
| 748 | + | |
| 749 | + } | |
| 750 | + | |
| 751 | + if(typeof recTableData[j].getData().rep4 != 'undefined' && recTableData[j].getData().rep4 != null && recTableData[j].getData().rep4 != ""){ | |
| 752 | + | |
| 753 | + var rep4 = recTableData[j].getData().rep4; | |
| 754 | + smsTxt = stringReplaceAll(smsTxt, "#{4}", rep4); | |
| 755 | + | |
| 756 | + }else{ | |
| 757 | + | |
| 758 | + if(rep4Status){ | |
| 759 | + //alert("#{4} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요."); | |
| 760 | + varValStatus = false; | |
| 761 | + //break; | |
| 762 | + } | |
| 763 | + | |
| 764 | + } | |
| 765 | + | |
| 766 | + var msgLen = strMaxCharacterCnt(smsTxt); | |
| 767 | + var maxLenChar = 1000; | |
| 768 | + | |
| 769 | + var imgType = $("#imageType").val(); | |
| 770 | + | |
| 771 | + //일반 이미지 첨부시 글자수 최대 400글자 | |
| 772 | + if(imgType == "I"){ | |
| 773 | + | |
| 774 | + maxLenChar = 400; | |
| 775 | + | |
| 776 | + }else if(imgType == "W"){ | |
| 777 | + //와이드 이미지 첨부시 글자수 최대 76글자 | |
| 778 | + maxLenChar = 76; | |
| 779 | + | |
| 780 | + } | |
| 781 | + | |
| 782 | + if(msgLen < 1){ | |
| 783 | + | |
| 784 | + | |
| 785 | + }else if(msgLen > maxLenChar){ | |
| 786 | + | |
| 787 | + alert("친구톡 내용은 "+ maxLenChar +" 자를 넘을 수 없습니다."); | |
| 788 | + tableL.clearData(); //기존 받는사람 목록을 삭제. | |
| 789 | + return false; | |
| 790 | + | |
| 791 | + } | |
| 792 | + | |
| 793 | + } | |
| 794 | + | |
| 795 | + //치환문자에 데이터가 누락된 경우 알림 메세지를 보여주고 받는사람 목록을 지워준다. | |
| 796 | + /*if(!varValStatus){ | |
| 797 | + | |
| 798 | + alert("치환변수 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요."); | |
| 799 | + tableL.clearData(); //기존 받는사람 목록을 삭제. | |
| 800 | + return false; | |
| 801 | + | |
| 802 | + }*/ | |
| 803 | + | |
| 804 | + } | |
| 805 | + | |
| 806 | + //결제 금액 구하기 | |
| 807 | + totalFtPriceSum(tableL.getRows().length); | |
| 808 | + | |
| 809 | + } | |
| 810 | + | |
| 811 | +} | |
| 812 | + | |
| 813 | + | |
| 814 | +//오류 검사 버튼 처리 | |
| 815 | +$('.check_validity').click(function(){ | |
| 816 | + | |
| 817 | + var invalid = tableL.getInvalidCells(); //오류 데이터 체크 | |
| 818 | + var dataLen = tableL.getRows().length; //연락처 데이터 갯수 | |
| 819 | + var totLen = invalid.length; //오류 데이터 갯수 | |
| 820 | + var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수 | |
| 821 | + | |
| 822 | + if(dataLen > 0){ //연락처 정보가 있으면 수행 | |
| 823 | + | |
| 824 | + if(totLen > 0){ //내용에 오류가 있으면 수행 | |
| 825 | + | |
| 826 | + //오류 데이터 값 저장 | |
| 827 | + for(var i=0; i < totLen; i++){ | |
| 828 | + | |
| 829 | + var cellValue = invalid[i].getValue(); | |
| 830 | + | |
| 831 | + if(i == 0){ | |
| 832 | + | |
| 833 | + errMsg = cellValue; | |
| 834 | + | |
| 835 | + }else{ | |
| 836 | + | |
| 837 | + errMsg = errMsg +", "+ cellValue; | |
| 838 | + | |
| 839 | + } | |
| 840 | + | |
| 841 | + } | |
| 842 | + | |
| 843 | + if(errMsg == "" || errMsg == null){ | |
| 844 | + | |
| 845 | + alert("내용에 오류가 있습니다."); | |
| 846 | + return false; | |
| 847 | + | |
| 848 | + }else{ | |
| 849 | + | |
| 850 | + alert(errMsg + "의 내용에 오류가 있습니다."); | |
| 851 | + return false; | |
| 852 | + | |
| 853 | + } | |
| 854 | + | |
| 855 | + }else{ | |
| 856 | + | |
| 857 | + alert("오류 데이터가 없습니다."); | |
| 858 | + return false; | |
| 859 | + | |
| 860 | + } | |
| 861 | + | |
| 862 | + }else{ | |
| 863 | + | |
| 864 | + alert("연락처를 입력해 주세요."); | |
| 865 | + return false; | |
| 866 | + | |
| 867 | + } | |
| 868 | + | |
| 869 | +}); |
--- src/main/webapp/js/kakao/templateComm.js
+++ src/main/webapp/js/kakao/templateComm.js
... | ... | @@ -70,27 +70,29 @@ |
| 70 | 70 |
|
| 71 | 71 |
} |
| 72 | 72 |
|
| 73 |
- |
|
| 73 |
+ //제한글자수를 넘겼을 경우 최대 글자수까지 잘라주고 미리보기 및 글자수 표시처리 |
|
| 74 | 74 |
if(conLeng > limitLeng){
|
| 75 | 75 |
|
| 76 | 76 |
var splicecon = strMaxLengthSubstring(contents, limitLeng-1); |
| 77 | 77 |
$('#inputTemplateContent').val(splicecon);
|
| 78 |
- return false; |
|
| 78 |
+ contents = splicecon; |
|
| 79 |
+ conLeng = strMaxCharacterCnt(contents); |
|
| 79 | 80 |
|
| 80 |
- }else{//현재 입력한 글자수 우측 하단에 표시해 주기
|
|
| 81 |
- |
|
| 82 |
- var repContent = ""; |
|
| 83 |
- repContent = contents.replace(/(?:\r\n|\r|\n)/g, '<br/>'); |
|
| 84 |
- |
|
| 85 |
- $('.nowChar').text(conLeng + " /");
|
|
| 86 |
- $('.totChar').text(" "+limitLeng);
|
|
| 87 |
- $('.template_text').show();
|
|
| 88 |
- if(repContent != ''){
|
|
| 89 |
- $('.template_text').html(repContent);
|
|
| 90 |
- }else{
|
|
| 91 |
- $('.template_text').html("내용 미리보기");
|
|
| 92 |
- } |
|
| 93 |
- |
|
| 81 |
+ } |
|
| 82 |
+ |
|
| 83 |
+ var repContent = ""; |
|
| 84 |
+ repContent = contents.replace(/(?:\r\n|\r|\n)/g, '<br/>'); |
|
| 85 |
+ |
|
| 86 |
+ $('.nowChar').text(conLeng + " /");
|
|
| 87 |
+ $('.totChar').text(" "+limitLeng);
|
|
| 88 |
+ $('.template_text').show();
|
|
| 89 |
+ if(repContent != ''){
|
|
| 90 |
+ $('.template_text').html(repContent);
|
|
| 91 |
+ $('#smsTxtArea').val(
|
|
| 92 |
+ $('.template_text').html().trim().replace(/(<br>|<br\/>|<br \/>)/g, '\r\n')
|
|
| 93 |
+ ); |
|
| 94 |
+ }else{
|
|
| 95 |
+ $('.template_text').html("내용 미리보기");
|
|
| 94 | 96 |
} |
| 95 | 97 |
|
| 96 | 98 |
}(No newline at end of file) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?