카카오 친구톡 환불처리 서비스 추가

- 아직 스케줄러에는 추가 안했음
 - 전송 컨트롤러에 테스트 URL로 테스트 중
This commit is contained in:
rosewiper 2024-01-18 14:25:11 +09:00
parent 11e92e351c
commit e357b1436a
7 changed files with 183 additions and 62 deletions

View File

@ -22,4 +22,7 @@ public interface KakaoAlimTalkService {
//카카오 알림톡 전송 실패 환불리스트 조회
public void selectKakaoAtSentRefundList() throws Exception;
//카카오 친구톡 전송 실패 환불리스트 조회
public void selectKakaoFtSentRefundList() throws Exception;
}

View File

@ -7,7 +7,6 @@ import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import itn.let.kakao.kakaoComm.KakaoVO;
import itn.let.mjo.msg.service.MjonMsgVO;
@Repository("kakaoAlimTalkDAO")
public class KakaoAlimTalkDAO extends EgovAbstractDAO {
@ -62,6 +61,11 @@ public class KakaoAlimTalkDAO extends EgovAbstractDAO {
return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoAtSentRefundList");
}
@SuppressWarnings("unchecked")
public List<KakaoVO> selectKakaoFtSentRefundList() throws Exception{
return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoFtSentRefundList");
}
public KakaoVO selectKakaoAtUmid(KakaoVO kakaoVO) throws Exception{
return (KakaoVO) select("kakaoAlimTalkDAO.selectKakaoAtUmid", kakaoVO);
}
@ -77,4 +81,17 @@ public class KakaoAlimTalkDAO extends EgovAbstractDAO {
public void updateKakaoAtNotSend(KakaoVO kakaoVO) {
select("kakaoAlimTalkDAO.updateKakaoAtNotSend", kakaoVO);
}
public void updateKakaoFtSend(KakaoVO kakaoVO) {
select("kakaoAlimTalkDAO.updateKakaoFtSend", kakaoVO);
}
public void updateKakaoFtSubMsgSend(KakaoVO kakaoVO) {
select("kakaoAlimTalkDAO.updateKakaoFtSubMsgSend", kakaoVO);
}
public void updateKakaoFtNotSend(KakaoVO kakaoVO) {
select("kakaoAlimTalkDAO.updateKakaoFtNotSend", kakaoVO);
}
}

View File

@ -599,7 +599,10 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
}
/*
* 카카오 알림톡 발송 실패에 따른 금액 환불 처리
*
* */
@Override
public void selectKakaoAtSentRefundList() throws Exception {
@ -629,4 +632,45 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
}
}
}
/*
* 카카오 친구톡 발송 실패에 따른 금액 환불 처리
* 카카오 친구톡 대체문자 선택에 대해 성공시 친구톡과 문자 금액 차액의 환불도 처리 .
* */
@Override
public void selectKakaoFtSentRefundList() throws Exception {
/**
* 1. 카카오 FT 전송성공 확인
* 2. 카카오 FT 전송실패, 대채문자 전송확인
* 3. 카카오 FT 전송 실패 확인
*/
List<KakaoVO> kakaoFtSentRefundList = kakaoAlimTalkDAO.selectKakaoFtSentRefundList();
for(KakaoVO vo : kakaoFtSentRefundList) {
System.out.println(vo.getMsgGroupId() +"________결과 : " +vo.getRsltCode() +" 대체문자 전송 : "+vo.getSubMsgSendYn());
if(vo.getRsltCode().equals("7000")) {//친구톡 발송 성공시
kakaoAlimTalkDAO.updateKakaoFtSend(vo);
}else if(vo.getSubMsgSendYn().equals("Y")) {//친구톡 발송 실패 했을 경우
//대체문자 발송 UMID 번호 조회 - 알림톡 쿼리 동일하게 사용
KakaoVO info = kakaoAlimTalkDAO.selectKakaoAtUmid(vo);
System.out.println("대체문자 전송 : " + info.getBizUmid());
if (info.getBizUmid() != null) {//대체문자 발송 완료인 경우
kakaoAlimTalkDAO.updateKakaoAtSubMsgSend(vo);
}else {
kakaoAlimTalkDAO.updateKakaoFtNotSend(vo);
}
}else {
kakaoAlimTalkDAO.updateKakaoFtNotSend(vo);
}
}
}
}

View File

