발송결과 카카오톡 상세보기 팝업 친구톡 내용 표시 기능 개발
@2fdf104101e13a33ba77295e0ef0efcc8d0795b9
--- 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 @@ |
| 149 | 149 |
private String bizKakaoResendOrgnlTxt; /* 대체 문자( 치환X ) */ |
| 150 | 150 |
private String bizKakaoResendYn; /* 대체 문자 사용 여부*/ |
| 151 | 151 |
private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */ |
| 152 |
+ private String bizKakaoJsonFile; //카카오 친구톡 Json 파일 경로 |
|
| 152 | 153 |
|
| 153 | 154 |
|
| 154 | 155 |
public String getMsgDiv() {
|
... | ... | @@ -1266,5 +1267,11 @@ |
| 1266 | 1267 |
public void setBizKakaoResendType(String bizKakaoResendType) {
|
| 1267 | 1268 |
this.bizKakaoResendType = bizKakaoResendType; |
| 1268 | 1269 |
} |
| 1270 |
+ public String getBizKakaoJsonFile() {
|
|
| 1271 |
+ return bizKakaoJsonFile; |
|
| 1272 |
+ } |
|
| 1273 |
+ public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
|
|
| 1274 |
+ this.bizKakaoJsonFile = bizKakaoJsonFile; |
|
| 1275 |
+ } |
|
| 1269 | 1276 |
|
| 1270 | 1277 |
} |
--- 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 @@ |
| 1 | 1 |
package itn.let.kakao.user.sent.web; |
| 2 | 2 |
|
| 3 |
+import java.io.FileReader; |
|
| 3 | 4 |
import java.io.OutputStream; |
| 4 | 5 |
import java.text.SimpleDateFormat; |
| 5 | 6 |
import java.util.ArrayList; |
... | ... | @@ -19,6 +20,9 @@ |
| 19 | 20 |
import org.apache.poi.ss.usermodel.Sheet; |
| 20 | 21 |
import org.apache.poi.ss.util.CellRangeAddress; |
| 21 | 22 |
import org.apache.poi.xssf.streaming.SXSSFWorkbook; |
| 23 |
+import org.json.simple.JSONArray; |
|
| 24 |
+import org.json.simple.JSONObject; |
|
| 25 |
+import org.json.simple.parser.JSONParser; |
|
| 22 | 26 |
import org.slf4j.Logger; |
| 23 | 27 |
import org.slf4j.LoggerFactory; |
| 24 | 28 |
import org.springframework.beans.factory.annotation.Autowired; |
... | ... | @@ -35,6 +39,7 @@ |
| 35 | 39 |
import itn.com.cmm.util.StringUtil2; |
| 36 | 40 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 37 | 41 |
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; |
| 42 |
+import itn.let.kakao.kakaoComm.KakaoButtonVO; |
|
| 38 | 43 |
import itn.let.kakao.kakaoComm.KakaoReturnVO; |
| 39 | 44 |
import itn.let.kakao.kakaoComm.KakaoVO; |
| 40 | 45 |
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; |
... | ... | @@ -220,16 +225,36 @@ |
| 220 | 225 |
mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt())); |
| 221 | 226 |
model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
| 222 | 227 |
|
| 223 |
- // 템플릿 api 가져오기 |
|
| 224 |
- KakaoVO kakaoVO = new KakaoVO(); |
|
| 225 |
- kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); |
|
| 226 |
- kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); |
|
| 228 |
+ String msgType = mjonKakaoATResultVO.getMsgType(); |
|
| 227 | 229 |
|
| 228 |
- KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 230 |
+ if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리
|
|
| 231 |
+ |
|
| 232 |
+ // 템플릿 api 가져오기 |
|
| 233 |
+ KakaoVO kakaoVO = new KakaoVO(); |
|
| 234 |
+ kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); |
|
| 235 |
+ kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); |
|
| 236 |
+ |
|
| 237 |
+ KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 238 |
+ |
|
| 239 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 240 |
+ // //템플릿 api 가져오기 |
|
| 241 |
+ |
|
| 242 |
+ }else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리
|
|
| 243 |
+ |
|
| 244 |
+ //String smsTxt = mjonKakaoATResultVO.getSmsTxt(); |
|
| 245 |
+ |
|
| 246 |
+ KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); |
|
| 247 |
+ //kakaoTemplateInfo.setTemplateContent(smsTxt); |
|
| 248 |
+ |
|
| 249 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 250 |
+ |
|
| 251 |
+ }else {
|
|
| 252 |
+ |
|
| 253 |
+ model.addAttribute("kakaoTemplateInfo", "");
|
|
| 254 |
+ |
|
| 255 |
+ } |
|
| 229 | 256 |
|
| 230 |
- model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 231 |
- // //템플릿 api 가져오기 |
|
| 232 |
- |
|
| 257 |
+ model.addAttribute("msgType", msgType);
|
|
| 233 | 258 |
return "web/kakao/sent/KakaoSentDetailPopAjax"; |
| 234 | 259 |
} |
| 235 | 260 |
|
... | ... | @@ -254,27 +279,45 @@ |
| 254 | 279 |
|
| 255 | 280 |
//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) |
| 256 | 281 |
MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailData2Ajax(mjonKakaoATVO); |
| 257 |
- // 대체문자 엔터키 치환 |
|
| 258 |
- mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans())); |
|
| 259 | 282 |
|
| 260 |
- // 강조형 타이틀이 있는지 없는지 구분 |
|
| 261 |
- if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle())) |
|
| 262 |
- {
|
|
| 263 |
- String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
|
|
| 264 |
- mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]); |
|
| 265 |
- mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]); |
|
| 283 |
+ String msgType = mjonKakaoATResultVO.getMsgType(); |
|
| 284 |
+ |
|
| 285 |
+ if(msgType.equals("8")) {
|
|
| 286 |
+ |
|
| 287 |
+ // 대체문자 엔터키 치환 |
|
| 288 |
+ mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans())); |
|
| 289 |
+ |
|
| 290 |
+ // 강조형 타이틀이 있는지 없는지 구분 |
|
| 291 |
+ if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle())) |
|
| 292 |
+ {
|
|
| 293 |
+ String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
|
|
| 294 |
+ mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]); |
|
| 295 |
+ mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]); |
|
| 296 |
+ } |
|
| 297 |
+ |
|
| 298 |
+ model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
|
| 299 |
+ |
|
| 300 |
+ // 템플릿 api 가져오기 |
|
| 301 |
+ KakaoVO kakaoVO = new KakaoVO(); |
|
| 302 |
+ kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); |
|
| 303 |
+ kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); |
|
| 304 |
+ |
|
| 305 |
+ KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 306 |
+ |
|
| 307 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 308 |
+ |
|
| 309 |
+ }else if(msgType.equals("9")) {
|
|
| 310 |
+ |
|
| 311 |
+ KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); |
|
| 312 |
+ |
|
| 313 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 314 |
+ model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
|
| 315 |
+ |
|
| 316 |
+ }else {
|
|
| 317 |
+ |
|
| 318 |
+ model.addAttribute("kakaoTemplateInfo", "");
|
|
| 319 |
+ |
|
| 266 | 320 |
} |
| 267 |
- |
|
| 268 |
- model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
|
| 269 |
- |
|
| 270 |
- // 템플릿 api 가져오기 |
|
| 271 |
- KakaoVO kakaoVO = new KakaoVO(); |
|
| 272 |
- kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); |
|
| 273 |
- kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); |
|
| 274 |
- |
|
| 275 |
- KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 276 |
- |
|
| 277 |
- model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 278 | 321 |
|
| 279 | 322 |
return "web/kakao/sent/KakaoSentDetailPop2Ajax"; |
| 280 | 323 |
} |
... | ... | @@ -822,5 +865,101 @@ |
| 822 | 865 |
|
| 823 | 866 |
} |
| 824 | 867 |
|
| 868 |
+ |
|
| 869 |
+ /* |
|
| 870 |
+ * 20240122 우영두 추가 |
|
| 871 |
+ * 친구톡 발송 결과 내용 팝업 처리 |
|
| 872 |
+ * 발송 내용 처리 및 첨부 이미지, 버튼 정보 처리 |
|
| 873 |
+ * |
|
| 874 |
+ * */ |
|
| 875 |
+ public KakaoReturnVO getKakaoFTSendTemplateInfo(MjonKakaoATVO kakaoATVO) throws Exception {
|
|
| 876 |
+ |
|
| 877 |
+ KakaoReturnVO returnVO = new KakaoReturnVO(); |
|
| 878 |
+ try {
|
|
| 879 |
+ |
|
| 880 |
+ String tmpContent = kakaoATVO.getSmsTxtTrans(); |
|
| 881 |
+ String jsonFilePath = kakaoATVO.getBizKakaoJsonFile(); |
|
| 882 |
+ |
|
| 883 |
+ //친구톡 이미지 또는 버튼 정보가 있다면 실행 |
|
| 884 |
+ if(jsonFilePath != null && jsonFilePath.length() > 0) {
|
|
| 885 |
+ |
|
| 886 |
+ FileReader reader = new FileReader(jsonFilePath); |
|
| 887 |
+ int ch; |
|
| 888 |
+ String resultStr = ""; |
|
| 889 |
+ while ((ch = reader.read()) != -1) {
|
|
| 890 |
+ |
|
| 891 |
+ resultStr = resultStr + (char)ch; |
|
| 892 |
+ } |
|
| 893 |
+ |
|
| 894 |
+ JSONParser parser = new JSONParser(); |
|
| 895 |
+ Object obj = parser.parse(resultStr); |
|
| 896 |
+ JSONObject object = (JSONObject) obj; |
|
| 897 |
+ |
|
| 898 |
+ String image = (object.get("image") == null) ? null : object.get("image").toString();
|
|
| 899 |
+ String button = (object.get("button") == null) ? null : object.get("button").toString();
|
|
| 900 |
+ |
|
| 901 |
+ if(image != null) {
|
|
| 902 |
+ |
|
| 903 |
+ Object imagObj = parser.parse(image); |
|
| 904 |
+ JSONObject jsonImgObj = (JSONObject) imagObj; |
|
| 905 |
+ |
|
| 906 |
+ System.out.println(jsonImgObj.toJSONString()); |
|
| 907 |
+ |
|
| 908 |
+ String imgUrl = (jsonImgObj.get("img_url") == null) ? null : jsonImgObj.get("img_url").toString();
|
|
| 909 |
+ |
|
| 910 |
+ System.out.println(imgUrl); |
|
| 911 |
+ |
|
| 912 |
+ returnVO.setTemplateEmphasizeType("IMAGE");
|
|
| 913 |
+ returnVO.setTemplateImageUrl(imgUrl); |
|
| 914 |
+ |
|
| 915 |
+ } |
|
| 916 |
+ |
|
| 917 |
+ if(button != null) {
|
|
| 918 |
+ |
|
| 919 |
+ JSONArray buttonJsonList = (JSONArray) object.get("button");
|
|
| 920 |
+ |
|
| 921 |
+ System.out.println(buttonJsonList.size()); |
|
| 922 |
+ |
|
| 923 |
+ List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>(); |
|
| 924 |
+ |
|
| 925 |
+ for(int i=0; i < buttonJsonList.size(); i++) {
|
|
| 926 |
+ |
|
| 927 |
+ JSONObject itemInfo = (JSONObject)buttonJsonList.get(i); |
|
| 928 |
+ |
|
| 929 |
+ String name = itemInfo.get("name").toString();
|
|
| 930 |
+ |
|
| 931 |
+ System.out.println(name); |
|
| 932 |
+ |
|
| 933 |
+ KakaoButtonVO buttonVO = new KakaoButtonVO(); |
|
| 934 |
+ |
|
| 935 |
+ buttonVO.setName(name); |
|
| 936 |
+ |
|
| 937 |
+ buttonList.add(buttonVO); |
|
| 938 |
+ |
|
| 939 |
+ } |
|
| 940 |
+ |
|
| 941 |
+ returnVO.setButtonList(buttonList); |
|
| 942 |
+ |
|
| 943 |
+ for(KakaoButtonVO butVO : returnVO.getButtonList()) {
|
|
| 944 |
+ |
|
| 945 |
+ System.out.println("+++++++++++++ btn name ::: "+butVO.getName());
|
|
| 946 |
+ |
|
| 947 |
+ } |
|
| 948 |
+ |
|
| 949 |
+ } |
|
| 950 |
+ |
|
| 951 |
+ } |
|
| 952 |
+ |
|
| 953 |
+ //친구톡 내용 셋팅 |
|
| 954 |
+ returnVO.setTemplateContent(tmpContent); |
|
| 955 |
+ |
|
| 956 |
+ } catch (Exception e) {
|
|
| 957 |
+ e.printStackTrace(); |
|
| 958 |
+ } |
|
| 959 |
+ |
|
| 960 |
+ return returnVO; |
|
| 961 |
+ |
|
| 962 |
+ } |
|
| 963 |
+ |
|
| 825 | 964 |
|
| 826 | 965 |
} |
--- 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 @@ |
| 902 | 902 |
SELECT |
| 903 | 903 |
MGD.MSG_GROUP_ID as msgGroupId |
| 904 | 904 |
, MGD.USER_ID as userId |
| 905 |
+ , MD.MSG_TYPE as msgType |
|
| 905 | 906 |
, MD.REQ_DATE as reqDate /* 발송 시간 */ |
| 906 | 907 |
, MD.MSG_NOTICETALK_SENDER_KEY as msgNoticetalkSenderKey /* api key */ |
| 907 | 908 |
, MD.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey /* 특정 템플릿 key */ |
... | ... | @@ -912,6 +913,7 @@ |
| 912 | 913 |
, MD.BIZ_KAKAO_RESEND_TYPE as bizKakaoResendType /* MMS / LMS / SMS */ |
| 913 | 914 |
, MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */ |
| 914 | 915 |
, MGD.BIZ_KAKAO_RESEND_ORGNL_TXT as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */ |
| 916 |
+ , MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */ |
|
| 915 | 917 |
FROM MJ_MSG_GROUP_DATA MGD |
| 916 | 918 |
INNER JOIN MJ_MSG_DATA MD |
| 917 | 919 |
ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID |
... | ... | @@ -928,6 +930,7 @@ |
| 928 | 930 |
|
| 929 | 931 |
SELECT |
| 930 | 932 |
MD.REQ_DATE as reqDate /* 발송 시간 */ |
| 933 |
+ , MD.MSG_TYPE as msgType |
|
| 931 | 934 |
, MD.MSG_NOTICETALK_SENDER_KEY as msgNoticetalkSenderKey /* api key */ |
| 932 | 935 |
, MD.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey /* 특정 템플릿 key */ |
| 933 | 936 |
, MD.SMS_TXT as smsTxtTrans /* 알림톡 본문 내용 치환(O)*/ |
... | ... | @@ -935,6 +938,7 @@ |
| 935 | 938 |
, MD.BIZ_KAKAO_RESEND_YN as bizKakaoResendYn /* 대체 문자 사용 여부*/ |
| 936 | 939 |
, MD.BIZ_KAKAO_RESEND_TYPE as bizKakaoResendType /* MMS / LMS / SMS */ |
| 937 | 940 |
, MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */ |
| 941 |
+ , MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */ |
|
| 938 | 942 |
FROM MJ_MSG_DATA MD |
| 939 | 943 |
WHERE |
| 940 | 944 |
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
... | ... | @@ -19,12 +19,33 @@ |
| 19 | 19 |
<div class="rev_pop_in"> |
| 20 | 20 |
<div class="rev_pop_middle clearfix"> |
| 21 | 21 |
<span><c:out value="${resultMsgDetail.reqDate }" /></span>
|
| 22 |
- <span class="msg_com msg_allimtalk">알림톡</span> |
|
| 22 |
+ <span class="msg_com msg_allimtalk"> |
|
| 23 |
+ <c:choose> |
|
| 24 |
+ <c:when test="${msgType eq '8'}">
|
|
| 25 |
+ 알림톡 |
|
| 26 |
+ </c:when> |
|
| 27 |
+ <c:when test="${msgType eq '9'}">
|
|
| 28 |
+ 친구톡 |
|
| 29 |
+ </c:when> |
|
| 30 |
+ <c:otherwise> |
|
| 31 |
+ </c:otherwise> |
|
| 32 |
+ </c:choose> |
|
| 33 |
+ </span> |
|
| 23 | 34 |
</div> |
| 24 | 35 |
<div class="rev_pop_txt"> |
| 25 | 36 |
<div class="text_preview"> |
| 26 | 37 |
<div class="allimtalk_title"> |
| 27 |
- <img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착 |
|
| 38 |
+ <img src="/publish/images/content/icon_allimtalk.png" alt=""> |
|
| 39 |
+ <c:choose> |
|
| 40 |
+ <c:when test="${msgType eq '8'}">
|
|
| 41 |
+ 알림톡 도착 |
|
| 42 |
+ </c:when> |
|
| 43 |
+ <c:when test="${msgType eq '9'}">
|
|
| 44 |
+ 친구톡 도착 |
|
| 45 |
+ </c:when> |
|
| 46 |
+ <c:otherwise> |
|
| 47 |
+ </c:otherwise> |
|
| 48 |
+ </c:choose> |
|
| 28 | 49 |
</div> |
| 29 | 50 |
<div class="allimtalk_content"> |
| 30 | 51 |
<!-- 강조 텍스트 --> |
--- 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 @@ |
| 946 | 946 |
<ul class="list_tab"> |
| 947 | 947 |
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
| 948 | 948 |
<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
|
| 949 |
- <!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> -->
|
|
| 949 |
+ <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost')
|
|
| 950 |
+ || fn:contains(pageContext.request.requestURL , '192.168.0.33') |
|
| 951 |
+ || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> |
|
| 952 |
+ <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
|
|
| 953 |
+ </c:if> |
|
| 950 | 954 |
</ul><!--// tab button --> |
| 951 | 955 |
</div> |
| 952 | 956 |
<!-- 예약관리 > 전체 --> |
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?