diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java new file mode 100644 index 00000000..686cc621 --- /dev/null +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java @@ -0,0 +1,68 @@ +package itn.let.kakao.kakaoComm; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +import lombok.Getter; +import lombok.Setter; + +/** +* @FileName : KakaoSendVO.java +* @Project : mjon +* @Date : 2025. 3. 25. +* @작성자 : 이호영 + +* @프로그램 설명 : 문자온 발송부분만 ADVC +*/ +@Getter +@Setter +public class KakaoSendAdvcVO implements Serializable { + + + /** + * + */ + private static final long serialVersionUID = 343099046833205405L; + + private String msgId; // 문자ID + private String msgGroupId; // 전송그룹ID + private String userId; // 사용자ID + private String agentCode; // 전송사코드 + private String senderKey; // 발신프로필 키 + private String templateCode; // 템플릿 코드 + private String callTo; // 수신번호 + private String callFrom; // 발신번호 + private String msgType; // 메시지 타입 + private String templateContent; // 템플릿 내용 + private String templateTitle; // 템플릿 제목 + private String subMsgSendYn; // 대체문자 전송 여부 + private String subMsgTxt; // 대체문자 내용 + private String subMsgType; // 대체문자 타입 + private String bizJsonName; // JSON 파일명 + private String reqDate; // 예약일시 + + @Override + public String toString() { + return "MsgSendVO[" + + "\n msgId=[" + msgId + "]" + + "\n , msgGroupId=[" + msgGroupId + "]" + + "\n , userId=[" + userId + "]" + + "\n , agentCode=[" + agentCode + "]" + + "\n , senderKey=[" + senderKey + "]" + + "\n , templateCode=[" + templateCode + "]" + + "\n , callTo=[" + callTo + "]" + + "\n , callFrom=[" + callFrom + "]" + + "\n , msgType=[" + msgType + "]" + + "\n , templateContent=[" + templateContent + "]" + + "\n , templateTitle=[" + templateTitle + "]" + + "\n , subMsgSendYn=[" + subMsgSendYn + "]" + + "\n , subMsgTxt=[" + subMsgTxt + "]" + + "\n , subMsgType=[" + subMsgType + "]" + + "\n , bizJsonName=[" + bizJsonName + "]" + + "\n , reqDate=[" + reqDate + "]" + + "\n ]"; + } + + +} diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java index d96b4fb8..26825760 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java @@ -1,7 +1,10 @@ package itn.let.kakao.kakaoComm; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.annotation.Resource; @@ -10,9 +13,11 @@ import org.springframework.stereotype.Component; import itn.com.cmm.util.StringUtil; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave; +import itn.let.mail.service.StatusResponse; import itn.let.mjo.msg.service.MjonMsgVO; 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; @@ -24,7 +29,141 @@ public class KakaoSendUtil { @Resource(name = "MjonMsgDataService") private MjonMsgDataService mjonMsgDataService; + + @Autowired + private PriceAndPoint priceAndPoint; + /** + * @methodName : kakaoSendPrice_advc + * @author : 이호영 + * @date : 2025. 3. 7. + * @description : 기존 kakaoSendPrice 개선 + * @return : KakaoVO + * @param kakaoVO + * @param statusResponse + * @return + * @throws Exception + * + */ + public KakaoVO populateSendLists(KakaoVO kakaoVO, StatusResponse statusResponse) throws Exception { + + //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) +// String befCash = kakaoVO.getBefCash(); + + MjonMsgVO mjonMsgVO = new MjonMsgVO(); + mjonMsgVO.setUserId(kakaoVO.getUserId()); + String userMoney = priceAndPoint.getBefCash(kakaoVO.getUserId()); + String userPoint = priceAndPoint.getBefPoint(kakaoVO.getUserId()); + + //1.시스템 기본 단가 정보 불러오기 + JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); + + //2.사용자 개인 단가 정보 불러오기 + MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId()); + Float kakaoAtPrice = mberManageVO.getKakaoAtPrice(); + + /** 대체문자 여부 체크(있으면 대체문자 가격으로 없으면 카카오톡 가격으로) */ + //대체문자 발송 여부 확인 + if("Y".equals(kakaoVO.getSubMsgSendYn())) { + +// MsgSendUtils.getSmsTxtBytes + + + 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 : kakaoSendPrice @@ -34,13 +173,11 @@ public class KakaoSendUtil { */ public KakaoVO kakaoSendPrice(KakaoVO kakaoVO) throws Exception { - //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) - String befCash = kakaoVO.getBefCash(); + System.out.println(" :: kakaoSendPrice :: "); + + //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) +// String befCash = kakaoVO.getBefCash(); - //VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 - if("".equals(befCash) || befCash == null) { - - } MjonMsgVO mjonMsgVO = new MjonMsgVO(); mjonMsgVO.setUserId(kakaoVO.getUserId()); String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); @@ -55,6 +192,7 @@ public class KakaoSendUtil { /** 대체문자 여부 체크(있으면 대체문자 가격으로 없으면 카카오톡 가격으로) */ //대체문자 발송 여부 확인 + System.out.println(" :: kakaoVO.getSubMsgSendYn() :: "+ kakaoVO.getSubMsgSendYn()); if(kakaoVO.getSubMsgSendYn().equals("Y")) { @@ -66,6 +204,8 @@ public class KakaoSendUtil { String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n"); if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) { tempSubMagTxt = kakaoSubMagTxtRepl(tempSubMagTxt, kakaoVO, count); +// tempSubMagTxt = kakaoSubMagTxtRepl_advc(tempSubMagTxt, kakaoVO, count); + System.out.println("+ tempSubMagTxt :: "+ tempSubMagTxt); } int bytes = tempSubMagTxt.getBytes(charset).length; @@ -401,6 +541,7 @@ public class KakaoSendUtil { 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 파일명 } @@ -509,6 +650,7 @@ public class KakaoSendUtil { 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; @@ -551,6 +693,7 @@ public class KakaoSendUtil { return tempSubMagTxt; } + public String kakaoFTSubMagTxtRepl(String tempSubMagTxt, KakaoVO kakaoVO, int count) throws Exception{ List varValList = kakaoVO.getVarValList(); diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java index e6dd28a3..c5192711 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java @@ -2,8 +2,11 @@ package itn.let.kakao.kakaoComm; import java.util.ArrayList; import java.util.List; +import java.util.Map; import itn.let.mjo.msg.service.MjonMsgVO; +import lombok.Getter; +import lombok.Setter; /** * @FileName : KakaoVO.java @@ -13,6 +16,8 @@ import itn.let.mjo.msg.service.MjonMsgVO; * @프로그램 설명 : 카카오톡 요청 변수 목록 (문자온VO를 상속 받음) */ +@Getter +@Setter public class KakaoVO extends MjonMsgVO{ private static final long serialVersionUID = 536382850588307019L; @@ -247,995 +252,58 @@ public class KakaoVO extends MjonMsgVO{ private String successCntMonth; private String successCntYear; - public String getSuccessDay() { - return successDay; - } - - public void setSuccessDay(String successDay) { - this.successDay = successDay; - } - - public String getSuccessMonth() { - return successMonth; - } - - public void setSuccessMonth(String successMonth) { - this.successMonth = successMonth; - } - - public String getSuccessYear() { - return successYear; - } - - public void setSuccessYear(String successYear) { - this.successYear = successYear; - } - - public String getSuccessCntDay() { - return successCntDay; - } - - public void setSuccessCntDay(String successCntDay) { - this.successCntDay = successCntDay; - } - - public String getSuccessCntMonth() { - return successCntMonth; - } - - public void setSuccessCntMonth(String successCntMonth) { - this.successCntMonth = successCntMonth; - } - - public String getSuccessCntYear() { - return successCntYear; - } - - public void setSuccessCntYear(String successCntYear) { - this.successCntYear = successCntYear; - } - - public static long getSerialversionuid() { - return serialVersionUID; - } - - public String getCategoryDepth() { - return categoryDepth; - } - - public void setCategoryDepth(String categoryDepth) { - this.categoryDepth = categoryDepth; - } - - public String getCategoryType() { - return categoryType; - } - - public void setCategoryType(String categoryType) { - this.categoryType = categoryType; - } - - public String getCategoryCode() { - return categoryCode; - } - - public void setCategoryCode(String categoryCode) { - this.categoryCode = categoryCode; - } - - public String getCategoryGroupName() { - return categoryGroupName; - } - - public void setCategoryGroupName(String categoryGroupName) { - this.categoryGroupName = categoryGroupName; - } - - public String getCategoryName() { - return categoryName; - } - - public void setCategoryName(String categoryName) { - this.categoryName = categoryName; - } - - public String getCategoryInclusion() { - return categoryInclusion; - } - - public void setCategoryInclusion(String categoryInclusion) { - this.categoryInclusion = categoryInclusion; - } - - public String getCategoryExclusion() { - return categoryExclusion; - } - - public void setCategoryExclusion(String categoryExclusion) { - this.categoryExclusion = categoryExclusion; - } - - public String getBizUrl() { - return bizUrl; - } - - public void setBizUrl(String bizUrl) { - this.bizUrl = bizUrl; - } - - public String getBizReturnMsg() { - return bizReturnMsg; - } - - public void setBizReturnMsg(String bizReturnMsg) { - this.bizReturnMsg = bizReturnMsg; - } - - public String getBizReturnCode() { - return bizReturnCode; - } - - public void setBizReturnCode(String bizReturnCode) { - this.bizReturnCode = bizReturnCode; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getYellowId() { - return yellowId; - } - - public void setYellowId(String yellowId) { - this.yellowId = yellowId; - } - - public String getBizJsonName() { - return bizJsonName; - } - - public void setBizJsonName(String bizJsonName) { - this.bizJsonName = bizJsonName; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - - public String getSenderKey() { - return senderKey; - } - - public void setSenderKey(String senderKey) { - this.senderKey = senderKey; - } - - public String getProfileId() { - return profileId; - } - - public void setProfileId(String profileId) { - this.profileId = profileId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getImgTitle() { - return imgTitle; - } - - public void setImgTitle(String imgTitle) { - this.imgTitle = imgTitle; - } - - public String getImageType() { - return imageType; - } - - public void setImageType(String imageType) { - this.imageType = imageType; - } - - public String getImgLink() { - return imgLink; - } - - public void setImgLink(String imgLink) { - this.imgLink = imgLink; - } - - public String getTemplateName() { - return templateName; - } - - public void setTemplateName(String templateName) { - this.templateName = templateName; - } - - public String getTemplateMessageType() { - return templateMessageType; - } - - public void setTemplateMessageType(String templateMessageType) { - this.templateMessageType = templateMessageType; - } - - public String getTemplateEmphasizeType() { - return templateEmphasizeType; - } - - public void setTemplateEmphasizeType(String templateEmphasizeType) { - this.templateEmphasizeType = templateEmphasizeType; - } - - public String getTemplateContent() { - return templateContent; - } - - public void setTemplateContent(String templateContent) { - this.templateContent = templateContent; - } - - public String getTemplateExtra() { - return templateExtra; - } - - public void setTemplateExtra(String templateExtra) { - this.templateExtra = templateExtra; - } - - public String getTamplateAd() { - return tamplateAd; - } - - public void setTamplateAd(String tamplateAd) { - this.tamplateAd = tamplateAd; - } - - public String getTemplateImageName() { - return templateImageName; - } - - public void setTemplateImageName(String templateImageName) { - this.templateImageName = templateImageName; - } - - public String getTemplateImageUrl() { - return templateImageUrl; - } - - public void setTemplateImageUrl(String templateImageUrl) { - this.templateImageUrl = templateImageUrl; - } - - public String getTemplateTitle() { - return templateTitle; - } - - public void setTemplateTitle(String templateTitle) { - this.templateTitle = templateTitle; - } - - public String getTemplateSubtitle() { - return templateSubtitle; - } - - public void setTemplateSubtitle(String templateSubtitle) { - this.templateSubtitle = templateSubtitle; - } - - public String getTemplateHeader() { - return templateHeader; - } - - public void setTemplateHeader(String templateHeader) { - this.templateHeader = templateHeader; - } - - public Boolean getSecurityFlag() { - return securityFlag; - } - - public void setSecurityFlag(Boolean securityFlag) { - this.securityFlag = securityFlag; - } - - public List getButtonVOList() { - return buttonVOList; - } - - public void setButtonVOList(List buttonVOList) { - this.buttonVOList = buttonVOList; - } - - public String getButtonName() { - return buttonName; - } - - public void setButtonName(String buttonName) { - this.buttonName = buttonName; - } - - public String getButtonLinkType() { - return buttonLinkType; - } - - public void setButtonLinkType(String buttonLinkType) { - this.buttonLinkType = buttonLinkType; - } - - public String getButtonLinkAnd() { - return buttonLinkAnd; - } - - public void setButtonLinkAnd(String buttonLinkAnd) { - this.buttonLinkAnd = buttonLinkAnd; - } - - public String getButtonLinkIos() { - return buttonLinkIos; - } - - public void setButtonLinkIos(String buttonLinkIos) { - this.buttonLinkIos = buttonLinkIos; - } - - public String getButtonLinkMo() { - return buttonLinkMo; - } - - public void setButtonLinkMo(String buttonLinkMo) { - this.buttonLinkMo = buttonLinkMo; - } - - public String getButtonLinkPc() { - return buttonLinkPc; - } - - public void setButtonLinkPc(String buttonLinkPc) { - this.buttonLinkPc = buttonLinkPc; - } - - public String getButtonPluginId() { - return buttonPluginId; - } - - public void setButtonPluginId(String buttonPluginId) { - this.buttonPluginId = buttonPluginId; - } - - public String getQuickName() { - return quickName; - } - - public void setQuickName(String quickName) { - this.quickName = quickName; - } - - public String getQuickLinkType() { - return quickLinkType; - } - - public void setQuickLinkType(String quickLinkType) { - this.quickLinkType = quickLinkType; - } - - public String getQuickLinkAnd() { - return quickLinkAnd; - } - - public void setQuickLinkAnd(String quickLinkAnd) { - this.quickLinkAnd = quickLinkAnd; - } - - public String getQuickLinkIos() { - return quickLinkIos; - } - - public void setQuickLinkIos(String quickLinkIos) { - this.quickLinkIos = quickLinkIos; - } - - public String getQuickLinkMo() { - return quickLinkMo; - } - - public void setQuickLinkMo(String quickLinkMo) { - this.quickLinkMo = quickLinkMo; - } - - public String getQuickLinkPc() { - return quickLinkPc; - } - - public void setQuickLinkPc(String quickLinkPc) { - this.quickLinkPc = quickLinkPc; - } - - public String getSenderKeyType() { - return senderKeyType; - } - - public void setSenderKeyType(String senderKeyType) { - this.senderKeyType = senderKeyType; - } - - public String getDeleteYn() { - return deleteYn; - } - - public void setDeleteYn(String deleteYn) { - this.deleteYn = deleteYn; - } - - public String getTemplateCode() { - return templateCode; - } - - public void setTemplateCode(String templateCode) { - this.templateCode = templateCode; - } - - public String getNewTemplateCode() { - return newTemplateCode; - } - - public void setNewTemplateCode(String newTemplateCode) { - this.newTemplateCode = newTemplateCode; - } - - public String[] getArrTemplateCode() { - return arrTemplateCode; - } - - public void setArrTemplateCode(String[] arrTemplateCode) { - this.arrTemplateCode = arrTemplateCode; - } - - public String getTemplateStatus() { - return templateStatus; - } - - public void setTemplateStatus(String templateStatus) { - this.templateStatus = templateStatus; - } - - public String getKeyword() { - return keyword; - } - - public void setKeyword(String keyword) { - this.keyword = keyword; - } - - public String getSendPhone() { - return sendPhone; - } - - public void setSendPhone(String sendPhone) { - this.sendPhone = sendPhone; - } - - public String getDestPhone() { - return destPhone; - } - - public void setDestPhone(String destPhone) { - this.destPhone = destPhone; - } - - public String getSubMsgSendYn() { - return subMsgSendYn; - } - - public void setSubMsgSendYn(String subMsgSendYn) { - this.subMsgSendYn = subMsgSendYn; - } - - public String getCount() { - return count; - } - - public void setCount(String count) { - this.count = count; - } - - public String getPage() { - return page; - } - - public void setPage(String page) { - this.page = page; - } - - public String getBizUmid() { - return bizUmid; - } - - public void setBizUmid(String bizUmid) { - this.bizUmid = bizUmid; - } - - public List getVarNmList() { - return varNmList; - } - - public void setVarNmList(List varNmList) { - this.varNmList = varNmList; - } - - public List getVarValList() { - return varValList; - } - - public void setVarValList(List varValList) { - this.varValList = varValList; - } - - public String getFormListType() { - return formListType; - } - - public void setFormListType(String formListType) { - this.formListType = formListType; - } - - public String getSubMsgTxt() { - return subMsgTxt; - } - - public void setSubMsgTxt(String subMsgTxt) { - this.subMsgTxt = subMsgTxt; - } - - public String getBizJsonYn() { - return bizJsonYn; - } - - public void setBizJsonYn(String bizJsonYn) { - this.bizJsonYn = bizJsonYn; - } - - public String getSendType() { - return sendType; - } - - public void setSendType(String sendType) { - this.sendType = sendType; - } - - public String getAdFlag() { - return adFlag; - } - - public void setAdFlag(String adFlag) { - this.adFlag = adFlag; - } - - public List getKakaoSendList() { - return kakaoSendList; - } - - public void setKakaoSendList(List kakaoSendList) { - this.kakaoSendList = kakaoSendList; - } - - public String getSubMsgTxtReplYn() { - return subMsgTxtReplYn; - } - - public void setSubMsgTxtReplYn(String subMsgTxtReplYn) { - this.subMsgTxtReplYn = subMsgTxtReplYn; - } - - public String getSubMsgType() { - return subMsgType; - } - - public void setSubMsgType(String subMsgType) { - this.subMsgType = subMsgType; - } - public List varValPaser(String[] varValList){ - - List returnVarVal = new ArrayList<>(); - - for(String varVal : varValList) - { - String[] strList = varVal.split("§"); - returnVarVal.add(strList); + private List> varListMap; + + @Override + public String toString() { + String varListMapString = "["; + if (varListMap != null && !varListMap.isEmpty()) { + StringBuilder sb = new StringBuilder(); + for (Map map : varListMap) { + if (sb.length() > 0) + sb.append(", "); + if (map == null) { + sb.append("null"); + } else { + sb.append("{"); + String prefix = ""; + for (Map.Entry entry : map.entrySet()) { + sb.append(prefix).append(entry.getKey()).append("=").append(entry.getValue()); + prefix = ", "; + } + sb.append("}"); + } + } + varListMapString += sb.toString(); } + varListMapString += "]"; - return returnVarVal; - } - - public String getMenuTopTab() { - return menuTopTab; - } - - public void setMenuTopTab(String menuTopTab) { - this.menuTopTab = menuTopTab; - } - - public String getMenuSubTab() { - return menuSubTab; - } - - public void setMenuSubTab(String menuSubTab) { - this.menuSubTab = menuSubTab; - } - - public String getSearchCondition2() { - return searchCondition2; - } - - public void setSearchCondition2(String searchCondition2) { - this.searchCondition2 = searchCondition2; - } - - public String getKakaoResendSuccCount() { - return kakaoResendSuccCount; - } - - public void setKakaoResendSuccCount(String kakaoResendSuccCount) { - this.kakaoResendSuccCount = kakaoResendSuccCount; - } - - public String getKakaoResendFailCount() { - return kakaoResendFailCount; - } - - public void setKakaoResendFailCount(String kakaoResendFailCount) { - this.kakaoResendFailCount = kakaoResendFailCount; - } - - public String getAtSuccessCount() { - return atSuccessCount; - } - - public void setAtSuccessCount(String atSuccessCount) { - this.atSuccessCount = atSuccessCount; - } - - public String getFtSuccessCount() { - return ftSuccessCount; - } - - public void setFtSuccessCount(String ftSuccessCount) { - this.ftSuccessCount = ftSuccessCount; - } - - public String getAtFailCount() { - return atFailCount; - } - - public void setAtFailCount(String atFailCount) { - this.atFailCount = atFailCount; - } - - public String getFtFailCount() { - return ftFailCount; - } - - public void setFtFailCount(String ftFailCount) { - this.ftFailCount = ftFailCount; - } - - public String getAtSuccPrice() { - return atSuccPrice; - } - - public void setAtSuccPrice(String atSuccPrice) { - this.atSuccPrice = atSuccPrice; - } - - public String getFtSuccPrice() { - return ftSuccPrice; - } - - public void setFtSuccPrice(String ftSuccPrice) { - this.ftSuccPrice = ftSuccPrice; - } - - public String getAtFailPrice() { - return atFailPrice; - } - - public void setAtFailPrice(String atFailPrice) { - this.atFailPrice = atFailPrice; - } - - public String getFtFailPrice() { - return ftFailPrice; - } - - public void setFtFailPrice(String ftFailPrice) { - this.ftFailPrice = ftFailPrice; - } - - public String getKakaoResendSuccPrice() { - return kakaoResendSuccPrice; - } - - public void setKakaoResendSuccPrice(String kakaoResendSuccPrice) { - this.kakaoResendSuccPrice = kakaoResendSuccPrice; - } - - public String getKakaoResendFailPrice() { - return kakaoResendFailPrice; - } - - public void setKakaoResendFailPrice(String kakaoResendFailPrice) { - this.kakaoResendFailPrice = kakaoResendFailPrice; - } - - public String getAtSuccCntSum() { - return atSuccCntSum; - } - - public void setAtSuccCntSum(String atSuccCntSum) { - this.atSuccCntSum = atSuccCntSum; - } - - public String getFtSuccCntSum() { - return ftSuccCntSum; - } - - public void setFtSuccCntSum(String ftSuccCntSum) { - this.ftSuccCntSum = ftSuccCntSum; - } - - public String getAtFailCntSum() { - return atFailCntSum; - } - - public void setAtFailCntSum(String atFailCntSum) { - this.atFailCntSum = atFailCntSum; - } - - public String getFtFailCntSum() { - return ftFailCntSum; - } - - public void setFtFailCntSum(String ftFailCntSum) { - this.ftFailCntSum = ftFailCntSum; - } - - public String getKakaoResenSuccSum() { - return kakaoResenSuccSum; - } - - public void setKakaoResenSuccSum(String kakaoResenSuccSum) { - this.kakaoResenSuccSum = kakaoResenSuccSum; - } - - public String getKakaoResenFailSum() { - return kakaoResenFailSum; - } - - public void setKakaoResenFailSum(String kakaoResenFailSum) { - this.kakaoResenFailSum = kakaoResenFailSum; - } - - public String getAtSuccPriceSum() { - return atSuccPriceSum; - } - - public void setAtSuccPriceSum(String atSuccPriceSum) { - this.atSuccPriceSum = atSuccPriceSum; - } - - public String getFtSuccPriceSum() { - return ftSuccPriceSum; - } - - public void setFtSuccPriceSum(String ftSuccPriceSum) { - this.ftSuccPriceSum = ftSuccPriceSum; - } - - public String getAtFailPriceSum() { - return atFailPriceSum; - } - - public void setAtFailPriceSum(String atFailPriceSum) { - this.atFailPriceSum = atFailPriceSum; - } - - public String getFtFailPriceSum() { - return ftFailPriceSum; - } - - public void setFtFailPriceSum(String ftFailPriceSum) { - this.ftFailPriceSum = ftFailPriceSum; - } - - public String getKakaoResendSuccPriceSum() { - return kakaoResendSuccPriceSum; - } - - public void setKakaoResendSuccPriceSum(String kakaoResendSuccPriceSum) { - this.kakaoResendSuccPriceSum = kakaoResendSuccPriceSum; - } - - public String getKakaoResendFailPriceSum() { - return kakaoResendFailPriceSum; - } - - public void setKakaoResendFailPriceSum(String kakaoResendFailPriceSum) { - this.kakaoResendFailPriceSum = kakaoResendFailPriceSum; - } - - public String getFriendId() { - return friendId; - } - - public void setFriendId(String friendId) { - this.friendId = friendId; - } - - public String getImageTitle() { - return imageTitle; - } - - public void setImageTitle(String imageTitle) { - this.imageTitle = imageTitle; - } - - public String getImageLink() { - return imageLink; - } - - public void setImageLink(String imageLink) { - this.imageLink = imageLink; - } - - public String getJsonText() { - return jsonText; - } - - public void setJsonText(String jsonText) { - this.jsonText = jsonText; - } - - public String getImageFileName() { - return imageFileName; - } - - public void setImageFileName(String imageFileName) { - this.imageFileName = imageFileName; - } - - public String getSbscrbDe() { - return sbscrbDe; - } - - public void setSbscrbDe(String sbscrbDe) { - this.sbscrbDe = sbscrbDe; - } - - public String getMoblphonNo() { - return moblphonNo; - } - - public void setMoblphonNo(String moblphonNo) { - this.moblphonNo = moblphonNo; - } - - public String getDept() { - return dept; - } - - public void setDept(String dept) { - this.dept = dept; - } - - public String getAtchFileId() { - return atchFileId; - } - - public void setAtchFileId(String atchFileId) { - this.atchFileId = atchFileId; - } - - public String getWorkAtchFileId() { - return workAtchFileId; - } - - public void setWorkAtchFileId(String workAtchFileId) { - this.workAtchFileId = workAtchFileId; - } - - public String getFileSn() { - return fileSn; - } - - public void setFileSn(String fileSn) { - this.fileSn = fileSn; - } - - public String getFileCn() { - return fileCn; - } - - public void setFileCn(String fileCn) { - this.fileCn = fileCn; - } - - public String getFileStreCours() { - return fileStreCours; - } - - public void setFileStreCours(String fileStreCours) { - this.fileStreCours = fileStreCours; - } - - public String getOrignlFileNm() { - return orignlFileNm; - } - - public void setOrignlFileNm(String orignlFileNm) { - this.orignlFileNm = orignlFileNm; - } - - public String getStreFileNm() { - return streFileNm; - } - - public void setStreFileNm(String streFileNm) { - this.streFileNm = streFileNm; - } - - public String getFileExtsn() { - return fileExtsn; - } - - public void setFileExtsn(String fileExtsn) { - this.fileExtsn = fileExtsn; - } - - public String getFileSize() { - return fileSize; - } - - public void setFileSize(String fileSize) { - this.fileSize = fileSize; - } - - public int getStartCount() { - return startCount; - } - - public void setStartCount(int startCount) { - this.startCount = startCount; - } - - public int getEndCount() { - return endCount; - } - - public void setEndCount(int endCount) { - this.endCount = endCount; - } - - public String getPhmType() { - return phmType; - } - - public void setPhmType(String phmType) { - this.phmType = phmType; - } + return "KakaoSendAdvcVO[" + + "\n senderKey=[" + senderKey + "]" + + "\n , subMsgTxtReplYn=[" + subMsgTxtReplYn + "]" + + "\n , subMsgSendYn=[" + subMsgSendYn + "]" + + "\n , reserveYn=[" + getReserveYn() + "]" + + "\n , divideCnt=[" + getDivideCnt() + "]" + + "\n , bizJsonYn=[" + bizJsonYn + "]" + + "\n , templateEmphasizeType=[" + templateEmphasizeType + "]" + + "\n , templateSubtitle=[" + templateSubtitle + "]" + + "\n , txtReplYn=[" + getTxtReplYn() + "]" + + "\n , callFrom=[" + getCallFrom() + "]" + + "\n , templateCode=[" + templateCode + "]" + + "\n , divideTime=[" + getDivideTime() + "]" + + "\n , reqDate=[" + getReqDate() + "]" + + "\n , atSmishingYn=[" + getAtSmishingYn() + "]" + + "\n , menuTopTab=[" + menuTopTab + "]" + + "\n , templateContent=[" + templateContent + "]" + + "\n , templateTitle=[" + templateTitle + "]" + + "\n , subMsgTxt=[" + subMsgTxt + "]" + + "\n , divideChk=[" + getDivideChk() + "]" + + "\n , sendType=[" + sendType + "]" + + "\n , msgType=[" + getMsgType() + "]" + + "\n , userId=[" + userId + "]" + + "\n , varListMap=[" + varListMapString + "]" + + "\n ]"; + } + + } diff --git a/src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java b/src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java index 2312ac1a..1d396889 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java +++ b/src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java @@ -32,7 +32,124 @@ public class KakaoApiJsonSave { static String json; - @SuppressWarnings("unchecked") + public String kakaoApiJsonSave_advc(KakaoVO kakaoVO, String[] varValInfo) { + // json파일 저장 + + + Date nowDate = new Date(); + SimpleDateFormat todayFrom = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat timeFrom = new SimpleDateFormat("HHmmss"); + String jsonFileName = mjonBizJsonDir+"/"+kakaoVO.getUserId()+"/"+todayFrom.format(nowDate)+"/"+kakaoVO.getSendType(); // 아이디/날짜/타입 + + String fileName = timeFrom.format(nowDate)+"_"+kakaoVO.getDestPhone()+".json"; + + +// File userIdFile = new File(jsonFileName); +// if(!userIdFile.exists()) { +// userIdFile.mkdirs(); // 없으면 하위 디렉토리 까지 생성 +// jsonFileName = jsonFileName +"/"+fileName; +// }else { +// +// jsonFileName = jsonFileName +"/"+fileName; +// System.out.println("jsonFileName : "+jsonFileName); +// File file1 = new File(jsonFileName); +// if (file1.isFile()) { +// return jsonFileName; +// } +// } + + KakaoReturnVO templateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); + + // 버튼리스트 JSON 생성 + JSONArray buttonList = new JSONArray(); + for(KakaoButtonVO buttonInfoVO : templateDetail.getButtonList()) { + JSONObject buttonInfo = new JSONObject(); + + buttonInfo.put("name", buttonInfoVO.getName()); + buttonInfo.put("type", buttonInfoVO.getLinkType()); + + if(buttonInfoVO.getLinkType().equals("WL")) { + buttonInfo.put("url_mobile", buttonInfoVO.getLinkMo()); + buttonInfo.put("url_pc", buttonInfoVO.getLinkPc()); + }else if(buttonInfoVO.getLinkType().equals("AL")) { + buttonInfo.put("scheme_ios", buttonInfoVO.getLinkIos()); + buttonInfo.put("scheme_android", buttonInfoVO.getLinkAnd()); + }else if(buttonInfoVO.getLinkType().equals("BC")) { + // 상담톡 진행시 등록해야함 + }else if(buttonInfoVO.getLinkType().equals("BT")) { + // 봇 전환 시 전달 + } + buttonList.add(buttonInfo); + } + + // 강조유형 JSON 생성 + JSONObject templateDetailInfo = new JSONObject(); + String emphasizeType = templateDetail.getTemplateEmphasizeType(); + + if(emphasizeType.equals("TEXT")) { + + String templateTitle = templateDetail.getTemplateTitle(); + if(kakaoVO.getVarNmList().size() != 0) { + String[] varNm = new String[kakaoVO.getVarNmList().size()]; + int q=0; + for(String temp : kakaoVO.getVarNmList()) { + temp = temp.replaceAll("\\#\\{" , "§§"); + temp = temp.replaceAll("\\}" , "§"); + varNm[q] = temp; + q++; + } + List varValList = kakaoVO.getVarValList(); // value 값 + + templateTitle = templateTitle.replaceAll(String.valueOf((char)13), ""); + templateTitle = templateTitle.replaceAll("\\#\\{" , "§§"); + templateTitle = templateTitle.replaceAll("\\}" , "§"); + + for(int i=0; i < varNm.length; i++) { + for(int j=0; j < varValInfo.length; j++) { + if (templateTitle.indexOf(varNm[i]) > -1) { + if(varValInfo[j] != null) { + templateTitle = templateTitle.replaceAll(varNm[i] , StringUtil.getString(varValInfo[j])); + }else { + templateTitle = templateTitle.replaceAll(varNm[i] , ""); + } + } + } + } + + templateDetailInfo.put("title", templateTitle); + }else { + templateDetailInfo.put("title", templateTitle); + } + }else if(emphasizeType.equals("IMAGE")) { + templateDetailInfo.put("msg_type", "ai"); + }else if(emphasizeType.equals("NONE")) { + + } + + + JSONObject jo = new JSONObject(); + + if(buttonList.size() != 0) { + jo.put("button", buttonList); + } + if(templateDetailInfo.size() != 0) { + jo.put("extra", templateDetailInfo); + } + + // 입력 json 데이터를 파일로 변경 + String jsonStr = jo.toString(); +// System.out.println("jsonStr : "+jsonStr); + +// File outPut = new File(jsonFileName); +// outPut.createNewFile(); + +// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outPut), "utf-8")); +// bw.write(jsonStr); +// bw.close(); + + return jsonFileName; + } + public String kakaoApiJsonSave(KakaoVO kakaoVO, String[] varValInfo) { // json파일 저장 @@ -109,12 +226,12 @@ public class KakaoApiJsonSave { for(int i=0; i < varNm.length; i++) { for(int j=0; j < varValInfo.length; j++) { if (templateTitle.indexOf(varNm[i]) > -1) { - if(varValInfo[j] != null) { - templateTitle = templateTitle.replaceAll(varNm[i] , StringUtil.getString(varValInfo[j])); - }else { - templateTitle = templateTitle.replaceAll(varNm[i] , ""); - } - } + if(varValInfo[j] != null) { + templateTitle = templateTitle.replaceAll(varNm[i] , StringUtil.getString(varValInfo[j])); + }else { + templateTitle = templateTitle.replaceAll(varNm[i] , ""); + } + } } } @@ -140,8 +257,8 @@ public class KakaoApiJsonSave { // 입력 json 데이터를 파일로 변경 String jsonStr = jo.toString(); - System.out.println("jsonFileName : "+jsonFileName); - +// System.out.println("jsonFileName : "+jsonFileName); + File outPut = new File(jsonFileName); outPut.createNewFile(); diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java index c19695ea..098f9768 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java @@ -2,7 +2,11 @@ package itn.let.kakao.user.kakaoAt.service; import java.util.List; +import javax.servlet.http.HttpServletRequest; + +import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; import itn.let.kakao.kakaoComm.KakaoVO; +import itn.let.mail.service.StatusResponse; import itn.let.mjo.msgdata.service.MjonMsgReturnVO; public interface KakaoAlimTalkService { @@ -24,5 +28,7 @@ public interface KakaoAlimTalkService { //카카오 친구톡 전송 실패 환불리스트 조회 public void selectKakaoFtSentRefundList() throws Exception; + + StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception; } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java index 61f0cd6a..38a0032c 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java @@ -4,16 +4,27 @@ 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 javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import itn.com.cmm.LoginVO; +import itn.com.utl.fcc.service.EgovStringUtil; +import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; +import itn.let.kakao.kakaoComm.KakaoSendUtil; import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; +import itn.let.mail.service.StatusResponse; import itn.let.mjo.mjocommon.MjonHolidayApi; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msg.service.impl.MjonMsgDAO; @@ -24,9 +35,13 @@ import itn.let.mjo.msgholiday.service.MsgHolidayVO; import itn.let.mjo.msgholiday.service.impl.MsgHolidayDAO; import itn.let.mjo.pay.service.MjonPayService; import itn.let.mjo.pay.service.MjonPayVO; +import itn.let.module.base.PriceAndPoint; import itn.let.sym.site.service.JoinSettingVO; import itn.let.sym.site.service.impl.SiteManagerDAO; +import itn.let.uss.umt.service.EgovUserManageService; +import lombok.extern.slf4j.Slf4j; +@Slf4j @Service("kakaoAlimTalkService") public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements KakaoAlimTalkService{ @@ -53,6 +68,16 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements @Resource(name = "egovMjonCashIdGnrService") private EgovIdGnrService idgenMjonCashId; + + /** userManageService */ + @Resource(name = "userManageService") + private EgovUserManageService userManageService; + + @Autowired + private PriceAndPoint priceAndPoint; + + @Autowired + KakaoSendUtil kakaoSendUtil; //발신프로필 상태값 변경(삭제/복구 기능) @Override @@ -816,4 +841,119 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements } } } + + @Override + public StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception { + +// log.info(" :: [{}]", kakaoVO.toString()); + +// KakaoSendAdvcVO + + Map returnMap = new HashMap<>(); + + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() + ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() + : null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + if (userId.equals("")) { + return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다."); + } + + + /** + * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 현재 로그인 세션도 만료 처리함 + */ + boolean mberSttus = userManageService.selectUserStatusInfo(userId); + if (!mberSttus) { + request.getSession().invalidate(); + // UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때 + return new StatusResponse(HttpStatus.UNAUTHORIZED, + "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); + } + + + StatusResponse statusResponse = new StatusResponse(); + + +/** 카카오톡 전송 기본 설정 -------------------------------------------*/ + kakaoVO.setSendType("AT"); + kakaoVO.setMsgType("8"); + kakaoVO.setUserId(userId); + + +/** 전송금액 설정 --------------------------------------------------*/ +// KakaoVO priceSet = kakaoSendUtil.populateSendLists(kakaoVO, statusResponse); + + + + + + + + + + + + + + + + + + + + + + + +/** 카카오톡 전송 기본 설정 -------------------------------------------*/ + kakaoVO.setSendType("AT"); + kakaoVO.setMsgType("8"); + kakaoVO.setUserId(userId); + + + +// priceAndPoint.getBefCash(userId); + + + + + + return statusResponse; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java index bb32b5d1..4f4b5784 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java @@ -35,9 +35,11 @@ import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -57,6 +59,7 @@ import itn.com.cmm.util.MJUtil; import itn.com.cmm.util.StringUtil; import itn.com.utl.fcc.service.EgovStringUtil; import itn.let.kakao.kakaoComm.KakaoReturnVO; +import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; import itn.let.kakao.kakaoComm.KakaoSendUtil; import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave; @@ -65,6 +68,7 @@ import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfileCategory; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; +import itn.let.mail.service.StatusResponse; import itn.let.mjo.mjocommon.MjonCommon; import itn.let.mjo.mjocommon.MjonHolidayApi; import itn.let.mjo.msgdata.service.MjonMsgDataService; @@ -1057,6 +1061,16 @@ public class KakaoAlimTalkSendController { return modelAndView; } + @RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax_advc.do"}, method = RequestMethod.POST) + public ResponseEntity kakaoAlimTalkMsgSendAjax_advc( + @RequestBody KakaoVO kakaoVO, + HttpServletRequest request + ) throws Exception { + + System.out.println(" + kakaoAlimTalkMsgSendAjax_advc + "); + return ResponseEntity.ok().body(kakaoAlimTalkService.insertKakaoAtSandAjax_advc(kakaoVO, request)) ; + } + @RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax.do"}, method = RequestMethod.POST) // @ResponseBody public ModelAndView kakaoAlimTalkMsgSendAjax( @@ -1064,6 +1078,10 @@ public class KakaoAlimTalkSendController { HttpServletRequest request, @ModelAttribute("kakaoVO") KakaoVO kakaoVO ) throws Exception { + // 시작 시간 + long startTime = System.currentTimeMillis(); + + System.out.println(" :: kakaoAlimTalkMsgSendAjax :: "); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); @@ -1109,6 +1127,10 @@ public class KakaoAlimTalkSendController { /** 전송금액 설정 --------------------------------------------------*/ KakaoVO priceSet = kakaoSendUtil.kakaoSendPrice(kakaoVO); + if (true) { + throw new IllegalStateException("배열 크기 초과"); + } + if(priceSet.getResultCode() != null && priceSet.getResultCode().equals("2000")) { @@ -1400,6 +1422,17 @@ public class KakaoAlimTalkSendController { } catch (Exception e) { throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e); } + // 종료 시간 + long endTime = System.currentTimeMillis(); + +// 실행 시간 계산 (초 단위) + double executionTimeSeconds = (endTime - startTime) / 1000.0; + + System.out.println("실행 시간: " + String.format("%.3f", executionTimeSeconds) + "초"); + + + String returnTxt = String.format("%.3f", executionTimeSeconds) + "초"; + modelAndView.addObject("seconds", returnTxt); return modelAndView; } diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp index 391e7a03..c24c7336 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp @@ -550,7 +550,7 @@ function sendTemplateInfo(){ // 초기화 $('.varValList').remove(); - $('#bizForm #varNmList').val(''); +// $('#bizForm #varNmList').val(''); // 대체문자 전송 확인 @@ -613,133 +613,118 @@ function sendTemplateInfo(){ }else{ $('#bizForm #reqDate').val(""); } - + + var dataList = []; // 치환문자 있는 데이터 파씽 if($('#bizForm #txtReplYn').val() === 'Y'){ - fn_excelDataTransParsing(); + // fn_excelDataTransParsing(); // 치환문자 있는 수신자 리스트 - fn_transCallToListParsing(); + dataList = fn_transCallToListParsing(); }else{ - // 치환문자 없는 수신자 리스트 - fn_callToListParsing(); + // 치환문자 없는 수신자 리스트 + dataList = fn_callToListParsing(); } - $('#bizForm #senderKey').val($('#selectKakaoProfileList').val()); - $('#bizForm #templateCode').val($('#selectTemplateList').val()); + + + + // 채널 ID + $('#bizForm #senderKey').val($('#selectKakaoProfileList').val()); + // 채널 > 템플릿 + $('#bizForm #templateCode').val($('#selectTemplateList').val()); // 발신번호 $('#bizForm #callFrom').val(removeDash($('#callFromList option:selected').val())); - if(confirm("알림톡을 발송하시겠습니까?")){ - var spamChk = true; - //2023.09.06 알림톡 스팸체크 기능 제거요청으로 인한 주석처리 - /*var spamChk = false; - var spmData = new FormData(document.bizForm); - $.ajax({ - type: "POST" - , url: "/web/mjon/alimtalk/selectSpamKakaoAlimtalkMsgChkAjax.do" - , data: spmData - , dataType:'json' - , async: false - , processData: false - , contentType: false - , cache: false - , success: function (returnData, status) { - if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 - - if("fail" == returnData.result){ - alert(returnData.message); - return false; - }else if("loginFail" == returnData.result){ - alert(returnData.message); - return false; - }else if("spams" == returnData.result){ - alert("전송 내용에 스팸문구가 포함되어 있습니다.") - return false; - }else{ - spamChk = true; - return false; - } - - } else if(status== 'fail'){ - alert(returnData.message); - return false; - } - } - , error: function (e) { - alert("문자 발송에 실패하였습니다."); - console.log("ERROR : ", e); - return false; - } - }); */ - - if(spamChk){ - var data = new FormData(document.bizForm); - $.ajax({ - type: "POST" - , url: "/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax.do" - , data: data - , dataType: 'json' - , async: true - , processData: false - , contentType: false - , cache: false - , success: function (returnData, status) { - if(status == 'success'){ - if("loginFail" == returnData.result){ - - alert(returnData.message); - return false; - - }else if('fail' == returnData.result){ - - alert(returnData.message); - return false; - - }else if('authFail' == returnData.result){ - - alert(returnData.message); - location.reload(); - - } else if(status == 'success'){ - - var kakaoSendCnt = returnData.resultSts; - - $('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'}); - - //예약발송 건의 경우 결과 팝업 문구 변경 - if(reserYn == 'Y'){ - $('.pop_msg_success .msg_text').html("예약 성공 : "+ kakaoSendCnt + "건의
알림톡이 예약 되었습니다."); - }else{ - $('.pop_msg_success .msg_text').html("발송 성공 : "+ kakaoSendCnt + "건의
알림톡이 발송 되었습니다."); - } - - $('.mask').addClass('on'); - } - } - } - ,beforeSend : function(xmlHttpRequest) { - //로딩창 show - $('.loading_layer').addClass('active'); - } - ,complete : function(xhr, textStatus) { - //로딩창 hide - $('.loading_layer').removeClass('active'); - } - ,error: function (e) { - console.log("ERROR : ", e); - alert("카카오 알림톡 전송에 실패하였습니다."); - } - }); + // 폼 데이터를 배열로 직렬화 + var form = $('#bizForm'); + var formDataArray = form.serializeArray(); + + // 배열을 객체로 변환 + var formData = {}; + $.each(formDataArray, function(index, field) { + formData[field.name] = field.value; + }); + + // 빈 값 제거 (참고 코드 기반) + for (var key in formData) { + if (formData[key] === '' || formData[key] === null || formData[key] === undefined) { + delete formData[key]; } } + +// delete formData['varNmList']; + + // 선택된 데이터 추가 (varListMap) + formData["varListMap"] = dataList; + console.log('formData : ', formData); + + if(confirm("알림톡을 발송하시겠습니까?")){ + + + + $.ajax({ + type: "POST", + url: "/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax_advc.do", + data: JSON.stringify(formData), + contentType: 'application/json', + dataType: 'json', + success: function (data) { + console.log('data : ', data); +// if(data == 'success'){ + /* if("loginFail" == returnData.result){ + + alert(returnData.message); + return false; + + }else if('fail' == returnData.result){ + + alert(returnData.message); + return false; + + }else if('authFail' == returnData.result){ + + alert(returnData.message); + location.reload(); + + } else if(status == 'success'){ + + var kakaoSendCnt = returnData.resultSts; + + $('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'}); + + //예약발송 건의 경우 결과 팝업 문구 변경 + if(reserYn == 'Y'){ + $('.pop_msg_success .msg_text').html("예약 성공 : "+ kakaoSendCnt + "건의
알림톡이 예약 되었습니다."); + }else{ + $('.pop_msg_success .msg_text').html("발송 성공 : "+ kakaoSendCnt + "건의
알림톡이 발송 되었습니다."); + } + + $('.mask').addClass('on'); + } */ +// } + } + ,beforeSend : function(xmlHttpRequest) { + //로딩창 show + $('.loading_layer').addClass('active'); + } + ,complete : function(xhr, textStatus) { + //로딩창 hide + $('.loading_layer').removeClass('active'); + } + ,error: function (e) { + console.log("ERROR : ", e); + alert("카카오 알림톡 전송에 실패하였습니다."); + } + }); + } } /* * 치환문자 있는 수신자 목록 파씽 */ function fn_transCallToListParsing(){ - var callToList = []; +/* var callToList = []; // excel body $('.excelBody').each(function(indexBody, itemBody){ $(itemBody).find('.list_table_name').each(function(indexRow, itemRow){ @@ -750,7 +735,31 @@ function fn_transCallToListParsing(){ }); }); $('#bizForm #callToList').val(callToList); + */ + var dataList = []; + + var headers = []; + $('#excelHead .list_table_name').each(function() { + headers.push($(this).text().trim()); + }); + + $('.excelBody').each(function() { + var row = {}; + $(this).find('.list_table_name').each(function(index) { + var key = headers[index]; + var value = $(this).text().trim(); + if (index === 0) { + row["callToList"] = value; // 수신번호는 별도로 처리 + } else { + row[key] = value; // + } + }); + console.log(row) + dataList.push(row); + }); + + return dataList; } /* @@ -758,13 +767,25 @@ function fn_transCallToListParsing(){ */ function fn_callToListParsing(){ - var callToList = []; + var dataList = []; + /* var callToList = []; // excel body $('.phoneArea').each(function(index, item){ callToList.push($(item).text().replaceAll('\\t', '')); }); - $('#bizForm #callToList').val(callToList); + $('#bizForm #callToList').val(callToList); */ + + $('.phoneArea').each(function(index, item){ + var row = {}; + var value = $(item).text().replaceAll('\\t', '') + row["callToList"] = value; // 수신번호는 별도로 처리 + dataList.push(row); + }); + + return dataList; + + } @@ -777,9 +798,8 @@ function fn_excelDataTransParsing(){ // title 배열 var varHead = []; // 값 배열 - var varVal = []; +// var varVal = []; - var inputTag = ''; // excel title $('#excelHead').find('div').each(function(index, item){ @@ -803,7 +823,7 @@ function fn_excelDataTransParsing(){ $("#bizForm").append(inputTag.replace('$VAL$',varValTemp ).replace('$INDEX$',index )); }); */ - $('.excelBody').each(function(index, item){ +/* $('.excelBody').each(function(index, item){ var valLeng = $('#excelHead').find('.list_table_name').length-1; varValTemp = ''; @@ -821,7 +841,7 @@ function fn_excelDataTransParsing(){ console.log('varValTemp : ',varValTemp); varVal.push(varValTemp); }); - $('#bizForm #varValList').val(varVal); + $('#bizForm #varValList').val(varVal); */ } @@ -1136,8 +1156,8 @@ function checkNumber(event) { - - + + diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_advcbackup_20250310.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_advcbackup_20250310.jsp new file mode 100644 index 00000000..5825e610 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_advcbackup_20250310.jsp @@ -0,0 +1,1773 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ page import="itn.com.cmm.LoginVO" %> + + + + + + + + + + + +
+
+
+
Loading
+
+
+ + +
+ +
+ + + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
+ +<%--
--%> + + + + + + +
+ + +
+ + + + + + + + +
+ + + + + + + + + + + + + +
+ + +
+
+ + +
+
+ + +
+
+ +
+ + <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
채널ID + + + +
템플릿 + + + +
+
    +
  • * 변수명 설정파일을 다운로드 받으신 후 전송대상과 변수를 입력 후 업로드해주세요.
  • +
  • * 엑셀서식은 반드시 텍스트 서식으로 등록해주세요.
  • +
  • * 한번에 전송가능한 최대 발송건은 500건입니다.
  • +
  • * 배송조회시 운송장 번호는 숫자만 등록해주세요.
  • +
+ + +
+
받는사람 +
+
+ + + +
+ + * 중복번호는 한번만 발송됩니다. + +
+ + * 한번에 전송가능한 최대 발송건은 500건 입니다. + +
+
+
+
+
+ + +
+
+

휴대폰

+ + +
+ + + + + +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+

휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능

+ (예시) 010-1234-0001(O) / 010-123-0001(X) +
+
+
+
+
+
+ + +
+
+

0건 / 중복 0

+ +
+
+
+
+
+ + + + +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

발송금액 :

+ +
+

0.0

+
+
+ +
+ + + + + + +
+
+
+
+
+

대체문자

+ +
+
+ + + + + + + + + + + + + + + + +
발신번호 + + + +
내용 +
+
+ +
    + + + +
    +
    +

    + 0 / + + 90byte +

    + 단문 +
    +
    +
    +
    + + + + + + +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +

    + +
    +
    + 알림톡 도착 +
    +
    +

    템플릿을 선택해 주세요

    +
    +
    + +
    +
    + +
    + +
    +
    +

    ※ 단말기 설정에 따라 다르게 보일 수 있습니다

    +

    +
    +
    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    + + +
    +
    +
    +
    + 날짜 : +
    + +
    + +
    + + + +
    +
    +
    + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    + +
    + + + +
    + +
    + + + + + +
    +
    + +
    +
    +
    + + + +
    + +
    + + +
    +
    + + +