From 8f230012ed751045d16ce421f9fda1558105e462 Mon Sep 17 00:00:00 2001 From: hylee Date: Thu, 15 Jun 2023 19:07:20 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20api=20log=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=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 | 201 +++++++++--------- .../java/com/itn/mjonApi/cmn/msg/StatMsg.java | 6 +- .../send/service/impl/SendServiceImpl.java | 1 + .../mapper/domain/LettnApiSendMsgLogVO.java | 2 +- .../com/itn/mjonApi/util/ApiObjectUtil.java | 65 ++++++ .../mapper/log/LettnApiSendMsgLog.xml | 12 +- 6 files changed, 181 insertions(+), 106 deletions(-) create mode 100644 src/main/java/com/itn/mjonApi/util/ApiObjectUtil.java 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 299b099..77dc712 100644 --- a/src/main/java/com/itn/mjonApi/cmn/aop/LogAspect.java +++ b/src/main/java/com/itn/mjonApi/cmn/aop/LogAspect.java @@ -1,10 +1,9 @@ package com.itn.mjonApi.cmn.aop; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.itn.mjonApi.cmn.idgen.service.IdgenService; import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.cmn.msg.SendFailRestResponse; import com.itn.mjonApi.cmn.msg.SendSucRestResponse; import com.itn.mjonApi.mjon.api.access.mapper.domain.AccessKeyVO; import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO; @@ -13,6 +12,7 @@ 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.domain.LettnAccessLogVO; import com.itn.mjonApi.mjon.log.service.mapper.domain.LettnApiSendMsgLogVO; +import com.itn.mjonApi.util.ApiObjectUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.JoinPoint; @@ -144,15 +144,8 @@ public class LogAspect { String methodNm = getMethodSignature(joinPoint); if("sendMsgData".equals(methodNm) || "sendMsgsData".equals(methodNm)){ - String resultCode = this.getResultCodeString(returnValue); - - - // resultCode == 0 : 문자 발송이 성공일 때 - if("0".equals(resultCode)){ - - LettnApiSendMsgLogVO apiSendMsgLogVO = this.makeApiSendMsgLogVO(returnValue, logId, methodNm); - lettnApiSendMsgLogMapper.insert(apiSendMsgLogVO); - } + LettnApiSendMsgLogVO apiSendMsgLogVO = this.makeApiSendMsgLogVO(returnValue, logId, methodNm); + lettnApiSendMsgLogMapper.insert(apiSendMsgLogVO); } @@ -165,38 +158,73 @@ public class LogAspect { * @param methodNm * @return */ - private LettnApiSendMsgLogVO makeApiSendMsgLogVO(Object returnValue, String logId, String methodNm) { + private LettnApiSendMsgLogVO makeApiSendMsgLogVO(Object returnValue, String logId, String methodNm) throws IllegalAccessException { + + // 성공 / 실패 코드 + String resultCode = this.getResultCodeString(returnValue); + RestResponse restResponse = (RestResponse) returnValue; - SendSucRestResponse SendSucRestResponse = (SendSucRestResponse) restResponse.getData(); + Object dataObject = restResponse.getData(); + + // 파라미터 return class 이름 추출 + String classNm = this.getClassNmFromObject(dataObject); String msgGroupId = null; + String test_yn = null; + // 성공일때 CLASS + if("SendSucRestResponse".equals(classNm)) { + SendSucRestResponse sendSucRestResponse = (SendSucRestResponse) dataObject; + + if("sendMsgData".equals(methodNm)){ + + msgGroupId = sendSucRestResponse.getMsgGroupId(); + } + else if("sendMsgsData".equals(methodNm)){ + + // list to String + msgGroupId = sendSucRestResponse.getMsgGroupIdList().stream() + .map(n -> String.valueOf(n)) + .collect(Collectors.joining("," )); + } + test_yn = sendSucRestResponse.getTest_yn(); + +// ApiObjectUtil.getAccessKeyVOToJsonString(sendSucRestResponse); + } + // 실패일때 CLASS + else if("SendFailRestResponse".equals(classNm)) { + SendFailRestResponse sendFailRestResponse = (SendFailRestResponse) dataObject; + + test_yn = sendFailRestResponse.getTest_yn(); +// ApiObjectUtil.getAccessKeyVOToJsonString(sendSucRestResponse); + } + + + + + + String msgSendType = null; - if("sendMsgData".equals(methodNm)){ - msgSendType = "msg"; - msgGroupId = SendSucRestResponse.getMsgGroupId(); - - - } - else if("sendMsgsData".equals(methodNm)){ - msgSendType = "msgs"; -// msgGroupId = SendSucRestResponse.getMsgGroupIdList().toString(); - - // list to String - msgGroupId = SendSucRestResponse.getMsgGroupIdList().stream() - .map(n -> String.valueOf(n)) - .collect(Collectors.joining("," )); - - } + if("sendMsgData".equals(methodNm)){msgSendType = "msg";} + else if("sendMsgsData".equals(methodNm)){msgSendType = "msgs";} return LettnApiSendMsgLogVO.builder() .logNo(idgenApiSendLogId.getNextStringId()) .accessLogId(logId) + .sendResultCode(resultCode) .msgSendType(msgSendType) .msgGroupId(msgGroupId) + .test_yn(test_yn) .build(); } + @NotNull + private static String getClassNmFromObject(Object returnValue) { + String classNmTemp = returnValue.getClass().getName(); + String classNm = classNmTemp.substring(classNmTemp.lastIndexOf(".")+1, classNmTemp.length()); + return classNm; + } + /** * @description returnCode 가져옴 * @param returnValue @@ -212,6 +240,8 @@ public class LogAspect { for(Field field : data.getClass().getDeclaredFields()){ field.setAccessible(true); if("resultCode".equals(field.getName())){ resultCode =field.get(data).toString(); } + + if(StringUtils.isNotEmpty(resultCode)){ break;} } return resultCode; } @@ -228,81 +258,10 @@ public class LogAspect { } - /** - * @description object의 맞는 Class를 찾아서 맵핑 - * @return - */ - private String getJsonToString(Object returnValue) throws JsonProcessingException { - - if(ObjectUtils.isEmpty(returnValue)){ - return null; - } - - String classNmTemp = returnValue.getClass().getName(); - String classNm = classNmTemp.substring(classNmTemp.lastIndexOf(".")+1, classNmTemp.length()); - - /** - * @description : return Class가 추가되면 여기에 추가 - */ - if("AccessKeyVO".equals(classNm)) { - AccessKeyVO accessKeyVO = (AccessKeyVO) returnValue; - return this.getAccessKeyVOToJsonString(accessKeyVO); - } - else if("RestResponse".equals(classNm)){ - RestResponse restResponse = (RestResponse) returnValue; - return this.getRestResponseToJsonString(restResponse); - } - else if("MsgsRequestVO".equals(classNm)){ - MsgsRequestVO msgsRequestVO = (MsgsRequestVO) returnValue; - return this.getMsgsRequestVOToJsonString(msgsRequestVO); - } - else if("MsgRequestVO".equals(classNm)){ - MsgRequestVO restResponse = (MsgRequestVO) returnValue; - return this.getMsgRequestVOToJsonString(restResponse); - } - else{ - return "데이터를 추가해 주세요"; - } - - - } - /** - * @description : VO를 json으로 변환 - * @param restResponse - * @return String - * @throws JsonProcessingException - */ - private static String getRestResponseToJsonString(RestResponse restResponse) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - // .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함 - return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(restResponse); - } - private static String getMsgsRequestVOToJsonString(MsgsRequestVO msgsRequestVO) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - // .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함 - return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(msgsRequestVO); - } - private 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 - */ - private static String getAccessKeyVOToJsonString(AccessKeyVO accessKeyVO) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - // .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함 - return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(accessKeyVO); - } /** * @description : HttpServletRequest 객체를 가져옴 @@ -313,4 +272,46 @@ public class LogAspect { ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); return request; } + + + + + /** + * @description object의 맞는 Class를 찾아서 맵핑 + * @return + */ + public String getJsonToString(Object returnValue) throws JsonProcessingException { + + 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); + } + 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/msg/StatMsg.java b/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java index 124dd50..364cf2e 100644 --- a/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java +++ b/src/main/java/com/itn/mjonApi/cmn/msg/StatMsg.java @@ -48,7 +48,11 @@ public enum StatMsg { //상세발송====================================================================== , STAT_4099("4099","기타 시스템 오류") - + + //발송가능건수====================================================================== + + , STAT_5099("5099","기타 시스템 오류") + //====================================================================== , msgType4("단문","SMS") , msgType6("장문","LMS") 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 18d0247..54022df 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 @@ -126,6 +126,7 @@ public class SendServiceImpl implements SendService { }else{ return new RestResponse( SendSucRestResponse.builder() + .resultCode("0") .msgGroupId("MSGGID_0000000000000") // 전송 메세지 그룹 ID .successCnt("5") // 성공 건수 .blockCnt("2") // 수신거부 건수 diff --git a/src/main/java/com/itn/mjonApi/mjon/log/service/mapper/domain/LettnApiSendMsgLogVO.java b/src/main/java/com/itn/mjonApi/mjon/log/service/mapper/domain/LettnApiSendMsgLogVO.java index 1c81c30..78face6 100644 --- a/src/main/java/com/itn/mjonApi/mjon/log/service/mapper/domain/LettnApiSendMsgLogVO.java +++ b/src/main/java/com/itn/mjonApi/mjon/log/service/mapper/domain/LettnApiSendMsgLogVO.java @@ -28,7 +28,7 @@ public class LettnApiSendMsgLogVO implements Serializable { private String logNo; // access log 고유번호 private String accessLogId; // 일반회원ID private String sendResultCode; // 메세지 정송 결과 코드 - private String testYn; // 테스트 여부 (실 발송 : "", 실패 테스트 : "YF", 성공 테스트 "YS") + private String test_yn; // 테스트 여부 (실 발송 : "", 실패 테스트 : "YF", 성공 테스트 "YS") private String msgSendType; // 문자 : msg 대량문자 : msgs private String msgGroupId; // 문자 그룹 ID diff --git a/src/main/java/com/itn/mjonApi/util/ApiObjectUtil.java b/src/main/java/com/itn/mjonApi/util/ApiObjectUtil.java new file mode 100644 index 0000000..8e6e40e --- /dev/null +++ b/src/main/java/com/itn/mjonApi/util/ApiObjectUtil.java @@ -0,0 +1,65 @@ +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 + * fileName : ObjectUtil + * author : hylee + * date : 2023-06-15 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-06-15 hylee 최초 생성 + */ +public class ApiObjectUtil { + + + + + + + + + /** + * @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 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/mapper/log/LettnApiSendMsgLog.xml b/src/main/resources/mapper/log/LettnApiSendMsgLog.xml index a05d4ff..95f6936 100644 --- a/src/main/resources/mapper/log/LettnApiSendMsgLog.xml +++ b/src/main/resources/mapper/log/LettnApiSendMsgLog.xml @@ -27,10 +27,12 @@ LOG_NO - , ACCESS_LOG_ID - , MSG_SEND_TYPE - , MSG_GROUP_ID - , REQ_REGIST_PNTTM + , ACCESS_LOG_ID + , SEND_RESULT_CODE + , TEST_YN + , MSG_SEND_TYPE + , MSG_GROUP_ID + , REQ_REGIST_PNTTM @@ -43,6 +45,8 @@ VALUE ( #{logNo} , #{accessLogId} + , #{sendResultCode} + , #{test_yn} , #{msgSendType} , #{msgGroupId} , now()