rosewiper 2024-01-22
발송결과 카카오톡 상세보기 팝업 친구톡 내용 표시 기능 개발
@2fdf104101e13a33ba77295e0ef0efcc8d0795b9
src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
--- src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
+++ src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
@@ -149,6 +149,7 @@
 	private String bizKakaoResendOrgnlTxt; /* 대체 문자( 치환X ) */
 	private String bizKakaoResendYn; /* 대체 문자 사용 여부*/
 	private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */
+	private String bizKakaoJsonFile;	//카카오 친구톡 Json 파일 경로
 	
 	
 	public String getMsgDiv() {
@@ -1266,5 +1267,11 @@
 	public void setBizKakaoResendType(String bizKakaoResendType) {
 		this.bizKakaoResendType = bizKakaoResendType;
 	}
+	public String getBizKakaoJsonFile() {
+		return bizKakaoJsonFile;
+	}
+	public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
+		this.bizKakaoJsonFile = bizKakaoJsonFile;
+	}
 	
 }
src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
--- src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
+++ src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
@@ -1,5 +1,6 @@
 package itn.let.kakao.user.sent.web;
 
+import java.io.FileReader;
 import java.io.OutputStream;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -19,6 +20,9 @@
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,6 +39,7 @@
 import itn.com.cmm.util.StringUtil2;
 import itn.com.utl.fcc.service.EgovStringUtil;
 import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
+import itn.let.kakao.kakaoComm.KakaoButtonVO;
 import itn.let.kakao.kakaoComm.KakaoReturnVO;
 import itn.let.kakao.kakaoComm.KakaoVO;
 import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
@@ -220,16 +225,36 @@
 		mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt()));  
 		model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
 		
-		// 템플릿 api 가져오기
-		KakaoVO kakaoVO = new KakaoVO(); 
-		kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
-		kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
+		String msgType = mjonKakaoATResultVO.getMsgType();
 		
-		KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
+		if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리
+			
+			// 템플릿 api 가져오기
+			KakaoVO kakaoVO = new KakaoVO(); 
+			kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
+			kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
+			
+			KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
+			
+			model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
+			// //템플릿 api 가져오기
+			
+		}else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리
+			
+			//String smsTxt = mjonKakaoATResultVO.getSmsTxt();
+			
+			KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO);
+			//kakaoTemplateInfo.setTemplateContent(smsTxt);
+			
+			model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
+			
+		}else {
+			
+			model.addAttribute("kakaoTemplateInfo", "");
+			
+		}
 		
-		model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
-		// //템플릿 api 가져오기
-		
+		model.addAttribute("msgType", msgType);		
 		return "web/kakao/sent/KakaoSentDetailPopAjax";
 	}
 	
@@ -254,27 +279,45 @@
 
 		//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA)
 		MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailData2Ajax(mjonKakaoATVO);
-		// 대체문자 엔터키 치환
-		mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans()));  
 		
-		// 강조형 타이틀이 있는지 없는지 구분
-		if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle()))
-		{
-			String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
-			mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]);
-			mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]);
+		String msgType = mjonKakaoATResultVO.getMsgType();
+		
+		if(msgType.equals("8")) {
+			
+			// 대체문자 엔터키 치환
+			mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans()));  
+			
+			// 강조형 타이틀이 있는지 없는지 구분
+			if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle()))
+			{
+				String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
+				mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]);
+				mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]);
+			}
+			
+			model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
+			
+			// 템플릿 api 가져오기
+			KakaoVO kakaoVO = new KakaoVO(); 
+			kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
+			kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
+			
+			KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
+			
+			model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
+			
+		}else if(msgType.equals("9")) {
+			
+			KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO);
+			
+			model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
+			model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
+			
+		}else {
+			
+			model.addAttribute("kakaoTemplateInfo", "");
+			
 		}
-		
-		model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
-		
-		// 템플릿 api 가져오기
-		KakaoVO kakaoVO = new KakaoVO(); 
-		kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
-		kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
-		
-		KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
-		
-		model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
 
 		return "web/kakao/sent/KakaoSentDetailPop2Ajax";
 	}	
@@ -822,5 +865,101 @@
 		
 	}
 	
+
+	/*
+	 * 20240122 우영두 추가
+	 * 친구톡 발송 결과 내용 팝업 처리
+	 * 발송 내용 처리 및 첨부 이미지, 버튼 정보 처리
+	 * 
+	 * */
+	public KakaoReturnVO getKakaoFTSendTemplateInfo(MjonKakaoATVO kakaoATVO) throws Exception {
+		
+		KakaoReturnVO returnVO = new KakaoReturnVO();
+		try {
+			
+			String tmpContent = kakaoATVO.getSmsTxtTrans();
+			String jsonFilePath = kakaoATVO.getBizKakaoJsonFile();
+			
+			//친구톡 이미지 또는 버튼 정보가 있다면 실행
+			if(jsonFilePath != null && jsonFilePath.length() > 0) {
+				
+				FileReader reader = new FileReader(jsonFilePath);         
+				int ch;        
+				String resultStr = "";
+				while ((ch = reader.read()) != -1) {
+					 
+					resultStr = resultStr + (char)ch;
+				}
+				
+				JSONParser parser = new JSONParser();
+				Object obj = parser.parse(resultStr);
+				JSONObject object = (JSONObject) obj;
+				
+				String image = (object.get("image") == null) ? null : object.get("image").toString();
+				String button = (object.get("button") == null) ? null : object.get("button").toString();
+				
+				if(image != null) {
+					
+					Object imagObj = parser.parse(image);
+					JSONObject jsonImgObj = (JSONObject) imagObj;
+					
+					System.out.println(jsonImgObj.toJSONString());
+					
+					String imgUrl = (jsonImgObj.get("img_url") == null) ? null : jsonImgObj.get("img_url").toString();
+					
+					System.out.println(imgUrl);
+					
+					returnVO.setTemplateEmphasizeType("IMAGE");
+					returnVO.setTemplateImageUrl(imgUrl);
+					
+				}
+				
+				if(button != null) {
+					
+					JSONArray buttonJsonList = (JSONArray) object.get("button");
+					
+					System.out.println(buttonJsonList.size());
+					
+					List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>();
+					
+					for(int i=0; i < buttonJsonList.size(); i++) {
+						
+						JSONObject itemInfo = (JSONObject)buttonJsonList.get(i);
+						
+						String name = itemInfo.get("name").toString();
+						
+						System.out.println(name);
+						
+						KakaoButtonVO buttonVO = new KakaoButtonVO();
+						
+						buttonVO.setName(name);
+						
+						buttonList.add(buttonVO);
+						
+					}
+					
+					returnVO.setButtonList(buttonList);
+					
+					for(KakaoButtonVO butVO : returnVO.getButtonList()) {
+						
+						System.out.println("+++++++++++++ btn name ::: "+butVO.getName());
+						
+					}
+					
+				}
+				
+			}
+			
+			//친구톡 내용 셋팅
+			returnVO.setTemplateContent(tmpContent);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		return returnVO;
+		
+	}
+	
 	
 }
