Merge branch '알림톡api' of http://dlwldn1024@vcs.iten.co.kr:9999/hylee/mjon_git into 알림톡api
@f4c137a8c73185a787f7fd5b8798e119616313ff
+++ .claude/.gitignore
... | ... | @@ -0,0 +1,1 @@ |
| 1 | +/settings.local.json |
--- src/main/java/itn/com/cmm/util/MsgSendUtils.java
+++ src/main/java/itn/com/cmm/util/MsgSendUtils.java
... | ... | @@ -229,8 +229,8 @@ |
| 229 | 229 |
placeholders.put("[*4*]", MjonMsgSendVO::getRep4);
|
| 230 | 230 |
|
| 231 | 231 |
boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 |
| 232 |
- boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 |
|
| 233 |
- boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 |
|
| 232 |
+ boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 메세지 타입 체크 한번 |
|
| 233 |
+ boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, |
|
| 234 | 234 |
|
| 235 | 235 |
String msgKind = mjonMsgVO.getMsgKind(); |
| 236 | 236 |
String smsTxtTemp = mjonMsgVO.getSmsTxt(); |
... | ... | @@ -257,10 +257,6 @@ |
| 257 | 257 |
for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
|
| 258 | 258 |
String placeholder = entry.getKey(); |
| 259 | 259 |
String value = entry.getValue().apply(sendVO); |
| 260 |
-// log.info(" + smsTxtTemp [{}]", smsTxtTemp);
|
|
| 261 |
-// log.info(" + placeholder [{}]", placeholder);
|
|
| 262 |
-// log.info(" + value [{}]", value);
|
|
| 263 |
-// log.info(" + smsTxtTemp.contains(placeholder) [{}]", smsTxtTemp.contains(placeholder));
|
|
| 264 | 260 |
if (smsTxt.contains(placeholder)) {
|
| 265 | 261 |
if (StringUtils.isEmpty(value)) {
|
| 266 | 262 |
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다."); |
--- src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java
... | ... | @@ -67,13 +67,16 @@ |
| 67 | 67 |
private String kakaoAtPrice; // 카카오 알림톡 단가 |
| 68 | 68 |
private String bizJsonName; // 카카오 알림톡 단가 |
| 69 | 69 |
private String reserveYn; // 카카오 알림톡 단가 |
| 70 |
- private String atDelayYn; // 카카오 알림톡 단가 |
|
| 70 |
+ private String atDelayYn; // 지연 문자 발송 |
|
| 71 | 71 |
private String bizKakaoResendOrgnlTxt; // 카카오 알림톡 단가 |
| 72 | 72 |
private String bizKakaoResendType; // 카카오 알림톡 단가 |
| 73 | 73 |
private String filePath1; // 대체문자 이미지 |
| 74 | 74 |
private String fileCnt; // 파일 카운트 |
| 75 | 75 |
private String bizKakaoImageType; // 파일 카운트 |
| 76 | 76 |
|
| 77 |
+ private String spamStatus; |
|
| 78 |
+ |
|
| 79 |
+ |
|
| 77 | 80 |
|
| 78 | 81 |
|
| 79 | 82 |
|
--- src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
... | ... | @@ -40,6 +40,7 @@ |
| 40 | 40 |
import itn.let.module.base.PriceAndPoint; |
| 41 | 41 |
import itn.let.sym.site.service.JoinSettingVO; |
| 42 | 42 |
import itn.let.uss.umt.service.MberManageVO; |
| 43 |
+import itn.let.uss.umt.service.UserManageVO; |
|
| 43 | 44 |
import lombok.extern.slf4j.Slf4j; |
| 44 | 45 |
|
| 45 | 46 |
@Slf4j |
... | ... | @@ -134,7 +135,15 @@ |
| 134 | 135 |
// 사용자 개인 단가 정보 불러오기 |
| 135 | 136 |
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId()); |
| 136 | 137 |
|
| 138 |
+ |
|
| 139 |
+ float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice()); |
|
| 140 |
+ float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice()); |
|
| 141 |
+ float kakaoAtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice()); |
|
| 137 | 142 |
|
| 143 |
+ |
|
| 144 |
+ String shortPStr = Float.toString(shortPrice); |
|
| 145 |
+ String mmsPStr = Float.toString(longPrice); |
|
| 146 |
+ String kakaoAtPStr = Float.toString(kakaoAtPrice); |
|
| 138 | 147 |
|
| 139 | 148 |
|
| 140 | 149 |
/** @MSGID KEY값 */ |
... | ... | @@ -152,22 +161,6 @@ |
| 152 | 161 |
/** @Map에 총 갯수가 수신자 갯수와 동일함 */ |
| 153 | 162 |
List<Map<String, String>> varList = kakaoVO.getVarListMap(); |
| 154 | 163 |
|
| 155 |
- /* |
|
| 156 |
- for (int i = 0; i < varList.size(); i++) {
|
|
| 157 |
- Map<String, String> map = varList.get(i); |
|
| 158 |
- for (Map.Entry<String, String> entry : map.entrySet()) {
|
|
| 159 |
- // key=value 형태로 로그 출력 |
|
| 160 |
- log.info("varList[{}] {} = {}", i, entry.getKey(), entry.getValue());
|
|
| 161 |
- } |
|
| 162 |
- } |
|
| 163 |
- |
|
| 164 |
- if(1==1) {
|
|
| 165 |
- |
|
| 166 |
- // 강제로 예외 발생 |
|
| 167 |
- throw new RuntimeException("강제 예외 발생 테스트");
|
|
| 168 |
- } |
|
| 169 |
- */ |
|
| 170 |
- |
|
| 171 | 164 |
for (int i = 0; i < varList.size(); i++) {
|
| 172 | 165 |
// for(Map<String, String> variables : kakaoVO.getVarListMap()) {
|
| 173 | 166 |
// 치환 데이터 |
... | ... | @@ -176,6 +169,12 @@ |
| 176 | 169 |
|
| 177 | 170 |
/** @공통 기본값 */ |
| 178 | 171 |
KakaoSendAdvcVO sendVO = createATSendVO(kakaoVO); |
| 172 |
+ // 공통 가격 설정 |
|
| 173 |
+ sendVO.setSmsPrice(shortPStr); |
|
| 174 |
+ sendVO.setMmsPrice(mmsPStr); |
|
| 175 |
+ sendVO.setKakaoAtPrice(kakaoAtPStr); |
|
| 176 |
+ |
|
| 177 |
+ |
|
| 179 | 178 |
String msgId = idList.get(i); |
| 180 | 179 |
sendVO.setMsgId(msgId); |
| 181 | 180 |
|
... | ... | @@ -191,6 +190,7 @@ |
| 191 | 190 |
String templateContentTemp = templateContent; |
| 192 | 191 |
String templateTitleTemp = templateTitle; |
| 193 | 192 |
|
| 193 |
+ // api가 아니면 |
|
| 194 | 194 |
if(!isApiData) {
|
| 195 | 195 |
if (hasContentReplacement) {
|
| 196 | 196 |
templateContentTemp = mjonCommon.ATReplaceTemplateVariables(templateContent, variables); |
... | ... | @@ -199,7 +199,8 @@ |
| 199 | 199 |
} |
| 200 | 200 |
} |
| 201 | 201 |
}else {
|
| 202 |
- |
|
| 202 |
+ templateContentTemp = variables.get("templateContent");
|
|
| 203 |
+ templateTitleTemp = variables.get("templateTitle");
|
|
| 203 | 204 |
} |
| 204 | 205 |
|
| 205 | 206 |
|
... | ... | @@ -217,43 +218,18 @@ |
| 217 | 218 |
String subMsgTxtTemp = subMsgTxt; |
| 218 | 219 |
// Step 1-4: 실패 대체 문자 치환데이터 설정 |
| 219 | 220 |
if("Y".equals(kakaoVO.getSubMsgSendYn())) { // 대체문자가 있나?
|
| 220 |
- if ("Y".equals(kakaoVO.getSubMsgTxtReplYn())) { // 치환데이터가 있나?
|
|
| 221 |
- subMsgTxtTemp = mjonCommon.ATReplaceTemplateVariables(subMsgTxt, variables); |
|
| 221 |
+ // api가 아니면 |
|
| 222 |
+ if(!isApiData) {
|
|
| 223 |
+ if ("Y".equals(kakaoVO.getSubMsgTxtReplYn())) { // 치환데이터가 있나?
|
|
| 224 |
+ subMsgTxtTemp = mjonCommon.ATReplaceTemplateVariables(subMsgTxt, variables); |
|
| 225 |
+ } |
|
| 226 |
+ }else {
|
|
| 227 |
+ subMsgTxtTemp = variables.get("subMsgTxt");
|
|
| 222 | 228 |
} |
| 223 | 229 |
sendVO.setSubMsgTxt(subMsgTxtTemp);// 실패 |
| 224 | 230 |
} |
| 225 | 231 |
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn()); |
| 226 | 232 |
|
| 227 |
- |
|
| 228 |
- /* |
|
| 229 |
- log.info("kakaoSendAdvcVO Details: [callTo={}\n, templateContent=\n{}\n, subMsgTxt=\n{}]\n\n\n\n",
|
|
| 230 |
- kakaoSendAdvcVO.getCallTo(), |
|
| 231 |
- kakaoSendAdvcVO.getTemplateContent(), |
|
| 232 |
- kakaoSendAdvcVO.getSubMsgTxt() |
|
| 233 |
- ); |
|
| 234 |
- */ |
|
| 235 |
- |
|
| 236 |
- // Step1 END |
|
| 237 |
- |
|
| 238 |
- |
|
| 239 |
-// step3 |
|
| 240 |
-// 바이트 수 체크 및 금액설정 |
|
| 241 |
- |
|
| 242 |
- |
|
| 243 |
- // 유효한 단가 계산 |
|
| 244 |
- float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice()); |
|
| 245 |
- float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice()); |
|
| 246 |
- float kakaoAtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice()); |
|
| 247 |
- |
|
| 248 |
- |
|
| 249 |
- String shortPStr = Float.toString(shortPrice); |
|
| 250 |
- String mmsPStr = Float.toString(longPrice); |
|
| 251 |
- String kakaoAtPStr = Float.toString(kakaoAtPrice); |
|
| 252 |
- |
|
| 253 |
- // 공통 가격 설정 |
|
| 254 |
- sendVO.setSmsPrice(shortPStr); |
|
| 255 |
- sendVO.setMmsPrice(mmsPStr); |
|
| 256 |
- sendVO.setKakaoAtPrice(kakaoAtPStr); |
|
| 257 | 233 |
|
| 258 | 234 |
|
| 259 | 235 |
if("Y".equals(kakaoVO.getSubMsgSendYn())) {
|
... | ... | @@ -325,21 +301,36 @@ |
| 325 | 301 |
* @description : |
| 326 | 302 |
* @return : List<KakaoSendAdvcVO> |
| 327 | 303 |
* @param kakaoVO |
| 328 |
- * @param isNotified |
|
| 304 |
+ * @param isHolidayNotified |
|
| 329 | 305 |
* @param statusResponse |
| 330 | 306 |
* @return |
| 331 | 307 |
* @throws Exception |
| 332 | 308 |
* |
| 333 | 309 |
*/ |
| 334 |
- public List<KakaoSendAdvcVO> populateSendListsFT(KakaoVO kakaoVO, boolean isNotified, StatusResponse statusResponse) throws Exception {
|
|
| 310 |
+ public List<KakaoSendAdvcVO> populateSendListsFT(KakaoVO kakaoVO |
|
| 311 |
+ , boolean isHolidayNotified |
|
| 312 |
+ , StatusResponse statusResponse |
|
| 313 |
+ , UserManageVO userManageVO |
|
| 314 |
+ , List<String> resultSpamTxt |
|
| 315 |
+ ) throws Exception {
|
|
| 335 | 316 |
|
| 336 | 317 |
//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) |
| 337 | 318 |
// String befCash = kakaoVO.getBefCash(); |
| 338 | 319 |
|
| 339 | 320 |
log.info("kakaoVO.ftToString() :: [{}]", kakaoVO.ftToString());
|
| 340 | 321 |
|
| 322 |
+ |
|
| 323 |
+ // 예약 시간 기본값 설정 |
|
| 324 |
+ Date now = new Date(); |
|
| 325 |
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 326 |
+ |
|
| 327 |
+ String atSmishingYn = userManageVO.getAtSmishingYn(); |
|
| 328 |
+ String exceptSpamYn = userManageVO.getExceptSpamYn(); |
|
| 329 |
+ |
|
| 330 |
+ |
|
| 341 | 331 |
List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>(); |
| 342 |
- Calendar calendar = setupBaseDate(kakaoVO, isNotified); |
|
| 332 |
+ Calendar calendar = setupBaseDateFT(kakaoVO); |
|
| 333 |
+ |
|
| 343 | 334 |
|
| 344 | 335 |
|
| 345 | 336 |
// 친구톡 내용 |
... | ... | @@ -403,18 +394,18 @@ |
| 403 | 394 |
float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice()); |
| 404 | 395 |
float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice()); |
| 405 | 396 |
float picturePrice = getValidPrice(mberManageVO.getPicturePrice(), sysJoinSetVO.getPicturePrice()); |
| 406 |
-// String shortPStr = Float.toString(shortPrice); |
|
| 407 |
-// String mmsPStr = Float.toString(longPrice); |
|
| 408 |
-// String imgPrice = Float.toString(picturePrice); |
|
| 397 |
+ |
|
| 398 |
+ boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 |
|
| 399 |
+ boolean hasPerformedSubSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 |
|
| 400 |
+ boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 메세지 타입 체크 한번 |
|
| 401 |
+ boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, |
|
| 402 |
+ |
|
| 409 | 403 |
|
| 410 | 404 |
|
| 411 | 405 |
String imgFilePath = ""; |
| 412 | 406 |
if(StringUtils.isNotEmpty(kakaoVO.getAtchFileId()) && |
| 413 | 407 |
("I".equals(imageType) || "W".equals(imageType))) {
|
| 414 |
- |
|
| 415 |
- |
|
| 416 | 408 |
imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(kakaoVO.getAtchFileId()); |
| 417 |
- |
|
| 418 | 409 |
} |
| 419 | 410 |
|
| 420 | 411 |
|
... | ... | @@ -423,7 +414,20 @@ |
| 423 | 414 |
boolean hasButtons = CollectionUtils.isNotEmpty(kakaoVO.getButtonVOList()); |
| 424 | 415 |
String sharedJsonStr = null; |
| 425 | 416 |
|
| 426 |
- |
|
| 417 |
+ |
|
| 418 |
+ // 치환데이터가 없는 경우 한 번만 계산하기 위한 캐시 변수 추가 |
|
| 419 |
+ Map<String, Object> sharedPricingResult = null; |
|
| 420 |
+ // 치환데이터가 없는 경우 for문 전에 한 번만 계산 |
|
| 421 |
+ if (!replaceSubYN && StringUtils.isNotEmpty(subMsgTxt)) {
|
|
| 422 |
+ sharedPricingResult = calculateSubMsgPricing(subMsgTxt, imgFilePath, shortPrice, longPrice, picturePrice, kakaoFtPrice); |
|
| 423 |
+ |
|
| 424 |
+ // 사전계산에서 INVALID인 경우 즉시 리턴 |
|
| 425 |
+ String preSendType = (String) sharedPricingResult.get("sendType");
|
|
| 426 |
+ if ("INVALID".equals(preSendType)) {
|
|
| 427 |
+ statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다."); |
|
| 428 |
+ return kakaoSendAdvcListVO; |
|
| 429 |
+ } |
|
| 430 |
+ } |
|
| 427 | 431 |
|
| 428 | 432 |
List<MjonFTSendVO> mjonFTSendVOList = kakaoVO.getMjonFTSendVOList(); |
| 429 | 433 |
|
... | ... | @@ -439,7 +443,9 @@ |
| 439 | 443 |
sendVO.setCallTo(mjonFTSendVO.getPhone()); |
| 440 | 444 |
sendVO.setMsgId(idList.get(i)); |
| 441 | 445 |
|
| 442 |
- String smsTxt = templateContent; |
|
| 446 |
+ |
|
| 447 |
+ // 친구톡 문자 |
|
| 448 |
+ String templateContentTemp = templateContent; |
|
| 443 | 449 |
// 치환 문자면 |
| 444 | 450 |
if(replaceYN) {
|
| 445 | 451 |
|
... | ... | @@ -447,21 +453,19 @@ |
| 447 | 453 |
for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
|
| 448 | 454 |
String placeholder = entry.getKey(); |
| 449 | 455 |
String value = entry.getValue().apply(mjonFTSendVO); |
| 450 |
- if (smsTxt.contains(placeholder)) {
|
|
| 456 |
+ if (templateContentTemp.contains(placeholder)) {
|
|
| 451 | 457 |
if (StringUtils.isEmpty(value)) {
|
| 452 | 458 |
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다."); |
| 453 | 459 |
return null; |
| 454 | 460 |
} |
| 455 |
- smsTxt = smsTxt.replace(placeholder, value); |
|
| 461 |
+ templateContentTemp = templateContentTemp.replace(placeholder, value); |
|
| 456 | 462 |
} |
| 457 | 463 |
} |
| 458 | 464 |
} |
| 459 |
- sendVO.setTemplateContent(smsTxt); |
|
| 465 |
+ sendVO.setTemplateContent(templateContentTemp); |
|
| 460 | 466 |
|
| 461 |
- |
|
| 462 |
- |
|
| 467 |
+ // 실패 대체 문자 |
|
| 463 | 468 |
String subMsgTxtTemp = null; |
| 464 |
- |
|
| 465 | 469 |
if(StringUtils.isNotEmpty(subMsgTxt)) {
|
| 466 | 470 |
subMsgTxtTemp = subMsgTxt; |
| 467 | 471 |
|
... | ... | @@ -487,34 +491,28 @@ |
| 487 | 491 |
// Step 1-4: 실패 대체 문자 치환데이터 설정 |
| 488 | 492 |
if(StringUtils.isNotEmpty(subMsgTxtTemp)) { // 대체문자가 있나?
|
| 489 | 493 |
|
| 490 |
- String sendType = "MMS"; |
|
| 491 |
- if(StringUtils.isEmpty(imgFilePath)) {
|
|
| 492 |
- int smsTxtByte = mjonCommon.getSmsTxtBytes(subMsgTxtTemp); // 문자 byte 수 계산 |
|
| 493 |
- sendType = getMsgType(smsTxtByte); // 문자 타입(SHORT / MMS) 판별 |
|
| 494 |
- } |
|
| 495 |
- sendVO.setSubMsgType(sendType); // 실패 대체 문자 타입 설정 |
|
| 494 |
+ // 최적화된 계산 로직 |
|
| 495 |
+ Map<String, Object> pricingResult; |
|
| 496 |
+ |
|
| 497 |
+ if (replaceSubYN) {
|
|
| 498 |
+ // 치환데이터 있음 → 매번 새로 계산 |
|
| 499 |
+ pricingResult = calculateSubMsgPricing(subMsgTxtTemp, imgFilePath, |
|
| 500 |
+ shortPrice, longPrice, picturePrice, kakaoFtPrice); |
|
| 496 | 501 |
|
| 497 |
- if ("INVALID".equals(sendType)) {
|
|
| 498 |
- // INVALID 타입이면 길이 초과 에러 응답 후 리턴 |
|
| 499 |
- statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다."); |
|
| 500 |
- return kakaoSendAdvcListVO; |
|
| 501 |
- } |
|
| 502 |
- |
|
| 503 |
- float chosenPrice = 0f; |
|
| 504 |
- |
|
| 505 |
- if(StringUtils.isNotEmpty(imgFilePath)) {
|
|
| 506 |
- chosenPrice = Math.max(picturePrice, kakaoFtPrice); |
|
| 507 |
- sendVO.setFilePath1(imgFilePath); |
|
| 508 |
- sendVO.setFileCnt("1");
|
|
| 509 |
- |
|
| 510 |
- }else if ("MMS".equals(sendType)) {
|
|
| 511 |
- // MMS 타입일 경우: longPrice(장문 가격)와 카카오톡 단가 중 큰 값을 선택 |
|
| 512 |
- chosenPrice = Math.max(longPrice, kakaoFtPrice); |
|
| 502 |
+ // INVALID 체크 |
|
| 503 |
+ String resultSendType = (String) pricingResult.get("sendType");
|
|
| 504 |
+ if ("INVALID".equals(resultSendType)) {
|
|
| 505 |
+ statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다."); |
|
| 506 |
+ return kakaoSendAdvcListVO; |
|
| 507 |
+ } |
|
| 513 | 508 |
} else {
|
| 514 |
- // SHORT 타입일 경우: shortPrice(단문 가격)와 카카오톡 단가 중 큰 값을 선택 |
|
| 515 |
- chosenPrice = Math.max(shortPrice, kakaoFtPrice); |
|
| 509 |
+ // 치환데이터 없음 → 미리 계산된 결과 재사용 |
|
| 510 |
+ pricingResult = sharedPricingResult; |
|
| 516 | 511 |
} |
| 517 |
- sendVO.setEachPrice(Float.toString(chosenPrice)); // 선택된 단가 설정 |
|
| 512 |
+ |
|
| 513 |
+ |
|
| 514 |
+ // 결과 적용 |
|
| 515 |
+ applyPricingResult(sendVO, pricingResult); |
|
| 518 | 516 |
|
| 519 | 517 |
|
| 520 | 518 |
}else {
|
... | ... | @@ -522,8 +520,68 @@ |
| 522 | 520 |
sendVO.setEachPrice( Float.toString(kakaoFtPrice) ); |
| 523 | 521 |
} |
| 524 | 522 |
|
| 523 |
+ |
|
| 524 |
+ // 스팸 단어 체크 |
|
| 525 |
+ // exceptSpam는 사용자 스팸 단어 체크할건지에 대한 여부 N : 체크 |
|
| 526 |
+ if("N".equals(exceptSpamYn)) {
|
|
| 527 |
+ // 친구톡 내용 |
|
| 528 |
+ if(replaceYN) {
|
|
| 529 |
+ checkSpamAndSetStatus(kakaoVO |
|
| 530 |
+ , templateContentTemp |
|
| 531 |
+ , resultSpamTxt, isHolidayNotified); |
|
| 532 |
+ }else if(!hasPerformedSpamCheck) {
|
|
| 533 |
+ checkSpamAndSetStatus(kakaoVO |
|
| 534 |
+ , templateContentTemp |
|
| 535 |
+ , resultSpamTxt, isHolidayNotified); |
|
| 536 |
+ hasPerformedSpamCheck = true; |
|
| 537 |
+ } |
|
| 538 |
+ // 대체문자 내용 |
|
| 539 |
+ if(StringUtils.isNotEmpty(subMsgTxtTemp)) {
|
|
| 540 |
+ if(replaceSubYN) {
|
|
| 541 |
+ checkSpamAndSetStatus(kakaoVO |
|
| 542 |
+ , subMsgTxtTemp |
|
| 543 |
+ , resultSpamTxt, isHolidayNotified); |
|
| 544 |
+ }else if(!hasPerformedSubSpamCheck) {
|
|
| 545 |
+ checkSpamAndSetStatus(kakaoVO |
|
| 546 |
+ , subMsgTxtTemp |
|
| 547 |
+ , resultSpamTxt, isHolidayNotified); |
|
| 548 |
+ hasPerformedSubSpamCheck = true; |
|
| 549 |
+ } |
|
| 525 | 550 |
|
| 526 |
- // 타이틀과 버튼이 있고 |
|
| 551 |
+ } |
|
| 552 |
+ } |
|
| 553 |
+ |
|
| 554 |
+ log.info(" kakaoVO.toString() :: [{}]",kakaoVO.ftToString());
|
|
| 555 |
+ |
|
| 556 |
+ |
|
| 557 |
+ /* @isHolidayNotified |
|
| 558 |
+ * - 관리자 알림 설정으로 인해 |
|
| 559 |
+ * - 해당 시간이면 지연 미처리 |
|
| 560 |
+ * @smishingYn |
|
| 561 |
+ * - 회원 별 '스미싱 온' 상태값 |
|
| 562 |
+ * - Y면 알림, 지연 처리해야 함 |
|
| 563 |
+ * */ |
|
| 564 |
+ if("Y".equalsIgnoreCase(atSmishingYn) && isHolidayNotified) {
|
|
| 565 |
+ kakaoVO.setSpamStatus("Y");
|
|
| 566 |
+ kakaoVO.setSmishingYn("Y");
|
|
| 567 |
+ kakaoVO.setAtDelayYn("Y");
|
|
| 568 |
+ } |
|
| 569 |
+ |
|
| 570 |
+ // 지연 여부 처리 |
|
| 571 |
+ if (( "Y".equalsIgnoreCase(atSmishingYn) || "Y".equalsIgnoreCase(kakaoVO.getAtDelayYn())) |
|
| 572 |
+ && !hasPerformedDelayYn && isHolidayNotified) {
|
|
| 573 |
+ calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸 |
|
| 574 |
+ // TEST |
|
| 575 |
+// calendar.add(Calendar.MINUTE, 5); // 모든 시간을 30분 뒤로 미룸 |
|
| 576 |
+ hasPerformedDelayYn = true; |
|
| 577 |
+ } |
|
| 578 |
+ |
|
| 579 |
+ sendVO.setReqDate(sdf.format(calendar.getTime())); // 분할된 시간 설정 또는 기본 예약 시간 사용 |
|
| 580 |
+ |
|
| 581 |
+ |
|
| 582 |
+ |
|
| 583 |
+ |
|
| 584 |
+ // 타이틀이나 버튼이 있고 |
|
| 527 | 585 |
if(hasButtons || StringUtils.isNotEmpty(kakaoVO.getTemplateImageUrl())) {
|
| 528 | 586 |
// |
| 529 | 587 |
if (StringUtils.isEmpty(sharedJsonStr)) {
|
... | ... | @@ -538,9 +596,113 @@ |
| 538 | 596 |
kakaoSendAdvcListVO.add(sendVO); |
| 539 | 597 |
log.info(" sendVO.toString() :: [{}]",sendVO.toString());
|
| 540 | 598 |
} |
| 541 |
- |
|
| 599 |
+ |
|
| 542 | 600 |
|
| 543 | 601 |
return kakaoSendAdvcListVO; |
| 602 |
+ } |
|
| 603 |
+ |
|
| 604 |
+ private void checkSpamAndSetStatus(KakaoVO kakaoVO |
|
| 605 |
+ , String chkText |
|
| 606 |
+ , List<String> resultSpamTxt, boolean isHolidayNotified) throws Exception {
|
|
| 607 |
+ // TODO Auto-generated method stub |
|
| 608 |
+ |
|
| 609 |
+ |
|
| 610 |
+ kakaoVO.setSpamStatus("N");
|
|
| 611 |
+ kakaoVO.setAtDelayYn("N");
|
|
| 612 |
+ |
|
| 613 |
+ if(StringUtils.isNotEmpty(chkText)) {
|
|
| 614 |
+ |
|
| 615 |
+ String resultParser = ComGetSpamStringParser.getSpamTextParse(chkText).trim(); |
|
| 616 |
+ int spmCnt = 0; |
|
| 617 |
+ String spmFilterTxt = ""; |
|
| 618 |
+ |
|
| 619 |
+ for (String spmTxt : resultSpamTxt) {
|
|
| 620 |
+ String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim(); |
|
| 621 |
+ if (resultParser.contains(parserStr) || chkText.contains(parserStr)) {
|
|
| 622 |
+ spmCnt++; |
|
| 623 |
+ spmFilterTxt += spmTxt + ","; |
|
| 624 |
+ } |
|
| 625 |
+ } |
|
| 626 |
+ |
|
| 627 |
+ if (spmCnt > 0) { // 스팸 문자가 포함된 경우
|
|
| 628 |
+ |
|
| 629 |
+ if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
|
|
| 630 |
+ // 처음부터 idx 만큼 잘라낸 나머지 글자 |
|
| 631 |
+ spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1); |
|
| 632 |
+ |
|
| 633 |
+ } |
|
| 634 |
+ |
|
| 635 |
+ /* @isHolidayNotified |
|
| 636 |
+ * - 관리자 알림 설정으로 인해 |
|
| 637 |
+ * - 해당 시간이면 지연 미처리 |
|
| 638 |
+ * */ |
|
| 639 |
+ kakaoVO.setSpamStatus("Y");
|
|
| 640 |
+ if(isHolidayNotified) {
|
|
| 641 |
+ kakaoVO.setAtDelayYn("Y");
|
|
| 642 |
+ } |
|
| 643 |
+ } |
|
| 644 |
+ } |
|
| 645 |
+ |
|
| 646 |
+ |
|
| 647 |
+ } |
|
| 648 |
+ |
|
| 649 |
+ // TODO(human): 아래에 새로운 메소드 구현 |
|
| 650 |
+ /** |
|
| 651 |
+ * 대체문자 가격 계산 최적화 메소드 |
|
| 652 |
+ * @param subMsgTxt 대체문자 내용 |
|
| 653 |
+ * @param imgFilePath 이미지 파일 경로 |
|
| 654 |
+ * @param shortPrice 단문 가격 |
|
| 655 |
+ * @param longPrice 장문 가격 |
|
| 656 |
+ * @param picturePrice 사진 가격 |
|
| 657 |
+ * @param kakaoFtPrice 카카오 친구톡 가격 |
|
| 658 |
+ * @return 계산 결과 Map (sendType, chosenPrice, filePath 포함) |
|
| 659 |
+ * @throws UnsupportedEncodingException |
|
| 660 |
+ */ |
|
| 661 |
+ private Map<String, Object> calculateSubMsgPricing(String subMsgTxt, String imgFilePath, |
|
| 662 |
+ float shortPrice, float longPrice, |
|
| 663 |
+ float picturePrice, float kakaoFtPrice) throws UnsupportedEncodingException {
|
|
| 664 |
+ Map<String, Object> result = new HashMap<>(); |
|
| 665 |
+ |
|
| 666 |
+ String sendType = "MMS"; |
|
| 667 |
+ if(StringUtils.isEmpty(imgFilePath)) {
|
|
| 668 |
+ int smsTxtByte = mjonCommon.getSmsTxtBytes(subMsgTxt); |
|
| 669 |
+ sendType = getMsgType(smsTxtByte); |
|
| 670 |
+ } |
|
| 671 |
+ |
|
| 672 |
+ result.put("sendType", sendType);
|
|
| 673 |
+ |
|
| 674 |
+ // INVALID인 경우 추가 처리 없이 반환 |
|
| 675 |
+ if ("INVALID".equals(sendType)) {
|
|
| 676 |
+ return result; |
|
| 677 |
+ } |
|
| 678 |
+ |
|
| 679 |
+ float chosenPrice = 0f; |
|
| 680 |
+ if(StringUtils.isNotEmpty(imgFilePath)) {
|
|
| 681 |
+ chosenPrice = Math.max(picturePrice, kakaoFtPrice); |
|
| 682 |
+ result.put("filePath", imgFilePath);
|
|
| 683 |
+ } else if ("MMS".equals(sendType)) {
|
|
| 684 |
+ chosenPrice = Math.max(longPrice, kakaoFtPrice); |
|
| 685 |
+ } else {
|
|
| 686 |
+ chosenPrice = Math.max(shortPrice, kakaoFtPrice); |
|
| 687 |
+ } |
|
| 688 |
+ |
|
| 689 |
+ result.put("sendType", sendType);
|
|
| 690 |
+ result.put("chosenPrice", Float.toString(chosenPrice));
|
|
| 691 |
+ return result; |
|
| 692 |
+ } |
|
| 693 |
+ |
|
| 694 |
+ /** |
|
| 695 |
+ * 가격 계산 결과를 sendVO에 적용하는 헬퍼 메소드 |
|
| 696 |
+ * @param sendVO 적용할 KakaoSendAdvcVO 객체 |
|
| 697 |
+ * @param pricingResult 가격 계산 결과 Map |
|
| 698 |
+ */ |
|
| 699 |
+ private void applyPricingResult(KakaoSendAdvcVO sendVO, Map<String, Object> pricingResult) {
|
|
| 700 |
+ sendVO.setSubMsgType((String) pricingResult.get("sendType"));
|
|
| 701 |
+ sendVO.setEachPrice((String) pricingResult.get("chosenPrice"));
|
|
| 702 |
+ if (pricingResult.get("filePath") != null) {
|
|
| 703 |
+ sendVO.setFilePath1((String) pricingResult.get("filePath"));
|
|
| 704 |
+ sendVO.setFileCnt("1");
|
|
| 705 |
+ } |
|
| 544 | 706 |
} |
| 545 | 707 |
|
| 546 | 708 |
public static String getMsgTypeWithByteValidation(MjonFTSendVO sendVO, String p_smsTxt) throws UnsupportedEncodingException {
|
... | ... | @@ -571,9 +733,21 @@ |
| 571 | 733 |
} |
| 572 | 734 |
return msgType; |
| 573 | 735 |
} |
| 574 |
- |
|
| 575 | 736 |
|
| 576 |
- private Calendar setupBaseDate(KakaoVO kakaoVO, boolean isNotified) throws ParseException {
|
|
| 737 |
+ |
|
| 738 |
+ private Calendar setupBaseDateFT(KakaoVO kakaoVO) throws ParseException {
|
|
| 739 |
+ |
|
| 740 |
+ // baseDate 추출 |
|
| 741 |
+ Date baseDate = resolveBaseDate(kakaoVO); |
|
| 742 |
+ |
|
| 743 |
+ // 시간 성정 |
|
| 744 |
+ Calendar calendar = Calendar.getInstance(); |
|
| 745 |
+ calendar.setTime(baseDate); // calendar에 baseDate 설정 |
|
| 746 |
+ |
|
| 747 |
+ return calendar; |
|
| 748 |
+ } |
|
| 749 |
+ |
|
| 750 |
+ private Calendar setupBaseDate(KakaoVO kakaoVO, boolean isHolidayNotified) throws ParseException {
|
|
| 577 | 751 |
|
| 578 | 752 |
// baseDate 추출 |
| 579 | 753 |
Date baseDate = resolveBaseDate(kakaoVO); |
... | ... | @@ -585,7 +759,7 @@ |
| 585 | 759 |
// 지연 여부 처리 |
| 586 | 760 |
// 알림톡 스미싱의심 + 공휴일알림 조건이 맞으면 30분 delay |
| 587 | 761 |
if ( "Y".equalsIgnoreCase(kakaoVO.getAtSmishingYn()) |
| 588 |
- && isNotified) {
|
|
| 762 |
+ && isHolidayNotified) {
|
|
| 589 | 763 |
calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸 |
| 590 | 764 |
} |
| 591 | 765 |
return calendar; |
... | ... | @@ -657,7 +831,7 @@ |
| 657 | 831 |
sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime())); |
| 658 | 832 |
|
| 659 | 833 |
sendVO.setSenderKey(kakaoVO.getSenderKey()); |
| 660 |
- sendVO.setTemplateCode(kakaoVO.getTemplateCode()); |
|
| 834 |
+// sendVO.setTemplateCode(kakaoVO.getTemplateCode()); |
|
| 661 | 835 |
sendVO.setUserId(kakaoVO.getUserId()); |
| 662 | 836 |
sendVO.setCallFrom(kakaoVO.getCallFrom()); |
| 663 | 837 |
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn()); |
... | ... | @@ -1711,12 +1885,14 @@ |
| 1711 | 1885 |
sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId())); |
| 1712 | 1886 |
sendVO.setAdFlag(kakaoVO.getAdFlag()); |
| 1713 | 1887 |
|
| 1888 |
+ sendVO.setSendKind(kakaoVO.getSendKind()); |
|
| 1889 |
+ |
|
| 1714 | 1890 |
Float eachPrice = Float.parseFloat(sendVO.getEachPrice()); |
| 1715 | 1891 |
|
| 1716 | 1892 |
Float totPrice = eachPrice * instCnt; |
| 1717 | 1893 |
sendVO.setTotPrice(String.format("%.1f", totPrice));
|
| 1718 | 1894 |
|
| 1719 |
- sendVO.setAtDelayYn(kakaoVO.getAtSmishingYn()); |
|
| 1895 |
+ sendVO.setAtDelayYn(kakaoVO.getAtDelayYn()); |
|
| 1720 | 1896 |
sendVO.setBizKakaoResendOrgnlTxt(kakaoVO.getSubMsgTxt()); |
| 1721 | 1897 |
sendVO.setBizKakaoResendType(sendVO.getSubMsgType()); |
| 1722 | 1898 |
sendVO.setBizKakaoImageType(kakaoVO.getImageType()); |
--- src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
... | ... | @@ -336,28 +336,33 @@ |
| 336 | 336 |
|
| 337 | 337 |
public String ftToString() {
|
| 338 | 338 |
StringBuilder sb = new StringBuilder("KakaoFTSendVO[");
|
| 339 |
- sb.append("\n senderKey=[").append(senderKey).append("]");
|
|
| 339 |
+ sb.append("\n sendKind=[").append(getSendKind()).append("]");
|
|
| 340 |
+ sb.append("\n , senderKey=[").append(senderKey).append("]");
|
|
| 340 | 341 |
sb.append("\n , imageFileName=[").append(imageFileName).append("]");
|
| 341 | 342 |
sb.append("\n , imageType=[").append(imageType).append("]");
|
| 342 |
- sb.append("\n , imgTitle=[").append(imgTitle).append("]");
|
|
| 343 |
- sb.append("\n , imgLink=[").append(imgLink).append("]");
|
|
| 343 |
+ sb.append("\n , atchFileId=[").append(atchFileId).append("]");
|
|
| 344 |
+// sb.append("\n , imgTitle=[").append(imgTitle).append("]");
|
|
| 345 |
+// sb.append("\n , imgLink=[").append(imgLink).append("]");
|
|
| 344 | 346 |
sb.append("\n , templateContent=[").append(templateContent).append("]");
|
| 345 | 347 |
sb.append("\n , templateImageUrl=[").append(templateImageUrl).append("]");
|
| 346 |
- sb.append("\n , smsTxtArea=[").append(getSubMsgTxt()).append("]");
|
|
| 347 |
- sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
|
| 348 |
- sb.append("\n , subMsgTxtReplYn=[").append(subMsgTxtReplYn).append("]");
|
|
| 349 |
- sb.append("\n , subMsgType=[").append(subMsgType).append("]");
|
|
| 348 |
+// sb.append("\n , imgLink=[").append(imgLink).append("]");
|
|
| 349 |
+// sb.append("\n , smsTxtArea=[").append(getSubMsgTxt()).append("]");
|
|
| 350 |
+// sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
|
| 351 |
+// sb.append("\n , subMsgTxtReplYn=[").append(subMsgTxtReplYn).append("]");
|
|
| 352 |
+// sb.append("\n , subMsgType=[").append(subMsgType).append("]");
|
|
| 350 | 353 |
sb.append("\n , subMsgTxt=[").append(subMsgTxt).append("]");
|
| 354 |
+ sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
|
| 351 | 355 |
sb.append("\n , reserveYn=[").append(getReserveYn()).append("]");
|
| 352 |
- sb.append("\n , menuTopTab=[").append(menuTopTab).append("]");
|
|
| 353 |
- sb.append("\n , bizJsonYn=[").append(bizJsonYn).append("]");
|
|
| 354 |
- sb.append("\n , senderKey=[").append(senderKey).append("]");
|
|
| 356 |
+// sb.append("\n , menuTopTab=[").append(menuTopTab).append("]");
|
|
| 357 |
+// sb.append("\n , bizJsonYn=[").append(bizJsonYn).append("]");
|
|
| 355 | 358 |
sb.append("\n , callFrom=[").append(getCallFrom()).append("]");
|
| 356 |
- sb.append("\n , kakaoFtPrice=[").append(getEachPrice()).append("]");
|
|
| 359 |
+// sb.append("\n , kakaoFtPrice=[").append(getEachPrice()).append("]");
|
|
| 357 | 360 |
sb.append("\n , reqDate=[").append(getReqDate()).append("]");
|
| 358 |
- sb.append("\n , spamStatus=[").append(getSpamStatus()).append("]");
|
|
| 359 |
- sb.append("\n , txtReplYn=[").append(getTxtReplYn()).append("]");
|
|
| 360 |
- sb.append("\n , atSmishingYn=[").append(getAtSmishingYn()).append("]");
|
|
| 361 |
+// sb.append("\n , spamStatus=[").append(getSpamStatus()).append("]");
|
|
| 362 |
+// sb.append("\n , txtReplYn=[").append(getTxtReplYn()).append("]");
|
|
| 363 |
+// sb.append("\n , atSmishingYn=[").append(getAtSmishingYn()).append("]");
|
|
| 364 |
+// sb.append("\n , atDelayYn=[").append(getAtDelayYn()).append("]");
|
|
| 365 |
+// sb.append("\n , filePath1=[").append(getFilePath1()).append("]");
|
|
| 361 | 366 |
// sb.append("\n , tmpBtnSelect=[").append(getTmpBtnSelect()).append("]");
|
| 362 | 367 |
StringBuilder btnListSb = new StringBuilder("[");
|
| 363 | 368 |
if (buttonVOList != null && !buttonVOList.isEmpty()) {
|
... | ... | @@ -387,4 +392,7 @@ |
| 387 | 392 |
return sb.toString(); |
| 388 | 393 |
} |
| 389 | 394 |
|
| 395 |
+ |
|
| 396 |
+ |
|
| 397 |
+ |
|
| 390 | 398 |
} |
--- src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiImageUpload.java
+++ src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiImageUpload.java
... | ... | @@ -19,6 +19,7 @@ |
| 19 | 19 |
import javax.swing.ImageIcon; |
| 20 | 20 |
|
| 21 | 21 |
import org.apache.commons.io.FilenameUtils; |
| 22 |
+import org.apache.commons.io.output.ByteArrayOutputStream; |
|
| 22 | 23 |
import org.apache.commons.lang3.StringUtils; |
| 23 | 24 |
import org.apache.http.HttpEntity; |
| 24 | 25 |
import org.apache.http.HttpResponse; |
... | ... | @@ -395,6 +396,7 @@ |
| 395 | 396 |
.addTextBody("senderKey", kakaoVO.getSenderKey())
|
| 396 | 397 |
.addBinaryBody("image", new File(filePath), ContentType.MULTIPART_FORM_DATA, newName + "." + ext)
|
| 397 | 398 |
.build(); |
| 399 |
+; |
|
| 398 | 400 |
|
| 399 | 401 |
httpPost.setEntity(httpEntity); |
| 400 | 402 |
|
... | ... | @@ -407,7 +409,8 @@ |
| 407 | 409 |
String result = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 408 | 410 |
JSONParser parser = new JSONParser(); |
| 409 | 411 |
JSONObject object = (JSONObject) parser.parse(result); |
| 410 |
- |
|
| 412 |
+ log.info("object + :: [{}]", object.toJSONString());
|
|
| 413 |
+ |
|
| 411 | 414 |
String code = object.get("code").toString();
|
| 412 | 415 |
if ("200".equals(code)) {
|
| 413 | 416 |
Map<String, Object> returnMap = new HashMap<>(); |
--- src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
... | ... | @@ -23,12 +23,10 @@ |
| 23 | 23 |
//카카오 친구톡 발신 |
| 24 | 24 |
public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception; |
| 25 | 25 |
|
| 26 |
- //카카오 알림톡 전송 실패 환불리스트 조회 |
|
| 27 |
- public void selectKakaoAtSentRefundList() throws Exception; |
|
| 28 |
- |
|
| 29 |
- //카카오 친구톡 전송 실패 환불리스트 조회 |
|
| 30 |
- public void selectKakaoFtSentRefundList() throws Exception; |
|
| 31 |
- |
|
| 32 | 26 |
StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception; |
| 33 | 27 |
|
| 28 |
+ //카카오(알림톡, 친구톡 통합) 전송 실패 환불리스트 조회 |
|
| 29 |
+ public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception; |
|
| 30 |
+ |
|
| 31 |
+ public void kakaoSingleRefund(KakaoVO kakaoVO) throws Exception; |
|
| 34 | 32 |
} |
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
... | ... | @@ -49,13 +49,8 @@ |
| 49 | 49 |
} |
| 50 | 50 |
|
| 51 | 51 |
@SuppressWarnings("unchecked")
|
| 52 |
- public List<KakaoVO> selectKakaoAtSentRefundList() throws Exception{
|
|
| 53 |
- return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoAtSentRefundList");
|
|
| 54 |
- } |
|
| 55 |
- |
|
| 56 |
- @SuppressWarnings("unchecked")
|
|
| 57 |
- public List<KakaoVO> selectKakaoFtSentRefundList() throws Exception{
|
|
| 58 |
- return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoFtSentRefundList");
|
|
| 52 |
+ public List<KakaoVO> selectKakaoSentRefundList() throws Exception{
|
|
| 53 |
+ return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoSentRefundList");
|
|
| 59 | 54 |
} |
| 60 | 55 |
|
| 61 | 56 |
public KakaoVO selectKakaoAtUmid(KakaoVO kakaoVO) throws Exception{
|
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
... | ... | @@ -11,8 +11,6 @@ |
| 11 | 11 |
import java.util.HashMap; |
| 12 | 12 |
import java.util.List; |
| 13 | 13 |
import java.util.Map; |
| 14 |
-import java.util.Objects; |
|
| 15 |
-import java.util.Set; |
|
| 16 | 14 |
import java.util.stream.Collectors; |
| 17 | 15 |
|
| 18 | 16 |
import javax.annotation.Resource; |
... | ... | @@ -22,12 +20,13 @@ |
| 22 | 20 |
import org.springframework.beans.factory.annotation.Autowired; |
| 23 | 21 |
import org.springframework.http.HttpStatus; |
| 24 | 22 |
import org.springframework.stereotype.Service; |
| 23 |
+import org.springframework.transaction.annotation.Propagation; |
|
| 24 |
+import org.springframework.transaction.annotation.Transactional; |
|
| 25 | 25 |
|
| 26 | 26 |
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; |
| 27 | 27 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 28 | 28 |
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
| 29 | 29 |
import itn.com.cmm.LoginVO; |
| 30 |
-import itn.com.cmm.MjonMsgSendVO; |
|
| 31 | 30 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 32 | 31 |
import itn.let.kakao.kakaoComm.BizKakaoPriceVO; |
| 33 | 32 |
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; |
... | ... | @@ -51,7 +50,6 @@ |
| 51 | 50 |
import itn.let.sym.site.service.JoinSettingVO; |
| 52 | 51 |
import itn.let.sym.site.service.impl.SiteManagerDAO; |
| 53 | 52 |
import itn.let.uss.umt.service.EgovUserManageService; |
| 54 |
-import itn.let.uss.umt.service.UserManageVO; |
|
| 55 | 53 |
import lombok.extern.slf4j.Slf4j; |
| 56 | 54 |
|
| 57 | 55 |
@Slf4j |
... | ... | @@ -105,6 +103,8 @@ |
| 105 | 103 |
final String RESEND_YN_YES = "Y"; |
| 106 | 104 |
final String SMS_SUCCESS_CODE = "4100"; // SMS 성공 코드 |
| 107 | 105 |
final String MMS_SUCCESS_CODE = "6600"; // MMS 성공 코드 |
| 106 |
+ final String AT_MSG_TYPE = "8"; // MSG 타입 알림톡 |
|
| 107 |
+ final String FT_MSG_TYPE = "9"; // MSG 타입 친구톡 |
|
| 108 | 108 |
|
| 109 | 109 |
//발신프로필 상태값 변경(삭제/복구 기능) |
| 110 | 110 |
@Override |
... | ... | @@ -793,144 +793,76 @@ |
| 793 | 793 |
return returnVO; |
| 794 | 794 |
} |
| 795 | 795 |
|
| 796 |
- |
|
| 797 |
- /* |
|
| 798 |
- * 카카오 알림톡 발송 실패에 따른 금액 환불 처리 |
|
| 799 |
- * |
|
| 800 |
- * */ |
|
| 801 |
- @Override |
|
| 802 |
- public void selectKakaoAtSentRefundList() throws Exception {
|
|
| 796 |
+ private void processKakaoSendCharge(KakaoVO kakaoVO) throws Exception {
|
|
| 803 | 797 |
|
| 804 |
- /** |
|
| 805 |
- * 1. 카카오 AT 전송성공 확인 |
|
| 806 |
- * 2. 카카오 AT 전송실패, 대채문자 전송확인 |
|
| 807 |
- * 3. 카카오 AT 전송 실패 확인 |
|
| 808 |
- */ |
|
| 809 |
- List<KakaoVO> kakaoAtSentRefundList = kakaoAlimTalkDAO.selectKakaoAtSentRefundList(); |
|
| 810 |
- |
|
| 811 |
- for(KakaoVO vo : kakaoAtSentRefundList) {
|
|
| 812 |
- System.out.println(vo.getMsgGroupId() +"________결과 : " +vo.getRsltCode() +" 대체문자 전송 : "+vo.getSubMsgSendYn()); |
|
| 813 |
- if(vo.getRsltCode().equals("7000")) {
|
|
| 814 |
- kakaoAlimTalkDAO.updateKakaoAtSend(vo); |
|
| 815 |
- }else if(vo.getSubMsgSendYn().equals("Y")) {
|
|
| 816 |
- KakaoVO info = kakaoAlimTalkDAO.selectKakaoAtUmid(vo); |
|
| 817 |
- |
|
| 818 |
- System.out.println("대체문자 전송 : " + info.getBizUmid());
|
|
| 819 |
- if (info.getBizUmid() != null) {
|
|
| 820 |
- kakaoAlimTalkDAO.updateKakaoAtSubMsgSend(vo); |
|
| 821 |
- }else {
|
|
| 822 |
- kakaoAlimTalkDAO.updateKakaoAtNotSend(vo); |
|
| 823 |
- } |
|
| 824 |
- |
|
| 825 |
- }else {
|
|
| 826 |
- kakaoAlimTalkDAO.updateKakaoAtNotSend(vo); |
|
| 827 |
- } |
|
| 828 |
- } |
|
| 829 |
- } |
|
| 830 |
- |
|
| 831 |
- |
|
| 832 |
- /** |
|
| 833 |
- * @ 카카오 친구톡 환불 |
|
| 834 |
- */ |
|
| 835 |
- @Override |
|
| 836 |
- public void selectKakaoFtSentRefundList() throws Exception {
|
|
| 837 |
- |
|
| 838 |
- List<KakaoVO> kakaoFtSentRefundList = kakaoAlimTalkDAO.selectKakaoFtSentRefundList(); |
|
| 839 |
- |
|
| 840 |
- for(KakaoVO kakaoVO : kakaoFtSentRefundList) {
|
|
| 841 |
- System.out.println(kakaoVO.getMsgGroupId() +"________결과 : " +kakaoVO.getRsltCode() +" 대체문자 전송 : "+kakaoVO.getSubMsgSendYn()); |
|
| 842 |
- |
|
| 843 |
- if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {//친구톡 발송 성공시
|
|
| 844 |
- |
|
| 845 |
- processFtSendCharge(kakaoVO); |
|
| 846 |
- |
|
| 847 |
- }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) {
|
|
| 848 |
- //친구톡 발송 실패 했고, 대체문자 발송 했을 경우 |
|
| 849 |
- handleAlternativeMessageScenario(kakaoVO); |
|
| 850 |
- |
|
| 851 |
- }else {
|
|
| 852 |
- handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불"); |
|
| 853 |
- } |
|
| 854 |
- } |
|
| 855 |
- } |
|
| 856 |
- |
|
| 857 |
- |
|
| 858 |
- private void processFtSendCharge(KakaoVO kakaoVO) throws Exception {
|
|
| 859 |
- |
|
| 860 |
- |
|
| 798 |
+ //1-1.카카오톡 발송 성공 + 대체문자 신청 O : 대체문자 금액 환불 |
|
| 861 | 799 |
if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) {
|
| 862 | 800 |
|
| 863 | 801 |
BizKakaoPriceVO bizKakaoPriceVO = mjonPayDAO.selectBizKakaoPrice(kakaoVO.getMsgGroupId()); |
| 864 | 802 |
|
| 865 | 803 |
BigDecimal sendPrice = null; |
| 866 |
- if(StringUtils.isEmpty(kakaoVO.getBizKakaoImageType())){
|
|
| 867 |
- sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtPrice()); |
|
| 868 |
- }else if("I".equals(kakaoVO.getBizKakaoImageType())){
|
|
| 869 |
- sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtImgPrice()); |
|
| 870 |
- }else if("W".equals(kakaoVO.getBizKakaoImageType())){
|
|
| 871 |
- sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtWideImgPrice()); |
|
| 804 |
+ |
|
| 805 |
+ if(AT_MSG_TYPE.equals(kakaoVO.getMsgType())){
|
|
| 806 |
+ sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoAtPrice()); |
|
| 807 |
+ }else {
|
|
| 808 |
+ if(StringUtils.isEmpty(kakaoVO.getBizKakaoImageType())){
|
|
| 809 |
+ sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtPrice()); |
|
| 810 |
+ }else if("I".equals(kakaoVO.getBizKakaoImageType())){
|
|
| 811 |
+ sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtImgPrice()); |
|
| 812 |
+ }else if("W".equals(kakaoVO.getBizKakaoImageType())){
|
|
| 813 |
+ sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtWideImgPrice()); |
|
| 814 |
+ } |
|
| 872 | 815 |
} |
| 873 |
- |
|
| 874 | 816 |
// 예시: 각 건당 가격이 이미 String 형태라면 변환 |
| 875 | 817 |
BigDecimal eachPrice = new BigDecimal(kakaoVO.getEachPrice()); |
| 876 | 818 |
|
| 877 | 819 |
// 차이 계산 |
| 878 | 820 |
BigDecimal diffPrice = eachPrice.subtract(sendPrice); |
| 879 | 821 |
|
| 880 |
- |
|
| 822 |
+ //대체문자 비용(eachPrace - sendPrice) |
|
| 881 | 823 |
if (diffPrice.compareTo(BigDecimal.ZERO) > 0) {
|
| 882 | 824 |
String result = diffPrice.toString(); |
| 883 | 825 |
kakaoVO.setEachPrice(result); |
| 884 |
- |
|
| 885 |
- handleRefund(kakaoVO, "카카오 친구톡 전송으로 인한 결재 차액 환불"); |
|
| 826 |
+ handleRefund(kakaoVO, "카카오 " + kakaoVO.getMsgTypeTxt() + " 발송 성공 후 대체문자 금액 환불"); |
|
| 886 | 827 |
} |
| 887 | 828 |
|
| 888 |
- }else {
|
|
| 889 |
- mjonMsgDAO.updateRefundY(kakaoVO); |
|
| 890 |
- |
|
| 891 | 829 |
} |
| 892 |
- // TODO Auto-generated method stub |
|
| 893 | 830 |
|
| 831 |
+ //1-2.카카오톡 발송 성공 + 대체문자 신청 X : 금액 환불 X |
|
| 894 | 832 |
} |
| 895 | 833 |
|
| 896 | 834 |
private void handleAlternativeMessageScenario(KakaoVO kakaoVO) throws Exception {
|
| 897 | 835 |
KakaoVO bizLogVO = kakaoAlimTalkDAO.selectBizLog(kakaoVO.getBizUmid()); |
| 898 | 836 |
log.info("대체문자 전송 UMID: {}", kakaoVO.getBizUmid());
|
| 899 | 837 |
|
| 900 |
- // 대체문자가 성공적으로 발송되었는지 확인 (SMS 또는 MMS 성공) |
|
| 838 |
+ //2-1.카카오톡 발송 실패 + 대체문자 발송 성공 : 금액 환불 X |
|
| 901 | 839 |
boolean isAlternativeMessageSuccessful = false; |
| 902 | 840 |
if (bizLogVO != null && StringUtils.isNotEmpty(bizLogVO.getBizLogCallStatus())) {
|
| 903 | 841 |
if (SMS_SUCCESS_CODE.equals(bizLogVO.getBizLogCallStatus()) |
| 904 | 842 |
|| MMS_SUCCESS_CODE.equals(bizLogVO.getBizLogCallStatus())) {
|
| 905 | 843 |
isAlternativeMessageSuccessful = true; |
| 906 | 844 |
} |
| 845 |
+ log.info("bizLogVO.getBizLogCallStatus() :: [{}]", bizLogVO.getBizLogCallStatus());
|
|
| 846 |
+ log.info("isAlternativeMessageSuccessful :: [{}]", isAlternativeMessageSuccessful);
|
|
| 907 | 847 |
} |
| 908 | 848 |
|
| 909 |
- log.info("bizLogVO.getBizLogCallStatus() :: [{}]", bizLogVO.getBizLogCallStatus());
|
|
| 910 |
- log.info("isAlternativeMessageSuccessful :: [{}]", isAlternativeMessageSuccessful);
|
|
| 911 | 849 |
|
| 912 |
- // 대체문자 성공이면 환불 완료처리면 한다. |
|
| 913 |
- if (isAlternativeMessageSuccessful) {
|
|
| 914 |
- mjonMsgDAO.updateRefundY(kakaoVO); |
|
| 915 |
- } else {
|
|
| 916 |
- // 대체문자 발송 실패 된 경우 (친구톡 비용 환불 필요) |
|
| 917 |
- handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불"); |
|
| 918 |
- } |
|
| 850 |
+ //2-2.카카오톡 발송 실패 + 대체문자 발송 실패 : 전액 환불 |
|
| 851 |
+ if (!isAlternativeMessageSuccessful) {
|
|
| 852 |
+ handleRefund(kakaoVO, "카카오 " + kakaoVO.getMsgTypeTxt() + " 전송 실패로 인한 결제 금액 환불"); |
|
| 853 |
+ } |
|
| 919 | 854 |
} |
| 920 | 855 |
|
| 921 | 856 |
private void handleRefund(KakaoVO vo, String msg) throws Exception {
|
| 922 | 857 |
// mj_cash 테이블에 환불 내역 추가 및 회원 금액 업데이트 |
| 923 | 858 |
// eachPrice는 환불될 금액이므로 양수여야 합니다. |
| 924 |
- priceAndPoint.insertCashAndPoint( |
|
| 859 |
+ priceAndPoint.insertCashAndPointNoUpdate( |
|
| 925 | 860 |
vo.getUserId(), |
| 926 | 861 |
Float.parseFloat(vo.getEachPrice()), // 환불 금액은 양수 |
| 927 | 862 |
msg, |
| 928 | 863 |
vo.getMsgGroupId(), |
| 929 | 864 |
vo.getUserData() |
| 930 | 865 |
); |
| 931 |
- |
|
| 932 |
- // 해당 row 환불 처리 (mj_msg_data.REFUND_YN = 'Y') |
|
| 933 |
- mjonMsgDAO.updateRefundY(vo); |
|
| 934 | 866 |
} |
| 935 | 867 |
|
| 936 | 868 |
@Override |
... | ... | @@ -1033,6 +965,21 @@ |
| 1033 | 965 |
apiMsgType = StringUtils.isNotEmpty(apiMsgType) |
| 1034 | 966 |
? apiMsgType + "," + kakaoSendAdvcListVO.get(0).getMsgType() |
| 1035 | 967 |
: kakaoSendAdvcListVO.get(0).getMsgType(); |
| 968 |
+ |
|
| 969 |
+ |
|
| 970 |
+ |
|
| 971 |
+ groupedMsgList.stream().forEach(t-> log.info("t.toString() [{}]", t.toString()));
|
|
| 972 |
+ |
|
| 973 |
+// |
|
| 974 |
+// if(1==1) {
|
|
| 975 |
+// |
|
| 976 |
+// // 강제로 예외 발생 |
|
| 977 |
+// throw new RuntimeException("강제 예외 발생 테스트");
|
|
| 978 |
+// } |
|
| 979 |
+// |
|
| 980 |
+// |
|
| 981 |
+ |
|
| 982 |
+ |
|
| 1036 | 983 |
// 발송 데이터 삽입 |
| 1037 | 984 |
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList); |
| 1038 | 985 |
// int instCnt = 6; |
... | ... | @@ -1131,7 +1078,33 @@ |
| 1131 | 1078 |
|
| 1132 | 1079 |
return statusResponse; |
| 1133 | 1080 |
} |
| 1081 |
+ @Override |
|
| 1082 |
+ public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception{
|
|
| 1083 |
+ return kakaoAlimTalkDAO.selectKakaoSentRefundList(); |
|
| 1084 |
+ } |
|
| 1134 | 1085 |
|
| 1086 |
+ @Override |
|
| 1087 |
+ public void kakaoSingleRefund(KakaoVO kakaoVO) throws Exception {
|
|
| 1088 |
+ |
|
| 1089 |
+ System.out.println(kakaoVO.getMsgGroupId() +"________결과 : " +kakaoVO.getRsltCode() +" 대체문자 전송 : "+kakaoVO.getSubMsgSendYn()); |
|
| 1090 |
+ kakaoVO.setMsgTypeTxt(AT_MSG_TYPE.equals(kakaoVO.getMsgType()) ? "알림톡" : "친구톡"); |
|
| 1091 |
+ |
|
| 1092 |
+ if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {
|
|
| 1093 |
+ //1.카카오톡 발송 성공 |
|
| 1094 |
+ processKakaoSendCharge(kakaoVO); |
|
| 1095 |
+ |
|
| 1096 |
+ }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) {//카카오톡 발송 실패, 대체문자 발송 신청 O
|
|
| 1097 |
+ //2.카카오톡 발송 실패 + 대체문자 신청 O |
|
| 1098 |
+ handleAlternativeMessageScenario(kakaoVO); |
|
| 1099 |
+ |
|
| 1100 |
+ }else {
|
|
| 1101 |
+ //3.카카오톡 발송 실패 + 대체문자 신청 X : 전액 환불 |
|
| 1102 |
+ handleRefund(kakaoVO, "카카오 " + kakaoVO.getMsgTypeTxt() + " 전송 실패로 인한 결제 금액 환불"); |
|
| 1103 |
+ } |
|
| 1104 |
+ |
|
| 1105 |
+ //모든 유형 환불 완료 처리 |
|
| 1106 |
+ mjonMsgDAO.updateRefundY(kakaoVO); |
|
| 1107 |
+ } |
|
| 1135 | 1108 |
|
| 1136 | 1109 |
private void insertKakaoAtDataJsonInfo_advc(List<KakaoSendAdvcVO> kakaoSendAdvcListVO) {
|
| 1137 | 1110 |
// TODO Auto-generated method stub |
... | ... | @@ -1274,7 +1247,6 @@ |
| 1274 | 1247 |
// 비교 수행 |
| 1275 | 1248 |
return befCash.compareTo(totalEachPrice) >= 0; |
| 1276 | 1249 |
} |
| 1277 |
- |
|
| 1278 | 1250 |
|
| 1279 | 1251 |
|
| 1280 | 1252 |
|
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
... | ... | @@ -9,9 +9,11 @@ |
| 9 | 9 |
import java.util.Calendar; |
| 10 | 10 |
import java.util.Date; |
| 11 | 11 |
import java.util.HashMap; |
| 12 |
+import java.util.HashSet; |
|
| 12 | 13 |
import java.util.List; |
| 13 | 14 |
import java.util.Locale; |
| 14 | 15 |
import java.util.Map; |
| 16 |
+import java.util.Set; |
|
| 15 | 17 |
import java.util.stream.Collectors; |
| 16 | 18 |
|
| 17 | 19 |
import javax.annotation.Resource; |
... | ... | @@ -61,7 +63,6 @@ |
| 61 | 63 |
import itn.com.cmm.util.StringUtil; |
| 62 | 64 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 63 | 65 |
import itn.let.kakao.kakaoComm.KakaoReturnVO; |
| 64 |
-import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; |
|
| 65 | 66 |
import itn.let.kakao.kakaoComm.KakaoSendUtil; |
| 66 | 67 |
import itn.let.kakao.kakaoComm.KakaoVO; |
| 67 | 68 |
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave; |
... | ... | @@ -79,6 +80,9 @@ |
| 79 | 80 |
import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; |
| 80 | 81 |
import itn.let.mjo.msgholiday.service.MsgHolidayService; |
| 81 | 82 |
import itn.let.mjo.msgholiday.service.MsgHolidayVO; |
| 83 |
+import itn.let.mjo.pay.service.MjonPayService; |
|
| 84 |
+import itn.let.mjo.pay.service.MjonPayVO; |
|
| 85 |
+import itn.let.org.web.OrgChartManageController; |
|
| 82 | 86 |
import itn.let.sym.site.service.EgovSiteManagerService; |
| 83 | 87 |
import itn.let.sym.site.service.JoinSettingVO; |
| 84 | 88 |
import itn.let.uss.umt.service.EgovUserManageService; |
... | ... | @@ -101,6 +105,8 @@ |
| 101 | 105 |
*/ |
| 102 | 106 |
@Controller |
| 103 | 107 |
public class KakaoAlimTalkSendController {
|
| 108 |
+ |
|
| 109 |
+ private final OrgChartManageController orgChartManageController; |
|
| 104 | 110 |
|
| 105 | 111 |
@Resource(name = "egovMjonMsgGroupIdGnrService") |
| 106 | 112 |
private EgovIdGnrService idgenMjonMsgGroupId; |
... | ... | @@ -149,6 +155,13 @@ |
| 149 | 155 |
|
| 150 | 156 |
@Autowired |
| 151 | 157 |
private MjonCommon mjonCommon; |
| 158 |
+ |
|
| 159 |
+ @Resource(name = "mjonPayService") |
|
| 160 |
+ private MjonPayService mjonPayService; |
|
| 161 |
+ |
|
| 162 |
+ KakaoAlimTalkSendController(OrgChartManageController orgChartManageController) {
|
|
| 163 |
+ this.orgChartManageController = orgChartManageController; |
|
| 164 |
+ } |
|
| 152 | 165 |
|
| 153 | 166 |
@RequestMapping(value= {"/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do"})
|
| 154 | 167 |
public String KakaoAlimtalkMsgDataView(ModelMap model |
... | ... | @@ -1540,4 +1553,55 @@ |
| 1540 | 1553 |
|
| 1541 | 1554 |
return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp"; |
| 1542 | 1555 |
} |
| 1556 |
+ |
|
| 1557 |
+ public void kakaoRefundSingleTransaction() throws Exception{
|
|
| 1558 |
+ System.out.println("=============카카오 환불 싱글 트랜잭션 수행 =============");
|
|
| 1559 |
+ |
|
| 1560 |
+ /* 회원 money 업데이트 처리 트랜잭션 분리를 위하여 impl이 아닌 현재 위치에서 반복문 실행 */ |
|
| 1561 |
+ System.out.println("=============SchedulerUtil=====runKakaoOneTime =============>");
|
|
| 1562 |
+ List<KakaoVO> kakaoRefundList = kakaoAlimTalkService.selectKakaoSentRefundListForSingle(); |
|
| 1563 |
+ Set<String> targetIdSet = new HashSet<>(); |
|
| 1564 |
+ |
|
| 1565 |
+ for(KakaoVO kakaoVO : kakaoRefundList) {
|
|
| 1566 |
+ try {
|
|
| 1567 |
+ kakaoAlimTalkService.kakaoSingleRefund(kakaoVO); |
|
| 1568 |
+ targetIdSet.add(kakaoVO.getUserId()); |
|
| 1569 |
+ } catch (Exception e) {
|
|
| 1570 |
+ String msg = "[문자온] 환불 실패 - " + kakaoVO.getMsgId() +"("+ kakaoVO.getUserId() + ")";
|
|
| 1571 |
+ mjonCommon.sendSimpleSlackMsg(msg);; |
|
| 1572 |
+ } |
|
| 1573 |
+ } |
|
| 1574 |
+ |
|
| 1575 |
+ MjonPayVO mjonPayVO = new MjonPayVO(); |
|
| 1576 |
+ for(String userId : targetIdSet) {
|
|
| 1577 |
+ try {
|
|
| 1578 |
+ mjonPayVO.setUserId(userId); |
|
| 1579 |
+ mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 |
|
| 1580 |
+ } catch(Exception e) {
|
|
| 1581 |
+ String msg = "[문자온] 환불 후 잔액 갱신 실패 - " + userId; |
|
| 1582 |
+ mjonCommon.sendSimpleSlackMsg(msg);; |
|
| 1583 |
+ } |
|
| 1584 |
+ } |
|
| 1585 |
+ |
|
| 1586 |
+ } |
|
| 1587 |
+ |
|
| 1588 |
+ /** |
|
| 1589 |
+ * @Method Name : kakaoMsgSendRefundTestAjax |
|
| 1590 |
+ * @작성일 : 2025. 8. 6. |
|
| 1591 |
+ * @작성자 : 이지우 |
|
| 1592 |
+ * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 |
|
| 1593 |
+ */ |
|
| 1594 |
+ @RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaoMsgSendRefundTestAjax.do"})
|
|
| 1595 |
+ public ModelAndView kakaoMsgSendRefundTestAjax(ModelMap model |
|
| 1596 |
+ , HttpServletRequest request |
|
| 1597 |
+ , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
|
| 1598 |
+ |
|
| 1599 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 1600 |
+ modelAndView.setViewName("jsonView");
|
|
| 1601 |
+ |
|
| 1602 |
+ this.kakaoRefundSingleTransaction(); |
|
| 1603 |
+ |
|
| 1604 |
+ modelAndView.addObject("result", "success");
|
|
| 1605 |
+ return modelAndView; |
|
| 1606 |
+ } |
|
| 1543 | 1607 |
} |
--- src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java
... | ... | @@ -11,6 +11,7 @@ |
| 11 | 11 |
import javax.annotation.Resource; |
| 12 | 12 |
import javax.servlet.http.HttpServletRequest; |
| 13 | 13 |
|
| 14 |
+import org.apache.commons.lang3.StringUtils; |
|
| 14 | 15 |
import org.springframework.beans.factory.annotation.Autowired; |
| 15 | 16 |
import org.springframework.http.HttpStatus; |
| 16 | 17 |
import org.springframework.stereotype.Service; |
... | ... | @@ -29,8 +30,10 @@ |
| 29 | 30 |
import itn.let.mjo.mjocommon.MjonCommon; |
| 30 | 31 |
import itn.let.mjo.msg.service.MjonMsgVO; |
| 31 | 32 |
import itn.let.mjo.msg.service.impl.MjonMsgDAO; |
| 33 |
+import itn.let.mjo.msgdata.service.MjonMsgDataService; |
|
| 32 | 34 |
import itn.let.module.base.PriceAndPoint; |
| 33 | 35 |
import itn.let.uss.umt.service.EgovUserManageService; |
| 36 |
+import itn.let.uss.umt.service.UserManageVO; |
|
| 34 | 37 |
import lombok.extern.slf4j.Slf4j; |
| 35 | 38 |
|
| 36 | 39 |
@Slf4j |
... | ... | @@ -56,6 +59,9 @@ |
| 56 | 59 |
|
| 57 | 60 |
@Resource(name="kakaoAlimTalkDAO") |
| 58 | 61 |
private KakaoAlimTalkDAO kakaoAlimTalkDAO; |
| 62 |
+ |
|
| 63 |
+ @Resource(name = "MjonMsgDataService") |
|
| 64 |
+ private MjonMsgDataService mjonMsgDataService; |
|
| 59 | 65 |
|
| 60 | 66 |
@Autowired |
| 61 | 67 |
KakaoSendUtil kakaoSendUtil; |
... | ... | @@ -75,20 +81,32 @@ |
| 75 | 81 |
log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString());
|
| 76 | 82 |
|
| 77 | 83 |
|
| 84 |
+// if(1==1) {
|
|
| 85 |
+// throw new RuntimeException("강제로 발생시킨 예외");
|
|
| 86 |
+// } |
|
| 78 | 87 |
|
| 79 | 88 |
// 측정할 메소드 호출 전 시간 기록 |
| 80 | 89 |
Instant start = Instant.now(); |
| 81 | 90 |
// KakaoSendAdvcVO |
| 82 |
- |
|
| 91 |
+ |
|
| 83 | 92 |
Map<String, Object> returnMap = new HashMap<>(); |
| 93 |
+ Map<String, Object> apiReturnMap = new HashMap<>(); |
|
| 94 |
+ |
|
| 95 |
+ String userId = ""; |
|
| 96 |
+ if("A".equals(kakaoVO.getSendKind()))
|
|
| 97 |
+ {
|
|
| 98 |
+ userId = kakaoVO.getMberId(); |
|
| 99 |
+ }else {
|
|
| 100 |
+ |
|
| 101 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() |
|
| 102 |
+ ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() |
|
| 103 |
+ : null; |
|
| 104 |
+ userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 105 |
+ |
|
| 106 |
+ if (userId.equals("")) {
|
|
| 107 |
+ return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다."); |
|
| 108 |
+ } |
|
| 84 | 109 |
|
| 85 |
- LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() |
|
| 86 |
- ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() |
|
| 87 |
- : null; |
|
| 88 |
- String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 89 |
- |
|
| 90 |
- if (userId.equals("")) {
|
|
| 91 |
- return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다."); |
|
| 92 | 110 |
} |
| 93 | 111 |
|
| 94 | 112 |
kakaoVO.setUserId(userId); |
... | ... | @@ -101,7 +119,7 @@ |
| 101 | 119 |
request.getSession().invalidate(); |
| 102 | 120 |
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때 |
| 103 | 121 |
return new StatusResponse(HttpStatus.UNAUTHORIZED, |
| 104 |
- "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 친구톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); |
|
| 122 |
+ "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 친구톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.", "STAT_1070"); |
|
| 105 | 123 |
} |
| 106 | 124 |
|
| 107 | 125 |
|
... | ... | @@ -111,30 +129,34 @@ |
| 111 | 129 |
if(kakaoSendUtil.isRestrictedFriendTalkTime(kakaoSendUtil.resolveBaseDate(kakaoVO))) {
|
| 112 | 130 |
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때 |
| 113 | 131 |
return new StatusResponse(HttpStatus.BAD_REQUEST, |
| 114 |
- "친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다."); |
|
| 132 |
+ "친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다.","STAT_2080"); |
|
| 115 | 133 |
} |
| 116 | 134 |
|
| 117 | 135 |
|
| 118 | 136 |
/** @isHolidayNotified |
| 119 | 137 |
* @false : 알림 X |
| 120 | 138 |
* @true : 알림 O */ |
| 121 |
- boolean isNotified = mjonCommon.processUserAndCheckAT(kakaoVO); |
|
| 139 |
+ boolean isHolidayNotified = mjonCommon.processUserAndCheckFT(kakaoVO); |
|
| 122 | 140 |
|
| 141 |
+ |
|
| 142 |
+ UserManageVO userManageVO = mjonCommon.getUserManageInfo(userId); |
|
| 123 | 143 |
|
| 144 |
+ |
|
| 145 |
+ // 스팸관련 키워드 select |
|
| 146 |
+ List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); |
|
| 124 | 147 |
|
| 125 | 148 |
/** @카카오톡 전송 list 셋팅 -------------------------------------------*/ |
| 126 |
- List<KakaoSendAdvcVO> kakaoSendAdvcListVO = kakaoSendUtil.populateSendListsFT(kakaoVO, isNotified, statusResponse); |
|
| 149 |
+ List<KakaoSendAdvcVO> kakaoSendAdvcListVO = kakaoSendUtil.populateSendListsFT(kakaoVO, isHolidayNotified, statusResponse, userManageVO, resultSpamTxt); |
|
| 127 | 150 |
if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) {
|
| 128 | 151 |
log.error(" + populateSendLists 처리 중 오류 발생: {}", statusResponse.getMessage());
|
| 129 | 152 |
return statusResponse; |
| 130 | 153 |
} |
| 131 | 154 |
|
| 132 |
- |
|
| 133 |
- |
|
| 155 |
+ |
|
| 134 | 156 |
/** @전송금액 확인 --------------------------------------------------*/ |
| 135 | 157 |
if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
|
| 136 | 158 |
log.error("Insufficient balance for message sending.");
|
| 137 |
- return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다."); |
|
| 159 |
+ return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.", "STAT_1060"); |
|
| 138 | 160 |
} |
| 139 | 161 |
|
| 140 | 162 |
|
... | ... | @@ -152,6 +174,8 @@ |
| 152 | 174 |
// 임시 |
| 153 | 175 |
List<String> nextMsgGroupIdA = new ArrayList<>(); |
| 154 | 176 |
// 대안: entrySet() 직접 사용 |
| 177 |
+ String apiMsgGroupId = ""; |
|
| 178 |
+ String apiMsgType = ""; |
|
| 155 | 179 |
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
|
| 156 | 180 |
// entry 사용 |
| 157 | 181 |
|
... | ... | @@ -159,7 +183,15 @@ |
| 159 | 183 |
|
| 160 | 184 |
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId(); |
| 161 | 185 |
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId)); |
| 186 |
+ |
|
| 187 |
+ // api 전달 값 |
|
| 188 |
+ apiMsgGroupId = StringUtils.isNotEmpty(apiMsgGroupId) |
|
| 189 |
+ ? apiMsgGroupId + "," + nextMsgGroupId |
|
| 190 |
+ : nextMsgGroupId; |
|
| 162 | 191 |
|
| 192 |
+ apiMsgType = StringUtils.isNotEmpty(apiMsgType) |
|
| 193 |
+ ? apiMsgType + "," + kakaoSendAdvcListVO.get(0).getMsgType() |
|
| 194 |
+ : kakaoSendAdvcListVO.get(0).getMsgType(); |
|
| 163 | 195 |
|
| 164 | 196 |
// 발송 데이터 삽입 |
| 165 | 197 |
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList); |
... | ... | @@ -189,7 +221,9 @@ |
| 189 | 221 |
|
| 190 | 222 |
/** @SLACK발송 */ |
| 191 | 223 |
/** @발송조건이되면 발송 */ |
| 192 |
- if(isNotified) {
|
|
| 224 |
+ if(isHolidayNotified |
|
| 225 |
+ && ("Y".equals(userManageVO.getAtSmishingYn()) || "Y".equals(kakaoVO.getAtDelayYn()))
|
|
| 226 |
+ ) {
|
|
| 193 | 227 |
mjonCommon.getAdminKakaoAtSendSlack(sendVO); |
| 194 | 228 |
}else if("Y".equals(kakaoVO.getAtSmishingYn())){
|
| 195 | 229 |
/** @발송조건이 안되면 DB INSERT */ |
... | ... | @@ -212,6 +246,12 @@ |
| 212 | 246 |
|
| 213 | 247 |
} |
| 214 | 248 |
|
| 249 |
+ apiReturnMap.put("resultSts", instTotalCnt);
|
|
| 250 |
+ // 그룹 ID |
|
| 251 |
+ apiReturnMap.put("msgGroupId", apiMsgGroupId);
|
|
| 252 |
+ // 메세지 타입 |
|
| 253 |
+ apiReturnMap.put("msgType", apiMsgType);
|
|
| 254 |
+ |
|
| 215 | 255 |
returnMap.put("resultSts", instTotalCnt);
|
| 216 | 256 |
returnMap.put("reserYn", kakaoVO.getReserveYn());
|
| 217 | 257 |
returnMap.put("groupIds", nextMsgGroupIdA);
|
... | ... | @@ -242,6 +282,9 @@ |
| 242 | 282 |
|
| 243 | 283 |
statusResponse.setStatus(HttpStatus.OK); |
| 244 | 284 |
statusResponse.setObject(returnMap); |
| 285 |
+ apiReturnMap.put("result", HttpStatus.OK);
|
|
| 286 |
+ apiReturnMap.put("message", "전송이 완료되었습니다.");
|
|
| 287 |
+ statusResponse.setApiReturn(apiReturnMap); |
|
| 245 | 288 |
|
| 246 | 289 |
return statusResponse; |
| 247 | 290 |
} |
--- src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
... | ... | @@ -711,27 +711,6 @@ |
| 711 | 711 |
return modelAndView; |
| 712 | 712 |
} |
| 713 | 713 |
|
| 714 |
- |
|
| 715 |
- /** |
|
| 716 |
- * @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax |
|
| 717 |
- * @작성일 : 2024. 1. 18. |
|
| 718 |
- * @작성자 : 우영두 |
|
| 719 |
- * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 |
|
| 720 |
- */ |
|
| 721 |
- @RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendRefundTestAjax.do"})
|
|
| 722 |
- public ModelAndView kakaoFriendsTalkMsgSendRefundTestAjax(ModelMap model |
|
| 723 |
- , HttpServletRequest request |
|
| 724 |
- , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
|
| 725 |
- |
|
| 726 |
- ModelAndView modelAndView = new ModelAndView(); |
|
| 727 |
- modelAndView.setViewName("jsonView");
|
|
| 728 |
- |
|
| 729 |
- kakaoAlimTalkService.selectKakaoFtSentRefundList(); |
|
| 730 |
- |
|
| 731 |
- modelAndView.addObject("result", "success");
|
|
| 732 |
- return modelAndView; |
|
| 733 |
- } |
|
| 734 |
- |
|
| 735 | 714 |
/** |
| 736 | 715 |
* @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax |
| 737 | 716 |
* @작성일 : 2024. 1. 18. |
--- src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java
... | ... | @@ -199,18 +199,22 @@ |
| 199 | 199 |
modelAndView.setViewName("jsonView");
|
| 200 | 200 |
|
| 201 | 201 |
try {
|
| 202 |
- LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 203 |
- String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 204 | 202 |
|
| 205 |
- if(StringUtils.isEmpty(userId)) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
|
|
| 206 |
- return ResponseEntity.ok( |
|
| 207 |
- new StatusResponse(HttpStatus.UNAUTHORIZED |
|
| 208 |
- , "로그인을 하셔야 이용 가능합니다." |
|
| 209 |
- , LocalDateTime.now() |
|
| 210 |
- ) |
|
| 211 |
- ); |
|
| 203 |
+ if(!"A".equals(kakaoVO.getSendKind())) {
|
|
| 204 |
+ |
|
| 205 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 206 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 207 |
+ |
|
| 208 |
+ if(StringUtils.isEmpty(userId)) {
|
|
| 209 |
+ return ResponseEntity.ok( |
|
| 210 |
+ new StatusResponse(HttpStatus.UNAUTHORIZED |
|
| 211 |
+ , "로그인을 하셔야 이용 가능합니다." |
|
| 212 |
+ , LocalDateTime.now() |
|
| 213 |
+ ) |
|
| 214 |
+ ); |
|
| 215 |
+ } |
|
| 216 |
+ |
|
| 212 | 217 |
} |
| 213 |
- |
|
| 214 | 218 |
|
| 215 | 219 |
|
| 216 | 220 |
final Map<String, MultipartFile> files = multiRequest.getFileMap(); |
--- src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
+++ src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
... | ... | @@ -272,6 +272,25 @@ |
| 272 | 272 |
|
| 273 | 273 |
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
| 274 | 274 |
|
| 275 |
+ if(StringUtils.isNotEmpty( mjonKakaoATResultVO.getFilePath1() )) {
|
|
| 276 |
+ List<FileInfoVO> fileInfos = new ArrayList<>(); |
|
| 277 |
+ |
|
| 278 |
+ |
|
| 279 |
+ // 확장자 제외한 파일명 |
|
| 280 |
+ String fileId = FilenameUtils.getBaseName(mjonKakaoATResultVO.getFilePath1()); |
|
| 281 |
+ |
|
| 282 |
+ // 파일 정보 조회 |
|
| 283 |
+ MjonMsgSentVO info = mjonMsgSentDAO.selectFileInfo(fileId); |
|
| 284 |
+ |
|
| 285 |
+ // FileInfo 객체 생성 및 추가 |
|
| 286 |
+ FileInfoVO fileInfo = new FileInfoVO(); |
|
| 287 |
+ fileInfo.setAtchFileId(info.getAtchFileId()); |
|
| 288 |
+ fileInfo.setFileSn(info.getFileSn()); |
|
| 289 |
+ |
|
| 290 |
+ fileInfos.add(fileInfo); |
|
| 291 |
+ model.addAttribute("fileInfos", fileInfos);
|
|
| 292 |
+ } |
|
| 293 |
+ |
|
| 275 | 294 |
}else {
|
| 276 | 295 |
|
| 277 | 296 |
model.addAttribute("kakaoTemplateInfo", "");
|
... | ... | @@ -1109,6 +1128,6 @@ |
| 1109 | 1128 |
e.printStackTrace(); |
| 1110 | 1129 |
// TODO: handle exception |
| 1111 | 1130 |
} |
| 1112 |
- return "web/kakao/sent/KakaoSentDetailPopAjax"; |
|
| 1131 |
+ return "web/kakao/sent/KakaoSentDetailPhoneAjax"; |
|
| 1113 | 1132 |
} |
| 1114 | 1133 |
} |
--- src/main/java/itn/let/kakao/user/stepInfo/web/KakaoStepInfoController.java
+++ src/main/java/itn/let/kakao/user/stepInfo/web/KakaoStepInfoController.java
... | ... | @@ -188,6 +188,29 @@ |
| 188 | 188 |
return "/web/kakao/intrd/KakaoAllimtalkIntro"; |
| 189 | 189 |
} |
| 190 | 190 |
|
| 191 |
+ /** |
|
| 192 |
+ * @Method Name : kakaotalkIntrdView |
|
| 193 |
+ * @Project : mjon |
|
| 194 |
+ * @Date : 2025. 8. 21 |
|
| 195 |
+ * @작성자 : 원영현 |
|
| 196 |
+ |
|
| 197 |
+ * @프로그램 설명 :카카오 알림톡, 친구토 통합 소개페이지 |
|
| 198 |
+ */ |
|
| 199 |
+ @RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaotalkIntrdView.do"})
|
|
| 200 |
+ public String kakaotalkIntrdView(HttpServletRequest request, |
|
| 201 |
+ @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO ,
|
|
| 202 |
+ RedirectAttributes redirectAttributes) throws Exception {
|
|
| 203 |
+ |
|
| 204 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 205 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 206 |
+ if(userId == "") {
|
|
| 207 |
+ return "redirect:/web/user/login/login.do"; |
|
| 208 |
+ } |
|
| 209 |
+ model.addAttribute("loginVO", loginVO);
|
|
| 210 |
+ |
|
| 211 |
+ return "/web/kakao/intrd/KakaotalkIntro"; |
|
| 212 |
+ } |
|
| 213 |
+ |
|
| 191 | 214 |
|
| 192 | 215 |
/** |
| 193 | 216 |
* XSS 방지 처리. |
--- src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
+++ src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
... | ... | @@ -533,12 +533,12 @@ |
| 533 | 533 |
UserManageVO userManageVO = getUserManageInfo(kakaoVO.getUserId()); |
| 534 | 534 |
|
| 535 | 535 |
// 기본값 처리된 사용자 정보와 문자 상태 |
| 536 |
- String adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); |
|
| 537 |
- String atSmishingYn = userManageVO.getAtSmishingYn(); |
|
| 536 |
+ String adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); // 법인폰 알람 여부 - Y : ON |
|
| 537 |
+ String atSmishingYn = userManageVO.getAtSmishingYn(); // 스미싱 의심 - Y : ON |
|
| 538 | 538 |
|
| 539 | 539 |
// 조건 체크 |
| 540 | 540 |
if ("Y".equals(adminSmsNoticeYn) || "Y".equals(atSmishingYn)) {
|
| 541 |
- kakaoVO.setAtSmishingYn("Y"); // MjonMsgVO에 스미싱 정보 설정
|
|
| 541 |
+ kakaoVO.setAtSmishingYn("Y"); // MjonMsgVO에 스미싱 정보 설정 - Y면 디
|
|
| 542 | 542 |
|
| 543 | 543 |
// 스미싱 알림 처리 |
| 544 | 544 |
return handleSmishingAlert(); // 알림 처리 결과 반환 |
... | ... | @@ -546,6 +546,46 @@ |
| 546 | 546 |
|
| 547 | 547 |
return false; // 알림 처리되지 않음 |
| 548 | 548 |
} |
| 549 |
+ |
|
| 550 |
+ |
|
| 551 |
+ /** |
|
| 552 |
+ * @methodName : processUserAndCheckFT |
|
| 553 |
+ * @author : 이호영 |
|
| 554 |
+ * @date : 2025. 8. 21. |
|
| 555 |
+ * @description : |
|
| 556 |
+ * @return : boolean |
|
| 557 |
+ * @param kakaoVO |
|
| 558 |
+ * @return |
|
| 559 |
+ * @throws Exception |
|
| 560 |
+ * |
|
| 561 |
+ * @isHolidayNotified |
|
| 562 |
+ * @false : 알림 X |
|
| 563 |
+ * @true : 알림 O |
|
| 564 |
+ * |
|
| 565 |
+ */ |
|
| 566 |
+ public boolean processUserAndCheckFT(KakaoVO kakaoVO) throws Exception {
|
|
| 567 |
+// UserManageVO userManageVO = getUserManageInfo(kakaoVO.getUserId()); |
|
| 568 |
+// kakaoVO.setAtSmishingYn("N"); // MjonMsgVO에 스미싱 정보 설정 - Y면 딜레이 처리 됨
|
|
| 569 |
+ |
|
| 570 |
+ |
|
| 571 |
+ // 기본값 처리된 사용자 정보와 문자 상태 |
|
| 572 |
+// String adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); // 법인폰 알람 여부 - Y : ON |
|
| 573 |
+// String atSmishingYn = userManageVO.getAtSmishingYn(); // 스미싱 의심 - Y : ON !== mj_msg_group_data와 다른거임 |
|
| 574 |
+ |
|
| 575 |
+ // 조건 체크 |
|
| 576 |
+// if ("Y".equals(adminSmsNoticeYn) || "Y".equals(atSmishingYn)) {
|
|
| 577 |
+// if ("Y".equals(atSmishingYn)) {
|
|
| 578 |
+// Boolean B_return = handleSmishingAlert(); |
|
| 579 |
+// if(B_return) { // true면 알림ON이라서 스미싱Yn을 Y로 설정 아니면 N / 나머지는 로직에서 처리
|
|
| 580 |
+// kakaoVO.setAtSmishingYn(atSmishingYn); // MjonMsgVO에 스미싱 정보 설정 - Y면 딜레이 처리 됨 |
|
| 581 |
+// } |
|
| 582 |
+ // 스미싱 알림 처리 |
|
| 583 |
+// return B_return; // 알림 처리 결과 반환 |
|
| 584 |
+// } |
|
| 585 |
+ |
|
| 586 |
+ return handleSmishingAlert(); // 알림 처리되지 않음 |
|
| 587 |
+ } |
|
| 588 |
+ |
|
| 549 | 589 |
|
| 550 | 590 |
// 사용자 정보 조회 및 기본값 처리 |
| 551 | 591 |
public UserManageVO getUserManageInfo(String userId) throws Exception {
|
--- src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
+++ src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
... | ... | @@ -95,6 +95,7 @@ |
| 95 | 95 |
private String reserveYn ; //예약문자 여부 |
| 96 | 96 |
private String reserveCYn ; //예약문자 취소 여부 |
| 97 | 97 |
private String cancelDate; //예약 취소 일자 |
| 98 |
+ private String msgResult; //문자 발송결과 10:성공 20:실패 30:대체문자 대기 40:대체문자 성공 50:대체문자 실패 |
|
| 98 | 99 |
|
| 99 | 100 |
|
| 100 | 101 |
private String sendRate; // 전송 배분률 |
... | ... | @@ -318,5 +319,8 @@ |
| 318 | 319 |
private String detailType; |
| 319 | 320 |
|
| 320 | 321 |
private List<MjonMsgSendVO> mjonMsgSendVOList = new ArrayList<>(); |
| 322 |
+ |
|
| 323 |
+ private String cmId; //다우기술 cmId |
|
| 324 |
+ |
|
| 321 | 325 |
|
| 322 | 326 |
} |
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
... | ... | @@ -463,6 +463,23 @@ |
| 463 | 463 |
} |
| 464 | 464 |
|
| 465 | 465 |
|
| 466 |
+ //대체문자 대기 목록 조회 |
|
| 467 |
+ @SuppressWarnings("unchecked")
|
|
| 468 |
+ public List<MjonMsgVO> selectBizResendLogList()throws Exception{
|
|
| 469 |
+ |
|
| 470 |
+ return (List<MjonMsgVO>) list("mjonMsgDataDAO.selectBizResendLogList");
|
|
| 471 |
+ } |
|
| 472 |
+ //대체문자 결과 반영 |
|
| 473 |
+ public int updateResendResult(MjonMsgVO mjonMsgVO)throws Exception{
|
|
| 474 |
+ |
|
| 475 |
+ return update("mjonMsgDataDAO.updateResendResult", mjonMsgVO);
|
|
| 476 |
+ } |
|
| 477 |
+ //대체문자 로그 삭제 |
|
| 478 |
+ public int deleteBizResendLog(MjonMsgVO mjonMsgVO)throws Exception{
|
|
| 479 |
+ |
|
| 480 |
+ return delete("mjonMsgDataDAO.deleteBizResendLog", mjonMsgVO);
|
|
| 481 |
+ } |
|
| 482 |
+ |
|
| 466 | 483 |
|
| 467 | 484 |
public Timestamp convertToTimestamp(String reqDate) {
|
| 468 | 485 |
try {
|
--- src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
+++ src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
... | ... | @@ -6543,5 +6543,4 @@ |
| 6543 | 6543 |
|
| 6544 | 6544 |
return "web/msgdata/MsgSentListAjax"; |
| 6545 | 6545 |
} |
| 6546 |
- |
|
| 6547 | 6546 |
} |
--- src/main/java/itn/let/mjo/pay/web/MjonPayController.java
+++ src/main/java/itn/let/mjo/pay/web/MjonPayController.java
... | ... | @@ -4901,10 +4901,11 @@ |
| 4901 | 4901 |
model.addAttribute("endDate", endDate);
|
| 4902 | 4902 |
|
| 4903 | 4903 |
DecimalFormat decFormat = new DecimalFormat("###,###");
|
| 4904 |
+ DecimalFormat decFormatFloat = new DecimalFormat("###,###.#");
|
|
| 4904 | 4905 |
model.addAttribute("sendSumCount", decFormat.format(sendSumCount));
|
| 4905 | 4906 |
model.addAttribute("supplySumPrice", decFormat.format(supplySumPrice));
|
| 4906 | 4907 |
model.addAttribute("vatSumPrice", decFormat.format(vatSumPrice));
|
| 4907 |
- model.addAttribute("totalSumPrice", decFormat.format(totalSumPrice));
|
|
| 4908 |
+ model.addAttribute("totalSumPrice", decFormatFloat.format(totalSumPrice));
|
|
| 4908 | 4909 |
model.addAttribute("resultList", payUserSumList);
|
| 4909 | 4910 |
|
| 4910 | 4911 |
// 수신자 정보 |
--- src/main/java/itn/let/module/base/PriceAndPoint.java
+++ src/main/java/itn/let/module/base/PriceAndPoint.java
... | ... | @@ -213,6 +213,36 @@ |
| 213 | 213 |
kakaoAlimTalkDAO.insertKakaoSendPrice(kakaoVO); |
| 214 | 214 |
|
| 215 | 215 |
} |
| 216 |
- |
|
| 216 |
+ |
|
| 217 |
+ /** |
|
| 218 |
+ * @methodName : insertCashAndPoint |
|
| 219 |
+ * @author : 이지우 |
|
| 220 |
+ * @date : 2025. 8. 14. |
|
| 221 |
+ * @description : insertCashAndPoint 에서 updateMemberCash 제외 |
|
| 222 |
+ * @return : void |
|
| 223 |
+ * @param userId |
|
| 224 |
+ * @param totPrice |
|
| 225 |
+ * @param memo |
|
| 226 |
+ * @param msgGroupId |
|
| 227 |
+ * @param userData |
|
| 228 |
+ * @throws Exception |
|
| 229 |
+ * |
|
| 230 |
+ */ |
|
| 231 |
+ public void insertCashAndPointNoUpdate( |
|
| 232 |
+ String userId |
|
| 233 |
+ , float totPrice |
|
| 234 |
+ , String memo |
|
| 235 |
+ , String msgGroupId |
|
| 236 |
+ , String userData |
|
| 237 |
+ ) throws Exception {
|
|
| 238 |
+ |
|
| 239 |
+ MjonPayVO mjonPayVO = buildPayVO(userId, totPrice, memo, msgGroupId); |
|
| 240 |
+ |
|
| 241 |
+// 환불로 인해 userData가 추후 사용될 경우 여기에 처리 |
|
| 242 |
+ if (StringUtils.isNotEmpty(userData)) { mjonPayVO.setOrderId(userData); }
|
|
| 243 |
+ |
|
| 244 |
+ mjonPayDAO.insertCash(mjonPayVO); //캐시 |
|
| 245 |
+ |
|
| 246 |
+ } |
|
| 217 | 247 |
|
| 218 | 248 |
}(No newline at end of file) |
--- src/main/java/itn/let/schdlr/service/SchdlrManageService.java
+++ src/main/java/itn/let/schdlr/service/SchdlrManageService.java
... | ... | @@ -47,11 +47,11 @@ |
| 47 | 47 |
//전용계좌 자동 충전 배치 |
| 48 | 48 |
public void vacsAutoCharge() throws Exception; |
| 49 | 49 |
|
| 50 |
- //문자온 카카오톡 실패 건수 환불 배치 |
|
| 51 |
- public void kakaoFailPayBack() throws Exception; |
|
| 52 |
- |
|
| 53 | 50 |
//문자온 문자전송 실패 건수 환불 배치 |
| 54 | 51 |
public void payBack(String type, int limitCout) throws Exception; |
| 55 | 52 |
|
| 56 | 53 |
public void payBack_advc(String p_type) throws Exception; |
| 54 |
+ |
|
| 55 |
+ //대체문자 결과 반영 배치 |
|
| 56 |
+ public void updateKakaoResendResult() throws Exception; |
|
| 57 | 57 |
} |
--- src/main/java/itn/let/schdlr/service/SchedulerUtil.java
+++ src/main/java/itn/let/schdlr/service/SchedulerUtil.java
... | ... | @@ -2,7 +2,9 @@ |
| 2 | 2 |
|
| 3 | 3 |
import java.text.SimpleDateFormat; |
| 4 | 4 |
import java.util.Date; |
| 5 |
+import java.util.HashSet; |
|
| 5 | 6 |
import java.util.List; |
| 7 |
+import java.util.Set; |
|
| 6 | 8 |
|
| 7 | 9 |
import javax.annotation.Resource; |
| 8 | 10 |
import javax.sql.DataSource; |
... | ... | @@ -24,12 +26,16 @@ |
| 24 | 26 |
import itn.let.fax.admin.service.FaxStatVO; |
| 25 | 27 |
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoAtStatVO; |
| 26 | 28 |
import itn.let.kakao.admin.statistics.service.KakaoStatisticsService; |
| 29 |
+import itn.let.kakao.kakaoComm.KakaoVO; |
|
| 30 |
+import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; |
|
| 27 | 31 |
import itn.let.lett.service.LetterService; |
| 28 | 32 |
import itn.let.mail.service.MailTemplateService; |
| 33 |
+import itn.let.mjo.mjocommon.MjonCommon; |
|
| 29 | 34 |
import itn.let.mjo.msg.service.MjonMsgService; |
| 30 | 35 |
import itn.let.mjo.msg.service.MjonMsgStatVO; |
| 31 |
-import itn.let.mjo.msg.service.MjonMsgVO; |
|
| 32 | 36 |
import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; |
| 37 |
+import itn.let.mjo.pay.service.MjonPayService; |
|
| 38 |
+import itn.let.mjo.pay.service.MjonPayVO; |
|
| 33 | 39 |
import itn.let.sts.com.StatsVO; |
| 34 | 40 |
import itn.let.sts.cst.service.EgovConectStatsService; |
| 35 | 41 |
import itn.let.uss.umt.service.EgovUserManageService; |
... | ... | @@ -81,6 +87,15 @@ |
| 81 | 87 |
|
| 82 | 88 |
@Resource(name="MjonMsgDataDAO") |
| 83 | 89 |
private MjonMsgDataDAO mjonMsgDataDAO; |
| 90 |
+ |
|
| 91 |
+ @Resource(name="kakaoAlimTalkService") |
|
| 92 |
+ private KakaoAlimTalkService kakaoAlimTalkService; |
|
| 93 |
+ |
|
| 94 |
+ @Resource(name="MjonCommon") |
|
| 95 |
+ private MjonCommon mjonCommon; |
|
| 96 |
+ |
|
| 97 |
+ @Resource(name = "mjonPayService") |
|
| 98 |
+ private MjonPayService mjonPayService; |
|
| 84 | 99 |
|
| 85 | 100 |
/** 설정값 가져오기 */ |
| 86 | 101 |
@Value("#{globalSettings['Globals.Env']}")
|
... | ... | @@ -470,13 +485,46 @@ |
| 470 | 485 |
@SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) |
| 471 | 486 |
public void runKakaoOneTime() throws Exception {
|
| 472 | 487 |
|
| 473 |
- // do something... |
|
| 474 |
- try {
|
|
| 488 |
+ /* 회원 money 업데이트 처리 트랜잭션 분리를 위하여 impl이 아닌 현재 위치에서 반복문 실행 */ |
|
| 475 | 489 |
System.out.println("=============SchedulerUtil=====runKakaoOneTime =============>");
|
| 476 |
- schdlrManageService.kakaoFailPayBack(); |
|
| 490 |
+ List<KakaoVO> kakaoRefundList = kakaoAlimTalkService.selectKakaoSentRefundListForSingle(); |
|
| 491 |
+ Set<String> targetIdSet = new HashSet<>(); |
|
| 492 |
+ |
|
| 493 |
+ for(KakaoVO kakaoVO : kakaoRefundList) {
|
|
| 494 |
+ try {
|
|
| 495 |
+ kakaoAlimTalkService.kakaoSingleRefund(kakaoVO); |
|
| 496 |
+ targetIdSet.add(kakaoVO.getUserId()); |
|
| 497 |
+ } catch (Exception e) {
|
|
| 498 |
+ String msg = "[문자온] 환불 실패 - " + kakaoVO.getMsgId() +"("+ kakaoVO.getUserId() + ")";
|
|
| 499 |
+ mjonCommon.sendSimpleSlackMsg(msg);; |
|
| 500 |
+ } |
|
| 501 |
+ } |
|
| 502 |
+ |
|
| 503 |
+ MjonPayVO mjonPayVO = new MjonPayVO(); |
|
| 504 |
+ for(String userId : targetIdSet) {
|
|
| 505 |
+ try {
|
|
| 506 |
+ mjonPayVO.setUserId(userId); |
|
| 507 |
+ mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 |
|
| 508 |
+ } catch(Exception e) {
|
|
| 509 |
+ String msg = "[문자온] 환불 후 잔액 갱신 실패 - " + userId; |
|
| 510 |
+ mjonCommon.sendSimpleSlackMsg(msg);; |
|
| 511 |
+ } |
|
| 512 |
+ } |
|
| 513 |
+ |
|
| 514 |
+ } |
|
| 515 |
+ |
|
| 516 |
+ //대체문자 결과 반영 |
|
| 517 |
+ @Scheduled(cron = "0 0/2 * * * ?") // 2분마다 실행 |
|
| 518 |
+ @SchedulerLock(name = "updateKakaoResendResult", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) |
|
| 519 |
+ public void runUpdateKakaoResendResult() throws Exception {
|
|
| 520 |
+ |
|
| 521 |
+ try {
|
|
| 522 |
+ System.out.println("=============SchedulerUtil=====runUpdateKakaoResendResult =============>");
|
|
| 523 |
+ schdlrManageService.updateKakaoResendResult(); |
|
| 477 | 524 |
}catch(Exception ex) {
|
| 478 | 525 |
ex.printStackTrace(); |
| 479 | 526 |
} |
| 527 |
+ |
|
| 480 | 528 |
} |
| 481 | 529 |
|
| 482 | 530 |
//환불 실행 |
--- src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
+++ src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
... | ... | @@ -393,12 +393,12 @@ |
| 393 | 393 |
|
| 394 | 394 |
// 대상 : 휴대폰결제, 즉시이체, 전용계좌 |
| 395 | 395 |
// Step 1. 스미싱의심 지정 여부 |
| 396 |
- JoinSettingVO joinSettingVO = new JoinSettingVO(); |
|
| 397 |
- joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); |
|
| 396 |
+// JoinSettingVO joinSettingVO = new JoinSettingVO(); |
|
| 397 |
+ JoinSettingVO joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); |
|
| 398 | 398 |
if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) {
|
| 399 | 399 |
// Step 1. 개인회원 여부 체크 |
| 400 |
- int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); |
|
| 401 |
- if (isPersnalMemberCnt == 1) {
|
|
| 400 |
+// int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); |
|
| 401 |
+// if (isPersnalMemberCnt == 1) {
|
|
| 402 | 402 |
// Step 2. 첫결제 여부 체크 |
| 403 | 403 |
int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid); |
| 404 | 404 |
if (isFirstPayCnt == 1) {
|
... | ... | @@ -418,10 +418,11 @@ |
| 418 | 418 |
// 스미싱 의심회원으로 변경 |
| 419 | 419 |
UserManageVO userManageVO = new UserManageVO(); |
| 420 | 420 |
userManageVO.setSmishingYn("Y");
|
| 421 |
+ userManageVO.setAtSmishingYn("Y");
|
|
| 421 | 422 |
userManageVO.setMberId(Userid); |
| 422 | 423 |
userManageService.updateOneUserSmishingYnNotAlert(userManageVO); |
| 423 | 424 |
} |
| 424 |
- } |
|
| 425 |
+// } |
|
| 425 | 426 |
} |
| 426 | 427 |
|
| 427 | 428 |
} catch (Exception e) {
|
... | ... | @@ -434,17 +435,6 @@ |
| 434 | 435 |
} |
| 435 | 436 |
|
| 436 | 437 |
} |
| 437 |
- |
|
| 438 |
- } |
|
| 439 |
- |
|
| 440 |
- // 카카오 환불 처리 리스트 |
|
| 441 |
- public void kakaoFailPayBack() throws Exception {
|
|
| 442 |
- |
|
| 443 |
- // 카카오 알림톡 환불 처리 |
|
| 444 |
- kakaoAlimTalkService.selectKakaoAtSentRefundList(); |
|
| 445 |
- |
|
| 446 |
- // 카카오 친구톡 환불 처리 |
|
| 447 |
- kakaoAlimTalkService.selectKakaoFtSentRefundList(); |
|
| 448 | 438 |
|
| 449 | 439 |
} |
| 450 | 440 |
|
... | ... | @@ -566,4 +556,37 @@ |
| 566 | 556 |
|
| 567 | 557 |
return msgFailList; |
| 568 | 558 |
} |
| 559 |
+ |
|
| 560 |
+ |
|
| 561 |
+ /** |
|
| 562 |
+ * @methodName : updateKakaoResendResult |
|
| 563 |
+ * @author : 이지우 |
|
| 564 |
+ * @date : 2025.07.15 |
|
| 565 |
+ * @description : 대체문자 결과 반영 |
|
| 566 |
+ * @param p_type |
|
| 567 |
+ * @param request |
|
| 568 |
+ * @param model |
|
| 569 |
+ * @return |
|
| 570 |
+ * @throws Exception |
|
| 571 |
+ */ |
|
| 572 |
+ @Override |
|
| 573 |
+ public void updateKakaoResendResult() throws Exception {
|
|
| 574 |
+ long startTime = System.currentTimeMillis(); |
|
| 575 |
+ // 대체문자 대상 조회 |
|
| 576 |
+ List<MjonMsgVO> resendLogList = mjonMsgDataDAO.selectBizResendLogList(); |
|
| 577 |
+ for(MjonMsgVO vo : resendLogList) {
|
|
| 578 |
+ if("4100".equals(vo.getResultCode())
|
|
| 579 |
+ || "6600".equals(vo.getResultCode()) |
|
| 580 |
+ || "7000".equals(vo.getResultCode())) {
|
|
| 581 |
+ vo.setMsgResult("40");
|
|
| 582 |
+ }else {
|
|
| 583 |
+ vo.setMsgResult("50");
|
|
| 584 |
+ } |
|
| 585 |
+ mjonMsgDataDAO.updateResendResult(vo); |
|
| 586 |
+ mjonMsgDataDAO.deleteBizResendLog(vo); |
|
| 587 |
+ } |
|
| 588 |
+ long endTime = System.currentTimeMillis(); |
|
| 589 |
+ long elapsedTime = (endTime - startTime) / 1000; // 초 단위 변환 |
|
| 590 |
+ System.out.println("updateKakaoResendResult 실행 시간: " + elapsedTime + "초 (" + resendLogList.size() + "건 처리)");
|
|
| 591 |
+ } |
|
| 569 | 592 |
} |
--- src/main/resources/egovframework/egovProps/globals_dev.properties
+++ src/main/resources/egovframework/egovProps/globals_dev.properties
... | ... | @@ -28,7 +28,7 @@ |
| 28 | 28 |
|
| 29 | 29 |
# mysql |
| 30 | 30 |
Globals.DriverClassName=com.mysql.jdbc.Driver |
| 31 |
-Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon_advc |
|
| 31 |
+Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon_advc |
|
| 32 | 32 |
#Globals.Url=jdbc:mysql://139.150.73.12:3306/mjon |
| 33 | 33 |
Globals.UserName= mjonUr |
| 34 | 34 |
Globals.Password= mjon!@#$ |
--- src/main/resources/egovframework/egovProps/globals_local.properties
+++ src/main/resources/egovframework/egovProps/globals_local.properties
... | ... | @@ -28,7 +28,7 @@ |
| 28 | 28 |
|
| 29 | 29 |
# mysql |
| 30 | 30 |
Globals.DriverClassName=com.mysql.jdbc.Driver |
| 31 |
-Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon_advc |
|
| 31 |
+Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon_advc |
|
| 32 | 32 |
#Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon |
| 33 | 33 |
Globals.UserName= mjonUr |
| 34 | 34 |
Globals.Password= mjon!@#$ |
--- 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
... | ... | @@ -207,36 +207,11 @@ |
| 207 | 207 |
) |
| 208 | 208 |
</insert> |
| 209 | 209 |
|
| 210 |
- <select id="kakaoAlimTalkDAO.selectKakaoAtSentRefundList" resultClass="kakaoVO"> |
|
| 210 |
+ <select id="kakaoAlimTalkDAO.selectKakaoSentRefundList" resultClass="kakaoVO"> |
|
| 211 | 211 |
SELECT |
| 212 | 212 |
MMD.USER_ID AS userId |
| 213 | 213 |
, MMD.MSG_GROUP_ID AS msgGroupId |
| 214 |
- , MMD.MSG_SEQ AS msgSeq |
|
| 215 |
- , MMD.USERDATA AS userData |
|
| 216 |
- , MMD.REFUND_YN AS refundYn |
|
| 217 |
- , MMD.RSLT_CODE AS rsltCode |
|
| 218 |
- , MMD.RSLT_CODE2 AS rsltCode2 |
|
| 219 |
- , MMD.AGENT_CODE AS agentCode |
|
| 220 |
- , DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T') AS sentDate |
|
| 221 |
- , DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate |
|
| 222 |
- , MMD.BIZ_KAKAO_RESEND_YN AS subMsgSendYn |
|
| 223 |
- , MMD.BIZ_KAKAO_RESEND_TYPE AS subMsgType |
|
| 224 |
- |
|
| 225 |
- FROM |
|
| 226 |
- MJ_MSG_DATA MMD |
|
| 227 |
- INNER JOIN LETTNGNRLMBER MB |
|
| 228 |
- ON MMD.USER_ID = MB.MBER_ID |
|
| 229 |
- WHERE 1=1 |
|
| 230 |
- AND MMD.CUR_STATE = '3' |
|
| 231 |
- AND MMD.REFUND_YN = 'N' |
|
| 232 |
- AND MMD.RESERVE_C_YN = 'N' |
|
| 233 |
- AND MMD.MSG_TYPE = 8 |
|
| 234 |
- </select> |
|
| 235 |
- |
|
| 236 |
- <select id="kakaoAlimTalkDAO.selectKakaoFtSentRefundList" resultClass="kakaoVO"> |
|
| 237 |
- SELECT |
|
| 238 |
- MMD.USER_ID AS userId |
|
| 239 |
- , MMD.MSG_GROUP_ID AS msgGroupId |
|
| 214 |
+ , MMD.MSG_ID AS msgId |
|
| 240 | 215 |
, MMD.MSG_SEQ AS msgSeq |
| 241 | 216 |
, MMGD.BIZ_KAKAO_IMAGE_TYPE AS bizKakaoImageType |
| 242 | 217 |
, MMGD.EACH_PRICE AS eachPrice |
... | ... | @@ -251,6 +226,7 @@ |
| 251 | 226 |
, MMD.BIZ_KAKAO_RESEND_TYPE AS subMsgType |
| 252 | 227 |
, MMD.FILE_CNT AS fileCnt |
| 253 | 228 |
, MMD.BIZ_UMID AS bizUmid |
| 229 |
+ , MMD.MSG_TYPE AS msgType |
|
| 254 | 230 |
FROM |
| 255 | 231 |
MJ_MSG_DATA MMD |
| 256 | 232 |
INNER JOIN LETTNGNRLMBER MB |
... | ... | @@ -261,7 +237,8 @@ |
| 261 | 237 |
AND MMD.CUR_STATE = '3' |
| 262 | 238 |
AND MMD.REFUND_YN = 'N' |
| 263 | 239 |
AND MMD.RESERVE_C_YN = 'N' |
| 264 |
- AND MMD.MSG_TYPE = 9 |
|
| 240 |
+ AND MMD.MSG_TYPE IN(8, 9) |
|
| 241 |
+ ORDER BY MMD.USER_ID ASC |
|
| 265 | 242 |
</select> |
| 266 | 243 |
|
| 267 | 244 |
<select id="kakaoAlimTalkDAO.selectKakaoAtUmid" resultClass="kakaoVO" parameterClass="kakaoVO"> |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
... | ... | @@ -3607,9 +3607,9 @@ |
| 3607 | 3607 |
, SUM(IF(M.msgTypeName = '알림톡', 1, 0)) AS atSendCount |
| 3608 | 3608 |
, SUM(IF(M.msgTypeName = '친구톡', 1, 0)) AS ftSendCount |
| 3609 | 3609 |
<!-- , SUM(M.MSG_GROUP_CNT) AS sendCount --> |
| 3610 |
- , ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 0), 0) AS supplyPrice |
|
| 3610 |
+ , ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 1), 0) AS supplyPrice |
|
| 3611 | 3611 |
, 0 AS vatPrice |
| 3612 |
- , ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 0), 0) AS totalPrice |
|
| 3612 |
+ , ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 1), 0) AS totalPrice |
|
| 3613 | 3613 |
, M.MSG_TYPE |
| 3614 | 3614 |
FROM ( |
| 3615 | 3615 |
SELECT |
... | ... | @@ -3647,8 +3647,6 @@ |
| 3647 | 3647 |
AND A.MSG_GROUP_ID = B.MSG_GROUP_ID |
| 3648 | 3648 |
AND A.USER_ID = #userId# |
| 3649 | 3649 |
AND B.USER_ID = #userId# |
| 3650 |
- AND B.DEL_FLAG = 'N' |
|
| 3651 |
- AND IFNULL(B.DEL_FLAG,'N') = 'N' |
|
| 3652 | 3650 |
AND B.RESERVE_C_YN = 'N' |
| 3653 | 3651 |
|
| 3654 | 3652 |
<isNotEmpty property="startDate"> |
... | ... | @@ -3676,6 +3674,9 @@ |
| 3676 | 3674 |
<isEqual property="pageType" compareValue="at"> |
| 3677 | 3675 |
AND B.MSG_TYPE = '8' |
| 3678 | 3676 |
</isEqual> |
| 3677 |
+ <isEqual property="pageType" compareValue="ft"> |
|
| 3678 |
+ AND B.MSG_TYPE = '9' |
|
| 3679 |
+ </isEqual> |
|
| 3679 | 3680 |
</isNotEmpty> |
| 3680 | 3681 |
) M |
| 3681 | 3682 |
WHERE 1=1 |
... | ... | @@ -3691,9 +3692,9 @@ |
| 3691 | 3692 |
, IFNULL(MIN(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )), 0) AS minRegDate |
| 3692 | 3693 |
, M.msgTypeName |
| 3693 | 3694 |
, IFNULL(SUM(SentEA), 0) AS ftSendCount |
| 3694 |
- , ifnull(TRUNCATE(SUM(supplyPrice) , 0), 0) AS supplyPrice |
|
| 3695 |
+ , ifnull(TRUNCATE(SUM(supplyPrice) , 1), 0) AS supplyPrice |
|
| 3695 | 3696 |
, 0 AS vatPrice |
| 3696 |
- , ifnull(TRUNCATE(SUM(M.TOT_PRICE) , 0), 0) AS totalPrice |
|
| 3697 |
+ , ifnull(TRUNCATE(SUM(M.TOT_PRICE) , 1), 0) AS totalPrice |
|
| 3697 | 3698 |
FROM ( |
| 3698 | 3699 |
SELECT pf.ReqDate AS REGDATE |
| 3699 | 3700 |
, pf.ReqDate AS REQ_DATE |
... | ... | @@ -8265,5 +8266,35 @@ |
| 8265 | 8266 |
|
| 8266 | 8267 |
</update> |
| 8267 | 8268 |
|
| 8269 |
+ <select id="mjonMsgDataDAO.selectBizResendLogList" resultClass="mjonMsgVO"> |
|
| 8270 |
+ |
|
| 8271 |
+ SELECT |
|
| 8272 |
+ BRLA.CMID AS cmId, |
|
| 8273 |
+ BRLA.CALL_STATUS AS resultCode, |
|
| 8274 |
+ BRLB.USER_KEY AS userData |
|
| 8275 |
+ FROM |
|
| 8276 |
+ BIZ_RESEND_LOG BRLA |
|
| 8277 |
+ JOIN |
|
| 8278 |
+ BIZ_RESEND_LOG BRLB |
|
| 8279 |
+ ON BRLB.UMID = BRLA.CMID |
|
| 8280 |
+ WHERE (BRLA.UMID = '' OR BRLA.UMID IS NULL); |
|
| 8281 |
+ |
|
| 8282 |
+ </select> |
|
| 8283 |
+ |
|
| 8284 |
+ <update id="mjonMsgDataDAO.updateResendResult" parameterClass="mjonMsgVO" > |
|
| 8285 |
+ |
|
| 8286 |
+ UPDATE MJ_MSG_DATA |
|
| 8287 |
+ SET MSG_RESULT = #msgResult# |
|
| 8288 |
+ WHERE USERDATA = #userData# |
|
| 8289 |
+ |
|
| 8290 |
+ </update> |
|
| 8291 |
+ |
|
| 8292 |
+ <delete id="mjonMsgDataDAO.deleteBizResendLog" parameterClass="mjonMsgVO" > |
|
| 8293 |
+ |
|
| 8294 |
+ DELETE FROM BIZ_RESEND_LOG |
|
| 8295 |
+ WHERE CMID = #cmId# OR UMID = #cmId# |
|
| 8296 |
+ |
|
| 8297 |
+ </delete> |
|
| 8298 |
+ |
|
| 8268 | 8299 |
</sqlMap> |
| 8269 | 8300 |
|
--- src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml
... | ... | @@ -1367,6 +1367,7 @@ |
| 1367 | 1367 |
LETTNGNRLMBER |
| 1368 | 1368 |
SET |
| 1369 | 1369 |
SMISHING_YN = #smishingYn# |
| 1370 |
+ , AT_SMISHING_YN = #atSmishingYn# |
|
| 1370 | 1371 |
WHERE 1=1 |
| 1371 | 1372 |
AND MBER_ID = #mberId# |
| 1372 | 1373 |
</update> |
--- src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
+++ src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
... | ... | @@ -1557,8 +1557,10 @@ |
| 1557 | 1557 |
<dd> |
| 1558 | 1558 |
<ul> |
| 1559 | 1559 |
<li><a href="<c:out value='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'/>">알림톡</a></li> |
| 1560 |
+ <li><a href="<c:out value='/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do'/>">친구톡</a></li> |
|
| 1560 | 1561 |
<li><a href="<c:out value='/web/mjon/kakao/stepinfo/selectKaKaoStepInfo.do'/>" >카카오톡 설정</a></li> |
| 1561 |
- <li><a href="<c:out value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>" >알림톡 소개</a></li> |
|
| 1562 |
+ <%-- <li><a href="<c:out value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>" >알림톡 소개</a></li> --%> |
|
| 1563 |
+ <li><a href="<c:out value='/web/mjon/kakao/alimtalk/kakaotalkIntrdView.do'/>" >카카오톡 소개</a></li> |
|
| 1562 | 1564 |
</ul> |
| 1563 | 1565 |
</dd> |
| 1564 | 1566 |
</dl> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
... | ... | @@ -60,9 +60,9 @@ |
| 60 | 60 |
|
| 61 | 61 |
url = "<c:url value='/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do'/>"; |
| 62 | 62 |
|
| 63 |
- }else if(tabInfo == 'tabAlimtalkIntrd'){
|
|
| 63 |
+ }else if(tabInfo == 'tabKakaotalkIntrd'){
|
|
| 64 | 64 |
|
| 65 |
- url = "<c:url value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>"; |
|
| 65 |
+ url = "<c:url value='/web/mjon/kakao/alimtalk/kakaotalkIntrdView.do'/>"; |
|
| 66 | 66 |
|
| 67 | 67 |
} |
| 68 | 68 |
|
... | ... | @@ -142,12 +142,7 @@ |
| 142 | 142 |
|
| 143 | 143 |
<ul class="tabType4"> |
| 144 | 144 |
<li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li>
|
| 145 |
- <c:if test="${pageContext.request.serverName == 'localhost'
|
|
| 146 |
- || pageContext.request.serverName == '119.193.215.98' |
|
| 147 |
- || pageContext.request.serverName == '192.168.0.176' |
|
| 148 |
- }"> |
|
| 149 |
- <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
|
|
| 150 |
- </c:if> |
|
| 145 |
+ <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
|
|
| 151 | 146 |
<li id="tabConf" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabConf');">카카오톡 설정</button></li>
|
| 152 |
- <li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlimtalkIntrd');">알림톡 소개</button></li>
|
|
| 147 |
+ <li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabKakaotalkIntrd');">카카오톡 소개</button></li>
|
|
| 153 | 148 |
</ul>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaoAllimtalkIntro.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaoAllimtalkIntro.jsp
... | ... | @@ -17,281 +17,492 @@ |
| 17 | 17 |
<%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> |
| 18 | 18 |
<!--// tab button --> |
| 19 | 19 |
|
| 20 |
- <div class="top_content kakao_intro_cont current"> |
|
| 20 |
+ |
|
| 21 |
+ |
|
| 22 |
+ <div class="top_content kakao_intro_cont pay_tab_wrap current"> |
|
| 21 | 23 |
<div class="heading"> |
| 22 |
- <h2>알림톡 소개</h2> |
|
| 24 |
+ <h2>카카오톡 소개</h2> |
|
| 23 | 25 |
</div> |
| 24 | 26 |
|
| 25 |
- <div class="kakao_intro"> |
|
| 26 |
- <div class="title"> |
|
| 27 |
- <h3>알림톡이란?</h3> |
|
| 28 |
- </div> |
|
| 29 |
- |
|
| 30 |
- <div class="title-line"> |
|
| 31 |
- <div class="left-line"></div> |
|
| 32 |
- <div class="right-line"></div> |
|
| 33 |
- </div> |
|
| 34 |
- |
|
| 35 |
- <div class="con"> |
|
| 36 |
- <!--설명--> |
|
| 37 |
- <div class="intro"> |
|
| 38 |
- <img class="phone" src="/publish/images/kakao_intro_cont/phone.png" alt="핸드폰"> |
|
| 39 |
- <ul class="list"> |
|
| 40 |
- <li> |
|
| 41 |
- <img src="/publish/images/kakao_intro_cont/text.png" alt="카카오톡 전용 기업 메시지 서비스 “알림톡”"> |
|
| 42 |
- </li> |
|
| 43 |
- <li> |
|
| 44 |
- <p>1</p> |
|
| 45 |
- <p>1,000자 이내 <span>텍스트 및 이미지 전송 가능</span></p> |
|
| 46 |
- </li> |
|
| 47 |
- <li> |
|
| 48 |
- <p>2</p> |
|
| 49 |
- <p><span>문자 메시지 대비</span> 65% 이상 저렴</p> |
|
| 50 |
- </li> |
|
| 51 |
- <li> |
|
| 52 |
- <p>3</p> |
|
| 53 |
- <p> |
|
| 54 |
- <span>카톡 채널아이디를 추가하지 않은 이용자에게도</span> |
|
| 55 |
- <br>전화번호만 있으면 메시지 전송 가능 |
|
| 56 |
- </p> |
|
| 57 |
- </li> |
|
| 58 |
- <li> |
|
| 59 |
- <p>4</p> |
|
| 60 |
- <p><span>발송실패 시</span> 자동으로 문자 대체 발송</p> |
|
| 61 |
- </li> |
|
| 62 |
- <li> |
|
| 63 |
- <p>5</p> |
|
| 64 |
- <p><span>카카오 인증마크를 통해</span> 신뢰도 높은 메시지 발송</p> |
|
| 65 |
- </li> |
|
| 66 |
- <li> |
|
| 67 |
- <p>6</p> |
|
| 68 |
- <p><span>발신자 브랜드의 이미지 및 </span>신뢰도 상승 효과 달성</p> |
|
| 69 |
- </li> |
|
| 70 |
- </ul> |
|
| 71 |
- </div> |
|
| 72 |
- |
|
| 73 |
- <!--문자vs알림톡--> |
|
| 74 |
- <div class="fight"> |
|
| 75 |
- <div class="line"></div> |
|
| 76 |
- <div class="fight-title"> |
|
| 77 |
- <h4>문자 <span>VS</span> 알림톡</h4> |
|
| 78 |
- <div class="circle"></div> |
|
| 79 |
- </div> |
|
| 80 |
- <div class="wrap"> |
|
| 81 |
- <div class="box box-01"> |
|
| 82 |
- <div class="fight-img"> |
|
| 83 |
- <p class="name">문자</p> |
|
| 84 |
- <div class="icon"> |
|
| 85 |
- <img src="/publish/images/kakao_intro_cont/message.jpg.jpg" alt="문자"> |
|
| 86 |
- <p class="price">18원</p> |
|
| 87 |
- </div> |
|
| 88 |
- </div> |
|
| 89 |
- <p class="vs">VS</p> |
|
| 90 |
- <div class="fight-img kakao"> |
|
| 91 |
- <p class="name">알림톡</p> |
|
| 92 |
- <div class="icon"> |
|
| 93 |
- <img src="/publish/images/kakao_intro_cont/kakao.jpg.jpg" alt="카카오"> |
|
| 94 |
- <p class="price">6.9원</p> |
|
| 95 |
- </div> |
|
| 96 |
- </div> |
|
| 97 |
- <div class="text"> |
|
| 98 |
- <p>문자 대비 <span>65% 저렴</span></p> |
|
| 99 |
- </div> |
|
| 100 |
- </div> |
|
| 101 |
- <div class="fight-line"></div> |
|
| 102 |
- <div class="box box-02"> |
|
| 103 |
- <div class="fight-img"> |
|
| 104 |
- <p class="name">문자</p> |
|
| 105 |
- <div class="icon"> |
|
| 106 |
- <img src="/publish/images/kakao_intro_cont/message.jpg.jpg" alt="문자"> |
|
| 107 |
- <p class="price">90Byte</p> |
|
| 108 |
- </div> |
|
| 109 |
- </div> |
|
| 110 |
- <p class="vs">VS</p> |
|
| 111 |
- <div class="fight-img kakao"> |
|
| 112 |
- <p class="name">알림톡</p> |
|
| 113 |
- <div class="icon"> |
|
| 114 |
- <img src="/publish/images/kakao_intro_cont/kakao.jpg.jpg" alt="카카오"> |
|
| 115 |
- <p class="price">1,000글자</p> |
|
| 116 |
- </div> |
|
| 117 |
- </div> |
|
| 118 |
- <div class="text"> |
|
| 119 |
- <p>바이트(byte)에 관계없이 <span>무조건 1,000자(한/영) 발송</span></p> |
|
| 120 |
- </div> |
|
| 121 |
- </div> |
|
| 122 |
- </div> |
|
| 123 |
- </div> |
|
| 124 |
- </div> |
|
| 125 |
- </div> |
|
| 126 |
- |
|
| 127 |
- <!--알림톡 활용 방법--> |
|
| 128 |
- <div class="use"> |
|
| 129 |
- <div class="title"> |
|
| 130 |
- <h3>알림톡 활용 방법</h3> |
|
| 131 |
- </div> |
|
| 132 |
- <div class="title-line"> |
|
| 133 |
- <div class="left-line"></div> |
|
| 134 |
- <div class="right-line"></div> |
|
| 135 |
- </div> |
|
| 136 |
- <div class="tab-wrap"> |
|
| 137 |
- <ul class="tabs"> |
|
| 138 |
- <li class="tab-link current" data-tab="tab-1">금융/보험</li> |
|
| 139 |
- <li class="tab-link" data-tab="tab-2">기관/단체</li> |
|
| 140 |
- <li class="tab-link" data-tab="tab-3">여행</li> |
|
| 141 |
- <li class="tab-link" data-tab="tab-4">예약/예매</li> |
|
| 142 |
- <li class="tab-link" data-tab="tab-5">배송/배달</li> |
|
| 143 |
- <li class="tab-link" data-tab="tab-6">안내/이벤트</li> |
|
| 144 |
- </ul> |
|
| 145 |
- <div id="tab-1" class="tab-content current"> |
|
| 146 |
- <img src="/publish/images/kakao_intro_cont/bank.png" alt="금융,보험"> |
|
| 147 |
- </div> |
|
| 148 |
- <div id="tab-2" class="tab-content"> |
|
| 149 |
- <img src="/publish/images/kakao_intro_cont/organization.png" alt="기관,단체"> |
|
| 150 |
- </div> |
|
| 151 |
- <div id="tab-3" class="tab-content"> |
|
| 152 |
- <img src="/publish/images/kakao_intro_cont/travel.png" alt="여행"> |
|
| 153 |
- </div> |
|
| 154 |
- <div id="tab-4" class="tab-content"> |
|
| 155 |
- <img src="/publish/images/kakao_intro_cont/reservation.png" alt="예약,예약"> |
|
| 156 |
- </div> |
|
| 157 |
- <div id="tab-5" class="tab-content"> |
|
| 158 |
- <img src="/publish/images/kakao_intro_cont/delivery.png" alt="배송,배달"> |
|
| 159 |
- </div> |
|
| 160 |
- <div id="tab-6" class="tab-content"> |
|
| 161 |
- <img src="/publish/images/kakao_intro_cont/event.png" alt="안내,이벤트"> |
|
| 162 |
- </div> |
|
| 163 |
- </div> |
|
| 164 |
- </div> |
|
| 27 |
+ <ul class="tabType1"> |
|
| 28 |
+ <li class="tab active"><button type="button" onclick="contentTab(this,'1');">알림톡</button></li> |
|
| 29 |
+ <li class="tab"><button type="button" onclick="contentTab(this,'2');">친구톡</button></li> |
|
| 30 |
+ </ul> |
|
| 165 | 31 |
|
| 166 |
- <!--서비스이용방법--> |
|
| 167 |
- <div class="service"> |
|
| 168 |
- <div class="title"> |
|
| 169 |
- <h3>서비스 이용 방법</h3> |
|
| 170 |
- </div> |
|
| 171 |
- <div class="title-line"> |
|
| 172 |
- <div class="left-line"></div> |
|
| 173 |
- <div class="right-line"></div> |
|
| 174 |
- </div> |
|
| 175 |
- <div class="con first-line"> |
|
| 176 |
- <div class="service-01 common"> |
|
| 177 |
- <div class="step"> |
|
| 178 |
- <p>STEP <span>01</span></p> |
|
| 179 |
- </div> |
|
| 180 |
- <div class="text"> |
|
| 181 |
- <div class="btn"> |
|
| 182 |
- <a href="https://center-pf.kakao.com/" target="_blank">카카오톡 채널 가입하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> |
|
| 183 |
- </div> |
|
| 184 |
- <div class="text-line"></div> |
|
| 185 |
- <div class="type"> |
|
| 186 |
- <p> |
|
| 187 |
- 카카오톡 채널을 먼저 가입해주신 다음 <br> |
|
| 188 |
- 비즈니스 채널 전환 신청을 해주세요. |
|
| 189 |
- </p> |
|
| 190 |
- <p> |
|
| 191 |
- ※ 가입 후 카카오톡 채널 설정에서 <br> |
|
| 192 |
- 공개, 검색허용 설정을 하셔야 합니다. |
|
| 193 |
- </p> |
|
| 194 |
- </div> |
|
| 195 |
- <div class="icon"> |
|
| 196 |
- <img src="/publish/images/kakao_intro_cont/service_01.jpg" alt="카카오톡 채널 가입하러 가기 아이콘"> |
|
| 197 |
- </div> |
|
| 198 |
- </div> |
|
| 32 |
+ <!-- 알림톡 소개 --> |
|
| 33 |
+ <div class="tab_content current" id="tab_content_1"> |
|
| 34 |
+ <div class="kakao_intro"> |
|
| 35 |
+ <div class="title"> |
|
| 36 |
+ <h3>알림톡이란?</h3> |
|
| 199 | 37 |
</div> |
| 200 |
- <div class="service-02 common"> |
|
| 201 |
- <div class="step"> |
|
| 202 |
- <p>STEP <span>02</span></p> |
|
| 38 |
+ |
|
| 39 |
+ <div class="title-line"> |
|
| 40 |
+ <div class="left-line"></div> |
|
| 41 |
+ <div class="right-line"></div> |
|
| 42 |
+ </div> |
|
| 43 |
+ |
|
| 44 |
+ <div class="con"> |
|
| 45 |
+ <!--설명--> |
|
| 46 |
+ <div class="intro"> |
|
| 47 |
+ <img class="phone" src="/publish/images/kakao_intro_cont/phone.png" alt="핸드폰"> |
|
| 48 |
+ <ul class="list"> |
|
| 49 |
+ <li> |
|
| 50 |
+ <img src="/publish/images/kakao_intro_cont/text.png" alt="카카오톡 전용 기업 메시지 서비스 “알림톡”"> |
|
| 51 |
+ </li> |
|
| 52 |
+ <li> |
|
| 53 |
+ <p>1</p> |
|
| 54 |
+ <p>1,000자 이내 <span>텍스트 및 이미지 전송 가능</span></p> |
|
| 55 |
+ </li> |
|
| 56 |
+ <li> |
|
| 57 |
+ <p>2</p> |
|
| 58 |
+ <p><span>문자 메시지 대비</span> 65% 이상 저렴</p> |
|
| 59 |
+ </li> |
|
| 60 |
+ <li> |
|
| 61 |
+ <p>3</p> |
|
| 62 |
+ <p> |
|
| 63 |
+ <span>카톡 채널아이디를 추가하지 않은 이용자에게도</span> |
|
| 64 |
+ <br>전화번호만 있으면 메시지 전송 가능 |
|
| 65 |
+ </p> |
|
| 66 |
+ </li> |
|
| 67 |
+ <li> |
|
| 68 |
+ <p>4</p> |
|
| 69 |
+ <p><span>발송실패 시</span> 자동으로 문자 대체 발송</p> |
|
| 70 |
+ </li> |
|
| 71 |
+ <li> |
|
| 72 |
+ <p>5</p> |
|
| 73 |
+ <p><span>카카오 인증마크를 통해</span> 신뢰도 높은 메시지 발송</p> |
|
| 74 |
+ </li> |
|
| 75 |
+ <li> |
|
| 76 |
+ <p>6</p> |
|
| 77 |
+ <p><span>발신자 브랜드의 이미지 및 </span>신뢰도 상승 효과 달성</p> |
|
| 78 |
+ </li> |
|
| 79 |
+ </ul> |
|
| 203 | 80 |
</div> |
| 204 |
- <div class="text"> |
|
| 205 |
- <div class="btn"> |
|
| 206 |
-<%-- <a href="<c:url value='/web/mjon/kakao/profile/selectKaKaoProfileList.do'/>">채널 ID 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> --%> |
|
| 207 |
- <a href="javascript:cntntBtnInfo('step02');">채널 ID 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a>
|
|
| 81 |
+ |
|
| 82 |
+ <!--문자vs알림톡--> |
|
| 83 |
+ <div class="fight"> |
|
| 84 |
+ <div class="line"></div> |
|
| 85 |
+ <div class="fight-title"> |
|
| 86 |
+ <h4>문자 <span>VS</span> 알림톡</h4> |
|
| 87 |
+ <div class="circle"></div> |
|
| 208 | 88 |
</div> |
| 209 |
- <div class="text-line"></div> |
|
| 210 |
- <div class="type"> |
|
| 211 |
- <p> |
|
| 212 |
- 가입하신 카카오톡 채널의 채널ID(채널이름)를 <br> |
|
| 213 |
- 채널ID 등록 메뉴에 등록해주세요. |
|
| 214 |
- </p> |
|
| 215 |
- </div> |
|
| 216 |
- <div class="icon"> |
|
| 217 |
- <img src="/publish/images/kakao_intro_cont/service_02.jpg" alt="채널 ID 등록하러 가기 아이콘"> |
|
| 89 |
+ <div class="wrap"> |
|
| 90 |
+ <div class="box box-01"> |
|
| 91 |
+ <div class="fight-img"> |
|
| 92 |
+ <p class="name">문자</p> |
|
| 93 |
+ <div class="icon"> |
|
| 94 |
+ <img src="/publish/images/kakao_intro_cont/message.jpg.jpg" alt="문자"> |
|
| 95 |
+ <p class="price">18원</p> |
|
| 96 |
+ </div> |
|
| 97 |
+ </div> |
|
| 98 |
+ <p class="vs">VS</p> |
|
| 99 |
+ <div class="fight-img kakao"> |
|
| 100 |
+ <p class="name">알림톡</p> |
|
| 101 |
+ <div class="icon"> |
|
| 102 |
+ <img src="/publish/images/kakao_intro_cont/kakao.jpg.jpg" alt="카카오"> |
|
| 103 |
+ <p class="price">6.9원</p> |
|
| 104 |
+ </div> |
|
| 105 |
+ </div> |
|
| 106 |
+ <div class="text"> |
|
| 107 |
+ <p>문자 대비 <span>65% 저렴</span></p> |
|
| 108 |
+ </div> |
|
| 109 |
+ </div> |
|
| 110 |
+ <div class="fight-line"></div> |
|
| 111 |
+ <div class="box box-02"> |
|
| 112 |
+ <div class="fight-img"> |
|
| 113 |
+ <p class="name">문자</p> |
|
| 114 |
+ <div class="icon"> |
|
| 115 |
+ <img src="/publish/images/kakao_intro_cont/message.jpg.jpg" alt="문자"> |
|
| 116 |
+ <p class="price">90Byte</p> |
|
| 117 |
+ </div> |
|
| 118 |
+ </div> |
|
| 119 |
+ <p class="vs">VS</p> |
|
| 120 |
+ <div class="fight-img kakao"> |
|
| 121 |
+ <p class="name">알림톡</p> |
|
| 122 |
+ <div class="icon"> |
|
| 123 |
+ <img src="/publish/images/kakao_intro_cont/kakao.jpg.jpg" alt="카카오"> |
|
| 124 |
+ <p class="price">1,000글자</p> |
|
| 125 |
+ </div> |
|
| 126 |
+ </div> |
|
| 127 |
+ <div class="text"> |
|
| 128 |
+ <p>바이트(byte)에 관계없이 <span>무조건 1,000자(한/영) 발송</span></p> |
|
| 129 |
+ </div> |
|
| 130 |
+ </div> |
|
| 218 | 131 |
</div> |
| 219 | 132 |
</div> |
| 220 | 133 |
</div> |
| 221 | 134 |
</div> |
| 222 |
- <div class="con second-line"> |
|
| 223 |
- <div class="service-03 common"> |
|
| 224 |
- <div class="step"> |
|
| 225 |
- <p>STEP <span>03</span></p> |
|
| 226 |
- </div> |
|
| 227 |
- <div class="text"> |
|
| 228 |
- <div class="btn"> |
|
| 229 |
-<%-- <a href="<c:url value='/web/mjon/kakao/template/selectKaKaoTemplateList.do'/>">알림톡 템플릿 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> --%> |
|
| 230 |
- <a href="javascript:cntntBtnInfo('step03');">알림톡 템플릿 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a>
|
|
| 231 |
- </div> |
|
| 232 |
- <div class="text-line"></div> |
|
| 233 |
- <div class="type"> |
|
| 234 |
- <p> |
|
| 235 |
- 알림톡 발송을 위해서는 사용하실 템플릿(메시지 내용)에 |
|
| 236 |
- 대한 카카오의 승인이 반드시 필요합니다. |
|
| 237 |
- 템플릿을 작성하신 후 심사요청을 진행해주세요. |
|
| 238 |
- </p> |
|
| 239 |
- <p> |
|
| 240 |
- ※ 템플릿 승인까지 최대 3일 소요 |
|
| 241 |
- </p> |
|
| 242 |
- </div> |
|
| 243 |
- <div class="icon"> |
|
| 244 |
- <img src="/publish/images/kakao_intro_cont/service_03.jpg" alt="알림톡 템플릿 등록하러 가기 아이콘"> |
|
| 245 |
- </div> |
|
| 246 |
- </div> |
|
| 135 |
+ |
|
| 136 |
+ <!--알림톡 활용 방법--> |
|
| 137 |
+ <div class="use"> |
|
| 138 |
+ <div class="title"> |
|
| 139 |
+ <h3>알림톡 활용 방법</h3> |
|
| 247 | 140 |
</div> |
| 248 |
- <div class="service-04 common"> |
|
| 249 |
- <div class="step"> |
|
| 250 |
- <p>STEP <span>04</span></p> |
|
| 141 |
+ <div class="title-line"> |
|
| 142 |
+ <div class="left-line"></div> |
|
| 143 |
+ <div class="right-line"></div> |
|
| 144 |
+ </div> |
|
| 145 |
+ <div class="tab-wrap"> |
|
| 146 |
+ <ul class="tabs"> |
|
| 147 |
+ <li class="tab-link current" data-tab="tab-1">금융/보험</li> |
|
| 148 |
+ <li class="tab-link" data-tab="tab-2">기관/단체</li> |
|
| 149 |
+ <li class="tab-link" data-tab="tab-3">여행</li> |
|
| 150 |
+ <li class="tab-link" data-tab="tab-4">예약/예매</li> |
|
| 151 |
+ <li class="tab-link" data-tab="tab-5">배송/배달</li> |
|
| 152 |
+ <li class="tab-link" data-tab="tab-6">안내/이벤트</li> |
|
| 153 |
+ </ul> |
|
| 154 |
+ <div id="tab-1" class="tab-content current"> |
|
| 155 |
+ <img src="/publish/images/kakao_intro_cont/bank.png" alt="금융,보험"> |
|
| 251 | 156 |
</div> |
| 252 |
- <div class="text"> |
|
| 253 |
- <div class="btn"> |
|
| 254 |
- <a href="<c:url value='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'/>">알림톡 전송하기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> |
|
| 255 |
- </div> |
|
| 256 |
- <div class="text-line"></div> |
|
| 257 |
- <div class="type"> |
|
| 258 |
- <p> |
|
| 259 |
- 템플릿이 승인되셨다면 문자온 알림톡을 <br> |
|
| 260 |
- 통해 메시지를 발송하실 수 있습니다. |
|
| 261 |
- </p> |
|
| 262 |
- </div> |
|
| 263 |
- <div class="icon"> |
|
| 264 |
- <img src="/publish/images/kakao_intro_cont/service_04.jpg" alt="알림톡 전송하기 아이콘"> |
|
| 265 |
- </div> |
|
| 157 |
+ <div id="tab-2" class="tab-content"> |
|
| 158 |
+ <img src="/publish/images/kakao_intro_cont/organization.png" alt="기관,단체"> |
|
| 159 |
+ </div> |
|
| 160 |
+ <div id="tab-3" class="tab-content"> |
|
| 161 |
+ <img src="/publish/images/kakao_intro_cont/travel.png" alt="여행"> |
|
| 162 |
+ </div> |
|
| 163 |
+ <div id="tab-4" class="tab-content"> |
|
| 164 |
+ <img src="/publish/images/kakao_intro_cont/reservation.png" alt="예약,예약"> |
|
| 165 |
+ </div> |
|
| 166 |
+ <div id="tab-5" class="tab-content"> |
|
| 167 |
+ <img src="/publish/images/kakao_intro_cont/delivery.png" alt="배송,배달"> |
|
| 168 |
+ </div> |
|
| 169 |
+ <div id="tab-6" class="tab-content"> |
|
| 170 |
+ <img src="/publish/images/kakao_intro_cont/event.png" alt="안내,이벤트"> |
|
| 266 | 171 |
</div> |
| 267 | 172 |
</div> |
| 268 | 173 |
</div> |
| 269 |
- <!--이용가이드 버튼--> |
|
| 270 |
- <div class="guide"> |
|
| 271 |
- <a href="https://kakaobusiness.gitbook.io/main/ad/bizmessage/notice-friend" target="_blank">알림톡 이용가이드 보기 <img src="/publish/images/kakao_intro_cont/guide_arrow.png" alt="알림톡 이용가이드 화살표"></a> |
|
| 174 |
+ |
|
| 175 |
+ <!--서비스이용방법--> |
|
| 176 |
+ <div class="service"> |
|
| 177 |
+ <div class="title"> |
|
| 178 |
+ <h3>서비스 이용 방법</h3> |
|
| 179 |
+ </div> |
|
| 180 |
+ <div class="title-line"> |
|
| 181 |
+ <div class="left-line"></div> |
|
| 182 |
+ <div class="right-line"></div> |
|
| 183 |
+ </div> |
|
| 184 |
+ <div class="con first-line"> |
|
| 185 |
+ <div class="service-01 common"> |
|
| 186 |
+ <div class="step"> |
|
| 187 |
+ <p>STEP <span>01</span></p> |
|
| 188 |
+ </div> |
|
| 189 |
+ <div class="text"> |
|
| 190 |
+ <div class="btn"> |
|
| 191 |
+ <a href="https://center-pf.kakao.com/" target="_blank">카카오톡 채널 가입하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> |
|
| 192 |
+ </div> |
|
| 193 |
+ <div class="text-line"></div> |
|
| 194 |
+ <div class="type"> |
|
| 195 |
+ <p> |
|
| 196 |
+ 카카오톡 채널을 먼저 가입해주신 다음 <br> |
|
| 197 |
+ 비즈니스 채널 전환 신청을 해주세요. |
|
| 198 |
+ </p> |
|
| 199 |
+ <p> |
|
| 200 |
+ ※ 가입 후 카카오톡 채널 설정에서 <br> |
|
| 201 |
+ 공개, 검색허용 설정을 하셔야 합니다. |
|
| 202 |
+ </p> |
|
| 203 |
+ </div> |
|
| 204 |
+ <div class="icon"> |
|
| 205 |
+ <img src="/publish/images/kakao_intro_cont/service_01.jpg" alt="카카오톡 채널 가입하러 가기 아이콘"> |
|
| 206 |
+ </div> |
|
| 207 |
+ </div> |
|
| 208 |
+ </div> |
|
| 209 |
+ <div class="service-02 common"> |
|
| 210 |
+ <div class="step"> |
|
| 211 |
+ <p>STEP <span>02</span></p> |
|
| 212 |
+ </div> |
|
| 213 |
+ <div class="text"> |
|
| 214 |
+ <div class="btn"> |
|
| 215 |
+ <%-- <a href="<c:url value='/web/mjon/kakao/profile/selectKaKaoProfileList.do'/>">채널 ID 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> --%> |
|
| 216 |
+ <a href="javascript:cntntBtnInfo('step02');">채널 ID 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a>
|
|
| 217 |
+ </div> |
|
| 218 |
+ <div class="text-line"></div> |
|
| 219 |
+ <div class="type"> |
|
| 220 |
+ <p> |
|
| 221 |
+ 가입하신 카카오톡 채널의 채널ID(채널이름)를 <br> |
|
| 222 |
+ 채널ID 등록 메뉴에 등록해주세요. |
|
| 223 |
+ </p> |
|
| 224 |
+ </div> |
|
| 225 |
+ <div class="icon"> |
|
| 226 |
+ <img src="/publish/images/kakao_intro_cont/service_02.jpg" alt="채널 ID 등록하러 가기 아이콘"> |
|
| 227 |
+ </div> |
|
| 228 |
+ </div> |
|
| 229 |
+ </div> |
|
| 230 |
+ </div> |
|
| 231 |
+ <div class="con second-line"> |
|
| 232 |
+ <div class="service-03 common"> |
|
| 233 |
+ <div class="step"> |
|
| 234 |
+ <p>STEP <span>03</span></p> |
|
| 235 |
+ </div> |
|
| 236 |
+ <div class="text"> |
|
| 237 |
+ <div class="btn"> |
|
| 238 |
+ <%-- <a href="<c:url value='/web/mjon/kakao/template/selectKaKaoTemplateList.do'/>">알림톡 템플릿 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> --%> |
|
| 239 |
+ <a href="javascript:cntntBtnInfo('step03');">알림톡 템플릿 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a>
|
|
| 240 |
+ </div> |
|
| 241 |
+ <div class="text-line"></div> |
|
| 242 |
+ <div class="type"> |
|
| 243 |
+ <p> |
|
| 244 |
+ 알림톡 발송을 위해서는 사용하실 템플릿(메시지 내용)에 |
|
| 245 |
+ 대한 카카오의 승인이 반드시 필요합니다. |
|
| 246 |
+ 템플릿을 작성하신 후 심사요청을 진행해주세요. |
|
| 247 |
+ </p> |
|
| 248 |
+ <p> |
|
| 249 |
+ ※ 템플릿 승인까지 최대 3일 소요 |
|
| 250 |
+ </p> |
|
| 251 |
+ </div> |
|
| 252 |
+ <div class="icon"> |
|
| 253 |
+ <img src="/publish/images/kakao_intro_cont/service_03.jpg" alt="알림톡 템플릿 등록하러 가기 아이콘"> |
|
| 254 |
+ </div> |
|
| 255 |
+ </div> |
|
| 256 |
+ </div> |
|
| 257 |
+ <div class="service-04 common"> |
|
| 258 |
+ <div class="step"> |
|
| 259 |
+ <p>STEP <span>04</span></p> |
|
| 260 |
+ </div> |
|
| 261 |
+ <div class="text"> |
|
| 262 |
+ <div class="btn"> |
|
| 263 |
+ <a href="<c:url value='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'/>">알림톡 전송하기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> |
|
| 264 |
+ </div> |
|
| 265 |
+ <div class="text-line"></div> |
|
| 266 |
+ <div class="type"> |
|
| 267 |
+ <p> |
|
| 268 |
+ 템플릿이 승인되셨다면 문자온 알림톡을 <br> |
|
| 269 |
+ 통해 메시지를 발송하실 수 있습니다. |
|
| 270 |
+ </p> |
|
| 271 |
+ </div> |
|
| 272 |
+ <div class="icon"> |
|
| 273 |
+ <img src="/publish/images/kakao_intro_cont/service_04.jpg" alt="알림톡 전송하기 아이콘"> |
|
| 274 |
+ </div> |
|
| 275 |
+ </div> |
|
| 276 |
+ </div> |
|
| 277 |
+ </div> |
|
| 278 |
+ <!--이용가이드 버튼--> |
|
| 279 |
+ <div class="guide"> |
|
| 280 |
+ <a href="https://kakaobusiness.gitbook.io/main/ad/bizmessage/notice-friend" target="_blank">알림톡 이용가이드 보기 <img src="/publish/images/kakao_intro_cont/guide_arrow.png" alt="알림톡 이용가이드 화살표"></a> |
|
| 281 |
+ </div> |
|
| 282 |
+ </div> |
|
| 283 |
+ |
|
| 284 |
+ <!--유의사항--> |
|
| 285 |
+ <div class="note"> |
|
| 286 |
+ <div class="note-title"> |
|
| 287 |
+ <p> |
|
| 288 |
+ <span> |
|
| 289 |
+ <img src="/publish/images/kakao_intro_cont/note_icon.png" alt="유의사항 아이콘"> |
|
| 290 |
+ </span>유의사항 |
|
| 291 |
+ </p> |
|
| 292 |
+ </div> |
|
| 293 |
+ <ul> |
|
| 294 |
+ <li>- 한글, 영문 구분 없이 최대 1,000자까지 전송 가능합니다.</li> |
|
| 295 |
+ <li>- 알림톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.</li> |
|
| 296 |
+ <li>- 알림톡에서 허용하는 영리목적이 없는 정보성 메시지에 해당하는지 여부는 스팸 관련 정보통신망법 안내서를 꼭 참고하시길 바랍니다.</li> |
|
| 297 |
+ <li>(주문/예약 확인, 결제 내역, 배송 현황 메시지 등이 이에 해당하며 구독자 대상의 뉴스레터나 일반적인 공지문은 포함되지 않습니다.)</li> |
|
| 298 |
+ <li> |
|
| 299 |
+ <a href="/download/msg/K003_불법스팸_방지_안내서_제6차_개정판(수정_2024년).pdf" target="_blank">스팸 관련 정보통신망법 안내서 바로가기</a> |
|
| 300 |
+ </li> |
|
| 301 |
+ <li>- 부고, 답례, 초대장 등은 정보성 메시지가 아니므로 알림톡으로 보내실 수 없습니다. </li> |
|
| 302 |
+ </ul> |
|
| 272 | 303 |
</div> |
| 273 | 304 |
</div> |
| 274 |
- |
|
| 275 |
- <!--유의사항--> |
|
| 276 |
- <div class="note"> |
|
| 277 |
- <div class="note-title"> |
|
| 278 |
- <p> |
|
| 279 |
- <span> |
|
| 280 |
- <img src="/publish/images/kakao_intro_cont/note_icon.png" alt="유의사항 아이콘"> |
|
| 281 |
- </span>유의사항 |
|
| 282 |
- </p> |
|
| 305 |
+ <!-- // 알림톡 소개 --> |
|
| 306 |
+ |
|
| 307 |
+ <!-- 친구톡 소개 --> |
|
| 308 |
+ <div class="tab_content friendtalk" id="tab_content_2"> |
|
| 309 |
+ <div class="kakao_intro"> |
|
| 310 |
+ <div class="title"> |
|
| 311 |
+ <h3>친구톡이란?</h3> |
|
| 312 |
+ </div> |
|
| 313 |
+ |
|
| 314 |
+ <div class="title-line"> |
|
| 315 |
+ <div class="left-line"></div> |
|
| 316 |
+ <div class="right-line"></div> |
|
| 317 |
+ </div> |
|
| 318 |
+ |
|
| 319 |
+ <div class="con"> |
|
| 320 |
+ <!--설명--> |
|
| 321 |
+ <div class="intro"> |
|
| 322 |
+ <img class="phone" src="/publish/images/kakao_intro_cont/phone_friendtalk.png" alt="핸드폰"> |
|
| 323 |
+ |
|
| 324 |
+ <ul class="list"> |
|
| 325 |
+ <li> |
|
| 326 |
+ <img src="/publish/images/kakao_intro_cont/text_friendtalk.png" alt="카카오톡 전용 기업 메시지 서비스 “알림톡”"> |
|
| 327 |
+ </li> |
|
| 328 |
+ <li> |
|
| 329 |
+ <p>1</p> |
|
| 330 |
+ <p><span>광고성 메시지</span> 발송 가능(광고 표기 및 수신거부 안내 포함)</p> |
|
| 331 |
+ </li> |
|
| 332 |
+ <li> |
|
| 333 |
+ <p>2</p> |
|
| 334 |
+ <p>채널 친구 추가된 사용자라면 <span>누구에게나</span> 발송 가능</p> |
|
| 335 |
+ </li> |
|
| 336 |
+ <li> |
|
| 337 |
+ <p>3</p> |
|
| 338 |
+ <p><span>1,000자 이내</span> 텍스트 및 <span>이미지</span> 전송 가능</p> |
|
| 339 |
+ </li> |
|
| 340 |
+ <li> |
|
| 341 |
+ <p>4</p> |
|
| 342 |
+ <p><span>맞춤형 메시지 및 쿠폰, 링크</span> 버튼 제공 가능</p> |
|
| 343 |
+ </li> |
|
| 344 |
+ <li> |
|
| 345 |
+ <p>5</p> |
|
| 346 |
+ <p>문자 메시지 대비 <span>O % 이상</span> 저렴</p> |
|
| 347 |
+ </li> |
|
| 348 |
+ <li> |
|
| 349 |
+ <p>6</p> |
|
| 350 |
+ <p>발송실패 시 <span>대체문자 발송</span> 기능 지원</p> |
|
| 351 |
+ </li> |
|
| 352 |
+ <li> |
|
| 353 |
+ <p>7</p> |
|
| 354 |
+ <p>클릭률/도달률 분석을 통한 <span>마케팅 효율 강화</span></p> |
|
| 355 |
+ </li> |
|
| 356 |
+ <li> |
|
| 357 |
+ <p>8</p> |
|
| 358 |
+ <p>브랜드 친화적인 <span>이미지 커스터마이징</span> 가능</p> |
|
| 359 |
+ </li> |
|
| 360 |
+ </ul> |
|
| 361 |
+ </div> |
|
| 362 |
+ |
|
| 363 |
+ <!--문자vs알림톡--> |
|
| 364 |
+ <div class="fight"> |
|
| 365 |
+ <div class="line"></div> |
|
| 366 |
+ <div class="fight-title"> |
|
| 367 |
+ <h4>알림톡 <span>VS</span> 친구톡</h4> |
|
| 368 |
+ <div class="circle"></div> |
|
| 369 |
+ </div> |
|
| 370 |
+ |
|
| 371 |
+ <div class="wrap"> |
|
| 372 |
+ <div class="vs allimtalk_vs"> |
|
| 373 |
+ <div class="title">알림톡</div> |
|
| 374 |
+ <div class="box"> |
|
| 375 |
+ <ul> |
|
| 376 |
+ <li>전화번호 보유자</li> |
|
| 377 |
+ <li>정보성 <span>(예 : 주문, 예약, 안내 등)</span></li> |
|
| 378 |
+ <li>텍스트, 이미지 등</li> |
|
| 379 |
+ <li>최대 5개</li> |
|
| 380 |
+ <li>사전 승인 필요</li> |
|
| 381 |
+ <li>6.9원</li> |
|
| 382 |
+ <li>1,000자</li> |
|
| 383 |
+ <li>로고, 아이콘 형식만 가능</li> |
|
| 384 |
+ </ul> |
|
| 385 |
+ </div> |
|
| 386 |
+ </div> |
|
| 387 |
+ |
|
| 388 |
+ <div class="vs vs_title"> |
|
| 389 |
+ <div class="title">VS</div> |
|
| 390 |
+ <ul> |
|
| 391 |
+ <li>전송대상</li> |
|
| 392 |
+ <li>발송목적</li> |
|
| 393 |
+ <li>메세지 형태</li> |
|
| 394 |
+ <li>버튼 사용</li> |
|
| 395 |
+ <li>템플릿 승인</li> |
|
| 396 |
+ <li>비용</li> |
|
| 397 |
+ <li>길이제한</li> |
|
| 398 |
+ <li>이미지</li> |
|
| 399 |
+ </ul> |
|
| 400 |
+ </div> |
|
| 401 |
+ |
|
| 402 |
+ <div class="vs friendtalk_vs"> |
|
| 403 |
+ <div class="title">친구톡</div> |
|
| 404 |
+ <div class="box"> |
|
| 405 |
+ <ul> |
|
| 406 |
+ <li>채널 친구</li> |
|
| 407 |
+ <li>광고 및 마케팅성<span>(예 : 이벤트, 쿠폰 등)</span></li> |
|
| 408 |
+ <li>텍스트, 기본이미지, 와이드 이미지형 등</li> |
|
| 409 |
+ <li>최대 5개</li> |
|
| 410 |
+ <li>별도 승인 없음 <span>야간 발송 제한(20:50 ~ 익일 08:00)</span></li> |
|
| 411 |
+ <li>0.0원 ~ 0.0원</li> |
|
| 412 |
+ <li>1,000자</li> |
|
| 413 |
+ <li>가능</li> |
|
| 414 |
+ </ul> |
|
| 415 |
+ </div> |
|
| 416 |
+ </div> |
|
| 417 |
+ </div> |
|
| 418 |
+ </div> |
|
| 419 |
+ </div> |
|
| 283 | 420 |
</div> |
| 284 |
- <ul> |
|
| 285 |
- <li>- 한글, 영문 구분 없이 최대 1,000자까지 전송 가능합니다.</li> |
|
| 286 |
- <li>- 알림톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.</li> |
|
| 287 |
- <li>- 알림톡에서 허용하는 영리목적이 없는 정보성 메시지에 해당하는지 여부는 스팸 관련 정보통신망법 안내서를 꼭 참고하시길 바랍니다.</li> |
|
| 288 |
- <li>(주문/예약 확인, 결제 내역, 배송 현황 메시지 등이 이에 해당하며 구독자 대상의 뉴스레터나 일반적인 공지문은 포함되지 않습니다.)</li> |
|
| 289 |
- <li> |
|
| 290 |
- <a href="/download/msg/K003_불법스팸_방지_안내서_제6차_개정판(수정_2024년).pdf" target="_blank">스팸 관련 정보통신망법 안내서 바로가기</a> |
|
| 291 |
- </li> |
|
| 292 |
- <li>- 부고, 답례, 초대장 등은 정보성 메시지가 아니므로 알림톡으로 보내실 수 없습니다. </li> |
|
| 293 |
- </ul> |
|
| 421 |
+ |
|
| 422 |
+ <!-- 친구톡 유형 --> |
|
| 423 |
+ <div class="use"> |
|
| 424 |
+ <div class="title"> |
|
| 425 |
+ <h3>친구톡 유형</h3> |
|
| 426 |
+ </div> |
|
| 427 |
+ |
|
| 428 |
+ <div class="title-line"> |
|
| 429 |
+ <div class="left-line"></div> |
|
| 430 |
+ <div class="right-line"></div> |
|
| 431 |
+ </div> |
|
| 432 |
+ |
|
| 433 |
+ <ul class="friendtalk_use"> |
|
| 434 |
+ <li> |
|
| 435 |
+ <div class="title">텍스트형</div> |
|
| 436 |
+ <img src="/publish/images/kakao_intro_cont/friendtalk_use1.png" alt=""> |
|
| 437 |
+ <p class="explan_text">한/영 구분없이 <span>1,000자</span> + 버튼 <span>최대 5개</span></p> |
|
| 438 |
+ </li> |
|
| 439 |
+ <li> |
|
| 440 |
+ <div class="title">기본 이미지형</div> |
|
| 441 |
+ <img src="/publish/images/kakao_intro_cont/friendtalk_use2.png" alt=""> |
|
| 442 |
+ <p class="explan_text">한/영 구분없이 <span>400자</span> + 이미지 <span>1</span>장 + 버튼 <span>최대 5개</span></p> |
|
| 443 |
+ </li> |
|
| 444 |
+ <li> |
|
| 445 |
+ <div class="title">와이드 이미지형</div> |
|
| 446 |
+ <img src="/publish/images/kakao_intro_cont/friendtalk_use3.png" alt=""> |
|
| 447 |
+ <p class="explan_text">한/영 구분없이 <span>76자</span> + 이미지 <span>1</span>장 + 버튼 <span>최대 1개</span></p> |
|
| 448 |
+ </li> |
|
| 449 |
+ </ul> |
|
| 450 |
+ </div> |
|
| 451 |
+ |
|
| 452 |
+ <!--서비스이용방법--> |
|
| 453 |
+ <div class="service"> |
|
| 454 |
+ <div class="title"> |
|
| 455 |
+ <h3>서비스 이용 방법</h3> |
|
| 456 |
+ </div> |
|
| 457 |
+ |
|
| 458 |
+ <div class="title-line"> |
|
| 459 |
+ <div class="left-line"></div> |
|
| 460 |
+ <div class="right-line"></div> |
|
| 461 |
+ </div> |
|
| 462 |
+ |
|
| 463 |
+ <ul class="kakao_use_guide"> |
|
| 464 |
+ <li class="guide_01"> |
|
| 465 |
+ <div class="title">STEP <span>01</span></div> |
|
| 466 |
+ <i></i> |
|
| 467 |
+ <p class="guide_title">카카오톡 채널 가입</p> |
|
| 468 |
+ <span class="guide_info">카카오톡 채널 생성을 위한 <br> 계정이 없으시다면, 카카오에서 <br> 카카오톡 비즈니스 회원가입을<br> 먼저 진행해주세요.</span> |
|
| 469 |
+ </li> |
|
| 470 |
+ <li class="guide_02"> |
|
| 471 |
+ <div class="title">STEP <span>02</span></div> |
|
| 472 |
+ <i></i> |
|
| 473 |
+ <p class="guide_title">채널 ID 등록하러 가기</p> |
|
| 474 |
+ <span class="guide_info">가입하신 카카오톡 채널의 채널 ID(채널이름)를 채널 ID 등록 메뉴에 등록해주세요.</span> |
|
| 475 |
+ </li> |
|
| 476 |
+ <li class="guide_03"> |
|
| 477 |
+ <div class="title">STEP <span>03</span></div> |
|
| 478 |
+ <i></i> |
|
| 479 |
+ <p class="guide_title">친구톡 전송</p> |
|
| 480 |
+ <span class="guide_info">친구톡은 별도의 템플릿 심사 절차 없이, 즉시 발송 가능합니다.</span> |
|
| 481 |
+ </li> |
|
| 482 |
+ </ul> |
|
| 483 |
+ |
|
| 484 |
+ <!--이용가이드 버튼--> |
|
| 485 |
+ <div class="guide"> |
|
| 486 |
+ <a href="https://kakaobusiness.gitbook.io/main/ad/brandmessage" target="_blank">친구톡 이용가이드 보기 <img src="/publish/images/kakao_intro_cont/guide_arrow.png" alt="알림톡 이용가이드 화살표"></a> |
|
| 487 |
+ </div> |
|
| 488 |
+ </div> |
|
| 489 |
+ |
|
| 490 |
+ <!--유의사항--> |
|
| 491 |
+ <div class="note"> |
|
| 492 |
+ <div class="note-title"> |
|
| 493 |
+ <p><span><img src="/publish/images/kakao_intro_cont/note_icon.png" alt="유의사항 아이콘"></span>유의사항</p> |
|
| 494 |
+ </div> |
|
| 495 |
+ <ul> |
|
| 496 |
+ <li>- (광고) 표기 여부는 선택 가능하나 , (광고)표기 해제에 따른 법령상 의무사항을 미 준수시에는 메시지 발송이 중단될 수 있습니다.</li> |
|
| 497 |
+ <li>- 광고성 친구톡 메시지에는 “(광고) 표시 및 수신거부 방식”이 표시되며, 대체 문자의 경우에는 “(광고) 문구 및 080 무료수신거부 번호”가 자동으로 포함됩니다.</li> |
|
| 498 |
+ <li><b>- 광고성 메시지의 발송 가능 시간은 08:00 ~ 20:50(한국시간) 입니다.</b></li> |
|
| 499 |
+ <li>- 친구톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.</li> |
|
| 500 |
+ <li>- 카카오정책 및 심의기준을 반드시 준수하여야 합니다.</li> |
|
| 501 |
+ </ul> |
|
| 502 |
+ </div> |
|
| 294 | 503 |
</div> |
| 504 |
+ <!-- // 친구톡 소개 --> |
|
| 505 |
+ |
|
| 295 | 506 |
</div> |
| 296 | 507 |
</div> |
| 297 | 508 |
</div> |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp
... | ... | @@ -0,0 +1,509 @@ |
| 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 | +<%@ page import="itn.com.cmm.LoginVO" %> | |
| 7 | + | |
| 8 | + | |
| 9 | +<form id="bizForm" name="bizForm" method="post"> | |
| 10 | + <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabIntro"> | |
| 11 | +</form> | |
| 12 | + | |
| 13 | +<div class="inner"> | |
| 14 | + <!-- send top --> | |
| 15 | + <div class="send_top"> | |
| 16 | + <!-- tab button --> | |
| 17 | + <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> | |
| 18 | + <!--// tab button --> | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + <div class="top_content kakao_intro_cont pay_tab_wrap current"> | |
| 23 | + <div class="heading"> | |
| 24 | + <h2>카카오톡 소개</h2> | |
| 25 | + </div> | |
| 26 | + | |
| 27 | + <ul class="tabType1"> | |
| 28 | + <li class="tab active"><button type="button" onclick="contentTab(this,'1');">알림톡</button></li> | |
| 29 | + <li class="tab"><button type="button" onclick="contentTab(this,'2');">친구톡</button></li> | |
| 30 | + </ul> | |
| 31 | + | |
| 32 | + <!-- 알림톡 소개 --> | |
| 33 | + <div class="tab_content current" id="tab_content_1"> | |
| 34 | + <div class="kakao_intro"> | |
| 35 | + <div class="title"> | |
| 36 | + <h3>알림톡이란?</h3> | |
| 37 | + </div> | |
| 38 | + | |
| 39 | + <div class="title-line"> | |
| 40 | + <div class="left-line"></div> | |
| 41 | + <div class="right-line"></div> | |
| 42 | + </div> | |
| 43 | + | |
| 44 | + <div class="con"> | |
| 45 | + <!--설명--> | |
| 46 | + <div class="intro"> | |
| 47 | + <img class="phone" src="/publish/images/kakao_intro_cont/phone.png" alt="핸드폰"> | |
| 48 | + <ul class="list"> | |
| 49 | + <li> | |
| 50 | + <img src="/publish/images/kakao_intro_cont/text.png" alt="카카오톡 전용 기업 메시지 서비스 “알림톡”"> | |
| 51 | + </li> | |
| 52 | + <li> | |
| 53 | + <p>1</p> | |
| 54 | + <p>1,000자 이내 <span>텍스트 및 이미지 전송 가능</span></p> | |
| 55 | + </li> | |
| 56 | + <li> | |
| 57 | + <p>2</p> | |
| 58 | + <p><span>문자 메시지 대비</span> 65% 이상 저렴</p> | |
| 59 | + </li> | |
| 60 | + <li> | |
| 61 | + <p>3</p> | |
| 62 | + <p> | |
| 63 | + <span>카톡 채널아이디를 추가하지 않은 이용자에게도</span> | |
| 64 | + <br>전화번호만 있으면 메시지 전송 가능 | |
| 65 | + </p> | |
| 66 | + </li> | |
| 67 | + <li> | |
| 68 | + <p>4</p> | |
| 69 | + <p><span>발송실패 시</span> 자동으로 문자 대체 발송</p> | |
| 70 | + </li> | |
| 71 | + <li> | |
| 72 | + <p>5</p> | |
| 73 | + <p><span>카카오 인증마크를 통해</span> 신뢰도 높은 메시지 발송</p> | |
| 74 | + </li> | |
| 75 | + <li> | |
| 76 | + <p>6</p> | |
| 77 | + <p><span>발신자 브랜드의 이미지 및 </span>신뢰도 상승 효과 달성</p> | |
| 78 | + </li> | |
| 79 | + </ul> | |
| 80 | + </div> | |
| 81 | + | |
| 82 | + <!--문자vs알림톡--> | |
| 83 | + <div class="fight"> | |
| 84 | + <div class="line"></div> | |
| 85 | + <div class="fight-title"> | |
| 86 | + <h4>문자 <span>VS</span> 알림톡</h4> | |
| 87 | + <div class="circle"></div> | |
| 88 | + </div> | |
| 89 | + <div class="wrap"> | |
| 90 | + <div class="box box-01"> | |
| 91 | + <div class="fight-img"> | |
| 92 | + <p class="name">문자</p> | |
| 93 | + <div class="icon"> | |
| 94 | + <img src="/publish/images/kakao_intro_cont/message.jpg.jpg" alt="문자"> | |
| 95 | + <p class="price">18원</p> | |
| 96 | + </div> | |
| 97 | + </div> | |
| 98 | + <p class="vs">VS</p> | |
| 99 | + <div class="fight-img kakao"> | |
| 100 | + <p class="name">알림톡</p> | |
| 101 | + <div class="icon"> | |
| 102 | + <img src="/publish/images/kakao_intro_cont/kakao.jpg.jpg" alt="카카오"> | |
| 103 | + <p class="price">6.9원</p> | |
| 104 | + </div> | |
| 105 | + </div> | |
| 106 | + <div class="text"> | |
| 107 | + <p>문자 대비 <span>65% 저렴</span></p> | |
| 108 | + </div> | |
| 109 | + </div> | |
| 110 | + <div class="fight-line"></div> | |
| 111 | + <div class="box box-02"> | |
| 112 | + <div class="fight-img"> | |
| 113 | + <p class="name">문자</p> | |
| 114 | + <div class="icon"> | |
| 115 | + <img src="/publish/images/kakao_intro_cont/message.jpg.jpg" alt="문자"> | |
| 116 | + <p class="price">90Byte</p> | |
| 117 | + </div> | |
| 118 | + </div> | |
| 119 | + <p class="vs">VS</p> | |
| 120 | + <div class="fight-img kakao"> | |
| 121 | + <p class="name">알림톡</p> | |
| 122 | + <div class="icon"> | |
| 123 | + <img src="/publish/images/kakao_intro_cont/kakao.jpg.jpg" alt="카카오"> | |
| 124 | + <p class="price">1,000글자</p> | |
| 125 | + </div> | |
| 126 | + </div> | |
| 127 | + <div class="text"> | |
| 128 | + <p>바이트(byte)에 관계없이 <span>무조건 1,000자(한/영) 발송</span></p> | |
| 129 | + </div> | |
| 130 | + </div> | |
| 131 | + </div> | |
| 132 | + </div> | |
| 133 | + </div> | |
| 134 | + </div> | |
| 135 | + | |
| 136 | + <!--알림톡 활용 방법--> | |
| 137 | + <div class="use"> | |
| 138 | + <div class="title"> | |
| 139 | + <h3>알림톡 활용 방법</h3> | |
| 140 | + </div> | |
| 141 | + <div class="title-line"> | |
| 142 | + <div class="left-line"></div> | |
| 143 | + <div class="right-line"></div> | |
| 144 | + </div> | |
| 145 | + <div class="tab-wrap"> | |
| 146 | + <ul class="tabs"> | |
| 147 | + <li class="tab-link current" data-tab="tab-1">금융/보험</li> | |
| 148 | + <li class="tab-link" data-tab="tab-2">기관/단체</li> | |
| 149 | + <li class="tab-link" data-tab="tab-3">여행</li> | |
| 150 | + <li class="tab-link" data-tab="tab-4">예약/예매</li> | |
| 151 | + <li class="tab-link" data-tab="tab-5">배송/배달</li> | |
| 152 | + <li class="tab-link" data-tab="tab-6">안내/이벤트</li> | |
| 153 | + </ul> | |
| 154 | + <div id="tab-1" class="tab-content current"> | |
| 155 | + <img src="/publish/images/kakao_intro_cont/bank.png" alt="금융,보험"> | |
| 156 | + </div> | |
| 157 | + <div id="tab-2" class="tab-content"> | |
| 158 | + <img src="/publish/images/kakao_intro_cont/organization.png" alt="기관,단체"> | |
| 159 | + </div> | |
| 160 | + <div id="tab-3" class="tab-content"> | |
| 161 | + <img src="/publish/images/kakao_intro_cont/travel.png" alt="여행"> | |
| 162 | + </div> | |
| 163 | + <div id="tab-4" class="tab-content"> | |
| 164 | + <img src="/publish/images/kakao_intro_cont/reservation.png" alt="예약,예약"> | |
| 165 | + </div> | |
| 166 | + <div id="tab-5" class="tab-content"> | |
| 167 | + <img src="/publish/images/kakao_intro_cont/delivery.png" alt="배송,배달"> | |
| 168 | + </div> | |
| 169 | + <div id="tab-6" class="tab-content"> | |
| 170 | + <img src="/publish/images/kakao_intro_cont/event.png" alt="안내,이벤트"> | |
| 171 | + </div> | |
| 172 | + </div> | |
| 173 | + </div> | |
| 174 | + | |
| 175 | + <!--서비스이용방법--> | |
| 176 | + <div class="service"> | |
| 177 | + <div class="title"> | |
| 178 | + <h3>서비스 이용 방법</h3> | |
| 179 | + </div> | |
| 180 | + <div class="title-line"> | |
| 181 | + <div class="left-line"></div> | |
| 182 | + <div class="right-line"></div> | |
| 183 | + </div> | |
| 184 | + <div class="con first-line"> | |
| 185 | + <div class="service-01 common"> | |
| 186 | + <div class="step"> | |
| 187 | + <p>STEP <span>01</span></p> | |
| 188 | + </div> | |
| 189 | + <div class="text"> | |
| 190 | + <div class="btn"> | |
| 191 | + <a href="https://center-pf.kakao.com/" target="_blank">카카오톡 채널 가입하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> | |
| 192 | + </div> | |
| 193 | + <div class="text-line"></div> | |
| 194 | + <div class="type"> | |
| 195 | + <p> | |
| 196 | + 카카오톡 채널을 먼저 가입해주신 다음 <br> | |
| 197 | + 비즈니스 채널 전환 신청을 해주세요. | |
| 198 | + </p> | |
| 199 | + <p> | |
| 200 | + ※ 가입 후 카카오톡 채널 설정에서 <br> | |
| 201 | + 공개, 검색허용 설정을 하셔야 합니다. | |
| 202 | + </p> | |
| 203 | + </div> | |
| 204 | + <div class="icon"> | |
| 205 | + <img src="/publish/images/kakao_intro_cont/service_01.jpg" alt="카카오톡 채널 가입하러 가기 아이콘"> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + </div> | |
| 209 | + <div class="service-02 common"> | |
| 210 | + <div class="step"> | |
| 211 | + <p>STEP <span>02</span></p> | |
| 212 | + </div> | |
| 213 | + <div class="text"> | |
| 214 | + <div class="btn"> | |
| 215 | + <%-- <a href="<c:url value='/web/mjon/kakao/profile/selectKaKaoProfileList.do'/>">채널 ID 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> --%> | |
| 216 | + <a href="javascript:cntntBtnInfo('step02');">채널 ID 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> | |
| 217 | + </div> | |
| 218 | + <div class="text-line"></div> | |
| 219 | + <div class="type"> | |
| 220 | + <p> | |
| 221 | + 가입하신 카카오톡 채널의 채널ID(채널이름)를 <br> | |
| 222 | + 채널ID 등록 메뉴에 등록해주세요. | |
| 223 | + </p> | |
| 224 | + </div> | |
| 225 | + <div class="icon"> | |
| 226 | + <img src="/publish/images/kakao_intro_cont/service_02.jpg" alt="채널 ID 등록하러 가기 아이콘"> | |
| 227 | + </div> | |
| 228 | + </div> | |
| 229 | + </div> | |
| 230 | + </div> | |
| 231 | + <div class="con second-line"> | |
| 232 | + <div class="service-03 common"> | |
| 233 | + <div class="step"> | |
| 234 | + <p>STEP <span>03</span></p> | |
| 235 | + </div> | |
| 236 | + <div class="text"> | |
| 237 | + <div class="btn"> | |
| 238 | + <%-- <a href="<c:url value='/web/mjon/kakao/template/selectKaKaoTemplateList.do'/>">알림톡 템플릿 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> --%> | |
| 239 | + <a href="javascript:cntntBtnInfo('step03');">알림톡 템플릿 등록하러 가기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> | |
| 240 | + </div> | |
| 241 | + <div class="text-line"></div> | |
| 242 | + <div class="type"> | |
| 243 | + <p> | |
| 244 | + 알림톡 발송을 위해서는 사용하실 템플릿(메시지 내용)에 | |
| 245 | + 대한 카카오의 승인이 반드시 필요합니다. | |
| 246 | + 템플릿을 작성하신 후 심사요청을 진행해주세요. | |
| 247 | + </p> | |
| 248 | + <p> | |
| 249 | + ※ 템플릿 승인까지 최대 3일 소요 | |
| 250 | + </p> | |
| 251 | + </div> | |
| 252 | + <div class="icon"> | |
| 253 | + <img src="/publish/images/kakao_intro_cont/service_03.jpg" alt="알림톡 템플릿 등록하러 가기 아이콘"> | |
| 254 | + </div> | |
| 255 | + </div> | |
| 256 | + </div> | |
| 257 | + <div class="service-04 common"> | |
| 258 | + <div class="step"> | |
| 259 | + <p>STEP <span>04</span></p> | |
| 260 | + </div> | |
| 261 | + <div class="text"> | |
| 262 | + <div class="btn"> | |
| 263 | + <a href="<c:url value='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'/>">알림톡 전송하기<img src="/publish/images/kakao_intro_cont/arrow.jpg" alt="화살표"></a> | |
| 264 | + </div> | |
| 265 | + <div class="text-line"></div> | |
| 266 | + <div class="type"> | |
| 267 | + <p> | |
| 268 | + 템플릿이 승인되셨다면 문자온 알림톡을 <br> | |
| 269 | + 통해 메시지를 발송하실 수 있습니다. | |
| 270 | + </p> | |
| 271 | + </div> | |
| 272 | + <div class="icon"> | |
| 273 | + <img src="/publish/images/kakao_intro_cont/service_04.jpg" alt="알림톡 전송하기 아이콘"> | |
| 274 | + </div> | |
| 275 | + </div> | |
| 276 | + </div> | |
| 277 | + </div> | |
| 278 | + <!--이용가이드 버튼--> | |
| 279 | + <div class="guide"> | |
| 280 | + <a href="https://kakaobusiness.gitbook.io/main/ad/bizmessage/notice-friend" target="_blank">알림톡 이용가이드 보기 <img src="/publish/images/kakao_intro_cont/guide_arrow.png" alt="알림톡 이용가이드 화살표"></a> | |
| 281 | + </div> | |
| 282 | + </div> | |
| 283 | + | |
| 284 | + <!--유의사항--> | |
| 285 | + <div class="note"> | |
| 286 | + <div class="note-title"> | |
| 287 | + <p> | |
| 288 | + <span> | |
| 289 | + <img src="/publish/images/kakao_intro_cont/note_icon.png" alt="유의사항 아이콘"> | |
| 290 | + </span>유의사항 | |
| 291 | + </p> | |
| 292 | + </div> | |
| 293 | + <ul> | |
| 294 | + <li>- 한글, 영문 구분 없이 최대 1,000자까지 전송 가능합니다.</li> | |
| 295 | + <li>- 알림톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.</li> | |
| 296 | + <li>- 알림톡에서 허용하는 영리목적이 없는 정보성 메시지에 해당하는지 여부는 스팸 관련 정보통신망법 안내서를 꼭 참고하시길 바랍니다.</li> | |
| 297 | + <li>(주문/예약 확인, 결제 내역, 배송 현황 메시지 등이 이에 해당하며 구독자 대상의 뉴스레터나 일반적인 공지문은 포함되지 않습니다.)</li> | |
| 298 | + <li> | |
| 299 | + <a href="/download/msg/K003_불법스팸_방지_안내서_제6차_개정판(수정_2024년).pdf" target="_blank">스팸 관련 정보통신망법 안내서 바로가기</a> | |
| 300 | + </li> | |
| 301 | + <li>- 부고, 답례, 초대장 등은 정보성 메시지가 아니므로 알림톡으로 보내실 수 없습니다. </li> | |
| 302 | + </ul> | |
| 303 | + </div> | |
| 304 | + </div> | |
| 305 | + <!-- // 알림톡 소개 --> | |
| 306 | + | |
| 307 | + <!-- 친구톡 소개 --> | |
| 308 | + <div class="tab_content friendtalk" id="tab_content_2"> | |
| 309 | + <div class="kakao_intro"> | |
| 310 | + <div class="title"> | |
| 311 | + <h3>친구톡이란?</h3> | |
| 312 | + </div> | |
| 313 | + | |
| 314 | + <div class="title-line"> | |
| 315 | + <div class="left-line"></div> | |
| 316 | + <div class="right-line"></div> | |
| 317 | + </div> | |
| 318 | + | |
| 319 | + <div class="con"> | |
| 320 | + <!--설명--> | |
| 321 | + <div class="intro"> | |
| 322 | + <img class="phone" src="/publish/images/kakao_intro_cont/phone_friendtalk.png" alt="핸드폰"> | |
| 323 | + | |
| 324 | + <ul class="list"> | |
| 325 | + <li> | |
| 326 | + <img src="/publish/images/kakao_intro_cont/text_friendtalk.png" alt="카카오톡 전용 기업 메시지 서비스 “알림톡”"> | |
| 327 | + </li> | |
| 328 | + <li> | |
| 329 | + <p>1</p> | |
| 330 | + <p><span>광고성 메시지</span> 발송 가능(광고 표기 및 수신거부 안내 포함)</p> | |
| 331 | + </li> | |
| 332 | + <li> | |
| 333 | + <p>2</p> | |
| 334 | + <p>채널 친구 추가된 사용자라면 <span>누구에게나</span> 발송 가능</p> | |
| 335 | + </li> | |
| 336 | + <li> | |
| 337 | + <p>3</p> | |
| 338 | + <p><span>1,000자 이내</span> 텍스트 및 <span>이미지</span> 전송 가능</p> | |
| 339 | + </li> | |
| 340 | + <li> | |
| 341 | + <p>4</p> | |
| 342 | + <p><span>맞춤형 메시지 및 쿠폰, 링크</span> 버튼 제공 가능</p> | |
| 343 | + </li> | |
| 344 | + <li> | |
| 345 | + <p>5</p> | |
| 346 | + <p>문자 메시지 대비 <span>저렴한</span> 단가</p> | |
| 347 | + </li> | |
| 348 | + <li> | |
| 349 | + <p>6</p> | |
| 350 | + <p>발송실패 시 <span>대체문자 발송</span> 기능 지원</p> | |
| 351 | + </li> | |
| 352 | + <li> | |
| 353 | + <p>7</p> | |
| 354 | + <p>클릭률/도달률 분석을 통한 <span>마케팅 효율 강화</span></p> | |
| 355 | + </li> | |
| 356 | + <li> | |
| 357 | + <p>8</p> | |
| 358 | + <p>브랜드 친화적인 <span>이미지 커스터마이징</span> 가능</p> | |
| 359 | + </li> | |
| 360 | + </ul> | |
| 361 | + </div> | |
| 362 | + | |
| 363 | + <!--문자vs알림톡--> | |
| 364 | + <div class="fight"> | |
| 365 | + <div class="line"></div> | |
| 366 | + <div class="fight-title"> | |
| 367 | + <h4>알림톡 <span>VS</span> 친구톡</h4> | |
| 368 | + <div class="circle"></div> | |
| 369 | + </div> | |
| 370 | + | |
| 371 | + <div class="wrap"> | |
| 372 | + <div class="vs allimtalk_vs"> | |
| 373 | + <div class="title">알림톡</div> | |
| 374 | + <div class="box"> | |
| 375 | + <ul> | |
| 376 | + <li>전화번호 보유자</li> | |
| 377 | + <li>정보성 <span>(예 : 주문, 예약, 안내 등)</span></li> | |
| 378 | + <li>텍스트, 이미지 등</li> | |
| 379 | + <li>최대 5개</li> | |
| 380 | + <li>사전 승인 필요</li> | |
| 381 | + <li>6.9원</li> | |
| 382 | + <li>1,000자</li> | |
| 383 | + <li>로고, 아이콘 형식만 가능</li> | |
| 384 | + </ul> | |
| 385 | + </div> | |
| 386 | + </div> | |
| 387 | + | |
| 388 | + <div class="vs vs_title"> | |
| 389 | + <div class="title">VS</div> | |
| 390 | + <ul> | |
| 391 | + <li>전송대상</li> | |
| 392 | + <li>발송목적</li> | |
| 393 | + <li>메세지 형태</li> | |
| 394 | + <li>버튼 사용</li> | |
| 395 | + <li>템플릿 승인</li> | |
| 396 | + <li>비용</li> | |
| 397 | + <li>길이제한</li> | |
| 398 | + <li>이미지</li> | |
| 399 | + </ul> | |
| 400 | + </div> | |
| 401 | + | |
| 402 | + <div class="vs friendtalk_vs"> | |
| 403 | + <div class="title">친구톡</div> | |
| 404 | + <div class="box"> | |
| 405 | + <ul> | |
| 406 | + <li>채널 친구</li> | |
| 407 | + <li>광고 및 마케팅성<span>(예 : 이벤트, 쿠폰 등)</span></li> | |
| 408 | + <li>텍스트, 기본이미지, 와이드 이미지형 등</li> | |
| 409 | + <li>최대 5개</li> | |
| 410 | + <li>별도 승인 없음 <span>야간 발송 제한(20:50 ~ 익일 08:00)</span></li> | |
| 411 | + <li>13.8원 ~ 22.9원</li> | |
| 412 | + <li>1,000자</li> | |
| 413 | + <li>가능</li> | |
| 414 | + </ul> | |
| 415 | + </div> | |
| 416 | + </div> | |
| 417 | + </div> | |
| 418 | + </div> | |
| 419 | + </div> | |
| 420 | + </div> | |
| 421 | + | |
| 422 | + <!-- 친구톡 유형 --> | |
| 423 | + <div class="use"> | |
| 424 | + <div class="title"> | |
| 425 | + <h3>친구톡 유형</h3> | |
| 426 | + </div> | |
| 427 | + | |
| 428 | + <div class="title-line"> | |
| 429 | + <div class="left-line"></div> | |
| 430 | + <div class="right-line"></div> | |
| 431 | + </div> | |
| 432 | + | |
| 433 | + <ul class="friendtalk_use"> | |
| 434 | + <li> | |
| 435 | + <div class="title">텍스트형</div> | |
| 436 | + <img src="/publish/images/kakao_intro_cont/friendtalk_use1.png" alt=""> | |
| 437 | + <p class="explan_text">한/영 구분없이 <span>1,000자</span> + 버튼 <span>최대 5개</span></p> | |
| 438 | + </li> | |
| 439 | + <li> | |
| 440 | + <div class="title">기본 이미지형</div> | |
| 441 | + <img src="/publish/images/kakao_intro_cont/friendtalk_use2.png" alt=""> | |
| 442 | + <p class="explan_text">한/영 구분없이 <span>400자</span> + 이미지 <span>1</span>장 + 버튼 <span>최대 5개</span></p> | |
| 443 | + </li> | |
| 444 | + <li> | |
| 445 | + <div class="title">와이드 이미지형</div> | |
| 446 | + <img src="/publish/images/kakao_intro_cont/friendtalk_use3.png" alt=""> | |
| 447 | + <p class="explan_text">한/영 구분없이 <span>76자</span> + 이미지 <span>1</span>장 + 버튼 <span>최대 1개</span></p> | |
| 448 | + </li> | |
| 449 | + </ul> | |
| 450 | + </div> | |
| 451 | + | |
| 452 | + <!--서비스이용방법--> | |
| 453 | + <div class="service"> | |
| 454 | + <div class="title"> | |
| 455 | + <h3>서비스 이용 방법</h3> | |
| 456 | + </div> | |
| 457 | + | |
| 458 | + <div class="title-line"> | |
| 459 | + <div class="left-line"></div> | |
| 460 | + <div class="right-line"></div> | |
| 461 | + </div> | |
| 462 | + | |
| 463 | + <ul class="kakao_use_guide"> | |
| 464 | + <li class="guide_01"> | |
| 465 | + <div class="title">STEP <span>01</span></div> | |
| 466 | + <i></i> | |
| 467 | + <p class="guide_title">카카오톡 채널 가입</p> | |
| 468 | + <span class="guide_info">카카오톡 채널 생성을 위한 <br> 계정이 없으시다면, 카카오에서 <br> 카카오톡 비즈니스 회원가입을<br> 먼저 진행해주세요.</span> | |
| 469 | + </li> | |
| 470 | + <li class="guide_02"> | |
| 471 | + <div class="title">STEP <span>02</span></div> | |
| 472 | + <i></i> | |
| 473 | + <p class="guide_title">채널 ID 등록하러 가기</p> | |
| 474 | + <span class="guide_info">가입하신 카카오톡 채널의 채널 ID(채널이름)를 채널 ID 등록 메뉴에 등록해주세요.</span> | |
| 475 | + </li> | |
| 476 | + <li class="guide_03"> | |
| 477 | + <div class="title">STEP <span>03</span></div> | |
| 478 | + <i></i> | |
| 479 | + <p class="guide_title">친구톡 전송</p> | |
| 480 | + <span class="guide_info">친구톡은 별도의 템플릿 심사 절차 없이, 즉시 발송 가능합니다.</span> | |
| 481 | + </li> | |
| 482 | + </ul> | |
| 483 | + | |
| 484 | + <!--이용가이드 버튼--> | |
| 485 | + <div class="guide"> | |
| 486 | + <a href="https://kakaobusiness.gitbook.io/main/ad/brandmessage" target="_blank">친구톡 이용가이드 보기 <img src="/publish/images/kakao_intro_cont/guide_arrow.png" alt="알림톡 이용가이드 화살표"></a> | |
| 487 | + </div> | |
| 488 | + </div> | |
| 489 | + | |
| 490 | + <!--유의사항--> | |
| 491 | + <div class="note"> | |
| 492 | + <div class="note-title"> | |
| 493 | + <p><span><img src="/publish/images/kakao_intro_cont/note_icon.png" alt="유의사항 아이콘"></span>유의사항</p> | |
| 494 | + </div> | |
| 495 | + <ul> | |
| 496 | + <li>- (광고) 표기 여부는 선택 가능하나 , (광고)표기 해제에 따른 법령상 의무사항을 미 준수시에는 메시지 발송이 중단될 수 있습니다.</li> | |
| 497 | + <li>- 광고성 친구톡 메시지에는 “(광고) 표시 및 수신거부 방식”이 표시되며, 대체 문자의 경우에는 “(광고) 문구 및 080 무료수신거부 번호”가 자동으로 포함됩니다.</li> | |
| 498 | + <li><b>- 광고성 메시지의 발송 가능 시간은 08:00 ~ 20:50(한국시간) 입니다.</b></li> | |
| 499 | + <li>- 친구톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.</li> | |
| 500 | + <li>- 카카오정책 및 심의기준을 반드시 준수하여야 합니다.</li> | |
| 501 | + </ul> | |
| 502 | + </div> | |
| 503 | + </div> | |
| 504 | + <!-- // 친구톡 소개 --> | |
| 505 | + | |
| 506 | + </div> | |
| 507 | + </div> | |
| 508 | +</div> | |
| 509 | +<!--// send top -->(No newline at end of file) |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPhoneAjax.jsp
... | ... | @@ -0,0 +1,194 @@ |
| 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<% pageContext.setAttribute("newLineChar", "\n"); %> | |
| 7 | +<div class="phone"> | |
| 8 | + <!-- 탭스타일 --> | |
| 9 | + <div class="list_tab_wrap2 type5 kakao_rev_tab"> | |
| 10 | + <ul class="tabType3" id="tabType" name="tabType"> | |
| 11 | + <li class="tab active"><button type="button" onclick="phoneTab(this,'1');" title="선택됨">카카오톡</button></li> | |
| 12 | + <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}"> | |
| 13 | + <li class="tab"><button type="button" onclick="phoneTab(this,'2');">대체문자</button></li> | |
| 14 | + </c:if> | |
| 15 | + </ul> | |
| 16 | + </div> | |
| 17 | + <!--// 탭스타일 --> | |
| 18 | + | |
| 19 | + <!-- 카카오 미리보기 --> | |
| 20 | +<!-- <div class="tab_phone current" id="tab_phone_1"> --> | |
| 21 | +<!-- <div class="phone_kakako friendtalk"> --> | |
| 22 | + <div class="tab_phone current kakao_wrap" id="tab_phone_1"> | |
| 23 | + <!-- 알림톡 미리보기 --> | |
| 24 | + <c:if test="${msgType eq '8'}"> | |
| 25 | + <div class="phone_kakako"> | |
| 26 | + <div class="phoneIn"> | |
| 27 | + <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""></p> | |
| 28 | + <!-- 텍스트 미리보기 --> | |
| 29 | + <div class="text_preview"> | |
| 30 | + <div class="allimtalk_title"> | |
| 31 | + <img src="/publish/images/content/icon_allimtalk.png" alt=""> | |
| 32 | + 알림톡 도착 | |
| 33 | + </div> | |
| 34 | + <div class="allimtalk_content"> | |
| 35 | + <c:choose> | |
| 36 | + <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}"> | |
| 37 | + <p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p> | |
| 38 | + <p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p> | |
| 39 | + </c:when> | |
| 40 | + <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}"> | |
| 41 | + <div class="kakao_image"> | |
| 42 | + <img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt=""> | |
| 43 | + </div> | |
| 44 | + </c:when> | |
| 45 | + </c:choose> | |
| 46 | + | |
| 47 | + <p class="template_text"> | |
| 48 | + <c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/> | |
| 49 | + </p> | |
| 50 | + | |
| 51 | + <c:choose> | |
| 52 | + <c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}"> | |
| 53 | + <p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p> | |
| 54 | + </c:when> | |
| 55 | + <c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}"> | |
| 56 | + <p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p> | |
| 57 | + </c:when> | |
| 58 | + </c:choose> | |
| 59 | + | |
| 60 | + <c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status"> | |
| 61 | + <c:choose> | |
| 62 | + <c:when test="${templatInfoButtonList.name eq '채널 추가'}"> | |
| 63 | + <button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button> | |
| 64 | + </c:when> | |
| 65 | + <c:otherwise> | |
| 66 | + <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button> | |
| 67 | + </c:otherwise> | |
| 68 | + </c:choose> | |
| 69 | + </c:forEach> | |
| 70 | + </div> | |
| 71 | + | |
| 72 | + </div> | |
| 73 | + </div> | |
| 74 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> | |
| 75 | + </div> | |
| 76 | + </c:if> | |
| 77 | + | |
| 78 | + <!-- 친구톡 미리보기 --> | |
| 79 | + <c:if test="${msgType eq '9'}"> | |
| 80 | + <div class="phone_kakako friendtalk"> | |
| 81 | + <div class="phoneIn"> | |
| 82 | + <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""><c:out value="${searchVO.yellowId}"/></p> | |
| 83 | + <!-- 텍스트 미리보기 --> | |
| 84 | + <div class="text_preview"> | |
| 85 | + <c:if test="${resultMsgDetail.adFlag eq 'Y'}"> | |
| 86 | + <p class="friend_talk_title"><span>(광고)</span></p> | |
| 87 | + </c:if> | |
| 88 | + <div class="allimtalk_content"> | |
| 89 | + <c:choose> | |
| 90 | + <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}"> | |
| 91 | + <p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p> | |
| 92 | + <p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p> | |
| 93 | + </c:when> | |
| 94 | + <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}"> | |
| 95 | + <div class="kakao_image"> | |
| 96 | + <img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt=""> | |
| 97 | + </div> | |
| 98 | + </c:when> | |
| 99 | + </c:choose> | |
| 100 | + | |
| 101 | + <p class="template_text"> | |
| 102 | + <c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/> | |
| 103 | + </p> | |
| 104 | + | |
| 105 | + <c:choose> | |
| 106 | + <c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}"> | |
| 107 | + <p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p> | |
| 108 | + </c:when> | |
| 109 | + <c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}"> | |
| 110 | + <p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p> | |
| 111 | + </c:when> | |
| 112 | + </c:choose> | |
| 113 | + | |
| 114 | + <c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status"> | |
| 115 | + <c:choose> | |
| 116 | + <c:when test="${templatInfoButtonList.name eq '채널 추가'}"> | |
| 117 | + <button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button> | |
| 118 | + </c:when> | |
| 119 | + <c:otherwise> | |
| 120 | + <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button> | |
| 121 | + </c:otherwise> | |
| 122 | + </c:choose> | |
| 123 | + </c:forEach> | |
| 124 | + </div> | |
| 125 | + | |
| 126 | + <c:if test="${resultMsgDetail.adFlag eq 'Y'}"> | |
| 127 | + <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p> | |
| 128 | + </c:if> | |
| 129 | + | |
| 130 | + </div> | |
| 131 | + </div> | |
| 132 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> | |
| 133 | + </div> | |
| 134 | + </c:if> | |
| 135 | + | |
| 136 | + </div> | |
| 137 | + <!--// 카카오 미리보기 --> | |
| 138 | + | |
| 139 | + <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}"> | |
| 140 | + <!-- 문자 미리보기 --> | |
| 141 | + <div class="tab_phone" id="tab_phone_2" style="display: none;position:relative;"> | |
| 142 | +<!-- <div class="tab_phone" id="tab_phone_2" > --> | |
| 143 | +<!-- <div class="tab_phone" id="tab_phone_2" style="display:none" > --> | |
| 144 | + <div class="phoneIn"> | |
| 145 | + <div> | |
| 146 | + <p class="prev_p"><img src="/publish/images/search.png"> 문자내용</p> | |
| 147 | + <div class="text_length2 clearfix"> | |
| 148 | + <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}"> | |
| 149 | + <c:choose> | |
| 150 | + <c:when test="${not empty fileInfos}"> | |
| 151 | + <span class="msg_com msg_photo">그림</span> | |
| 152 | + </c:when> | |
| 153 | + <c:otherwise> | |
| 154 | + <c:choose> | |
| 155 | + <c:when test="${resultMsgDetail.bizKakaoResendType eq 'SMS'}"> | |
| 156 | + <span class="msg_com msg_short">단문</span> | |
| 157 | + </c:when> | |
| 158 | + <c:otherwise> | |
| 159 | + <span class="msg_com msg_long">장문</span> | |
| 160 | + </c:otherwise> | |
| 161 | + </c:choose> | |
| 162 | + </c:otherwise> | |
| 163 | + </c:choose> | |
| 164 | + </c:if> | |
| 165 | + </div> | |
| 166 | + <div class="text_preview"> | |
| 167 | + <c:if test="${not empty fileInfos}"> | |
| 168 | + <div class="preiew_img"> | |
| 169 | + <c:forEach var="fileInfo" items="${fileInfos}"> | |
| 170 | + <div class="img_box"> | |
| 171 | + <img src="<c:url value='/cmm/fms/getImage2.do'/>?atchFileId=<c:out value="${fileInfo.atchFileId}"/>&fileSn=<c:out value="${fileInfo.fileSn}"/>" alt="발송된 그림문자 미리보기" style="width: 100%"> | |
| 172 | + </div> | |
| 173 | + </c:forEach> | |
| 174 | + </div> | |
| 175 | + </c:if> | |
| 176 | + <div class="preview_auto"> | |
| 177 | + <c:if test="${resultMsgDetail.adFlag eq 'Y'}"> | |
| 178 | + <p class="ad_tit">(광고)</p> | |
| 179 | + </c:if> | |
| 180 | + <p class="realtime">${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}</p> | |
| 181 | + | |
| 182 | + <c:if test="${resultMsgDetail.adFlag eq 'Y'}"> | |
| 183 | + <p class="deny_receipt">무료거부 0808800858</p> | |
| 184 | + </c:if> | |
| 185 | + </div> | |
| 186 | + </div> | |
| 187 | + </div> | |
| 188 | + </div> | |
| 189 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> | |
| 190 | + </div> | |
| 191 | + </c:if> | |
| 192 | + <!--// 문자 미리보기 --> | |
| 193 | +</div> | |
| 194 | + (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
... | ... | @@ -6,118 +6,174 @@ |
| 6 | 6 |
<% pageContext.setAttribute("newLineChar", "\n"); %>
|
| 7 | 7 |
|
| 8 | 8 |
<div class="phone"> |
| 9 |
- <!-- 탭스타일 --> |
|
| 10 |
- <div class="list_tab_wrap2 type5 kakao_rev_tab"> |
|
| 11 |
- <ul class="tabType3" id="tabType" name="tabType"> |
|
| 12 |
- <li class="tab active"><button type="button" onclick="phoneTab(this,'1');" title="선택됨">카카오톡</button></li> |
|
| 13 |
- <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
|
| 14 |
- <li class="tab"><button type="button" onclick="phoneTab(this,'2');">대체문자</button></li> |
|
| 15 |
- </c:if> |
|
| 16 |
- </ul> |
|
| 17 |
- </div> |
|
| 18 |
- <!--// 탭스타일 --> |
|
| 9 |
+ <!-- 탭스타일 --> |
|
| 10 |
+ <div class="list_tab_wrap2 type5 kakao_rev_tab"> |
|
| 11 |
+ <ul class="tabType3" id="tabType" name="tabType"> |
|
| 12 |
+ <li class="tab active"><button type="button" onclick="phoneTab(this,'1');" title="선택됨">카카오톡</button></li> |
|
| 13 |
+ <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
|
| 14 |
+ <li class="tab"><button type="button" onclick="phoneTab(this,'2');">대체문자</button></li> |
|
| 15 |
+ </c:if> |
|
| 16 |
+ </ul> |
|
| 17 |
+ </div> |
|
| 18 |
+ <!--// 탭스타일 --> |
|
| 19 | 19 |
|
| 20 |
- <!-- 카카오 알림톡 미리보기 --> |
|
| 21 |
-<!-- <div class="tab_phone current" id="tab_phone_1"> --> |
|
| 22 |
-<!-- <div class="phone_kakako friendtalk"> --> |
|
| 23 |
- <div class="tab_phone current kakao_wrap" id="tab_phone_1"> |
|
| 24 |
- <div class="phone_kakako friendtalk"> |
|
| 25 |
- <div class="phoneIn"> |
|
| 26 |
- <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""><c:out value="${searchVO.yellowId}"/></p>
|
|
| 27 |
- <!-- 텍스트 미리보기 --> |
|
| 28 |
- <div class="text_preview"> |
|
| 29 |
- <c:if test="${resultMsgDetail.adFlag eq 'Y'}">
|
|
| 30 |
- <p class="friend_talk_title"><span>(광고)</span></p> |
|
| 31 |
- </c:if> |
|
| 32 |
- <div class="allimtalk_content"> |
|
| 33 |
- <c:choose> |
|
| 34 |
- <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
|
|
| 35 |
- <p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
|
|
| 36 |
- <p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
|
|
| 37 |
- </c:when> |
|
| 38 |
- <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
|
|
| 39 |
- <div class="kakao_image"> |
|
| 40 |
- <img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
|
|
| 41 |
- </div> |
|
| 42 |
- </c:when> |
|
| 43 |
- </c:choose> |
|
| 20 |
+ <div class="tab_phone current kakao_wrap" id="tab_phone_1"> |
|
| 21 |
+ <!-- 카카오 알림톡 미리보기 --> |
|
| 22 |
+ <c:if test="${msgType eq '8'}">
|
|
| 23 |
+ <div class="phone_kakako"> |
|
| 24 |
+ <div class="phoneIn"> |
|
| 25 |
+ <div class="rev_pop_middle clearfix"> |
|
| 26 |
+ <fmt:parseDate value="${resultMsgDetail.reqDate}" var="parsedDate" pattern="yyyy-MM-dd HH:mm:ss.S"/>
|
|
| 27 |
+ <span>발송일시 : <fmt:formatDate value="${parsedDate}" pattern="yyyy-MM-dd HH:mm:ss"/></span>
|
|
| 28 |
+ <span class="msg_com msg_allimtalk"> |
|
| 29 |
+ 알림톡 |
|
| 30 |
+ </span> |
|
| 31 |
+ </div> |
|
| 32 |
+ <!-- 텍스트 미리보기 --> |
|
| 33 |
+ <div class="rev_pop_txt"> |
|
| 34 |
+ <div class="text_preview"> |
|
| 35 |
+ <div class="allimtalk_title"> |
|
| 36 |
+ <img src="/publish/images/content/icon_allimtalk.png" alt=""> |
|
| 37 |
+ 알림톡 도착 |
|
| 38 |
+ </div> |
|
| 39 |
+ <div class="allimtalk_content"> |
|
| 40 |
+ <c:choose> |
|
| 41 |
+ <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
|
|
| 42 |
+ <p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
|
|
| 43 |
+ <p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
|
|
| 44 |
+ </c:when> |
|
| 45 |
+ <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
|
|
| 46 |
+ <div class="kakao_image"> |
|
| 47 |
+ <img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
|
|
| 48 |
+ </div> |
|
| 49 |
+ </c:when> |
|
| 50 |
+ </c:choose> |
|
| 51 |
+ <p class="template_text"> |
|
| 52 |
+ <c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
|
|
| 53 |
+ </p> |
|
| 54 |
+ |
|
| 55 |
+ <c:choose> |
|
| 56 |
+ <c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
|
|
| 57 |
+ <p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>
|
|
| 58 |
+ </c:when> |
|
| 59 |
+ <c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
|
|
| 60 |
+ <p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
|
|
| 61 |
+ </c:when> |
|
| 62 |
+ </c:choose> |
|
| 63 |
+ |
|
| 64 |
+ <c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
|
|
| 65 |
+ <c:choose> |
|
| 66 |
+ <c:when test="${templatInfoButtonList.name eq '채널 추가'}">
|
|
| 67 |
+ <button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button> |
|
| 68 |
+ </c:when> |
|
| 69 |
+ <c:otherwise> |
|
| 70 |
+ <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
|
| 71 |
+ </c:otherwise> |
|
| 72 |
+ </c:choose> |
|
| 73 |
+ </c:forEach> |
|
| 74 |
+ </div> |
|
| 75 |
+ </div> |
|
| 76 |
+ </div> |
|
| 77 |
+ </div> |
|
| 78 |
+ <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> |
|
| 79 |
+ </div> |
|
| 80 |
+ </c:if> |
|
| 81 |
+ |
|
| 82 |
+ <c:if test="${msgType eq '9'}">
|
|
| 83 |
+ <!-- 카카오 친구톡 미리보기 --> |
|
| 84 |
+ <div class="phone_kakako friendtalk"> |
|
| 85 |
+ <div class="phoneIn"> |
|
| 86 |
+ <div class="rev_pop_middle clearfix"> |
|
| 87 |
+ <fmt:parseDate value="${resultMsgDetail.reqDate}" var="parsedDate" pattern="yyyy-MM-dd HH:mm:ss.S"/>
|
|
| 88 |
+ <span>발송일시 : <fmt:formatDate value="${parsedDate}" pattern="yyyy-MM-dd HH:mm:ss"/></span>
|
|
| 89 |
+ <span class="msg_com msg_allimtalk"> |
|
| 90 |
+ 친구톡 |
|
| 91 |
+ </span> |
|
| 92 |
+ </div> |
|
| 93 |
+ <!-- 텍스트 미리보기 --> |
|
| 94 |
+ <div class="rev_pop_txt"> |
|
| 95 |
+ <div class="text_preview"> |
|
| 96 |
+ <c:if test="${resultMsgDetail.adFlag eq 'Y'}">
|
|
| 97 |
+ <p class="friend_talk_title"><span>(광고)</span></p> |
|
| 98 |
+ </c:if> |
|
| 99 |
+ <div class="allimtalk_content"> |
|
| 100 |
+ <c:choose> |
|
| 101 |
+ <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
|
|
| 102 |
+ <p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
|
|
| 103 |
+ <p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
|
|
| 104 |
+ </c:when> |
|
| 105 |
+ <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
|
|
| 106 |
+ <div class="kakao_image"> |
|
| 107 |
+ <img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
|
|
| 108 |
+ </div> |
|
| 109 |
+ </c:when> |
|
| 110 |
+ </c:choose> |
|
| 44 | 111 |
|
| 45 |
- <p class="template_text"> |
|
| 46 |
- <c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
|
|
| 47 |
- </p> |
|
| 48 |
- |
|
| 49 |
- <c:choose> |
|
| 50 |
- <c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
|
|
| 51 |
- <p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>
|
|
| 52 |
- </c:when> |
|
| 53 |
- <c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
|
|
| 54 |
- <p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
|
|
| 55 |
- </c:when> |
|
| 56 |
- </c:choose> |
|
| 57 |
- |
|
| 58 |
- <c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
|
|
| 59 |
- <c:choose> |
|
| 60 |
- <c:when test="${templatInfoButtonList.name eq '채널 추가'}">
|
|
| 61 |
- <button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button> |
|
| 62 |
- </c:when> |
|
| 63 |
- <c:otherwise> |
|
| 64 |
- <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
|
| 65 |
- </c:otherwise> |
|
| 66 |
- </c:choose> |
|
| 67 |
- </c:forEach> |
|
| 68 |
- </div> |
|
| 69 |
- |
|
| 70 |
- <c:if test="${resultMsgDetail.adFlag eq 'Y'}">
|
|
| 71 |
- <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p> |
|
| 72 |
- </c:if> |
|
| 73 |
- |
|
| 74 |
- </div> |
|
| 75 |
- </div> |
|
| 76 |
- <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> |
|
| 77 |
- </div> |
|
| 78 |
- </div> |
|
| 79 |
- <!--// 카카오 알림톡 미리보기 --> |
|
| 112 |
+ <p class="template_text"> |
|
| 113 |
+ <c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
|
|
| 114 |
+ </p> |
|
| 115 |
+ |
|
| 116 |
+ <c:choose> |
|
| 117 |
+ <c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
|
|
| 118 |
+ <p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>
|
|
| 119 |
+ </c:when> |
|
| 120 |
+ <c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
|
|
| 121 |
+ <p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
|
|
| 122 |
+ </c:when> |
|
| 123 |
+ </c:choose> |
|
| 124 |
+ |
|
| 125 |
+ <c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
|
|
| 126 |
+ <c:choose> |
|
| 127 |
+ <c:when test="${templatInfoButtonList.name eq '채널 추가'}">
|
|
| 128 |
+ <button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button> |
|
| 129 |
+ </c:when> |
|
| 130 |
+ <c:otherwise> |
|
| 131 |
+ <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
|
| 132 |
+ </c:otherwise> |
|
| 133 |
+ </c:choose> |
|
| 134 |
+ </c:forEach> |
|
| 135 |
+ </div> |
|
| 136 |
+ |
|
| 137 |
+ <c:if test="${resultMsgDetail.adFlag eq 'Y'}">
|
|
| 138 |
+ <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p> |
|
| 139 |
+ </c:if> |
|
| 140 |
+ |
|
| 141 |
+ </div> |
|
| 142 |
+ </div> |
|
| 143 |
+ </div> |
|
| 144 |
+ <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> |
|
| 145 |
+ </div> |
|
| 146 |
+ </c:if> |
|
| 147 |
+ </div> |
|
| 148 |
+ |
|
| 80 | 149 |
|
| 81 | 150 |
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
| 82 |
- <!-- 문자 미리보기 --> |
|
| 83 |
- <div class="tab_phone" id="tab_phone_2" style="display: none;position:relative;"> |
|
| 84 |
-<!-- <div class="tab_phone" id="tab_phone_2" > --> |
|
| 85 |
-<!-- <div class="tab_phone" id="tab_phone_2" style="display:none" > --> |
|
| 86 |
- <div class="phoneIn"> |
|
| 87 |
- <div> |
|
| 88 |
- <div class="text_length2 clearfix"> |
|
| 89 |
- <span>발송일시 : <fmt:formatDate value="${parsedDate}" pattern="yyyy-MM-dd HH:mm:ss"/></span>
|
|
| 90 |
- <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
|
| 91 |
- <c:choose> |
|
| 92 |
- <c:when test="${resultMsgDetail.bizKakaoResendType eq 'SMS'}">
|
|
| 93 |
- <span class="msg_com msg_short">단문</span> |
|
| 94 |
- </c:when> |
|
| 95 |
- <c:otherwise> |
|
| 96 |
- <span class="msg_com msg_long">장문</span> |
|
| 97 |
- </c:otherwise> |
|
| 98 |
- </c:choose> |
|
| 99 |
-<%-- <c:choose> |
|
| 100 |
- <c:when test="${resultMsgDetail.bizKakaoResendTypeCnt > 1}">
|
|
| 101 |
- <span class="msg_com msg_short" style="float:right;">단문</span> |
|
| 102 |
- <span class="msg_com msg_long" style="float:right;">장문</span> |
|
| 103 |
- </c:when> |
|
| 104 |
- <c:when test="${resultMsgDetail.bizKakaoResendTypeCnt < 2
|
|
| 105 |
- && resultMsgDetail.bizKakaoResendType eq 'SMS'}"> |
|
| 106 |
- <span class="msg_com msg_short" style="float:right;">단문</span> |
|
| 107 |
- </c:when> |
|
| 108 |
- <c:otherwise> |
|
| 109 |
- <span class="msg_com msg_long" style="float:right;">장문</span> |
|
| 110 |
- </c:otherwise> |
|
| 111 |
- </c:choose> --%> |
|
| 112 |
- </c:if> |
|
| 113 |
- <!-- <div> |
|
| 114 |
- <span>글자크기</span> |
|
| 115 |
- <button type="button" onclick="changeFontSize('plus');"><img src="/publish/images/content/font_plus.png"></button>
|
|
| 116 |
- <button type="button" onclick="changeFontSize('minus');"><img src="/publish/images/content/font_minus.png"></button>
|
|
| 117 |
- </div> --> |
|
| 151 |
+ <!-- 문자 미리보기 --> |
|
| 152 |
+ <div class="tab_phone" id="tab_phone_2" style="display: none;position:relative;"> |
|
| 153 |
+<!-- <div class="tab_phone" id="tab_phone_2" > --> |
|
| 154 |
+<!-- <div class="tab_phone" id="tab_phone_2" style="display:none" > --> |
|
| 155 |
+ <div class="phoneIn"> |
|
| 156 |
+ <div> |
|
| 157 |
+ <div class="rev_pop_middle clearfix"> |
|
| 158 |
+ <span>발송일시 : <fmt:formatDate value="${parsedDate}" pattern="yyyy-MM-dd HH:mm:ss"/></span>
|
|
| 159 |
+ <c:choose> |
|
| 160 |
+ <c:when test="${not empty fileInfos}">
|
|
| 161 |
+ <span class="msg_com msg_photo" style="float:right;">그림</span> |
|
| 162 |
+ </c:when> |
|
| 163 |
+ <c:otherwise> |
|
| 164 |
+ <c:choose> |
|
| 165 |
+ <c:when test="${resultMsgDetail.bizKakaoResendType eq 'SMS'}">
|
|
| 166 |
+ <span class="msg_com msg_short" style="float:right;">단문</span> |
|
| 167 |
+ </c:when> |
|
| 168 |
+ <c:otherwise> |
|
| 169 |
+ <span class="msg_com msg_long" style="float:right;">장문</span> |
|
| 170 |
+ </c:otherwise> |
|
| 171 |
+ </c:choose> |
|
| 172 |
+ </c:otherwise> |
|
| 173 |
+ </c:choose> |
|
| 118 | 174 |
</div> |
| 119 |
- <div class="text_preview"> |
|
| 120 |
- <c:if test="${not empty fileInfos}">
|
|
| 175 |
+ <div class="text_preview"> |
|
| 176 |
+ <c:if test="${not empty fileInfos}">
|
|
| 121 | 177 |
<div class="preiew_img"> |
| 122 | 178 |
<c:forEach var="fileInfo" items="${fileInfos}">
|
| 123 | 179 |
<div class="img_box"> |
... | ... | @@ -126,23 +182,22 @@ |
| 126 | 182 |
</c:forEach> |
| 127 | 183 |
</div> |
| 128 | 184 |
</c:if> |
| 129 |
- <div class="preview_auto"> |
|
| 130 |
- |
|
| 185 |
+ <div class="rev_pop_txt"> |
|
| 131 | 186 |
<c:if test="${resultMsgDetail.adFlag eq 'Y'}">
|
| 132 | 187 |
<p class="ad_tit">(광고)</p> |
| 133 | 188 |
</c:if> |
| 134 |
- <p class="realtime">${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}</p>
|
|
| 135 |
- |
|
| 189 |
+ <p class="realtime">${fn:replace(resultMsgDetail.smsTxt, newLineChar, "<br/>")}</p>
|
|
| 190 |
+ |
|
| 136 | 191 |
<c:if test="${resultMsgDetail.adFlag eq 'Y'}">
|
| 137 | 192 |
<p class="deny_receipt">무료거부 0808800858</p> |
| 138 | 193 |
</c:if> |
| 139 |
- </div> |
|
| 140 |
- </div> |
|
| 141 |
- </div> |
|
| 142 |
- </div> |
|
| 143 |
- <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> |
|
| 144 |
- </div> |
|
| 145 |
- </c:if> |
|
| 146 |
- <!--// 문자 미리보기 --> |
|
| 194 |
+ </div> |
|
| 195 |
+ </div> |
|
| 196 |
+ </div> |
|
| 197 |
+ </div> |
|
| 198 |
+ <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> |
|
| 199 |
+ </div> |
|
| 200 |
+ </c:if> |
|
| 201 |
+ <!--// 문자 미리보기 --> |
|
| 147 | 202 |
</div> |
| 148 | 203 |
(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
... | ... | @@ -644,12 +644,7 @@ |
| 644 | 644 |
<ul class="list_tab"> |
| 645 | 645 |
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
| 646 | 646 |
<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
|
| 647 |
- <c:if test="${pageContext.request.serverName == 'localhost'
|
|
| 648 |
- || pageContext.request.serverName == '119.193.215.98' |
|
| 649 |
- || pageContext.request.serverName == '192.168.0.176' |
|
| 650 |
- }"> |
|
| 651 |
- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
|
|
| 652 |
- </c:if> |
|
| 647 |
+ <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
|
|
| 653 | 648 |
</ul><!--// tab button --> |
| 654 | 649 |
</div> |
| 655 | 650 |
<!-- 예약관리 > 전체 --> |
--- src/main/webapp/WEB-INF/jsp/web/pay/PayUserMsgDetailPopAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayUserMsgDetailPopAjax.jsp
... | ... | @@ -11,7 +11,7 @@ |
| 11 | 11 |
<%-- <label for="subject" class="label">발송된 문자 제목</label> |
| 12 | 12 |
<input type="text" id="subject" name="subject" placeholder="${resultMsgDetail.subject}" value="${resultMsgDetail.subject}" readonly> --%>
|
| 13 | 13 |
<div class="rev_pop_middle clearfix"> |
| 14 |
- <span>발송일시 : <c:out value="${resultMsgDetail.sentDate}"/></span>
|
|
| 14 |
+ <span>발송일시 : <c:out value="${resultMsgDetail.reqDate}"/></span>
|
|
| 15 | 15 |
<c:choose> |
| 16 | 16 |
<c:when test="${resultMsgDetail.msgType == '4'}">
|
| 17 | 17 |
<span class="msg_com msg_short">SMS</span> |
--- src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp
... | ... | @@ -563,7 +563,7 @@ |
| 563 | 563 |
<li class="tab"><button type="button" onclick="payUserTab(this,'mms');">그림</button></li> |
| 564 | 564 |
<li class="tab"><button type="button" onclick="payUserTab(this,'cam');">선거</button></li> |
| 565 | 565 |
<li class="tab"><button type="button" onclick="payUserTab(this,'at');">알림톡</button></li> |
| 566 |
-<!-- <li class="tab"><button type="button" onclick="payUserTab(this,'ft');">친구톡</button></li> --> |
|
| 566 |
+ <li class="tab"><button type="button" onclick="payUserTab(this,'ft');">친구톡</button></li> |
|
| 567 | 567 |
<li class="tab"><button type="button" onclick="payUserTab(this,'fax');">팩스</button></li> |
| 568 | 568 |
</ul> |
| 569 | 569 |
<!--// tab button --> |
--- src/main/webapp/publish/css/popupLayer.css
+++ src/main/webapp/publish/css/popupLayer.css
... | ... | @@ -512,8 +512,7 @@ |
| 512 | 512 |
/* 예약관리 */ |
| 513 | 513 |
/* 예약관리 - 문자내용 */ |
| 514 | 514 |
.rev_pop_in input[type="text"] {background-color: #f2f2f2; width: 100%; height: 50px; border-radius: 5px;}
|
| 515 |
-.rev_pop_in input[type="text"]::placeholder {font-size: 17px; color: #222; font-weight: 400
|
|
| 516 |
-;} |
|
| 515 |
+.rev_pop_in input[type="text"]::placeholder {font-size: 17px; color: #222; font-weight: 400;}
|
|
| 517 | 516 |
.rev_pop_in input[type="text"]-ms-input-placeholder {font-size: 17px; color: #222; font-weight: 400;}
|
| 518 | 517 |
.rev_pop_middle {margin:0 0 10px;}
|
| 519 | 518 |
.rev_pop_middle span:first-child {float: left; font-size: 16px; font-weight: 300; padding-top: 5px;}
|
... | ... | @@ -1077,6 +1076,7 @@ |
| 1077 | 1076 |
.kakao_rev_popup .kakao_wrap .allimtalk_title::after{position: absolute; content: " "; width: 42px; height: 42px; background: url(/publish/images/content/icon_kakao01.png) no-repeat; right: -20px; top: -10px;}
|
| 1078 | 1077 |
.kakao_rev_popup .kakao_wrap .allimtalk_title img{margin: 0 8px 0 0; vertical-align: bottom;}
|
| 1079 | 1078 |
.kakao_rev_popup .kakao_wrap .allimtalk_content{width: calc(100% - 60px);background-color: #fff; border-radius: 0 0 5px 5px; padding: 0 0 10px 0; margin: 0 0 20px 0;}
|
| 1079 |
+.kakao_rev_popup .kakao_wrap .friendtalk .allimtalk_content{margin:0;}
|
|
| 1080 | 1080 |
.kakao_rev_popup .kakao_wrap .allimtalk_content .kakao_image img{width: 100%;}
|
| 1081 | 1081 |
.kakao_rev_popup .kakao_wrap .allimtalk_content p{width: calc(100% - 20px); white-space: normal; word-break: break-all; line-height: 1.4; padding: 0 10px; margin: 0 auto;}
|
| 1082 | 1082 |
.kakao_rev_popup .kakao_wrap .allimtalk_content .template_text,.kakao_rev_popup .kakao_wrap .allimtalk_content .emphasis_title_text{font-size: 16px; font-weight: 500; color: #222;}
|
... | ... | @@ -1091,6 +1091,15 @@ |
| 1091 | 1091 |
.kakao_rev_popup .kakao_wrap .allimtalk_content .template_text+.btn_kakao_type{margin-top: 8px;}
|
| 1092 | 1092 |
.kakao_rev_popup .kakao_wrap .allimtalk_content .btn_kakao_channel{width: calc(100% - 20px); height: 40px; font-size: 15px; border-radius: 5px; background-color: #ffea00;}
|
| 1093 | 1093 |
.kakao_rev_popup .kakao_wrap .allimtalk_content .btn_kakao_type{width: calc(100% - 20px); height: 40px; font-size: 15px; border-radius: 5px; background-color: #ededed;}
|
| 1094 |
+.kakao_rev_popup .tab_phone .addText{margin:8px 0 0 0;color:#002c9a;font-size:14px;}
|
|
| 1095 |
+ |
|
| 1096 |
+/* 카카오톡 발송결과, 예약관리 문자내용 보기 - 친구톡 */ |
|
| 1097 |
+.kakao_rev_popup .kakao_wrap .friendtalk .allimtalk_content{border-radius:5px;}
|
|
| 1098 |
+.kakao_rev_popup .kakao_wrap .friendtalk .kakao_image{border-radius:5px 5px 0 0;overflow:hidden;}
|
|
| 1099 |
+.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt{padding:20px;}
|
|
| 1100 |
+.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt p {margin:0 0 10px 0;font-size: 15px;color:#777;}
|
|
| 1101 |
+.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt .template_text{padding:10px 10px 0 10px;}
|
|
| 1102 |
+.kakao_rev_popup .kakao_wrap .friendtalk .rev_pop_txt p.kakao_block_text{width:calc(100% - 60px);text-align:right;font-size:13px;color:#555;font-weight:300;margin:10px 0 0 0;}
|
|
| 1094 | 1103 |
|
| 1095 | 1104 |
/* 카카오테스트발송 팝업 */ |
| 1096 | 1105 |
.test_sendpop.kakao_rev_popup .kakao_wrap .phone .phoneIn{height: 620px; background-image: url(/publish/images/content/kakaoBg.png);padding: 28px 19px 0 19px;}
|
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?