친구톡 발송속도 및 발송결과

This commit is contained in:
hehihoho3@gmail.com 2025-04-25 16:59:38 +09:00
parent 81d31fc55f
commit d730bdd76e
4 changed files with 78 additions and 1133 deletions

View File

@ -300,7 +300,7 @@ public class KakaoSendUtil {
//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
// String befCash = kakaoVO.getBefCash(); // String befCash = kakaoVO.getBefCash();
log.info(" [{}]", kakaoVO.ftToString()); log.info("kakaoVO.ftToString() :: [{}]", kakaoVO.ftToString());
List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>(); List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>();
Calendar calendar = setupBaseDate(kakaoVO, isNotified); Calendar calendar = setupBaseDate(kakaoVO, isNotified);
@ -310,6 +310,10 @@ public class KakaoSendUtil {
String templateContent = kakaoVO.getTemplateContent(); String templateContent = kakaoVO.getTemplateContent();
// 실패 대체 문자 // 실패 대체 문자
String subMsgTxt = kakaoVO.getSubMsgTxt(); String subMsgTxt = kakaoVO.getSubMsgTxt();
log.info(" + StringUtils.isNotEmpty(subMsgTxt) :: [{}]", StringUtils.isNotEmpty(subMsgTxt));
if(StringUtils.isNotEmpty(subMsgTxt)) {
kakaoVO.setSubMsgSendYn("Y");
}
// 시스템 기본 단가 정보 불러오기 // 시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
@ -321,8 +325,6 @@ public class KakaoSendUtil {
Boolean replaceYN = MsgSendUtils.getReplaceYN(templateContent); Boolean replaceYN = MsgSendUtils.getReplaceYN(templateContent);
Boolean replaceSubYN = MsgSendUtils.getReplaceYN(subMsgTxt); Boolean replaceSubYN = MsgSendUtils.getReplaceYN(subMsgTxt);
boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 스팸 체크가 번만 수행되도록 제어
/** @MSGID KEY값 */ /** @MSGID KEY값 */
List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getMjonFTSendVOList().size()); List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getMjonFTSendVOList().size());
@ -348,15 +350,13 @@ public class KakaoSendUtil {
/** @jsonStr 필요유무 */ /** @jsonStr 필요유무 */
boolean hasTitleOrButtons = CollectionUtils.isNotEmpty(kakaoVO.getButtonVOList()); boolean hasButtons = CollectionUtils.isNotEmpty(kakaoVO.getButtonVOList());
String sharedJsonStr = null; String sharedJsonStr = null;
List<MjonFTSendVO> mjonFTSendVOList = kakaoVO.getMjonFTSendVOList(); List<MjonFTSendVO> mjonFTSendVOList = kakaoVO.getMjonFTSendVOList();
// 분할 건수 카운터
int counter = 0;
for (int i = 0; i < mjonFTSendVOList.size(); i++) { for (int i = 0; i < mjonFTSendVOList.size(); i++) {
MjonFTSendVO mjonFTSendVO = mjonFTSendVOList.get(i); MjonFTSendVO mjonFTSendVO = mjonFTSendVOList.get(i);
@ -394,16 +394,18 @@ public class KakaoSendUtil {
if(StringUtils.isNotEmpty(subMsgTxt)) { if(StringUtils.isNotEmpty(subMsgTxt)) {
subMsgTxtTemp = subMsgTxt; subMsgTxtTemp = subMsgTxt;
// 치환 구문을 확인하고 치환할 값이 없으면 오류 반환 if(replaceSubYN) {
for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) { // 치환 구문을 확인하고 치환할 값이 없으면 오류 반환
String placeholder = entry.getKey(); for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
String value = entry.getValue().apply(mjonFTSendVO); String placeholder = entry.getKey();
if (subMsgTxtTemp.contains(placeholder)) { String value = entry.getValue().apply(mjonFTSendVO);
if (StringUtils.isEmpty(value)) { if (subMsgTxtTemp.contains(placeholder)) {
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다."); if (StringUtils.isEmpty(value)) {
return null; statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
return null;
}
subMsgTxtTemp = subMsgTxtTemp.replace(placeholder, value);
} }
subMsgTxtTemp = subMsgTxtTemp.replace(placeholder, value);
} }
} }
} }
@ -423,7 +425,6 @@ public class KakaoSendUtil {
boolean isMms = "MMS".equals(sendType); boolean isMms = "MMS".equals(sendType);
sendVO.setEachPrice(isMms ? mmsPStr : shortPStr); sendVO.setEachPrice(isMms ? mmsPStr : shortPStr);
sendVO.setSubMsgTxt(subMsgTxt);// 실패
}else { }else {
kakaoFtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice()); kakaoFtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice());
sendVO.setEachPrice( Float.toString(kakaoFtPrice) ); sendVO.setEachPrice( Float.toString(kakaoFtPrice) );
@ -431,7 +432,7 @@ public class KakaoSendUtil {
// 타이틀과 버튼이 있고 // 타이틀과 버튼이 있고
if(hasTitleOrButtons) { if(hasButtons) {
// //
if (StringUtils.isEmpty(sharedJsonStr)) { if (StringUtils.isEmpty(sharedJsonStr)) {
// 치환 데이터가 없고 아직 생성되지 않았으면 번만 생성 // 치환 데이터가 없고 아직 생성되지 않았으면 번만 생성
@ -550,6 +551,7 @@ public class KakaoSendUtil {
sendVO.setTemplateCode(kakaoVO.getTemplateCode()); sendVO.setTemplateCode(kakaoVO.getTemplateCode());
sendVO.setUserId(kakaoVO.getUserId()); sendVO.setUserId(kakaoVO.getUserId());
sendVO.setCallFrom(kakaoVO.getCallFrom()); sendVO.setCallFrom(kakaoVO.getCallFrom());
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
return sendVO; return sendVO;
} }
@ -1576,6 +1578,9 @@ public class KakaoSendUtil {
// log.info(" + insertKakaoGroupDataTb_advc kakaoVO :: \n[{}]", kakaoVO.toString());; // log.info(" + insertKakaoGroupDataTb_advc kakaoVO :: \n[{}]", kakaoVO.toString());;
// log.info(" + insertKakaoGroupDataTb_advc kakaoSendAdvcVOList :: \n[{}]", sendVO.toString()); // log.info(" + insertKakaoGroupDataTb_advc kakaoSendAdvcVOList :: \n[{}]", sendVO.toString());
sendVO.setTemplateContent(kakaoVO.getTemplateContent());
sendVO.setMsgGroupCnt(Integer.toString(instCnt)); sendVO.setMsgGroupCnt(Integer.toString(instCnt));
sendVO.setReserveYn(kakaoVO.getReserveYn()); sendVO.setReserveYn(kakaoVO.getReserveYn());
sendVO.setBefCash(priceAndPoint.getBefCash(sendVO.getUserId())); sendVO.setBefCash(priceAndPoint.getBefCash(sendVO.getUserId()));

View File

@ -182,7 +182,6 @@ public class KakaoSentController {
//전체 발송 리스트 불러오기 //전체 발송 리스트 불러오기
List<KakaoSentVO> resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO); List<KakaoSentVO> resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
System.out.println("??");
model.addAttribute("resultAllSentList", resultAllSentList); model.addAttribute("resultAllSentList", resultAllSentList);
// model.addAttribute("resultAllSentCnt", resultAllSentList.size()); // model.addAttribute("resultAllSentCnt", resultAllSentList.size());
@ -890,22 +889,21 @@ public class KakaoSentController {
KakaoReturnVO returnVO = new KakaoReturnVO(); KakaoReturnVO returnVO = new KakaoReturnVO();
try { try {
String tmpContent = kakaoATVO.getSmsTxtTrans(); String jsonContents = kakaoATVO.getContents();
String jsonFilePath = kakaoATVO.getBizKakaoJsonFile();
//친구톡 이미지 또는 버튼 정보가 있다면 실행 //친구톡 이미지 또는 버튼 정보가 있다면 실행
if(jsonFilePath != null && jsonFilePath.length() > 0) { if(jsonContents != null && jsonContents.length() > 0) {
FileReader reader = new FileReader(jsonFilePath); /*FileReader reader = new FileReader(jsonFilePath);
int ch; int ch;
String resultStr = ""; String resultStr = "";
while ((ch = reader.read()) != -1) { while ((ch = reader.read()) != -1) {
resultStr = resultStr + (char)ch; resultStr = resultStr + (char)ch;
} }
*/
JSONParser parser = new JSONParser(); JSONParser parser = new JSONParser();
Object obj = parser.parse(resultStr); Object obj = parser.parse(jsonContents);
JSONObject object = (JSONObject) obj; JSONObject object = (JSONObject) obj;
String image = (object.get("image") == null) ? null : object.get("image").toString(); String image = (object.get("image") == null) ? null : object.get("image").toString();
@ -964,7 +962,7 @@ public class KakaoSentController {
} }
//친구톡 내용 셋팅 //친구톡 내용 셋팅
returnVO.setTemplateContent(tmpContent); returnVO.setTemplateContent(kakaoATVO.getSmsTxt());
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -1037,42 +1035,50 @@ public class KakaoSentController {
//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) try {
MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailDataAjax(mjonKakaoATVO);
// 대체문자 엔터키 치환
mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt()));
model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
String msgType = mjonKakaoATResultVO.getMsgType(); //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA)
MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailDataAjax(mjonKakaoATVO);
// 대체문자 엔터키 치환
if(StringUtils.isNotEmpty(mjonKakaoATResultVO.getSmsTxt())) {
mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt()));
}
model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리 String msgType = mjonKakaoATResultVO.getMsgType();
// 템플릿 api 가져오기 if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리
KakaoVO kakaoVO = new KakaoVO();
kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); // 템플릿 api 가져오기
KakaoVO kakaoVO = new KakaoVO();
kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
// //템플릿 api 가져오기
}else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리 model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
// //템플릿 api 가져오기
//String smsTxt = mjonKakaoATResultVO.getSmsTxt(); }else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리
KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); //String smsTxt = mjonKakaoATResultVO.getSmsTxt();
//kakaoTemplateInfo.setTemplateContent(smsTxt);
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO);
//kakaoTemplateInfo.setTemplateContent(smsTxt);
}else { model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
model.addAttribute("kakaoTemplateInfo", ""); }else {
model.addAttribute("kakaoTemplateInfo", "");
}
model.addAttribute("msgType", msgType);
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
} }
model.addAttribute("msgType", msgType);
return "web/kakao/sent/KakaoSentDetailPopAjax"; return "web/kakao/sent/KakaoSentDetailPopAjax";
} }
} }

