File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package itn.let.kakao.kakaoComm;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import itn.com.cmm.util.StringUtil;
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uss.umt.service.MberManageVO;
@Component
public class KakaoSendUtil {
@Autowired
KakaoApiJsonSave kakaoApiJsonSave;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
/**
* @Method Name : kakaoSendPrice
* @작성일 : 2023. 2. 14.
* @작성자 : WYH
* @Method 설명 : 카카오 전송 가격 설정
*/
public KakaoVO kakaoSendPrice(KakaoVO kakaoVO) throws Exception {
//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
String befCash = kakaoVO.getBefCash();
//VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴
if("".equals(befCash) || befCash == null) {
}
MjonMsgVO mjonMsgVO = new MjonMsgVO();
mjonMsgVO.setUserId(kakaoVO.getUserId());
String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO);
String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO);
//1.시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
//2.사용자 개인 단가 정보 불러오기
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
Float kakaoAtPrice = mberManageVO.getKakaoAtPrice();
/** 대체문자 여부 체크(있으면 대체문자 가격으로 없으면 카카오톡 가격으로) */
//대체문자 발송 여부 확인
if(kakaoVO.getSubMsgSendYn().equals("Y")) {
String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
int callToCnt = kakaoVO.getCallToList().length;
String sendType = "";
for(int count =0; count < callToCnt; count++) {
String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
tempSubMagTxt = kakaoSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
}
int bytes = tempSubMagTxt.getBytes(charset).length;
if(bytes < 2000) {
if(bytes > 90) {
sendType = "MMS";
break;
}else {
sendType = "SMS";
}
}else {
kakaoVO.setResultCode("2000");
return kakaoVO;
}
}
if(sendType.equals("MMS")) {
//협의 단가가 없으면 시스템 단가로 지정
if(mberManageVO.getLongPrice() < 1) {
kakaoAtPrice = sysJoinSetVO.getLongPrice();
kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
}else {
kakaoAtPrice = mberManageVO.getLongPrice();
kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
if(mberManageVO.getKakaoAtPrice() < 1) {
kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
}else {
kakaoVO.setKakaoAtPrice(mberManageVO.getKakaoAtPrice());
}
}
}else {
//협의 단가가 없으면 시스템 단가로 지정
if(mberManageVO.getShortPrice() < 1) {
kakaoAtPrice = sysJoinSetVO.getShortPrice();
kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
}else {
kakaoAtPrice = mberManageVO.getShortPrice();
kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
if(mberManageVO.getKakaoAtPrice() < 1) {
kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
}else {
kakaoVO.setKakaoAtPrice(mberManageVO.getKakaoAtPrice());
}
}
}
}else {
if(kakaoAtPrice < 1) { //협의 단가가 없으면 시스템 단가로 지정
kakaoAtPrice = sysJoinSetVO.getKakaoAtPrice();
kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
}else {
kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
kakaoVO.setKakaoAtPrice(mberManageVO.getKakaoAtPrice());
}
}
/** 전송인원 확인*/
int totCallCnt = kakaoVO.getCallToList().length;
Float kakaoTotPrice = totCallCnt * kakaoAtPrice; // 총결제 금액 = 총 전송수량 * 카카오 알림톡 단가
String totPrice = kakaoTotPrice.toString();
System.out.println("@@@@@@@ : "+kakaoTotPrice +" = "+totCallCnt+" * "+kakaoAtPrice);
kakaoVO.setEachPrice(kakaoAtPrice.toString());
kakaoVO.setBefCash(userMoney); // 고객 충전금액
kakaoVO.setBefPoint(userPoint); // 고객 충전 포인트
kakaoVO.setTotPrice(totPrice); // 총 카카오 전송 금액
return kakaoVO;
}
/**
* @methodName : selectSendPriceOfKakaoAtAndSmsAndMms
* @author : 이호영
* @date : 2023.03.02
* @description : 알림톡 / sms / mms 가격 불러오기
* @param String userID
* @return MberManageVO
* @throws Exception
*/
public MberManageVO selectSendPriceOfKakaoAtAndSmsAndMms(String userId) throws Exception {
//1.시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
//2.사용자 개인 단가 정보 불러오기
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
// kakao 단가
// 사용자 개인 단가가 없으면 시스템 단가로
if(mberManageVO.getKakaoAtPrice() == 0.0f)
mberManageVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
// SMS 인경우
// 사용자 개인 단가가 없으면 시스템 단가로
if(mberManageVO.getShortPrice() == 0.0f)
mberManageVO.setShortPrice(sysJoinSetVO.getShortPrice());
// // MMS 인경우
// 사용자 개인 단가가 없으면 시스템 단가로
if(mberManageVO.getLongPrice() == 0.0f)
mberManageVO.setLongPrice(sysJoinSetVO.getLongPrice());
return mberManageVO;
}
/**
* @Method Name : kakaoSendMsg
* @작성일 : 2023. 2. 14.
* @작성자 : WYH
* @Method 설명 : 카카오톡 전송 메세지 설정
*/
public KakaoVO kakaoSendMsg(KakaoVO kakaoVO) throws Exception {
List<KakaoVO> kakaoSendList = new ArrayList<KakaoVO>();
//전체 받는사람 수량만큼 반복 확인
int callToCnt = kakaoVO.getCallToList().length;
try {
for(int count =0; count < callToCnt; count++) {
KakaoVO setSendMsgVO = new KakaoVO();
setSendMsgVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
// 카카오 전송내용 설정
// 변환문자 포함(Y), 미포함(N)
if(kakaoVO.getTxtReplYn().equals("Y")) {
String templateContent = kakaoSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, count);
setSendMsgVO.setTemplateContent(templateContent);
if(kakaoVO.getTemplateEmphasizeType().equals("TEXT")) {
String title = kakaoSubMagTxtRepl(kakaoVO.getTemplateTitle(), kakaoVO, count);
String subTitle = kakaoVO.getTemplateSubtitle();
// title = title +"§§"+ subTitle;
setSendMsgVO.setTemplateEmphasizeType(kakaoVO.getTemplateEmphasizeType());
setSendMsgVO.setTemplateTitle(title);
}
}else {
if(kakaoVO.getTemplateEmphasizeType().equals("TEXT")) {
String title = kakaoSubMagTxtRepl(kakaoVO.getTemplateTitle(), kakaoVO, count);
String subTitle = kakaoVO.getTemplateSubtitle();
// title = title +"§§"+ subTitle;
setSendMsgVO.setTemplateEmphasizeType(kakaoVO.getTemplateEmphasizeType());
setSendMsgVO.setTemplateTitle(title);
}
// 템플릿 내용 설정
setSendMsgVO.setTemplateContent(kakaoVO.getTemplateContent());
}
//대체문자 포함(Y), 미포함(N)
if(kakaoVO.getSubMsgSendYn().equals("Y")) {
String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
kakaoVO.setKakaoSubMagOrgnlTxt(tempSubMagTxt);
if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
tempSubMagTxt = kakaoSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
}
setSendMsgVO.setSubMsgTxt(tempSubMagTxt);
int FrBytes = tempSubMagTxt.getBytes(charset).length;
//메세지 길이가 90Byte가 초과시 MMS
if(FrBytes > 90) {
setSendMsgVO.setSubMsgType("MMS");
}else {// 아니면 SMS
setSendMsgVO.setSubMsgType("SMS");
}
}
if(kakaoVO.getBizJsonYn().equals("Y")) {
kakaoVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
String[] varValInfo = null;
if( kakaoVO.getVarValList().size() != 0) {
varValInfo = kakaoVO.getVarValList().get(count);
}
String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, varValInfo);
// String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, kakaoVO.getVarValList().get(count));
setSendMsgVO.setBizJsonName(jsonFileName); //json 파일명
}
kakaoSendList.add(setSendMsgVO);
}
kakaoVO.setKakaoSendList(kakaoSendList);
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
}
return kakaoVO;
}
public String kakaoSendMsgTest(KakaoVO kakaoVO) throws Exception {
String templateContent = "";
try {
templateContent = kakaoSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, 0);
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
}
return templateContent;
}
public String kakaoSubMagTxtRepl(String tempSubMagTxt, KakaoVO kakaoVO, int count) {
// String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
// String tempSubMagTxt = msgTxt;
//대체문자에 변환문자가 있는경우
String[] varNm = new String[kakaoVO.getVarNmList().size()];
int q=0;
if(varNm.length != 0) {
for(String temp : kakaoVO.getVarNmList()) {
temp = temp.replaceAll("\\#\\{" , "§§");
temp = temp.replaceAll("\\}" , "§");
varNm[q] = temp;
q++;
}
List<String[]> varValList = kakaoVO.getVarValList(); // value 값
tempSubMagTxt = tempSubMagTxt.replaceAll(String.valueOf((char)13), "");
tempSubMagTxt = tempSubMagTxt.replaceAll("\\#\\{" , "§§");
tempSubMagTxt = tempSubMagTxt.replaceAll("\\}" , "§");
String[] array = varValList.get(count)[0].split("§");
for(int i=0; i < varNm.length; i++) {
if (tempSubMagTxt.indexOf(varNm[i]) > -1) {
if(array[i] != null) {
System.out.println("as : "+varNm[i] +" : "+ StringUtil.getString(array[i]).replace('Ï', ','));
tempSubMagTxt = tempSubMagTxt.replaceAll(varNm[i] , StringUtil.getString(array[i]).replace('Ï', ','));
System.out.println(varNm[i] +" : "+ array[i].replace('Ï', ','));
}else {
tempSubMagTxt = tempSubMagTxt.replaceAll(varNm[i] , "");
}
}
}
}
return tempSubMagTxt;
}
}