이지우 - 알림톡 환불 프로세스 수정 및 친구톡 환불과 통합 작업 중

This commit is contained in:
JIWOO 2025-08-06 18:20:27 +09:00
parent d1e1244cd5
commit c80bf91d85
5 changed files with 130 additions and 27 deletions

View File

@ -31,4 +31,7 @@ public interface KakaoAlimTalkService {
StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception;
//카카오(알림톡, 친구톡 통합) 전송 실패 환불리스트 조회
public void selectKakaoSentRefundList() throws Exception;
}

View File

@ -58,6 +58,11 @@ public class KakaoAlimTalkDAO extends EgovAbstractDAO {
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);
}

View File

@ -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<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 @@ 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<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 @@ 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 + " 전송 실패로 인한 결재 금액 환불");
}
}

View File

@ -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;
}
}

View File

@ -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