JIWOO 2025-08-06
이지우 - 알림톡 환불 프로세스 수정 및 친구톡 환불과 통합 작업 중
@c80bf91d8576199f9f3d0d5cc10d960a0c98b355
src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
--- src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
@@ -31,4 +31,7 @@
 
 	StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception;
 	
+	//카카오(알림톡, 친구톡 통합) 전송 실패 환불리스트 조회
+	public void selectKakaoSentRefundList() throws Exception;
+	
 }
src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
@@ -58,6 +58,11 @@
 		return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoFtSentRefundList");
 	}
 	
+	@SuppressWarnings("unchecked")
+	public List<KakaoVO> selectKakaoSentRefundList() throws Exception{
+		return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoSentRefundList");
+	}
+	
 	public KakaoVO selectKakaoAtUmid(KakaoVO kakaoVO) throws Exception{
 		return (KakaoVO) select("kakaoAlimTalkDAO.selectKakaoAtUmid", kakaoVO); 
 	}
src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
@@ -105,6 +105,8 @@
 	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 @@
 		 */
 		List<KakaoVO> 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 @@
 			
 			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<KakaoVO> 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 @@
 	}
 	
 
-	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 @@
 			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 @@
 			if (diffPrice.compareTo(BigDecimal.ZERO) > 0) {
 				String result = diffPrice.toString();
 				kakaoVO.setEachPrice(result);
-
-				handleRefund(kakaoVO, "카카오 친구톡 전송으로 인한 결재 차액 환불");
+				handleRefund(kakaoVO, "카카오 " + kakaoType + " 전송으로 인한 결재 차액 환불");
 			}
 			
 		}else {
@@ -897,6 +926,13 @@
 		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 @@
 			mjonMsgDAO.updateRefundY(kakaoVO);
 		} else {
 			// 대체문자 발송 실패 된 경우 (친구톡 비용 환불 필요)
-			handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불");
+			handleRefund(kakaoVO, "카카오 " + kakaoType + " 전송 실패로 인한 결재 금액 환불");
 		}
 	}
 	
src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
@@ -1540,4 +1540,24 @@
 		
 		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;
+	}
 }
src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
@@ -205,11 +205,13 @@
 		)
 	</insert>
 	
-	<select id="kakaoAlimTalkDAO.selectKakaoAtSentRefundList" resultClass="kakaoVO">
+	<select id="kakaoAlimTalkDAO.selectKakaoSentRefundList" resultClass="kakaoVO">
 		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)
+	</select>
+	
+	<select id="kakaoAlimTalkDAO.selectKakaoAtSentRefundList" resultClass="kakaoVO">
+		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
+			, MMD.RSLT_CODE2							AS rsltCode2
+			, MMD.AGENT_CODE							AS agentCode
+			, DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T')	AS sentDate
+			, 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'
@@ -249,6 +287,7 @@
 			, 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
Add a comment
List