--- src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
... | ... | @@ -269,6 +269,215 @@ |
| 269 | 269 |
return kakaoSendAdvcListVO; |
| 270 | 270 |
} |
| 271 | 271 |
|
| 272 |
+ /** |
|
| 273 |
+ * @methodName : populateSendListsFT |
|
| 274 |
+ * @author : 이호영 |
|
| 275 |
+ * @date : 2025. 4. 18. |
|
| 276 |
+ * @description : |
|
| 277 |
+ * @return : List<KakaoSendAdvcVO> |
|
| 278 |
+ * @param kakaoVO |
|
| 279 |
+ * @param isNotified |
|
| 280 |
+ * @param statusResponse |
|
| 281 |
+ * @return |
|
| 282 |
+ * @throws Exception |
|
| 283 |
+ * |
|
| 284 |
+ */ |
|
| 285 |
+ public List<KakaoSendAdvcVO> populateSendListsFT(KakaoVO kakaoVO, boolean isNotified, StatusResponse statusResponse) throws Exception {
|
|
| 286 |
+ |
|
| 287 |
+ //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) |
|
| 288 |
+// String befCash = kakaoVO.getBefCash(); |
|
| 289 |
+ |
|
| 290 |
+ |
|
| 291 |
+ |
|
| 292 |
+ List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>(); |
|
| 293 |
+ Calendar calendar = setupBaseDate(kakaoVO, isNotified); |
|
| 294 |
+ |
|
| 295 |
+ |
|
| 296 |
+ |
|
| 297 |
+ KakaoReturnVO templateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 298 |
+ String templateContent = templateDetail.getTemplateContent(); // 알림톡 템플릿 |
|
| 299 |
+ kakaoVO.setTemplateContent(templateContent); |
|
| 300 |
+ String templateTitle = templateDetail.getTemplateTitle(); |
|
| 301 |
+ |
|
| 302 |
+ |
|
| 303 |
+// log.info(" + templateDetail :: [{}]", templateDetail);
|
|
| 304 |
+// templateDetail.getButtonList().forEach(t->log.info(" + ButtonList :: [{}]", t.toString()));
|
|
| 305 |
+ |
|
| 306 |
+ Boolean hasContentReplacement = this.replBooleanStrChecker(templateContent); |
|
| 307 |
+ Boolean hasTitleReplacement = this.replBooleanStrChecker(templateTitle); |
|
| 308 |
+ Boolean hasButtonReplacement = this.needsButtonReplacement(templateDetail.getButtonList()); |
|
| 309 |
+ |
|
| 310 |
+ /** @jsonStr 필요유무 */ |
|
| 311 |
+ boolean hasTitleOrButtons = StringUtils.isNotEmpty(templateTitle) |
|
| 312 |
+ || CollectionUtils.isNotEmpty(templateDetail.getButtonList()); |
|
| 313 |
+ |
|
| 314 |
+ /** @jsonStr 반복유무 */ |
|
| 315 |
+ boolean needsJsonReplacement = hasTitleReplacement || hasButtonReplacement; |
|
| 316 |
+ String sharedJsonStr = null; |
|
| 317 |
+ |
|
| 318 |
+ String subMsgTxt = kakaoVO.getSubMsgTxt(); // 실패 대체 문자 |
|
| 319 |
+ |
|
| 320 |
+ // 시스템 기본 단가 정보 불러오기 |
|
| 321 |
+ JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); |
|
| 322 |
+ // 사용자 개인 단가 정보 불러오기 |
|
| 323 |
+ MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId()); |
|
| 324 |
+ |
|
| 325 |
+ |
|
| 326 |
+ |
|
| 327 |
+ |
|
| 328 |
+ /** @MSGID KEY값 */ |
|
| 329 |
+ List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getVarListMap().size()); |
|
| 330 |
+// for (int i = 0; i < kakaoSendAdvcListVO.size(); i++) {
|
|
| 331 |
+// kakaoSendAdvcListVO.get(i).setMsgId(idList.get(i)); |
|
| 332 |
+// kakaoSendAdvcListVO.get(i).setBizJsonName(idList.get(i)); |
|
| 333 |
+// } |
|
| 334 |
+ |
|
| 335 |
+ |
|
| 336 |
+ |
|
| 337 |
+ // 분할 건수 카운터 |
|
| 338 |
+ int counter = 0; |
|
| 339 |
+ /** @Map에 총 갯수가 수신자 갯수와 동일함 */ |
|
| 340 |
+ List<Map<String, String>> varList = kakaoVO.getVarListMap(); |
|
| 341 |
+ for (int i = 0; i < varList.size(); i++) {
|
|
| 342 |
+ // for(Map<String, String> variables : kakaoVO.getVarListMap()) {
|
|
| 343 |
+ // 치환 데이터 |
|
| 344 |
+ Map<String, String> variables = varList.get(i); |
|
| 345 |
+ log.info("");
|
|
| 346 |
+ |
|
| 347 |
+ /** @공통 기본값 */ |
|
| 348 |
+ KakaoSendAdvcVO sendVO = createSendVO(kakaoVO); |
|
| 349 |
+ String msgId = idList.get(i); |
|
| 350 |
+ sendVO.setMsgId(msgId); |
|
| 351 |
+ |
|
| 352 |
+ // step1 |
|
| 353 |
+ // Step 1-1: 값 치환 및 수신번호 셋팅 |
|
| 354 |
+ // Step 1-2: 수신자 정보 설정 (callToList는 항상 설정). |
|
| 355 |
+ if (variables.containsKey("callToList")) {
|
|
| 356 |
+ sendVO.setCallTo(variables.get("callToList"));
|
|
| 357 |
+ variables.remove("callToList"); // 사용 후 제거.
|
|
| 358 |
+ } |
|
| 359 |
+ |
|
| 360 |
+ /** @Step1-3: 템플릿 치환데이터 설정 */ |
|
| 361 |
+ String templateContentTemp = templateContent; |
|
| 362 |
+ String templateTitleTemp = templateTitle; |
|
| 363 |
+ if (hasContentReplacement) {
|
|
| 364 |
+ templateContentTemp = mjonCommon.ATReplaceTemplateVariables(templateContent, variables); |
|
| 365 |
+ if(hasTitleReplacement) {
|
|
| 366 |
+ templateTitleTemp = mjonCommon.ATReplaceTemplateVariables(templateTitle, variables); |
|
| 367 |
+ } |
|
| 368 |
+ } |
|
| 369 |
+ /** @버튼 치환 */ // 버튼 리스트가 있으면 치환 수행, 항상 sendVO에 설정 |
|
| 370 |
+ List<KakaoButtonVO> buttonList = templateDetail.getButtonList(); |
|
| 371 |
+ if(hasButtonReplacement) {
|
|
| 372 |
+ buttonList = replaceButtonLinks(buttonList, variables); |
|
| 373 |
+ } |
|
| 374 |
+ sendVO.setButtonList(buttonList); |
|
| 375 |
+ |
|
| 376 |
+ sendVO.setTemplateTitle(templateTitleTemp); |
|
| 377 |
+ sendVO.setTemplateContent(templateContentTemp); |
|
| 378 |
+ |
|
| 379 |
+ |
|
| 380 |
+ // Step 1-4: 실패 대체 문자 치환데이터 설정 |
|
| 381 |
+ if("Y".equals(kakaoVO.getSubMsgSendYn())) { // 대체문자가 있나?
|
|
| 382 |
+ if ("Y".equals(kakaoVO.getSubMsgTxtReplYn())) { // 치환데이터가 있나?
|
|
| 383 |
+ subMsgTxt = mjonCommon.ATReplaceTemplateVariables(subMsgTxt, variables); |
|
| 384 |
+ } |
|
| 385 |
+ sendVO.setSubMsgTxt(subMsgTxt);// 실패 |
|
| 386 |
+ } |
|
| 387 |
+ sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn()); |
|
| 388 |
+ |
|
| 389 |
+ |
|
| 390 |
+ /* |
|
| 391 |
+ log.info("kakaoSendAdvcVO Details: [callTo={}\n, templateContent=\n{}\n, subMsgTxt=\n{}]\n\n\n\n",
|
|
| 392 |
+ kakaoSendAdvcVO.getCallTo(), |
|
| 393 |
+ kakaoSendAdvcVO.getTemplateContent(), |
|
| 394 |
+ kakaoSendAdvcVO.getSubMsgTxt() |
|
| 395 |
+ ); |
|
| 396 |
+ */ |
|
| 397 |
+ |
|
| 398 |
+ // Step1 END |
|
| 399 |
+ |
|
| 400 |
+ |
|
| 401 |
+// step3 |
|
| 402 |
+// 바이트 수 체크 및 금액설정 |
|
| 403 |
+ |
|
| 404 |
+ |
|
| 405 |
+ Float kakaoAtPrice = mberManageVO.getKakaoAtPrice(); |
|
| 406 |
+ // 유효한 단가 계산 |
|
| 407 |
+ float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice()); |
|
| 408 |
+ float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice()); |
|
| 409 |
+ |
|
| 410 |
+ |
|
| 411 |
+ String shortPStr = Float.toString(shortPrice); |
|
| 412 |
+ String mmsPStr = Float.toString(longPrice); |
|
| 413 |
+ |
|
| 414 |
+ // 공통 가격 설정 |
|
| 415 |
+ sendVO.setSmsPrice(shortPStr); |
|
| 416 |
+ sendVO.setMmsPrice(mmsPStr); |
|
| 417 |
+ |
|
| 418 |
+ |
|
| 419 |
+ if("Y".equals(kakaoVO.getSubMsgSendYn())) {
|
|
| 420 |
+ int smsTxtByte = mjonCommon.getSmsTxtBytes(sendVO.getSubMsgTxt()); |
|
| 421 |
+ String sendType = getMsgType(smsTxtByte); |
|
| 422 |
+ sendVO.setSubMsgType(sendType); |
|
| 423 |
+ |
|
| 424 |
+ if ("INVALID".equals(sendType)) {
|
|
| 425 |
+ statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");return kakaoSendAdvcListVO; |
|
| 426 |
+ } |
|
| 427 |
+ |
|
| 428 |
+ boolean isMms = "MMS".equals(sendType); |
|
| 429 |
+ sendVO.setEachPrice(isMms ? mmsPStr : shortPStr); |
|
| 430 |
+ |
|
| 431 |
+ |
|
| 432 |
+ } else {
|
|
| 433 |
+ kakaoAtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice()); |
|
| 434 |
+ sendVO.setEachPrice( Float.toString(kakaoAtPrice) ); |
|
| 435 |
+ } |
|
| 436 |
+ |
|
| 437 |
+ |
|
| 438 |
+ |
|
| 439 |
+ // step4 |
|
| 440 |
+ // 예약 시간 설정 및 분할 데이터 설정 |
|
| 441 |
+ if ("Y".equalsIgnoreCase(kakaoVO.getReserveYn())
|
|
| 442 |
+ && "Y".equalsIgnoreCase(kakaoVO.getDivideChk()) |
|
| 443 |
+ && counter == Integer.parseInt(kakaoVO.getDivideCnt())) |
|
| 444 |
+ {
|
|
| 445 |
+ counter = 0; |
|
| 446 |
+ calendar.add(Calendar.MINUTE, Integer.parseInt(kakaoVO.getDivideTime())); |
|
| 447 |
+ } |
|
| 448 |
+ counter++; |
|
| 449 |
+ // 즉시 발송인경우 현재 시간 |
|
| 450 |
+ // 예약인 경우 위에 설정한 시간 입력 |
|
| 451 |
+ sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime())); |
|
| 452 |
+ |
|
| 453 |
+ |
|
| 454 |
+ |
|
| 455 |
+ /** @step5 전송 메세지 설정 json파일 만들기*/ |
|
| 456 |
+ // 타이틀과 버튼이 있고 |
|
| 457 |
+ if(hasTitleOrButtons) {
|
|
| 458 |
+ // 버튼과 타이틀에 치환데이터가 있으면 json String을 계속 생성 |
|
| 459 |
+ if(needsJsonReplacement) {
|
|
| 460 |
+ sharedJsonStr = kakaoApiJsonSave.kakaoApiJsonSave_advc(sendVO, templateDetail); |
|
| 461 |
+ sendVO.setBizJsonName(msgId); |
|
| 462 |
+ sendVO.setJsonStr(sharedJsonStr); |
|
| 463 |
+ } else if (StringUtils.isEmpty(sharedJsonStr)) {
|
|
| 464 |
+ // 치환 데이터가 없고 아직 생성되지 않았으면 한 번만 생성 |
|
| 465 |
+ sharedJsonStr = kakaoApiJsonSave.kakaoApiJsonSave_advc(sendVO, templateDetail); |
|
| 466 |
+ sendVO.setBizJsonName(idList.get(0)); |
|
| 467 |
+ sendVO.setJsonStr(sharedJsonStr); |
|
| 468 |
+ }else {
|
|
| 469 |
+ sendVO.setBizJsonName(idList.get(0)); |
|
| 470 |
+ } |
|
| 471 |
+ |
|
| 472 |
+ } |
|
| 473 |
+ log.info(" sendVO :: [{}]", sendVO);
|
|
| 474 |
+ kakaoSendAdvcListVO.add(sendVO); |
|
| 475 |
+ } |
|
| 476 |
+ |
|
| 477 |
+ |
|
| 478 |
+ return kakaoSendAdvcListVO; |
|
| 479 |
+ } |
|
| 480 |
+ |
|
| 272 | 481 |
private Calendar setupBaseDate(KakaoVO kakaoVO, boolean isNotified) throws ParseException {
|
| 273 | 482 |
// 예약 시간 기본값 설정 |
| 274 | 483 |
Date now = new Date(); |
--- src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
... | ... | @@ -331,5 +331,56 @@ |
| 331 | 331 |
"\n ]"; |
| 332 | 332 |
} |
| 333 | 333 |
|
| 334 |
+ public String ftToString() {
|
|
| 335 |
+ StringBuilder sb = new StringBuilder("KakaoFTSendVO[");
|
|
| 336 |
+ sb.append("\n senderKey=[").append(senderKey).append("]");
|
|
| 337 |
+ sb.append("\n , imageFileName=[").append(imageFileName).append("]");
|
|
| 338 |
+ sb.append("\n , imageType=[").append(imageType).append("]");
|
|
| 339 |
+ sb.append("\n , imgTitle=[").append(imgTitle).append("]");
|
|
| 340 |
+ sb.append("\n , imgLink=[").append(imgLink).append("]");
|
|
| 341 |
+ sb.append("\n , templateContent=[").append(templateContent).append("]");
|
|
| 342 |
+ sb.append("\n , templateImageUrl=[").append(templateImageUrl).append("]");
|
|
| 343 |
+ sb.append("\n , smsTxtArea=[").append(getSubMsgTxt()).append("]");
|
|
| 344 |
+ sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
|
| 345 |
+ sb.append("\n , subMsgTxtReplYn=[").append(subMsgTxtReplYn).append("]");
|
|
| 346 |
+ sb.append("\n , subMsgType=[").append(subMsgType).append("]");
|
|
| 347 |
+ sb.append("\n , reserveYn=[").append(getReserveYn()).append("]");
|
|
| 348 |
+ sb.append("\n , menuTopTab=[").append(menuTopTab).append("]");
|
|
| 349 |
+ sb.append("\n , bizJsonYn=[").append(bizJsonYn).append("]");
|
|
| 350 |
+ sb.append("\n , senderKey=[").append(senderKey).append("]");
|
|
| 351 |
+ sb.append("\n , callFrom=[").append(getCallFrom()).append("]");
|
|
| 352 |
+ sb.append("\n , kakaoFtPrice=[").append(getEachPrice()).append("]");
|
|
| 353 |
+ sb.append("\n , reqDate=[").append(getReqDate()).append("]");
|
|
| 354 |
+ sb.append("\n , spamStatus=[").append(getSpamStatus()).append("]");
|
|
| 355 |
+ sb.append("\n , txtReplYn=[").append(getTxtReplYn()).append("]");
|
|
| 356 |
+ sb.append("\n , atSmishingYn=[").append(getAtSmishingYn()).append("]");
|
|
| 357 |
+// sb.append("\n , tmpBtnSelect=[").append(getTmpBtnSelect()).append("]");
|
|
| 358 |
+ StringBuilder btnListSb = new StringBuilder("[");
|
|
| 359 |
+ if (buttonVOList != null && !buttonVOList.isEmpty()) {
|
|
| 360 |
+ String prefix = ""; |
|
| 361 |
+ for (KakaoButtonVO btn : buttonVOList) {
|
|
| 362 |
+ btnListSb.append(prefix).append(btn == null ? "null" : btn.toString()); |
|
| 363 |
+ prefix = ", "; |
|
| 364 |
+ } |
|
| 365 |
+ } |
|
| 366 |
+ btnListSb.append("]");
|
|
| 367 |
+ sb.append("\n , buttonVOList=").append(btnListSb);
|
|
| 368 |
+ |
|
| 369 |
+ |
|
| 370 |
+ // mjonFTSendVOList 내용 |
|
| 371 |
+ StringBuilder ftList = new StringBuilder("[");
|
|
| 372 |
+ if (mjonFTSendVOList != null && !mjonFTSendVOList.isEmpty()) {
|
|
| 373 |
+ String prefix = ""; |
|
| 374 |
+ for (MjonFTSendVO vo : mjonFTSendVOList) {
|
|
| 375 |
+ ftList.append(prefix).append(vo == null ? "null" : vo.toString()); |
|
| 376 |
+ prefix = ", "; |
|
| 377 |
+ } |
|
| 378 |
+ } |
|
| 379 |
+ ftList.append("]");
|
|
| 380 |
+ sb.append("\n , mjonFTSendVOList=").append(ftList);
|
|
| 381 |
+ |
|
| 382 |
+ sb.append("\n]");
|
|
| 383 |
+ return sb.toString(); |
|
| 384 |
+ } |
|
| 334 | 385 |
|
| 335 | 386 |
} |
--- src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java
+++ src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java
... | ... | @@ -210,6 +210,74 @@ |
| 210 | 210 |
|
| 211 | 211 |
/* |
| 212 | 212 |
* 친구톡 발송시 이미지, 버튼 추가에 따른 Json 파일 생성 |
| 213 |
+ * 2025.04.18 |
|
| 214 |
+ * 우영두 |
|
| 215 |
+ * 파일은 하나만 생성해서 동일하게 사용함. |
|
| 216 |
+ * |
|
| 217 |
+ * */ |
|
| 218 |
+ public String kakaoApiFTJsonSave_advc(KakaoVO kakaoVO) {
|
|
| 219 |
+ // json파일 저장 |
|
| 220 |
+ |
|
| 221 |
+ |
|
| 222 |
+ // 버튼리스트 JSON 생성 |
|
| 223 |
+ JSONArray buttonList = new JSONArray(); |
|
| 224 |
+ for(KakaoButtonVO buttonInfoVO : kakaoVO.getButtonVOList()) {
|
|
| 225 |
+ JSONObject buttonInfo = new JSONObject(); |
|
| 226 |
+ |
|
| 227 |
+ buttonInfo.put("name", buttonInfoVO.getName());
|
|
| 228 |
+ buttonInfo.put("type", buttonInfoVO.getLinkType());
|
|
| 229 |
+ |
|
| 230 |
+ if(buttonInfoVO.getLinkType().equals("WL")) {
|
|
| 231 |
+ buttonInfo.put("url_mobile", buttonInfoVO.getLinkMo());
|
|
| 232 |
+ buttonInfo.put("url_pc", buttonInfoVO.getLinkPc());
|
|
| 233 |
+ }else if(buttonInfoVO.getLinkType().equals("AL")) {
|
|
| 234 |
+ buttonInfo.put("scheme_ios", buttonInfoVO.getLinkIos());
|
|
| 235 |
+ buttonInfo.put("scheme_android", buttonInfoVO.getLinkAnd());
|
|
| 236 |
+ }else if(buttonInfoVO.getLinkType().equals("BC")) {
|
|
| 237 |
+ // 상담톡 진행시 등록해야함 |
|
| 238 |
+ }else if(buttonInfoVO.getLinkType().equals("BT")) {
|
|
| 239 |
+ // 봇 전환 시 전달 |
|
| 240 |
+ } |
|
| 241 |
+ buttonList.add(buttonInfo); |
|
| 242 |
+ } |
|
| 243 |
+ |
|
| 244 |
+ // 강조유형 JSON 생성 |
|
| 245 |
+ JSONObject templateImageInfo = new JSONObject(); |
|
| 246 |
+ JSONObject templateImageExtInfo = new JSONObject(); |
|
| 247 |
+ String imageType = kakaoVO.getImageType(); |
|
| 248 |
+ |
|
| 249 |
+ if(!imageType.equals("")) {
|
|
| 250 |
+ templateImageInfo.put("img_url", kakaoVO.getTemplateImageUrl());
|
|
| 251 |
+ templateImageInfo.put("img_link", kakaoVO.getImgLink());
|
|
| 252 |
+ } |
|
| 253 |
+ |
|
| 254 |
+ if(imageType.equals("W")) {
|
|
| 255 |
+ templateImageExtInfo.put("wide", "Y");
|
|
| 256 |
+ } |
|
| 257 |
+ |
|
| 258 |
+ |
|
| 259 |
+ JSONObject jo = new JSONObject(); |
|
| 260 |
+ |
|
| 261 |
+ if(buttonList.size() != 0) {
|
|
| 262 |
+ jo.put("button", buttonList);
|
|
| 263 |
+ } |
|
| 264 |
+ |
|
| 265 |
+ if(templateImageInfo.size() != 0) {
|
|
| 266 |
+ jo.put("image", templateImageInfo);
|
|
| 267 |
+ } |
|
| 268 |
+ |
|
| 269 |
+ if(templateImageExtInfo.size() != 0) {
|
|
| 270 |
+ jo.put("extra", templateImageExtInfo);
|
|
| 271 |
+ } |
|
| 272 |
+ |
|
| 273 |
+ // 입력 json 데이터를 파일로 변경 |
|
| 274 |
+ String jsonStr = jo.toString(); |
|
| 275 |
+ |
|
| 276 |
+ return jsonStr; |
|
| 277 |
+ } |
|
| 278 |
+ |
|
| 279 |
+ /* |
|
| 280 |
+ * 친구톡 발송시 이미지, 버튼 추가에 따른 Json 파일 생성 |
|
| 213 | 281 |
* 2024.01.17 |
| 214 | 282 |
* 우영두 |
| 215 | 283 |
* 파일은 하나만 생성해서 동일하게 사용함. |
... | ... | @@ -298,7 +366,7 @@ |
| 298 | 366 |
// 입력 json 데이터를 파일로 변경 |
| 299 | 367 |
String jsonStr = jo.toString(); |
| 300 | 368 |
System.out.println("jsonFileName : "+jsonFileName);
|
| 301 |
- |
|
| 369 |
+ |
|
| 302 | 370 |
File outPut = new File(jsonFileName); |
| 303 | 371 |
outPut.createNewFile(); |
| 304 | 372 |
|
--- src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoFTJsonSave.java
+++ src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoFTJsonSave.java
... | ... | @@ -30,115 +30,6 @@ |
| 30 | 30 |
|
| 31 | 31 |
static String json; |
| 32 | 32 |
|
| 33 |
- @SuppressWarnings("unchecked")
|
|
| 34 |
- public String kakaoApiJsonSave(KakaoVO kakaoVO, String[] varValInfo) {
|
|
| 35 |
- // json파일 저장 |
|
| 36 |
- |
|
| 37 |
- |
|
| 38 |
- Date nowDate = new Date(); |
|
| 39 |
- SimpleDateFormat todayFrom = new SimpleDateFormat("yyyyMMdd");
|
|
| 40 |
- SimpleDateFormat timeFrom = new SimpleDateFormat("HHmmss");
|
|
| 41 |
- String jsonFileName = mjonBizJsonDir+"/"+kakaoVO.getUserId()+"/"+todayFrom.format(nowDate)+"/"+kakaoVO.getSendType(); // 아이디/날짜/타입 |
|
| 42 |
- |
|
| 43 |
- String fileName = timeFrom.format(nowDate)+"_"+kakaoVO.getDestPhone()+".json"; |
|
| 44 |
- |
|
| 45 |
- try {
|
|
| 46 |
- |
|
| 47 |
- File userIdFile = new File(jsonFileName); |
|
| 48 |
- if(!userIdFile.exists()) {
|
|
| 49 |
- userIdFile.mkdirs(); // 없으면 하위 디렉토리 까지 생성 |
|
| 50 |
- jsonFileName = jsonFileName +"/"+fileName; |
|
| 51 |
- }else {
|
|
| 52 |
- |
|
| 53 |
- jsonFileName = jsonFileName +"/"+fileName; |
|
| 54 |
- System.out.println("jsonFileName : "+jsonFileName);
|
|
| 55 |
- File file1 = new File(jsonFileName); |
|
| 56 |
- if (file1.isFile()) {
|
|
| 57 |
- return jsonFileName; |
|
| 58 |
- } |
|
| 59 |
- } |
|
| 60 |
- |
|
| 61 |
- |
|
| 62 |
- |
|
| 63 |
- |
|
| 64 |
- KakaoReturnVO templateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 65 |
- |
|
| 66 |
- // 버튼리스트 JSON 생성 |
|
| 67 |
- JSONArray buttonList = new JSONArray(); |
|
| 68 |
- |
|
| 69 |
- // 버튼 수량 체크 후 진행 |
|
| 70 |
- for(KakaoButtonVO buttonInfoVO : templateDetail.getButtonList()) {
|
|
| 71 |
- JSONObject buttonInfo = new JSONObject(); |
|
| 72 |
- |
|
| 73 |
- buttonInfo.put("name", buttonInfoVO.getName());
|
|
| 74 |
- buttonInfo.put("type", buttonInfoVO.getLinkType());
|
|
| 75 |
- |
|
| 76 |
- if(buttonInfoVO.getLinkType().equals("WL")) {
|
|
| 77 |
- buttonInfo.put("url_mobile", buttonInfoVO.getLinkMo());
|
|
| 78 |
- buttonInfo.put("url_pc", buttonInfoVO.getLinkPc());
|
|
| 79 |
- }else if(buttonInfoVO.getLinkType().equals("AL")) {
|
|
| 80 |
- buttonInfo.put("scheme_ios", buttonInfoVO.getLinkIos());
|
|
| 81 |
- buttonInfo.put("scheme_android", buttonInfoVO.getLinkAnd());
|
|
| 82 |
- }else if(buttonInfoVO.getLinkType().equals("BC")) {
|
|
| 83 |
- // 상담톡 진행시 등록해야함 |
|
| 84 |
- }else if(buttonInfoVO.getLinkType().equals("BT")) {
|
|
| 85 |
- // 봇 전환 시 전달 |
|
| 86 |
- } |
|
| 87 |
- buttonList.add(buttonInfo); |
|
| 88 |
- } |
|
| 89 |
- |
|
| 90 |
- |
|
| 91 |
- |
|
| 92 |
- |
|
| 93 |
- // Image JSON 생성 |
|
| 94 |
- JSONObject imageJson = new JSONObject(); |
|
| 95 |
- // img형과 wide 형인경우만 등록 (if문으로 제어) |
|
| 96 |
- imageJson.put("img_url", "등록된 이미지 URL");
|
|
| 97 |
- imageJson.put("img_link", "이동 페이지 URL");
|
|
| 98 |
- |
|
| 99 |
- |
|
| 100 |
- // Wide JSON 생성 |
|
| 101 |
- JSONObject wideJson = new JSONObject(); |
|
| 102 |
- // wide 형인경우만 등록(if문으로 제어) |
|
| 103 |
- wideJson.put("wide", "Y");
|
|
| 104 |
- |
|
| 105 |
- |
|
| 106 |
- |
|
| 107 |
- |
|
| 108 |
- JSONObject jo = new JSONObject(); |
|
| 109 |
- |
|
| 110 |
- if(imageJson.size() != 0) {
|
|
| 111 |
- jo.put("image", imageJson);
|
|
| 112 |
- } |
|
| 113 |
- if(wideJson.size() != 0) {
|
|
| 114 |
- jo.put("extra", wideJson);
|
|
| 115 |
- } |
|
| 116 |
- |
|
| 117 |
- if(buttonList.size() != 0) {
|
|
| 118 |
- jo.put("button", buttonList);
|
|
| 119 |
- } |
|
| 120 |
- |
|
| 121 |
- |
|
| 122 |
- |
|
| 123 |
- |
|
| 124 |
- // 입력 json 데이터를 파일로 변경 |
|
| 125 |
- String jsonStr = jo.toString(); |
|
| 126 |
- System.out.println("jsonFileName : "+jsonFileName);
|
|
| 127 |
- |
|
| 128 |
- File outPut = new File(jsonFileName); |
|
| 129 |
- outPut.createNewFile(); |
|
| 130 |
- |
|
| 131 |
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outPut), "euc-kr")); |
|
| 132 |
- bw.write(jsonStr); |
|
| 133 |
- bw.close(); |
|
| 134 |
- |
|
| 135 |
- } catch (IOException e) {
|
|
| 136 |
- System.out.println("json 생성 실패");
|
|
| 137 |
- e.printStackTrace(); |
|
| 138 |
- } |
|
| 139 |
- return jsonFileName; |
|
| 140 |
- } |
|
| 141 |
- |
|
| 142 | 33 |
|
| 143 | 34 |
@SuppressWarnings("unchecked")
|
| 144 | 35 |
public String kakaoApiJsonSave(KakaoVO kakaoVO) {
|
--- src/main/java/itn/let/kakao/user/kakaoFt/service/KakaoFriendsTalkService.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/service/KakaoFriendsTalkService.java
... | ... | @@ -7,6 +7,6 @@ |
| 7 | 7 |
|
| 8 | 8 |
public interface KakaoFriendsTalkService {
|
| 9 | 9 |
|
| 10 |
- StatusResponse insertKakaoFtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request); |
|
| 10 |
+ StatusResponse insertKakaoFtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception; |
|
| 11 | 11 |
|
| 12 | 12 |
} |
--- src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java
... | ... | @@ -1,16 +1,29 @@ |
| 1 | 1 |
package itn.let.kakao.user.kakaoFt.service.impl; |
| 2 | 2 |
|
| 3 |
+import java.time.Instant; |
|
| 4 |
+import java.util.HashMap; |
|
| 5 |
+import java.util.List; |
|
| 6 |
+import java.util.Map; |
|
| 7 |
+ |
|
| 3 | 8 |
import javax.annotation.Resource; |
| 4 | 9 |
import javax.servlet.http.HttpServletRequest; |
| 5 | 10 |
|
| 11 |
+import org.springframework.beans.factory.annotation.Autowired; |
|
| 6 | 12 |
import org.springframework.http.HttpStatus; |
| 7 | 13 |
import org.springframework.stereotype.Service; |
| 8 | 14 |
|
| 9 | 15 |
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; |
| 10 | 16 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 17 |
+import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
|
| 18 |
+import itn.com.cmm.LoginVO; |
|
| 19 |
+import itn.com.utl.fcc.service.EgovStringUtil; |
|
| 20 |
+import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; |
|
| 21 |
+import itn.let.kakao.kakaoComm.KakaoSendUtil; |
|
| 11 | 22 |
import itn.let.kakao.kakaoComm.KakaoVO; |
| 12 | 23 |
import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkService; |
| 13 | 24 |
import itn.let.mail.service.StatusResponse; |
| 25 |
+import itn.let.mjo.mjocommon.MjonCommon; |
|
| 26 |
+import itn.let.uss.umt.service.EgovUserManageService; |
|
| 14 | 27 |
import lombok.extern.slf4j.Slf4j; |
| 15 | 28 |
|
| 16 | 29 |
@Slf4j |
... | ... | @@ -23,11 +36,85 @@ |
| 23 | 36 |
@Resource(name="kakaoFriendsTalkTemplateDAO") |
| 24 | 37 |
private KakaoFriendsTalkTemplateDAO kakaoFriendsTalkTemplateDAO; |
| 25 | 38 |
|
| 39 |
+ /** userManageService */ |
|
| 40 |
+ @Resource(name = "userManageService") |
|
| 41 |
+ private EgovUserManageService userManageService; |
|
| 42 |
+ |
|
| 43 |
+ @Autowired |
|
| 44 |
+ private MjonCommon mjonCommon; |
|
| 45 |
+ |
|
| 46 |
+ |
|
| 47 |
+ @Autowired |
|
| 48 |
+ KakaoSendUtil kakaoSendUtil; |
|
| 49 |
+ |
|
| 26 | 50 |
@Override |
| 27 |
- public StatusResponse insertKakaoFtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) {
|
|
| 51 |
+ public StatusResponse insertKakaoFtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception {
|
|
| 28 | 52 |
StatusResponse statusResponse = new StatusResponse(); |
| 29 | 53 |
|
| 30 |
- log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.toString());
|
|
| 54 |
+// log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.toString());
|
|
| 55 |
+ |
|
| 56 |
+ log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString());
|
|
| 57 |
+ |
|
| 58 |
+ |
|
| 59 |
+ |
|
| 60 |
+ // 측정할 메소드 호출 전 시간 기록 |
|
| 61 |
+ Instant start = Instant.now(); |
|
| 62 |
+// KakaoSendAdvcVO |
|
| 63 |
+ |
|
| 64 |
+ Map<String, Object> returnMap = new HashMap<>(); |
|
| 65 |
+ |
|
| 66 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() |
|
| 67 |
+ ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() |
|
| 68 |
+ : null; |
|
| 69 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 70 |
+ |
|
| 71 |
+ if (userId.equals("")) {
|
|
| 72 |
+ return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다."); |
|
| 73 |
+ } |
|
| 74 |
+ |
|
| 75 |
+ kakaoVO.setUserId(userId); |
|
| 76 |
+ |
|
| 77 |
+ /** |
|
| 78 |
+ * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 현재 로그인 세션도 만료 처리함 |
|
| 79 |
+ */ |
|
| 80 |
+ boolean mberSttus = userManageService.selectUserStatusInfo(userId); |
|
| 81 |
+ if (!mberSttus) {
|
|
| 82 |
+ request.getSession().invalidate(); |
|
| 83 |
+ // UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때 |
|
| 84 |
+ return new StatusResponse(HttpStatus.UNAUTHORIZED, |
|
| 85 |
+ "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); |
|
| 86 |
+ } |
|
| 87 |
+ |
|
| 88 |
+ |
|
| 89 |
+ |
|
| 90 |
+/** @isHolidayNotified |
|
| 91 |
+ * @false : 알림 X |
|
| 92 |
+ * @true : 알림 O */ |
|
| 93 |
+ boolean isNotified = mjonCommon.processUserAndCheckAT(kakaoVO); |
|
| 94 |
+ |
|
| 95 |
+ |
|
| 96 |
+ |
|
| 97 |
+/** @카카오톡 전송 list 셋팅 -------------------------------------------*/ |
|
| 98 |
+ List<KakaoSendAdvcVO> kakaoSendAdvcListVO = kakaoSendUtil.populateSendListsFT(kakaoVO, isNotified, statusResponse); |
|
| 99 |
+ if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) {
|
|
| 100 |
+ log.error(" + populateSendLists 처리 중 오류 발생: {}", statusResponse.getMessage());
|
|
| 101 |
+ return statusResponse; |
|
| 102 |
+ } |
|
| 103 |
+ |
|
| 104 |
+ |
|
| 105 |
+ |
|
| 106 |
+ |
|
| 107 |
+ |
|
| 108 |
+ |
|
| 109 |
+ |
|
| 110 |
+ |
|
| 111 |
+ |
|
| 112 |
+ |
|
| 113 |
+ |
|
| 114 |
+ |
|
| 115 |
+ |
|
| 116 |
+ |
|
| 117 |
+ |
|
| 31 | 118 |
|
| 32 | 119 |
|
| 33 | 120 |
|
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
... | ... | @@ -234,7 +234,7 @@ |
| 234 | 234 |
setContentsLengForFriends(tmpContents); |
| 235 | 235 |
|
| 236 | 236 |
//초기 광고포함 여부 처리 |
| 237 |
- var adFlagVal = $("input[name=ad_flag]:checked").val();
|
|
| 237 |
+ var adFlagVal = $("input[name=adFlag]:checked").val();
|
|
| 238 | 238 |
advTextChange(adFlagVal); |
| 239 | 239 |
|
| 240 | 240 |
var reserYn = $("input[name=reserYn]:checked").val();
|
... | ... | @@ -373,18 +373,16 @@ |
| 373 | 373 |
|
| 374 | 374 |
} |
| 375 | 375 |
|
| 376 |
- var url = ""; |
|
| 377 | 376 |
|
| 378 |
- if(fileExt == "jpg" || fileExt == "jpeg" || fileExt == "png"){
|
|
| 379 |
- |
|
| 380 |
- url = "/web/mjon/kakao/template/sendKakaoFriendsTemplateImageUploadAjax.do"; |
|
| 381 |
- |
|
| 382 |
- }else{
|
|
| 383 |
- |
|
| 384 |
- alert('jpg, jpeg 파일만 업로드 할수 있습니다.');
|
|
| 385 |
- return; |
|
| 386 |
- |
|
| 377 |
+// if(fileExt == "jpg" || fileExt == "jpeg" || fileExt == "png"){
|
|
| 378 |
+ console.log('fileExt : ', fileExt);
|
|
| 379 |
+ if(fileExt != null && fileExt !== "jpg" && fileExt !== "jpeg" && fileExt !== "png"){
|
|
| 380 |
+ alert("jpg, jpeg, png 파일만 업로드 할 수 있습니다.");
|
|
| 381 |
+ return; |
|
| 387 | 382 |
} |
| 383 |
+ |
|
| 384 |
+ |
|
| 385 |
+ var url = url = "/web/mjon/kakao/template/sendKakaoFriendsTemplateImageUploadAjax.do"; |
|
| 388 | 386 |
|
| 389 | 387 |
$.ajax({
|
| 390 | 388 |
type : 'POST' |
... | ... | @@ -396,7 +394,9 @@ |
| 396 | 394 |
, processData: false |
| 397 | 395 |
, contentType: false |
| 398 | 396 |
, cache : false |
| 399 |
- , success : function(returnData, status){
|
|
| 397 |
+ , success : function(returnData){
|
|
| 398 |
+ console.log('returnData : ', returnData);
|
|
| 399 |
+ |
|
| 400 | 400 |
if(returnData.result == "success") {
|
| 401 | 401 |
|
| 402 | 402 |
var code = returnData.code; |
... | ... | @@ -602,7 +602,7 @@ |
| 602 | 602 |
var imageType = $("input[name=img_file_add]:checked").val(); // 첨부 이미지 종류(없음, 일반, 와이드 이미지)
|
| 603 | 603 |
var imageTitle = $("#imgTitle").val(); //첨부이미지 제목
|
| 604 | 604 |
var imageLink = $("#imgLink").val(); //첨부이미지 클릭시 이동 링크 주소
|
| 605 |
- var inputTemplateAd = $("input[name=ad_flag]:checked").val(); // 광고성메시지 선택 여부
|
|
| 605 |
+ var inputTemplateAd = $("input[name=adFlag]:checked").val(); // 광고성메시지 선택 여부
|
|
| 606 | 606 |
var inputTemplateContent = $("#inputTemplateContent").val(); // 템플릿 내용
|
| 607 | 607 |
|
| 608 | 608 |
var inputTemplateImageName = $("#templateImageName").val(); // 템플릿 이미지 파일명
|
... | ... | @@ -842,236 +842,14 @@ |
| 842 | 842 |
} |
| 843 | 843 |
|
| 844 | 844 |
|
| 845 |
- //수신번호 리스트 체크하기 |
|
| 846 |
- var numCnt = 0; |
|
| 847 |
- var nameList = []; //치환문자 이름 |
|
| 848 |
- var phoneNum = []; //받는사람 |
|
| 849 |
- var rep1List = []; //치환문자1 |
|
| 850 |
- var rep2List = []; //치환문자2 |
|
| 851 |
- var rep3List = []; //치환문자3 |
|
| 852 |
- var rep4List = []; //치환문자4 |
|
| 853 |
- |
|
| 854 |
- var varValList = []; //치환문자 연결시킬 변수 셋팅 |
|
| 855 | 845 |
|
| 856 | 846 |
var selectedData = tableL.getRows(); |
| 857 |
- |
|
| 858 |
- var varValStatus = true; //치환분자 데이터 체크용 |
|
| 859 | 847 |
|
| 860 | 848 |
if(selectedData == "" || selectedData == null){
|
| 861 | 849 |
|
| 862 | 850 |
alert("받는사람 주소를 한 건 이상 입력해주세요.");
|
| 863 | 851 |
return false; |
| 864 | 852 |
|
| 865 |
- }else{ // 선택한 Row '-' 문자 삭제하기
|
|
| 866 |
- |
|
| 867 |
- var txtReplYn = $("#txtReplYn").val();
|
|
| 868 |
- |
|
| 869 |
- if(txtReplYn == 'Y'){//치환문자가 있는 경우 변수 치환 처리
|
|
| 870 |
- |
|
| 871 |
- for(var i=0; i < selectedData.length; i++){
|
|
| 872 |
- |
|
| 873 |
- var nmStatus = false; |
|
| 874 |
- var rep1Status = false; |
|
| 875 |
- var rep2Status = false; |
|
| 876 |
- var rep3Status = false; |
|
| 877 |
- var rep4Status = false; |
|
| 878 |
- |
|
| 879 |
- |
|
| 880 |
- if(tmpContents.indexOf("\#{이름}") > -1){
|
|
| 881 |
- |
|
| 882 |
- nmStatus = true; |
|
| 883 |
- } |
|
| 884 |
- |
|
| 885 |
- if(tmpContents.indexOf("\#{1}") > -1){
|
|
| 886 |
- |
|
| 887 |
- rep1Status = true; |
|
| 888 |
- } |
|
| 889 |
- |
|
| 890 |
- if(tmpContents.indexOf("\#{2}") > -1){
|
|
| 891 |
- |
|
| 892 |
- rep2Status = true; |
|
| 893 |
- } |
|
| 894 |
- |
|
| 895 |
- if(tmpContents.indexOf("\#{3}") > -1){
|
|
| 896 |
- |
|
| 897 |
- rep3Status = true; |
|
| 898 |
- } |
|
| 899 |
- |
|
| 900 |
- if(tmpContents.indexOf("\#{4}") > -1){
|
|
| 901 |
- |
|
| 902 |
- rep4Status = true; |
|
| 903 |
- } |
|
| 904 |
- |
|
| 905 |
- //일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다. |
|
| 906 |
- var name = tableL.getRows()[i].getData().name; |
|
| 907 |
- var phone = removeDash(tableL.getRows()[i].getData().phone); |
|
| 908 |
- var rep1 = tableL.getRows()[i].getData().rep1; |
|
| 909 |
- var rep2 = tableL.getRows()[i].getData().rep2; |
|
| 910 |
- var rep3 = tableL.getRows()[i].getData().rep3; |
|
| 911 |
- var rep4 = tableL.getRows()[i].getData().rep4; |
|
| 912 |
- var varValStr = ""; //¶ 구분자 |
|
| 913 |
- |
|
| 914 |
- if(phone == ""){
|
|
| 915 |
- |
|
| 916 |
- alert("수신 목록에 핸드폰 번호가 없는 항목이 있습니다.");
|
|
| 917 |
- return false; |
|
| 918 |
- |
|
| 919 |
- }else if(!checkHpNum(phone)){
|
|
| 920 |
- |
|
| 921 |
- alert("수신 목록에 잘 못된 핸드폰 번호가 있습니다. 핸드폰 번호 : " + phone + " 입니다.");
|
|
| 922 |
- return false; |
|
| 923 |
- |
|
| 924 |
- }else{
|
|
| 925 |
- |
|
| 926 |
- if(typeof(name) != 'undefined' && name != null && name !=""){
|
|
| 927 |
- if(!emojiCheck(name)){//이모지 체크 해주기
|
|
| 928 |
- return false; |
|
| 929 |
- } |
|
| 930 |
- |
|
| 931 |
- //이름 치환변수가 있으면 저장 |
|
| 932 |
- if(nmStatus){
|
|
| 933 |
- //nameList[i] = name.replaceAll(",","§");
|
|
| 934 |
- if(varValStr == ''){
|
|
| 935 |
- |
|
| 936 |
- varValStr = name.replaceAll(",","§");
|
|
| 937 |
- }else{
|
|
| 938 |
- |
|
| 939 |
- varValStr = varValStr + "¶" + name.replaceAll(",","§");
|
|
| 940 |
- |
|
| 941 |
- } |
|
| 942 |
- } |
|
| 943 |
- }else{
|
|
| 944 |
- if(nmStatus){
|
|
| 945 |
- varValStatus = false; |
|
| 946 |
- } |
|
| 947 |
- } |
|
| 948 |
- |
|
| 949 |
- |
|
| 950 |
- if(phone != '' && phone != null){
|
|
| 951 |
- //연락처 변수 저장하기 |
|
| 952 |
- phoneNum[i] = phone; |
|
| 953 |
- if(varValStr == ''){
|
|
| 954 |
- varValStr = phone; |
|
| 955 |
- }else{
|
|
| 956 |
- varValStr = varValStr + "¶" + phone; |
|
| 957 |
- } |
|
| 958 |
- }else{
|
|
| 959 |
- varValStatus = false; |
|
| 960 |
- } |
|
| 961 |
- |
|
| 962 |
- if(typeof(rep1) != 'undefined' && rep1 != null && rep1 !=""){
|
|
| 963 |
- if(!emojiCheck(rep1)){//이모지 체크 해주기
|
|
| 964 |
- return false; |
|
| 965 |
- } |
|
| 966 |
- |
|
| 967 |
- if(rep1Status){
|
|
| 968 |
- |
|
| 969 |
- if(varValStr == ''){
|
|
| 970 |
- //rep1List[i] = rep1.replaceAll(",","§");
|
|
| 971 |
- varValStr = rep1.replaceAll(",","§");
|
|
| 972 |
- }else{
|
|
| 973 |
- //rep1List[i] = rep1.replaceAll(",","§");
|
|
| 974 |
- varValStr = varValStr + "¶" + rep1.replaceAll(",","§");
|
|
| 975 |
- } |
|
| 976 |
- } |
|
| 977 |
- }else{
|
|
| 978 |
- if(rep1Status){
|
|
| 979 |
- varValStatus = false; |
|
| 980 |
- } |
|
| 981 |
- } |
|
| 982 |
- |
|
| 983 |
- if(typeof(rep2) != 'undefined' && rep2 != null && rep2 !=""){
|
|
| 984 |
- if(!emojiCheck(rep2)){//이모지 체크 해주기
|
|
| 985 |
- return false; |
|
| 986 |
- } |
|
| 987 |
- |
|
| 988 |
- if(rep2Status){
|
|
| 989 |
- |
|
| 990 |
- if(varValStr == ''){
|
|
| 991 |
- varValStr = rep2.replaceAll(",","§");
|
|
| 992 |
- }else{
|
|
| 993 |
- //rep2List[i] = rep2.replaceAll(",","§");
|
|
| 994 |
- varValStr = varValStr + "¶" + rep2.replaceAll(",","§");
|
|
| 995 |
- } |
|
| 996 |
- } |
|
| 997 |
- }else{
|
|
| 998 |
- if(rep2Status){
|
|
| 999 |
- varValStatus = false; |
|
| 1000 |
- } |
|
| 1001 |
- } |
|
| 1002 |
- |
|
| 1003 |
- |
|
| 1004 |
- if(typeof(rep3) != 'undefined' && rep3 != null && rep3 !=""){
|
|
| 1005 |
- if(!emojiCheck(rep3)){//이모지 체크 해주기
|
|
| 1006 |
- return false; |
|
| 1007 |
- } |
|
| 1008 |
- |
|
| 1009 |
- if(rep3Status){
|
|
| 1010 |
- |
|
| 1011 |
- if(varValStr == ''){
|
|
| 1012 |
- varValStr = rep3.replaceAll(",","§");
|
|
| 1013 |
- }else{
|
|
| 1014 |
- //rep3List[i] = rep3.replaceAll(",","§");
|
|
| 1015 |
- varValStr = varValStr + "¶" + rep3.replaceAll(",","§");
|
|
| 1016 |
- } |
|
| 1017 |
- } |
|
| 1018 |
- }else{
|
|
| 1019 |
- if(rep3Status){
|
|
| 1020 |
- varValStatus = false; |
|
| 1021 |
- } |
|
| 1022 |
- } |
|
| 1023 |
- |
|
| 1024 |
- |
|
| 1025 |
- if(typeof(rep4) != 'undefined' && rep4 != null && rep4 !=""){
|
|
| 1026 |
- if(!emojiCheck(rep4)){//이모지 체크 해주기
|
|
| 1027 |
- return false; |
|
| 1028 |
- } |
|
| 1029 |
- |
|
| 1030 |
- if(rep4Status){
|
|
| 1031 |
- |
|
| 1032 |
- if(varValStr == ''){
|
|
| 1033 |
- varValStr = rep4.replaceAll(",","§");
|
|
| 1034 |
- }else{
|
|
| 1035 |
- //rep4List[i] = rep4.replaceAll(",","§");
|
|
| 1036 |
- varValStr = varValStr + "¶" + rep4.replaceAll(",","§");
|
|
| 1037 |
- } |
|
| 1038 |
- } |
|
| 1039 |
- }else{
|
|
| 1040 |
- if(rep4Status){
|
|
| 1041 |
- varValStatus = false; |
|
| 1042 |
- } |
|
| 1043 |
- } |
|
| 1044 |
- |
|
| 1045 |
- } |
|
| 1046 |
- |
|
| 1047 |
- varValList[i] = varValStr; |
|
| 1048 |
- |
|
| 1049 |
- } |
|
| 1050 |
- |
|
| 1051 |
- }else{//치환문자가 없는 경우 휴대폰 번호만 입력
|
|
| 1052 |
- |
|
| 1053 |
- for(var i=0; i < selectedData.length; i++){
|
|
| 1054 |
- |
|
| 1055 |
- //일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다. |
|
| 1056 |
- var phone = removeDash(tableL.getRows()[i].getData().phone); |
|
| 1057 |
- |
|
| 1058 |
- if(phone == ""){
|
|
| 1059 |
- |
|
| 1060 |
- alert("수신 목록에 핸드폰 번호가 없는 항목이 있습니다.");
|
|
| 1061 |
- return false; |
|
| 1062 |
- |
|
| 1063 |
- }else if(!checkHpNum(phone)){
|
|
| 1064 |
- |
|
| 1065 |
- alert("수신 목록에 잘 못된 핸드폰 번호가 있습니다. 핸드폰 번호 : " + phone + " 입니다.");
|
|
| 1066 |
- return false; |
|
| 1067 |
- |
|
| 1068 |
- }else{
|
|
| 1069 |
- |
|
| 1070 |
- phoneNum[i] = phone; |
|
| 1071 |
- |
|
| 1072 |
- } |
|
| 1073 |
- } |
|
| 1074 |
- } |
|
| 1075 | 853 |
} |
| 1076 | 854 |
|
| 1077 | 855 |
//예약문자 시간 체크 |
... | ... | @@ -1111,51 +889,22 @@ |
| 1111 | 889 |
|
| 1112 | 890 |
//대체문자 선택 및 내용 체크 |
| 1113 | 891 |
var subMsgSendYn = "N"; |
| 1114 |
- |
|
| 1115 | 892 |
if($("#send_fail_check").is(":checked")){
|
| 1116 |
- |
|
| 1117 |
- subMsgSendYn = "Y"; |
|
| 1118 |
- $("#subMsgSendYn").val("Y");
|
|
| 1119 |
- |
|
| 1120 |
- //대체문자 체크사항 함수 호출 |
|
| 1121 |
- if(!fn_subMsgCheck()){
|
|
| 1122 |
- |
|
| 1123 |
- /* $("#send_fail_check").prop("checked", false);
|
|
| 1124 |
- $(".replace_send_wrap").slideUp(400);
|
|
| 1125 |
- // 초기화 버튼 클릭 |
|
| 1126 |
- $('#failCheckInit').click();
|
|
| 1127 |
- $('.send_top .send_right .phone').css({'top': '0','transition': 'top .4s linear'}); */
|
|
| 1128 |
- return false; |
|
| 1129 |
- |
|
| 1130 |
- } |
|
| 1131 |
- |
|
| 1132 |
- }else{
|
|
| 1133 |
- |
|
| 1134 |
- subMsgSendYn = "N"; |
|
| 1135 |
- $("#subMsgSendYn").val("N");
|
|
| 1136 |
- |
|
| 893 |
+ subMsgSendYn = 'Y' |
|
| 1137 | 894 |
} |
| 895 |
+ $("#subMsgSendYn").val(subMsgSendYn);
|
|
| 896 |
+ |
|
| 1138 | 897 |
|
| 1139 |
- //수신전화번호 목록 |
|
| 1140 |
- $("#callToList").val(phoneNum);
|
|
| 1141 | 898 |
|
| 1142 |
- //치환변수 데이터 정보 목록(수신번호 포함, tabulator 정보 모두 ) |
|
| 1143 |
- $("#varValList").val(varValList);
|
|
| 1144 |
- |
|
| 1145 | 899 |
//템플릿 내용 입력 |
| 1146 | 900 |
$("#templateContent").val(tmpContents);
|
| 1147 | 901 |
|
| 1148 | 902 |
//광고포함 여부 |
| 1149 |
- var adFlag = $("input[name=ad_flag]:checked").val();
|
|
| 903 |
+ var adFlag = $("input[name=adFlag]:checked").val();
|
|
| 1150 | 904 |
$("#adFlag").val(adFlag);
|
| 905 |
+/* var adFlag = $("input[name=adFlag]:checked").val();
|
|
| 906 |
+ $("#adFlag").val(adFlag); */
|
|
| 1151 | 907 |
|
| 1152 |
- //치환문자에 대한 데이터 누락 체크 |
|
| 1153 |
- if(!varValStatus){
|
|
| 1154 |
- |
|
| 1155 |
- alert("특정문구 일괄변환에 대한 일부 데이터가 누락된 부분이 있습니다. 데이터를 확인해 주세요.");
|
|
| 1156 |
- return false; |
|
| 1157 |
- |
|
| 1158 |
- } |
|
| 1159 | 908 |
|
| 1160 | 909 |
if(!confirm("친구톡을 발송하시겠습니까?")){
|
| 1161 | 910 |
|
... | ... | @@ -1241,12 +990,18 @@ |
| 1241 | 990 |
// 3. formData에 배열로 추가 |
| 1242 | 991 |
formData["buttonVOList"] = buttonList; |
| 1243 | 992 |
|
| 1244 |
- // ✅ 4. 기존의 buttonVOList[0].xxx 형태 제거 |
|
| 993 |
+ // 4. 기존의 buttonVOList[0].xxx 형태 제거 |
|
| 1245 | 994 |
Object.keys(formData).forEach(function(key) {
|
| 1246 |
- if (/^buttonVOList\[\d+\]\./.test(key)) {
|
|
| 1247 |
- delete formData[key]; |
|
| 1248 |
- } |
|
| 995 |
+ if (/^buttonVOList\[\d+\]\./.test(key)) {
|
|
| 996 |
+ delete formData[key]; |
|
| 997 |
+ } |
|
| 1249 | 998 |
}); |
| 999 |
+ |
|
| 1000 |
+ // VO에 정의되어있지 않는 필요없는 값은 제거 |
|
| 1001 |
+ ["adFlag", "img_file_add", "userMoney", "callToList"].forEach(function(key) {
|
|
| 1002 |
+ delete formData[key]; |
|
| 1003 |
+ }); |
|
| 1004 |
+ |
|
| 1250 | 1005 |
|
| 1251 | 1006 |
// 빈 값 제거 |
| 1252 | 1007 |
removeEmptyValues(formData); |
... | ... | @@ -1363,74 +1118,6 @@ |
| 1363 | 1118 |
$('#errorChk').val(val);
|
| 1364 | 1119 |
} |
| 1365 | 1120 |
|
| 1366 |
-/* |
|
| 1367 |
- *대체문자 필수 항목 체크 |
|
| 1368 |
- * |
|
| 1369 |
- **/ |
|
| 1370 |
- |
|
| 1371 |
-function fn_subMsgCheck(){
|
|
| 1372 |
- |
|
| 1373 |
- if($('#callFromList').val() === ''){
|
|
| 1374 |
- |
|
| 1375 |
- if(confirm('대체문자 전송을 위한 발신번호가 등록되지 않았습니다. \n대체문자 발신번호를 지금 등록하시겠습니까?')){
|
|
| 1376 |
- window.location="<c:out value='/web/user/sendNumberManage.do' />"; |
|
| 1377 |
- } |
|
| 1378 |
- $("#send_fail_check").prop("checked", false);
|
|
| 1379 |
- |
|
| 1380 |
- return false; |
|
| 1381 |
- |
|
| 1382 |
- }else{
|
|
| 1383 |
- |
|
| 1384 |
- //발신번호 입력 처리 |
|
| 1385 |
- $("#callFrom").val(removeDash($('#callFromList').val()));
|
|
| 1386 |
- |
|
| 1387 |
- } |
|
| 1388 |
- |
|
| 1389 |
- if($("#smsTxtArea").val() === ''){
|
|
| 1390 |
- |
|
| 1391 |
- alert("대체문자 내용을 입력해 주세요.");
|
|
| 1392 |
- return false; |
|
| 1393 |
- |
|
| 1394 |
- }else{//대체문자에 치환문자 여부 체크
|
|
| 1395 |
- |
|
| 1396 |
- var smsTxtArea = $("#smsTxtArea").val();
|
|
| 1397 |
- var replStatus = false; |
|
| 1398 |
- |
|
| 1399 |
- if(smsTxtArea.indexOf("\#{이름}") > -1){
|
|
| 1400 |
- replStatus = true; |
|
| 1401 |
- } |
|
| 1402 |
- |
|
| 1403 |
- if(smsTxtArea.indexOf("\#{1}") > -1){
|
|
| 1404 |
- replStatus = true; |
|
| 1405 |
- } |
|
| 1406 |
- |
|
| 1407 |
- if(smsTxtArea.indexOf("\#{2}") > -1){
|
|
| 1408 |
- replStatus = true; |
|
| 1409 |
- } |
|
| 1410 |
- |
|
| 1411 |
- if(smsTxtArea.indexOf("\#{3}") > -1){
|
|
| 1412 |
- replStatus = true; |
|
| 1413 |
- } |
|
| 1414 |
- |
|
| 1415 |
- if(smsTxtArea.indexOf("\#{4}") > -1){
|
|
| 1416 |
- replStatus = true; |
|
| 1417 |
- } |
|
| 1418 |
- |
|
| 1419 |
- if(replStatus){
|
|
| 1420 |
- $("#subMsgTxtReplYn").val("Y");
|
|
| 1421 |
- }else{
|
|
| 1422 |
- $("#subMsgTxtReplYn").val("N");
|
|
| 1423 |
- } |
|
| 1424 |
- |
|
| 1425 |
- $("#subMsgTxt").val(smsTxtArea);
|
|
| 1426 |
- |
|
| 1427 |
- } |
|
| 1428 |
- |
|
| 1429 |
- |
|
| 1430 |
- |
|
| 1431 |
- return true; |
|
| 1432 |
- |
|
| 1433 |
-} |
|
| 1434 | 1121 |
|
| 1435 | 1122 |
//문자 바이트수 계산하기 함수 |
| 1436 | 1123 |
function thisFnByteString(contents){
|
... | ... | @@ -1924,8 +1611,8 @@ |
| 1924 | 1611 |
<tr> |
| 1925 | 1612 |
<th>광고포함 여부</th> |
| 1926 | 1613 |
<td> |
| 1927 |
-<%-- <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> --%>
|
|
| 1928 |
- <input type="radio" class="inputAdFlag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label>
|
|
| 1614 |
+ <input type="radio" class="inputAdFlag" name="adFlag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label>
|
|
| 1615 |
+<%-- <input type="radio" class="inputAdFlag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label> --%>
|
|
| 1929 | 1616 |
</td> |
| 1930 | 1617 |
</tr> |
| 1931 | 1618 |
<tr> |
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?