rosewiper 2024-01-18
카카오 친구톡 환불처리 서비스 추가 - 아직 스케줄러에는 추가 안했음 - 전송 컨트롤러에 테스트 URL로 테스트 중
 - 아직 스케줄러에는 추가 안했음
 - 전송 컨트롤러에 테스트 URL로 테스트 중
@e357b1436ae3754d31996242149b2384d6e9890f
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
@@ -22,4 +22,7 @@
 	//카카오 알림톡 전송 실패 환불리스트 조회
 	public void selectKakaoAtSentRefundList() throws Exception;
 	
+	//카카오 친구톡 전송 실패 환불리스트 조회
+	public void selectKakaoFtSentRefundList() 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
@@ -7,7 +7,6 @@
 
 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 @@
 		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 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);
+	}
 }
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
@@ -599,7 +599,10 @@
 	}
 	
 	
-
+	/*
+	 * 카카오 알림톡 발송 실패에 따른 금액 환불 처리
+	 * 
+	 * */
 	@Override
 	public void selectKakaoAtSentRefundList() throws Exception {
 		
@@ -629,4 +632,45 @@
 			}
 		}
 	}
+	
+	
+	/*
+	 * 카카오 친구톡 발송 실패에 따른 금액 환불 처리
+	 * 카카오 친구톡 대체문자 선택에 대해 성공시 친구톡과 문자 간 금액 차액의 환불도 처리 됨. 
+	 * */
+	@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);
+			}
+		}
+	}
 }
src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
--- src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
@@ -25,19 +25,22 @@
 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 {
@@ -67,6 +70,10 @@
 	
 	@Resource(name = "kakaoAlimTalkService")
 	private KakaoAlimTalkService kakaoAlimTalkService;
+	
+	/** 사이트 설정 */ 
+	@Resource(name = "egovSiteManagerService")
+	EgovSiteManagerService egovSiteManagerService;	
 	
 	@Autowired
 	KakaoSendUtil kakaoSendUtil;
@@ -583,71 +590,74 @@
 			
 		} 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());
+		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 {
 		
-		varValList = kakaoVO.getVarValList();
+		ModelAndView modelAndView = new ModelAndView(); 
+		modelAndView.setViewName("jsonView");
 		
-		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());
-		
-		
+		kakaoAlimTalkService.selectKakaoFtSentRefundList();
 		
 		modelAndView.addObject("result", "success");
-		modelAndView.addObject("resultSts", kakaoVO.getCallToList().length);
 		return modelAndView;
 	}
 	
src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
--- src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
+++ src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
@@ -280,7 +280,7 @@
 			if(kakaoVO.getMsgType().equals("8")) {
 				msgType = "[알림톡]";
 			}else if(kakaoVO.getMsgType().equals("9")){
-				
+				msgType = "[테스트중][친구톡]";
 			}
 			sandName = "[" + userId + "]" + "[" + sandName + "]" + msgType;
 			
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
@@ -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>
(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
@@ -753,6 +753,15 @@
 //친구톡 발송 금지 시간 처리
 function fn_noTimeSend(){
 	
+	var id = '${loginVO.id}';
+
+	if(id == ""){
+		
+		alert("로그인 후 이용이 가능합니다.");
+		return false;
+		
+	}
+	
 	alert("친구톡은 20:50 ~ 익일 08:00까지 발송할 수 없습니다.");
 	return false;
 	
@@ -1400,10 +1409,6 @@
 		$('.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 @@
 		$('.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");
 		
 	}
Add a comment
List