@ -25,19 +25,22 @@ import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO;
import itn.com.cmm.util.MJUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.kakao.kakaoComm.KakaoButtonVO;
import itn.let.kakao.kakaoComm.KakaoSendUtil;
import itn.let.kakao.kakaoComm.KakaoVO;
import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService;
import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.msgdata.service.MjonMsgDataVO;
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
import itn.let.mjo.symbol.service.MjonSymbolService;
import itn.let.mjo.symbol.service.MjonSymbolVO;
import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO;
@Controller
public class KakaoFriendsTalkSendController {
@ -68,6 +71,10 @@ public class KakaoFriendsTalkSendController {
@Resource(name = "kakaoAlimTalkService")
private KakaoAlimTalkService kakaoAlimTalkService;
/** 사이트 설정 */
@Resource(name = "egovSiteManagerService")
EgovSiteManagerService egovSiteManagerService;
@Autowired
KakaoSendUtil kakaoSendUtil;
@ -583,71 +590,74 @@ public class KakaoFriendsTalkSendController {
} catch (Exception e) {
System.out.println("kakaoFriendsTalkMsgSendAjax Controller Error !!!! "+e);
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
modelAndView.addObject("result", "fail");
return modelAndView;
}
System.out.println("++++++++++++++++++++++ senderKey ::: "+kakaoVO.getSenderKey());
System.out.println("++++++++++++++++++++++ imageType ::: "+kakaoVO.getImageType());
System.out.println("++++++++++++++++++++++ imageTitle ::: "+kakaoVO.getImageTitle());
System.out.println("++++++++++++++++++++++ imageLink ::: "+kakaoVO.getImageLink());
System.out.println("++++++++++++++++++++++ imageFileName ::: "+kakaoVO.getImageFileName());
System.out.println("++++++++++++++++++++++ adFlag ::: "+kakaoVO.getAdFlag());
System.out.println("++++++++++++++++++++++ templateContents ::: "+kakaoVO.getTemplateContent());
System.out.println("++++++++++++++++++++++ templateImageUrl ::: "+kakaoVO.getTemplateImageUrl());
System.out.println("++++++++++++++++++++++ kakaoFtPrice ::: "+kakaoVO.getKakaoFtPrice());
System.out.println("++++++++++++++++++++++ eachPrice ::: "+kakaoVO.getEachPrice());
System.out.println("++++++++++++++++++++++ totPrice ::: "+kakaoVO.getTotalPrice());
modelAndView.addObject("message", "친구톡 전송이 완료되었습니다.");
modelAndView.addObject("result", "success");
modelAndView.addObject("resultSts", resultSts);
for(KakaoButtonVO buttonVO : kakaoVO.getButtonVOList()) {
/** 카카오 친구톡 발송 내용 법인폰, 친구톡 결과 처리 --------------------------------------------------*/
try {
String adminSmsNoticeYn = "Y";
String spamStatus = kakaoVO.getAtSmishingYn(); // 스미싱 의심으로 체크된 고객 정보
System.out.println("++++++++++++++ button Name ::: "+buttonVO.getName());
System.out.println("++++++++++++++ button type :::"+ buttonVO.getLinkType());
System.out.println("++++++++++++++ button pc :::"+ buttonVO.getLinkPc());
System.out.println("++++++++++++++ button mobile :::"+ buttonVO.getLinkMo());
System.out.println("++++++++++++++ button android :::"+ buttonVO.getLinkAnd());
System.out.println("++++++++++++++ button ios :::"+ buttonVO.getLinkIos());
UserManageVO userManageVO = new UserManageVO();
userManageVO.setMberId(userId);
if(!userId.equals("")) {
userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO);
adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn();
}
//법인폰 알림 이거나 스미싱의심 문자인 경우 법인폰으로 발송
if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y")) {
if(spamStatus.equals("Y")) {
kakaoVO.setAtDelayYn("Y");
}
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
//Slack으로 메세지 전송 처리
MjonCommon comm = new MjonCommon();
comm.getAdminKakaoAtSandSlack(kakaoVO);
}
}
} catch (Exception e) {
throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e);
}
List<String[]> varValList = new ArrayList<String[]>();
System.out.println("+++++++++++++++ txtReplYn ::: "+kakaoVO.getTxtReplYn());
varValList = kakaoVO.getVarValList();
for(int i=0; i < varValList.size(); i++) {
String tmpVar = varValList.get(i)[0];
System.out.println("+++++++++++++ tmpVar ::: "+tmpVar);
}
for(String callTo : kakaoVO.getCallToList()) {
System.out.println("++++++++++++ callTo ::: "+callTo);
}
System.out.println("++++++++++++++++ spamStatus ::: "+kakaoVO.getSpamStatus());
System.out.println("++++++++++++++++ 대체문자 사용 여부 ::: "+kakaoVO.getSubMsgSendYn());
System.out.println("++++++++++++++++ 발신번호 ::: "+kakaoVO.getCallFrom());
System.out.println("++++++++++++++++ 대체문자 내용 ::: "+kakaoVO.getSmsTxtArea());
System.out.println("++++++++++++++++ 대체문자 타입 ::: "+kakaoVO.getSubMsgType());
System.out.println("++++++++++++++++ 예약문자 여부 ::: "+kakaoVO.getReserveYn());
System.out.println("++++++++++++++++ 예약 시간 ::: "+kakaoVO.getReqDate());
System.out.println("++++++++++++++++ json 필요 유무 ::: "+kakaoVO.getBizJsonYn());
return modelAndView;
}
/**
* @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax
* @작성일 : 2024. 1. 18.
* @작성자 : 우영두
* @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트
*/
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendRefundTestAjax.do"})
public ModelAndView kakaoFriendsTalkMsgSendRefundTestAjax(ModelMap model
, HttpServletRequest request
, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
kakaoAlimTalkService.selectKakaoFtSentRefundList();
modelAndView.addObject("result", "success");
modelAndView.addObject("resultSts", kakaoVO.getCallToList().length);
return modelAndView;
}

