From 809177841013d3c08825fa46f5e1b3f512a2227a Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Fri, 20 Jun 2025 18:25:55 +0900 Subject: [PATCH 01/19] =?UTF-8?q?api=20=EB=AC=B8=EC=9E=90=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20=EC=8B=9C=20advc=20=EB=B2=84=EC=A0=84=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95=20=EC=A4=91=20=EB=AC=B8=EC=9E=90?= =?UTF-8?q?=EB=B0=9C=EC=86=A1=EC=9D=80=20=EC=99=84=EB=A3=8C=20(=20?= =?UTF-8?q?=EB=8C=80=EB=9F=89=EC=A7=84=ED=96=89=EC=A4=91=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itn/mjonApi/cmn/apiServer/ApiService.java | 21 +++- .../cmn/interceptor/CertifInterceptor.java | 3 +- .../api/send/mapper/domain/MjonMsgSendVO.java | 44 +++++++ .../send/mapper/domain/MjonResponseVO.java | 15 ++- .../api/send/mapper/domain/MsgRequestVO.java | 32 ++++- .../mjon/api/send/service/SendService.java | 2 + .../send/service/impl/SendServiceImpl.java | 115 ++++++++++++++++-- .../mjon/api/send/web/SendRestController.java | 3 +- src/main/resources/application-dev.properties | 3 +- 9 files changed, 220 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonMsgSendVO.java diff --git a/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java b/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java index eb709ae..9fe8ff9 100644 --- a/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java +++ b/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java @@ -1,7 +1,10 @@ package com.itn.mjonApi.cmn.apiServer; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.itn.mjonApi.mjon.api.send.mapper.domain.MjonResponseVO; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -18,6 +21,7 @@ import org.springframework.web.client.RestTemplate; * ----------------------------------------------------------- * 2023-05-15 hylee 최초 생성 */ +@Slf4j @Service public class ApiService { @@ -37,13 +41,24 @@ public class ApiService { * @throws JsonProcessingException */ public MjonResponseVO postForEntity(String url, Object request, Class responseType) throws JsonProcessingException { - ResponseEntity spamChkEntity = (ResponseEntity) restTemplate.postForEntity( + ResponseEntity returnEntity = (ResponseEntity) restTemplate.postForEntity( url , request , responseType ); - MjonResponseVO spamResponse = MjonResponseVO.getMjonResponse(spamChkEntity); - return spamResponse; + log.info("returnEntity :: [{}]", returnEntity.toString()); + // ObjectMapper로 JSON 파싱 + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(returnEntity.getBody()); + + // "apiReturn" 필드만 추출 + JsonNode apiReturnNode = rootNode.get("apiReturn"); + if (apiReturnNode == null || apiReturnNode.isNull()) { + log.warn("apiReturn 필드가 응답에 존재하지 않습니다."); + return null; + } + + return MjonResponseVO.getMjonResponse(apiReturnNode); } } diff --git a/src/main/java/com/itn/mjonApi/cmn/interceptor/CertifInterceptor.java b/src/main/java/com/itn/mjonApi/cmn/interceptor/CertifInterceptor.java index 96ed4b0..cd373ce 100644 --- a/src/main/java/com/itn/mjonApi/cmn/interceptor/CertifInterceptor.java +++ b/src/main/java/com/itn/mjonApi/cmn/interceptor/CertifInterceptor.java @@ -150,7 +150,8 @@ public class CertifInterceptor implements HandlerInterceptor{ //referer 값이 없으면 serverIP 값으로 대체한다. if ("".equals(referer) || referer==null) { referer = serverIp; - } + } + referer= "119.193.215.98"; log.info("certi request.getParameter(\"accessKey\") :: [{}]", request.getParameter("accessKey")); // hylee Builder 패턴으로 변경 => 20230516 AccessKeyVO accessKeyVO = accessKeyService.selectRKey( diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonMsgSendVO.java b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonMsgSendVO.java new file mode 100644 index 0000000..8dbbb3a --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonMsgSendVO.java @@ -0,0 +1,44 @@ +package com.itn.mjonApi.mjon.api.send.mapper.domain; + + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +public class MjonMsgSendVO{ + + + /** + * @description : 수신자번호 + */ + private String phone; + + /** + * @description : [*이름*] - 치환문자 + */ + private String name; + + /** + * @description : [*1*] - 치환문자 + */ + private String rep1; + + /** + * @description : [*2*] - 치환문자 + */ + private String rep2; + + /** + * @description : [*3*] - 치환문자 + */ + private String rep3; + + /** + * @description : [*4*] - 치환문자 + */ + private String rep4; + +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java index c4efb88..ee37fe4 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java @@ -1,6 +1,8 @@ package com.itn.mjonApi.mjon.api.send.mapper.domain; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.*; import org.springframework.http.ResponseEntity; @@ -21,6 +23,8 @@ import org.springframework.http.ResponseEntity; @Builder @NoArgsConstructor @AllArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) // JSON에 있지만 VO에 없는 필드를 무시하고 무사히 역직렬화해 줌 +@ToString public class MjonResponseVO { private String result; @@ -33,14 +37,17 @@ public class MjonResponseVO { /** * - * @param stringResponseEntity + * @param JsonNode apiReturnNode * @return ResponseEntity vo convert * @throws JsonProcessingException */ - public static MjonResponseVO getMjonResponse(ResponseEntity stringResponseEntity) throws JsonProcessingException { + public static MjonResponseVO getMjonResponse(JsonNode apiReturnNode) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); - MjonResponseVO mjonResponseVO = objectMapper.readValue(stringResponseEntity.getBody(), MjonResponseVO.class); - return mjonResponseVO; + return objectMapper.treeToValue(apiReturnNode, MjonResponseVO.class); } +// public static MjonResponseVO getMjonResponse(ResponseEntity stringResponseEntity) throws JsonProcessingException { +// ObjectMapper objectMapper = new ObjectMapper(); +// return objectMapper.readValue(stringResponseEntity.getBody(), MjonResponseVO.class); +// } } diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgRequestVO.java b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgRequestVO.java index e305e6d..9055f00 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgRequestVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgRequestVO.java @@ -3,6 +3,7 @@ package com.itn.mjonApi.mjon.api.send.mapper.domain; import lombok.*; import java.io.Serializable; +import java.util.List; /** * packageName : com.itn.mjonApi.mjon.api.send.mapper.domain @@ -18,6 +19,7 @@ import java.io.Serializable; @NoArgsConstructor @AllArgsConstructor @Builder +@ToString public class MsgRequestVO implements Serializable { /** @@ -33,6 +35,8 @@ public class MsgRequestVO implements Serializable { private String smsTxt; // value = "SMS용 메시지본문", example = "문자 메세지 본문" + private String smsTxtArea;//문자 작성 화면 본문 내용 + private String[] callToList; // value = "수신번호리스트", dataType = "[Ljava.lang.String;", example = "01011112222,01022223333" private String callFrom; // value = "발신번호 :: 정책이 필요함", example = "01011112222" @@ -98,6 +102,9 @@ public class MsgRequestVO implements Serializable { private String test_yn; // 테스트 여부 + private String sendKind; // 테스트 여부 + + List mjonMsgSendVOList; // private String msgId ;// '문자ID', // private String userId ; // '문자온 일반회원ID', @@ -113,7 +120,6 @@ public class MsgRequestVO implements Serializable { // private String rsltCode2; // '결과처리 상세코드', // private String rsltNet; // '결과처리 통신사', // private String subject; // 'MMS용 메시지제목', -// private String smsTxtArea;//문자 작성 화면 본문 내용 // private String msgPayCode; // '재전송 기능에 의한 최종전송콘텐트 종류 저장', // private String contSeq; // COMMENT 'MMS의 콘텐츠 Key(MMS_CONTENTS_INFO의 CONT_SEQ)', // private String msgTypeResend; // '재전송할 문자 타입. 값이 있으면 재전송. 없으면 단 건 전송', @@ -228,6 +234,14 @@ public class MsgRequestVO implements Serializable { this.smsTxt = smsTxt; } + public String getSmsTxtArea() { + return smsTxtArea; + } + + public void setSmsTxtArea(String smsTxtArea) { + this.smsTxtArea = smsTxtArea; + } + public String[] getCallToList() { return callToList; } @@ -475,4 +489,20 @@ public class MsgRequestVO implements Serializable { public void setTest_yn(String test_yn) { this.test_yn = test_yn; } + + public String getSendKind() { + return sendKind; + } + + public void setSendKind(String sendKind) { + this.sendKind = sendKind; + } + + public List getMjonMsgSendVOList() { + return mjonMsgSendVOList; + } + + public void setMjonMsgSendVOList(List mjonMsgSendVOList) { + this.mjonMsgSendVOList = mjonMsgSendVOList; + } } diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java b/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java index 8362c06..60e220a 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java @@ -9,5 +9,7 @@ public interface SendService { RestResponse sendMsgData(MsgRequestVO msgRequestVO) throws Exception; + RestResponse sendMsgData_advc(MsgRequestVO msgRequestVO) throws Exception; + RestResponse sendMsgsData(MsgsRequestVO msgsRequestVO) throws Exception; } diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java index 83fc8aa..8e5b394 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java @@ -8,10 +8,7 @@ import com.itn.mjonApi.cmn.msg.StatMsg; import com.itn.mjonApi.mjon.api.inqry.mapper.PriceMapper; import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceVO; import com.itn.mjonApi.mjon.api.send.mapper.SendMapper; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MjonResponseVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.SendSucRestResponse; +import com.itn.mjonApi.mjon.api.send.mapper.domain.*; import com.itn.mjonApi.mjon.api.send.service.SendService; import com.itn.mjonApi.util.MunjaUtil; import lombok.extern.slf4j.Slf4j; @@ -25,6 +22,7 @@ import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.concurrent.atomic.AtomicInteger; @@ -132,7 +130,7 @@ public class SendServiceImpl implements SendService { log.info("munjaSendResponse : [{}]", munjaSendResponse.getResult()); // convertMjonDataToApiResponse => MjonResponseVO 데이터를 ApiResponse 데이터로 변환하는 메소드 - if(!munjaSendResponse.getResult().equals("fail")){ // 성공 + if(!"fail".equals(munjaSendResponse.getResult())){ // 성공 return new RestResponse(SendSucRestResponse.convertMjonDataToApiResponse(munjaSendResponse)); }else{ // 실패 return new RestResponse(new FailRestResponse(StatMsg.randomErrorStatCode(),"")); @@ -146,6 +144,102 @@ public class SendServiceImpl implements SendService { } + + @Override + public RestResponse sendMsgData_advc(MsgRequestVO msgRequestVO) throws Exception { + + msgRequestVO.setSendKind("A"); + + if(StringUtils.isNotEmpty(msgRequestVO.getTest_yn())){ + // YF => 실패 테스트 데이터 + return this._getTestMsgReturnData(msgRequestVO.getTest_yn()); + } + + + + // step2.수신자 전화번호 정상 여부 체크(정상 번호에 대해서만 발송 가능) + // 1020 + // 폰번호 확인 - 빈 값 -> 유효성 정규식 + if(this.getCallToListChk(msgRequestVO)){ + return new RestResponse(new FailRestResponse("STAT_1020","")); + } + + + + //step4.치환명 정상 여부 확인 + // 1040 + msgRequestVO.setTxtReplYn(this.getTxtReplYn(msgRequestVO)); + // 치환데이터가 있을 경우 + if("Y".equals(msgRequestVO.getTxtReplYn())){ + // 치환 데이터 생성 + msgRequestVO.setMjonMsgSendVOList(this.buildMsgSendVOList(msgRequestVO)); + } + msgRequestVO.setSmsTxtArea(msgRequestVO.getSmsTxt()); + + + MjonResponseVO munjaSendResponse = apiService.postForEntity( + "/web/mjon/msgdata/sendMsgDataAjax_advc.do" +// "/web/user/login/sendMsgDataAjax.do" + , msgRequestVO + , String.class + ); + + // convertMjonDataToApiResponse => MjonResponseVO 데이터를 ApiResponse 데이터로 변환하는 메소드 + if(!"fail".equals(munjaSendResponse.getResult())){ // 성공 + return new RestResponse(SendSucRestResponse.convertMjonDataToApiResponse(munjaSendResponse)); + }else{ // 실패 + return new RestResponse(new FailRestResponse(StatMsg.randomErrorStatCode(),"")); + } + + + + } + + /** + * MsgRequestVO 내 nameStr, rep1Str~rep4Str, callToList 를 기반으로 + * 각 항목을 MjonMsgSendVO 리스트로 매핑한다. + * + * @param msgRequestVO 메시지 요청 VO + * @return 수신자별 메시지 전송 VO 리스트 + */ + public List buildMsgSendVOList(MsgRequestVO msgRequestVO) { + + // 수신자 이름 및 치환 문자들 파싱 (null-safe 처리) + String[] nameArr = Optional.ofNullable(msgRequestVO.getNameStr()).orElse("").split("\\|"); + String[] rep1Arr = Optional.ofNullable(msgRequestVO.getRep1Str()).orElse("").split("\\|"); + String[] rep2Arr = Optional.ofNullable(msgRequestVO.getRep2Str()).orElse("").split("\\|"); + String[] rep3Arr = Optional.ofNullable(msgRequestVO.getRep3Str()).orElse("").split("\\|"); + String[] rep4Arr = Optional.ofNullable(msgRequestVO.getRep4Str()).orElse("").split("\\|"); + + // 콤마(,) 기준으로 수신 번호 문자열을 파싱 + String[] phoneArr = Optional.ofNullable(msgRequestVO.getCallToList()) + .orElse(new String[0]); + + + + List mjonMsgSendVOList = new ArrayList<>(); + + // 수신 번호 개수만큼 반복 + for (int i = 0; i < phoneArr.length; i++) { + MjonMsgSendVO vo = new MjonMsgSendVO(); + + // 1. 수신 번호 세팅 + vo.setPhone(phoneArr[i].trim()); + + // 2. 이름/치환문자 세팅 + if (i < nameArr.length) vo.setName(nameArr[i].trim()); + if (i < rep1Arr.length) vo.setRep1(rep1Arr[i].trim()); + if (i < rep2Arr.length) vo.setRep2(rep2Arr[i].trim()); + if (i < rep3Arr.length) vo.setRep3(rep3Arr[i].trim()); + if (i < rep4Arr.length) vo.setRep4(rep4Arr[i].trim()); + + mjonMsgSendVOList.add(vo); + } + + return mjonMsgSendVOList; + } + + private static int getFrBytes(MsgRequestVO msgRequestVO) throws UnsupportedEncodingException { String smsCont = msgRequestVO.getSmsTxt().replace("\r\n", "\n"); int FrBytes = smsCont.getBytes("euc-kr").length; @@ -222,6 +316,8 @@ public class SendServiceImpl implements SendService { //step1.발신자 전화번호 사용 가능 여부 체크(해당 사용자의 기 등록된 번호만 발송 가능) // 1010 + log.info("msgRequestVOList : [{}]", msgRequestVOList.size()); + log.info("msgRequestVOList : [{}]", msgRequestVOList.get(0).toString()); if(!sendMapper.findByCallFrom(msgRequestVOList.get(0))){ return new RestResponse(new FailRestResponse("STAT_1010","")); } @@ -285,10 +381,12 @@ public class SendServiceImpl implements SendService { msgRequestVO.setSpamStatus("Y"); }; + log.info("msgRequestVO : [{}]", msgRequestVO.toString()); // 문자 전송하는 부분 // apiService.postForEntity => restTemplate.postForEntity 호출 후 MjonResponseVO에 맞게 데이터 정제하는 메소드 MjonResponseVO munjaSendResponse = apiService.postForEntity( - "/web/user/login/sendMsgDataAjax.do" + "/web/mjon/msgdata/sendMsgDataAjax_advc.do" +// "/web/user/login/sendMsgDataAjax.do" , msgRequestVO , String.class ); @@ -297,6 +395,8 @@ public class SendServiceImpl implements SendService { } + + return new RestResponse(SendSucRestResponse.SendSuccessMsgsRestResponse(mjonResponseVOList)); } @@ -344,6 +444,8 @@ public class SendServiceImpl implements SendService { // nullPointException 방지 if(value != null) { + log.info("field.getName() : [{}]", field.getName()); + log.info("value.toString() : [{}]", value.toString()); /** * 필드 이름으로 분기하여 * 각각에 맞는 위치에 값을 넣어준다. @@ -546,7 +648,6 @@ public class SendServiceImpl implements SendService { */ private static String getTxtReplYn(MsgRequestVO msgRequestVO) { - int callLen = msgRequestVO.getCallToList().length; // 치환 데이터 확인 Arrays.stream(replaseStrList.split(",")).forEach( str -> { diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java b/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java index ea1505d..8aa660e 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java @@ -49,7 +49,8 @@ public class SendRestController { @CrossOrigin("*") // 모든 요청에 접근 허용 @PostMapping("/api/send/sendMsg") public ResponseEntity sendMsg(MsgRequestVO msgRequestVO) throws Exception { - return ResponseEntity.ok().body(sendService.sendMsgData(msgRequestVO)); + return ResponseEntity.ok().body(sendService.sendMsgData_advc(msgRequestVO)); +// return ResponseEntity.ok().body(sendService.sendMsgData(msgRequestVO)); } /** diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 49778b3..29d96a2 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -13,7 +13,8 @@ server.port=8088 #logging.level.root=info #??? ?? ?? -api.root.url=http://192.168.0.60:8085/ +api.root.url=http://localhost:8080/ +#api.root.url=http://192.168.0.60:8085/ #api.root.url=https://www.munjaon.co.kr/ Ganpandaup.receiver.email=hylee250@kakao.com From 2bcecc21990ee395beade26834031fca6e34c20b Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Thu, 26 Jun 2025 11:37:23 +0900 Subject: [PATCH 02/19] =?UTF-8?q?api=20=EB=AC=B8=EC=9E=90=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20=EC=8B=9C=20advc=20=EB=B2=84=EC=A0=84=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itn/mjonApi/cmn/apiServer/ApiService.java | 3 + .../java/com/itn/mjonApi/cmn/msg/StatMsg.java | 11 +- .../send/mapper/domain/MjonResponseVO.java | 3 +- .../mapper/domain/SendSucRestResponse.java | 32 ++-- .../mjon/api/send/service/SendService.java | 2 + .../send/service/impl/SendServiceImpl.java | 150 +++++++++++++++--- .../mjon/api/send/web/SendRestController.java | 3 +- 7 files changed, 158 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java b/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java index 9fe8ff9..1a153ee 100644 --- a/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java +++ b/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java @@ -51,6 +51,9 @@ public class ApiService { ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(returnEntity.getBody()); +// log.info("rootNode :: [{}]", rootNode.toString()); + + // "apiReturn" 필드만 추출 JsonNode apiReturnNode = rootNode.get("apiReturn"); if (apiReturnNode == null || apiReturnNode.isNull()) { diff --git a/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java b/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java index 41833bd..26107be 100644 --- a/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java +++ b/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java @@ -33,7 +33,8 @@ public enum StatMsg { // 문자보내기 ====================================================================== STAT_0("0","") , STAT_1010("1010","발신자 전화번호 사용 불가") - , STAT_1020("1020","수신자 전화번호 오류") + , STAT_1020("1020","수신자 전화번호 오류") // ㅂ + , STAT_1021("1021","수신거부 번호 제거 후 수신자 목록 없음") , STAT_1030("1030","문자 내용 발송 불가") , STAT_1040("1040","치환 데이터 오류") , STAT_1050("1050","치환 후 문자 길이 초과") @@ -68,13 +69,17 @@ public enum StatMsg { } // Random을 만들기 위한 코드 + // 모든 enum 항목을 불변 리스트로 저장 private static final List VALUES = Collections.unmodifiableList(Arrays.asList(values())); + // 전체 항목 수 private static final int SIZE = VALUES.size(); + // 랜덤 인스턴스 private static final Random RANDOM = new Random(); /** - * @description : 랜덤한 에러코드를 반환한다. - * @return errorCode + * 랜덤한 에러코드를 반환한다. + * 단, 코드 값이 3자리 이하(예: "단문", "장문")인 항목은 제외된다. + * @return "STAT_코드" 형식의 문자열 */ public static String randomErrorStatCode() { String errorCode = ""; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java index ee37fe4..c4d3319 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java @@ -34,10 +34,11 @@ public class MjonResponseVO { private String msgGroupId; private String afterCash; private String msgType; + private String statCode; /** * - * @param JsonNode apiReturnNode + * @param apiReturnNode * @return ResponseEntity vo convert * @throws JsonProcessingException */ diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/SendSucRestResponse.java b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/SendSucRestResponse.java index 4b393c3..5d9012f 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/SendSucRestResponse.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/SendSucRestResponse.java @@ -85,31 +85,33 @@ public class SendSucRestResponse { */ public static SendSucRestResponse SendSuccessMsgsRestResponse(List mjonResponseVOList) { + mjonResponseVOList.forEach(t->log.info(t.toString())); + // 실패 카운트 int failCnt = (int) mjonResponseVOList.stream() - .filter(s->"fail".equals(s.getResult())) + .filter(s->!"OK".equals(s.getResult())) .count(); // 성공 카운트 - int successCnt = mjonResponseVOList.parallelStream() - .filter(s->!"fail".equals(s.getResult())) - .mapToInt(s -> Integer.parseInt(s.getResultSts())) - .sum(); + int successCnt = (int) mjonResponseVOList.parallelStream() + .filter(s->"OK".equals(s.getResult())) + .count(); // 수신거부 카운트 - int blockCnt = mjonResponseVOList.parallelStream() - .filter(s->!"fail".equals(s.getResult())) - .mapToInt(s -> Integer.parseInt(s.getResultBlockSts())) - .sum(); +// int blockCnt = mjonResponseVOList.parallelStream() +// .filter(s->!"OK".equals(s.getResult())) +// .mapToInt(s -> Integer.parseInt(s.getResultBlockSts())) +// .sum(); // 성공한 메세지 그룹 아이디 List msgGroupIdList = mjonResponseVOList.stream() - .filter(s->!"fail".equals(s.getResult())) + .filter(s->"OK".equals(s.getResult())) .map(s -> s.getMsgGroupId()) .collect(Collectors.toList()); - // 성공한 메세지 그룹 아이디 + // 메세지 타입 List msgTypeList = mjonResponseVOList.stream() - .map(s -> StatMsg.valueOf("msgType"+s.getMsgType()).getMsg()) - .collect(Collectors.toList()); + .filter(s -> s.getMsgType() != null) + .map(s -> StatMsg.valueOf("msgType"+s.getMsgType()).getMsg()) + .collect(Collectors.toList()); @@ -118,8 +120,8 @@ public class SendSucRestResponse { .resultCode(StatMsg.valueOf("STAT_0").getCode()) // 성공 코드 0 - StatMsg 참고 .msgGroupIdList(msgGroupIdList) // 전송 메세지 그룹 ID .successCnt(Integer.toString(successCnt)) // 성공 건수 - .blockCnt(Integer.toString(blockCnt)) // 수신거부 건수 - .failCnt(Integer.toString(failCnt)) // 수신거부 건수 +// .blockCnt(Integer.toString(blockCnt)) // 수신거부 건수 + .failCnt(Integer.toString(failCnt)) // 실패 건수 .msgTypeList(msgTypeList) // msgType List .build(); diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java b/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java index 60e220a..a9c79dc 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java @@ -12,4 +12,6 @@ public interface SendService { RestResponse sendMsgData_advc(MsgRequestVO msgRequestVO) throws Exception; RestResponse sendMsgsData(MsgsRequestVO msgsRequestVO) throws Exception; + + RestResponse sendMsgsData_advc(MsgsRequestVO msgsRequestVO) throws Exception; } diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java index 8e5b394..0687b5b 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java @@ -13,9 +13,11 @@ import com.itn.mjonApi.mjon.api.send.service.SendService; import com.itn.mjonApi.util.MunjaUtil; import lombok.extern.slf4j.Slf4j; import org.apache.catalina.connector.Response; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; @@ -135,18 +137,12 @@ public class SendServiceImpl implements SendService { }else{ // 실패 return new RestResponse(new FailRestResponse(StatMsg.randomErrorStatCode(),"")); } - - //step5.발송일시 정상여부 확인 - // 1050 - //step6.문자 타입에 따른 비용 처리 가능 여부 확인 - // 1060 - - } @Override public RestResponse sendMsgData_advc(MsgRequestVO msgRequestVO) throws Exception { + log.info(" :: sendMsgData_advc ::"); msgRequestVO.setSendKind("A"); @@ -155,8 +151,6 @@ public class SendServiceImpl implements SendService { return this._getTestMsgReturnData(msgRequestVO.getTest_yn()); } - - // step2.수신자 전화번호 정상 여부 체크(정상 번호에 대해서만 발송 가능) // 1020 // 폰번호 확인 - 빈 값 -> 유효성 정규식 @@ -164,31 +158,25 @@ public class SendServiceImpl implements SendService { return new RestResponse(new FailRestResponse("STAT_1020","")); } - - - //step4.치환명 정상 여부 확인 - // 1040 - msgRequestVO.setTxtReplYn(this.getTxtReplYn(msgRequestVO)); - // 치환데이터가 있을 경우 - if("Y".equals(msgRequestVO.getTxtReplYn())){ - // 치환 데이터 생성 - msgRequestVO.setMjonMsgSendVOList(this.buildMsgSendVOList(msgRequestVO)); - } + // 치환 데이터 및 수신자 번호 VO 생성 + msgRequestVO.setMjonMsgSendVOList(this.buildMsgSendVOList(msgRequestVO)); + + // sms 변수 변경 msgRequestVO.setSmsTxtArea(msgRequestVO.getSmsTxt()); MjonResponseVO munjaSendResponse = apiService.postForEntity( "/web/mjon/msgdata/sendMsgDataAjax_advc.do" -// "/web/user/login/sendMsgDataAjax.do" , msgRequestVO , String.class ); // convertMjonDataToApiResponse => MjonResponseVO 데이터를 ApiResponse 데이터로 변환하는 메소드 - if(!"fail".equals(munjaSendResponse.getResult())){ // 성공 + log.info(" + munjaSendResponse :: [{}]", munjaSendResponse.toString()); + if("OK".equals(munjaSendResponse.getResult())){ // 성공 return new RestResponse(SendSucRestResponse.convertMjonDataToApiResponse(munjaSendResponse)); }else{ // 실패 - return new RestResponse(new FailRestResponse(StatMsg.randomErrorStatCode(),"")); + return new RestResponse(new FailRestResponse(munjaSendResponse.getStatCode(),"")); } @@ -303,6 +291,7 @@ public class SendServiceImpl implements SendService { ); } } + @Override public RestResponse sendMsgsData(MsgsRequestVO msgsRequestVO) throws Exception { @@ -377,9 +366,9 @@ public class SendServiceImpl implements SendService { , String.class ); // 스팸체크 결과값이 spams 이면 스팸문자로 처리 - if("spams".equals(spamChkEntity.getResult())){ - msgRequestVO.setSpamStatus("Y"); - }; +// if("spams".equals(spamChkEntity.getResult())){ +// msgRequestVO.setSpamStatus("Y"); +// }; log.info("msgRequestVO : [{}]", msgRequestVO.toString()); // 문자 전송하는 부분 @@ -397,6 +386,41 @@ public class SendServiceImpl implements SendService { + return new RestResponse(SendSucRestResponse.SendSuccessMsgsRestResponse(mjonResponseVOList)); + } + + @Override + public RestResponse sendMsgsData_advc(MsgsRequestVO msgsRequestVO) throws Exception { + + + log.info(" :: sendMsgData_advc ::"); + + + if(StringUtils.isNotEmpty(msgsRequestVO.getTest_yn())){ + return this._getTestMsgsReturnData(msgsRequestVO.getTest_yn()); + } + + // msgsVO -> msgVO List로 변환 + List msgRequestVOList = this.getDataCleaning_advc(msgsRequestVO); + + List mjonResponseVOList = new ArrayList(); + for(MsgRequestVO aa : msgRequestVOList){ + + aa.setSmsTxtArea(aa.getSmsTxt()); + aa.setSendKind("A"); + + MjonResponseVO munjaSendResponse = apiService.postForEntity( + "/web/mjon/msgdata/sendMsgDataAjax_advc.do" + , aa + , String.class + ); + + mjonResponseVOList.add(munjaSendResponse); + } + + + + return new RestResponse(SendSucRestResponse.SendSuccessMsgsRestResponse(mjonResponseVOList)); } @@ -496,7 +520,73 @@ public class SendServiceImpl implements SendService { return msgRequestVOList; } + private static List getDataCleaning_advc(MsgsRequestVO msgsRequestVO) { + + List msgRequestVOList = new ArrayList<>(); + + // Reflection으로 Object Field에 접근한다. + Field[] declaredFields = msgsRequestVO.getClass().getDeclaredFields(); + + String mberId = msgsRequestVO.getMberId(); // 사용자 ID + String accessKey = msgsRequestVO.getAccessKey(); // accessKey + String callFrom = msgsRequestVO.getCallFrom(); // 발신자 번호 + String callTo = null; // 수신자 번호 + + List mjonMsgSendVOList = new ArrayList<>(); + for (Field field : declaredFields) { + + Object value = null; + // private Field일 경우 접근을 허용한다. + field.setAccessible(true); + + try { + // Field Value를 참조한다. + value = field.get(msgsRequestVO); + } catch (IllegalAccessException e) { + log.info("Reflection Error. {}", e); + } + + // nullPointException 방지 + if(value != null) + { + log.info("field.getName() : [{}]", field.getName()); + log.info("value.toString() : [{}]", value.toString()); + /** + * 필드 이름으로 분기하여 + * 각각에 맞는 위치에 값을 넣어준다. + */ + if(field.getName().startsWith("callTo")){ // 수신자 번호 + callTo = value.toString(); + }else if(field.getName().startsWith("smsTxt")){ // 문자 내용 + + // 값이 비여 있으면 다음 반복문으로 넘어간다. + if(StringUtils.isEmpty(value.toString())){ + callTo = ""; + continue; + } + MjonMsgSendVO vo = new MjonMsgSendVO(); + vo.setPhone(callTo); + mjonMsgSendVOList.add(vo); + + msgRequestVOList.add( + MsgRequestVO.builder() + .mberId(mberId) + .accessKey(accessKey) + .callFrom(callFrom) + .smsTxt(value.toString()) + .mjonMsgSendVOList(mjonMsgSendVOList) + .build() + ); + // 초기화 + callTo = ""; + } + + + } + } + return msgRequestVOList; + } /** * 치환 후 단문 장문 msg 개수 구하기 * @param msgRequestVO @@ -667,6 +757,13 @@ public class SendServiceImpl implements SendService { */ private static Boolean getCallToListChk(MsgRequestVO msgRequestVO) { Boolean returnData = false; + + String[] test = msgRequestVO.getCallToList(); + + if (ArrayUtils.isEmpty(test)) { + returnData = true; + } + for(String callTo : msgRequestVO.getCallToList()){ /* if(!MunjaUtil.checkPhoneNumberEmpty(callTo)){ @@ -674,7 +771,8 @@ public class SendServiceImpl implements SendService { if(!MunjaUtil.validatePNumWithRegex(callTo)){ message = "휴대폰 번호가 올바르지 않습니다. : " + callTo; break;}; */ - if(!MunjaUtil.validatePNumWithRegex(callTo) // 비여있는지 체크 + + if(!MunjaUtil.checkPhoneNumberEmpty(callTo) // 비여있는지 체크 || !MunjaUtil.validatePNumWithRegex(callTo) // 정규식으로 번호 체크 ) { diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java b/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java index 8aa660e..b446628 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java @@ -63,7 +63,8 @@ public class SendRestController { @CrossOrigin("*") // 모든 요청에 접근 허용 @PostMapping("/api/send/sendMsgs") public ResponseEntity sendMsgs(MsgsRequestVO msgsRequestVO) throws Exception { - return ResponseEntity.ok().body(sendService.sendMsgsData(msgsRequestVO)); + return ResponseEntity.ok().body(sendService.sendMsgsData_advc(msgsRequestVO)); +// return ResponseEntity.ok().body(sendService.sendMsgsData(msgsRequestVO)); } From 69d2cfb5979ab48fa778d0ca0670b85b4279a62a Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Tue, 1 Jul 2025 17:09:32 +0900 Subject: [PATCH 03/19] =?UTF-8?q?=EC=95=8C=EB=A6=BC=ED=86=A1=20api->=20?= =?UTF-8?q?=EC=B1=84=EB=84=90ID=EC=A1=B0=ED=9A=8C=20-=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BFID=EC=A1=B0=ED=9A=8C=20-=20=ED=85=9C=ED=94=8C=EB=A6=BF?= =?UTF-8?q?=EC=83=81=EC=84=B8=EC=A1=B0=ED=9A=8C=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/itn/mjonApi/cmn/aop/LogAspect.java | 68 +++++---- .../itn/mjonApi/cmn/apiServer/ApiService.java | 50 ++++++- .../com/itn/mjonApi/cmn/domain/CmnVO.java | 18 +++ .../biz/template/BizTemplateRequest.java | 16 +++ .../template/detail/CommentsAttachment.java | 16 +++ .../biz/template/detail/TemplateButton.java | 23 +++ .../biz/template/detail/TemplateComments.java | 20 +++ .../biz/template/detail/TemplateDetail.java | 41 ++++++ .../detail/TemplateDetailResponse.java | 16 +++ .../biz/template/detail/TemplateItem.java | 16 +++ .../detail/TemplateItemHighlight.java | 16 +++ .../biz/template/detail/TemplateItemItem.java | 14 ++ .../template/detail/TemplateItemSummary.java | 15 ++ .../template/detail/TemplateQuickReplies.java | 19 +++ .../biz/template/list/ServiceStatusEnum.java | 46 ++++++ .../biz/template/list/TemplateInfo.java | 20 +++ .../biz/template/list/TemplateListData.java | 15 ++ .../template/list/TemplateListResponse.java | 17 +++ .../idgen/service/impl/IdgenServiceImpl.java | 1 - .../cmn/interceptor/CertifInterceptor.java | 2 +- .../java/com/itn/mjonApi/cmn/model/Price.java | 4 +- .../java/com/itn/mjonApi/cmn/msg/StatMsg.java | 2 + .../api/kakao/inqry/mapper/InqryMapper.java | 34 +++++ .../mapper/domain/MjKakaoProfileInfoVO.java | 27 ++++ .../inqry/service/Impl/InqryServiceImpl.java | 134 ++++++++++++++++++ .../api/kakao/inqry/service/InqryService.java | 14 ++ .../kakao/inqry/web/InqryRestContoller.java | 66 +++++++++ .../{ => msg}/inqry/mapper/HstryMapper.java | 10 +- .../{ => msg}/inqry/mapper/PriceMapper.java | 4 +- .../inqry}/mapper/domain/HstryDetailVO.java | 2 +- .../inqry}/mapper/domain/HstryResponse.java | 2 +- .../inqry}/mapper/domain/HstryVO.java | 2 +- .../inqry}/mapper/domain/MjonResponseVO.java | 2 +- .../inqry/mapper/domain/PriceResponse.java | 2 +- .../inqry/mapper/domain/PriceVO.java | 2 +- .../{ => msg}/inqry/service/HstryService.java | 6 +- .../{ => msg}/inqry/service/PriceService.java | 4 +- .../inqry/service/impl/HstryServiceImpl.java | 20 ++- .../inqry/service/impl/PriceServiceImpl.java | 12 +- .../inqry/web/HstryRestController.java | 9 +- .../inqry/web/PriceRestController.java | 8 +- .../api/{ => msg}/send/mapper/SendMapper.java | 6 +- .../send/mapper/domain/MjonMsgSendVO.java | 2 +- .../send/mapper/domain/MjonResponseVO.java | 3 +- .../send/mapper/domain/MsgRequestVO.java | 4 +- .../send/mapper/domain/MsgsRequestVO.java | 4 +- .../mapper/domain/SendSucRestResponse.java | 2 +- .../{ => msg}/send/service/SendService.java | 6 +- .../send/service/impl/SendServiceImpl.java | 13 +- .../send/web/SendRestController.java | 8 +- .../com/itn/mjonApi/util/ApiObjectUtil.java | 47 +----- src/main/resources/application.properties | 13 +- .../mapper/api/kakao/inqry/InqryMapper.xml | 29 ++++ .../api/{ => msg}/inqry/HstryMapper.xml | 6 +- .../api/{ => msg}/inqry/PriceMapper.xml | 2 +- .../{Send => api/msg/send}/SendMapper.xml | 2 +- src/main/resources/mybatis-config.xml | 14 ++ 57 files changed, 815 insertions(+), 161 deletions(-) create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/CmnVO.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/BizTemplateRequest.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/CommentsAttachment.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateButton.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateComments.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateDetail.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateDetailResponse.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItem.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemHighlight.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemItem.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemSummary.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateQuickReplies.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/ServiceStatusEnum.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateInfo.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateListData.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateListResponse.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/mapper/InqryMapper.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/mapper/domain/MjKakaoProfileInfoVO.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/service/Impl/InqryServiceImpl.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/service/InqryService.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/web/InqryRestContoller.java rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/mapper/HstryMapper.java (70%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/mapper/PriceMapper.java (85%) rename src/main/java/com/itn/mjonApi/mjon/api/{inqry/service => msg/inqry}/mapper/domain/HstryDetailVO.java (93%) rename src/main/java/com/itn/mjonApi/mjon/api/{inqry/service => msg/inqry}/mapper/domain/HstryResponse.java (94%) rename src/main/java/com/itn/mjonApi/mjon/api/{inqry/service => msg/inqry}/mapper/domain/HstryVO.java (94%) rename src/main/java/com/itn/mjonApi/mjon/api/{inqry/service => msg/inqry}/mapper/domain/MjonResponseVO.java (96%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/mapper/domain/PriceResponse.java (97%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/mapper/domain/PriceVO.java (93%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/service/HstryService.java (62%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/service/PriceService.java (81%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/service/impl/HstryServiceImpl.java (93%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/service/impl/PriceServiceImpl.java (84%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/web/HstryRestController.java (87%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/inqry/web/PriceRestController.java (82%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/send/mapper/SendMapper.java (75%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/send/mapper/domain/MjonMsgSendVO.java (91%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/send/mapper/domain/MjonResponseVO.java (94%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/send/mapper/domain/MsgRequestVO.java (99%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/send/mapper/domain/MsgsRequestVO.java (99%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/send/mapper/domain/SendSucRestResponse.java (98%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/send/service/SendService.java (67%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/send/service/impl/SendServiceImpl.java (98%) rename src/main/java/com/itn/mjonApi/mjon/api/{ => msg}/send/web/SendRestController.java (89%) create mode 100644 src/main/resources/mapper/api/kakao/inqry/InqryMapper.xml rename src/main/resources/mapper/api/{ => msg}/inqry/HstryMapper.xml (99%) rename src/main/resources/mapper/api/{ => msg}/inqry/PriceMapper.xml (92%) rename src/main/resources/mapper/{Send => api/msg/send}/SendMapper.xml (86%) create mode 100644 src/main/resources/mybatis-config.xml diff --git a/src/main/java/com/itn/mjonApi/cmn/aop/LogAspect.java b/src/main/java/com/itn/mjonApi/cmn/aop/LogAspect.java index fdf4ab7..e9046a8 100644 --- a/src/main/java/com/itn/mjonApi/cmn/aop/LogAspect.java +++ b/src/main/java/com/itn/mjonApi/cmn/aop/LogAspect.java @@ -4,10 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.itn.mjonApi.cmn.idgen.service.IdgenService; import com.itn.mjonApi.cmn.msg.FailRestResponse; import com.itn.mjonApi.cmn.msg.RestResponse; -import com.itn.mjonApi.mjon.api.access.mapper.domain.AccessKeyVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.SendSucRestResponse; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.SendSucRestResponse; import com.itn.mjonApi.mjon.log.service.mapper.LettnAccessLogMapper; import com.itn.mjonApi.mjon.log.service.mapper.LettnApiSendMsgLogMapper; import com.itn.mjonApi.mjon.log.service.mapper.MjMsgGroupDataMapper; @@ -59,6 +56,7 @@ public class LogAspect { @Autowired MjMsgGroupDataMapper mjMsgGroupDataMapper; + @Resource(name = "apiAccessLog") private IdgenService idgenApiAccessLogId; @@ -81,7 +79,7 @@ public class LogAspect { // VO 객체를 가져옴 Object objectVO = joinPoint.getArgs()[0]; - log.info("joinPoint.getArgs()[0] :: [{}]", joinPoint.getArgs()[0]); +// log.info("joinPoint.getArgs()[0] :: [{}]", joinPoint.getArgs()[0]); @@ -91,16 +89,25 @@ public class LogAspect { String mberId = ""; String accessKey = ""; for(Field field : objectVO.getClass().getDeclaredFields()){; - field.setAccessible(true); + try { + // JDK 내부 클래스 필드는 무시 + if (field.getDeclaringClass().getName().startsWith("java.")) continue; + field.setAccessible(true); - log.info("field.getName() :: [{}]", field.getName()); - log.info("field.get(objectVO) :: [{}]", field.get(objectVO)); +// log.info("field.getName() :: [{}]", field.getName()); +// log.info("field.get(objectVO) :: [{}]", field.get(objectVO)); - if("mberId".equals(field.getName())){ mberId=field.get(objectVO).toString(); } - else if("accessKey".equals(field.getName())){ accessKey=field.get(objectVO).toString(); } + if("mberId".equals(field.getName())){ mberId=field.get(objectVO).toString(); } + else if("accessKey".equals(field.getName())){ accessKey=field.get(objectVO).toString(); } - if(StringUtils.isNotEmpty(mberId) && StringUtils.isNotEmpty(accessKey)){ break; } + if(StringUtils.isNotEmpty(mberId) && StringUtils.isNotEmpty(accessKey)){ break; } + + } catch (Exception e) { + e.printStackTrace(); + log.warn("접근 불가 필드 스킵: {}", field.getName()); + continue; + } } String nextStringId = idgenApiAccessLogId.getNextStringId(); @@ -252,6 +259,7 @@ public class LogAspect { @NotNull private static String getClassNmFromObject(Object returnValue) { String classNmTemp = returnValue.getClass().getName(); + log.info("getClassNmFromObject :: [{}]", classNmTemp); String classNm = classNmTemp.substring(classNmTemp.lastIndexOf(".")+1, classNmTemp.length()); return classNm; } @@ -312,37 +320,25 @@ public class LogAspect { * @return */ public String getJsonToString(Object returnValue) throws JsonProcessingException { - - if(ObjectUtils.isEmpty(returnValue)){ + if (ObjectUtils.isEmpty(returnValue)) { return null; } String classNm = this.getClassNmFromObject(returnValue); - /** - * @description : return Class가 추가되면 여기에 추가 - */ - if("AccessKeyVO".equals(classNm)) { - AccessKeyVO accessKeyVO = (AccessKeyVO) returnValue; - return ApiObjectUtil.getAccessKeyVOToJsonString(accessKeyVO); + // 처리 대상 클래스 목록 (선택적으로 필터링하고 싶다면 여기에 조건) + switch (classNm) { + case "AccessKeyVO": + case "RestResponse": + case "MsgsRequestVO": + case "MsgRequestVO": + case "MjKakaoProfileInfoVO": + case "BizTemplateRequest": + return ApiObjectUtil.toJson(returnValue); + default: + log.info("데이터를 추가해 주세요"); + return "데이터를 추가해 주세요"; } - else if("RestResponse".equals(classNm)){ - RestResponse restResponse = (RestResponse) returnValue; - return ApiObjectUtil.getRestResponseToJsonString(restResponse); - } - else if("MsgsRequestVO".equals(classNm)){ - MsgsRequestVO msgsRequestVO = (MsgsRequestVO) returnValue; - return ApiObjectUtil.getMsgsRequestVOToJsonString(msgsRequestVO); - } - else if("MsgRequestVO".equals(classNm)){ - MsgRequestVO restResponse = (MsgRequestVO) returnValue; - return ApiObjectUtil.getMsgRequestVOToJsonString(restResponse); - } - else{ - return "데이터를 추가해 주세요"; - } - - } } diff --git a/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java b/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java index 1a153ee..3a323e4 100644 --- a/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java +++ b/src/main/java/com/itn/mjonApi/cmn/apiServer/ApiService.java @@ -3,11 +3,19 @@ package com.itn.mjonApi.cmn.apiServer; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MjonResponseVO; +import com.itn.mjonApi.cmn.domain.biz.template.detail.TemplateDetailResponse; +import com.itn.mjonApi.cmn.domain.biz.template.BizTemplateRequest; +import com.itn.mjonApi.cmn.domain.biz.template.list.TemplateListResponse; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MjonResponseVO; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; + /** * packageName : com.itn.mjonApi.cmn.apiServer @@ -64,4 +72,44 @@ public class ApiService { return MjonResponseVO.getMjonResponse(apiReturnNode); } + public TemplateListResponse postForBizTemplateListEntity(String url, BizTemplateRequest requestDto) throws JsonProcessingException { + + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity requestEntity = new HttpEntity<>(requestDto, headers); + + TemplateListResponse returnEntity = restTemplate.exchange( + url, + HttpMethod.POST, + requestEntity, + TemplateListResponse.class + ).getBody(); + + + + return returnEntity; + } + public TemplateDetailResponse postForBizTemplateDetailEntity(String url, BizTemplateRequest requestDto) throws JsonProcessingException { + + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity requestEntity = new HttpEntity<>(requestDto, headers); + + TemplateDetailResponse returnEntity = restTemplate.exchange( + url, + HttpMethod.POST, + requestEntity, + TemplateDetailResponse.class + ).getBody(); + + log.info("returnEntity :: [{}]", returnEntity.toString()); + + + return returnEntity; + } + } diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/CmnVO.java b/src/main/java/com/itn/mjonApi/cmn/domain/CmnVO.java new file mode 100644 index 0000000..a07d1aa --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/CmnVO.java @@ -0,0 +1,18 @@ +package com.itn.mjonApi.cmn.domain; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class CmnVO { + + private String mberId; // 사용자 ID + + private String accessKey; // Api Key +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/BizTemplateRequest.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/BizTemplateRequest.java new file mode 100644 index 0000000..aa15c28 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/BizTemplateRequest.java @@ -0,0 +1,16 @@ +package com.itn.mjonApi.cmn.domain.biz.template; + +import lombok.*; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class BizTemplateRequest { + private String bizId; + private String apiKey; + private String senderKey; + private String templateCode; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/CommentsAttachment.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/CommentsAttachment.java new file mode 100644 index 0000000..840c676 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/CommentsAttachment.java @@ -0,0 +1,16 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + +import lombok.*; + + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class CommentsAttachment { + private String originalFileName; + private String filePath; + +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateButton.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateButton.java new file mode 100644 index 0000000..13abf53 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateButton.java @@ -0,0 +1,23 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + +import lombok.*; + + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TemplateButton { + private String bizFormId; + private String linkAnd; + private String linkIos; + private String linkMo; + private String linkPc; + private String linkType; + private String name; + private String ordering; + private String pluginId; + +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateComments.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateComments.java new file mode 100644 index 0000000..30b5b76 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateComments.java @@ -0,0 +1,20 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + +import lombok.*; + +import java.util.List; + + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TemplateComments { + private String content; + private String createdAt; + private String status; + private List attachment; + +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateDetail.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateDetail.java new file mode 100644 index 0000000..ffc7899 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateDetail.java @@ -0,0 +1,41 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + +import lombok.*; + +import java.util.List; + + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TemplateDetail { + private String block; + private String categoryCode; + private String createdAt; + private String dormant; + private String inspectionStatus; + private String modifiedAt; + private String securityFlag; + private String senderKey; + private String senderKeyType; + private String status; + private String templateCode; + private String templateContent; + private String templateEmphasizeType; + private String templateExtra; + private String templateHeader; + private String templateImageName; + private String templateImageUrl; + private String templateMessageType; + private String templateName; + private String templateSubtitle; + private String templateTitle; + private TemplateItemHighlight templateItemHighlight; + private TemplateItem templateItem; + private List buttons; + private List comments; + private List quickReplies; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateDetailResponse.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateDetailResponse.java new file mode 100644 index 0000000..4c102c1 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateDetailResponse.java @@ -0,0 +1,16 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + +import lombok.*; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TemplateDetailResponse { + + private String code; + private String message; + private TemplateDetail data; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItem.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItem.java new file mode 100644 index 0000000..5c06537 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItem.java @@ -0,0 +1,16 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TemplateItem { + private List list; + private TemplateItemSummary summary; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemHighlight.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemHighlight.java new file mode 100644 index 0000000..deda63f --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemHighlight.java @@ -0,0 +1,16 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + + +import lombok.*; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TemplateItemHighlight { + private String title; // 아이템 타이틀 + private String description; // 상세 설명 + private String imageUrl; // 썸네일 이미지 주소 +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemItem.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemItem.java new file mode 100644 index 0000000..92fd83f --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemItem.java @@ -0,0 +1,14 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + +import lombok.*; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TemplateItemItem { + private String title; + private String description; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemSummary.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemSummary.java new file mode 100644 index 0000000..0994b48 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateItemSummary.java @@ -0,0 +1,15 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + + +import lombok.*; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TemplateItemSummary { + private String title; + private String description; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateQuickReplies.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateQuickReplies.java new file mode 100644 index 0000000..0e1db7a --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/detail/TemplateQuickReplies.java @@ -0,0 +1,19 @@ +package com.itn.mjonApi.cmn.domain.biz.template.detail; + + +import lombok.*; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TemplateQuickReplies { + private String name; + private String linkType; + private String linkAnd; + private String linkIos; + private String linkMo; + private String linkPc; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/ServiceStatusEnum.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/ServiceStatusEnum.java new file mode 100644 index 0000000..ad8c74f --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/ServiceStatusEnum.java @@ -0,0 +1,46 @@ +package com.itn.mjonApi.cmn.domain.biz.template.list; + +/** + * 템플릿 상태를 나타내는 열거형 클래스. + * - API 응답의 상태 코드(EX: REG)를 사람이 읽기 쉽게 변환하는 데 사용됨. + */ +public enum ServiceStatusEnum { + + REG("등록완료"), // REG: 등록 완료된 템플릿 + RDY("대기"), // RDY: 대기 상태 + ACT("활성"), // ACT: 활성화 상태 + DMT("중단"), // DMT: 중단된 템플릿 + REJ("반려"), // REJ: 반려된 템플릿 + UNKNOWN("알 수 없음"); // 정의되지 않은 상태 + + private final String label; // 한글 설명 + + /** + * 생성자 + * @param label 상태의 한글 설명 + */ + ServiceStatusEnum(String label) { + this.label = label; + } + + /** + * 한글 설명 반환 + */ + public String getLabel() { + return this.label; + } + + /** + * 코드값을 받아 "[코드](한글설명)" 형태 문자열로 반환 + * @param code 상태 코드 (예: REG, ACT 등) + * @return 예: "REG(등록완료)", "DMT(중단)", "FOO(알 수 없음)" + */ + public static String getLabelByCode(String code) { + for (ServiceStatusEnum status : values()) { + if (status.name().equalsIgnoreCase(code)) { + return status.name() + "(" + status.getLabel() + ")"; + } + } + return code + "(알 수 없음)"; + } +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateInfo.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateInfo.java new file mode 100644 index 0000000..d889282 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateInfo.java @@ -0,0 +1,20 @@ +package com.itn.mjonApi.cmn.domain.biz.template.list; + + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +public class TemplateInfo { + private String senderKey; + private String senderKeyType; + private String templateCode; + private String templateName; + private String createdAt; + private String modifiedAt; + private String categoryCode; + private String serviceStatus; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateListData.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateListData.java new file mode 100644 index 0000000..19a029e --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateListData.java @@ -0,0 +1,15 @@ +package com.itn.mjonApi.cmn.domain.biz.template.list; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +@Getter +@Setter +@ToString +public class TemplateListData { + private List list; + private boolean hasNext; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateListResponse.java b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateListResponse.java new file mode 100644 index 0000000..f829486 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/domain/biz/template/list/TemplateListResponse.java @@ -0,0 +1,17 @@ +package com.itn.mjonApi.cmn.domain.biz.template.list; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +public class TemplateListResponse { + private String code; + private String message; + private int totalCount; + private int totalPage; + private int currentPage; + private TemplateListData data; +} diff --git a/src/main/java/com/itn/mjonApi/cmn/idgen/service/impl/IdgenServiceImpl.java b/src/main/java/com/itn/mjonApi/cmn/idgen/service/impl/IdgenServiceImpl.java index 6022d62..100d941 100644 --- a/src/main/java/com/itn/mjonApi/cmn/idgen/service/impl/IdgenServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/cmn/idgen/service/impl/IdgenServiceImpl.java @@ -58,7 +58,6 @@ public class IdgenServiceImpl implements IdgenService { // nextId 값 만들기 String nextId = prefixTemp + idgenVO.getNextId(); - log.info(" userId : [{}]", nextId); return nextId; } diff --git a/src/main/java/com/itn/mjonApi/cmn/interceptor/CertifInterceptor.java b/src/main/java/com/itn/mjonApi/cmn/interceptor/CertifInterceptor.java index cd373ce..b3d3b11 100644 --- a/src/main/java/com/itn/mjonApi/cmn/interceptor/CertifInterceptor.java +++ b/src/main/java/com/itn/mjonApi/cmn/interceptor/CertifInterceptor.java @@ -152,7 +152,7 @@ public class CertifInterceptor implements HandlerInterceptor{ referer = serverIp; } referer= "119.193.215.98"; - log.info("certi request.getParameter(\"accessKey\") :: [{}]", request.getParameter("accessKey")); +// log.info("certi request.getParameter(\"accessKey\") :: [{}]", request.getParameter("accessKey")); // hylee Builder 패턴으로 변경 => 20230516 AccessKeyVO accessKeyVO = accessKeyService.selectRKey( new AccessKeyVO().builder() diff --git a/src/main/java/com/itn/mjonApi/cmn/model/Price.java b/src/main/java/com/itn/mjonApi/cmn/model/Price.java index 646b7fa..ffc91a9 100644 --- a/src/main/java/com/itn/mjonApi/cmn/model/Price.java +++ b/src/main/java/com/itn/mjonApi/cmn/model/Price.java @@ -1,7 +1,7 @@ package com.itn.mjonApi.cmn.model; -import com.itn.mjonApi.mjon.api.inqry.mapper.PriceMapper; -import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.PriceMapper; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceVO; import org.springframework.stereotype.Component; import java.math.BigDecimal; diff --git a/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java b/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java index 26107be..c0de5c0 100644 --- a/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java +++ b/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java @@ -53,6 +53,8 @@ public enum StatMsg { //발송가능건수====================================================================== , STAT_5099("5099","기타 시스템 오류") + + //====================================================================== , msgType4("단문","SMS") , msgType6("장문","LMS") diff --git a/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/mapper/InqryMapper.java b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/mapper/InqryMapper.java new file mode 100644 index 0000000..0e4451d --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/mapper/InqryMapper.java @@ -0,0 +1,34 @@ +package com.itn.mjonApi.mjon.api.kakao.inqry.mapper; + +import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain.MjKakaoProfileInfoVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.MjonResponseVO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + + +/** + * packageName : com.itn.mjonApi.mjon.api.kakao.inqry.mapper + * fileName : InqryMapper + * author : hylee + * date : 2025-06-27 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-06-27 hylee 최초 생성 + */ +@Mapper +public interface InqryMapper { + + List getChnlIds(MjKakaoProfileInfoVO mjKakaoProfileInfoVO); + + //double selectUserMoney(String mberId); + +// List selectApiInqryHstry(HstryVO hstryVO); +// +// List selectApiInqryHstryDetail(HstryDetailVO hstryDetailVO); +// +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/mapper/domain/MjKakaoProfileInfoVO.java b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/mapper/domain/MjKakaoProfileInfoVO.java new file mode 100644 index 0000000..03c935b --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/mapper/domain/MjKakaoProfileInfoVO.java @@ -0,0 +1,27 @@ +package com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain; + + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.itn.mjonApi.cmn.domain.CmnVO; +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class MjKakaoProfileInfoVO extends CmnVO { + private String profileId; // 회원 프로필 번호 + private String userId; // 회원 아이디 + private String senderKey; // 발신 프로필 키 + private String token; // 수신받은 인증 토큰정보 + private String phoneNumber; // 카카오톡 채널 핸드폰 번호 + private String yellowId; // 카카오톡 채널(@ID) + private String categoryCode; // 카테고리 코드 + private String categoryName; // 카테고리 코드 명칭 + private String frstRegistPnttm; // 등록 일자 + private String frstRegisterId; // 등록자 + private String lastUpdtPnttm; // 수정 일자 + private String lastUpdusrId; // 수정자 + private String deleteYn; // 삭제 여부 (Y/N) +} \ No newline at end of file diff --git a/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/service/Impl/InqryServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/service/Impl/InqryServiceImpl.java new file mode 100644 index 0000000..68fa786 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/service/Impl/InqryServiceImpl.java @@ -0,0 +1,134 @@ +package com.itn.mjonApi.mjon.api.kakao.inqry.service.Impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.itn.mjonApi.cmn.apiServer.ApiService; +import com.itn.mjonApi.cmn.domain.biz.template.BizTemplateRequest; +import com.itn.mjonApi.cmn.domain.biz.template.detail.TemplateDetailResponse; +import com.itn.mjonApi.cmn.domain.biz.template.list.ServiceStatusEnum; +import com.itn.mjonApi.cmn.domain.biz.template.list.TemplateInfo; +import com.itn.mjonApi.cmn.domain.biz.template.list.TemplateListResponse; +import com.itn.mjonApi.cmn.msg.FailRestResponse; +import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.InqryMapper; +import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain.MjKakaoProfileInfoVO; +import com.itn.mjonApi.mjon.api.kakao.inqry.service.InqryService; +import lombok.extern.slf4j.Slf4j; +import org.apache.catalina.connector.Response; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * packageName : com.itn.mjonApi.mjon.api.kakao.inqry.service.Impl + * fileName : InqryServiceImpl + * author : hylee + * date : 2025-06-27 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-06-27 hylee 최초 생성 + */ +@Slf4j +@Service +public class InqryServiceImpl implements InqryService { + + + private ApiService apiService; + + @Value("${biz.root.url}") + private String BIZ_ROOT_URL; + @Value("${biz.api.key}") + private String BIZ_API_KEY; + @Value("${biz.id}") + private String BIZ_ID; + + + @Autowired + InqryMapper inqryMapper; + + @Autowired + public InqryServiceImpl(ApiService apiService) { + this.apiService = apiService; + } + + @Override + public RestResponse getChnlId(MjKakaoProfileInfoVO mjKakaoProfileInfoVO) { + + List voList = inqryMapper.getChnlIds(mjKakaoProfileInfoVO); + + log.info(" mjKakaoProfileInfoVO toString [{}]", mjKakaoProfileInfoVO.toString()); + return new RestResponse(voList); + } + + @Override + public RestResponse getTemplates(BizTemplateRequest bizTemplateRequest) throws JsonProcessingException { + + + // 1. 템플릿 목록 조회 요청 DTO 생성 (BIZ ID, API Key, senderKey 포함) + BizTemplateRequest requestDto= BizTemplateRequest.builder() + .bizId(BIZ_ID) + .apiKey(BIZ_API_KEY) + .senderKey(bizTemplateRequest.getSenderKey()) + .build(); + + // 2. 외부 API 호출 - 템플릿 목록 요청 (/v3/kakao/template/list) + TemplateListResponse response = apiService.postForBizTemplateListEntity( + BIZ_ROOT_URL+"/v3/kakao/template/list" + , requestDto + ); + + + // 3. 응답 코드가 "0" (성공) 이 **아닌 경우** => 실패 처리 (STAT_4099 반환 : 기타 시스템 오류) + if(!"200".equals(response.getCode()) ) + { + // STAT_4099 = 템플릿 조회 실패 (내부 enum 기반 메시지 사용) + return new RestResponse(new FailRestResponse("STAT_4099","")); + } + + // 4. 성공 시 템플릿 리스트 추출 + List templateList = response.getData().getList(); + + // 5. 각 템플릿 객체에 대해 가공 처리 + templateList.forEach(t -> { + // 서비스 상태 코드 → 한글 라벨로 변환 ( 예: REG → REG(등록완료) ) + String originalCode = t.getServiceStatus(); + String convertedLabel = ServiceStatusEnum.getLabelByCode(originalCode); + t.setServiceStatus(convertedLabel); + + // 응답에 불필요한 필드 제거 (null 처리) + t.setSenderKeyType(null); + t.setCategoryCode(null); + }); + + // 6. 최종 응답 반환 (가공된 템플릿 리스트 포함) + return new RestResponse(templateList); + } + + @Override + public RestResponse getTemplateDetail(BizTemplateRequest bizTemplateRequest) throws JsonProcessingException { + + // 1. 템플릿 목록 조회 요청 DTO 생성 (BIZ ID, API Key, senderKey 포함) + BizTemplateRequest requestDto= BizTemplateRequest.builder() + .bizId(BIZ_ID) + .apiKey(BIZ_API_KEY) + .senderKey(bizTemplateRequest.getSenderKey()) + .templateCode(bizTemplateRequest.getTemplateCode()) + .build(); + + // 2. 외부 API 호출 - 템플릿 목록 요청 (/v3/kakao/template/list) + TemplateDetailResponse response = apiService.postForBizTemplateDetailEntity( + BIZ_ROOT_URL+"/v3/kakao/template/detail" + , requestDto + ); + + log.info(" + response :: [{}]", response.toString()); + + // 6. 최종 응답 반환 (가공된 템플릿 리스트 포함) + return new RestResponse(response); + } + + +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/service/InqryService.java b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/service/InqryService.java new file mode 100644 index 0000000..ca24ee0 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/service/InqryService.java @@ -0,0 +1,14 @@ +package com.itn.mjonApi.mjon.api.kakao.inqry.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.itn.mjonApi.cmn.domain.biz.template.BizTemplateRequest; +import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain.MjKakaoProfileInfoVO; + +public interface InqryService { + RestResponse getChnlId(MjKakaoProfileInfoVO mjKakaoProfileInfoVO); + + RestResponse getTemplates(BizTemplateRequest bizTemplateRequest) throws JsonProcessingException; + + RestResponse getTemplateDetail(BizTemplateRequest bizTemplateRequest) throws JsonProcessingException; +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/web/InqryRestContoller.java b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/web/InqryRestContoller.java new file mode 100644 index 0000000..ccc0c3d --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/kakao/inqry/web/InqryRestContoller.java @@ -0,0 +1,66 @@ +package com.itn.mjonApi.mjon.api.kakao.inqry.web; + + +import com.itn.mjonApi.cmn.domain.biz.template.BizTemplateRequest; +import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain.MjKakaoProfileInfoVO; +import com.itn.mjonApi.mjon.api.kakao.inqry.service.InqryService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + + +/** + * fileName : InqryRestContoller.java + * author : hylee + * date : 2025-06-27 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-06-27 hylee 최초 생성 + */ +@Slf4j +@RestController +public class InqryRestContoller { + + @Autowired + private InqryService inqryService; + + + /** + * @param + * @return + * @throws Exception 처리 중 예외 발생 가능 + * @date 2025-06-27 + * @author hylee + */ + @CrossOrigin("*") // 모든 요청에 접근 허용 + @PostMapping("/api/kakao/inqry/chnlId") + public ResponseEntity getChnlId(MjKakaoProfileInfoVO mjKakaoProfileInfoVO) throws Exception { + + return ResponseEntity.ok().body(inqryService.getChnlId(mjKakaoProfileInfoVO)); + + } + + @CrossOrigin("*") // 모든 요청에 접근 허용 + @PostMapping("/api/kakao/inqry/templates/list") + public ResponseEntity getTemplates(BizTemplateRequest bizTemplateRequest) throws Exception { + + return ResponseEntity.ok().body(inqryService.getTemplates(bizTemplateRequest)); + + } + + + @CrossOrigin("*") // 모든 요청에 접근 허용 + @PostMapping("/api/kakao/inqry/templates/detail") + public ResponseEntity getTemplateDetail(BizTemplateRequest bizTemplateRequest) throws Exception { + + return ResponseEntity.ok().body(inqryService.getTemplateDetail(bizTemplateRequest)); + + } + + + +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/HstryMapper.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/HstryMapper.java similarity index 70% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/HstryMapper.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/HstryMapper.java index 5df979e..c0ca343 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/HstryMapper.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/HstryMapper.java @@ -1,14 +1,14 @@ -package com.itn.mjonApi.mjon.api.inqry.mapper; +package com.itn.mjonApi.mjon.api.msg.inqry.mapper; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryDetailVO; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryVO; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.MjonResponseVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.MjonResponseVO; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** -* @packageName : com.itn.mjonApi.mjon.api.inqry.service.mapper +* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.service.mapper * @fileName : PriceMapper.java * @author : JunHo Lee * @date : 2023.05.15 diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/PriceMapper.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/PriceMapper.java similarity index 85% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/PriceMapper.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/PriceMapper.java index 7ef7de0..278b65c 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/PriceMapper.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/PriceMapper.java @@ -1,11 +1,11 @@ -package com.itn.mjonApi.mjon.api.inqry.mapper; +package com.itn.mjonApi.mjon.api.msg.inqry.mapper; import java.util.Map; import org.apache.ibatis.annotations.Mapper; /** -* @packageName : com.itn.mjonApi.mjon.api.inqry.service.mapper +* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.service.mapper * @fileName : PriceMapper.java * @author : JunHo Lee * @date : 2023.05.15 diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/HstryDetailVO.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/HstryDetailVO.java similarity index 93% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/HstryDetailVO.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/HstryDetailVO.java index f632965..69ef54b 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/HstryDetailVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/HstryDetailVO.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.inqry.service.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/HstryResponse.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/HstryResponse.java similarity index 94% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/HstryResponse.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/HstryResponse.java index 744920c..fb71d0c 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/HstryResponse.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/HstryResponse.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.inqry.service.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain; import lombok.*; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/HstryVO.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/HstryVO.java similarity index 94% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/HstryVO.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/HstryVO.java index 1572c2c..e09e021 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/HstryVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/HstryVO.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.inqry.service.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/MjonResponseVO.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/MjonResponseVO.java similarity index 96% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/MjonResponseVO.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/MjonResponseVO.java index 49530f7..778b27d 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/mapper/domain/MjonResponseVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/MjonResponseVO.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.inqry.service.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain; import lombok.*; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/domain/PriceResponse.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/PriceResponse.java similarity index 97% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/domain/PriceResponse.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/PriceResponse.java index d79da9a..618e9f1 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/domain/PriceResponse.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/PriceResponse.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.inqry.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain; import java.time.LocalDateTime; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/domain/PriceVO.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/PriceVO.java similarity index 93% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/domain/PriceVO.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/PriceVO.java index 911c74c..2bc32b8 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/mapper/domain/PriceVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/mapper/domain/PriceVO.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.inqry.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain; import java.io.Serializable; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/HstryService.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/HstryService.java similarity index 62% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/service/HstryService.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/HstryService.java index 2b3f33b..b6070d9 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/HstryService.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/HstryService.java @@ -1,8 +1,8 @@ -package com.itn.mjonApi.mjon.api.inqry.service; +package com.itn.mjonApi.mjon.api.msg.inqry.service; import com.itn.mjonApi.cmn.msg.RestResponse; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryDetailVO; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO; public interface HstryService { diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/PriceService.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/PriceService.java similarity index 81% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/service/PriceService.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/PriceService.java index 17a3d5a..02b896f 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/PriceService.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/PriceService.java @@ -1,9 +1,9 @@ -package com.itn.mjonApi.mjon.api.inqry.service; +package com.itn.mjonApi.mjon.api.msg.inqry.service; import com.itn.mjonApi.cmn.msg.RestResponse; /** -* @packageName : com.itn.mjonApi.mjon.api.inqry.service +* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.service * @fileName : PriceService.java * @author : JunHo Lee * @date : 2023.05.15 diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/impl/HstryServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/impl/HstryServiceImpl.java similarity index 93% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/service/impl/HstryServiceImpl.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/impl/HstryServiceImpl.java index 2164925..98f2ce8 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/impl/HstryServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/impl/HstryServiceImpl.java @@ -1,15 +1,15 @@ -package com.itn.mjonApi.mjon.api.inqry.service.impl; +package com.itn.mjonApi.mjon.api.msg.inqry.service.impl; import com.itn.mjonApi.cmn.apiServer.ApiService; import com.itn.mjonApi.cmn.msg.RestResponse; import com.itn.mjonApi.cmn.msg.FailRestResponse; -import com.itn.mjonApi.mjon.api.inqry.mapper.HstryMapper; -import com.itn.mjonApi.mjon.api.inqry.service.HstryService; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryDetailVO; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryResponse; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryVO; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.MjonResponseVO; -import com.itn.mjonApi.mjon.api.send.mapper.SendMapper; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.HstryMapper; +import com.itn.mjonApi.mjon.api.msg.inqry.service.HstryService; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryResponse; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.MjonResponseVO; +import com.itn.mjonApi.mjon.api.msg.send.mapper.SendMapper; import lombok.extern.slf4j.Slf4j; import org.apache.catalina.connector.Response; import org.apache.commons.lang3.StringUtils; @@ -28,9 +28,7 @@ public class HstryServiceImpl implements HstryService { @Autowired HstryMapper hstryMapper; - - @Autowired - SendMapper sendMapper; + @Autowired public HstryServiceImpl(ApiService apiService) { diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/impl/PriceServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/impl/PriceServiceImpl.java similarity index 84% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/service/impl/PriceServiceImpl.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/impl/PriceServiceImpl.java index a6cf459..23b22c6 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/service/impl/PriceServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/service/impl/PriceServiceImpl.java @@ -1,13 +1,13 @@ -package com.itn.mjonApi.mjon.api.inqry.service.impl; +package com.itn.mjonApi.mjon.api.msg.inqry.service.impl; import com.itn.mjonApi.cmn.model.Price; import com.itn.mjonApi.cmn.msg.FailRestResponse; import com.itn.mjonApi.cmn.msg.RestResponse; import com.itn.mjonApi.cmn.msg.StatMsg; -import com.itn.mjonApi.mjon.api.inqry.mapper.PriceMapper; -import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceResponse; -import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceVO; -import com.itn.mjonApi.mjon.api.inqry.service.PriceService; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.PriceMapper; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceResponse; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceVO; +import com.itn.mjonApi.mjon.api.msg.inqry.service.PriceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -16,7 +16,7 @@ import org.springframework.stereotype.Service; import java.time.LocalDateTime; /** -* @packageName : com.itn.mjonApi.mjon.api.inqry.service.impl +* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.service.impl * @fileName : PriceServiceImpl.java * @author : JunHo Lee * @date : 2023.05.15 diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/web/HstryRestController.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/web/HstryRestController.java similarity index 87% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/web/HstryRestController.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/web/HstryRestController.java index a888bdc..2433200 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/web/HstryRestController.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/web/HstryRestController.java @@ -1,9 +1,9 @@ -package com.itn.mjonApi.mjon.api.inqry.web; +package com.itn.mjonApi.mjon.api.msg.inqry.web; import com.itn.mjonApi.cmn.msg.RestResponse; -import com.itn.mjonApi.mjon.api.inqry.service.HstryService; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryDetailVO; -import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryVO; +import com.itn.mjonApi.mjon.api.msg.inqry.service.HstryService; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -24,7 +24,6 @@ import org.springframework.web.client.RestTemplate; * 2023-02-15 hylee 최초 생성 */ -// 치환문자가 있으면 , => §로 치환 @Slf4j @RestController diff --git a/src/main/java/com/itn/mjonApi/mjon/api/inqry/web/PriceRestController.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/web/PriceRestController.java similarity index 82% rename from src/main/java/com/itn/mjonApi/mjon/api/inqry/web/PriceRestController.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/web/PriceRestController.java index 9d31a3b..68b734b 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/inqry/web/PriceRestController.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/inqry/web/PriceRestController.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.inqry.web; +package com.itn.mjonApi.mjon.api.msg.inqry.web; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -6,11 +6,11 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import com.itn.mjonApi.cmn.msg.RestResponse; -import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceVO; -import com.itn.mjonApi.mjon.api.inqry.service.PriceService; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceVO; +import com.itn.mjonApi.mjon.api.msg.inqry.service.PriceService; /** -* @packageName : com.itn.mjonApi.mjon.api.inqry.web +* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.web * @fileName : PriceRestController.java * @author : JunHo Lee * @date : 2023.05.15 diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/SendMapper.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/SendMapper.java similarity index 75% rename from src/main/java/com/itn/mjonApi/mjon/api/send/mapper/SendMapper.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/SendMapper.java index 910a5fe..3c284d7 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/SendMapper.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/SendMapper.java @@ -1,10 +1,10 @@ -package com.itn.mjonApi.mjon.api.send.mapper; +package com.itn.mjonApi.mjon.api.msg.send.mapper; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgRequestVO; import org.apache.ibatis.annotations.Mapper; /** - * packageName : com.itn.mjonApi.mjon.api.send.mapper.domain + * packageName : com.itn.mjonApi.mjon.api.msg.send.mapper.domain * fileName : SendMapper * author : hylee * date : 2023-05-19 diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonMsgSendVO.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MjonMsgSendVO.java similarity index 91% rename from src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonMsgSendVO.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MjonMsgSendVO.java index 8dbbb3a..70051a5 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonMsgSendVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MjonMsgSendVO.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.send.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.send.mapper.domain; import lombok.Getter; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MjonResponseVO.java similarity index 94% rename from src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MjonResponseVO.java index c4d3319..33a1f66 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MjonResponseVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MjonResponseVO.java @@ -1,11 +1,10 @@ -package com.itn.mjonApi.mjon.api.send.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.send.mapper.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.*; -import org.springframework.http.ResponseEntity; /** * packageName : com.itn.mjonApi.cmn.msg diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgRequestVO.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MsgRequestVO.java similarity index 99% rename from src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgRequestVO.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MsgRequestVO.java index 9055f00..e112d9d 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgRequestVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MsgRequestVO.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.send.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.send.mapper.domain; import lombok.*; @@ -6,7 +6,7 @@ import java.io.Serializable; import java.util.List; /** - * packageName : com.itn.mjonApi.mjon.api.send.mapper.domain + * packageName : com.itn.mjonApi.mjon.api.msg.send.mapper.domain * fileName : MjonMsgVO * author : hylee * date : 2023-05-09 diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgsRequestVO.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MsgsRequestVO.java similarity index 99% rename from src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgsRequestVO.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MsgsRequestVO.java index d45d1f3..ccee833 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/MsgsRequestVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/MsgsRequestVO.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.send.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.send.mapper.domain; import lombok.AllArgsConstructor; import lombok.Getter; @@ -8,7 +8,7 @@ import lombok.Setter; import java.io.Serializable; /** - * packageName : com.itn.mjonApi.mjon.api.send.mapper.domain + * packageName : com.itn.mjonApi.mjon.api.msg.send.mapper.domain * fileName : MjonMsgVO * author : hylee * date : 2023-05-23 diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/SendSucRestResponse.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/SendSucRestResponse.java similarity index 98% rename from src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/SendSucRestResponse.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/SendSucRestResponse.java index 5d9012f..f678782 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/mapper/domain/SendSucRestResponse.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/mapper/domain/SendSucRestResponse.java @@ -1,4 +1,4 @@ -package com.itn.mjonApi.mjon.api.send.mapper.domain; +package com.itn.mjonApi.mjon.api.msg.send.mapper.domain; import com.itn.mjonApi.cmn.msg.StatMsg; import lombok.*; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/service/SendService.java similarity index 67% rename from src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/send/service/SendService.java index a9c79dc..60d1c2c 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/service/SendService.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/service/SendService.java @@ -1,8 +1,8 @@ -package com.itn.mjonApi.mjon.api.send.service; +package com.itn.mjonApi.mjon.api.msg.send.service; import com.itn.mjonApi.cmn.msg.RestResponse; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgRequestVO; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgsRequestVO; public interface SendService { diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/service/impl/SendServiceImpl.java similarity index 98% rename from src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/send/service/impl/SendServiceImpl.java index 0687b5b..9513091 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/service/impl/SendServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/service/impl/SendServiceImpl.java @@ -1,15 +1,15 @@ -package com.itn.mjonApi.mjon.api.send.service.impl; +package com.itn.mjonApi.mjon.api.msg.send.service.impl; import com.itn.mjonApi.cmn.apiServer.ApiService; import com.itn.mjonApi.cmn.model.Price; import com.itn.mjonApi.cmn.msg.FailRestResponse; import com.itn.mjonApi.cmn.msg.RestResponse; import com.itn.mjonApi.cmn.msg.StatMsg; -import com.itn.mjonApi.mjon.api.inqry.mapper.PriceMapper; -import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceVO; -import com.itn.mjonApi.mjon.api.send.mapper.SendMapper; -import com.itn.mjonApi.mjon.api.send.mapper.domain.*; -import com.itn.mjonApi.mjon.api.send.service.SendService; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.PriceMapper; +import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceVO; +import com.itn.mjonApi.mjon.api.msg.send.mapper.SendMapper; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.*; +import com.itn.mjonApi.mjon.api.msg.send.service.SendService; import com.itn.mjonApi.util.MunjaUtil; import lombok.extern.slf4j.Slf4j; import org.apache.catalina.connector.Response; @@ -17,7 +17,6 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; diff --git a/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/web/SendRestController.java similarity index 89% rename from src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java rename to src/main/java/com/itn/mjonApi/mjon/api/msg/send/web/SendRestController.java index b446628..e3958d8 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/send/web/SendRestController.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/msg/send/web/SendRestController.java @@ -1,9 +1,9 @@ -package com.itn.mjonApi.mjon.api.send.web; +package com.itn.mjonApi.mjon.api.msg.send.web; import com.itn.mjonApi.cmn.msg.RestResponse; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO; -import com.itn.mjonApi.mjon.api.send.service.SendService; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgRequestVO; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgsRequestVO; +import com.itn.mjonApi.mjon.api.msg.send.service.SendService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; diff --git a/src/main/java/com/itn/mjonApi/util/ApiObjectUtil.java b/src/main/java/com/itn/mjonApi/util/ApiObjectUtil.java index 8e6e40e..16fb55b 100644 --- a/src/main/java/com/itn/mjonApi/util/ApiObjectUtil.java +++ b/src/main/java/com/itn/mjonApi/util/ApiObjectUtil.java @@ -3,10 +3,6 @@ package com.itn.mjonApi.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.itn.mjonApi.cmn.msg.RestResponse; -import com.itn.mjonApi.mjon.api.access.mapper.domain.AccessKeyVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO; -import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO; /** * packageName : com.itn.mjonApi.util @@ -21,45 +17,10 @@ import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO; */ public class ApiObjectUtil { + private static final ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); - - - - - - - /** - * @description : VO를 json으로 변환 - * @param restResponse - * @return String - * @throws JsonProcessingException - */ - public static String getRestResponseToJsonString(RestResponse restResponse) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - // .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함 - return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(restResponse); + public static String toJson(Object obj) throws JsonProcessingException { + if (obj == null) return null; + return objectMapper.writeValueAsString(obj); } - public static String getMsgsRequestVOToJsonString(MsgsRequestVO msgsRequestVO) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - // .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함 - return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(msgsRequestVO); - } - public static String getMsgRequestVOToJsonString(MsgRequestVO msgRequestVO) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - // .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함 - return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(msgRequestVO); - } - - /** - * @description : VO를 json으로 변환 - * @param accessKeyVO - * @return String - * @throws JsonProcessingException - */ - public static String getAccessKeyVOToJsonString(AccessKeyVO accessKeyVO) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - // .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함 - return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(accessKeyVO); - } - } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 01379ad..0912909 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,9 +4,11 @@ spring.profiles.active=dev # mybatis setting +mybatis.config-location=classpath:mybatis-config.xml mybatis.mapper-locations=classpath:mapper/**/*.xml -# model camel case set -mybatis.configuration.map-underscore-to-camel-case=true + +spring.jackson.default-property-inclusion=non_null + #sql \ucd9c\ub825 log \uc124\uc815 logging.level.jdbc.sqlonly=off @@ -34,4 +36,9 @@ spring.servlet.multipart.max-request-size=20MB #management.endpoints.web.exposure.include=* #management.endpoint.health.show-details=always # -Ganpandaup.estimate.template.url=https://www.munjaon.co.kr/publish/email_form_ganpandaum_contact.html \ No newline at end of file +Ganpandaup.estimate.template.url=https://www.munjaon.co.kr/publish/email_form_ganpandaum_contact.html + + +biz.root.url=https://kapi.ppurio.com +biz.api.key=dheBWCONP6J5 +biz.id=itn0202 \ No newline at end of file diff --git a/src/main/resources/mapper/api/kakao/inqry/InqryMapper.xml b/src/main/resources/mapper/api/kakao/inqry/InqryMapper.xml new file mode 100644 index 0000000..40fe3fe --- /dev/null +++ b/src/main/resources/mapper/api/kakao/inqry/InqryMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/api/inqry/HstryMapper.xml b/src/main/resources/mapper/api/msg/inqry/HstryMapper.xml similarity index 99% rename from src/main/resources/mapper/api/inqry/HstryMapper.xml rename to src/main/resources/mapper/api/msg/inqry/HstryMapper.xml index 5950eb0..77ad3d5 100644 --- a/src/main/resources/mapper/api/inqry/HstryMapper.xml +++ b/src/main/resources/mapper/api/msg/inqry/HstryMapper.xml @@ -3,9 +3,9 @@ - + - /* 문자온 발송결과 페이지 쿼리를 그대로 사용함 - http://localhost:9080/web/mjon/msgsent/selectMsgSentView.do */ SELECT @@ -336,7 +336,7 @@ - + + - + /* kakao at getChnlIds */ SELECT -- USER_ID -- , PROFILE_ID @@ -26,4 +26,18 @@ AND USER_ID = #{mberId} + + + + \ No newline at end of file From bc09c23a0d2fde49c745804b533e9bd1bcdade51 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Tue, 26 Aug 2025 14:53:52 +0900 Subject: [PATCH 09/19] =?UTF-8?q?=EC=A0=84=EC=86=A1=EB=82=B4=EC=97=AD=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8,=20=EC=83=81=EC=84=B8=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inqry/service/Impl/InqryServiceImpl.java | 3 + .../at/send/mapper/domain/VarListMapVO.java | 2 +- .../service/AtParameterProcessingService.java | 125 +++++++++ .../send/service/impl/SendAtServiceImpl.java | 18 +- .../java/com/itn/mjonApi/util/MunjaUtil.java | 2 +- src/main/resources/application-dev.properties | 11 +- src/main/resources/log4jdbc.log4j2.properties | 20 +- src/main/resources/logback-spring.xml | 17 ++ .../mapper/api/msg/inqry/HstryMapper.xml | 73 ++--- .../com/itn/mjonApi/common/TestUtils.java | 249 ++++++++++++++++++ 10 files changed, 471 insertions(+), 49 deletions(-) create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/service/AtParameterProcessingService.java create mode 100644 src/test/java/com/itn/mjonApi/common/TestUtils.java diff --git a/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/inqry/service/Impl/InqryServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/inqry/service/Impl/InqryServiceImpl.java index 92560db..f25e10d 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/inqry/service/Impl/InqryServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/inqry/service/Impl/InqryServiceImpl.java @@ -152,6 +152,9 @@ public class InqryServiceImpl implements InqryService { private @Nullable RestResponse isSenderKeyChk(BizTemplateRequest bizTemplateRequest) { List chnlIdList = this.getChnlId(bizTemplateRequest.getMberId()); + log.info("bizTemplateRequest.getSenderKey() :: [{}]", bizTemplateRequest.getSenderKey()); + log.info("chnlIdList :: [{}]", chnlIdList.toString()); + boolean skErr = chnlIdList.stream() .anyMatch(p -> bizTemplateRequest.getSenderKey().equals(p.getSenderKey())); if(!skErr){ diff --git a/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/mapper/domain/VarListMapVO.java b/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/mapper/domain/VarListMapVO.java index b804a8b..76a4e96 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/mapper/domain/VarListMapVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/mapper/domain/VarListMapVO.java @@ -14,7 +14,7 @@ public class VarListMapVO { /** * @description : 수신자번호 */ - private String callTo; + private String callToList; /** * @description : 카카오 내용 diff --git a/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/service/AtParameterProcessingService.java b/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/service/AtParameterProcessingService.java new file mode 100644 index 0000000..69e5650 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/service/AtParameterProcessingService.java @@ -0,0 +1,125 @@ +package com.itn.mjonApi.mjon.api.kakao.at.send.service; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.itn.mjonApi.cmn.domain.biz.template.BizTemplateRequest; +import com.itn.mjonApi.cmn.domain.biz.template.detail.TemplateDetailResponse; +import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.mjon.api.kakao.at.inqry.mapper.domain.MjKakaoProfileInfoVO; +import com.itn.mjonApi.mjon.api.kakao.at.inqry.service.InqryService; +import com.itn.mjonApi.mjon.api.kakao.at.send.mapper.domain.MsgAtRequestVO; +import com.itn.mjonApi.mjon.api.kakao.at.send.mapper.domain.VarListMapVO; +import com.itn.mjonApi.util.MunjaUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * fileName : AtParameterProcessingService.java + * author : hylee + * date : 2025-08-18 + * description : 알림톡 파라미터 처리 서비스 + * MsgAtRequestVO의 비즈니스 로직을 담당 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-18 hylee 최초 생성 + */ +@Slf4j +@Service +public class AtParameterProcessingService { + + @Autowired + private IndexedParameterParserService indexedParameterParserService; + + @Autowired + private InqryService inqryService; + + /** + * HttpServletRequest에서 동적으로 인덱스된 파라미터들을 파싱하고 검증하여 + * MsgAtRequestVO의 varListMap에 설정 + * + * @param msgAtRequestVO 요청 VO 객체 + * @param request HTTP 요청 객체 + * @return 검증 실패 시 오류 코드, 성공 시 null + */ + public String processIndexedParameters(MsgAtRequestVO msgAtRequestVO, HttpServletRequest request) { + + // 기존 varListMap 초기화 + msgAtRequestVO.setVarListMap(new ArrayList<>()); + + + // 채널ID 확인 + String STAT_2010 = this.validateSenderKey(msgAtRequestVO.getMberId(), msgAtRequestVO.getSenderKey()); + if (STAT_2010 != null) return STAT_2010; + + // 템플릿 코드 확인 + String STAT_2030 = this.validateTemplateCode(msgAtRequestVO.getMberId(), msgAtRequestVO.getSenderKey(), msgAtRequestVO.getTemplateCode()); + if (STAT_2030 != null) return STAT_2030; + + // 파싱 로직을 IndexedParameterParserService에 위임 + List parsedList = indexedParameterParserService.parseIndexedParameters(msgAtRequestVO, request); + + // 파싱된 각 VO에 대해 검증 수행 + for (VarListMapVO vo : parsedList) { + String validationError = MunjaUtil.kakaoCmnValidate(vo, msgAtRequestVO.getSubMsgSendYn()); + + if (StringUtils.isNotEmpty(validationError)) { + return validationError; // 검증 실패 시 오류 코드 반환 + } + + // 검증 통과한 VO를 리스트에 추가 + msgAtRequestVO.getVarListMap().add(vo); + } + + return null; // 모든 검증 통과 + } + + private String validateTemplateCode(String mberId, String senderKey, String templateCode) { + try { + BizTemplateRequest request = BizTemplateRequest.builder() + .mberId(mberId) + .senderKey(senderKey) + .templateCode(templateCode) + .build(); + + RestResponse response = inqryService.getTemplateDetail(request); + JsonNode node = new ObjectMapper().valueToTree(response.getData()); + // 전체 출력 +// log.info("data 전체 :: {}", node.toPrettyString()); + // resultCode가 있으면 채널ID 오류 + inqryService.getTemplateDetail 참조 + if (node.has("resultCode")) { + return "STAT_"+node.get("resultCode").asText(); + } + + TemplateDetailResponse detail = (TemplateDetailResponse) + response.getData(); + + // 템플릿 상세 정보 활용 + log.info("template detail :: [{}]", detail); + return "200".equals(detail.getCode()) ? null : "STAT_2030"; + + } catch (Exception e) { + e.printStackTrace(); + return "STAT_2099"; + } + } + + public String validateSenderKey(String mberId, String senderKey) { + if (StringUtils.isEmpty(senderKey)) { + return "STAT_2010"; + } + List resultList = inqryService.getChnlId(mberId); + boolean ok = resultList.stream().anyMatch(p -> senderKey.equals(p.getSenderKey())); + return ok ? null : "STAT_2010"; + } + + + + +} \ No newline at end of file diff --git a/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/service/impl/SendAtServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/service/impl/SendAtServiceImpl.java index 97d5c66..e188a68 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/service/impl/SendAtServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/kakao/at/send/service/impl/SendAtServiceImpl.java @@ -9,6 +9,8 @@ import com.itn.mjonApi.mjon.api.kakao.at.send.service.AtParameterProcessingServi import com.itn.mjonApi.mjon.api.kakao.at.send.service.SendAtService; import com.itn.mjonApi.mjon.api.msg.inqry.mapper.PriceMapper; import com.itn.mjonApi.mjon.api.msg.send.mapper.SendMapper; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MjonResponseVO; +import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.SendSucRestResponse; import lombok.extern.slf4j.Slf4j; import org.apache.catalina.connector.Response; import org.apache.commons.lang3.StringUtils; @@ -70,24 +72,22 @@ public class SendAtServiceImpl implements SendAtService { // // // -// MjonResponseVO munjaSendResponse = apiService.postForEntity( -// "/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax_advc.do" -// , msgAtRequestVO -// , String.class -// ); + MjonResponseVO munjaSendResponse = apiService.postForEntity( + "/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax_advc.do" + , msgAtRequestVO + , String.class + ); // convertMjonDataToApiResponse => MjonResponseVO 데이터를 ApiResponse 데이터로 변환하는 메소드 -// log.info(" + munjaSendResponse :: [{}]", munjaSendResponse.toString()); - /* + log.info(" + munjaSendResponse :: [{}]", munjaSendResponse.toString()); if("OK".equals(munjaSendResponse.getResult())){ // 성공 return new RestResponse(SendSucRestResponse.convertMjonDataToApiResponse(munjaSendResponse)); }else{ // 실패 return new RestResponse(new FailRestResponse(munjaSendResponse.getStatCode(),"")); } - */ - return new RestResponse(msgAtRequestVO); +// return new RestResponse(msgAtRequestVO); } } diff --git a/src/main/java/com/itn/mjonApi/util/MunjaUtil.java b/src/main/java/com/itn/mjonApi/util/MunjaUtil.java index d99c011..ec5cb5b 100644 --- a/src/main/java/com/itn/mjonApi/util/MunjaUtil.java +++ b/src/main/java/com/itn/mjonApi/util/MunjaUtil.java @@ -108,7 +108,7 @@ public class MunjaUtil { public static String kakaoCmnValidate(VarListMapVO vo, String subMsgSendYn) { // 수신번호 검증 - String callTo = vo.getCallTo(); + String callTo = vo.getCallToList(); if (MunjaUtil.getCallToChk(callTo)) { return "STAT_1020"; // 수신자 전화번호 오류 } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 29d96a2..33fe245 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -2,7 +2,7 @@ # DB INFO spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy -spring.datasource.url=jdbc:log4jdbc:mysql://192.168.0.125:3306/mjon?serverTimezone=Asia/Seoul +spring.datasource.url=jdbc:log4jdbc:mysql://192.168.0.125:3306/mjon_advc?serverTimezone=Asia/Seoul #spring.datasource.url=jdbc:log4jdbc:mysql://139.150.72.157:3306/mjon?serverTimezone=Asia/Seoul spring.datasource.username=mjonUr @@ -10,7 +10,14 @@ spring.datasource.password=mjon!@#$ server.port=8088 -#logging.level.root=info +# Logging Configuration +logging.level.root=info +logging.level.jdbc.sqltiming=info +logging.level.jdbc.resultset=info +logging.level.jdbc.resultsettable=info +logging.level.jdbc.sqlonly=debug +logging.level.jdbc.audit=warn +logging.level.jdbc.connection=warn #??? ?? ?? api.root.url=http://localhost:8080/ diff --git a/src/main/resources/log4jdbc.log4j2.properties b/src/main/resources/log4jdbc.log4j2.properties index a48b3e9..48a146b 100644 --- a/src/main/resources/log4jdbc.log4j2.properties +++ b/src/main/resources/log4jdbc.log4j2.properties @@ -1,2 +1,20 @@ +# log4jdbc 설정 log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator -log4jdbc.dump.sql.maxlinelength=0 \ No newline at end of file + +# SQL 출력 설정 +log4jdbc.dump.sql.maxlinelength=0 +log4jdbc.trim.sql=true +log4jdbc.trim.sql.extrablanklines=false + +# ResultSet 출력 활성화 (가장 중요한 설정) +log4jdbc.dump.sql.select=true +log4jdbc.dump.sql.insert=true +log4jdbc.dump.sql.update=true +log4jdbc.dump.sql.delete=true + +# ResultSet 테이블 형태 출력을 위한 추가 설정 +log4jdbc.dump.fulldebugstacktrace=false +log4jdbc.suppress.generated.keys.exception=false + +# 에러 억제 설정 +log4jdbc.auto.load.popular.drivers=false \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index d2871ac..820b844 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -81,6 +81,23 @@ + + + + + + + + + + + + + + + + + AND b.regdate DATE_ADD(CURDATE(), INTERVAL 1 DAY) - AND STR_TO_DATE(CONCAT(#{endDate}, '235959'), '%Y%m%d%H%i%s') >= b.regdate + AND ( + (b.regdate STR_TO_DATE(CONCAT(#{endDate}, '235959'), '%Y%m%d%H%i%s')) + OR + (b.req_date STR_TO_DATE(CONCAT(#{endDate}, '235959'), '%Y%m%d%H%i%s')) + ) AND STR_TO_DATE(date_format(DATE_ADD(NOW(), INTERVAL 1 day),'%Y%m%d000000'), '%Y%m%d%H%i%s') >= b.regdate