View File

@ -909,7 +909,7 @@
<!-- 발신 내용 상세보기 조회 (상세보기 버튼 클릭시)--> <!-- 발신 내용 상세보기 조회 (상세보기 버튼 클릭시)-->
<select id="KakaoSentDAO.selectKakaoSentDetailDataAjax" parameterClass="mjonKakaoATVO" resultClass="mjonKakaoATVO"> <select id="KakaoSentDAO.selectKakaoSentDetailDataAjax" parameterClass="mjonKakaoATVO" resultClass="mjonKakaoATVO">
/* KakaoSentDAO.selectKakaoSentDetailDataAjax */
SELECT SELECT
MGD.MSG_GROUP_ID as msgGroupId MGD.MSG_GROUP_ID as msgGroupId
, MGD.USER_ID as userId , MGD.USER_ID as userId
@ -925,9 +925,12 @@
, MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */ , MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */
, MGD.BIZ_KAKAO_RESEND_ORGNL_TXT as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */ , MGD.BIZ_KAKAO_RESEND_ORGNL_TXT as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */
, MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */ , MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */
, BA.CONTENTS as contents
FROM MJ_MSG_GROUP_DATA MGD FROM MJ_MSG_GROUP_DATA MGD
INNER JOIN MJ_MSG_DATA MD INNER JOIN MJ_MSG_DATA MD
ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID
LEFT JOIN BIZ_ATTACHMENTS BA
ON MD.BIZ_KAKAO_JSON_FILE = BA.MSG_KEY
AND MGD.USER_ID = MD.USER_ID AND MGD.USER_ID = MD.USER_ID
WHERE WHERE
MGD.USER_ID = #userId# MGD.USER_ID = #userId#