친구톡 화면 개선중

This commit is contained in:
hehihoho3@gmail.com 2025-06-18 14:55:44 +09:00
parent 6da46e1c0e
commit 341bce9f45
14 changed files with 151 additions and 35 deletions

View File

@ -87,6 +87,7 @@ public class MjonFTSendVO{
*/
private String msgType;
/**
* @description : 첨부파일 갯수
*/

View File

@ -45,8 +45,14 @@ public class KakaoSendAdvcVO implements Serializable {
private String subMsgType; // 대체문자 타입
private String reqDate; // 예약일시
private String msgKind; // 예약일시
private String jsonStr; // jsonStr
private String adFlag; //친구톡 광고성 정보 사용 유무(Y:사용 , N:미사용)
// =====
// =====

View File

@ -315,8 +315,17 @@ public class KakaoSendUtil {
log.info(" + StringUtils.isNotEmpty(subMsgTxt) :: [{}]", StringUtils.isNotEmpty(subMsgTxt));
if(StringUtils.isNotEmpty(subMsgTxt)) {
kakaoVO.setSubMsgSendYn("Y");
// 광고문자면 처리 - 광고 Y
if ("Y".equals(kakaoVO.getAdFlag())) {
subMsgTxt = "(광고)" + subMsgTxt + "\n" + "무료거부 0808800858";
}
}
// 시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
// 사용자 개인 단가 정보 불러오기
@ -434,7 +443,7 @@ public class KakaoSendUtil {
// 타이틀과 버튼이 있고
if(hasButtons) {
if(hasButtons || StringUtils.isNotEmpty(kakaoVO.getTemplateImageUrl())) {
//
if (StringUtils.isEmpty(sharedJsonStr)) {
// 치환 데이터가 없고 아직 생성되지 않았으면 번만 생성
@ -554,6 +563,10 @@ public class KakaoSendUtil {
sendVO.setUserId(kakaoVO.getUserId());
sendVO.setCallFrom(kakaoVO.getCallFrom());
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
sendVO.setAdFlag(kakaoVO.getAdFlag());
return sendVO;
}
@ -1592,6 +1605,7 @@ public class KakaoSendUtil {
sendVO.setReserveYn(kakaoVO.getReserveYn());
sendVO.setBefCash(priceAndPoint.getBefCash(sendVO.getUserId()));
sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId()));
sendVO.setAdFlag(kakaoVO.getAdFlag());
Float eachPrice = Float.parseFloat(sendVO.getEachPrice());

View File

@ -230,6 +230,7 @@ public class KakaoApiProfile {
if(code.equals("200")) {
JSONObject templateProfile = (JSONObject) object.get("data");
System.out.println("templateProfile = " + templateProfile.toJSONString());
String senderKey = getStringValue(templateProfile, "senderKey"); //발신프로필키
String uuid = getStringValue(templateProfile, "uuid"); //카카오톡 채널

View File

@ -177,7 +177,7 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
priceAndPoint.insertCashAndPoint(kakaoVO.getUserId()
, -Float.parseFloat(sendVO.getTotPrice())
, "카카오 알림톡 총 "+groupedMsgList.size()+"건 중 " + instCnt + "건 발송"
, "카카오 친구톡 총 "+groupedMsgList.size()+"건 중 " + instCnt + "건 발송"
, nextMsgGroupId
);

View File

@ -119,4 +119,6 @@ public class KakaoSentVO extends UserDefaultVO{
private String yellowId;
private String adFlag;
}

View File

@ -141,6 +141,9 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO);
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
//totPrice 계산 상태코드 set
resultList = resultList.stream().map(t -> setPriceNCode(t)).collect(Collectors.toList());

View File

@ -46,7 +46,9 @@ import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
import itn.let.kakao.user.sent.service.KakaoSentService;
import itn.let.kakao.user.sent.service.KakaoSentVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class KakaoSentController {
@ -182,6 +184,7 @@ public class KakaoSentController {
//전체 발송 리스트 불러오기
List<KakaoSentVO> resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
model.addAttribute("resultAllSentList", resultAllSentList);
// model.addAttribute("resultAllSentCnt", resultAllSentList.size());
@ -1039,11 +1042,13 @@ public class KakaoSentController {
//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA)
MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailDataAjax(mjonKakaoATVO);
log.info(" 1 resultMsgDetail.bizKakaoResendOrgnlTxt : [{}]", mjonKakaoATResultVO.getBizKakaoResendOrgnlTxt());
// 대체문자 엔터키 치환
if(StringUtils.isNotEmpty(mjonKakaoATResultVO.getSmsTxt())) {
mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt()));
}
model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
log.info(" 2 resultMsgDetail.bizKakaoResendOrgnlTxt : [{}]", mjonKakaoATResultVO.getBizKakaoResendOrgnlTxt());
String msgType = mjonKakaoATResultVO.getMsgType();
@ -1075,6 +1080,8 @@ public class KakaoSentController {
}
model.addAttribute("msgType", msgType);
log.info(" 3 resultMsgDetail.bizKakaoResendOrgnlTxt : [{}]", mjonKakaoATResultVO.getBizKakaoResendOrgnlTxt());
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception

View File

@ -1395,6 +1395,8 @@
B.AT_DELAY_COMPLETE_YN AS atDelayCompleteYn,
A.MSG_NOTICETALK_SENDER_KEY AS msgNoticetalkSenderKey,
A.BIZ_KAKAO_RESEND_YN AS bizKakaoResendYn,
A.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData,
B.AD_FLAG as adFlag ,
CASE
WHEN B.AT_DELAY_YN = 'Y' AND B.AT_DELAY_COMPLETE_YN = 'N'
THEN DATE_ADD(B.REQ_DATE, INTERVAL -30 MINUTE)
@ -1403,7 +1405,7 @@
C.YELLOW_ID AS yellowId
FROM MJ_MSG_GROUP_DATA B
INNER JOIN (
select MSG_GROUP_ID, MSG_TYPE, DEL_FLAG, MSG_NOTICETALK_SENDER_KEY, BIZ_KAKAO_RESEND_YN
select MSG_GROUP_ID, MSG_TYPE, DEL_FLAG, MSG_NOTICETALK_SENDER_KEY, BIZ_KAKAO_RESEND_YN, BIZ_KAKAO_RESEND_DATA
from MJ_MSG_DATA
where DEL_FLAG = 'N'
<isNotEmpty property="tabType">
@ -1899,6 +1901,7 @@
<!-- 발신 내용 상세보기 조회 (상세보기 버튼 클릭시)-->
<select id="KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax" parameterClass="mjonKakaoATVO" resultClass="mjonKakaoATVO">
/* KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax */
SELECT
MGD.MSG_GROUP_ID as msgGroupId

View File

@ -72,6 +72,7 @@
, SMS_TXT
, BIZ_KAKAO_TITLE
, AD_FLAG
, BIZ_KAKAO_RESEND_YN
, BIZ_KAKAO_RESEND_DATA
@ -95,6 +96,7 @@
, #[].templateContent#
, #[].templateTitle#
, #[].adFlag#
, #[].subMsgSendYn#
, #[].subMsgTxt#
@ -131,6 +133,7 @@
REQ_DATE,
MSG_GROUP_CNT,
MSG_TYPE,
AD_FLAG,
AGENT_CODE,
EACH_PRICE,
@ -153,6 +156,7 @@
#reqDate#,
#msgGroupCnt#,
#msgType#,
#adFlag#,
#agentCode#,
#eachPrice#,

View File

@ -142,8 +142,47 @@ $(document).ready(function (){
});
// 광고포함여부 체크 이벤트
$("#ad_Y").click(function () {
const isChecked = $(this).prop("checked");
$('#adFlag').val(isChecked ? 'Y' : 'N');
});
$("input[name='img_file_add']").change(function () {
console.log('$(this).attr("id") :: ', $(this).attr("id"));
var imageUrl = $("#templateImageUrl").val();
if(imageUrl == ''){
return false;
}
$("#imgLink").val("");
$("#imgFile").val("");
$('#imgTitle').addClass('file_none')
.text("이미지 없음");
$('#imgLink').prop('disabled', false); // 회색 처리 제거 + 입력 불가 제거
$("#templateImageUrl").val("");
$('.kakao_image').css("display", "none");
$("#kakaoImg").attr("src", "");
$("#imageFileName").val(""); //이미지 파일명 삭제
// if(imageUrl == ''){
// alert("등록된 이미지가 없습니다.");
// return false;
// }
// fnImageDel()
/* if ($("input[name='img_file_add']:checked").attr("id") == "img_file_1") {
$(".basic_img_add_wrap").show().siblings(".wide_img_add_wrap").hide();
$(".img_file_info_wrap").show();
@ -267,6 +306,7 @@ function resultBookMarkMsgList(){
}
function initFormChk(){
console.log(':: initFormChk ::');
//채널ID 정보 미리보기에 표시해주기
fnAgentCodeChg();
@ -308,10 +348,6 @@ function initFormChk(){
var tmpContents = $('#inputTemplateContent').val();
setContentsLengForFriends(tmpContents);
//초기 광고포함 여부 처리
// var adFlagVal = $("#ad_Y").is(":checked") ? "Y" : "N";
// advTextChange(adFlagVal);
var reserYn = $("input[name=reserYn]:checked").val();
if(reserYn == 'N'){
@ -322,6 +358,17 @@ function initFormChk(){
}
// 광고포함여부 체크
// 기본
// - adFlag = Y
// - ad_Y = Y
console.log('!!!!! : ',$('#adFlag').val());
if($('#adFlag').val() == 'N'){
$('#ad_Y').click();
}
}
//우측 미리보기 화면 채널 아이디 정보 변경해 주기
@ -340,9 +387,11 @@ function fnAgentCodeChg(){
if ($("#ad_Y").is(":checked")) {
$("#adTxt").show(); // 내용
$("#adTxt p").html("(광고) " + cleanYellowId + ""); // 내용
// $("#adTxt p").html("(광고) " + cleanYellowId + ""); // 내용
$("#adTxt p").html("(광고)"); // 내용
$("#talkTitle").html("<span>(광고)</span> " + cleanYellowId); // 미리보기 화면 상단
// $("#talkTitle").html("<span>(광고)</span> " + cleanYellowId); // 미리보기 화면 상단
$("#talkTitle").html("<span>(광고)</span> "); // 미리보기 화면 상단
}
}else{
@ -354,9 +403,11 @@ function fnAgentCodeChg(){
if ($("#ad_Y").is(":checked")) {
$("#adTxt").show(); // 내용
$("#adTxt p").html("(광고) " + channelId + ""); // 내용
// $("#adTxt p").html("(광고) " + channelId + ""); // 내용
$("#adTxt p").html("(광고)"); // 내용
$("#talkTitle").html("<span>(광고)</span> " + channelId); // 미리보기 화면 상단
// $("#talkTitle").html("<span>(광고)</span> " + channelId); // 미리보기 화면 상단
$("#talkTitle").html("<span>(광고)</span>"); // 미리보기 화면 상단
} else {
$("#adTxt").hide(); // 내용
$("#talkTitle").html(channelId); // 미리보기 화면 상단
@ -602,12 +653,6 @@ function fnImageDel(){
bizForm.senderKey.value = $("select[name='selectAgentCode']").val(); // 선택 채널ID
$('#imgTitle').addClass('file_none')
.text("이미지 없음");
$('#imgLink').prop('disabled', false); // 회색 처리 + 입력 불가
if(imageUrl == ''){
alert("등록된 이미지가 없습니다.");
@ -655,11 +700,20 @@ function fnImageDel(){
$('#imgTitle').addClass('file_none')
.text("이미지 없음");
$('#imgLink').prop('disabled', false); // 회색 처리 제거 + 입력 불가 제거
$("#templateImageUrl").val("");
$('.kakao_image').css("display", "none");
$("#kakaoImg").attr("src", "");
$("#imageFileName").val(""); //이미지 파일명 삭제
$("#img_file_0").click(); //이미지 첨부 안함 선택
return false;
}else{
@ -730,7 +784,6 @@ function myTemplateSave(){
var imageType = $("input[name=img_file_add]:checked").val(); // 첨부 이미지 종류(없음, 일반, 와이드 이미지)
var imageTitle = $("#imgTitle").text(); //첨부이미지 제목
var imageLink = $("#imgLink").val(); //첨부이미지 클릭시 이동 링크 주소
var inputTemplateAd = $("#ad_Y:checked").val(); // 광고성메시지 선택 여부
var inputTemplateContent = $("#inputTemplateContent").val(); // 템플릿 내용
var inputTemplateImageName = $("#templateImageName").val(); // 템플릿 이미지 파일명
@ -794,7 +847,6 @@ function myTemplateSave(){
bizForm.templateName.value = inputTemplateName;
//bizForm.imageType.value = imageType;
//bizForm.imgLink.value = imageLink;
bizForm.adFlag.value = inputTemplateAd;
bizForm.templateContent.value = inputTemplateContent;
var data = new FormData(bizForm);
@ -1031,8 +1083,6 @@ function fn_sendMsgData(){
$("#templateContent").val(tmpContents);
//광고포함 여부
var adFlag = $("#ad_Y:checked").val();
$("#adFlag").val(adFlag);
/* var adFlag = $("input[name=adFlag]:checked").val();
$("#adFlag").val(adFlag); */
@ -1084,7 +1134,7 @@ function fn_sendMsgData(){
});
// VO에 정의되어있지 않는 필요없는 값은 제거
["adFlag", "img_file_add", "userMoney", "callToList"].forEach(function(key) {
["img_file_add", "userMoney", "callToList"].forEach(function(key) {
delete formData[key];
});
@ -1352,13 +1402,13 @@ function getFtImageType(imgChk){
var imgLink = $("#imgLink").val();
var imgFileName = $("#imageFileName").val();
/*
if(imgLink == ''){
alert("친구톡 이미지 선택시 이동할 링크 주소를 입력해 주세요.");
return false;
}
} */
if(imgFileName == ''){
@ -2188,7 +2238,8 @@ function updateButtons(){
<!-- 텍스트 미리보기 -->
<div class="text_preview">
<p class="friend_talk_title" id="talkTitle">
<span>(광고)</span> 채널ID
<!-- <span>(광고)</span> 채널ID -->
<span>(광고)</span>
</p>
<div class="allimtalk_content">
<div class="kakao_image" style="display:none;">

View File

@ -227,9 +227,15 @@ function pageUnitChg(obj){
<span class="di">분할</span>
</c:if>
</c:if>
<a href="#none" onclick="fn_sentDetailView('${resultAllSentList.msgGroupId}');">
<%-- <a href="#none" onclick="fn_sentDetailView('${resultAllSentList.msgGroupId}');">
<c:out value="${resultAllSentList.smsTxt}"/>
</a> --%>
<a href="#none" onclick="fn_sentDetailView('${resultAllSentList.msgGroupId}');">
<c:if test="${resultAllSentList.adFlag eq 'Y'}">(광고)</c:if>
<c:out value="${resultAllSentList.smsTxt}" />
<c:if test="${resultAllSentList.adFlag eq 'Y'}">무료거부 0808800858</c:if>
</a>
</div>
</td>
<td>

View File

@ -77,13 +77,21 @@
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
<!-- 문자 미리보기 -->
<div class="tab_phone" id="tab_phone_2">
<div class="tab_phone" id="tab_phone_2" style="display: none;position:relative;">
<div class="phoneIn">
<div>
<p class="prev_p"><img src="/publish/images/search.png"> 문자내용</p>
<div class="text_length2 clearfix">
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
<c:choose>
<c:when test="${resultMsgDetail.bizKakaoResendType eq 'SMS'}">
<span class="msg_com msg_short">단문</span>
</c:when>
<c:otherwise>
<span class="msg_com msg_long">장문</span>
</c:otherwise>
</c:choose>
<%-- <c:choose>
<c:when test="${resultMsgDetail.bizKakaoResendTypeCnt > 1}">
<span class="msg_com msg_short">단문</span>
<span class="msg_com msg_long">장문</span>
@ -95,7 +103,7 @@
<c:otherwise>
<span class="msg_com msg_long">장문</span>
</c:otherwise>
</c:choose>
</c:choose> --%>
</c:if>
<div>
<span>글자크기</span>

View File

@ -364,6 +364,7 @@ function cntSet(){
cntView('allCnt', response.allCnt);
cntView('atCnt', response.atCnt);
cntView('ftCnt', response.ftCnt);
//cntView('ftCnt', response.ftCnt);
},
error: function(error) {
@ -564,6 +565,15 @@ function fn_sentDetailView(msgGroupId) {
<table class="tType4"><tbody><tr><td>LOADING...</td></tr></tbody></table>
</div>
</div>
<div class="rev_admin_in">
<div class="rev_admin_top clearfix">
<p>친구톡</p>
<p></p>
</div>
<div class="rev_admin_btm admin_btm">
<table class="tType4"><tbody><tr><td>LOADING...</td></tr></tbody></table>
</div>
</div>
</div>
<div class="rev_admin" id="lodingAfter" style="display:none;">
@ -607,26 +617,26 @@ function fn_sentDetailView(msgGroupId) {
</dl>
</div>
</div>
<%-- <div class="rev_admin_in" id="ftCnt">
<div class="rev_admin_in" id="ftCnt">
<div class="rev_admin_top clearfix">
<p>친구톡</p>
<p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p>
<p><span name="allCnt">0</span> 건</p>
</div>
<div class="rev_admin_btm">
<dl>
<dt>대기</dt>
<dd><span class="c_002c9a" name="waitCnt"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd>
<dd><span class="c_002c9a" name="waitCnt">0</span>건</dd>
</dl>
<dl>
<dt>성공</dt>
<dd><span class="c_002c9a" name="succCnt"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd>
<dd><span class="c_002c9a" name="succCnt">0</span>건</dd>
</dl>
<dl>
<dt>실패</dt>
<dd><span class="c_e40000" name="failCnt"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd>
<dd><span class="c_e40000" name="failCnt">0</span>건</dd>
</dl>
</div>
</div> --%>
</div>
</div>
<div class="list_tab_wrap2 type4">