친구톡 발송 처리 1차 개발 완료

- json 파일 생성 제외 전송 부분 완료
 - 환불 처리 미 적용
This commit is contained in:
rosewiper 2024-01-17 16:09:32 +09:00
parent 2627b4a1c7
commit eb1d385d15
6 changed files with 838 additions and 38 deletions

View File

@ -150,6 +150,134 @@ public class KakaoSendUtil {
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 : 이호영
@ -287,6 +415,84 @@ public class KakaoSendUtil {
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.kakaoApiJsonSave(kakaoVO, varValInfo);
// String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, kakaoVO.getVarValList().get(count));
setSendMsgVO.setBizJsonName(jsonFileName); //json 파일명
}
kakaoSendList.add(setSendMsgVO);
}
kakaoVO.setKakaoSendList(kakaoSendList);
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
}
return kakaoVO;
}
public String kakaoSendMsgTest(KakaoVO kakaoVO) throws Exception {
String templateContent = "";
try {
@ -343,6 +549,15 @@ public class KakaoSendUtil {
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;
}
/*
* 카카오 친구톡 치환 내용에 대한 변환 처리
*

View File

@ -15,6 +15,9 @@ public interface KakaoAlimTalkService {
//카카오 알림톡 발신
public MjonMsgReturnVO insertKakaoAtSandAjax(KakaoVO kakaoVO) throws Exception;
//카카오 친구톡 발신
public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception;
//카카오 알림톡 전송 실패 환불리스트 조회
public void selectKakaoAtSentRefundList() throws Exception;

View File

@ -331,6 +331,267 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
}
return returnVO;
}
//카카오 친구톡 발신
@Override
public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception {
MjonMsgReturnVO returnVO = new MjonMsgReturnVO();
try {
String agentCode = "04"; // 다우기술 agent 코드 고정
String msgType = "9"; // 카카오 알림톡 전송 코드 : 8번
int totCnt = 1; // 문자 리스트 추가 수량
int resultCnt = 0; // 최종전송 수량
int callToCnt = kakaoVO.getCallToList().length; // 전체 받는사람 건수
//Controller에서 전달 받은 분할 시간 정보 리스트
List<String> dividDayList = kakaoVO.getDividDay();
//String sendTime = kakaoVO.getReqDate();
String[] phoneList = kakaoVO.getCallToList(); //받는사람 연락처 리스트
//카카오 알림톡 전송 리스트
List<KakaoVO> kakaoFtSendList = new ArrayList<KakaoVO>();
/** 카카오 알림톡 전송 리스트 생성 (시작)-------------------------------------------*/
for(int i = 0; i < callToCnt; i++) {
KakaoVO kakaoSandInfo = new KakaoVO(); // 전송설정VO
kakaoSandInfo.setMsgId(idgenMsgId.getNextStringId()); // 문자 Id 설정
kakaoSandInfo.setMsgGroupId(kakaoVO.getMsgGroupId()); // 문자 그룹ID 설정
kakaoSandInfo.setUserId(kakaoVO.getUserId()); // 사용자 ID
kakaoSandInfo.setAgentCode(agentCode); // 전송 agent 설정
kakaoSandInfo.setSenderKey(kakaoVO.getSenderKey());
kakaoSandInfo.setTemplateCode(kakaoVO.getTemplateCode());
kakaoSandInfo.setCallTo(phoneList[i]); // 받는사람 전화번호
kakaoSandInfo.setCallFrom(kakaoVO.getCallFrom()); // 보내는사람 전화전호
kakaoSandInfo.setMsgType(msgType); // 문자전송 타입 설정
List<KakaoVO> kakaoSendMsgList = kakaoVO.getKakaoSendList();
/**문자내용 치환 처리 (시작) --------------------------------------------*/
kakaoSandInfo.setTemplateContent(kakaoSendMsgList.get(i).getTemplateContent()); //템플릿 내용 또는 치환 템플릿 내용
/**문자내용 치환 처리 (끝) ---------------------------------------------*/
kakaoSandInfo.setTemplateTitle(kakaoSendMsgList.get(i).getTemplateTitle());
/**json파일 여부 (시작) --------------------------------------------*/
kakaoSandInfo.setBizJsonYn(kakaoVO.getBizJsonYn());
if(kakaoVO.getBizJsonYn().equals("Y")){
kakaoSandInfo.setBizJsonName(kakaoSendMsgList.get(i).getBizJsonName());
}
/**json파일 여부 (끝) ---------------------------------------------*/
/**대체문자 처리 (시작) --------------------------------------------*/
kakaoSandInfo.setSubMsgSendYn(kakaoVO.getSubMsgSendYn()); // 대체문자 전송여부 설정
if(kakaoVO.getSubMsgSendYn().equals("Y")) {
kakaoSandInfo.setSubMsgType(kakaoSendMsgList.get(i).getSubMsgType()); // 대체문자 전송 타입
kakaoSandInfo.setSubMsgTxt(kakaoSendMsgList.get(i).getSubMsgTxt()); // 대체문자 전송 내용
}
/**대체문자 처리 (끝) ---------------------------------------------*/
/**전송시간 설정 (시작)------------------------------------------------*/
if(!kakaoVO.getReserveYn().equals("N")) {
/** 예약 발송 설정 */
//분할 발송을 체크 경우
if(kakaoVO.getDivideChk().equals("Y")) {
kakaoSandInfo.setReqDate(dividDayList.get(i)); //분할 문자 예약 시간 입력해주기
}else {
kakaoSandInfo.setReqDate(kakaoVO.getReqDate());
}
}else {
/** 즉시 발송 설정 */
Date now = new Date();
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
kakaoVO.setReqDate(sdFormat.format(now));
kakaoSandInfo.setReqDate(sdFormat.format(now));
}
if(kakaoVO.getAtSmishingYn().equals("Y")) {
String sandDate = "";
if(kakaoVO.getDivideChk().equals("Y")) {
//분할 문자 예약 시간 입력해주기
sandDate = dividDayList.get(i);
}else {
//예약 시간 입력해주기
sandDate = kakaoVO.getReqDate();
}
if(!kakaoVO.getReserveYn().equals("N")) {
/** 예약 발송 설정 */
if (i == 0) {
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = sdFormat.parse(sandDate);
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date); // 시간 설정
cal1.add(Calendar.MINUTE, 30); // 30분 연산
String reqDate = sdFormat.format(cal1.getTime());
System.out.println("@@@@@@@@@@@@@@ reqDate : "+reqDate);
kakaoVO.setReqDate(reqDate);
kakaoSandInfo.setReqDate(reqDate);
}
else {
if(kakaoVO.getDivideChk().equals("Y")) {
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = sdFormat.parse(sandDate);
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date); // 시간 설정
cal1.add(Calendar.MINUTE, 30); // 30분 연산
String reqDate = sdFormat.format(cal1.getTime());
System.out.println("@@@@@@@@@@@@@@ reqDate : "+reqDate);
kakaoVO.setReqDate(reqDate);
kakaoSandInfo.setReqDate(reqDate);
}
}
}else {
/** 즉시 발송 설정 */
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = sdFormat.parse(sandDate);
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date); // 시간 설정
cal1.add(Calendar.MINUTE, 30); // 30분 연산
String reqDate = sdFormat.format(cal1.getTime());
System.out.println("@@@@@@@@@@@@@@ reqDate : "+reqDate);
kakaoVO.setReqDate(reqDate);
kakaoSandInfo.setReqDate(reqDate);
}
}
/**전송시간 설정 (끝)------------------------------------------------*/
/**카카오 전송 데이터 추가*/
kakaoFtSendList.add(kakaoSandInfo);
int instCnt = 0; // DB등록 완료 수량
//지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌
if(totCnt == callToCnt) {
if(kakaoFtSendList.size() > 0) {
instCnt = kakaoAlimTalkDAO.insertKakaoAtDataInfo(kakaoFtSendList);
}
// 디비 입력 건수 저장하기
resultCnt = resultCnt + instCnt;
}else {
}
totCnt++;
}
/** 카카오 알림톡 전송 리스트 (종료)-------------------------------------------*/
/**
* 1. 문자 발송 캐시 차감 ----------------------------------------------
* 2. 문자 그룹 테이블 등록 --------------------------------------------
*/
//문자 발송 캐시 차감 해주기
MjonPayVO mjonPayVO = new MjonPayVO();
MjonMsgVO mjonMsgVO = new MjonMsgVO();
//1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다.
//문자 발송 그룹 데이블에 추가
if(resultCnt > 0) {
/** 발송 캐시 차감---------------------------------------------*/
int totSendCnt = kakaoVO.getCallToList().length;
Float eachPrice = Float.parseFloat(kakaoVO.getEachPrice());
Float totPrice = eachPrice * resultCnt;
String strTotPrice = String.format("%.1f", totPrice);
mjonMsgVO.setTotPrice(strTotPrice);//현재 합산 금액 셋팅
mjonPayVO.setCashId(idgenMjonCashId.getNextStringId());
mjonPayVO.setUserId(kakaoVO.getUserId());
mjonPayVO.setCash(-Float.parseFloat(strTotPrice));
mjonPayVO.setFrstRegisterId(kakaoVO.getUserId());
mjonPayVO.setMemo("카카오 친구톡 총 "+totSendCnt+"건 중 " + resultCnt + "건 발송");
mjonPayVO.setMsgGroupId(kakaoVO.getMsgGroupId());
mjonPayService.insertCash(mjonPayVO); //캐시차감
mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트
/** 그룹 테이블 등록-------------------------------------------*/
mjonMsgVO.setUserId(kakaoVO.getUserId());
mjonMsgVO.setMsgGroupId(kakaoVO.getMsgGroupId());
mjonMsgVO.setCallFrom(kakaoVO.getCallFrom());
mjonMsgVO.setSmsTxt(kakaoVO.getTemplateContent());
mjonMsgVO.setReqDate(kakaoVO.getReqDate());
mjonMsgVO.setMsgGroupCnt(Integer.toString(resultCnt));
mjonMsgVO.setMsgType(msgType);
mjonMsgVO.setAgentCode(agentCode);
mjonMsgVO.setEachPrice(kakaoVO.getEachPrice());
mjonMsgVO.setReserveYn(kakaoVO.getReserveYn());
mjonMsgVO.setBefCash(kakaoVO.getBefCash());
mjonMsgVO.setBefPoint(kakaoVO.getBefPoint());
mjonMsgVO.setKakaoSubMagOrgnlTxt(kakaoVO.getKakaoSubMagOrgnlTxt());
mjonMsgVO.setAtDelayYn(kakaoVO.getAtSmishingYn());
if(kakaoVO.getBizJsonYn().equals("Y")) {
mjonMsgVO.setFileCnt("1");
}else {
mjonMsgVO.setFileCnt("0");
}
mjonMsgVO.setDelayYn(kakaoVO.getDelayYn());
// 등록되어있는 그룹데이터가 있는지 조회
int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO);
// 등록되어 있는 그룹데이터가 없으면 insert, 있으면 update를 진행한다.
if(msgGroupDataCnt < 1) {
mjonMsgDAO.insertGroupMsgData(mjonMsgVO);
kakaoAlimTalkDAO.insertKakaoSendPrice(kakaoVO);
}else {
mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO);
}
}
returnVO.setSendMsgCnt(Integer.toString(resultCnt));
} catch (Exception e) {
// 실패
returnVO.setSendMsgCnt(Integer.toString(0)); //발송 건수 저장
returnVO.setSendMsgBlockCnt(Integer.toString(0)); //수신차단 건수 저장
returnVO.setAgentCode("01");
System.out.println("=========================================================================");
System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfo ERROR !!! : " + e);
System.out.println("=========================================================================");
return returnVO;
}
return returnVO;
}
@Override
public void selectKakaoAtSentRefundList() throws Exception {

View File

@ -4,11 +4,13 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@ -17,6 +19,7 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO;
@ -26,16 +29,22 @@ import itn.let.kakao.kakaoComm.KakaoButtonVO;
import itn.let.kakao.kakaoComm.KakaoSendUtil;
import itn.let.kakao.kakaoComm.KakaoVO;
import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService;
import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.msgdata.service.MjonMsgDataVO;
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
import itn.let.mjo.symbol.service.MjonSymbolService;
import itn.let.mjo.symbol.service.MjonSymbolVO;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageVO;
@Controller
public class KakaoFriendsTalkSendController {
@Resource(name = "egovMjonMsgGroupIdGnrService")
private EgovIdGnrService idgenMjonMsgGroupId;
/** EgovMessageSource */
@Resource(name="egovMessageSource")
EgovMessageSource egovMessageSource;
@ -52,6 +61,13 @@ public class KakaoFriendsTalkSendController {
@Resource(name = "kakaoFriendsTalkTemplateService")
private KakaoFriendsTalkTemplateService kakaoFtTemplateService;
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
@Resource(name = "kakaoAlimTalkService")
private KakaoAlimTalkService kakaoAlimTalkService;
@Autowired
KakaoSendUtil kakaoSendUtil;
@ -148,13 +164,8 @@ public class KakaoFriendsTalkSendController {
KakaoVO resultTemplateVO = new KakaoVO();
if(friendId != null) {
System.out.println("+++++++++++++++++++++++ friendId ::: "+friendId);
resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO);
}
model.addAttribute("resultTemplateVO", resultTemplateVO);
@ -202,33 +213,6 @@ public class KakaoFriendsTalkSendController {
}
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"})
public ModelAndView kakaoFriendsTalkMsgSendAjax(
@ModelAttribute("kakaoVO") KakaoVO kakaoVO
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
int sendCount = 0; //발송결과 건수
try {
/** 카카오톡 전송 기본 설정 -------------------------------------------*/
/** 카카오톡 전송 금액 설정 -------------------------------------------*/
/** 카카오톡 전송 분할 설정 -------------------------------------------*/
/** 카카오톡 예약 전송 설정 -------------------------------------------*/
/** 카카오톡 전송 메시지 설정 ------------------------------------------*/
/** 카카오톡 발송 처리 -----------------------------------------------*/
}catch (Exception e) {
System.out.println(" kakaoFriendsTalkMsgSendAjax Error ::: " + e);
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
modelAndView.addObject("result", "fail");
return modelAndView;
}
return modelAndView;
}
/**
* @Method Name : selectSpamKakaoFriendsTalkMsgChkAjax
* @작성일 : 2024. 1. 15.
@ -325,10 +309,282 @@ public class KakaoFriendsTalkSendController {
*/
@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"})
public ModelAndView kakaoFriendsTalkMsgSendAjax(ModelMap model
, HttpServletRequest request
, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
int resultSts = 0; //발송결과 건수
int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
try {
if(userId == "") {
modelAndView.addObject("message", "로그인 후 이용이 가능합니다.");
modelAndView.addObject("result", "loginFail");
return modelAndView;
}else {
/**
* 회원 정지된 상태이면 알림톡 발송이 안되도록 처리함
* 현재 로그인 세션도 만료 처리함
* */
boolean mberSttus = userManageService.selectUserStatusInfo(userId);
if(!mberSttus) {
modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
modelAndView.addObject("result", "authFail");
request.getSession().invalidate();
return modelAndView;
}
}
/** 카카오톡 전송 기본 설정 -------------------------------------------*/
kakaoVO.setSendType("FT");
kakaoVO.setMsgType("9");
kakaoVO.setUserId(userId);
/** 전송금액 설정 --------------------------------------------------*/
KakaoVO priceSet = kakaoSendUtil.kakaoFTSendPrice(kakaoVO);
if(priceSet.getResultCode() != null && priceSet.getResultCode().equals("2000")) {
modelAndView.addObject("message", "대체문자 치환 후 전송 문자 길이를 초과하였습니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
BigDecimal befCash = new BigDecimal(priceSet.getBefCash()).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal totMsgPrice = new BigDecimal(priceSet.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN);
kakaoVO.setEachPrice(priceSet.getEachPrice());
kakaoVO.setBefCash(befCash.toString());
kakaoVO.setTotPrice(totMsgPrice.toString());
//현재 보유 금액이 발송 문자 금액보다 경우만 문자 발송
//BigDecimal 비교 연산
// befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송
if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice,
kakaoVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); // 문자 그룹ID 설정
/** 카카오톡 전송 분할 설정 ----------------------------------------------*/
String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열
List<String[]> tempVarValList = new ArrayList<String[]>(); //임시 변수 리스트 저장용
String[] phoneList = kakaoVO.getCallToList();
List<String[]> varValList = null;
//치환문자 포함 여부
if(kakaoVO.getTxtReplYn().equals("Y")) {
varValList = kakaoVO.getVarValList();
}
System.out.println("+++++++++++++++++ 회원 스미싱 의심 온/오프 ::: "+kakaoVO.getAtSmishingYn());
//스팸 스미싱 여부 - 내용에 스팸 문자열 유무 체크
if(kakaoVO.getSpamStatus().equals("Y") || kakaoVO.getAtSmishingYn().equals("Y")) {
kakaoVO.setAtSmishingYn("Y");
}else {
kakaoVO.setAtSmishingYn("N");
}
//스미싱 의심이 아니면 delayYn 셋팅
if(kakaoVO.getAtSmishingYn().equals("N")) {
kakaoVO.setDelayYn("N");
}else {
kakaoVO.setDelayYn("Y");
}
//분할발송 여부 - 친구톡은 분할 발송이 없기애 N으로 픽스
kakaoVO.setDivideChk("N");
int callToListCnt = kakaoVO.getCallToList().length;
kakaoVO.setTotalCallCnt(callToListCnt);
/** 예약 문자인 경우 설정 ----------------------------------------------*/
//분할문자 시간에 간격시간 더해주기
String dividDay = null;
Calendar cal = Calendar.getInstance();
//예약시간 변환
SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
int turmMin = 0;
int totalCallCnt = 0; // 수신자 전체 갯수
int divideCnt = 0;
int count = 1; //분할 카운트
if(!kakaoVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅
Date toDate = transFormat.parse(kakaoVO.getReqDate());
cal.setTime(toDate); //예약 시간 캘린터 변수에 입력
//turmMin = Integer.parseInt(kakaoVO.getDivideTime()); //분할발송 시간 간격
//dividDay = transFormat.format(cal.getTime());
totalCallCnt = kakaoVO.getCallToList().length; // 수신자 전체 갯수
//divideCnt = Integer.parseInt(kakaoVO.getDivideCnt()); //분할 발송 갯수
}
//분할 예약 시간 저장 리스트 생성
List<String> dividDayList = new ArrayList<String>();
if(callToListCnt > 200) {
int sendCnt = 0;
/** 카카오톡 전송 200개 이상일때 ----------------------------------------------*/
for(int i =0; i < callToListCnt; i++) {
//분할 발송을 체크 경우
/*if(kakaoVO.getDivideChk().equals("Y")) {
if(count > divideCnt) {
count = 1;
cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다.
dividDay = transFormat.format(cal.getTime());
dividDayList.add(dividDay);
count++;
}else {
dividDayList.add(dividDay);
count++;
}
}*/
if((i < callToListCnt -1) && sendCnt == 199) {
tempPhoneList[sendCnt] = phoneList[i];
if(varValList != null) {
tempVarValList.add(varValList.get(i));
}
List<String> arrPhoneList = new ArrayList<String>();
for(String temp : tempPhoneList) {
if(temp != null) {
arrPhoneList.add(temp);
}
}
String[] sendPhoneList = new String[arrPhoneList.size()];
for(int j=0; j< arrPhoneList.size(); j++) {
sendPhoneList[j] = arrPhoneList.get(j);
}
/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/
kakaoVO.setCallToList(sendPhoneList);
kakaoVO.setVarValList(tempVarValList);
KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO);
kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList());
/** 카카오톡 발송 처리 --------------------------------------------------*/
kakaoVO.setDividDay(dividDayList);
MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO);
resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt());
//전송 초기화
sendCnt = 0;
Arrays.fill(tempPhoneList, null);
tempVarValList.clear();
dividDayList.clear();
}else if((i == callToListCnt -1) && sendCnt < 200){//200개의 마지막일 경우 처리
tempPhoneList[sendCnt] = phoneList[i];
if(varValList != null) {
tempVarValList.add(varValList.get(i));
}
List<String> arrPhoneList = new ArrayList<String>();
for(String temp : tempPhoneList) {
if(temp != null) {
arrPhoneList.add(temp);
}
}
String[] sendPhoneList = new String[arrPhoneList.size()];
for(int j=0; j< arrPhoneList.size(); j++) {
sendPhoneList[j] = arrPhoneList.get(j);
}
/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/
kakaoVO.setCallToList(sendPhoneList);
kakaoVO.setVarValList(tempVarValList);
KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO);
kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList());
kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt());
/** 카카오톡 발송 처리 --------------------------------------------------*/
kakaoVO.setDividDay(dividDayList);
MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO);
resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt());
}else {//198개가 될때까지 배열에 데이터를 쌓는다
tempPhoneList[sendCnt] = phoneList[i];
if(varValList != null && varValList.get(i).length > 0) {
tempVarValList.add(varValList.get(i));
}
sendCnt++;
}
}
}else {
/** 카카오톡 전송 200개 미만일때 ----------------------------------------------*/
//분할 발송을 체크 경우
/*if(kakaoVO.getDivideChk().equals("Y")) {
for(int i =0; i < callToListCnt; i++) {
if(count > divideCnt) {
count = 1;
cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다.
dividDay = transFormat.format(cal.getTime());
dividDayList.add(dividDay);
count++;
}else {
dividDayList.add(dividDay);
count++;
}
}
}*/
/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/
KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO);
kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList());
kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt());
/** 카카오톡 발송 처리 --------------------------------------------------*/
kakaoVO.setDividDay(dividDayList);
MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO);
resultSts = Integer.parseInt(returnVO.getSendMsgCnt());
}
/** 카카오톡 결과 처리 --------------------------------------------------*/
}else {
modelAndView.addObject("message", "친구톡 발송에 필요한 보유 잔액이 부족 합니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
} catch (Exception e) {
System.out.println("kakaoFriendsTalkMsgSendAjax Controller Error !!!! "+e);
}
System.out.println("++++++++++++++++++++++ senderKey ::: "+kakaoVO.getSenderKey());
System.out.println("++++++++++++++++++++++ imageType ::: "+kakaoVO.getImageType());
System.out.println("++++++++++++++++++++++ imageTitle ::: "+kakaoVO.getImageTitle());
@ -386,6 +642,8 @@ public class KakaoFriendsTalkSendController {
System.out.println("++++++++++++++++ 예약 시간 ::: "+kakaoVO.getReqDate());
System.out.println("++++++++++++++++ json 필요 유무 ::: "+kakaoVO.getBizJsonYn());
modelAndView.addObject("result", "success");

View File

@ -58,8 +58,6 @@ function fnLinkPageTopTab(tabInfo){
}else if(tabInfo == 'tabFriend'){
/* alert("친구톡 메뉴는 현재 개발이 진행 중입니다."); */
$("input[name=friendId]").val("");
url = "<c:url value='/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do'/>";
}else if(tabInfo == 'tabAlimtalkIntrd'){
@ -68,8 +66,10 @@ function fnLinkPageTopTab(tabInfo){
}
form.action =url;
form.submit();
//form.action =url;
//form.submit();
//메뉴 선택시 폼 데이터로 인한 오류 발생하여 location으로 변경 - 20240117 우영두
location.href=url;
}

View File

@ -761,6 +761,19 @@ function fn_noTimeSend(){
//친구톡 데이터 전송 처리
function fn_sendMsgData(){
var senderKey = $("#selectAgentCode option:checked").val();
if(senderKey == ''){
alert("채널ID를 선택해 주세요.");
return false;
}else{
$("#inputSenderKey").val(senderKey);
}
//이미지 첨부 체크
var imgChk = $("input[name=img_file_add]:checked").val();
if(imgChk == 'I' || imgChk == 'W'){
@ -792,6 +805,16 @@ function fn_sendMsgData(){
$("#imageType").val(imgChk);
//json 파일 필요 유무 셋팅
$("#bizJsonYn").val("Y");
}
//템플릿 버튼 갯수 체크
var buttonCnt = $(".btn_kakao_type").length;
if(buttonCnt > 0){
//json 파일 필요 유무 셋팅
$("#bizJsonYn").val("Y");
}
//친구톡 내용 체크
@ -815,7 +838,6 @@ function fn_sendMsgData(){
}
//수신번호 리스트 체크하기
var numCnt = 0;
@ -1308,8 +1330,43 @@ function fn_subMsgCheck(){
alert("대체문자 내용을 입력해 주세요.");
return false;
}else{//대체문자에 치환문자 여부 체크
var smsTxtArea = $("#smsTxtArea").val();
var replStatus = false;
if(smsTxtArea.indexOf("\#{이름}") > -1){
replStatus = true;
}
if(smsTxtArea.indexOf("\#{1}") > -1){
replStatus = true;
}
if(smsTxtArea.indexOf("\#{2}") > -1){
replStatus = true;
}
if(smsTxtArea.indexOf("\#{3}") > -1){
replStatus = true;
}
if(smsTxtArea.indexOf("\#{4}") > -1){
replStatus = true;
}
if(replStatus){
$("#subMsgTxtReplYn").val("Y");
}else{
$("#subMsgTxtReplYn").val("N");
}
$("#subMsgTxt").val(smsTxtArea);
}
return true;
}
@ -1425,6 +1482,7 @@ function msgSuccessClose(obj){
<!-- 스팸 문구 유무 -->
<input type="hidden" id="spamStatus" name="spamStatus" value="N"/>
<input type="hidden" id="atSmishingYn" name="atSmishingYn" value="<c:out value='${atSmishingYn}' />"/>
<!-- 오류 체크 -->
<input type="hidden" id="errorChk" name="errorChk" value="N"/>
@ -1432,7 +1490,8 @@ function msgSuccessClose(obj){
<!-- 대체문자 여부 -->
<input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N"/>
<input type="hidden" id="subMsgType" name="subMsgType" value="SMS"/>
<input type="hidden" id="subMsgTxtReplYn" name="subMsgTxtReplYn" value="N"/>
<input type="hidden" id="subMsgTxt" name="subMsgTxt" value=""/>
<!-- 발신번호정보 -->
<input type="hidden" id="callFrom" name="callFrom" value=""/>
@ -1442,6 +1501,10 @@ function msgSuccessClose(obj){
<input type="hidden" id="eachPrice" name="eachPrice" value=""/>
<input type="hidden" id="totPrice" name="totalPrice" value=""/>
<!-- 친구톡 발송 json 파일 필요 유무 -->
<input type="hidden" id="bizJsonYn" name="bizJsonYn" value="N"/>
<div class="send_general friend_talk_wrap kakao_wrap">
<div class="send_left">
<table class="tType1">