Merge branch '5361_알림톡_환불수정'
@846c6cec4a05110edb7eec655e27fad15a37a4aa
--- src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
... | ... | @@ -23,12 +23,10 @@ |
| 23 | 23 |
//카카오 친구톡 발신 |
| 24 | 24 |
public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception; |
| 25 | 25 |
|
| 26 |
- //카카오 알림톡 전송 실패 환불리스트 조회 |
|
| 27 |
- public void selectKakaoAtSentRefundList() throws Exception; |
|
| 28 |
- |
|
| 29 |
- //카카오 친구톡 전송 실패 환불리스트 조회 |
|
| 30 |
- public void selectKakaoFtSentRefundList() throws Exception; |
|
| 31 |
- |
|
| 32 | 26 |
StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception; |
| 33 | 27 |
|
| 28 |
+ //카카오(알림톡, 친구톡 통합) 전송 실패 환불리스트 조회 |
|
| 29 |
+ public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception; |
|
| 30 |
+ |
|
| 31 |
+ public void kakaoSingleRefund(KakaoVO kakaoVO) throws Exception; |
|
| 34 | 32 |
} |
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
... | ... | @@ -49,13 +49,8 @@ |
| 49 | 49 |
} |
| 50 | 50 |
|
| 51 | 51 |
@SuppressWarnings("unchecked")
|
| 52 |
- public List<KakaoVO> selectKakaoAtSentRefundList() throws Exception{
|
|
| 53 |
- return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoAtSentRefundList");
|
|
| 54 |
- } |
|
| 55 |
- |
|
| 56 |
- @SuppressWarnings("unchecked")
|
|
| 57 |
- public List<KakaoVO> selectKakaoFtSentRefundList() throws Exception{
|
|
| 58 |
- return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoFtSentRefundList");
|
|
| 52 |
+ public List<KakaoVO> selectKakaoSentRefundList() throws Exception{
|
|
| 53 |
+ return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoSentRefundList");
|
|
| 59 | 54 |
} |
| 60 | 55 |
|
| 61 | 56 |
public KakaoVO selectKakaoAtUmid(KakaoVO kakaoVO) throws Exception{
|
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
... | ... | @@ -1,7 +1,6 @@ |
| 1 | 1 |
package itn.let.kakao.user.kakaoAt.service.impl; |
| 2 | 2 |
|
| 3 | 3 |
import java.math.BigDecimal; |
| 4 |
-import java.math.RoundingMode; |
|
| 5 | 4 |
import java.text.SimpleDateFormat; |
| 6 | 5 |
import java.time.Duration; |
| 7 | 6 |
import java.time.Instant; |
... | ... | @@ -11,8 +10,6 @@ |
| 11 | 10 |
import java.util.HashMap; |
| 12 | 11 |
import java.util.List; |
| 13 | 12 |
import java.util.Map; |
| 14 |
-import java.util.Objects; |
|
| 15 |
-import java.util.Set; |
|
| 16 | 13 |
import java.util.stream.Collectors; |
| 17 | 14 |
|
| 18 | 15 |
import javax.annotation.Resource; |
... | ... | @@ -22,12 +19,13 @@ |
| 22 | 19 |
import org.springframework.beans.factory.annotation.Autowired; |
| 23 | 20 |
import org.springframework.http.HttpStatus; |
| 24 | 21 |
import org.springframework.stereotype.Service; |
| 22 |
+import org.springframework.transaction.annotation.Propagation; |
|
| 23 |
+import org.springframework.transaction.annotation.Transactional; |
|
| 25 | 24 |
|
| 26 | 25 |
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; |
| 27 | 26 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 28 | 27 |
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
| 29 | 28 |
import itn.com.cmm.LoginVO; |
| 30 |
-import itn.com.cmm.MjonMsgSendVO; |
|
| 31 | 29 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 32 | 30 |
import itn.let.kakao.kakaoComm.BizKakaoPriceVO; |
| 33 | 31 |
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; |
... | ... | @@ -51,7 +49,6 @@ |
| 51 | 49 |
import itn.let.sym.site.service.JoinSettingVO; |
| 52 | 50 |
import itn.let.sym.site.service.impl.SiteManagerDAO; |
| 53 | 51 |
import itn.let.uss.umt.service.EgovUserManageService; |
| 54 |
-import itn.let.uss.umt.service.UserManageVO; |
|
| 55 | 52 |
import lombok.extern.slf4j.Slf4j; |
| 56 | 53 |
|
| 57 | 54 |
@Slf4j |
... | ... | @@ -105,6 +102,8 @@ |
| 105 | 102 |
final String RESEND_YN_YES = "Y"; |
| 106 | 103 |
final String SMS_SUCCESS_CODE = "4100"; // SMS 성공 코드 |
| 107 | 104 |
final String MMS_SUCCESS_CODE = "6600"; // MMS 성공 코드 |
| 105 |
+ final String AT_MSG_TYPE = "8"; // MSG 타입 알림톡 |
|
| 106 |
+ final String FT_MSG_TYPE = "9"; // MSG 타입 친구톡 |
|
| 108 | 107 |
|
| 109 | 108 |
//발신프로필 상태값 변경(삭제/복구 기능) |
| 110 | 109 |
@Override |
... | ... | @@ -793,144 +792,76 @@ |
| 793 | 792 |
return returnVO; |
| 794 | 793 |
} |
| 795 | 794 |
|
| 796 |
- |
|
| 797 |
- /* |
|
| 798 |
- * 카카오 알림톡 발송 실패에 따른 금액 환불 처리 |
|
| 799 |
- * |
|
| 800 |
- * */ |
|
| 801 |
- @Override |
|
| 802 |
- public void selectKakaoAtSentRefundList() throws Exception {
|
|
| 795 |
+ private void processKakaoSendCharge(KakaoVO kakaoVO) throws Exception {
|
|
| 803 | 796 |
|
| 804 |
- /** |
|
| 805 |
- * 1. 카카오 AT 전송성공 확인 |
|
| 806 |
- * 2. 카카오 AT 전송실패, 대채문자 전송확인 |
|
| 807 |
- * 3. 카카오 AT 전송 실패 확인 |
|
| 808 |
- */ |
|
| 809 |
- List<KakaoVO> kakaoAtSentRefundList = kakaoAlimTalkDAO.selectKakaoAtSentRefundList(); |
|
| 810 |
- |
|
| 811 |
- for(KakaoVO vo : kakaoAtSentRefundList) {
|
|
| 812 |
- System.out.println(vo.getMsgGroupId() +"________결과 : " +vo.getRsltCode() +" 대체문자 전송 : "+vo.getSubMsgSendYn()); |
|
| 813 |
- if(vo.getRsltCode().equals("7000")) {
|
|
| 814 |
- kakaoAlimTalkDAO.updateKakaoAtSend(vo); |
|
| 815 |
- }else if(vo.getSubMsgSendYn().equals("Y")) {
|
|
| 816 |
- KakaoVO info = kakaoAlimTalkDAO.selectKakaoAtUmid(vo); |
|
| 817 |
- |
|
| 818 |
- System.out.println("대체문자 전송 : " + info.getBizUmid());
|
|
| 819 |
- if (info.getBizUmid() != null) {
|
|
| 820 |
- kakaoAlimTalkDAO.updateKakaoAtSubMsgSend(vo); |
|
| 821 |
- }else {
|
|
| 822 |
- kakaoAlimTalkDAO.updateKakaoAtNotSend(vo); |
|
| 823 |
- } |
|
| 824 |
- |
|
| 825 |
- }else {
|
|
| 826 |
- kakaoAlimTalkDAO.updateKakaoAtNotSend(vo); |
|
| 827 |
- } |
|
| 828 |
- } |
|
| 829 |
- } |
|
| 830 |
- |
|
| 831 |
- |
|
| 832 |
- /** |
|
| 833 |
- * @ 카카오 친구톡 환불 |
|
| 834 |
- */ |
|
| 835 |
- @Override |
|
| 836 |
- public void selectKakaoFtSentRefundList() throws Exception {
|
|
| 837 |
- |
|
| 838 |
- List<KakaoVO> kakaoFtSentRefundList = kakaoAlimTalkDAO.selectKakaoFtSentRefundList(); |
|
| 839 |
- |
|
| 840 |
- for(KakaoVO kakaoVO : kakaoFtSentRefundList) {
|
|
| 841 |
- System.out.println(kakaoVO.getMsgGroupId() +"________결과 : " +kakaoVO.getRsltCode() +" 대체문자 전송 : "+kakaoVO.getSubMsgSendYn()); |
|
| 842 |
- |
|
| 843 |
- if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {//친구톡 발송 성공시
|
|
| 844 |
- |
|
| 845 |
- processFtSendCharge(kakaoVO); |
|
| 846 |
- |
|
| 847 |
- }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) {
|
|
| 848 |
- //친구톡 발송 실패 했고, 대체문자 발송 했을 경우 |
|
| 849 |
- handleAlternativeMessageScenario(kakaoVO); |
|
| 850 |
- |
|
| 851 |
- }else {
|
|
| 852 |
- handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불"); |
|
| 853 |
- } |
|
| 854 |
- } |
|
| 855 |
- } |
|
| 856 |
- |
|
| 857 |
- |
|
| 858 |
- private void processFtSendCharge(KakaoVO kakaoVO) throws Exception {
|
|
| 859 |
- |
|
| 860 |
- |
|
| 797 |
+ //1-1.카카오톡 발송 성공 + 대체문자 신청 O : 대체문자 금액 환불 |
|
| 861 | 798 |
if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) {
|
| 862 | 799 |
|
| 863 | 800 |
BizKakaoPriceVO bizKakaoPriceVO = mjonPayDAO.selectBizKakaoPrice(kakaoVO.getMsgGroupId()); |
| 864 | 801 |
|
| 865 | 802 |
BigDecimal sendPrice = null; |
| 866 |
- if(StringUtils.isEmpty(kakaoVO.getBizKakaoImageType())){
|
|
| 867 |
- sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtPrice()); |
|
| 868 |
- }else if("I".equals(kakaoVO.getBizKakaoImageType())){
|
|
| 869 |
- sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtImgPrice()); |
|
| 870 |
- }else if("W".equals(kakaoVO.getBizKakaoImageType())){
|
|
| 871 |
- sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtWideImgPrice()); |
|
| 803 |
+ |
|
| 804 |
+ if(AT_MSG_TYPE.equals(kakaoVO.getMsgType())){
|
|
| 805 |
+ sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoAtPrice()); |
|
| 806 |
+ }else {
|
|
| 807 |
+ if(StringUtils.isEmpty(kakaoVO.getBizKakaoImageType())){
|
|
| 808 |
+ sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtPrice()); |
|
| 809 |
+ }else if("I".equals(kakaoVO.getBizKakaoImageType())){
|
|
| 810 |
+ sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtImgPrice()); |
|
| 811 |
+ }else if("W".equals(kakaoVO.getBizKakaoImageType())){
|
|
| 812 |
+ sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtWideImgPrice()); |
|
| 813 |
+ } |
|
| 872 | 814 |
} |
| 873 |
- |
|
| 874 | 815 |
// 예시: 각 건당 가격이 이미 String 형태라면 변환 |
| 875 | 816 |
BigDecimal eachPrice = new BigDecimal(kakaoVO.getEachPrice()); |
| 876 | 817 |
|
| 877 | 818 |
// 차이 계산 |
| 878 | 819 |
BigDecimal diffPrice = eachPrice.subtract(sendPrice); |
| 879 | 820 |
|
| 880 |
- |
|
| 821 |
+ //대체문자 비용(eachPrace - sendPrice) |
|
| 881 | 822 |
if (diffPrice.compareTo(BigDecimal.ZERO) > 0) {
|
| 882 | 823 |
String result = diffPrice.toString(); |
| 883 | 824 |
kakaoVO.setEachPrice(result); |
| 884 |
- |
|
| 885 |
- handleRefund(kakaoVO, "카카오 친구톡 전송으로 인한 결재 차액 환불"); |
|
| 825 |
+ handleRefund(kakaoVO, "카카오 " + kakaoVO.getMsgTypeTxt() + " 발송 성공 후 대체문자 금액 환불"); |
|
| 886 | 826 |
} |
| 887 | 827 |
|
| 888 |
- }else {
|
|
| 889 |
- mjonMsgDAO.updateRefundY(kakaoVO); |
|
| 890 |
- |
|
| 891 | 828 |
} |
| 892 |
- // TODO Auto-generated method stub |
|
| 893 | 829 |
|
| 830 |
+ //1-2.카카오톡 발송 성공 + 대체문자 신청 X : 금액 환불 X |
|
| 894 | 831 |
} |
| 895 | 832 |
|
| 896 | 833 |
private void handleAlternativeMessageScenario(KakaoVO kakaoVO) throws Exception {
|
| 897 | 834 |
KakaoVO bizLogVO = kakaoAlimTalkDAO.selectBizLog(kakaoVO.getBizUmid()); |
| 898 | 835 |
log.info("대체문자 전송 UMID: {}", kakaoVO.getBizUmid());
|
| 899 | 836 |
|
| 900 |
- // 대체문자가 성공적으로 발송되었는지 확인 (SMS 또는 MMS 성공) |
|
| 837 |
+ //2-1.카카오톡 발송 실패 + 대체문자 발송 성공 : 금액 환불 X |
|
| 901 | 838 |
boolean isAlternativeMessageSuccessful = false; |
| 902 | 839 |
if (bizLogVO != null && StringUtils.isNotEmpty(bizLogVO.getBizLogCallStatus())) {
|
| 903 | 840 |
if (SMS_SUCCESS_CODE.equals(bizLogVO.getBizLogCallStatus()) |
| 904 | 841 |
|| MMS_SUCCESS_CODE.equals(bizLogVO.getBizLogCallStatus())) {
|
| 905 | 842 |
isAlternativeMessageSuccessful = true; |
| 906 | 843 |
} |
| 844 |
+ log.info("bizLogVO.getBizLogCallStatus() :: [{}]", bizLogVO.getBizLogCallStatus());
|
|
| 845 |
+ log.info("isAlternativeMessageSuccessful :: [{}]", isAlternativeMessageSuccessful);
|
|
| 907 | 846 |
} |
| 908 | 847 |
|
| 909 |
- log.info("bizLogVO.getBizLogCallStatus() :: [{}]", bizLogVO.getBizLogCallStatus());
|
|
| 910 |
- log.info("isAlternativeMessageSuccessful :: [{}]", isAlternativeMessageSuccessful);
|
|
| 911 | 848 |
|
| 912 |
- // 대체문자 성공이면 환불 완료처리면 한다. |
|
| 913 |
- if (isAlternativeMessageSuccessful) {
|
|
| 914 |
- mjonMsgDAO.updateRefundY(kakaoVO); |
|
| 915 |
- } else {
|
|
| 916 |
- // 대체문자 발송 실패 된 경우 (친구톡 비용 환불 필요) |
|
| 917 |
- handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불"); |
|
| 918 |
- } |
|
| 849 |
+ //2-2.카카오톡 발송 실패 + 대체문자 발송 실패 : 전액 환불 |
|
| 850 |
+ if (!isAlternativeMessageSuccessful) {
|
|
| 851 |
+ handleRefund(kakaoVO, "카카오 " + kakaoVO.getMsgTypeTxt() + " 전송 실패로 인한 결제 금액 환불"); |
|
| 852 |
+ } |
|
| 919 | 853 |
} |
| 920 | 854 |
|
| 921 | 855 |
private void handleRefund(KakaoVO vo, String msg) throws Exception {
|
| 922 | 856 |
// mj_cash 테이블에 환불 내역 추가 및 회원 금액 업데이트 |
| 923 | 857 |
// eachPrice는 환불될 금액이므로 양수여야 합니다. |
| 924 |
- priceAndPoint.insertCashAndPoint( |
|
| 858 |
+ priceAndPoint.insertCashAndPointNoUpdate( |
|
| 925 | 859 |
vo.getUserId(), |
| 926 | 860 |
Float.parseFloat(vo.getEachPrice()), // 환불 금액은 양수 |
| 927 | 861 |
msg, |
| 928 | 862 |
vo.getMsgGroupId(), |
| 929 | 863 |
vo.getUserData() |
| 930 | 864 |
); |
| 931 |
- |
|
| 932 |
- // 해당 row 환불 처리 (mj_msg_data.REFUND_YN = 'Y') |
|
| 933 |
- mjonMsgDAO.updateRefundY(vo); |
|
| 934 | 865 |
} |
| 935 | 866 |
|
| 936 | 867 |
@Override |
... | ... | @@ -1104,8 +1035,33 @@ |
| 1104 | 1035 |
return statusResponse; |
| 1105 | 1036 |
} |
| 1106 | 1037 |
|
| 1107 |
- |
|
| 1038 |
+ @Override |
|
| 1039 |
+ public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception{
|
|
| 1040 |
+ return kakaoAlimTalkDAO.selectKakaoSentRefundList(); |
|
| 1041 |
+ } |
|
| 1108 | 1042 |
|
| 1043 |
+ @Override |
|
| 1044 |
+ public void kakaoSingleRefund(KakaoVO kakaoVO) throws Exception {
|
|
| 1045 |
+ |
|
| 1046 |
+ System.out.println(kakaoVO.getMsgGroupId() +"________결과 : " +kakaoVO.getRsltCode() +" 대체문자 전송 : "+kakaoVO.getSubMsgSendYn()); |
|
| 1047 |
+ kakaoVO.setMsgTypeTxt(AT_MSG_TYPE.equals(kakaoVO.getMsgType()) ? "알림톡" : "친구톡"); |
|
| 1048 |
+ |
|
| 1049 |
+ if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {
|
|
| 1050 |
+ //1.카카오톡 발송 성공 |
|
| 1051 |
+ processKakaoSendCharge(kakaoVO); |
|
| 1052 |
+ |
|
| 1053 |
+ }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) {//카카오톡 발송 실패, 대체문자 발송 신청 O
|
|
| 1054 |
+ //2.카카오톡 발송 실패 + 대체문자 신청 O |
|
| 1055 |
+ handleAlternativeMessageScenario(kakaoVO); |
|
| 1056 |
+ |
|
| 1057 |
+ }else {
|
|
| 1058 |
+ //3.카카오톡 발송 실패 + 대체문자 신청 X : 전액 환불 |
|
| 1059 |
+ handleRefund(kakaoVO, "카카오 " + kakaoVO.getMsgTypeTxt() + " 전송 실패로 인한 결제 금액 환불"); |
|
| 1060 |
+ } |
|
| 1061 |
+ |
|
| 1062 |
+ //모든 유형 환불 완료 처리 |
|
| 1063 |
+ mjonMsgDAO.updateRefundY(kakaoVO); |
|
| 1064 |
+ } |
|
| 1109 | 1065 |
|
| 1110 | 1066 |
// // 보유 금액이 충분한지 확인하는 메서드 |
| 1111 | 1067 |
// private boolean isCashSufficient(String userId, List<KakaoSendAdvcVO> kakaoSendAdvcListVO) throws Exception {
|
... | ... | @@ -1127,35 +1083,6 @@ |
| 1127 | 1083 |
// // 비교 수행 |
| 1128 | 1084 |
// return befCash.compareTo(totalEachPrice) >= 0; |
| 1129 | 1085 |
// } |
| 1130 |
- |
|
| 1131 |
- |
|
| 1132 |
- |
|
| 1133 |
- |
|
| 1134 |
- |
|
| 1135 |
- |
|
| 1136 |
- |
|
| 1137 |
- |
|
| 1138 |
- |
|
| 1139 |
- |
|
| 1140 |
- |
|
| 1141 |
- |
|
| 1142 |
- |
|
| 1143 |
- |
|
| 1144 |
- |
|
| 1145 |
- |
|
| 1146 |
- |
|
| 1147 |
- |
|
| 1148 |
- |
|
| 1149 |
- |
|
| 1150 |
- |
|
| 1151 |
- |
|
| 1152 |
- |
|
| 1153 |
- |
|
| 1154 |
- |
|
| 1155 |
- |
|
| 1156 |
- |
|
| 1157 |
- |
|
| 1158 |
- |
|
| 1159 | 1086 |
|
| 1160 | 1087 |
|
| 1161 | 1088 |
} |
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
... | ... | @@ -9,9 +9,11 @@ |
| 9 | 9 |
import java.util.Calendar; |
| 10 | 10 |
import java.util.Date; |
| 11 | 11 |
import java.util.HashMap; |
| 12 |
+import java.util.HashSet; |
|
| 12 | 13 |
import java.util.List; |
| 13 | 14 |
import java.util.Locale; |
| 14 | 15 |
import java.util.Map; |
| 16 |
+import java.util.Set; |
|
| 15 | 17 |
import java.util.stream.Collectors; |
| 16 | 18 |
|
| 17 | 19 |
import javax.annotation.Resource; |
... | ... | @@ -61,7 +63,6 @@ |
| 61 | 63 |
import itn.com.cmm.util.StringUtil; |
| 62 | 64 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 63 | 65 |
import itn.let.kakao.kakaoComm.KakaoReturnVO; |
| 64 |
-import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; |
|
| 65 | 66 |
import itn.let.kakao.kakaoComm.KakaoSendUtil; |
| 66 | 67 |
import itn.let.kakao.kakaoComm.KakaoVO; |
| 67 | 68 |
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave; |
... | ... | @@ -79,6 +80,9 @@ |
| 79 | 80 |
import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; |
| 80 | 81 |
import itn.let.mjo.msgholiday.service.MsgHolidayService; |
| 81 | 82 |
import itn.let.mjo.msgholiday.service.MsgHolidayVO; |
| 83 |
+import itn.let.mjo.pay.service.MjonPayService; |
|
| 84 |
+import itn.let.mjo.pay.service.MjonPayVO; |
|
| 85 |
+import itn.let.org.web.OrgChartManageController; |
|
| 82 | 86 |
import itn.let.sym.site.service.EgovSiteManagerService; |
| 83 | 87 |
import itn.let.sym.site.service.JoinSettingVO; |
| 84 | 88 |
import itn.let.uss.umt.service.EgovUserManageService; |
... | ... | @@ -101,6 +105,8 @@ |
| 101 | 105 |
*/ |
| 102 | 106 |
@Controller |
| 103 | 107 |
public class KakaoAlimTalkSendController {
|
| 108 |
+ |
|
| 109 |
+ private final OrgChartManageController orgChartManageController; |
|
| 104 | 110 |
|
| 105 | 111 |
@Resource(name = "egovMjonMsgGroupIdGnrService") |
| 106 | 112 |
private EgovIdGnrService idgenMjonMsgGroupId; |
... | ... | @@ -149,6 +155,13 @@ |
| 149 | 155 |
|
| 150 | 156 |
@Autowired |
| 151 | 157 |
private MjonCommon mjonCommon; |
| 158 |
+ |
|
| 159 |
+ @Resource(name = "mjonPayService") |
|
| 160 |
+ private MjonPayService mjonPayService; |
|
| 161 |
+ |
|
| 162 |
+ KakaoAlimTalkSendController(OrgChartManageController orgChartManageController) {
|
|
| 163 |
+ this.orgChartManageController = orgChartManageController; |
|
| 164 |
+ } |
|
| 152 | 165 |
|
| 153 | 166 |
@RequestMapping(value= {"/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do"})
|
| 154 | 167 |
public String KakaoAlimtalkMsgDataView(ModelMap model |
... | ... | @@ -1540,4 +1553,55 @@ |
| 1540 | 1553 |
|
| 1541 | 1554 |
return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp"; |
| 1542 | 1555 |
} |
| 1556 |
+ |
|
| 1557 |
+ public void kakaoRefundSingleTransaction() throws Exception{
|
|
| 1558 |
+ System.out.println("=============카카오 환불 싱글 트랜잭션 수행 =============");
|
|
| 1559 |
+ |
|
| 1560 |
+ /* 회원 money 업데이트 처리 트랜잭션 분리를 위하여 impl이 아닌 현재 위치에서 반복문 실행 */ |
|
| 1561 |
+ System.out.println("=============SchedulerUtil=====runKakaoOneTime =============>");
|
|
| 1562 |
+ List<KakaoVO> kakaoRefundList = kakaoAlimTalkService.selectKakaoSentRefundListForSingle(); |
|
| 1563 |
+ Set<String> targetIdSet = new HashSet<>(); |
|
| 1564 |
+ |
|
| 1565 |
+ for(KakaoVO kakaoVO : kakaoRefundList) {
|
|
| 1566 |
+ try {
|
|
| 1567 |
+ kakaoAlimTalkService.kakaoSingleRefund(kakaoVO); |
|
| 1568 |
+ targetIdSet.add(kakaoVO.getUserId()); |
|
| 1569 |
+ } catch (Exception e) {
|
|
| 1570 |
+ String msg = "[문자온] 환불 실패 - " + kakaoVO.getMsgId() +"("+ kakaoVO.getUserId() + ")";
|
|
| 1571 |
+ mjonCommon.sendSimpleSlackMsg(msg);; |
|
| 1572 |
+ } |
|
| 1573 |
+ } |
|
| 1574 |
+ |
|
| 1575 |
+ MjonPayVO mjonPayVO = new MjonPayVO(); |
|
| 1576 |
+ for(String userId : targetIdSet) {
|
|
| 1577 |
+ try {
|
|
| 1578 |
+ mjonPayVO.setUserId(userId); |
|
| 1579 |
+ mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 |
|
| 1580 |
+ } catch(Exception e) {
|
|
| 1581 |
+ String msg = "[문자온] 환불 후 잔액 갱신 실패 - " + userId; |
|
| 1582 |
+ mjonCommon.sendSimpleSlackMsg(msg);; |
|
| 1583 |
+ } |
|
| 1584 |
+ } |
|
| 1585 |
+ |
|
| 1586 |
+ } |
|
| 1587 |
+ |
|
| 1588 |
+ /** |
|
| 1589 |
+ * @Method Name : kakaoMsgSendRefundTestAjax |
|
| 1590 |
+ * @작성일 : 2025. 8. 6. |
|
| 1591 |
+ * @작성자 : 이지우 |
|
| 1592 |
+ * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 |
|
| 1593 |
+ */ |
|
| 1594 |
+ @RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaoMsgSendRefundTestAjax.do"})
|
|
| 1595 |
+ public ModelAndView kakaoMsgSendRefundTestAjax(ModelMap model |
|
| 1596 |
+ , HttpServletRequest request |
|
| 1597 |
+ , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
|
| 1598 |
+ |
|
| 1599 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 1600 |
+ modelAndView.setViewName("jsonView");
|
|
| 1601 |
+ |
|
| 1602 |
+ this.kakaoRefundSingleTransaction(); |
|
| 1603 |
+ |
|
| 1604 |
+ modelAndView.addObject("result", "success");
|
|
| 1605 |
+ return modelAndView; |
|
| 1606 |
+ } |
|
| 1543 | 1607 |
} |
--- src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
... | ... | @@ -711,27 +711,6 @@ |
| 711 | 711 |
return modelAndView; |
| 712 | 712 |
} |
| 713 | 713 |
|
| 714 |
- |
|
| 715 |
- /** |
|
| 716 |
- * @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax |
|
| 717 |
- * @작성일 : 2024. 1. 18. |
|
| 718 |
- * @작성자 : 우영두 |
|
| 719 |
- * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 |
|
| 720 |
- */ |
|
| 721 |
- @RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendRefundTestAjax.do"})
|
|
| 722 |
- public ModelAndView kakaoFriendsTalkMsgSendRefundTestAjax(ModelMap model |
|
| 723 |
- , HttpServletRequest request |
|
| 724 |
- , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
|
| 725 |
- |
|
| 726 |
- ModelAndView modelAndView = new ModelAndView(); |
|
| 727 |
- modelAndView.setViewName("jsonView");
|
|
| 728 |
- |
|
| 729 |
- kakaoAlimTalkService.selectKakaoFtSentRefundList(); |
|
| 730 |
- |
|
| 731 |
- modelAndView.addObject("result", "success");
|
|
| 732 |
- return modelAndView; |
|
| 733 |
- } |
|
| 734 |
- |
|
| 735 | 714 |
/** |
| 736 | 715 |
* @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax |
| 737 | 716 |
* @작성일 : 2024. 1. 18. |
--- src/main/java/itn/let/module/base/PriceAndPoint.java
+++ src/main/java/itn/let/module/base/PriceAndPoint.java
... | ... | @@ -213,6 +213,36 @@ |
| 213 | 213 |
kakaoAlimTalkDAO.insertKakaoSendPrice(kakaoVO); |
| 214 | 214 |
|
| 215 | 215 |
} |
| 216 |
- |
|
| 216 |
+ |
|
| 217 |
+ /** |
|
| 218 |
+ * @methodName : insertCashAndPoint |
|
| 219 |
+ * @author : 이지우 |
|
| 220 |
+ * @date : 2025. 8. 14. |
|
| 221 |
+ * @description : insertCashAndPoint 에서 updateMemberCash 제외 |
|
| 222 |
+ * @return : void |
|
| 223 |
+ * @param userId |
|
| 224 |
+ * @param totPrice |
|
| 225 |
+ * @param memo |
|
| 226 |
+ * @param msgGroupId |
|
| 227 |
+ * @param userData |
|
| 228 |
+ * @throws Exception |
|
| 229 |
+ * |
|
| 230 |
+ */ |
|
| 231 |
+ public void insertCashAndPointNoUpdate( |
|
| 232 |
+ String userId |
|
| 233 |
+ , float totPrice |
|
| 234 |
+ , String memo |
|
| 235 |
+ , String msgGroupId |
|
| 236 |
+ , String userData |
|
| 237 |
+ ) throws Exception {
|
|
| 238 |
+ |
|
| 239 |
+ MjonPayVO mjonPayVO = buildPayVO(userId, totPrice, memo, msgGroupId); |
|
| 240 |
+ |
|
| 241 |
+// 환불로 인해 userData가 추후 사용될 경우 여기에 처리 |
|
| 242 |
+ if (StringUtils.isNotEmpty(userData)) { mjonPayVO.setOrderId(userData); }
|
|
| 243 |
+ |
|
| 244 |
+ mjonPayDAO.insertCash(mjonPayVO); //캐시 |
|
| 245 |
+ |
|
| 246 |
+ } |
|
| 217 | 247 |
|
| 218 | 248 |
}(No newline at end of file) |
--- src/main/java/itn/let/schdlr/service/SchdlrManageService.java
+++ src/main/java/itn/let/schdlr/service/SchdlrManageService.java
... | ... | @@ -47,9 +47,6 @@ |
| 47 | 47 |
//전용계좌 자동 충전 배치 |
| 48 | 48 |
public void vacsAutoCharge() throws Exception; |
| 49 | 49 |
|
| 50 |
- //문자온 카카오톡 실패 건수 환불 배치 |
|
| 51 |
- public void kakaoFailPayBack() throws Exception; |
|
| 52 |
- |
|
| 53 | 50 |
//문자온 문자전송 실패 건수 환불 배치 |
| 54 | 51 |
public void payBack(String type, int limitCout) throws Exception; |
| 55 | 52 |
|
--- src/main/java/itn/let/schdlr/service/SchedulerUtil.java
+++ src/main/java/itn/let/schdlr/service/SchedulerUtil.java
... | ... | @@ -2,7 +2,9 @@ |
| 2 | 2 |
|
| 3 | 3 |
import java.text.SimpleDateFormat; |
| 4 | 4 |
import java.util.Date; |
| 5 |
+import java.util.HashSet; |
|
| 5 | 6 |
import java.util.List; |
| 7 |
+import java.util.Set; |
|
| 6 | 8 |
|
| 7 | 9 |
import javax.annotation.Resource; |
| 8 | 10 |
import javax.sql.DataSource; |
... | ... | @@ -24,12 +26,16 @@ |
| 24 | 26 |
import itn.let.fax.admin.service.FaxStatVO; |
| 25 | 27 |
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoAtStatVO; |
| 26 | 28 |
import itn.let.kakao.admin.statistics.service.KakaoStatisticsService; |
| 29 |
+import itn.let.kakao.kakaoComm.KakaoVO; |
|
| 30 |
+import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; |
|
| 27 | 31 |
import itn.let.lett.service.LetterService; |
| 28 | 32 |
import itn.let.mail.service.MailTemplateService; |
| 33 |
+import itn.let.mjo.mjocommon.MjonCommon; |
|
| 29 | 34 |
import itn.let.mjo.msg.service.MjonMsgService; |
| 30 | 35 |
import itn.let.mjo.msg.service.MjonMsgStatVO; |
| 31 |
-import itn.let.mjo.msg.service.MjonMsgVO; |
|
| 32 | 36 |
import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; |
| 37 |
+import itn.let.mjo.pay.service.MjonPayService; |
|
| 38 |
+import itn.let.mjo.pay.service.MjonPayVO; |
|
| 33 | 39 |
import itn.let.sts.com.StatsVO; |
| 34 | 40 |
import itn.let.sts.cst.service.EgovConectStatsService; |
| 35 | 41 |
import itn.let.uss.umt.service.EgovUserManageService; |
... | ... | @@ -81,6 +87,15 @@ |
| 81 | 87 |
|
| 82 | 88 |
@Resource(name="MjonMsgDataDAO") |
| 83 | 89 |
private MjonMsgDataDAO mjonMsgDataDAO; |
| 90 |
+ |
|
| 91 |
+ @Resource(name="kakaoAlimTalkService") |
|
| 92 |
+ private KakaoAlimTalkService kakaoAlimTalkService; |
|
| 93 |
+ |
|
| 94 |
+ @Resource(name="MjonCommon") |
|
| 95 |
+ private MjonCommon mjonCommon; |
|
| 96 |
+ |
|
| 97 |
+ @Resource(name = "mjonPayService") |
|
| 98 |
+ private MjonPayService mjonPayService; |
|
| 84 | 99 |
|
| 85 | 100 |
/** 설정값 가져오기 */ |
| 86 | 101 |
@Value("#{globalSettings['Globals.Env']}")
|
... | ... | @@ -470,15 +485,33 @@ |
| 470 | 485 |
@SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) |
| 471 | 486 |
public void runKakaoOneTime() throws Exception {
|
| 472 | 487 |
|
| 473 |
- // do something... |
|
| 474 |
- try {
|
|
| 488 |
+ /* 회원 money 업데이트 처리 트랜잭션 분리를 위하여 impl이 아닌 현재 위치에서 반복문 실행 */ |
|
| 475 | 489 |
System.out.println("=============SchedulerUtil=====runKakaoOneTime =============>");
|
| 476 |
- schdlrManageService.kakaoFailPayBack(); |
|
| 477 |
- }catch(Exception ex) {
|
|
| 478 |
- ex.printStackTrace(); |
|
| 479 |
- } |
|
| 490 |
+ List<KakaoVO> kakaoRefundList = kakaoAlimTalkService.selectKakaoSentRefundListForSingle(); |
|
| 491 |
+ Set<String> targetIdSet = new HashSet<>(); |
|
| 492 |
+ |
|
| 493 |
+ for(KakaoVO kakaoVO : kakaoRefundList) {
|
|
| 494 |
+ try {
|
|
| 495 |
+ kakaoAlimTalkService.kakaoSingleRefund(kakaoVO); |
|
| 496 |
+ targetIdSet.add(kakaoVO.getUserId()); |
|
| 497 |
+ } catch (Exception e) {
|
|
| 498 |
+ String msg = "[문자온] 환불 실패 - " + kakaoVO.getMsgId() +"("+ kakaoVO.getUserId() + ")";
|
|
| 499 |
+ mjonCommon.sendSimpleSlackMsg(msg);; |
|
| 500 |
+ } |
|
| 501 |
+ } |
|
| 502 |
+ |
|
| 503 |
+ MjonPayVO mjonPayVO = new MjonPayVO(); |
|
| 504 |
+ for(String userId : targetIdSet) {
|
|
| 505 |
+ try {
|
|
| 506 |
+ mjonPayVO.setUserId(userId); |
|
| 507 |
+ mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 |
|
| 508 |
+ } catch(Exception e) {
|
|
| 509 |
+ String msg = "[문자온] 환불 후 잔액 갱신 실패 - " + userId; |
|
| 510 |
+ mjonCommon.sendSimpleSlackMsg(msg);; |
|
| 511 |
+ } |
|
| 512 |
+ } |
|
| 513 |
+ |
|
| 480 | 514 |
} |
| 481 |
- |
|
| 482 | 515 |
//환불 실행 |
| 483 | 516 |
private void PayBack(String p_type) throws Exception {
|
| 484 | 517 |
|
--- src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
+++ src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
... | ... | @@ -437,17 +437,6 @@ |
| 437 | 437 |
|
| 438 | 438 |
} |
| 439 | 439 |
|
| 440 |
- // 카카오 환불 처리 리스트 |
|
| 441 |
- public void kakaoFailPayBack() throws Exception {
|
|
| 442 |
- |
|
| 443 |
- // 카카오 알림톡 환불 처리 |
|
| 444 |
- kakaoAlimTalkService.selectKakaoAtSentRefundList(); |
|
| 445 |
- |
|
| 446 |
- // 카카오 친구톡 환불 처리 |
|
| 447 |
- kakaoAlimTalkService.selectKakaoFtSentRefundList(); |
|
| 448 |
- |
|
| 449 |
- } |
|
| 450 |
- |
|
| 451 | 440 |
@Override |
| 452 | 441 |
public void payBack(String type, int limitCout) throws Exception {
|
| 453 | 442 |
// 문자 환불 |
--- 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,36 +205,11 @@ |
| 205 | 205 |
) |
| 206 | 206 |
</insert> |
| 207 | 207 |
|
| 208 |
- <select id="kakaoAlimTalkDAO.selectKakaoAtSentRefundList" resultClass="kakaoVO"> |
|
| 208 |
+ <select id="kakaoAlimTalkDAO.selectKakaoSentRefundList" resultClass="kakaoVO"> |
|
| 209 | 209 |
SELECT |
| 210 | 210 |
MMD.USER_ID AS userId |
| 211 | 211 |
, MMD.MSG_GROUP_ID AS msgGroupId |
| 212 |
- , MMD.MSG_SEQ AS msgSeq |
|
| 213 |
- , MMD.USERDATA AS userData |
|
| 214 |
- , MMD.REFUND_YN AS refundYn |
|
| 215 |
- , MMD.RSLT_CODE AS rsltCode |
|
| 216 |
- , MMD.RSLT_CODE2 AS rsltCode2 |
|
| 217 |
- , MMD.AGENT_CODE AS agentCode |
|
| 218 |
- , DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T') AS sentDate |
|
| 219 |
- , DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate |
|
| 220 |
- , MMD.BIZ_KAKAO_RESEND_YN AS subMsgSendYn |
|
| 221 |
- , MMD.BIZ_KAKAO_RESEND_TYPE AS subMsgType |
|
| 222 |
- |
|
| 223 |
- FROM |
|
| 224 |
- MJ_MSG_DATA MMD |
|
| 225 |
- INNER JOIN LETTNGNRLMBER MB |
|
| 226 |
- ON MMD.USER_ID = MB.MBER_ID |
|
| 227 |
- WHERE 1=1 |
|
| 228 |
- AND MMD.CUR_STATE = '3' |
|
| 229 |
- AND MMD.REFUND_YN = 'N' |
|
| 230 |
- AND MMD.RESERVE_C_YN = 'N' |
|
| 231 |
- AND MMD.MSG_TYPE = 8 |
|
| 232 |
- </select> |
|
| 233 |
- |
|
| 234 |
- <select id="kakaoAlimTalkDAO.selectKakaoFtSentRefundList" resultClass="kakaoVO"> |
|
| 235 |
- SELECT |
|
| 236 |
- MMD.USER_ID AS userId |
|
| 237 |
- , MMD.MSG_GROUP_ID AS msgGroupId |
|
| 212 |
+ , MMD.MSG_ID AS msgId |
|
| 238 | 213 |
, MMD.MSG_SEQ AS msgSeq |
| 239 | 214 |
, MMGD.BIZ_KAKAO_IMAGE_TYPE AS bizKakaoImageType |
| 240 | 215 |
, MMGD.EACH_PRICE AS eachPrice |
... | ... | @@ -249,6 +224,7 @@ |
| 249 | 224 |
, MMD.BIZ_KAKAO_RESEND_TYPE AS subMsgType |
| 250 | 225 |
, MMD.FILE_CNT AS fileCnt |
| 251 | 226 |
, MMD.BIZ_UMID AS bizUmid |
| 227 |
+ , MMD.MSG_TYPE AS msgType |
|
| 252 | 228 |
FROM |
| 253 | 229 |
MJ_MSG_DATA MMD |
| 254 | 230 |
INNER JOIN LETTNGNRLMBER MB |
... | ... | @@ -259,7 +235,8 @@ |
| 259 | 235 |
AND MMD.CUR_STATE = '3' |
| 260 | 236 |
AND MMD.REFUND_YN = 'N' |
| 261 | 237 |
AND MMD.RESERVE_C_YN = 'N' |
| 262 |
- AND MMD.MSG_TYPE = 9 |
|
| 238 |
+ AND MMD.MSG_TYPE IN(8, 9) |
|
| 239 |
+ ORDER BY MMD.USER_ID ASC |
|
| 263 | 240 |
</select> |
| 264 | 241 |
|
| 265 | 242 |
<select id="kakaoAlimTalkDAO.selectKakaoAtUmid" resultClass="kakaoVO" parameterClass="kakaoVO"> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?