View File

@ -280,7 +280,7 @@ public class MjonCommon {
if(kakaoVO.getMsgType().equals("8")) {
msgType = "[알림톡]";
}else if(kakaoVO.getMsgType().equals("9")){
msgType = "[테스트중][친구톡]";
}
sandName = "[" + userId + "]" + "[" + sandName + "]" + msgType;

View File

@ -103,6 +103,32 @@
AND MMD.MSG_TYPE = 8
</select>
<select id="kakaoAlimTalkDAO.selectKakaoFtSentRefundList" resultClass="kakaoVO">
SELECT
MMD.USER_ID AS userId
, MMD.MSG_GROUP_ID AS msgGroupId
, MMD.MSG_SEQ AS msgSeq
, 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
FROM
MJ_MSG_DATA MMD
INNER JOIN LETTNGNRLMBER MB
ON MMD.USER_ID = MB.MBER_ID
WHERE 1=1
AND MMD.CUR_STATE = '3'
AND MMD.REFUND_YN = 'N'
AND MMD.RESERVE_C_YN = 'N'
AND MMD.MSG_TYPE = 9
</select>
<select id="kakaoAlimTalkDAO.selectKakaoAtUmid" resultClass="kakaoVO" parameterClass="kakaoVO">
SELECT
BIZ_UMID AS bizUmid
@ -126,4 +152,22 @@
<procedure id="kakaoAlimTalkDAO.updateKakaoAtNotSend" parameterClass="kakaoVO">
{call kakaoAt_NotSend(#userId#, #msgGroupId#, #userData#)}
</procedure>
<!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 성공 관련 - 대체문자 선택시 차액 환불 처리) -->
<procedure id="kakaoAlimTalkDAO.updateKakaoFtSend" parameterClass="kakaoVO">
{call kakaoFt_Send(#userId#, #msgGroupId#, #userData#)}
</procedure>
<!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 실패시 대체문자 관련 - 대체문자 발송 완료 된 경우) -->
<procedure id="kakaoAlimTalkDAO.updateKakaoFtSubMsgSend" parameterClass="kakaoVO">
{call kakaoFt_SubMsg_Send(#userId#, #msgGroupId#, #userData#)}
</procedure>
<!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 실패시 대체문자 관련 - 대체문자 발송 실패 된 경우) -->
<procedure id="kakaoAlimTalkDAO.updateKakaoFtNotSend" parameterClass="kakaoVO">
{call kakaoFt_NotSend(#userId#, #msgGroupId#, #userData#)}
</procedure>
</sqlMap>

View File

@ -753,6 +753,15 @@ function fnSelectMinChk(){
//친구톡 발송 금지 시간 처리
function fn_noTimeSend(){
var id = '${loginVO.id}';
if(id == ""){
alert("로그인 후 이용이 가능합니다.");
return false;
}
alert("친구톡은 20:50 ~ 익일 08:00까지 발송할 수 없습니다.");
return false;
@ -1400,10 +1409,6 @@ function thisFnByteString(contents){
$('.msg_com').removeClass("msg_short"); //단문 클래스 삭제하고
$('.put_left').removeClass("short"); //내용 입력 박스 클래스 삭제
$('.msg_com').addClass("msg_long"); // 장문 클래스 삽입
// $('.put_left').addClass("long"); // 내용 입력 박스에 클래스 삽입
// $('.msg_title').addClass('active');
//document.getElementById("mmsSubject").disabled = false;
$("#subMsgType").val("LMS");
}else{
@ -1415,8 +1420,6 @@ function thisFnByteString(contents){
$('.msg_com').removeClass("msg_long"); //단문 클래스 삭제하고
$('.put_left').removeClass("long"); //내용 입력 박스 클래스 삭제
$('.msg_com').addClass("msg_short"); // 장문 클래스 삽입
// $('.put_left').addClass("short"); // 내용 입력 박스에 클래스 삽입
// $('.msg_title, .title_wrap .textbox').removeClass('active');
$("#subMsgType").val("SMS");
}