From c80bf91d8576199f9f3d0d5cc10d960a0c98b355 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Wed, 6 Aug 2025 18:20:27 +0900 Subject: [PATCH 01/11] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=ED=86=A1=20=ED=99=98=EB=B6=88=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=84=B8=EC=8A=A4=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20=ED=99=98=EB=B6=88=EA=B3=BC=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9=20=EC=9E=91=EC=97=85=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kakaoAt/service/KakaoAlimTalkService.java | 3 + .../service/impl/KakaoAlimTalkDAO.java | 5 ++ .../impl/KakaoAlimTalkServiceImpl.java | 86 +++++++++++++------ .../web/KakaoAlimTalkSendController.java | 20 +++++ .../let/mjo/kakao/Kakao_AT_SQL_Mysql.xml | 43 +++++++++- 5 files changed, 130 insertions(+), 27 deletions(-) diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java index 098f9768..9f17fec3 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java @@ -31,4 +31,7 @@ public interface KakaoAlimTalkService { StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception; + //카카오(알림톡, 친구톡 통합) 전송 실패 환불리스트 조회 + public void selectKakaoSentRefundList() throws Exception; + } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java index 46520d26..d75ea3dd 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java @@ -58,6 +58,11 @@ public class KakaoAlimTalkDAO extends EgovAbstractDAO { return (List) list("kakaoAlimTalkDAO.selectKakaoFtSentRefundList"); } + @SuppressWarnings("unchecked") + public List selectKakaoSentRefundList() throws Exception{ + return (List) list("kakaoAlimTalkDAO.selectKakaoSentRefundList"); + } + public KakaoVO selectKakaoAtUmid(KakaoVO kakaoVO) throws Exception{ return (KakaoVO) select("kakaoAlimTalkDAO.selectKakaoAtUmid", kakaoVO); } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java index 33ab5fd6..dd94d384 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java @@ -105,6 +105,8 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements final String RESEND_YN_YES = "Y"; final String SMS_SUCCESS_CODE = "4100"; // SMS 성공 코드 final String MMS_SUCCESS_CODE = "6600"; // MMS 성공 코드 + final String AT_MSG_TYPE = "8"; // MSG 타입 알림톡 + final String FT_MSG_TYPE = "9"; // MSG 타입 친구톡 //발신프로필 상태값 변경(삭제/복구 기능) @Override @@ -808,23 +810,19 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements */ List kakaoAtSentRefundList = kakaoAlimTalkDAO.selectKakaoAtSentRefundList(); - for(KakaoVO vo : kakaoAtSentRefundList) { - System.out.println(vo.getMsgGroupId() +"________결과 : " +vo.getRsltCode() +" 대체문자 전송 : "+vo.getSubMsgSendYn()); - if(vo.getRsltCode().equals("7000")) { - kakaoAlimTalkDAO.updateKakaoAtSend(vo); - }else if(vo.getSubMsgSendYn().equals("Y")) { - KakaoVO info = kakaoAlimTalkDAO.selectKakaoAtUmid(vo); + for(KakaoVO kakaoVO : kakaoAtSentRefundList) { + + if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {//알림톡 발송 성공시 - System.out.println("대체문자 전송 : " + info.getBizUmid()); - if (info.getBizUmid() != null) { - kakaoAlimTalkDAO.updateKakaoAtSubMsgSend(vo); - }else { - kakaoAlimTalkDAO.updateKakaoAtNotSend(vo); - } + processKakaoSendCharge(kakaoVO); + }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) { + //알림톡 발송 실패 했고 , 대체문자 발송 했을 경우 + handleAlternativeMessageScenario(kakaoVO); }else { - kakaoAlimTalkDAO.updateKakaoAtNotSend(vo); + handleRefund(kakaoVO, "카카오 알림톡 전송 실패로 인한 결재 금액 환불"); } + } } @@ -842,7 +840,32 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {//친구톡 발송 성공시 - processFtSendCharge(kakaoVO); + processKakaoSendCharge(kakaoVO); + + }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) { + //친구톡 발송 실패 했고, 대체문자 발송 했을 경우 + handleAlternativeMessageScenario(kakaoVO); + + }else { + handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불"); + } + } + } + + /** + * @ 카카오 알림톡, 친구톡 통합 환불 + */ + @Override + public void selectKakaoSentRefundList() throws Exception { + + List kakaoFtSentRefundList = kakaoAlimTalkDAO.selectKakaoSentRefundList(); + + for(KakaoVO kakaoVO : kakaoFtSentRefundList) { + System.out.println(kakaoVO.getMsgGroupId() +"________결과 : " +kakaoVO.getRsltCode() +" 대체문자 전송 : "+kakaoVO.getSubMsgSendYn()); + + if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {//친구톡 발송 성공시 + + processKakaoSendCharge(kakaoVO); }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) { //친구톡 발송 실패 했고, 대체문자 발송 했을 경우 @@ -855,7 +878,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements } - private void processFtSendCharge(KakaoVO kakaoVO) throws Exception { + private void processKakaoSendCharge(KakaoVO kakaoVO) throws Exception { if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) { @@ -863,14 +886,21 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements BizKakaoPriceVO bizKakaoPriceVO = mjonPayDAO.selectBizKakaoPrice(kakaoVO.getMsgGroupId()); BigDecimal sendPrice = null; - if(StringUtils.isEmpty(kakaoVO.getBizKakaoImageType())){ - sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtPrice()); - }else if("I".equals(kakaoVO.getBizKakaoImageType())){ - sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtImgPrice()); - }else if("W".equals(kakaoVO.getBizKakaoImageType())){ - sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtWideImgPrice()); + String kakaoType = ""; + + if(AT_MSG_TYPE.equals(kakaoVO.getMsgType())){ + sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoAtPrice()); + kakaoType = "알림톡"; + }else { + if(StringUtils.isEmpty(kakaoVO.getBizKakaoImageType())){ + sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtPrice()); + }else if("I".equals(kakaoVO.getBizKakaoImageType())){ + sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtImgPrice()); + }else if("W".equals(kakaoVO.getBizKakaoImageType())){ + sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtWideImgPrice()); + } + kakaoType = "친구톡"; } - // 예시: 각 건당 가격이 이미 String 형태라면 변환 BigDecimal eachPrice = new BigDecimal(kakaoVO.getEachPrice()); @@ -881,8 +911,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements if (diffPrice.compareTo(BigDecimal.ZERO) > 0) { String result = diffPrice.toString(); kakaoVO.setEachPrice(result); - - handleRefund(kakaoVO, "카카오 친구톡 전송으로 인한 결재 차액 환불"); + handleRefund(kakaoVO, "카카오 " + kakaoType + " 전송으로 인한 결재 차액 환불"); } }else { @@ -897,6 +926,13 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements KakaoVO bizLogVO = kakaoAlimTalkDAO.selectBizLog(kakaoVO.getBizUmid()); log.info("대체문자 전송 UMID: {}", kakaoVO.getBizUmid()); + // 알림톡 or 친구톡 구분 + String kakaoType = ""; + if(AT_MSG_TYPE.equals(kakaoVO.getMsgType())){ + kakaoType = "알림톡"; + }else { + kakaoType = "친구톡"; + } // 대체문자가 성공적으로 발송되었는지 확인 (SMS 또는 MMS 성공) boolean isAlternativeMessageSuccessful = false; if (bizLogVO != null && StringUtils.isNotEmpty(bizLogVO.getBizLogCallStatus())) { @@ -914,7 +950,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements mjonMsgDAO.updateRefundY(kakaoVO); } else { // 대체문자 발송 실패 된 경우 (친구톡 비용 환불 필요) - handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불"); + handleRefund(kakaoVO, "카카오 " + kakaoType + " 전송 실패로 인한 결재 금액 환불"); } } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java index cf1641b3..ed102a73 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java @@ -1540,4 +1540,24 @@ public class KakaoAlimTalkSendController { return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp"; } + + /** + * @Method Name : kakaoMsgSendRefundTestAjax + * @작성일 : 2025. 8. 6. + * @작성자 : 이지우 + * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 + */ + @RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaoMsgSendRefundTestAjax.do"}) + public ModelAndView kakaoMsgSendRefundTestAjax(ModelMap model + , HttpServletRequest request + , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + kakaoAlimTalkService.selectKakaoSentRefundList(); + + modelAndView.addObject("result", "success"); + return modelAndView; + } } diff --git a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml index 0864e4f6..7aa178ef 100644 --- a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml @@ -205,11 +205,13 @@ ) - SELECT MMD.USER_ID AS userId , MMD.MSG_GROUP_ID AS msgGroupId , MMD.MSG_SEQ AS msgSeq + , MMGD.BIZ_KAKAO_IMAGE_TYPE AS bizKakaoImageType + , MMGD.EACH_PRICE AS eachPrice , MMD.USERDATA AS userData , MMD.REFUND_YN AS refundYn , MMD.RSLT_CODE AS rsltCode @@ -219,11 +221,47 @@ , DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate , MMD.BIZ_KAKAO_RESEND_YN AS subMsgSendYn , MMD.BIZ_KAKAO_RESEND_TYPE AS subMsgType - + , MMD.FILE_CNT AS fileCnt + , MMD.BIZ_UMID AS bizUmid + , MMD.MSG_TYPE AS msgType FROM MJ_MSG_DATA MMD INNER JOIN LETTNGNRLMBER MB ON MMD.USER_ID = MB.MBER_ID + INNER JOIN mj_msg_group_data MMGD + on MMD.MSG_GROUP_ID = MMGD.MSG_GROUP_ID + WHERE 1=1 + AND MMD.CUR_STATE = '3' + AND MMD.REFUND_YN = 'N' + AND MMD.RESERVE_C_YN = 'N' + AND MMD.MSG_TYPE IN(8, 9) + + + - - - -