src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
@@ -902,6 +902,7 @@
 		SELECT
 		    MGD.MSG_GROUP_ID				as msgGroupId
 			, MGD.USER_ID					as userId
+			, MD.MSG_TYPE					as msgType
 			, MD.REQ_DATE					as reqDate /* 발송 시간 */
 			, MD.MSG_NOTICETALK_SENDER_KEY	as msgNoticetalkSenderKey 	/* api key */
 			, MD.MSG_NOTICETALK_TMP_KEY		as msgNoticetalkTmpKey 		/* 특정 템플릿 key */
@@ -912,6 +913,7 @@
 			, MD.BIZ_KAKAO_RESEND_TYPE		as bizKakaoResendType		/* MMS / LMS / SMS */
 			, MD.BIZ_KAKAO_RESEND_DATA		as bizKakaoResendData 		/* 대체 문자 (치환O) */
 			, MGD.BIZ_KAKAO_RESEND_ORGNL_TXT   as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */
+			, MD.BIZ_KAKAO_JSON_FILE		as bizKakaoJsonFile			/* Json 파일 경로 */
 		FROM MJ_MSG_GROUP_DATA MGD
 				INNER JOIN MJ_MSG_DATA MD 
 					ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID
@@ -928,6 +930,7 @@
 
 		SELECT
 			MD.REQ_DATE					as reqDate /* 발송 시간 */
+			, MD.MSG_TYPE					as msgType
 			, MD.MSG_NOTICETALK_SENDER_KEY	as msgNoticetalkSenderKey 	/* api key */
 			, MD.MSG_NOTICETALK_TMP_KEY		as msgNoticetalkTmpKey 		/* 특정 템플릿 key */
 			, MD.SMS_TXT					as smsTxtTrans 				/* 알림톡 본문 내용 치환(O)*/
@@ -935,6 +938,7 @@
 			, MD.BIZ_KAKAO_RESEND_YN		as bizKakaoResendYn 		/* 대체 문자 사용 여부*/
 			, MD.BIZ_KAKAO_RESEND_TYPE		as bizKakaoResendType		/* MMS / LMS / SMS */
 			, MD.BIZ_KAKAO_RESEND_DATA		as bizKakaoResendData 		/* 대체 문자 (치환O) */
+			, MD.BIZ_KAKAO_JSON_FILE		as bizKakaoJsonFile			/* Json 파일 경로 */
 		FROM MJ_MSG_DATA MD
 		WHERE
 			MD.MSG_ID	= #msgId#
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
@@ -19,12 +19,33 @@
 					<div class="rev_pop_in">
 						<div class="rev_pop_middle clearfix">
 							<span><c:out value="${resultMsgDetail.reqDate }" /></span>
-							<span class="msg_com msg_allimtalk">알림톡</span>
+							<span class="msg_com msg_allimtalk">
+								<c:choose>
+									<c:when test="${msgType eq '8'}">
+										알림톡
+									</c:when>
+									<c:when test="${msgType eq '9'}">
+										친구톡
+									</c:when>
+									<c:otherwise>
+									</c:otherwise>
+								</c:choose>
+							</span>
 						</div>
 						<div class="rev_pop_txt">
 							<div class="text_preview">
 								<div class="allimtalk_title">
-									<img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착
+									<img src="/publish/images/content/icon_allimtalk.png" alt="">
+									<c:choose>
+										<c:when test="${msgType eq '8'}">
+											알림톡 도착
+										</c:when>
+										<c:when test="${msgType eq '9'}">
+											친구톡 도착
+										</c:when>
+										<c:otherwise>
+										</c:otherwise>
+									</c:choose>
 								</div>
 								<div class="allimtalk_content">
 										<!-- 강조 텍스트 --> 
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
@@ -946,7 +946,11 @@
 					<ul class="list_tab">
 						<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
 						<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
-						<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> -->
+						<c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') 
+				        || fn:contains(pageContext.request.requestURL , '192.168.0.33')
+				        || fn:contains(pageContext.request.requestURL , '119.193.215.98')}">
+							<li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
+				        </c:if>
 					</ul><!--// tab button -->
 				</div>
 				<!-- 예약관리 > 전체 -->
Add a comment
List