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.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import itn.com.cmm.MjonFTSendVO;
import itn.com.cmm.MjonMsgSendVO;
import itn.com.cmm.util.MsgSendUtils;
import itn.com.cmm.util.StringUtil;
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave;
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
import itn.let.kakao.user.kakaoAt.service.impl.KakaoAlimTalkDAO;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msg.service.impl.MjonMsgDAO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.spammsg.web.ComGetSpamStringParser;
import itn.let.module.base.PriceAndPoint;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
public class KakaoSendUtil {
@Autowired
KakaoApiJsonSave kakaoApiJsonSave;
@Resource(name="kakaoAlimTalkDAO")
private KakaoAlimTalkDAO kakaoAlimTalkDAO;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
@Resource(name = "mjonMsgDAO")
private MjonMsgDAO mjonMsgDAO;
@Autowired
KakaoApiTemplate kakaoApiTemplate;
@Autowired
private PriceAndPoint priceAndPoint;
@Autowired
private MjonCommon mjonCommon;
// ํด๋์ค ์์ค์์ ์ ์ Pattern ์ ์ (์ฑ๋ฅ ์ต์ ํ)
private static final Pattern REPLACEMENT_PATTERN = Pattern.compile("#\\{[^}]+\\}");
private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
// ๋จ๋ฌธ ๋ฉ์ธ์ง ํ์
public static final String SHORT_MSG_TYPE = "SMS";
// ์ฅ๋ฌธ ๋ฉ์ธ์ง ํ์
public static final String LONG_MSG_TYPE = "MMS";
/**
* @methodName : populateSendLists _advc
* @author : ์ดํธ์
* @date : 2025. 3. 7.
* @description : ๊ธฐ์กด kakaoSendPrice ๊ฐ์
* @return : KakaoVO
* @param kakaoVO
* @param statusResponse
* @return
* @throws Exception
*
*/
public List<KakaoSendAdvcVO> populateSendLists(KakaoVO kakaoVO, boolean isNotified, StatusResponse statusResponse) throws Exception {
//์ฌ์ฉ์ ํ์ฌ ๋ณด์ ๊ธ์ก ๋ถ๋ฌ์ค๊ธฐ(๋ฌธ์ ๋ฐ์ก ๊ธ์ก ์ฐจ๊ฐ ์ด์ ๊ธ์ก)
// String befCash = kakaoVO.getBefCash();
List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>();
Calendar calendar = setupBaseDate(kakaoVO, isNotified);
KakaoReturnVO templateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
String templateContent = templateDetail.getTemplateContent(); // ์๋ฆผํก ํ
ํ๋ฆฟ
kakaoVO.setTemplateContent(templateContent);
String templateTitle = templateDetail.getTemplateTitle();
// log.info(" + templateDetail :: [{}]", templateDetail);
// templateDetail.getButtonList().forEach(t->log.info(" + ButtonList :: [{}]", t.toString()));
// API์ธ์ง ํ์ธํ๋ Boolean
Boolean isApiData = "A".equals(kakaoVO.getSendKind());
Boolean hasContentReplacement = this.replBooleanStrChecker(templateContent);
Boolean hasTitleReplacement = this.replBooleanStrChecker(templateTitle);
Boolean hasButtonReplacement = this.needsButtonReplacement(templateDetail.getButtonList());
/** @jsonStr ํ์์ ๋ฌด */
boolean hasTitleOrButtons = StringUtils.isNotEmpty(templateTitle)
|| CollectionUtils.isNotEmpty(templateDetail.getButtonList())
|| "IMAGE".equalsIgnoreCase(templateDetail.getTemplateEmphasizeType()); // ํ
ํ๋ฆฟ ๊ฐ์กฐ ์ ํ ์ด๋ฏธ์ง ์ ํ์ ์๊ธฐ ์ํด ์ถ๊ฐ
/** @jsonStr ๋ฐ๋ณต์ ๋ฌด */
boolean needsJsonReplacement = hasTitleReplacement || hasButtonReplacement;
String sharedJsonStr = null;
String subMsgTxt = kakaoVO.getSubMsgTxt(); // ์คํจ ๋์ฒด ๋ฌธ์
// ์์คํ
๊ธฐ๋ณธ ๋จ๊ฐ ์ ๋ณด ๋ถ๋ฌ์ค๊ธฐ
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
// ์ฌ์ฉ์ ๊ฐ์ธ ๋จ๊ฐ ์ ๋ณด ๋ถ๋ฌ์ค๊ธฐ
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
kakaoVO.setAtSmishingYn(mberManageVO.getAtSmishingYn());
float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
float kakaoAtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice());
String shortPStr = Float.toString(shortPrice);
String mmsPStr = Float.toString(longPrice);
String kakaoAtPStr = Float.toString(kakaoAtPrice);
/** @MSGID KEY๊ฐ */
List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getVarListMap().size());
// for (int i = 0; i < kakaoSendAdvcListVO.size(); i++) {
// kakaoSendAdvcListVO.get(i).setMsgId(idList.get(i));
// kakaoSendAdvcListVO.get(i).setBizJsonName(idList.get(i));
// }
String templateEmphasizeType = kakaoVO.getTemplateEmphasizeType();
// ๋ถํ ๊ฑด์ ์นด์ดํฐ
int counter = 0;
/** @Map์ ์ด ๊ฐฏ์๊ฐ ์์ ์ ๊ฐฏ์์ ๋์ผํจ */
List<Map<String, String>> varList = kakaoVO.getVarListMap();
for (int i = 0; i < varList.size(); i++) {
// for(Map<String, String> variables : kakaoVO.getVarListMap()) {
// ์นํ ๋ฐ์ดํฐ
Map<String, String> variables = varList.get(i);
log.info("");
/** @๊ณตํต ๊ธฐ๋ณธ๊ฐ */
KakaoSendAdvcVO sendVO = createATSendVO(kakaoVO);
// ๊ณตํต ๊ฐ๊ฒฉ ์ค์
sendVO.setSmsPrice(shortPStr);
sendVO.setMmsPrice(mmsPStr);
sendVO.setKakaoAtPrice(kakaoAtPStr);
String msgId = idList.get(i);
sendVO.setMsgId(msgId);
// step1
// Step 1-1: ๊ฐ ์นํ ๋ฐ ์์ ๋ฒํธ ์
ํ
// Step 1-2: ์์ ์ ์ ๋ณด ์ค์ (callToList๋ ํญ์ ์ค์ ).
if (variables.containsKey("callToList")) {
sendVO.setCallTo(variables.get("callToList"));
variables.remove("callToList"); // ์ฌ์ฉ ํ ์ ๊ฑฐ.
}
/** @Step1-3: ํ
ํ๋ฆฟ ์นํ๋ฐ์ดํฐ ์ค์ */
String templateContentTemp = templateContent;
String templateTitleTemp = templateTitle;
// api๊ฐ ์๋๋ฉด
if(!isApiData) {
if (hasContentReplacement) {
templateContentTemp = mjonCommon.ATReplaceTemplateVariables(templateContent, variables);
if(hasTitleReplacement) {
templateTitleTemp = mjonCommon.ATReplaceTemplateVariables(templateTitle, variables);
}
}
}else {
templateContentTemp = variables.get("templateContent");
templateTitleTemp = variables.get("templateTitle");
}
/** @๋ฒํผ ์นํ */ // ๋ฒํผ ๋ฆฌ์คํธ๊ฐ ์์ผ๋ฉด ์นํ ์ํ, ํญ์ sendVO์ ์ค์
List<KakaoButtonVO> buttonList = templateDetail.getButtonList();
if(hasButtonReplacement) {
buttonList = replaceButtonLinks(buttonList, variables);
}
sendVO.setButtonList(buttonList);
sendVO.setTemplateTitle(templateTitleTemp);
sendVO.setTemplateContent(templateContentTemp);
String subMsgTxtTemp = subMsgTxt;
// Step 1-4: ์คํจ ๋์ฒด ๋ฌธ์ ์นํ๋ฐ์ดํฐ ์ค์
if("Y".equals(kakaoVO.getSubMsgSendYn())) { // ๋์ฒด๋ฌธ์๊ฐ ์๋?
// api๊ฐ ์๋๋ฉด
if(!isApiData) {
if ("Y".equals(kakaoVO.getSubMsgTxtReplYn())) { // ์นํ๋ฐ์ดํฐ๊ฐ ์๋?
subMsgTxtTemp = mjonCommon.ATReplaceTemplateVariables(subMsgTxt, variables);
}
}else {
subMsgTxtTemp = variables.get("subMsgTxt");
}
sendVO.setSubMsgTxt(subMsgTxtTemp);// ์คํจ
}
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
if("Y".equals(kakaoVO.getSubMsgSendYn())) {
int smsTxtByte = mjonCommon.getSmsTxtBytes(sendVO.getSubMsgTxt());
String sendType = getMsgType(smsTxtByte);
sendVO.setSubMsgType(sendType);
if ("INVALID".equals(sendType)) {
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "์ ์ก ๋ฌธ์ ๊ธธ์ด๋ฅผ ์ด๊ณผํ์์ต๋๋ค.");return kakaoSendAdvcListVO;
StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "์ ์ก ๋ฌธ์ ๊ธธ์ด๋ฅผ ์ด๊ณผํ์์ต๋๋ค.", "STAT_1080");return kakaoSendAdvcListVO;
}
boolean isMms = "MMS".equals(sendType);
sendVO.setEachPrice(isMms ? mmsPStr : shortPStr);
} else {
sendVO.setEachPrice(kakaoAtPStr);
}
// step4
// ์์ฝ ์๊ฐ ์ค์ ๋ฐ ๋ถํ ๋ฐ์ดํฐ ์ค์
if ("Y".equalsIgnoreCase(kakaoVO.getReserveYn())
&& "Y".equalsIgnoreCase(kakaoVO.getDivideChk())
&& counter == Integer.parseInt(kakaoVO.getDivideCnt()))
{
counter = 0;
calendar.add(Calendar.MINUTE, Integer.parseInt(kakaoVO.getDivideTime()));
}
counter++;
// ์ฆ์ ๋ฐ์ก์ธ๊ฒฝ์ฐ ํ์ฌ ์๊ฐ
// ์์ฝ์ธ ๊ฒฝ์ฐ ์์ ์ค์ ํ ์๊ฐ ์
๋ ฅ
sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime()));
/** @step5 ์ ์ก ๋ฉ์ธ์ง ์ค์ jsonํ์ผ ๋ง๋ค๊ธฐ*/
// ํ์ดํ๊ณผ ๋ฒํผ์ด ์๊ณ
if(hasTitleOrButtons) {
// ๋ฒํผ๊ณผ ํ์ดํ์ ์นํ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด json String์ ๊ณ์ ์์ฑ
if(needsJsonReplacement) {
sharedJsonStr = kakaoApiJsonSave.kakaoApiJsonSave_advc(sendVO, templateDetail);
sendVO.setBizJsonName(msgId);
sendVO.setJsonStr(sharedJsonStr);
} else if (StringUtils.isEmpty(sharedJsonStr)) {
// ์นํ ๋ฐ์ดํฐ๊ฐ ์๊ณ ์์ง ์์ฑ๋์ง ์์์ผ๋ฉด ํ ๋ฒ๋ง ์์ฑ
sharedJsonStr = kakaoApiJsonSave.kakaoApiJsonSave_advc(sendVO, templateDetail);
sendVO.setBizJsonName(idList.get(0));
sendVO.setJsonStr(sharedJsonStr);
}else {
sendVO.setBizJsonName(idList.get(0));
}
}
log.info(" sendVO :: [{}]", sendVO);
kakaoSendAdvcListVO.add(sendVO);
}
return kakaoSendAdvcListVO;
}
/**
* @methodName : populateSendListsFT
* @author : ์ดํธ์
* @date : 2025. 4. 18.
* @description :
* @return : List<KakaoSendAdvcVO>
* @param kakaoVO
* @param isHolidayNotified
* @param statusResponse
* @return
* @throws Exception
*
*/
public List<KakaoSendAdvcVO> populateSendListsFT(KakaoVO kakaoVO
, boolean isHolidayNotified
, StatusResponse statusResponse
, UserManageVO userManageVO
, List<String> resultSpamTxt
) throws Exception {
//์ฌ์ฉ์ ํ์ฌ ๋ณด์ ๊ธ์ก ๋ถ๋ฌ์ค๊ธฐ(๋ฌธ์ ๋ฐ์ก ๊ธ์ก ์ฐจ๊ฐ ์ด์ ๊ธ์ก)
// String befCash = kakaoVO.getBefCash();
log.info("kakaoVO.ftToString() :: [{}]", kakaoVO.ftToString());
// ์์ฝ ์๊ฐ ๊ธฐ๋ณธ๊ฐ ์ค์
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String atSmishingYn = userManageVO.getAtSmishingYn();
String exceptSpamYn = userManageVO.getExceptSpamYn();
List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>();
Calendar calendar = setupBaseDateFT(kakaoVO);
// ์น๊ตฌํก ๋ด์ฉ
String templateContent = kakaoVO.getTemplateContent();
// ์คํจ ๋์ฒด ๋ฌธ์
String subMsgTxt = kakaoVO.getSubMsgTxt();
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";
}
}
// ์ฌ์ฉ์ ๊ฐ์ธ ๋จ๊ฐ ์ ๋ณด ๋ถ๋ฌ์ค๊ธฐ
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
// ์์คํ
๊ธฐ๋ณธ ๋จ๊ฐ ์ ๋ณด ๋ถ๋ฌ์ค๊ธฐ
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
kakaoVO.setAtSmishingYn(mberManageVO.getAtSmishingYn());
// ์นํ ๋ฌธ๊ตฌ๊ฐ ์๋์ง ํ์ธ
Boolean replaceYN = MsgSendUtils.getReplaceYN(templateContent);
Boolean replaceSubYN = MsgSendUtils.getReplaceYN(subMsgTxt);
/** @MSGID KEY๊ฐ */
List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getMjonFTSendVOList().size());
Map<String, Function<MjonFTSendVO, String>> placeholders = new HashMap<>();
placeholders.put("[*์ด๋ฆ*]", MjonFTSendVO::getName);
placeholders.put("[*1*]", MjonFTSendVO::getRep1);
placeholders.put("[*2*]", MjonFTSendVO::getRep2);
placeholders.put("[*3*]", MjonFTSendVO::getRep3);
placeholders.put("[*4*]", MjonFTSendVO::getRep4);
String imageType = kakaoVO.getImageType();
// ๊ฐ์ธ๋จ๊ฐ
Float kakaoMemberFtPrice =
imageType == null ? mberManageVO.getKakaoFtPrice() :
"I".equals(imageType) ? mberManageVO.getKakaoFtImgPrice() :
"W".equals(imageType) ? mberManageVO.getKakaoFtWideImgPrice() :
mberManageVO.getKakaoFtPrice();
// ์์คํ
๋จ๊ฐ
Float kakaoSysJoinFtPrice =
imageType == null ? sysJoinSetVO.getKakaoFtPrice() :
"I".equals(imageType) ? sysJoinSetVO.getKakaoFtImgPrice() :
"W".equals(imageType) ? sysJoinSetVO.getKakaoFtWideImgPrice() :
sysJoinSetVO.getKakaoFtPrice();
Float kakaoFtPrice =
getValidPrice(kakaoMemberFtPrice, kakaoSysJoinFtPrice);
// ๋์ฒด๋ฌธ์๊ฐ ์์๊ฒฝ์ฐ ์ฌ์ฉ
float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
float picturePrice = getValidPrice(mberManageVO.getPicturePrice(), sysJoinSetVO.getPicturePrice());
boolean hasPerformedSpamCheck = false; // ์นํ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ, ์คํธ ์ฒดํฌ๊ฐ ํ ๋ฒ๋ง ์ํ๋๋๋ก ์ ์ด
boolean hasPerformedSubSpamCheck = false; // ์นํ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ, ์คํธ ์ฒดํฌ๊ฐ ํ ๋ฒ๋ง ์ํ๋๋๋ก ์ ์ด
boolean hasPerformedMsgType = false; // ์นํ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ฉ์ธ์ง ํ์
์ฒดํฌ ํ๋ฒ
boolean hasPerformedDelayYn = false; // ์นํ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ,
String imgFilePath = "";
if(StringUtils.isNotEmpty(kakaoVO.getAtchFileId()) &&
("I".equals(imageType) || "W".equals(imageType))) {
imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(kakaoVO.getAtchFileId());
}
/** @jsonStr ํ์์ ๋ฌด */
boolean hasButtons = CollectionUtils.isNotEmpty(kakaoVO.getButtonVOList());
String sharedJsonStr = null;
// ์นํ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ํ ๋ฒ๋ง ๊ณ์ฐํ๊ธฐ ์ํ ์บ์ ๋ณ์ ์ถ๊ฐ
Map<String, Object> sharedPricingResult = null;
// ์นํ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ for๋ฌธ ์ ์ ํ ๋ฒ๋ง ๊ณ์ฐ
if (!replaceSubYN && StringUtils.isNotEmpty(subMsgTxt)) {
sharedPricingResult = calculateSubMsgPricing(subMsgTxt, imgFilePath, shortPrice, longPrice, picturePrice, kakaoFtPrice);
// ์ฌ์ ๊ณ์ฐ์์ INVALID์ธ ๊ฒฝ์ฐ ์ฆ์ ๋ฆฌํด
String preSendType = (String) sharedPricingResult.get("sendType");
if ("INVALID".equals(preSendType)) {
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "์ ์ก ๋ฌธ์ ๊ธธ์ด๋ฅผ ์ด๊ณผํ์์ต๋๋ค.");
return kakaoSendAdvcListVO;
}
}
List<MjonFTSendVO> mjonFTSendVOList = kakaoVO.getMjonFTSendVOList();
for (int i = 0; i < mjonFTSendVOList.size(); i++) {
MjonFTSendVO mjonFTSendVO = mjonFTSendVOList.get(i);
KakaoSendAdvcVO sendVO = createFTSendVO(kakaoVO, calendar);
// ๊ณตํต ๊ฐ๊ฒฉ ์ค์
sendVO.setSmsPrice(Float.toString(shortPrice));
sendVO.setMmsPrice(Float.toString(longPrice));
sendVO.setPicturePrice(Float.toString(picturePrice));
sendVO.setCallTo(mjonFTSendVO.getPhone());
sendVO.setMsgId(idList.get(i));
// ์น๊ตฌํก ๋ฌธ์
String templateContentTemp = templateContent;
// ์นํ ๋ฌธ์๋ฉด
if(replaceYN) {
// ๊ฐ ์นํ ๊ตฌ๋ฌธ์ ํ์ธํ๊ณ ์นํํ ๊ฐ์ด ์์ผ๋ฉด ์ค๋ฅ ๋ฐํ
for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
String placeholder = entry.getKey();
String value = entry.getValue().apply(mjonFTSendVO);
if (templateContentTemp.contains(placeholder)) {
if (StringUtils.isEmpty(value)) {
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "์นํ ๋ฌธ๊ตฌ์ค " + placeholder + " ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.");
return null;
}
templateContentTemp = templateContentTemp.replace(placeholder, value);
}
}
}
sendVO.setTemplateContent(templateContentTemp);
// ์คํจ ๋์ฒด ๋ฌธ์
String subMsgTxtTemp = null;
if(StringUtils.isNotEmpty(subMsgTxt)) {
subMsgTxtTemp = subMsgTxt;
if(replaceSubYN) {
// ๊ฐ ์นํ ๊ตฌ๋ฌธ์ ํ์ธํ๊ณ ์นํํ ๊ฐ์ด ์์ผ๋ฉด ์ค๋ฅ ๋ฐํ
for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
String placeholder = entry.getKey();
String value = entry.getValue().apply(mjonFTSendVO);
if (subMsgTxtTemp.contains(placeholder)) {
if (StringUtils.isEmpty(value)) {
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "์นํ ๋ฌธ๊ตฌ์ค " + placeholder + " ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.");
return null;
}
subMsgTxtTemp = subMsgTxtTemp.replace(placeholder, value);
}
}
}
}
sendVO.setSubMsgTxt(subMsgTxtTemp);
//๋์ฒด๋ฌธ์๊ฐ ์์ผ๋ฉด
// Step 1-4: ์คํจ ๋์ฒด ๋ฌธ์ ์นํ๋ฐ์ดํฐ ์ค์
if(StringUtils.isNotEmpty(subMsgTxtTemp)) { // ๋์ฒด๋ฌธ์๊ฐ ์๋?
// ์ต์ ํ๋ ๊ณ์ฐ ๋ก์ง
Map<String, Object> pricingResult;
if (replaceSubYN) {
// ์นํ๋ฐ์ดํฐ ์์ โ ๋งค๋ฒ ์๋ก ๊ณ์ฐ
pricingResult = calculateSubMsgPricing(subMsgTxtTemp, imgFilePath,
shortPrice, longPrice, picturePrice, kakaoFtPrice);
// INVALID ์ฒดํฌ
String resultSendType = (String) pricingResult.get("sendType");
if ("INVALID".equals(resultSendType)) {
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "์ ์ก ๋ฌธ์ ๊ธธ์ด๋ฅผ ์ด๊ณผํ์์ต๋๋ค.");
return kakaoSendAdvcListVO;
}
} else {
// ์นํ๋ฐ์ดํฐ ์์ โ ๋ฏธ๋ฆฌ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ ์ฌ์ฌ์ฉ
pricingResult = sharedPricingResult;
}
// ๊ฒฐ๊ณผ ์ ์ฉ
applyPricingResult(sendVO, pricingResult);
}else {
// ๋์ฒด๋ฌธ์๊ฐ ์์ผ๋ฉด ์นด์นด์คํก ๋จ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉ
sendVO.setEachPrice( Float.toString(kakaoFtPrice) );
}
// ์คํธ ๋จ์ด ์ฒดํฌ
// exceptSpam๋ ์ฌ์ฉ์ ์คํธ ๋จ์ด ์ฒดํฌํ ๊ฑด์ง์ ๋ํ ์ฌ๋ถ N : ์ฒดํฌ
if("N".equals(exceptSpamYn)) {
// ์น๊ตฌํก ๋ด์ฉ
if(replaceYN) {
checkSpamAndSetStatus(kakaoVO
, templateContentTemp
, resultSpamTxt, isHolidayNotified);
}else if(!hasPerformedSpamCheck) {
checkSpamAndSetStatus(kakaoVO
, templateContentTemp
, resultSpamTxt, isHolidayNotified);
hasPerformedSpamCheck = true;
}
// ๋์ฒด๋ฌธ์ ๋ด์ฉ
if(StringUtils.isNotEmpty(subMsgTxtTemp)) {
if(replaceSubYN) {
checkSpamAndSetStatus(kakaoVO
, subMsgTxtTemp
, resultSpamTxt, isHolidayNotified);
}else if(!hasPerformedSubSpamCheck) {
checkSpamAndSetStatus(kakaoVO
, subMsgTxtTemp
, resultSpamTxt, isHolidayNotified);
hasPerformedSubSpamCheck = true;
}
}
}
log.info(" kakaoVO.toString() :: [{}]",kakaoVO.ftToString());
/* @isHolidayNotified
* - ๊ด๋ฆฌ์ ์๋ฆผ ์ค์ ์ผ๋ก ์ธํด
* - ํด๋น ์๊ฐ์ด๋ฉด ์ง์ฐ ๋ฏธ์ฒ๋ฆฌ
* @smishingYn
* - ํ์ ๋ณ '์ค๋ฏธ์ฑ ์จ' ์ํ๊ฐ
* - Y๋ฉด ์๋ฆผ, ์ง์ฐ ์ฒ๋ฆฌํด์ผ ํจ
* */
if("Y".equalsIgnoreCase(atSmishingYn) && isHolidayNotified) {
kakaoVO.setSpamStatus("Y");
kakaoVO.setSmishingYn("Y");
kakaoVO.setAtDelayYn("Y");
}
// ์ง์ฐ ์ฌ๋ถ ์ฒ๋ฆฌ
if (( "Y".equalsIgnoreCase(atSmishingYn) || "Y".equalsIgnoreCase(kakaoVO.getAtDelayYn()))
&& !hasPerformedDelayYn && isHolidayNotified) {
calendar.add(Calendar.MINUTE, 30); // ๋ชจ๋ ์๊ฐ์ 30๋ถ ๋ค๋ก ๋ฏธ๋ฃธ
// TEST
// calendar.add(Calendar.MINUTE, 5); // ๋ชจ๋ ์๊ฐ์ 30๋ถ ๋ค๋ก ๋ฏธ๋ฃธ
hasPerformedDelayYn = true;
}
sendVO.setReqDate(sdf.format(calendar.getTime())); // ๋ถํ ๋ ์๊ฐ ์ค์ ๋๋ ๊ธฐ๋ณธ ์์ฝ ์๊ฐ ์ฌ์ฉ
// ํ์ดํ์ด๋ ๋ฒํผ์ด ์๊ณ
if(hasButtons || StringUtils.isNotEmpty(kakaoVO.getTemplateImageUrl())) {
//
if (StringUtils.isEmpty(sharedJsonStr)) {
// ์นํ ๋ฐ์ดํฐ๊ฐ ์๊ณ ์์ง ์์ฑ๋์ง ์์์ผ๋ฉด ํ ๋ฒ๋ง ์์ฑ
sharedJsonStr = kakaoApiJsonSave.kakaoApiFTJsonSave_advc(kakaoVO);
sendVO.setJsonStr(sharedJsonStr);
}
sendVO.setBizJsonName(idList.get(0));
}
kakaoSendAdvcListVO.add(sendVO);
log.info(" sendVO.toString() :: [{}]",sendVO.toString());
}
return kakaoSendAdvcListVO;
}
private void checkSpamAndSetStatus(KakaoVO kakaoVO
, String chkText
, List<String> resultSpamTxt, boolean isHolidayNotified) throws Exception {
// TODO Auto-generated method stub
kakaoVO.setSpamStatus("N");
kakaoVO.setAtDelayYn("N");
if(StringUtils.isNotEmpty(chkText)) {
String resultParser = ComGetSpamStringParser.getSpamTextParse(chkText).trim();
int spmCnt = 0;
String spmFilterTxt = "";
for (String spmTxt : resultSpamTxt) {
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
if (resultParser.contains(parserStr) || chkText.contains(parserStr)) {
spmCnt++;
spmFilterTxt += spmTxt + ",";
}
}
if (spmCnt > 0) { // ์คํธ ๋ฌธ์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ
if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
// ์ฒ์๋ถํฐ idx ๋งํผ ์๋ผ๋ธ ๋๋จธ์ง ๊ธ์
spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1);
}
/* @isHolidayNotified
* - ๊ด๋ฆฌ์ ์๋ฆผ ์ค์ ์ผ๋ก ์ธํด
* - ํด๋น ์๊ฐ์ด๋ฉด ์ง์ฐ ๋ฏธ์ฒ๋ฆฌ
* */
kakaoVO.setSpamStatus("Y");
if(isHolidayNotified) {
kakaoVO.setAtDelayYn("Y");
}
}
}
}
// TODO(human): ์๋์ ์๋ก์ด ๋ฉ์๋ ๊ตฌํ
/**
* ๋์ฒด๋ฌธ์ ๊ฐ๊ฒฉ ๊ณ์ฐ ์ต์ ํ ๋ฉ์๋
* @param subMsgTxt ๋์ฒด๋ฌธ์ ๋ด์ฉ
* @param imgFilePath ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
* @param shortPrice ๋จ๋ฌธ ๊ฐ๊ฒฉ
* @param longPrice ์ฅ๋ฌธ ๊ฐ๊ฒฉ
* @param picturePrice ์ฌ์ง ๊ฐ๊ฒฉ
* @param kakaoFtPrice ์นด์นด์ค ์น๊ตฌํก ๊ฐ๊ฒฉ
* @return ๊ณ์ฐ ๊ฒฐ๊ณผ Map (sendType, chosenPrice, filePath ํฌํจ)
* @throws UnsupportedEncodingException
*/
private Map<String, Object> calculateSubMsgPricing(String subMsgTxt, String imgFilePath,
float shortPrice, float longPrice,
float picturePrice, float kakaoFtPrice) throws UnsupportedEncodingException {
Map<String, Object> result = new HashMap<>();
String sendType = "MMS";
if(StringUtils.isEmpty(imgFilePath)) {
int smsTxtByte = mjonCommon.getSmsTxtBytes(subMsgTxt);
sendType = getMsgType(smsTxtByte);
}
result.put("sendType", sendType);
// INVALID์ธ ๊ฒฝ์ฐ ์ถ๊ฐ ์ฒ๋ฆฌ ์์ด ๋ฐํ
if ("INVALID".equals(sendType)) {
return result;
}
float chosenPrice = 0f;
if(StringUtils.isNotEmpty(imgFilePath)) {
chosenPrice = Math.max(picturePrice, kakaoFtPrice);
result.put("filePath", imgFilePath);
} else if ("MMS".equals(sendType)) {
chosenPrice = Math.max(longPrice, kakaoFtPrice);
} else {
chosenPrice = Math.max(shortPrice, kakaoFtPrice);
}
result.put("sendType", sendType);
result.put("chosenPrice", Float.toString(chosenPrice));
return result;
}
/**
* ๊ฐ๊ฒฉ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ sendVO์ ์ ์ฉํ๋ ํฌํผ ๋ฉ์๋
* @param sendVO ์ ์ฉํ KakaoSendAdvcVO ๊ฐ์ฒด
* @param pricingResult ๊ฐ๊ฒฉ ๊ณ์ฐ ๊ฒฐ๊ณผ Map
*/
private void applyPricingResult(KakaoSendAdvcVO sendVO, Map<String, Object> pricingResult) {
sendVO.setSubMsgType((String) pricingResult.get("sendType"));
sendVO.setEachPrice((String) pricingResult.get("chosenPrice"));
if (pricingResult.get("filePath") != null) {
sendVO.setFilePath1((String) pricingResult.get("filePath"));
sendVO.setFileCnt("1");
}
}
public static String getMsgTypeWithByteValidation(MjonFTSendVO sendVO, String p_smsTxt) throws UnsupportedEncodingException {
// // ๋ด๋ฌธ์์ ์ฅํจ์ ์ ์ฅ ํ ๋ฌธ์๋ฅผ ๋ฐ์กํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ํ์
์ด ์ซ์๊ฐ ์๋ ๋ฌธ์๋ก ๋์ด์์ ๋ณ๊ฒฝ ์ฒ๋ฆฌํจ
// if ("P".equals(msgType) || "L".equals(msgType)) {
// msgType = "6";
// } else if ("S".equals(msgType)) {
// msgType = "4";
// }
int smsTxtByte = MjonCommon.getSmsTxtBytes(p_smsTxt);
String msgType = SHORT_MSG_TYPE;
// 1. 2000 Byte ์ด๊ณผ๋ ์๋ฌ ์ฒ๋ฆฌ
if (smsTxtByte > 2000) {
return "INVALID";
}
// 2. ์ฒจ๋ถํ์ผ ์ฌ๋ถ ํ์ธ (์ฒจ๋ถํ์ผ์ด ์์ผ๋ฉด ์ฅ๋ฌธ์ผ๋ก ์ค์ )
if (StringUtils.isNotEmpty(sendVO.getFilePath1())) {
msgType = LONG_MSG_TYPE;
}
// 3. ๋ฌธ์ ๊ธธ์ด์ ๋ฐ๋ผ ๋ฉ์์ง ํ์
์ค์ (90 Byte ์ด๊ณผ๋ ์ฅ๋ฌธ)
else if (smsTxtByte > 90) {
msgType = LONG_MSG_TYPE;
}
return msgType;
}
private Calendar setupBaseDateFT(KakaoVO kakaoVO) throws ParseException {
// baseDate ์ถ์ถ
Date baseDate = resolveBaseDate(kakaoVO);
// ์๊ฐ ์ฑ์
Calendar calendar = Calendar.getInstance();
calendar.setTime(baseDate); // calendar์ baseDate ์ค์
return calendar;
}
private Calendar setupBaseDate(KakaoVO kakaoVO, boolean isHolidayNotified) throws ParseException {
// baseDate ์ถ์ถ
Date baseDate = resolveBaseDate(kakaoVO);
// ์๊ฐ ์ฑ์
Calendar calendar = Calendar.getInstance();
calendar.setTime(baseDate); // calendar์ baseDate ์ค์
// ์ง์ฐ ์ฌ๋ถ ์ฒ๋ฆฌ
// ์๋ฆผํก ์ค๋ฏธ์ฑ์์ฌ + ๊ณตํด์ผ์๋ฆผ ์กฐ๊ฑด์ด ๋ง์ผ๋ฉด 30๋ถ delay
if ( "Y".equalsIgnoreCase(kakaoVO.getAtSmishingYn())
&& isHolidayNotified) {
calendar.add(Calendar.MINUTE, 30); // ๋ชจ๋ ์๊ฐ์ 30๋ถ ๋ค๋ก ๋ฏธ๋ฃธ
}
return calendar;
}
public Date resolveBaseDate(KakaoVO kakaoVO) throws ParseException {
Date now = new Date();
if (StringUtils.isEmpty(kakaoVO.getReqDate())) {
kakaoVO.setReqDate(DATE_FORMATTER.format(now));
return now;
}
return DATE_FORMATTER.parse(kakaoVO.getReqDate());
}
// 2. ์น๊ตฌํก ๋ฐ์ก ์ ํ ์๊ฐ์ธ์ง ํ์ธ
public boolean isRestrictedFriendTalkTime(Date baseDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(baseDate);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
// 20:50 ์ดํ ~ ์ต์ผ 08:00 ์ด์ ์ ์ ํ
if ((hour == 20 && minute >= 50) || hour > 20 || hour < 8) {
return true;
}
return false;
}
/**
* @methodName : createSendVO
* @author : ์ดํธ์
* @date : 2025. 3. 19.
* @description : populateSendLists ๋ฐ๋ณต์ ํ์ํ ๊ณตํต์์ฑ ๋ถ๋ถ
* @return : KakaoSendAdvcVO
* @param kakaoVO
* @return
*
*/
private KakaoSendAdvcVO createATSendVO(KakaoVO kakaoVO) {
KakaoSendAdvcVO sendVO = new KakaoSendAdvcVO();
sendVO.setMsgType("8");
sendVO.setAgentCode("04");
sendVO.setSenderKey(kakaoVO.getSenderKey());
sendVO.setTemplateCode(kakaoVO.getTemplateCode());
sendVO.setUserId(kakaoVO.getUserId());
sendVO.setCallFrom(kakaoVO.getCallFrom());
return sendVO;
}
/**
* @methodName : createFTSendVO
* @author : ์ดํธ์
* @date : 2025. 4. 23.
* @description :
* @return : KakaoSendAdvcVO
* @param kakaoVO
* @return
*
*/
private KakaoSendAdvcVO createFTSendVO(KakaoVO kakaoVO, Calendar calendar) {
KakaoSendAdvcVO sendVO = new KakaoSendAdvcVO();
sendVO.setMsgType("9"); // ์๋ฆผํก 8 ์น๊ตฌํก 9
sendVO.setAgentCode("04");
// ๋ฐ์ก์๊ฐ : ์น๊ตฌํก์ ๋ถํ ๋ฐ์ก์ด ์์ด ์ฒ์ vo ์์ฑ ์ ์
๋ ฅ
sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime()));
sendVO.setSenderKey(kakaoVO.getSenderKey());
// sendVO.setTemplateCode(kakaoVO.getTemplateCode());
sendVO.setUserId(kakaoVO.getUserId());
sendVO.setCallFrom(kakaoVO.getCallFrom());
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
sendVO.setAdFlag(kakaoVO.getAdFlag());
return sendVO;
}
private List<KakaoButtonVO> replaceButtonLinks(List<KakaoButtonVO> buttonList,
Map<String, String> variables) {
if (buttonList != null) {
for (KakaoButtonVO button : buttonList) {
// ๊ฐ ๋งํฌ ํ๋์ ๋ํด ์นํ ์ํ
if (button.getLinkAnd() != null) {
button.setLinkAnd(mjonCommon.ATReplaceTemplateVariables(button.getLinkAnd(), variables));
}
if (button.getLinkIos() != null) {
button.setLinkIos(mjonCommon.ATReplaceTemplateVariables(button.getLinkIos(), variables));
}
if (button.getLinkMo() != null) {
button.setLinkMo(mjonCommon.ATReplaceTemplateVariables(button.getLinkMo(), variables));
}
if (button.getLinkPc() != null) {
button.setLinkPc(mjonCommon.ATReplaceTemplateVariables(button.getLinkPc(), variables));
}
}
// ์นํ๋ ๋ฒํผ ๋ฆฌ์คํธ๋ฅผ sendVO์ ๋ฐ์
// sendVO.setButtonList(buttonList); // KakaoSendAdvcVO์ setButtonList๊ฐ ์๋ค๊ณ ๊ฐ์
}
return buttonList;
}
/**
* ๋ฒํผ ๋ฆฌ์คํธ์ ์นํ ํจํด(#{...})์ด ์๋์ง ํ์ธํฉ๋๋ค.
* @param buttonList ๋ฒํผ ๋ฆฌ์คํธ (null ๊ฐ๋ฅ)
* @return ์นํ ํจํด์ด ์์ผ๋ฉด true, ์์ผ๋ฉด false
*/
private boolean needsButtonReplacement(List<KakaoButtonVO> buttonList) {
if (buttonList == null) {
return false;
}
return buttonList.stream().anyMatch(button ->
replBooleanStrChecker(button.getLinkAnd()) ||
replBooleanStrChecker(button.getLinkIos()) ||
replBooleanStrChecker(button.getLinkMo()) ||
replBooleanStrChecker(button.getLinkPc())
);
}
/**
* ์
๋ ฅ ๋ฌธ์์ด์ ์นํ ํจํด(#{...})์ด ์๋์ง ํ์ธํฉ๋๋ค.
* @param input ํ์ธํ ๋ฌธ์์ด (null ๊ฐ๋ฅ)
* @return ์นํ ํจํด์ด ์์ผ๋ฉด true, ์์ผ๋ฉด false
*/
private boolean replBooleanStrChecker(String input) {
// #{...} ํจํด์ ํ์ธํ๋ ์ ๊ท ํํ์
if (input == null) {
return false;
}
Matcher matcher = REPLACEMENT_PATTERN.matcher(input);
return matcher.find();
}
public static Float getValidPrice(Float personalPrice, Float defaultPrice) {
return (personalPrice != null && personalPrice > 0) ? personalPrice : defaultPrice;
}
/**
* @methodName : getMsgType
* @author : ์ดํธ์
* @date : 2025. 3. 12.
* @description : ๋ฉ์ธ์ง ํ์
๊ตฌํ๊ธฐ
* @return : String
* @param smsTxtByte
* @return
*
*/
private String getMsgType(int smsTxtByte) {
// TODO Auto-generated method stub
String msgType = SHORT_MSG_TYPE;
// 1. 2000 Byte ์ด๊ณผ๋ ์๋ฌ ์ฒ๋ฆฌ
if (smsTxtByte > 2000) {
return "INVALID";
}
// 2. ๋ฌธ์ ๊ธธ์ด์ ๋ฐ๋ผ ๋ฉ์์ง ํ์
์ค์ (90 Byte ์ด๊ณผ๋ ์ฅ๋ฌธ)
if (smsTxtByte > 90) {
msgType = LONG_MSG_TYPE;
}
return msgType;
}
/**
* @Method Name : kakaoSendPrice
* @์์ฑ์ผ : 2023. 2. 14.
* @์์ฑ์ : WYH
* @Method ์ค๋ช
: ์นด์นด์ค ์ ์ก ๊ฐ๊ฒฉ ์ค์
*/
public KakaoVO kakaoSendPrice(KakaoVO kakaoVO) throws Exception {
System.out.println(" :: kakaoSendPrice :: ");
//์ฌ์ฉ์ ํ์ฌ ๋ณด์ ๊ธ์ก ๋ถ๋ฌ์ค๊ธฐ(๋ฌธ์ ๋ฐ์ก ๊ธ์ก ์ฐจ๊ฐ ์ด์ ๊ธ์ก)
// String befCash = kakaoVO.getBefCash();
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();
/** ๋์ฒด๋ฌธ์ ์ฌ๋ถ ์ฒดํฌ(์์ผ๋ฉด ๋์ฒด๋ฌธ์ ๊ฐ๊ฒฉ์ผ๋ก ์์ผ๋ฉด ์นด์นด์คํก ๊ฐ๊ฒฉ์ผ๋ก) */
//๋์ฒด๋ฌธ์ ๋ฐ์ก ์ฌ๋ถ ํ์ธ
System.out.println(" :: kakaoVO.getSubMsgSendYn() :: "+ kakaoVO.getSubMsgSendYn());
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;
}
/**
* @Method Name : kakaoFTSendPrice
* @์์ฑ์ผ : 2024. 1. 17.
* @์์ฑ์ : WYH
* @Method ์ค๋ช
: ์นด์นด์ค ์น๊ตฌํก ์ ์ก ๊ฐ๊ฒฉ ์ค์
*/
public KakaoVO kakaoFTSendPrice(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 kakaoFtPrice = mberManageVO.getKakaoFtPrice();
/** ๋์ฒด๋ฌธ์ ์ฌ๋ถ ์ฒดํฌ(์์ผ๋ฉด ๋์ฒด๋ฌธ์ ๊ฐ๊ฒฉ์ผ๋ก ์์ผ๋ฉด ์นด์นด์คํก ๊ฐ๊ฒฉ์ผ๋ก) */
//๋์ฒด๋ฌธ์ ๋ฐ์ก ์ฌ๋ถ ํ์ธ
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 = kakaoFTSubMagTxtRepl(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) {
kakaoFtPrice = sysJoinSetVO.getLongPrice();
kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
}else {
kakaoFtPrice = mberManageVO.getLongPrice();
kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
if(mberManageVO.getKakaoFtPrice() < 1) {
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
}else {
kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
}
}
}else {
//ํ์ ๋จ๊ฐ๊ฐ ์์ผ๋ฉด ์์คํ
๋จ๊ฐ๋ก ์ง์
if(mberManageVO.getShortPrice() < 1) {
kakaoFtPrice = sysJoinSetVO.getShortPrice();
kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
}else {
kakaoFtPrice = mberManageVO.getShortPrice();
kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
if(mberManageVO.getKakaoFtPrice() < 1) {
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
}else {
kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
}
}
}
}else {
if(kakaoFtPrice < 1) { //ํ์ ๋จ๊ฐ๊ฐ ์์ผ๋ฉด ์์คํ
๋จ๊ฐ๋ก ์ง์
kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice();
kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
}else {
kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
}
}
/** ์ ์ก์ธ์ ํ์ธ*/
int totCallCnt = kakaoVO.getCallToList().length;
Float kakaoTotPrice = totCallCnt * kakaoFtPrice; // ์ด๊ฒฐ์ ๊ธ์ก = ์ด ์ ์ก์๋ * ์นด์นด์ค ์น๊ตฌํก ๋จ๊ฐ
String totPrice = kakaoTotPrice.toString();
System.out.println("@@@@@@@ : "+kakaoTotPrice +" = "+totCallCnt+" * "+kakaoFtPrice);
kakaoVO.setEachPrice(kakaoFtPrice.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());
//์นด์นด์ค ์น๊ตฌํก ๊ฐ์ธ ๋จ๊ฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์์คํ
๋จ๊ฐ๋ก
if(mberManageVO.getKakaoFtPrice() == 0.0f)
mberManageVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
if(mberManageVO.getKakaoFtImgPrice() == 0.0f)
mberManageVO.setKakaoFtImgPrice(sysJoinSetVO.getKakaoFtImgPrice());
if(mberManageVO.getKakaoFtWideImgPrice() == 0.0f)
mberManageVO.setKakaoFtWideImgPrice(sysJoinSetVO.getKakaoFtWideImgPrice());
// SMS ์ธ๊ฒฝ์ฐ
// ์ฌ์ฉ์ ๊ฐ์ธ ๋จ๊ฐ๊ฐ ์์ผ๋ฉด ์์คํ
๋จ๊ฐ๋ก
if(mberManageVO.getShortPrice() == 0.0f)
mberManageVO.setShortPrice(sysJoinSetVO.getShortPrice());
// // MMS ์ธ๊ฒฝ์ฐ
// ์ฌ์ฉ์ ๊ฐ์ธ ๋จ๊ฐ๊ฐ ์์ผ๋ฉด ์์คํ
๋จ๊ฐ๋ก
if(mberManageVO.getLongPrice() == 0.0f)
mberManageVO.setLongPrice(sysJoinSetVO.getLongPrice());
if(mberManageVO.getPicturePrice() == 0.0f)
mberManageVO.setPicturePrice(sysJoinSetVO.getPicturePrice());
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);
}
System.out.println("@@ ๋์ฒด๋ฌธ์๋ด์ฉ : " + tempSubMagTxt);
setSendMsgVO.setSubMsgTxt(tempSubMagTxt);
int FrBytes = tempSubMagTxt.getBytes(charset).length;
System.out.println("@@ ๋์ฒด๋ฌธ์๊ธธ์ด : " + FrBytes);
//๋ฉ์ธ์ง ๊ธธ์ด๊ฐ 90Byte๊ฐ ์ด๊ณผ์ MMS
if(FrBytes > 90) {
setSendMsgVO.setSubMsgType("MMS");
}else {// ์๋๋ฉด SMS
setSendMsgVO.setSubMsgType("SMS");
}
System.out.println("@@ ๋์ฒด๋ฌธ์ํ์
: " + setSendMsgVO.getSubMsgType());
}
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);
setSendMsgVO.setBizJsonName(jsonFileName); //json ํ์ผ๋ช
}
kakaoSendList.add(setSendMsgVO);
}
kakaoVO.setKakaoSendList(kakaoSendList);
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
}
return kakaoVO;
}
/**
* @methodName : kakaoSendMsg_advc
* @author : ์ดํธ์
* @date : 2025. 3. 13.
* @description : kakaoSendMsg ๊ฐ์
* @return : KakaoVO
* @param kakaoVO
* @return
* @throws Exception
*
*/
public KakaoVO kakaoSendMsg_advc(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);
}
System.out.println("@@ ๋์ฒด๋ฌธ์๋ด์ฉ : " + tempSubMagTxt);
setSendMsgVO.setSubMsgTxt(tempSubMagTxt);
int FrBytes = tempSubMagTxt.getBytes(charset).length;
System.out.println("@@ ๋์ฒด๋ฌธ์๊ธธ์ด : " + FrBytes);
//๋ฉ์ธ์ง ๊ธธ์ด๊ฐ 90Byte๊ฐ ์ด๊ณผ์ MMS
if(FrBytes > 90) {
setSendMsgVO.setSubMsgType("MMS");
}else {// ์๋๋ฉด SMS
setSendMsgVO.setSubMsgType("SMS");
}
System.out.println("@@ ๋์ฒด๋ฌธ์ํ์
: " + setSendMsgVO.getSubMsgType());
}
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_advc(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;
}
/**
* @Method Name : kakaoFTSendMsg
* @์์ฑ์ผ : 2024. 1. 17.
* @์์ฑ์ : ์ฐ์๋
* @Method ์ค๋ช
: ์นด์นด์ค ์นํก ์ ์ก ๋ฉ์ธ์ง ์ค์
*/
public KakaoVO kakaoFTSendMsg(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 = kakaoFTSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, count);
setSendMsgVO.setTemplateContent(templateContent);
}else {
// ํ
ํ๋ฆฟ ๋ด์ฉ ์ค์
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 = kakaoFTSubMagTxtRepl(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.kakaoApiFTJsonSave(kakaoVO);
// 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) {
System.out.println("tempSubMagTxt : "+ tempSubMagTxt);
// 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;
}
public String kakaoFTSubMagTxtRepl(String tempSubMagTxt, KakaoVO kakaoVO, int count) throws Exception{
List<String[]> varValList = kakaoVO.getVarValList();
tempSubMagTxt = getKakaoFTCntReplace(varValList.get(count)[0], tempSubMagTxt);
return tempSubMagTxt;
}
/*
* ์นด์นด์ค ์น๊ตฌํก ์นํ ๋ด์ฉ์ ๋ํ ๋ณํ ์ฒ๋ฆฌ
*
*
* */
public String getKakaoFTCntReplace(String varValStr, String contents) throws Exception{
String[] array = varValStr.split("ยถ");
String tmpContents = contents;
for(int j=0; j < array.length; j++) {
String tmpVarVal = array[j].replaceAll("ยง", ",");
if(tmpVarVal.length() > 0) {
if(tmpContents.contains("#{์ด๋ฆ}") && j == 0) {
tmpContents = tmpContents.replaceAll("\\#\\{์ด๋ฆ\\}", tmpVarVal);
}
//1๋ฒ์งธ์ ํธ๋ํฐ ๋ฒํธ๊ฐ ํฌํจ ๋์ด ์์ด์ ๊ฑด๋๋
if(tmpContents.contains("#{1}") && j == 2) {
tmpContents = tmpContents.replaceAll("\\#\\{1\\}", tmpVarVal);
}
if(tmpContents.contains("#{2}") && j == 3) {
tmpContents = tmpContents.replaceAll("\\#\\{2\\}", tmpVarVal);
}
if(tmpContents.contains("#{3}") && j == 4) {
tmpContents = tmpContents.replaceAll("\\#\\{3\\}", tmpVarVal);
}
if(tmpContents.contains("#{4}") && j == 5) {
tmpContents = tmpContents.replaceAll("\\#\\{4\\}", tmpVarVal);
}
}
}
return tmpContents;
}
/*
* ์นด์นด์ค ์น๊ตฌํก ์นํ๋ฌธ์ ๋ด์ฉ ์คํธ ํํฐ
* ์นํ๋ณ์ ๋ด์ฉ ๋ฐ ํ
ํ๋ฆฟ ๋ด์ฉ, ์คํธํํฐ ๋จ์ด ๋ฆฌ์คํธ๋ฅผ ์ ๋ฌํ๋ฉด ์คํธ ๋ฌธ๊ตฌ ํฌํจ ๋ฌธ๊ตฌ ๋ฆฌํด
* ์์ผ๋ฉด ๊ณต๋ฐฑ์ ๋ฆฌํด
*
* */
public String getKakaoFTCntRepToSpamFilter(List<String[]> varValList, List<String> resultSpamTxt, String contents) throws Exception {
String spmFilterTxt = "";
for(int i=0; i < varValList.size(); i++) {
String tmpContents = getKakaoFTCntReplace(varValList.get(i)[0], contents);
//์
๋ ฅ ๋ฌธ์ฅ์ ๋ํด์ ์ฐํ ๋ฌธ์ฅ ๋๋ ํน์ ๊ธฐํธ ์
๋ ฅ ์ ๊ฑฐ ๋ฑ ๋ฌธ์ฅ ์ฌ๊ตฌ์ฑ ์ฒ๋ฆฌ, ํ๊ธ ์๋ชจ์ ๋ถ๋ฆฌ ๋ฐ ์ฌ์กฐํจ๋ ํจ๊ป ์ฒ๋ฆฌํจ.
String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim();
//List<String> jasoList = HangulParser.disassemble(resultParser);
//String assembleStr = HangulParser.assemble(jasoList);
//๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฑ๋ก๋ ์คํธ๋ฌธ๊ตฌ์ ์ผ์นํ๋ ๋จ์ด/๋ฌธ๊ตฌ๊ฐ ์๋์ง ์ฒดํฌํจ.
int spmCnt = 0;
for(String spmTxt : resultSpamTxt) {
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
if(resultParser.contains(parserStr)) {
//์คํธ ๋จ์ด/๋ฌธ๊ตฌ๊ฐ ์์ผ๋ฉด ์ฝค๋ง๋ก ์ฐ๊ฒฐ์ํจ ํ ๋ฆฌํดํด์ค.
spmFilterTxt += spmTxt + ",";
spmCnt++;
}
}
if(spmCnt > 0) {//์คํธ๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๋ฌธ์์ด ๋ , ๋จ์ด ์ญ์ ์ฒ๋ฆฌ
if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
// ์ฒ์๋ถํฐ idx ๋งํผ ์๋ผ๋ธ ๋๋จธ์ง ๊ธ์
spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1);
}
System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
return spmFilterTxt;
}
}
return "";
}
/*
* ์นํ๋ฌธ์๊ฐ ์๋ ๋ด์ฉ์ ๋ํ ์คํธํํฐ๋ง ์ฒ๋ฆฌ
*
* */
public String getKakaoFTCntToSpamFilter(List<String> resultSpamTxt, String contents) throws Exception {
String spmFilterTxt = "";
//for(int i=0; i < varValList.size(); i++) {
//String[] array = varValList.get(i)[0].split("ยถ");
String tmpContents = contents;
System.out.println(tmpContents);
//์
๋ ฅ ๋ฌธ์ฅ์ ๋ํด์ ์ฐํ ๋ฌธ์ฅ ๋๋ ํน์ ๊ธฐํธ ์
๋ ฅ ์ ๊ฑฐ ๋ฑ ๋ฌธ์ฅ ์ฌ๊ตฌ์ฑ ์ฒ๋ฆฌ, ํ๊ธ ์๋ชจ์ ๋ถ๋ฆฌ ๋ฐ ์ฌ์กฐํจ๋ ํจ๊ป ์ฒ๋ฆฌํจ.
String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim();
//List<String> jasoList = HangulParser.disassemble(resultParser);
//String assembleStr = HangulParser.assemble(jasoList);
System.out.println("++++++++++++++ spam resultParser ::: "+resultParser);
//๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฑ๋ก๋ ์คํธ๋ฌธ๊ตฌ์ ์ผ์นํ๋ ๋จ์ด/๋ฌธ๊ตฌ๊ฐ ์๋์ง ์ฒดํฌํจ.
int spmCnt = 0;
for(String spmTxt : resultSpamTxt) {
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
if(resultParser.contains(parserStr)) {
//์คํธ ๋จ์ด/๋ฌธ๊ตฌ๊ฐ ์์ผ๋ฉด ์ฝค๋ง๋ก ์ฐ๊ฒฐ์ํจ ํ ๋ฆฌํดํด์ค.
spmFilterTxt += spmTxt + ",";
spmCnt++;
}
}
if(spmCnt > 0) {//์คํธ๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๋ฌธ์์ด ๋ , ๋จ์ด ์ญ์ ์ฒ๋ฆฌ
if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
// ์ฒ์๋ถํฐ idx ๋งํผ ์๋ผ๋ธ ๋๋จธ์ง ๊ธ์
spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1);
}
System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
return spmFilterTxt;
}
//}
return "";
}
public static void statusResponseSet (StatusResponse statusResponse, HttpStatus httpStatus, String msg ) {
statusResponse.setStatus(httpStatus);
statusResponse.setMessage(msg);
}
// ๋ณด์ ๊ธ์ก์ด ์ถฉ๋ถํ์ง ํ์ธํ๋ ๋ฉ์๋
public boolean isCashSufficient(String userId, List<KakaoSendAdvcVO> kakaoSendAdvcListVO) throws Exception {
String userMoney = priceAndPoint.getBefCash(userId);
// ์ผํ ์ ๊ฑฐ
userMoney = userMoney.replace(",", "");
// ์ฌ์ฉ์ ๋ณด์ ๊ธ์ก BigDecimal ๋ณํ (HALF_EVEN ์ ์ฉ)
BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN);
log.info(" + userMoney :: [{}]", userMoney);
log.info(" + befCash :: [{}]", befCash);
// ์ด ๋ฉ์์ง ๊ธ์ก ๊ณ์ฐ (HALF_EVEN ์ ์ฉ)
BigDecimal totalEachPrice = kakaoSendAdvcListVO.stream()
.map(msg -> new BigDecimal(String.valueOf(msg.getEachPrice()))) // ๋ณํ ์ค๋ฅ ๋ฐฉ์ง
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(2, RoundingMode.HALF_EVEN); // ์ผ๊ด์ฑ ์ ์ง
log.info(" + totalEachPrice :: [{}]", totalEachPrice);
// ๋น๊ต ์ํ
return befCash.compareTo(totalEachPrice) >= 0;
}
/**
* @methodName : insertKakaoAtDataJsonInfo_advc
* @author : ์ดํธ์
* @date : 2025. 4. 24.
* @description : INSERT INTO BIZ_ATTACHMENTS
* @return : void
* @param kakaoSendAdvcListVO
*
*/
public void insertKakaoAtDataJsonInfo_advc(List<KakaoSendAdvcVO> kakaoSendAdvcListVO) {
List<KakaoSendAdvcVO> jsonInfoData = new ArrayList<>(kakaoSendAdvcListVO);
jsonInfoData.removeIf(t -> StringUtils.isBlank(t.getJsonStr()));
log.info(" + jsonInfoData Insert :: [{}]", jsonInfoData.size());
if(jsonInfoData.size() > 0) {
kakaoAlimTalkDAO.insertKakaoAtDataJsonInfo_advc(jsonInfoData);
}
}
/**
* @methodName : insertKakaoData_advc
* @author : ์ดํธ์
* @date : 2025. 3. 20.
* @description : ์นด์นด์ค batch ๋ฐ์ก => mj_msg_data
* @return : int
* @param kakaoSendAdvcVOList
* @param parentLoopCount
* @param isJsonNotEmpty
* @param isJsonNameAllSame
* @return
*
*/
public int insertKakaoData_advc(List<KakaoSendAdvcVO> kakaoSendAdvcVOList) {
// ์์ ์๊ฐ ์ธก์
long totalStartTime = System.currentTimeMillis();
int totalSize = kakaoSendAdvcVOList.size(); // ์ด ๋ฐ์ดํฐ ๊ฐ์
// Batch ํฌ๊ธฐ ์ค์ (๊ณ ์ ๊ฐ)
// int batchSize = 10000; 465
int batchSize = 50000; // 9๋ถ 18์ด
log.info("์ด ๋ฐ์ดํฐ ๊ฐ์ :: [{}] ", totalSize);
log.info("์ค์ ๋ Batch ํฌ๊ธฐ :: [{}] ", batchSize);
// ์ด insert ์นด์ดํธ
int instCnt = 0;
int batchCount = 0;
// ๊ฐ ๋ฐฐ์น๋ณ ์คํ ์๊ฐ ๊ธฐ๋ก
List<Double> batchExecutionTimes = new ArrayList<>();
// ์ฒซ ๋ฒ์งธ ๋ฐฐ์น์์๋ง ์ฝ์
ํ๋์ง ์ถ์ ํ๋ ํ๋๊ทธ
for (int i = 0; i < totalSize; i += batchSize) {
// Batch ์์ ์๊ฐ ์ธก์
long batchStartTime = System.currentTimeMillis();
// Batch ๋ฆฌ์คํธ ์์ฑ
List<KakaoSendAdvcVO> batchList = kakaoSendAdvcVOList.subList(i, Math.min(i + batchSize, totalSize));
System.out.println("Batch ์์ ์ธ๋ฑ์ค: " + i);
// mj_msg_data ํ
์ด๋ธ insert
int insertedCount = kakaoAlimTalkDAO.insertKakaoAtDataInfo_advc(batchList);
/** @kakaoSendUtil.populateSendLists
* ํ๋จ์์
* getJsonStr ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ ํ์ฉ
* */
instCnt += insertedCount;
// Batch ์ข
๋ฃ ์๊ฐ ์ธก์ ๋ฐ ์คํ ์๊ฐ ๊ณ์ฐ
long batchEndTime = System.currentTimeMillis();
double batchExecutionTimeInSeconds = (batchEndTime - batchStartTime) / 1000.0;
// ์คํ ์๊ฐ ๊ธฐ๋ก
batchExecutionTimes.add(batchExecutionTimeInSeconds);
batchCount++;
}
// ์ข
๋ฃ ์๊ฐ ์ธก์
long totalEndTime = System.currentTimeMillis();
// ์ด ์คํ ์๊ฐ ๊ณ์ฐ (๋ฐ๋ฆฌ์ด -> ์ด๋ก ๋ณํ)
double totalExecutionTimeInSeconds = (totalEndTime - totalStartTime) / 1000.0;
// ์คํ ์๊ฐ ์ถ๋ ฅ
log.info("์ด ๋ฐฐ์น ์คํ ํ์ :: [{}] ", batchCount);
log.info("batchSize :: [{}] ", batchSize);
log.info("์ด ์คํ ์๊ฐ :: [{}] ", totalExecutionTimeInSeconds + "์ด");
log.info("์ด ์ฝ์
๊ฑด์ :: [{}] ", instCnt);
// ๊ฐ ๋ฐฐ์น๋ณ ์คํ ์๊ฐ ์ถ๋ ฅ
for (int k = 0; k < batchExecutionTimes.size(); k++) {
System.out.println("๋ฐฐ์น " + (k + 1) + " ์คํ ์๊ฐ :: " + batchExecutionTimes.get(k) + "์ด");
}
return instCnt;
}
public void insertKakaoGroupDataTb_advc(int instCnt, KakaoVO kakaoVO, KakaoSendAdvcVO sendVO) throws Exception {
// TODO Auto-generated method stub
// log.info(" + insertKakaoGroupDataTb_advc kakaoVO :: \n[{}]", kakaoVO.toString());;
// log.info(" + insertKakaoGroupDataTb_advc kakaoSendAdvcVOList :: \n[{}]", sendVO.toString());
sendVO.setTemplateContent(kakaoVO.getTemplateContent());
sendVO.setMsgGroupCnt(Integer.toString(instCnt));
sendVO.setReserveYn(kakaoVO.getReserveYn());
sendVO.setBefCash(priceAndPoint.getBefCash(sendVO.getUserId()));
sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId()));
sendVO.setAdFlag(kakaoVO.getAdFlag());
sendVO.setSendKind(kakaoVO.getSendKind());
Float eachPrice = Float.parseFloat(sendVO.getEachPrice());
Float totPrice = eachPrice * instCnt;
sendVO.setTotPrice(String.format("%.1f", totPrice));
// sendVO.setAtDelayYn(kakaoVO.getAtDelayYn());
sendVO.setAtDelayYn(kakaoVO.getAtSmishingYn());
sendVO.setBizKakaoResendOrgnlTxt(kakaoVO.getSubMsgTxt());
sendVO.setBizKakaoResendType(sendVO.getSubMsgType());
sendVO.setBizKakaoImageType(kakaoVO.getImageType());
kakaoAlimTalkDAO.insertKakaoGroupDataTb_advc(sendVO);
}
}