알림톡 api 단문발송 - 대체문자 추가 진행중

This commit is contained in:
hehihoho3@gmail.com 2025-08-11 11:08:46 +09:00
parent 3a743c6ddc
commit e9aa136932
7 changed files with 1118 additions and 1021 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,6 @@
package com.itn.mjonApi.mjon.api.kakao.at.send.mapper.domain;
import com.itn.mjonApi.cmn.domain.SendRequestCmnVO;
import lombok.*;
import java.io.Serializable;
@ -25,10 +26,14 @@ import java.util.stream.Collectors;
@ToString
@Getter
@Setter
public class MsgAtRequestVO implements Serializable {
public class MsgAtRequestVO extends SendRequestCmnVO implements Serializable {
private static final long serialVersionUID = 1L;
private String sendKind = "A";
private String mberId; // value = "사용자 ID", example = "goodgkdus"
private String accessKey; // value = "Api Key", example = "0367a25ec370d1141898a0b9767103"
@ -37,11 +42,22 @@ public class MsgAtRequestVO implements Serializable {
private String templateCode; // 카카오 알림톡 템플릿 코드
private String[] callToList; // value = "수신번호리스트", dataType = "[Ljava.lang.String;", example = "01011112222,01022223333"
// private String[] callToList; // value = "수신번호리스트", dataType = "[Ljava.lang.String;", example = "01011112222,01022223333"
private String callFrom; // value = "발신번호 :: 정책이 필요함", example = "01011112222"
private String sendKind = "A";
private String templateContent_1; // 카카오 분문
private String templateContent_2; // 카카오 분문
private String templateTitle_1; // 카카오 타이틀
private String templateTitle_2; // 카카오 타이틀
// 대체문자 여부
private String subMsgSendYn;
// 대체문자 내용
private String subMsgTxt;
private String test_yn;

View File

@ -40,5 +40,16 @@ public class VarListMapVO {
// * @description : [*4*] - 치환문자
// */
// private String rep4;
//
// /**
// * @description : 제목
// */
// private String subject;
//
// /**
// * @description : 내용
// */
// private String message;
}

View File

@ -16,6 +16,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
@ -54,6 +56,8 @@ public class SendAtServiceImpl implements SendAtService {
// return this._getTestMsgReturnData(msgRequestVO.getTest_yn());
}
// 1. [공통 모듈 호출] 'callTo_' 필드에서 전화번호를 한번만 추출합니다.
List<String> phoneNumbers = MunjaUtil.extractCallToNumbers(msgAtRequestVO);
// step2.수신자 전화번호 정상 여부 체크(정상 번호에 대해서만 발송 가능)
// 1020

View File

@ -43,10 +43,10 @@ public class SendAtRestController {
@PostMapping("/api/kakao/at/sendMsg")
public ResponseEntity<RestResponse> sendMsg(MsgAtRequestVO msgAtRequestVO) throws Exception {
// https://smartsms.aligo.in/friendapi.html
// https://smartsms.aligo.in/alimapi.html
return ResponseEntity.ok().body(sendAtService.sendAtData(msgAtRequestVO));
// return ResponseEntity.ok().body(sendService.sendMsgData(msgRequestVO));
// return ResponseEntity.ok().body(new RestResponse(msgAtRequestVO));
}
/**

View File

@ -3,6 +3,10 @@ package com.itn.mjonApi.util;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
/**
* packageName : com.itn.mjonApi.util
* fileName : SendUtil
@ -17,16 +21,6 @@ import org.apache.commons.lang3.StringUtils;
public class MunjaUtil {
/**
* 폰번호 유효성 검사
* @param callTo
* @return
*/
public static Boolean validatePNumWithRegex(String callTo){
// 핸드폰 정규식
String regex = "^01(?:0|1|[6-9])(?:\\d{3}|\\d{4})\\d{4}$";
return callTo.matches(regex) ? true : false;
}
/**
* 폰번호 빈값 검사
* @param str
@ -87,4 +81,61 @@ public class MunjaUtil {
}
/**
* [핵심 공통 모듈]
* 객체에서 'callTo_' 시작하는 모든 필드 값을 추출하여 리스트로 반환합니다.
* @param vo 'callTo_' 필드를 가진 객체
* @return 추출된 전화번호 문자열 리스트 (값이 없는 필드는 제외됨)
*/
public static List<String> extractCallToNumbers(Object vo) {
List<String> phoneNumbers = new ArrayList<>();
if (vo == null) {
return phoneNumbers;
}
try {
Field[] fields = vo.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.getName().startsWith("callTo_")) {
field.setAccessible(true);
Object value = field.get(vo);
// 필드 값이 존재하고, 문자열이 아닌 경우에만 리스트에 추가
if (value instanceof String && org.springframework.util.StringUtils.hasText((String) value)) {
phoneNumbers.add((String) value);
}
}
}
} catch (IllegalAccessException e) {
// 실제 운영에서는 로깅 처리가 필요합니다.
e.printStackTrace();
}
return phoneNumbers;
}
/**
* [리팩토링된 유효성 검사]
* 추출된 번호 리스트를 받아 유효성을 검사합니다.
* @param phoneNumbers 검사할 번호 리스트
* @return 유효하지 않으면 true, 모두 유효하면 false
*/
public static boolean hasInvalidPhoneNumber(List<String> phoneNumbers) {
// 1. 추출된 번호가 하나도 없으면 실패
if (phoneNumbers == null || phoneNumbers.isEmpty()) {
return true;
}
// 2. 리스트의 모든 번호가 정규식에 맞는지 확인
// 하나라도(!allMatch) 정규식에 맞지 않으면 true 반환
return !phoneNumbers.stream().allMatch(MunjaUtil::validatePNumWithRegex);
}
// 기존 정규식 검사 메서드 (변경 없음)
public static boolean validatePNumWithRegex(String pNum) {
return pNum != null && pNum.matches("^\\d{10,11}$");
}
}