Merge branch 'master' into kakaoFT
This commit is contained in:
commit
454fcd96bf
@ -309,4 +309,38 @@ public class MjonCommon {
|
||||
|
||||
}
|
||||
|
||||
|
||||
public String getCreateMsgUserIdgen(String subUserId, String lastId) throws Exception{
|
||||
|
||||
String returnId = "";
|
||||
String[] splitId = lastId.split("_");
|
||||
|
||||
if(splitId.length > 0) {
|
||||
|
||||
int lastNum = Integer.parseInt(splitId[1]);
|
||||
|
||||
lastNum = lastNum + 1;
|
||||
|
||||
String tmpLastNum = Integer.toString(lastNum);
|
||||
|
||||
int zeroPlusCnt = 14 - tmpLastNum.length();
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(subUserId + "_");
|
||||
|
||||
for(int i=0; i< zeroPlusCnt; i++) {
|
||||
|
||||
sb.append('0');
|
||||
|
||||
}
|
||||
|
||||
sb.append(tmpLastNum);
|
||||
|
||||
returnId = sb.toString();
|
||||
|
||||
}
|
||||
|
||||
return returnId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -206,6 +206,8 @@ public class MjonMsgVO extends ComDefaultVO{
|
||||
private double failSendPrice;
|
||||
private double totSuccSendPrice;
|
||||
|
||||
private String bookmarkYn = "N";
|
||||
|
||||
public String getSearchDelayMsgYn() {
|
||||
return searchDelayMsgYn;
|
||||
}
|
||||
@ -1638,4 +1640,10 @@ public class MjonMsgVO extends ComDefaultVO{
|
||||
public void setTotSuccSendPrice(double totSuccSendPrice) {
|
||||
this.totSuccSendPrice = totSuccSendPrice;
|
||||
}
|
||||
public String getBookmarkYn() {
|
||||
return bookmarkYn;
|
||||
}
|
||||
public void setBookmarkYn(String bookmarkYn) {
|
||||
this.bookmarkYn = bookmarkYn;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,6 +2,8 @@ package itn.let.mjo.msgcampain.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||
|
||||
public interface MjonCandidateService {
|
||||
|
||||
// 선거문자 후보자 정보 불러오기
|
||||
@ -52,4 +54,7 @@ public interface MjonCandidateService {
|
||||
//선거문자 20건 전송 후 CallTo 상태값 전송 완료로 변경 처리
|
||||
public int updateMsgTWCallToListSendFlag(MjonCandidateTWVO mjonCandidateTWVO) throws Exception;
|
||||
|
||||
//선거문자 대량 전송 주소록 그룹 정보 조회하기
|
||||
public List<String> selectAddrGrpHGList(MjonMsgVO mjonMsgVO) throws Exception;
|
||||
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import java.util.List;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||
import itn.let.mjo.msgcampain.service.MjonCandidateTWVO;
|
||||
import itn.let.mjo.msgcampain.service.MjonCandidateVO;
|
||||
|
||||
@ -208,4 +209,21 @@ public class MjonCandidateDAO extends EgovAbstractDAO {
|
||||
return resultCnt;
|
||||
}
|
||||
|
||||
//선거문자 대량 전송 주소록 그룹 정보 조회하기
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<String> selectAddrGrpHGList(MjonMsgVO mjonMsgVO) throws Exception{
|
||||
|
||||
List<String> resultList = new ArrayList<String>();
|
||||
|
||||
try {
|
||||
|
||||
resultList = (List<String>) list("mjonCandidateDAO.selectAddrGrpHGList",mjonMsgVO);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("selectAddrGrpHGList DAO Error!!! " + e);
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@ import javax.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||
import itn.let.mjo.msgcampain.service.MjonCandidateService;
|
||||
import itn.let.mjo.msgcampain.service.MjonCandidateTWVO;
|
||||
import itn.let.mjo.msgcampain.service.MjonCandidateVO;
|
||||
@ -293,4 +294,42 @@ public class MjonCandidateServiceImpl extends EgovAbstractServiceImpl implement
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
//선거문자 대량 전송 주소록 그룹 정보 조회하기
|
||||
public List<String> selectAddrGrpHGList(MjonMsgVO mjonMsgVO) throws Exception{
|
||||
|
||||
List<String> resultList = new ArrayList<String>();
|
||||
|
||||
try {
|
||||
|
||||
for(String addrId : mjonMsgVO.getCallToList()) {
|
||||
|
||||
MjonMsgVO tmpMsgVO = new MjonMsgVO();
|
||||
tmpMsgVO.setUserId(mjonMsgVO.getUserId());
|
||||
tmpMsgVO.setAddrGrpId(addrId);
|
||||
|
||||
List<String> tmpAddrList = new ArrayList<String>();
|
||||
System.out.println("++++++++++++++ addrId ::: "+addrId);
|
||||
|
||||
if(addrId.equals("group1") || addrId.equals("bookmark")) {
|
||||
|
||||
tmpMsgVO.setAddrGrpNm(addrId);
|
||||
|
||||
}
|
||||
|
||||
tmpAddrList = mjonCandidateDAO.selectAddrGrpHGList(tmpMsgVO);
|
||||
|
||||
resultList.addAll(tmpAddrList);
|
||||
|
||||
}
|
||||
|
||||
//resultList = mjonCandidateDAO.selectAddrGrpHGList(mjonMsgVO);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("selectAddrGrpHGList Service Imple Error!!! " + e);
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1733,11 +1733,13 @@ public class MjonMsgCampainDataController {
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/msgcampain/selectAddrGroupListAjax.do"})
|
||||
@RequestMapping(value= {"/web/mjon/msgcampain/selectAddrGroupListAjax.do" , "/web/mjon/msgcampain/huge/selectAddrGroupListAjax.do"
|
||||
})
|
||||
public String selectAddrGroupListAjax(
|
||||
@ModelAttribute("searchVO") AddrGroupVO addrGroupVO,
|
||||
AddrVO addrVO,
|
||||
ModelMap model,
|
||||
HttpServletRequest request,
|
||||
RedirectAttributes redirectAttributes) throws Exception {
|
||||
|
||||
//로그인 권한정보 불러오기
|
||||
@ -1783,7 +1785,14 @@ public class MjonMsgCampainDataController {
|
||||
|
||||
model.addAttribute("addrGroupList", addrGroupList);
|
||||
|
||||
return "web/msgcampain/addr/MsgAddrGroupListAjax";
|
||||
String jspUrl = "web/msgcampain/addr/MsgAddrGroupListAjax";
|
||||
|
||||
if("/web/mjon/msgcampain/huge/selectAddrGroupListAjax.do".equals(request.getRequestURI())) {
|
||||
|
||||
jspUrl = "web/msgcampain/addr/huge/MsgHGAddrGroupListAjax";
|
||||
}
|
||||
|
||||
return jspUrl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -17,6 +17,9 @@ public interface MjonMsgDataService {
|
||||
// 중계사 문자 내용 입력
|
||||
public MjonMsgReturnVO insertMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception;
|
||||
|
||||
//대량 문자 데이터 배치 입력 처리
|
||||
public MjonMsgReturnVO insertMsgDataInfoBatch(MjonMsgVO mjonMsgVO) throws Exception;
|
||||
|
||||
// 중계사 문자 내용 입력(성능테스트용)
|
||||
public MjonMsgReturnVO insertMsgTestDataInfo(MjonMsgVO mjonMsgVO
|
||||
, int i_nRate
|
||||
@ -167,4 +170,7 @@ public interface MjonMsgDataService {
|
||||
// 문자 상세정보 => 재전송용
|
||||
public List<MjonMsgDataVO> selectMjMsgListByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception;
|
||||
|
||||
//대용량 문자 전송시 사용자 마지막 PK 값 조회하기
|
||||
public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception;
|
||||
|
||||
}
|
||||
|
||||
@ -346,4 +346,9 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
|
||||
return (List<MjonMsgDataVO>) list("MjonMsgDataDAO.selectMjMsgListByResend", mjonMsgDataVO);
|
||||
}
|
||||
|
||||
|
||||
public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{
|
||||
return (String) select("mjonMsgDAO.selectMsgUserLastIdgen", mjonMsgVO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -19,6 +19,7 @@ import itn.let.lett.service.LetterVO;
|
||||
import itn.let.mjo.addr.service.AddrVO;
|
||||
import itn.let.mjo.event.service.MjonEventService;
|
||||
import itn.let.mjo.event.service.MjonEventVO;
|
||||
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.msgagent.service.MjonMsgAgentStsService;
|
||||
@ -2300,4 +2301,750 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
return mjonMsgDataDAO.selectMjMsgListByResend(mjonMsgDataVO);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 대량 문자 데이터 배치 입력 처리 신규 추가
|
||||
* 2024/02/02 우영두
|
||||
*
|
||||
*
|
||||
* */
|
||||
public MjonMsgReturnVO insertMsgDataInfoBatch(MjonMsgVO mjonMsgVO) throws Exception{
|
||||
|
||||
MjonMsgReturnVO returnVO = new MjonMsgReturnVO();
|
||||
|
||||
try {
|
||||
|
||||
String msgType = mjonMsgVO.getMsgType();
|
||||
String agentCode = mjonMsgVO.getAgentCode();
|
||||
// 장문 전송
|
||||
String contSeq = "";
|
||||
|
||||
//float myPrice = 10000;
|
||||
//float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice());
|
||||
// 최종 입력 수 저장 변수
|
||||
int resultCnt = 0;
|
||||
int limitCnt = 10000;
|
||||
int blockCnt = 0;
|
||||
|
||||
// 총 보유 금액과 전송 합계 비교
|
||||
|
||||
/*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴
|
||||
|
||||
return 0 ;
|
||||
}*/
|
||||
|
||||
int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수
|
||||
|
||||
mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt));
|
||||
|
||||
|
||||
//그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리
|
||||
/*if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력
|
||||
|
||||
Date now = new Date();
|
||||
|
||||
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||
|
||||
mjonMsgVO.setReqDate(sdFormat.format(now));
|
||||
|
||||
}*/
|
||||
|
||||
//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
|
||||
String befCash = mjonMsgVO.getBefCash();
|
||||
|
||||
//VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴
|
||||
if("".equals(befCash) || befCash == null) {
|
||||
befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO);
|
||||
}
|
||||
|
||||
mjonMsgVO.setBefCash(befCash);
|
||||
// 문자 전송 그룹 테이블에 정보 입력
|
||||
//mjonMsgDAO.insertGroupMsgData(mjonMsgVO);
|
||||
|
||||
//수신거부 목록 불러오기
|
||||
List<String> userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO);
|
||||
|
||||
List<String> dupliBlockList = MJUtil.getDuplicateList(userBlockList);
|
||||
int usrBlockCnt = dupliBlockList.size();
|
||||
|
||||
//회원 전용 전송사 정보 불러오기
|
||||
MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId());
|
||||
String hotlineAgentCode = userInfo.getHotlineAgentCode();
|
||||
|
||||
//전용 전송사가 지정되어 있으면 실행
|
||||
if(!hotlineAgentCode.equals("00")) {
|
||||
|
||||
MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO();
|
||||
mjonMsgAgentStsVO.setAgentCode(hotlineAgentCode);
|
||||
|
||||
//문자 타입 셋팅
|
||||
if(msgType.equals("6")) {
|
||||
int fCnt = Integer.parseInt(mjonMsgVO.getFileCnt());
|
||||
if(fCnt > 0) {
|
||||
|
||||
mjonMsgAgentStsVO.setMsgType("P");
|
||||
|
||||
}else {
|
||||
mjonMsgAgentStsVO.setMsgType("L");
|
||||
}
|
||||
|
||||
}else {
|
||||
mjonMsgAgentStsVO.setMsgType("S");
|
||||
}
|
||||
|
||||
List<MjonMsgAgentStsVO> hotlineMsgAgentList = mjonMsgAgentStsDAO.selectMsgAgentListByAgentCode(mjonMsgAgentStsVO);
|
||||
|
||||
String mberAgentConde = "";
|
||||
String mberSendRate = "";
|
||||
String mberRepAgent = "";
|
||||
|
||||
for(MjonMsgAgentStsVO tmp : hotlineMsgAgentList) {
|
||||
|
||||
mberAgentConde = tmp.getAgentCode();
|
||||
mberSendRate = tmp.getSendRate();
|
||||
mberRepAgent = tmp.getRepAgent();
|
||||
String useYn = tmp.getUseYn();
|
||||
|
||||
if(userInfo.getBlineCode().equals("N")) {
|
||||
//회원 전용 전송사의 전송 비율이 0 이면 대표전송사로 전송되도록 셋팅함.
|
||||
if(mberSendRate.equals("0") || useYn.equals("N")) {
|
||||
|
||||
hotlineAgentCode = mberRepAgent;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Agent 추가시 셋팅하기
|
||||
* Agent 발송 비율 불러오기
|
||||
* 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03)
|
||||
* 22.10.12 : 비즈뿌리오(04) 추가
|
||||
* 23.04.10 : 제이제이(05) 추가
|
||||
* 23.05.02 : 인비토 (07) 추가
|
||||
* */
|
||||
|
||||
int iheartCnt = 0; //아이하트 전송갯수
|
||||
int hncCnt = 0; //현대퓨처넷 전송갯수
|
||||
int imoCnt = 0; //아이엠오 전송갯수
|
||||
int bizCnt = 0; //비즈뿌리오 전송갯수
|
||||
int jjCnt = 0; //제이제이 전송갯수
|
||||
int ivtCnt = 0; //인비토 전송갯수
|
||||
|
||||
// 전송사별 발송 리스트 조회
|
||||
List<MjonMsgVO> sendRateList = mjonMsgDataDAO.selectSendAgentList(mjonMsgVO);
|
||||
|
||||
if(callToCnt >= 10) {
|
||||
// 전송사별 배분률 조회
|
||||
int sendRateSize = sendRateList.size();
|
||||
|
||||
/**
|
||||
* Agent 추가시 셋팅하기
|
||||
*
|
||||
* 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03)
|
||||
* 22.10.12 : 비즈뿌리오(04) 추가
|
||||
* 23.04.10 : 제이제이(05) 추가
|
||||
* 23.05.02 : 인비토 (07) 추가
|
||||
* */
|
||||
|
||||
for(int i=0; i< sendRateSize; i++) {
|
||||
|
||||
String sndAgentCode = sendRateList.get(i).getAgentCode();
|
||||
|
||||
if(sndAgentCode.equals("01")) {//아이하트 전송비율
|
||||
|
||||
iheartCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate()));
|
||||
|
||||
}else if(sndAgentCode.equals("02")) {//현대퓨처넷 전송비율
|
||||
|
||||
hncCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate()));
|
||||
|
||||
}else if(sndAgentCode.equals("03")) {//아이엠오 전송비율
|
||||
|
||||
imoCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate()));
|
||||
|
||||
}else if(sndAgentCode.equals("04")) {//비즈뿌리오 전송비율
|
||||
|
||||
bizCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate()));
|
||||
|
||||
}else if(sndAgentCode.equals("05")) {//제이제이 전송비율
|
||||
|
||||
jjCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate()));
|
||||
|
||||
}else if(sndAgentCode.equals("07")) {//인비토 전송비율
|
||||
|
||||
ivtCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate()));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다.
|
||||
* 발송 건수가 천 건이 넘어가면, 백건씩 끊어서 발송 하도록 한다.
|
||||
* */
|
||||
|
||||
/*if(callToCnt >= 10000) {
|
||||
|
||||
limitCnt = 1000;
|
||||
|
||||
}*/
|
||||
|
||||
//수신자 리스트 처리
|
||||
List<MjonMsgVO> msgDataInfo = new ArrayList<MjonMsgVO>();
|
||||
|
||||
int cnt = 1;
|
||||
int totCnt = 1;
|
||||
|
||||
//분할문자 시간에 간격시간 더해주기
|
||||
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; //분할 카운트
|
||||
String delayTime ="";//30분 지연시간
|
||||
String spamStatus = mjonMsgVO.getSpamStatus();//스팸 문구 유무
|
||||
String smishingYn = mjonMsgVO.getSmishingYn();//스미싱 의심 유무
|
||||
String delayYn = "N"; //문자발송 30분 지연 처리 유무
|
||||
|
||||
if(spamStatus == null || spamStatus.equals("")) {
|
||||
|
||||
spamStatus = "N";
|
||||
|
||||
}
|
||||
|
||||
if(smishingYn == null || smishingYn.equals("")) {
|
||||
|
||||
smishingYn = "N";
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅
|
||||
|
||||
Date toDate = transFormat.parse(mjonMsgVO.getReqDate());
|
||||
cal.setTime(toDate); //예약 시간 캘린터 변수에 입력
|
||||
|
||||
//String 타입 시간 Int로 변환
|
||||
turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격
|
||||
dividDay = transFormat.format(cal.getTime());
|
||||
|
||||
totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수
|
||||
divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수
|
||||
|
||||
if(spamStatus.equals("Y") || smishingYn.equals("Y")) {
|
||||
|
||||
mjonMsgVO.setDelayYn("Y");//일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임, 원래는 스팸이면 Y로 넣어줘야한다.
|
||||
|
||||
}else {
|
||||
|
||||
mjonMsgVO.setDelayYn("N");//일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임
|
||||
}
|
||||
|
||||
}else {//즉시발송의 경우 현재 시간으로 입력해 준다.
|
||||
|
||||
Date now = new Date();
|
||||
if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸 문자가 포함되었거나, 스미싱 의심 회원의 경우 문자발송 시간을 30분 딜레이 시킨다.
|
||||
|
||||
String nowDate = transFormat.format(now);
|
||||
Date toDate = transFormat.parse(nowDate);
|
||||
System.out.println("++++++++++++++++++++ origin reqDate ::: "+toDate);
|
||||
cal.setTime(toDate);
|
||||
|
||||
cal.add(Calendar.MINUTE, 30);
|
||||
delayTime = transFormat.format(cal.getTime());
|
||||
mjonMsgVO.setReqDate(delayTime);
|
||||
System.out.println("++++++++++++++++++++ delay reqDate ::: "+mjonMsgVO.getReqDate());
|
||||
delayYn = "Y";
|
||||
mjonMsgVO.setDelayYn(delayYn);//문자 발송 30분 지연 코드 셋팅
|
||||
|
||||
}else {//정상적인 문자인 경우 즉시발송 처리해준다.
|
||||
|
||||
mjonMsgVO.setReqDate(transFormat.format(now));
|
||||
mjonMsgVO.setDelayYn(delayYn);//문자 발송 30분 지연 디폴트 값 셋팅(N)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트
|
||||
String[] phoneList = mjonMsgVO.getCallToList(); //받는사람 연락처 리스트
|
||||
//String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트
|
||||
//String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트
|
||||
//String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트
|
||||
//String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트
|
||||
|
||||
//Controller에서 전달 받은 분할 시간 정보 리스트
|
||||
List<String> dividDayList = mjonMsgVO.getDividDay();
|
||||
|
||||
String frstDelayTime = mjonMsgVO.getReqDate();
|
||||
|
||||
/*
|
||||
* 대용량 발송자의 msg_id 마지막 값 불러오기
|
||||
* 신규 IDgen 값 생성해주기
|
||||
*
|
||||
* */
|
||||
String subUserId = mjonMsgVO.getUserId().substring(0, 5).toUpperCase();
|
||||
mjonMsgVO.setSearchKeyword(subUserId);
|
||||
System.out.println("+++++++++++ subUserId ::: "+subUserId);
|
||||
|
||||
String userLastIdgen = mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO);
|
||||
System.out.println(userLastIdgen);
|
||||
|
||||
//기존에 등록된 pk값이 없으면 초기 번호로 셋팅
|
||||
if(userLastIdgen == null) {
|
||||
|
||||
userLastIdgen = subUserId + "_00000000000000";
|
||||
|
||||
}
|
||||
|
||||
MjonCommon mjComm = new MjonCommon();
|
||||
String startUserId = userLastIdgen;
|
||||
System.out.println("+_+++++ startUserId ::: "+startUserId);
|
||||
|
||||
//문자발송 리스트 생성 시작
|
||||
for(int i = 0; i < callToCnt; i++) {
|
||||
|
||||
//신규 pk IDgen 데이터 생성
|
||||
startUserId = mjComm.getCreateMsgUserIdgen(subUserId, startUserId);
|
||||
|
||||
Boolean blockSts = false;
|
||||
for(int j = 0; j < usrBlockCnt; j++) {
|
||||
|
||||
if(phoneList[i].equals(dupliBlockList.get(j).toString())) {
|
||||
|
||||
blockCnt++; //수신 차단 카운드를 해준다.
|
||||
blockSts = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!blockSts) { //수신거부가 아니면 추가
|
||||
|
||||
MjonMsgVO tempVO = new MjonMsgVO();
|
||||
|
||||
/**
|
||||
* Agent 추가시 셋팅하기
|
||||
*
|
||||
* 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03)
|
||||
* 22.10.12 : 비즈뿌리오(04) 추가
|
||||
* 23.04.10 : 제이제이(05) 추가
|
||||
* 23.05.02 : 인비토 (07) 추가
|
||||
* 23.05.09 : 회원 전용 전송사 정보가 있으면 모든 문자를 전용 전송사로 발송처리함.
|
||||
* */
|
||||
|
||||
if(hotlineAgentCode.equals("00")) {//전용 전송사가 사용 안함인 경우 분배 및 대표 전송사로 설정
|
||||
|
||||
if(iheartCnt > 0) {
|
||||
agentCode = "01";
|
||||
tempVO.setAgentCode(agentCode);
|
||||
iheartCnt--;
|
||||
}else if(hncCnt > 0) {
|
||||
agentCode = "02";
|
||||
tempVO.setAgentCode(agentCode);
|
||||
hncCnt--;
|
||||
}else if(imoCnt > 0) {
|
||||
agentCode = "03";
|
||||
tempVO.setAgentCode(agentCode);
|
||||
imoCnt--;
|
||||
}else if(bizCnt > 0) {
|
||||
agentCode = "04";
|
||||
tempVO.setAgentCode(agentCode);
|
||||
bizCnt--;
|
||||
}else if(jjCnt > 0) {
|
||||
agentCode = "05";
|
||||
tempVO.setAgentCode(agentCode);
|
||||
jjCnt--;
|
||||
}else if(ivtCnt > 0) {
|
||||
agentCode = "07";
|
||||
tempVO.setAgentCode(agentCode);
|
||||
ivtCnt--;
|
||||
}else {//전송사 Agent 대표 전송사로 지정한다.
|
||||
|
||||
agentCode = sendRateList.get(0).getRepAgent();
|
||||
tempVO.setAgentCode(agentCode);
|
||||
}
|
||||
|
||||
}else {//전용 전송사가 지정되어 있는 경우 전용 전송사로 지정
|
||||
|
||||
agentCode = hotlineAgentCode;
|
||||
tempVO.setAgentCode(hotlineAgentCode);
|
||||
}
|
||||
//Agent 셋팅 끝
|
||||
|
||||
//tempVO.setMsgId(idgenMsgId.getNextStringId());
|
||||
|
||||
tempVO.setMsgId(startUserId);
|
||||
|
||||
tempVO.setUserId(mjonMsgVO.getUserId());
|
||||
tempVO.setCallTo(phoneList[i]);
|
||||
tempVO.setCallFrom(mjonMsgVO.getCallFrom());
|
||||
tempVO.setMsgType(mjonMsgVO.getMsgType());
|
||||
tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId());
|
||||
tempVO.setMsgCnt(mjonMsgVO.getMsgCnt());
|
||||
|
||||
//아이엠오 전송사 문자 타입 설정해 주기
|
||||
if(agentCode.equals("03")) {
|
||||
|
||||
// 단순 장문 문자는 neoType : 2, 그림 포함 : 4
|
||||
if(mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자
|
||||
|
||||
mjonMsgVO.setNeoType("2");
|
||||
|
||||
}else{ // 그림포함 문자인경우
|
||||
|
||||
mjonMsgVO.setNeoType("4");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//문자내용 내용 - 치환 처리
|
||||
String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용
|
||||
|
||||
//일괄변환문자 리스트에서 콤마(,)를 특수문자(§)로 변환해서 넘겨받기 때문에 치환 처리를 해준도록 한다.
|
||||
smsTxt = smsTxt.replaceAll(String.valueOf((char)13), "");
|
||||
/*if (smsTxt.indexOf("[*이름*]") > -1) {
|
||||
if(nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replaceAll("§", ",")));
|
||||
}else {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", "");
|
||||
}
|
||||
}
|
||||
|
||||
if (smsTxt.indexOf("[*1*]") > -1) {
|
||||
if(rep1.length > i && StringUtil.isNotEmpty(rep1[i])) {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replaceAll("§", ",")));
|
||||
}else {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", "");
|
||||
}
|
||||
}
|
||||
|
||||
if (smsTxt.indexOf("[*2*]") > -1) {
|
||||
if(rep2.length > i && StringUtil.isNotEmpty(rep2[i])) {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replaceAll("§", ",")));
|
||||
}else {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", "");
|
||||
}
|
||||
}
|
||||
|
||||
if (smsTxt.indexOf("[*3*]") > -1) {
|
||||
if(rep3.length > i && StringUtil.isNotEmpty(rep3[i])) {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replaceAll("§", ",")));
|
||||
}else {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", "");
|
||||
}
|
||||
}
|
||||
|
||||
if (smsTxt.indexOf("[*4*]") > -1) {
|
||||
if(rep4.length > i && StringUtil.isNotEmpty(rep4[i])) {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replaceAll("§", ",")));
|
||||
}else {
|
||||
smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", "");
|
||||
}
|
||||
}*/
|
||||
|
||||
tempVO.setSmsTxt(smsTxt);
|
||||
|
||||
//즉시 / 예약 전송 처리
|
||||
if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력
|
||||
|
||||
if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문자가 있거나, 스미싱 의심 회원의 경우 30분 지연시간을 입력해 준다.
|
||||
|
||||
tempVO.setReqDate(mjonMsgVO.getReqDate());//상단에서 스팸문구가 있는겨우 30분 딜레이시간을 입력해 두었기 때문에 같은 데이터를 입력함.
|
||||
|
||||
|
||||
}else {//일반 문자인 경우 현재시간을 입력해 준다.
|
||||
|
||||
Date now = new Date();
|
||||
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||
tempVO.setReqDate(sdFormat.format(now));
|
||||
|
||||
}
|
||||
|
||||
}else { // 예약 발송의 경우 예약 시간을 입력
|
||||
|
||||
//분할 발송을 체크 한 경우
|
||||
if(mjonMsgVO.getDivideChk() != null) {
|
||||
|
||||
//스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다.
|
||||
//20230630 우영두 추가
|
||||
if(spamStatus.equals("Y") || smishingYn.equals("Y")) {
|
||||
|
||||
Date delayDate = transFormat.parse(dividDayList.get(i));
|
||||
|
||||
cal.setTime(delayDate);
|
||||
cal.add(Calendar.MINUTE, 30);
|
||||
delayTime = transFormat.format(cal.getTime());
|
||||
|
||||
tempVO.setReqDate(delayTime); //분할 문자 예약 시간 입력해주기
|
||||
|
||||
}else {
|
||||
|
||||
tempVO.setReqDate(dividDayList.get(i)); //분할 문자 예약 시간 입력해주기
|
||||
|
||||
}
|
||||
|
||||
|
||||
}else {//일반 예약 발송의 경우
|
||||
|
||||
if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다.
|
||||
|
||||
Date delayDate = transFormat.parse(mjonMsgVO.getReqDate());
|
||||
|
||||
cal.setTime(delayDate);
|
||||
cal.add(Calendar.MINUTE, 30);
|
||||
delayTime = transFormat.format(cal.getTime());
|
||||
|
||||
tempVO.setReqDate(delayTime);
|
||||
|
||||
}else {
|
||||
|
||||
tempVO.setReqDate(mjonMsgVO.getReqDate());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//딜레이 처리되었을 수 있어서 임시 데이터의 발송 시간을 업데이트 해준다.
|
||||
//분할 발송일 경우 Loop을 돌기 때문에 마지막 시간이 reqDate에 들어가기 때문에 첫번째 데이터에서만 시간을 입력해 준다.
|
||||
//mj_group_data 테이블의 reqdate 컬럼 값으로 셋팅 된다.
|
||||
if(i==0) {
|
||||
frstDelayTime = tempVO.getReqDate();
|
||||
}
|
||||
}
|
||||
|
||||
if(!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가
|
||||
|
||||
/**
|
||||
* 장문 / 그림문자 일 경우 제목 처리
|
||||
* 만약 제목을 입력하지 않았을 경우 문자 내용의 텍스트 일부를 제목으로 사용
|
||||
* 내용 텍스트가 없는 경우는 어쩔수 없는 것으로 간주하여 Null로 처리한다.
|
||||
*
|
||||
* */
|
||||
String contents = tempVO.getSmsTxt(); //문자 내용
|
||||
if(StringUtil.isEmpty(mjonMsgVO.getMmsSubject()) || mjonMsgVO.getMmsSubject() == null) {// 제목 입력이 없는 경우
|
||||
|
||||
if(StringUtil.isNotEmpty(contents) && contents != null) {//문자내용이 있는 경우 처리
|
||||
|
||||
String[] split = contents.split("\n");
|
||||
|
||||
if(split.length > 0) {
|
||||
|
||||
String subject = "";
|
||||
String msgKind = mjonMsgVO.getMsgKind();//문자 타입(일반, 광고, 선거문자)
|
||||
|
||||
//선거문자인 경우 첫 글내용이 "(선거운동정보)"로 되어있어서 그 다음줄의 내용을 제목으로 사용
|
||||
if(msgKind.equals("C")) {
|
||||
if(split.length > 1) {
|
||||
subject = split[1].trim();
|
||||
}else {
|
||||
subject = split[0].substring(0,20);
|
||||
}
|
||||
}else {
|
||||
subject = split[0].trim();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}else {// 제목 입력이 있는 경우 입력한 제목으로 셋팅
|
||||
tempVO.setMmsSubject(mjonMsgVO.getMmsSubject());
|
||||
}
|
||||
|
||||
tempVO.setFileCnt(mjonMsgVO.getFileCnt());
|
||||
tempVO.setFileName1(mjonMsgVO.getFileName1());
|
||||
tempVO.setFileName2(mjonMsgVO.getFileName2());
|
||||
tempVO.setFileName3(mjonMsgVO.getFileName3());
|
||||
tempVO.setNeoType(mjonMsgVO.getNeoType());
|
||||
tempVO.setContSeq(mjonMsgVO.getContSeq());
|
||||
|
||||
}
|
||||
|
||||
//아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리
|
||||
if(agentCode.equals("01") && msgType.equals("6")) {
|
||||
|
||||
// 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기
|
||||
|
||||
//이미지가 있는경우 file_type, file_Cnt 값 셋팅
|
||||
int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt());
|
||||
String contents = mjonMsgVO.getSmsTxt();
|
||||
|
||||
if(fileCnt > 0) {
|
||||
tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일종류 이미지로 셋팅
|
||||
|
||||
//그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.)
|
||||
if(StringUtil.isNotEmpty(contents)) {
|
||||
fileCnt = fileCnt + 1;
|
||||
}
|
||||
tempVO.setFileCnt(Integer.toString(fileCnt));
|
||||
|
||||
}else {
|
||||
tempVO.setFileCnt("1");
|
||||
}
|
||||
|
||||
contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO);
|
||||
mjonMsgVO.setContSeq(contSeq);
|
||||
tempVO.setSmsTxt(smsTxt);
|
||||
tempVO.setContSeq(contSeq);
|
||||
|
||||
}
|
||||
|
||||
//문자 내용 추가해 주기
|
||||
msgDataInfo.add(tempVO);
|
||||
|
||||
}//수신거부 처리로직 끝
|
||||
|
||||
int instCnt = 0;
|
||||
//지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌
|
||||
if(totCnt == callToCnt) {
|
||||
|
||||
if(msgDataInfo.size() > 0) {
|
||||
|
||||
//데이터 디비 입력해주기
|
||||
instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode);
|
||||
|
||||
}
|
||||
|
||||
//총 디비 입력 건수 저장하기
|
||||
resultCnt = resultCnt + instCnt;
|
||||
|
||||
}else {
|
||||
|
||||
//특정 건수 이상일 경우 분할해서 디비에 넣어준다.
|
||||
if(cnt == limitCnt) {
|
||||
|
||||
if(msgDataInfo.size() > 0) {
|
||||
|
||||
//분할 최대건수가 되면 디비에 입력하기
|
||||
instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode);
|
||||
|
||||
}
|
||||
|
||||
//총 디비 입력 건수 저장하기
|
||||
resultCnt = resultCnt + instCnt;
|
||||
cnt = 0;
|
||||
|
||||
//List 초기화 하기
|
||||
msgDataInfo.clear();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
cnt++;
|
||||
totCnt++;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* 각 처리 건별로 캐시 차감 및 그룹 데이터 정보 업데이트
|
||||
* 1. 디비에 입력한 건수만큼 캐시 차감 및 회원 캐시 정보 업데이트
|
||||
* 2. 그룹데이터에 처리 건수 업데이트(총 발송건수 합산 정보 업데이트)
|
||||
*
|
||||
* */
|
||||
|
||||
//문자 발송 캐시 차감 해주기
|
||||
MjonPayVO mjonPayVO = new MjonPayVO();
|
||||
|
||||
//1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다.
|
||||
if(resultCnt > 0) {
|
||||
|
||||
int totSendCnt = mjonMsgVO.getTotalCallCnt();
|
||||
Float eachPrice = Float.parseFloat(mjonMsgVO.getEachPrice());
|
||||
Float totPrice = eachPrice * resultCnt;
|
||||
String strTotPrice = String.format("%.1f", totPrice);
|
||||
|
||||
mjonMsgVO.setTotPrice(strTotPrice);//현재 합산 금액 셋팅
|
||||
mjonPayVO.setCashId(idgenMjonCashId.getNextStringId());
|
||||
mjonPayVO.setUserId(mjonMsgVO.getUserId());
|
||||
mjonPayVO.setCash(-Float.parseFloat(strTotPrice));
|
||||
mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId());
|
||||
mjonPayVO.setMemo("SMS 문자 총 "+totSendCnt+"건 중 " + resultCnt + "건 발송");
|
||||
mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId());
|
||||
|
||||
mjonPayService.insertCash(mjonPayVO); //캐시차감
|
||||
mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트
|
||||
}
|
||||
|
||||
//문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다.
|
||||
if(resultCnt > 0) {
|
||||
|
||||
// 문자 전송 그룹 테이블에 정보 입력
|
||||
int groupCnt = resultCnt;
|
||||
mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt));
|
||||
//mjonMsgService.insertGroupMsgData(mjonMsgVO);
|
||||
int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO);
|
||||
|
||||
//메세지 그룹 데이터가 없으면 추가 해주고 있으면 총메세지 건수를 합산해준다.
|
||||
if(msgGroupDataCnt < 1) {
|
||||
mjonMsgVO.setAgentCode(agentCode);//전송사 코드 번호를 셋팅해 준다.
|
||||
|
||||
//지연 유무 코드가 Null 인경우 체크
|
||||
String tmpDelayYn = mjonMsgVO.getDelayYn();
|
||||
if(tmpDelayYn == null) {
|
||||
mjonMsgVO.setDelayYn("N");
|
||||
}
|
||||
|
||||
//예약 문자이고 30분 지연이 된 문자의 Mj_msg_group_data 테이블의 req_date 시간을 첫번째 문자의 지연된 시간으로 셋팅해준다.
|
||||
if(mjonMsgVO.getReserveYn().equals("Y") && (spamStatus.equals("Y") || smishingYn.equals("Y"))) {
|
||||
|
||||
mjonMsgVO.setReqDate(frstDelayTime);
|
||||
|
||||
}
|
||||
mjonMsgDAO.insertGroupMsgData(mjonMsgVO);
|
||||
|
||||
}else {
|
||||
mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO);
|
||||
}
|
||||
|
||||
//이벤트 회원 남은 캐시 업데이트
|
||||
fnUpdateEventRemainCash(mjonPayVO);
|
||||
|
||||
}
|
||||
|
||||
// 성공
|
||||
returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장
|
||||
returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장
|
||||
returnVO.setAgentCode(agentCode);
|
||||
|
||||
} catch (Exception e) {
|
||||
// 실패
|
||||
returnVO.setSendMsgCnt(Integer.toString(0)); //발송 건수 저장
|
||||
returnVO.setSendMsgBlockCnt(Integer.toString(0)); //수신차단 건수 저장
|
||||
returnVO.setAgentCode("01");
|
||||
|
||||
System.out.println("=========================================================================");
|
||||
System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfoBatch ERROR !!! : " + e);
|
||||
System.out.println("=========================================================================");
|
||||
return returnVO;
|
||||
|
||||
}
|
||||
|
||||
return returnVO;
|
||||
|
||||
}
|
||||
|
||||
|
||||
//대용량 문자 전송시 사용자 마지막 PK 값 조회하기
|
||||
@Override
|
||||
public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{
|
||||
return mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -7,6 +7,8 @@
|
||||
<sqlMap namespace="Msg">
|
||||
<typeAlias alias="mjonCandidateVO" type="itn.let.mjo.msgcampain.service.MjonCandidateVO"/>
|
||||
<typeAlias alias="mjonCandidateTWVO" type="itn.let.mjo.msgcampain.service.MjonCandidateTWVO"/>
|
||||
<typeAlias alias="mjonMsgVO" type="itn.let.mjo.msg.service.MjonMsgVO"/>
|
||||
|
||||
|
||||
<select id="mjonCandidateDAO.selectCandidateDataInfo" parameterClass="String" resultClass="mjonCandidateVO">
|
||||
|
||||
@ -273,6 +275,33 @@
|
||||
]]>
|
||||
</delete>
|
||||
|
||||
<select id="mjonCandidateDAO.selectAddrGrpHGList" parameterClass="mjonMsgVO" resultClass = "String">
|
||||
|
||||
SELECT ADDR_PHONE_NO
|
||||
FROM MJ_ADDR a
|
||||
WHERE a.MBER_ID = #userId#
|
||||
|
||||
<!-- <iterate prepend="AND ADDR_GRP_ID IN " open="(" close=")" conjunction="," property="callToList">
|
||||
#callToList[]#
|
||||
</iterate> -->
|
||||
|
||||
AND ADDR_GRP_ID = #addrGrpId#
|
||||
|
||||
<isNotEmpty property="addrGrpNm">
|
||||
<isEqual property="addrGrpNm" compareValue="group1">
|
||||
AND a.BOOKMARK = 'N'
|
||||
</isEqual>
|
||||
<isEqual property="addrGrpNm" compareValue="bookmark">
|
||||
AND a.BOOKMARK = 'Y'
|
||||
</isEqual>
|
||||
</isNotEmpty>
|
||||
|
||||
AND a.DELETE_YN = 'N'
|
||||
|
||||
ORDER BY a.ADDR_PHONE_NO
|
||||
|
||||
</select>
|
||||
|
||||
</sqlMap>
|
||||
|
||||
|
||||
|
||||
@ -3496,7 +3496,8 @@
|
||||
|
||||
<!-- 사용자 요금 사용내역 Sum 리스트 -->
|
||||
<select id="mjonMsgDAO.selectPayUserSumList" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
|
||||
/* 2024.01.26 검색 기준을 regdate 에서 reqdate로 기준을 잡자고 장건영팀장 요청으로 변경처리 */
|
||||
/* 2024.01.26 검색 기준을 regdate 에서 reqdate로 기준을 잡자고 장건영팀장 요청으로 변경처리, msg_group_cnt는 사용하지 않아서 주석처리 */
|
||||
|
||||
SELECT
|
||||
MAX(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )) AS maxRegDate
|
||||
, MIN(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )) AS minRegDate
|
||||
@ -3507,7 +3508,7 @@
|
||||
, SUM(IF(M.msgTypeName = '그림(MMS)', 1, 0)) AS pictSendCount
|
||||
, SUM(IF(M.msgTypeName = '알림톡', 1, 0)) AS atSendCount
|
||||
, SUM(IF(M.msgTypeName = '친구톡', 1, 0)) AS ftSendCount
|
||||
, SUM(M.MSG_GROUP_CNT) AS sendCount
|
||||
<!-- , SUM(M.MSG_GROUP_CNT) AS sendCount -->
|
||||
, ifnull(ROUND(SUM(M.EACH_PRICE) , 2), 0) AS supplyPrice
|
||||
, 0 AS vatPrice
|
||||
, ifnull(ROUND(SUM(M.EACH_PRICE) , 2), 0) AS totalPrice
|
||||
@ -7503,6 +7504,17 @@
|
||||
USER_ID = #userId#
|
||||
AND MSG_GROUP_ID = #msgGroupId#
|
||||
</select>
|
||||
|
||||
|
||||
<select id="mjonMsgDAO.selectMsgUserLastIdgen" parameterClass="mjonMsgVO" resultClass="String">
|
||||
|
||||
SELECT MSG_ID
|
||||
FROM MJ_MSG_DATA
|
||||
WHERE USER_ID = #userId#
|
||||
AND MSG_ID LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
ORDER BY USERDATA DESC
|
||||
LIMIT 1
|
||||
|
||||
</select>
|
||||
|
||||
</sqlMap>
|
||||
|
||||
|
||||
@ -357,9 +357,11 @@
|
||||
ADDR_PHONE_NO
|
||||
, ADDR_NM
|
||||
FROM
|
||||
MJ_ADDR
|
||||
MJ_ADDR AD
|
||||
INNER JOIN MJ_ADDR_GRP ADG
|
||||
ON AD.ADDR_GRP_ID = ADG.ADDR_GRP_ID
|
||||
WHERE 1=1
|
||||
AND MBER_ID = #userId#
|
||||
AND AD.MBER_ID = #userId#
|
||||
GROUP BY ADDR_PHONE_NO
|
||||
)MA
|
||||
ON M.CALL_TO = MA.ADDR_PHONE_NO
|
||||
@ -719,9 +721,11 @@
|
||||
ADDR_PHONE_NO
|
||||
, ADDR_NM
|
||||
FROM
|
||||
MJ_ADDR
|
||||
MJ_ADDR AD
|
||||
INNER JOIN MJ_ADDR_GRP ADG
|
||||
ON AD.ADDR_GRP_ID = ADG.ADDR_GRP_ID
|
||||
WHERE
|
||||
MBER_ID = #userId#
|
||||
AD.MBER_ID = #userId#
|
||||
GROUP BY
|
||||
ADDR_PHONE_NO
|
||||
)MA
|
||||
|
||||
@ -1040,11 +1040,10 @@ function setSenderList() {
|
||||
gMemoList[i] = memo.replace(/,/g,"§");
|
||||
}
|
||||
|
||||
//브라우저 대기 메세지 안나오게 하기위한 처리
|
||||
var reStartArray = [10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000, 110000, 120000, 130000, 140000, 150000, 160000, 170000, 180000, 190000, 200000];
|
||||
|
||||
if (reStartArray.includes(i, 0)) {
|
||||
console.log("########## i : " + i);
|
||||
|
||||
gArrRestartIndex = i+1;
|
||||
|
||||
if (selectedData.length > gArrRestartIndex) {
|
||||
@ -1052,13 +1051,12 @@ function setSenderList() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
console.log(i);
|
||||
}
|
||||
|
||||
if (gPhoneList.length == selectedData.length) {
|
||||
console.log(new Date());
|
||||
console.log("gPhoneList.length : " + gPhoneList.length);
|
||||
console.log("selectedData.length : " + selectedData.length);
|
||||
//console.log(new Date());
|
||||
//console.log("gPhoneList.length : " + gPhoneList.length);
|
||||
//console.log("selectedData.length : " + selectedData.length);
|
||||
|
||||
SetAddrMassSave_Step2();
|
||||
}
|
||||
@ -1114,6 +1112,8 @@ function SetAddrMassSave_Step2(){
|
||||
// 데이터 비우기
|
||||
SetClear();
|
||||
|
||||
var selectMassVal = $("#addrGrpIdInfo option:selected").val();
|
||||
|
||||
// 주소록그룹 콤보박스 유지
|
||||
setTimeout(setSelectMassSetting, 500, selectMassVal);
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변
|
||||
function updateTotCnt(data){
|
||||
|
||||
var rowTotCnt = data;
|
||||
$("#rowTotCnt").text(rowTotCnt);
|
||||
$("#rowTotCnt").text(numberWithCommas(rowTotCnt));
|
||||
|
||||
}
|
||||
|
||||
@ -1737,7 +1737,6 @@ function fnByteString(contents){
|
||||
}else{
|
||||
|
||||
conLeng = adTxtLeng + conLeng + denyTxtLeng +2; // 상단 광고 텍스트 , 하단 080 문자내용 길이 더해주기 , +2는 엔터 적용
|
||||
console.log("++++++++++ conleng ::: "+conLeng);
|
||||
$('#msgLeng').text(conLeng);
|
||||
|
||||
//문자 길이 변수에 저장해주기
|
||||
|
||||
@ -1004,6 +1004,13 @@ function fn_sendMsgData(){
|
||||
|
||||
}else{ // 선택한 Row '-' 문자 삭제하기
|
||||
|
||||
//자동동보문자 2만건 초과시 발송 안되도록 처리함.
|
||||
var totSendDataCnt = selectedData.length;
|
||||
if(totSendDataCnt > 20000){
|
||||
alert("자동동보문자를 한번에 20,000건 이상 보내실 경우에는 꼭 고객센터(010-8432-9333)로 연락주시어 발송 요청 후 진행해 주시길 바랍니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
for(var i=0; i < selectedData.length; i++){
|
||||
|
||||
//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
|
||||
|
||||
@ -0,0 +1,142 @@
|
||||
<%@ 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"%>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
|
||||
// 주소록 그룹 카운트(전체)
|
||||
getAddrGroupTotCnt();
|
||||
|
||||
//주소록 그룹 카운트(그룹미지정)
|
||||
getAddrGroupNogrpCnt();
|
||||
|
||||
//주소록 그룹 카운트(자주보내는 번호)
|
||||
getAddrGroupBookmarkCnt();
|
||||
|
||||
});
|
||||
|
||||
// 주소록 그룹 카운트(전체)
|
||||
function getAddrGroupTotCnt() {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/web/addr/selectAddrGroupTotCntAjax.do",
|
||||
data: {},
|
||||
dataType:'json',
|
||||
async: true,
|
||||
success: function (data) {
|
||||
if (data.isSuccess) {
|
||||
$("#addrTotCnt").html(numberWithCommas(data.addrTotCnt));
|
||||
}
|
||||
else {
|
||||
//alert("Msg : " + data.msg);
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
//alert("ERROR : " + JSON.stringify(e));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//주소록 그룹 카운트(그룹미지정)
|
||||
function getAddrGroupNogrpCnt() {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/web/addr/selectAddrGroupNogrpCntAjax.do",
|
||||
data: {},
|
||||
dataType:'json',
|
||||
async: true,
|
||||
success: function (data) {
|
||||
if (data.isSuccess) {
|
||||
$("#nogrpCnt").html(data.nogrpCnt);
|
||||
}
|
||||
else {
|
||||
//alert("Msg : " + data.msg);
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
//alert("ERROR : " + JSON.stringify(e));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//주소록 그룹 카운트(자주보내는 번호)
|
||||
function getAddrGroupBookmarkCnt() {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/web/addr/selectAddrGroupBookmarkCntAjax.do",
|
||||
data: {},
|
||||
dataType:'json',
|
||||
async: true,
|
||||
success: function (data) {
|
||||
if (data.isSuccess) {
|
||||
$("#bookmarkCnt").html(data.bookmarkCnt);
|
||||
}
|
||||
else {
|
||||
//alert("Msg : " + data.msg);
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
//alert("ERROR : " + JSON.stringify(e));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//그룹 클릭했을 때 활성화 디자인 추가
|
||||
$(".adr_cb_wrap2").click(function(){
|
||||
$(this).addClass("active");
|
||||
$(this).siblings(".adr_cb_wrap2").removeClass("active");
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="adr_pop_list">
|
||||
<div class="adr_cb_wrap2">
|
||||
<!-- <p onClick="javascript:fnSelectAddrList('all','',this); return false;"> -->
|
||||
<p>
|
||||
<img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">전체[<span id="addrTotCnt"></span>명]
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="adr_cb_wrap2">
|
||||
<label for="group1" class="label"></label>
|
||||
<input type="checkbox" id="group1">
|
||||
<!-- <p onClick="javascript:fnSelectAddrList('none','',this); return false;"> -->
|
||||
<p style="padding-left:10px;">
|
||||
<!-- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘"> -->그룹미지정[<span id="nogrpCnt"></span>명]
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="adr_cb_wrap2">
|
||||
<label for="group2" class="label"></label>
|
||||
<input type="checkbox" id="group2">
|
||||
<!-- <p onClick="javascript:fnSelectAddrList('book','',this); return false;"> -->
|
||||
<p style="padding-left:10px;">
|
||||
<!-- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘"> -->자주보내는 번호[<span id="bookmarkCnt"></span>명]
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<c:choose>
|
||||
<c:when test="${not empty addrGroupList}">
|
||||
<c:forEach var="addrGroupList" items="${addrGroupList}" varStatus="status">
|
||||
<div class="adr_cb_wrap2">
|
||||
<label for="group${status.index+3}" class="label"></label>
|
||||
<input type="checkbox" name="grpCheck" id="group${status.index+3}" value="${addrGroupList.addrGrpId}§${addrGroupList.addrGrpNm}§${addrGroupList.grpCount}">
|
||||
<%-- <p onClick="javascript:fnSelectAddrList('grp','${addrGroupList.addrGrpId}',this); return false;"> --%>
|
||||
<p style="padding-left:10px;">
|
||||
<!-- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘"> -->
|
||||
<c:out value="${addrGroupList.addrGrpNm}" />[<span><c:out value="${addrGroupList.grpCount}" /></span>명]
|
||||
</p>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="adr_cb_wrap2">
|
||||
<p>
|
||||
검색 결과가 없습니다.
|
||||
</p>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
4412
src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataSMLView.jsp
Normal file
4412
src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataSMLView.jsp
Normal file
File diff suppressed because it is too large
Load Diff
1908
src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataView.jsp
Normal file
1908
src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataView.jsp
Normal file
File diff suppressed because it is too large
Load Diff
@ -9,13 +9,13 @@
|
||||
<script type="text/javascript" src="<c:url value='/js/txtSpecialReplace.js?date=202304250001'/>"></script>
|
||||
|
||||
<!-- -->
|
||||
<script type="text/javascript" src="<c:url value='/publish/js/publish.js'/>"></script>
|
||||
<script type="text/javascript" src="<c:url value='/publish/js/publish.js?date=202402060001'/>"></script>
|
||||
|
||||
<style>
|
||||
/* .send_top .send_right .phone_bottom{display:flex;align-items:center;} */
|
||||
.send_top .send_right .send_rev{margin:0 !important;}
|
||||
.send_top .send_right .phone_bottom{bottom:130px;}
|
||||
.send_top .send_right .send_rev .send_content{padding:0 !important;;}
|
||||
.send_top .send_right .send_rev .send_content{padding:0 !important;}
|
||||
</style>
|
||||
|
||||
<% pageContext.setAttribute("newLineChar", "\r\n"); %>
|
||||
@ -33,7 +33,7 @@ var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변
|
||||
function updateTotCnt(data){
|
||||
|
||||
var rowTotCnt = data;
|
||||
$("#rowTotCnt").text(rowTotCnt);
|
||||
$("#rowTotCnt").text(numberWithCommas(rowTotCnt));
|
||||
|
||||
}
|
||||
|
||||
@ -605,6 +605,27 @@ function getMberSettingDetail() {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
//엔터키로 문자발송 처리해주기
|
||||
$(document).keypress(function(e){
|
||||
|
||||
if(e.keyCode == 13
|
||||
&& !$(e.target).is('#smsTxtArea')
|
||||
&& !$(e.target).is('#callTo')
|
||||
&& !$(e.target).is('#searchKeyword')
|
||||
&& !$(e.target).is('#searchTxt')
|
||||
&& !$(e.target).is('#id_text')
|
||||
&& !$(e.target).is('#password_text')
|
||||
&& !$(e.target).is('#searchWord')){
|
||||
|
||||
enterSts = true;
|
||||
fn_sendMsgData();
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$(document).ready(function (){
|
||||
|
||||
// 발송금액 단가표시
|
||||
@ -4515,7 +4536,12 @@ function getMjMsgSentListAll(pageNo) {
|
||||
<div class="send_btn">
|
||||
<button type="button" class="btnType btnType11" onclick="javascript:fn_sendMsgData(); return false;">발송하기</button>
|
||||
<button type="button" class="btnType btnType10" onclick="javascript:fnTestSend(); return false;">테스트발송</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 엔터키로 발송 체크박스 -->
|
||||
<div class="use_enter">
|
||||
<input type="checkbox" id="enterChk" name="enterChk">
|
||||
<label for="enterChk">Enter키로 발송하기</label>
|
||||
</div>
|
||||
<div class="rev_selected">
|
||||
<div class="rev_top">
|
||||
|
||||
@ -25,6 +25,8 @@ var msgResendAllGroupId = "${msgResendAllGroupId}";
|
||||
var msgResendAllAdvertiseYn = "${msgResendAllAdvertiseYn}";
|
||||
var msgResendAllReplaceYn = "${msgResendAllReplaceYn}";
|
||||
|
||||
var enterSts = false;
|
||||
|
||||
$(document).ready(function(){
|
||||
//문자 발송 화면 폼 불러오기
|
||||
listMsgDataView();
|
||||
@ -957,6 +959,15 @@ function fn_sendMsgData(){
|
||||
|
||||
}
|
||||
|
||||
var chkCalltoCnt = $("input[name=chkCallTo]").length;
|
||||
|
||||
if(Number(chkCalltoCnt) == 0){
|
||||
|
||||
alert("받는사람을 추가해 주세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//수신번호 리스트 체크하기
|
||||
var numCnt = 0;
|
||||
var nameList = []; //치환문자 이름
|
||||
@ -1033,8 +1044,17 @@ function fn_sendMsgData(){
|
||||
|
||||
}
|
||||
|
||||
if(confirm("문자를 전송하시겠습니까?")){
|
||||
//엔터키로 문자 전송 바로 처리하기 : 엔터키와 엔터키 체크박스 둘다 조건 만족시 메시지 없이 전송처리
|
||||
var enterChk = $("#enterChk").is(':checked');
|
||||
if(!enterChk || !enterSts){
|
||||
|
||||
if(!confirm("문자를 전송하시겠습니까?")){
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//if(confirm("문자를 전송하시겠습니까?")){
|
||||
|
||||
imgFilePath = [];
|
||||
$('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
|
||||
@ -1547,7 +1567,7 @@ function fn_sendMsgData(){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변
|
||||
function updateTotCnt(data){
|
||||
|
||||
var rowTotCnt = data;
|
||||
$("#rowTotCnt").text(rowTotCnt);
|
||||
$("#rowTotCnt").text(numberWithCommas(rowTotCnt));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -166,7 +166,7 @@ function sendFileToServer(formData, obj , fileObj, _fileIdx)
|
||||
function updateTotCnt(data){
|
||||
|
||||
var rowTotCnt = data;
|
||||
$("#rowTotCnt").text(rowTotCnt);
|
||||
$("#rowTotCnt").text(numberWithCommas(rowTotCnt));
|
||||
|
||||
}
|
||||
|
||||
|
||||
3
src/main/webapp/dist/js/tabulator_5.4.js
vendored
Normal file
3
src/main/webapp/dist/js/tabulator_5.4.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -955,3 +955,20 @@ function fnChkCallToChange(){
|
||||
totalPriceSum(callToCnt);
|
||||
|
||||
}
|
||||
|
||||
//Tabulator 주소록 그룹 목록일 경우 각 그룹 주소 갯수 합산해주기
|
||||
function getTabulatorLAddrGrpCnt(){
|
||||
|
||||
var selectedData = tableL.getRows();
|
||||
var totAddrCnt = 0;
|
||||
for(var i=0; i < selectedData.length; i++){
|
||||
|
||||
//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
|
||||
var addrGrpCnt = tableL.getRows()[i].getData().addrGrpCnt;
|
||||
|
||||
totAddrCnt = Number(totAddrCnt) + Number(addrGrpCnt);
|
||||
|
||||
}
|
||||
|
||||
return totAddrCnt;
|
||||
}
|
||||
@ -532,7 +532,7 @@ input[type=text]::-ms-reveal, input[type=password]::-ms-reveal, input[type=email
|
||||
|
||||
/* 문자 예약 */
|
||||
.send_top .send_right .phone_bottom {position: absolute; bottom: 0; left: 0;}
|
||||
.send_top .send_right .send_rev {width: 310px; margin: 50px 0 0;}
|
||||
.send_top .send_right .send_rev {width: 310px; margin: 50px 0 0; position:relative;}
|
||||
.send_top .send_right .send_rev .rev_selected {background-color: #f5f5f5;padding: 15px 0 15px 10px;border: 1px solid #d6d8da;border-radius: 10px;}
|
||||
.send_top .send_right .send_rev .rev_radio input[type="radio"]+label {color: #555;margin-right: 8px;}
|
||||
.send_top .send_right .send_rev select+label {color: #555;font-weight: 300; font-size: 14px;}
|
||||
@ -554,6 +554,8 @@ input[type=text]::-ms-reveal, input[type=password]::-ms-reveal, input[type=email
|
||||
.send_top .send_right .send_rev .send_content .rev_radio ul li input[type=radio] + label {vertical-align:top;}
|
||||
.send_top .send_right .send_rev .send_content .send_btn {display:flex;width:245px;justify-content:space-between;}
|
||||
.send_top .send_right .send_rev .send_content .send_btn button {width:calc(100%/2 - 4px);height:60px;}
|
||||
.send_top .send_right .send_rev .use_enter {position:absolute; padding:3px 0 0 65px; display:flex;align-items:center;}
|
||||
.send_top .send_right .send_rev .use_enter label {font-size:16px!important; padding:0 0 0 4px; font-weight:400!important;}
|
||||
|
||||
/* sub1 엑셀 문자(대량 전송) */
|
||||
.send_top .get_excel .send_right .phone {height: 93%; position: absolute; top: 0; right: 0;}
|
||||
|
||||
@ -53,7 +53,7 @@ var publishCommon = {
|
||||
|
||||
if (chkCnt == 0) {
|
||||
|
||||
alert("받는사람을 추가해 주세요.");
|
||||
//alert("받는사람을 추가해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user