Compare commits
No commits in common. "master" and "api_개선" have entirely different histories.
@ -284,6 +284,7 @@ public class MjonMsgVO extends ComDefaultVO{
|
|||||||
private String totFWPriceSum;
|
private String totFWPriceSum;
|
||||||
private String resultLogUpdtPnttm;
|
private String resultLogUpdtPnttm;
|
||||||
|
|
||||||
|
private int successCount; // 문자발송 성공건수
|
||||||
private int callRejectionCount; // 번호도용 문자차단 서비스로 착신거절 오류 수
|
private int callRejectionCount; // 번호도용 문자차단 서비스로 착신거절 오류 수
|
||||||
private String callbackYn; // 번호도용 문자차단 서비스로 인한 발송실패 문자알림 여부(N:미알림, Y:알림)
|
private String callbackYn; // 번호도용 문자차단 서비스로 인한 발송실패 문자알림 여부(N:미알림, Y:알림)
|
||||||
private String userCallbackYn;
|
private String userCallbackYn;
|
||||||
@ -314,18 +315,5 @@ public class MjonMsgVO extends ComDefaultVO{
|
|||||||
private List<MjonMsgSendVO> mjonMsgSendVOList = new ArrayList<>();
|
private List<MjonMsgSendVO> mjonMsgSendVOList = new ArrayList<>();
|
||||||
|
|
||||||
private String rsltCodeMsgTxt; //전송사 결과 코드 내용
|
private String rsltCodeMsgTxt; //전송사 결과 코드 내용
|
||||||
|
|
||||||
|
|
||||||
private int waitCount; //대기 건수
|
|
||||||
private int successCount; //문자발송 성공건수
|
|
||||||
private int failCount; //실패 건수
|
|
||||||
private int resendWaitCount; //대체문자 대기 건수
|
|
||||||
private int resendSuccCount; //대체문자 성공 건수
|
|
||||||
private int resendFailCount; //대체문자 실패 건수
|
|
||||||
|
|
||||||
private String[] msgTypeList; //발송 타입 리스트
|
|
||||||
|
|
||||||
private String selectType; //조회 타입 ex) reqDateLast3M : 발송일이 지난 3개월간
|
|
||||||
private String yellowId; //채널아이디
|
|
||||||
private String yellowIdYn; //채널아이디 여부
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -190,8 +190,7 @@ public interface MjonMsgDataService {
|
|||||||
|
|
||||||
public MjonMsgReturnVO sendSysMsgData(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception;
|
public MjonMsgReturnVO sendSysMsgData(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception;
|
||||||
|
|
||||||
//mj_msg_data 테이블의 msg_result 컬럼을 이용한 발송건수 조회 쿼리
|
|
||||||
public List<MjonMsgVO> selectSendListByResultCode(MjonMsgVO mjonMsgVO) throws Exception;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -462,10 +462,7 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
|
|||||||
return totalInsertedCount; // 처리된 전체 데이터 수 반환
|
return totalInsertedCount; // 처리된 전체 데이터 수 반환
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public List<MjonMsgVO> selectSendListByResultCode(MjonMsgVO mjonMsgVO) throws Exception{
|
|
||||||
return (List<MjonMsgVO>) list("mjonMsgDAO.selectSendListByResultCode",mjonMsgVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Timestamp convertToTimestamp(String reqDate) {
|
public Timestamp convertToTimestamp(String reqDate) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -5147,10 +5147,5 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
|
|
||||||
return returnVO;
|
return returnVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<MjonMsgVO> selectSendListByResultCode(MjonMsgVO mjonMsgVO) throws Exception {
|
|
||||||
return mjonMsgDataDAO.selectSendListByResultCode(mjonMsgVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,4 +45,479 @@ import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
|
|||||||
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S") // Scheduler Lock 사용 가능 설정 (기본 30초동안 Lock)
|
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S") // Scheduler Lock 사용 가능 설정 (기본 30초동안 Lock)
|
||||||
public class SchedulerUtil {
|
public class SchedulerUtil {
|
||||||
|
|
||||||
|
@Resource(name = "SchdlrManageService")
|
||||||
|
private SchdlrManageService schdlrManageService;
|
||||||
|
|
||||||
|
@Resource (name = "MailTemplateService")
|
||||||
|
private MailTemplateService mailTemplateService;
|
||||||
|
|
||||||
|
@Resource (name = "userManageService")
|
||||||
|
private EgovUserManageService egovUserManageService;
|
||||||
|
|
||||||
|
@Resource(name = "hackIpService")
|
||||||
|
private HackIpService hackIpService;
|
||||||
|
|
||||||
|
@Resource(name = "mjonMsgService")
|
||||||
|
private MjonMsgService mjonMsgService;
|
||||||
|
|
||||||
|
@Resource(name = "KakaoStatisticsService")
|
||||||
|
private KakaoStatisticsService kakaoStatisticsService;
|
||||||
|
|
||||||
|
@Resource(name = "propertiesService")
|
||||||
|
protected EgovPropertyService propertyService;
|
||||||
|
|
||||||
|
@Resource(name = "conectStatsService")
|
||||||
|
private EgovConectStatsService conectStatsService;
|
||||||
|
|
||||||
|
/** 알림전송 Util */
|
||||||
|
@Resource(name = "mjonNoticeSendUtil")
|
||||||
|
private MjonNoticeSendUtil mjonNoticeSendUtil;
|
||||||
|
|
||||||
|
@Resource(name = "faxAdmService")
|
||||||
|
private FaxAdmService faxAdmService;
|
||||||
|
|
||||||
|
@Resource(name = "LetterService")
|
||||||
|
private LetterService letterService;
|
||||||
|
|
||||||
|
@Resource(name="MjonMsgDataDAO")
|
||||||
|
private MjonMsgDataDAO mjonMsgDataDAO;
|
||||||
|
|
||||||
|
/** 설정값 가져오기 */
|
||||||
|
@Value("#{globalSettings['Globals.Env']}")
|
||||||
|
private String GlobalsEnv;
|
||||||
|
|
||||||
|
private static final String ONE_MIN = "PT1M"; // 1분동안 LOCK
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
|
||||||
|
* */
|
||||||
|
// Schdule Lock (10분동안)
|
||||||
|
@Scheduled(cron = "0 0/10 * * * ?")
|
||||||
|
@SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runScenarioOneTime() throws Exception {
|
||||||
|
|
||||||
|
// do something...
|
||||||
|
try {
|
||||||
|
System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
||||||
|
System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
||||||
|
System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
||||||
|
System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
||||||
|
System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
|
||||||
|
|
||||||
|
//문자 환불, 팩스 환불
|
||||||
|
|
||||||
|
|
||||||
|
PayBack("");
|
||||||
|
|
||||||
|
/*
|
||||||
|
// 문자 환불
|
||||||
|
schdlrManageService.msgFailPayBack();
|
||||||
|
* */
|
||||||
|
|
||||||
|
|
||||||
|
// do something...
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 매일 5시20분 20초에 31일전 데이터에서 환불 대상을 찾아서 환불 한다.
|
||||||
|
* */
|
||||||
|
@Scheduled(cron = "20 25 5 * * ?")
|
||||||
|
@SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runScenarioOneTimeOneByDay() throws Exception {
|
||||||
|
|
||||||
|
// do something...
|
||||||
|
try {
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====runScenarioOneTimeOneByDay =============>");
|
||||||
|
//문자 환불, 팩스 환불
|
||||||
|
PayBack("ONE");
|
||||||
|
|
||||||
|
/*
|
||||||
|
// 문자 환불
|
||||||
|
schdlrManageService.msgFailPayBack();
|
||||||
|
* */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Schdule Lock (2분동안)
|
||||||
|
//세틀뱅크 자동 충전 배치
|
||||||
|
@Scheduled(cron = "0 0/2 * * * ?")
|
||||||
|
@SchedulerLock(name = "runVacsChargeOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runVacsChargeOneTime() throws Exception {
|
||||||
|
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====runVacsChargeOneTime =============>");
|
||||||
|
// do something...
|
||||||
|
try {
|
||||||
|
|
||||||
|
schdlrManageService.vacsAutoCharge();
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 매일 오전 4시마다 실행 ex) 04:00
|
||||||
|
// 휴면회원으로 지정
|
||||||
|
@Scheduled(cron = "0 0 4 * * *")
|
||||||
|
@SchedulerLock(name = "runMemberDormantUpdate", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runMemberDormantUpdate() throws Exception {
|
||||||
|
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====runMemberDormantUpdate =============>");
|
||||||
|
try {
|
||||||
|
|
||||||
|
mailTemplateService.setMemberDormantUpdate();
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 매일 오전 8시마다 실행 ex) 08:00
|
||||||
|
// 휴면회원 메일발송
|
||||||
|
@Scheduled(cron = "0 0 8 * * *")
|
||||||
|
@SchedulerLock(name = "runMailSendMemberDormant", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runMailSendMemberDormant() throws Exception {
|
||||||
|
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====runMailSendMemberDormant =============>");
|
||||||
|
try {
|
||||||
|
|
||||||
|
mailTemplateService.mailSendMemberDormant();
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 매일 오전 10시마다 실행 ex) 10:00
|
||||||
|
// 휴면회원 SMS발송
|
||||||
|
@Scheduled(cron = "0 0 10 * * *")
|
||||||
|
@SchedulerLock(name = "runSmsSendMemberDormant", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runSmsSendMemberDormant() throws Exception {
|
||||||
|
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====runSmsSendMemberDormant =============>");
|
||||||
|
try {
|
||||||
|
|
||||||
|
mailTemplateService.smsSendMemberDormant();
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 매일 오전 5시마다 실행 ex) 05:00
|
||||||
|
// 문자 우선순위 랜덤 업데이트 All
|
||||||
|
@Scheduled(cron = "0 0 5 * * *")
|
||||||
|
@SchedulerLock(name = "runLetterPriorityUpdateAll", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runLetterPriorityUpdateAll() throws Exception {
|
||||||
|
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====runLetterPriorityUpdateAll =============>");
|
||||||
|
try {
|
||||||
|
|
||||||
|
letterService.updateLetterPriorityAll();
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 매달 1일 0시 10분 실행
|
||||||
|
// "0 10 0 1 * *"
|
||||||
|
// 매달 3일 6시 40분 실행
|
||||||
|
// "0 40 18 3 * *"
|
||||||
|
// 매일 오전 1시 1분 0초
|
||||||
|
// "0 1 1 * * *"
|
||||||
|
// @Scheduled(cron = "0 * * * * *") // 1분마다 실행(TEST)
|
||||||
|
@Scheduled(cron = "0 1 0 1 * *") // 매달 1일 0시 1분 실행
|
||||||
|
@SchedulerLock(name = "runUserCashByAutoCashUpdate", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runUserCashByAutoCashUpdate() throws Exception {
|
||||||
|
//System.out.println("AutoCash Start");
|
||||||
|
|
||||||
|
// 후불제회원 Cash충전
|
||||||
|
//egovUserManageService.updateUserCashByAutoCash();
|
||||||
|
|
||||||
|
//System.out.println("AutoCash End");
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
System.out.println("AutoCash Start");
|
||||||
|
|
||||||
|
// 후불제회원 Cash충전
|
||||||
|
egovUserManageService.updateUserCashByAutoCash();
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 트래픽 감시 스케줄러
|
||||||
|
// 3분마다 실행
|
||||||
|
@Scheduled(cron = "0 0/3 * * * ?")
|
||||||
|
@SchedulerLock(name = "highTrafficIgnoreIpInsert", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void highTrafficIgnoreIpInsert() throws Exception {
|
||||||
|
|
||||||
|
//5분 내 300회 이상 접속로그가 있는 경우 차단아이피 등록
|
||||||
|
//hackIpService.selectHighTrafficNotIgnoreIp();
|
||||||
|
|
||||||
|
try {
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====highTrafficIgnoreIpInsert =============>");
|
||||||
|
|
||||||
|
|
||||||
|
//5분 내 300회 이상 접속로그가 있는 경우 차단아이피 등록
|
||||||
|
hackIpService.selectHighTrafficNotIgnoreIp();
|
||||||
|
|
||||||
|
|
||||||
|
// do something...
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// AGENT별 SMS LMS MMS 발송건수 , 카카오 알림톡 발송건수 통계 스케쥴러
|
||||||
|
@Scheduled(cron = "0 10 1 * * *") // 매일 새벽1시 10분 실행
|
||||||
|
@SchedulerLock(name = "insertAgentSmsCountStat", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void agentSmsCountStatInsert() throws Exception {
|
||||||
|
try {
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====insertAgentSmsCountStat scheduler RUN (YESTERDAY) =============>");
|
||||||
|
int minusDate =EgovDateUtil.dayMinusToInt("yyyyMMdd", 1);
|
||||||
|
int minusSevenDays =EgovDateUtil.dayMinusToInt("yyyyMMdd", 7);
|
||||||
|
|
||||||
|
// 전일 문자발송 건 통계 insert
|
||||||
|
MjonMsgStatVO mjonMsgStatVO = new MjonMsgStatVO();
|
||||||
|
mjonMsgStatVO.setStatStartDate(minusSevenDays);
|
||||||
|
mjonMsgStatVO.setStatEndDate(minusDate);
|
||||||
|
mjonMsgService.insertAgentSmsCountStat(mjonMsgStatVO);
|
||||||
|
|
||||||
|
// 전일 알림톡발송 건 통계 insert
|
||||||
|
MjonKakaoAtStatVO kakaoAtStatVO = new MjonKakaoAtStatVO();
|
||||||
|
kakaoAtStatVO.setStatStartDate(minusSevenDays);
|
||||||
|
kakaoAtStatVO.setStatEndDate(minusDate);
|
||||||
|
kakaoStatisticsService.insertKakaoAtCountStat(kakaoAtStatVO);
|
||||||
|
|
||||||
|
// 전일 알림톡발송 건 통계 insert
|
||||||
|
FaxStatVO faxStatVO = new FaxStatVO();
|
||||||
|
faxStatVO.setStatStartDate(minusSevenDays);
|
||||||
|
faxStatVO.setStatEndDate(minusDate);
|
||||||
|
faxAdmService.insertFaxCountStat(faxStatVO);
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AGENT별 SMS 발송건수 통계 스케쥴러
|
||||||
|
@Scheduled(cron = "0 5,35 * * * *") // 5,35분마다 실행
|
||||||
|
@SchedulerLock(name = "insertAgentSmsCountStatByMinute", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void agentSmsCountStatByMinuteInsert() throws Exception {
|
||||||
|
try {
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====insertAgentSmsCountStatByMinute =============>");
|
||||||
|
|
||||||
|
int nowDate =EgovDateUtil.nowDateToInt("yyyyMMdd");
|
||||||
|
|
||||||
|
// 당일 문자발송 건 통계 insert
|
||||||
|
MjonMsgStatVO mjonMsgStatVO = new MjonMsgStatVO();
|
||||||
|
mjonMsgStatVO.setStatStartDate(nowDate);
|
||||||
|
mjonMsgStatVO.setStatEndDate(nowDate);
|
||||||
|
mjonMsgService.insertAgentSmsCountStat(mjonMsgStatVO);
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AGENT별 Kakao 발송건수 통계 스케쥴러
|
||||||
|
//@Scheduled(cron = "0 10,40 * * * *") // 10,40분마다 실행
|
||||||
|
//@Scheduled(cron = "0 47 * * * *") // 47분마다 실행
|
||||||
|
@Scheduled(cron = "0 57 23 * * *")
|
||||||
|
@SchedulerLock(name = "insertAgentKakaoCountStatByMinute", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void agentKakaoCountStatByMinuteInsert() throws Exception {
|
||||||
|
try {
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====insertAgentKakaoCountStatByMinute =============>");
|
||||||
|
|
||||||
|
int nowDate =EgovDateUtil.nowDateToInt("yyyyMMdd");
|
||||||
|
|
||||||
|
// 당일 알림톡발송 건 통계 insert
|
||||||
|
MjonKakaoAtStatVO kakaoAtStatVO = new MjonKakaoAtStatVO();
|
||||||
|
kakaoAtStatVO.setStatStartDate(nowDate);
|
||||||
|
kakaoAtStatVO.setStatEndDate(nowDate);
|
||||||
|
kakaoStatisticsService.insertKakaoAtCountStat(kakaoAtStatVO);
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AGENT별 Fax 발송건수 통계 스케쥴러
|
||||||
|
@Scheduled(cron = "0 15,45 * * * *") // 15,45분마다 실행
|
||||||
|
@SchedulerLock(name = "insertAgentFaxCountStatByMinute", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void agentFaxCountStatByMinuteInsert() throws Exception {
|
||||||
|
try {
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====insertAgentFaxCountStatByMinute =============>");
|
||||||
|
|
||||||
|
int nowDate =EgovDateUtil.nowDateToInt("yyyyMMdd");
|
||||||
|
|
||||||
|
// 전일 카톡발송 건 통계 insert
|
||||||
|
FaxStatVO faxStatVO = new FaxStatVO();
|
||||||
|
faxStatVO.setStatStartDate(nowDate);
|
||||||
|
faxStatVO.setStatEndDate(nowDate);
|
||||||
|
faxAdmService.insertFaxCountStat(faxStatVO);
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 대시보드 어제/오늘 접속현황 & 접속통계
|
||||||
|
@Scheduled(cron = "0 1 0 * * *") // 매일 새벽0시 1분 실행
|
||||||
|
@SchedulerLock(name = "insertDashBoardStat", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void dashBoardStatInsert() throws Exception {
|
||||||
|
try {
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====dashBoardStatInsert =============>");
|
||||||
|
// 어제날짜
|
||||||
|
Calendar calendar = new GregorianCalendar();
|
||||||
|
SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
|
||||||
|
String yesterdayDate = SDF.format(calendar.getTime());
|
||||||
|
calendar.add(Calendar.DATE, -1);
|
||||||
|
yesterdayDate = SDF.format(calendar.getTime());
|
||||||
|
|
||||||
|
StatsVO yesterdayStatsVO = new StatsVO();
|
||||||
|
yesterdayStatsVO.setStatDate(yesterdayDate);
|
||||||
|
|
||||||
|
// 대시보드 인서트 Logic
|
||||||
|
conectStatsService.insertDashBoardStatLogic(yesterdayStatsVO);
|
||||||
|
|
||||||
|
// 대시보드 업데이트 Logic
|
||||||
|
conectStatsService.updateDashBoardStatLogic(yesterdayStatsVO);
|
||||||
|
|
||||||
|
|
||||||
|
// 오늘날짜
|
||||||
|
Date nowDate = new Date();
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
String strNowDate = simpleDateFormat.format(nowDate);
|
||||||
|
|
||||||
|
StatsVO statsVO = new StatsVO();
|
||||||
|
statsVO.setStatDate(strNowDate);
|
||||||
|
|
||||||
|
// 대시보드 인서트 Logic
|
||||||
|
conectStatsService.insertDashBoardStatLogic(statsVO);
|
||||||
|
|
||||||
|
// 대시보드 업데이트 Logic
|
||||||
|
conectStatsService.updateDashBoardStatLogic(statsVO);
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 대시보드 어제/오늘 접속현황 & 접속통계
|
||||||
|
@Scheduled(cron = "0 20,50 * * * *") // 20,50분마다 실행
|
||||||
|
@SchedulerLock(name = "updateDashBoardStat", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void dashBoardStatUpdate() throws Exception {
|
||||||
|
|
||||||
|
try {
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====DashBoardStatUpdate =============>");
|
||||||
|
// 오늘날짜
|
||||||
|
Date nowDate = new Date();
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
String strNowDate = simpleDateFormat.format(nowDate);
|
||||||
|
|
||||||
|
StatsVO statsVO = new StatsVO();
|
||||||
|
statsVO.setStatDate(strNowDate);
|
||||||
|
|
||||||
|
// 대시보드 인서트 Logic
|
||||||
|
conectStatsService.insertDashBoardStatLogic(statsVO);
|
||||||
|
|
||||||
|
// 대시보드 업데이트 Logic
|
||||||
|
conectStatsService.updateDashBoardStatLogic(statsVO);
|
||||||
|
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 이용약관 메일발송
|
||||||
|
@Scheduled(cron = "0 */15 * * * *") // 15분마다 실행
|
||||||
|
@SchedulerLock(name = "sendTermsEmail", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void TermsEmailSend() throws Exception {
|
||||||
|
|
||||||
|
try {
|
||||||
|
System.out.println("=============EgovSysLogScheduling=====TermsEmailSend =============>");
|
||||||
|
|
||||||
|
// 이용약관 회원 전체발송
|
||||||
|
mjonNoticeSendUtil.userAllTermsEmailSend();
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public LockProvider lockProvider(DataSource dataSource) {
|
||||||
|
return new JdbcTemplateLockProvider(dataSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Scheduled(cron = "0 0/3 * * * ?") // 3분마다 실행
|
||||||
|
@SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runKakaoOneTime() throws Exception {
|
||||||
|
|
||||||
|
// do something...
|
||||||
|
try {
|
||||||
|
System.out.println("=============SchedulerUtil=====runKakaoOneTime =============>");
|
||||||
|
schdlrManageService.kakaoFailPayBack();
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//환불 실행
|
||||||
|
private void PayBack(String p_type) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
// 문자 환불
|
||||||
|
schdlrManageService.payBack_advc(p_type);
|
||||||
|
|
||||||
|
/*
|
||||||
|
if ("ONE".equals(p_type)) { //하루에 한번만 31일 대상으로 실행
|
||||||
|
schdlrManageService.msgFailPayBackOneByDay();
|
||||||
|
}else {
|
||||||
|
// 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
|
||||||
|
//어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14
|
||||||
|
//schdlrManageService.msgFailPayBack();
|
||||||
|
|
||||||
|
List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList();
|
||||||
|
|
||||||
|
long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간
|
||||||
|
System.out.println("== msgFailList =============> : "+ msgFailList.size());
|
||||||
|
for(MjonMsgVO vo : msgFailList) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
mjonMsgDataDAO.updateMsgSentFailPayBack(vo);
|
||||||
|
}catch(Exception ex) {
|
||||||
|
System.out.println("=============SchedulerUtil=====PayBack Catch =============>");
|
||||||
|
System.out.println(vo.getUserId()+" : "+ vo.getMsgGroupId() +" : "+ vo.getUserData());
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간
|
||||||
|
long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위)
|
||||||
|
System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초");
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
System.out.println("==== faxFailPayBack ====");
|
||||||
|
// 팩스 환불
|
||||||
|
schdlrManageService.faxFailPayBack();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,7 +19,6 @@ import java.security.spec.RSAPublicKeySpec;
|
|||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -1472,33 +1471,61 @@ public class EgovUserManageController {
|
|||||||
model.addAttribute("channelIdCnt", channelIdCnt);
|
model.addAttribute("channelIdCnt", channelIdCnt);
|
||||||
model.addAttribute("resultKakaoChannelIDList", resultKakaoChannelIDList);
|
model.addAttribute("resultKakaoChannelIDList", resultKakaoChannelIDList);
|
||||||
|
|
||||||
/* 카카오 전송 완료, 예약 조회 */
|
/*
|
||||||
/* 전송완료, 예약 공통 set */
|
* 알림톡/친구톡 최근 발송내역 리스트 불러오기
|
||||||
MjonMsgVO kakaoListVO = new MjonMsgVO();
|
*/
|
||||||
kakaoListVO.setUserId(reqMberManageVO.getMberId());
|
|
||||||
kakaoListVO.setReserveCYn("N");
|
KakaoVO sendKakaoVO = new KakaoVO();
|
||||||
kakaoListVO.setRecordCountPerPage(3);
|
//sendKakaoVO.setSearchCondition2("N");//예약건은 제외하기
|
||||||
kakaoListVO.setFirstIndex(0);
|
sendKakaoVO.setReserveCYn("N");//예약취소건은 제외하기
|
||||||
kakaoListVO.setYellowIdYn("Y");
|
sendKakaoVO.setUserId(reqMberManageVO.getMberId());
|
||||||
String[] msgTypeList = {"8","9"};
|
// 문자발송 완료건은 모두 보이도록 처리
|
||||||
kakaoListVO.setMsgTypeList(msgTypeList);
|
//kakaoVO.setMsgType("8");
|
||||||
|
sendKakaoVO.setSearchSortCnd("reqDate");
|
||||||
|
sendKakaoVO.setSearchSortOrd("desc");
|
||||||
|
sendKakaoVO.setFirstIndex(0);
|
||||||
|
sendKakaoVO.setPageType("sand");
|
||||||
|
List<KakaoVO> kakaoResultList = new ArrayList<KakaoVO>();
|
||||||
|
//kakaoResultList = mjonKakaoATService.selectMjonKakaoATGroupCompleteByUserList(sendKakaoVO);
|
||||||
|
|
||||||
|
/*250620 - 회원 정보 팝업 내 최근 알림톡/친구톡 전송 내역을 조회하는 임시 쿼리
|
||||||
|
* 기존 쿼리 성능으로 인하여 회원 정보 팝업 오픈 시 간헐적으로 에러 발생
|
||||||
|
* 임시 쿼리는 화면에 필요한 최소한의 정보만 조회하며, USER_ID를 제외한 조건은 하드코딩 처리
|
||||||
|
* DB 개선 작업 이후 알림톡/친구톡 관련 조회 공통 쿼리 생성 예정
|
||||||
|
* */
|
||||||
|
sendKakaoVO.setReserveYn("N");
|
||||||
|
kakaoResultList = mjonKakaoATService.selectMjonKakaoATGroupCompleteByUserListTemp(sendKakaoVO);
|
||||||
|
|
||||||
/* 전송완료 set*/
|
|
||||||
kakaoListVO.setSelectType("reqDateLast3M"); //발송일시가 지금부터 지난 3개월
|
|
||||||
kakaoListVO.setSearchSortCnd("REQ_DATE");
|
|
||||||
kakaoListVO.setSearchSortOrd("DESC");
|
|
||||||
List<MjonMsgVO> kakaoResultList = mjonMsgDataService.selectSendListByResultCode(kakaoListVO);
|
|
||||||
model.addAttribute("kakaoResultList", kakaoResultList);
|
model.addAttribute("kakaoResultList", kakaoResultList);
|
||||||
|
|
||||||
/* 예약 set */
|
/*
|
||||||
kakaoListVO.setReserveYn("Y");
|
* 알림톡/친구톡 예약발송 리스트 불러오기
|
||||||
kakaoListVO.setSelectType("reqDateNext3M"); //발송일시가 지금부터 다음 3개월
|
*/
|
||||||
kakaoListVO.setSearchSortCnd("REQ_DATE");
|
|
||||||
kakaoListVO.setSearchSortOrd("ASC");
|
KakaoVO reserveKakaoVO = new KakaoVO();
|
||||||
List<MjonMsgVO> kakaoReserveList = mjonMsgDataService.selectSendListByResultCode(kakaoListVO);
|
reserveKakaoVO.setReserveYn("Y"); //예약건만 조회
|
||||||
Collections.reverse(kakaoReserveList); //조회된 3건들은 발송일 내림차순으로 변경
|
reserveKakaoVO.setSearchCondition2("Y");//예약건만 불러오기
|
||||||
|
reserveKakaoVO.setReserveCYn("N");//예약취소건은 제외하기
|
||||||
|
reserveKakaoVO.setUserId(reqMberManageVO.getMberId());
|
||||||
|
// 문자발송 완료건은 모두 보이도록 처리
|
||||||
|
//kakaoVO.setMsgType("8");
|
||||||
|
reserveKakaoVO.setSearchSortCnd("reqDate");
|
||||||
|
reserveKakaoVO.setSearchSortOrd("desc");
|
||||||
|
reserveKakaoVO.setFirstIndex(0);
|
||||||
|
reserveKakaoVO.setPageType("sand");
|
||||||
|
List<KakaoVO> kakaoReserveList = new ArrayList<KakaoVO>();
|
||||||
|
//kakaoReserveList = mjonKakaoATService.selectReserveMjonKakaoATGroupList(reserveKakaoVO);
|
||||||
|
|
||||||
|
/*250620 - 회원 정보 팝업 내 최근 알림톡/친구톡 전송 내역을 조회하는 임시 쿼리
|
||||||
|
* 기존 쿼리 성능으로 인하여 회원 정보 팝업 오픈 시 간헐적으로 에러 발생
|
||||||
|
* 임시 쿼리는 화면에 필요한 최소한의 정보만 조회하며, USER_ID를 제외한 조건은 하드코딩 처리
|
||||||
|
* DB 개선 작업 이후 알림톡/친구톡 관련 조회 공통 쿼리 생성 예정
|
||||||
|
* */
|
||||||
|
sendKakaoVO.setReserveYn("Y");
|
||||||
|
kakaoReserveList = mjonKakaoATService.selectMjonKakaoATGroupCompleteByUserListTemp(sendKakaoVO);
|
||||||
model.addAttribute("kakaoReserveList", kakaoReserveList);
|
model.addAttribute("kakaoReserveList", kakaoReserveList);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 알림톡 지연처리 알림톡 내용 불러오기(30분 지연처리된 알림톡 내역 불러오기)
|
* 알림톡 지연처리 알림톡 내용 불러오기(30분 지연처리된 알림톡 내역 불러오기)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -2681,7 +2681,7 @@
|
|||||||
|
|
||||||
<isNotEmpty property="searchCondition3" prepend="AND">
|
<isNotEmpty property="searchCondition3" prepend="AND">
|
||||||
<isEqual property="searchCondition3" compareValue="10">
|
<isEqual property="searchCondition3" compareValue="10">
|
||||||
(MMGD.SEND_KIND = 'H' or MMGD.SEND_KIND is null)
|
MMGD.SEND_KIND ='H'
|
||||||
</isEqual>
|
</isEqual>
|
||||||
<isEqual property="searchCondition3" compareValue="20">
|
<isEqual property="searchCondition3" compareValue="20">
|
||||||
MMGD.SEND_KIND ='A'
|
MMGD.SEND_KIND ='A'
|
||||||
@ -2781,19 +2781,8 @@
|
|||||||
<isEqual property="searchCondition" compareValue="3">
|
<isEqual property="searchCondition" compareValue="3">
|
||||||
AND MMGD.SMS_TXT LIKE CONCAT ('%', #searchKeyword#,'%')
|
AND MMGD.SMS_TXT LIKE CONCAT ('%', #searchKeyword#,'%')
|
||||||
</isEqual>
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
|
|
||||||
<isNotEmpty property="searchCondition3" prepend="AND">
|
|
||||||
<isEqual property="searchCondition3" compareValue="10">
|
|
||||||
(MMGD.SEND_KIND = 'H' or MMGD.SEND_KIND is null)
|
|
||||||
</isEqual>
|
|
||||||
<isEqual property="searchCondition3" compareValue="20">
|
|
||||||
MMGD.SEND_KIND ='A'
|
|
||||||
</isEqual>
|
|
||||||
</isNotEmpty>
|
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
<select id="mjonKakaoATDAO.selectMjonKakaoATGroupCompleteByUserList_advc_back" parameterClass="kakaoVO" resultClass="kakaoVO">
|
<select id="mjonKakaoATDAO.selectMjonKakaoATGroupCompleteByUserList_advc_back" parameterClass="kakaoVO" resultClass="kakaoVO">
|
||||||
SELECT
|
SELECT
|
||||||
|
|||||||
@ -1508,8 +1508,7 @@
|
|||||||
MRC.RESULT_CODE AS resultCode, /** 문자 결과 코드 정보*/
|
MRC.RESULT_CODE AS resultCode, /** 문자 결과 코드 정보*/
|
||||||
MRC.RESULT_CODE2 AS resultCode2, /** 문자 결과 코드 정보*/
|
MRC.RESULT_CODE2 AS resultCode2, /** 문자 결과 코드 정보*/
|
||||||
MGD.MSG_KIND AS msgKind, /** 문자 종류 -일반, 광고, 선거문자*/
|
MGD.MSG_KIND AS msgKind, /** 문자 종류 -일반, 광고, 선거문자*/
|
||||||
MGD.MSG_GROUP_ID AS msgGroupId,
|
MGD.MSG_GROUP_ID AS msgGroupId
|
||||||
MGD.SEND_KIND as sendKind
|
|
||||||
FROM MJ_MSG_DATA A
|
FROM MJ_MSG_DATA A
|
||||||
LEFT JOIN MJ_MSG_GROUP_DATA MGD
|
LEFT JOIN MJ_MSG_GROUP_DATA MGD
|
||||||
ON A.MSG_GROUP_ID = MGD.MSG_GROUP_ID
|
ON A.MSG_GROUP_ID = MGD.MSG_GROUP_ID
|
||||||
@ -8273,7 +8272,6 @@
|
|||||||
|
|
||||||
<!-- 문자발송 완료건은 모두 보이도록 처리 -->
|
<!-- 문자발송 완료건은 모두 보이도록 처리 -->
|
||||||
<select id="mjonMsgDAO.selectMjonMsgGroupCompleteList_advc" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
|
<select id="mjonMsgDAO.selectMjonMsgGroupCompleteList_advc" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
|
||||||
/* mjonMsgDAO.selectMjonMsgGroupCompleteList_advc */
|
|
||||||
SELECT
|
SELECT
|
||||||
M.totCnt
|
M.totCnt
|
||||||
, M.msgGroupId
|
, M.msgGroupId
|
||||||
@ -8463,12 +8461,12 @@
|
|||||||
THEN (REQ_DATE <= NOW() OR (IFNULL(DELAY_YN, 'N') = 'Y' AND IFNULL(DELAY_COMPLETE_YN, 'N') = 'N'))
|
THEN (REQ_DATE <= NOW() OR (IFNULL(DELAY_YN, 'N') = 'Y' AND IFNULL(DELAY_COMPLETE_YN, 'N') = 'N'))
|
||||||
END
|
END
|
||||||
]]>
|
]]>
|
||||||
<isNotEmpty property="sendKind" prepend="AND">
|
<isNotEmpty property="sendKind">
|
||||||
<isEqual property="sendKind" compareValue="H">
|
<isEqual property="sendKind" compareValue="H">
|
||||||
(A.SEND_KIND = 'H' or A.SEND_KIND is null)
|
AND A.SEND_KIND = 'H'
|
||||||
</isEqual>
|
</isEqual>
|
||||||
<isEqual property="sendKind" compareValue="A">
|
<isEqual property="sendKind" compareValue="A">
|
||||||
A.SEND_KIND = 'A'
|
AND A.SEND_KIND = 'A'
|
||||||
</isEqual>
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
<isNotEmpty property="searchKeyword">
|
<isNotEmpty property="searchKeyword">
|
||||||
@ -8690,113 +8688,7 @@
|
|||||||
GROUP BY M.msgGroupId
|
GROUP BY M.msgGroupId
|
||||||
order by M.reqDate desc
|
order by M.reqDate desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="mjonMsgDAO.selectSendListByResultCode" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
|
|
||||||
SELECT
|
|
||||||
MMGD.USER_ID AS userId
|
|
||||||
, MMGD.MSG_GROUP_ID AS msgGroupId
|
|
||||||
, MMGD.MSG_TYPE AS msgType
|
|
||||||
, MMGD.REGDATE AS regDate
|
|
||||||
, MMGD.REQ_DATE AS reqDate
|
|
||||||
, MMGD.SMS_TXT AS smsTxt
|
|
||||||
, MMGD.MSG_GROUP_CNT AS msgGroupCnt
|
|
||||||
, MMGD.RESERVE_YN AS reserveYn
|
|
||||||
, MMGD.RESERVE_C_YN AS reserveCYn
|
|
||||||
, MMGD.CANCELDATE AS cancelDate
|
|
||||||
, MMGD.DELAY_YN AS delayYn
|
|
||||||
, MMGD.DELAY_COMPLETE_YN AS delayCompleteYn
|
|
||||||
, MMGD.AT_DELAY_YN AS atDelayYn
|
|
||||||
, MMGD.AT_DELAY_COMPLETE_YN AS atDelayCompleteYn
|
|
||||||
, MMD.waitCount AS waitCount
|
|
||||||
, MMD.successCount AS successCount
|
|
||||||
, MMD.failCount AS failCount
|
|
||||||
, MMD.resendWaitCount AS resendWaitCount
|
|
||||||
, MMD.resendSuccCount AS resendSuccCount
|
|
||||||
, MMD.resendFailCount AS resendFailCount
|
|
||||||
<isEqual property="yellowIdYn" compareValue="Y">
|
|
||||||
, MKPI.YELLOW_ID AS yellowId
|
|
||||||
</isEqual>
|
|
||||||
FROM
|
|
||||||
(
|
|
||||||
SELECT
|
|
||||||
USER_ID
|
|
||||||
, MSG_GROUP_ID
|
|
||||||
, MSG_TYPE
|
|
||||||
, REGDATE
|
|
||||||
, REQ_DATE
|
|
||||||
, SMS_TXT
|
|
||||||
, MSG_GROUP_CNT
|
|
||||||
, RESERVE_YN
|
|
||||||
, RESERVE_C_YN
|
|
||||||
, CANCELDATE
|
|
||||||
, DELAY_YN
|
|
||||||
, DELAY_COMPLETE_YN
|
|
||||||
, AT_DELAY_YN
|
|
||||||
, AT_DELAY_COMPLETE_YN
|
|
||||||
FROM
|
|
||||||
MJ_MSG_GROUP_DATA
|
|
||||||
WHERE 1=1
|
|
||||||
<isNotEmpty property="userId">
|
|
||||||
AND USER_ID = #userId#
|
|
||||||
</isNotEmpty>
|
|
||||||
<isNotEmpty property="msgType">
|
|
||||||
AND MSG_TYPE = #msgType#
|
|
||||||
</isNotEmpty>
|
|
||||||
<isNotEmpty property="msgTypeList">
|
|
||||||
AND MSG_TYPE IN
|
|
||||||
<iterate property="msgTypeList" open="(" close=")" conjunction=",">
|
|
||||||
#msgTypeList[]#
|
|
||||||
</iterate>
|
|
||||||
</isNotEmpty>
|
|
||||||
<isNotEmpty property="reserveYn">
|
|
||||||
AND RESERVE_YN = #reserveYn#
|
|
||||||
</isNotEmpty>
|
|
||||||
<isNotEmpty property="reserveCYn">
|
|
||||||
AND RESERVE_C_YN = #reserveCYn#
|
|
||||||
</isNotEmpty>
|
|
||||||
|
|
||||||
<isNotEmpty property="selectType">
|
|
||||||
<!-- 조회 타입 ex) last3M : 지난 3개월간 -->
|
|
||||||
<isEqual property="selectType" compareValue="reqDateLast3M">
|
|
||||||
and (REQ_DATE BETWEEN DATE_SUB(NOW(), INTERVAL 3 MONTH) AND NOW())
|
|
||||||
</isEqual>
|
|
||||||
<!-- 조회 타입 ex) next3M : 다음 3개월간 -->
|
|
||||||
<isEqual property="selectType" compareValue="reqDateNext3M">
|
|
||||||
AND (REQ_DATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 3 MONTH))
|
|
||||||
</isEqual>
|
|
||||||
</isNotEmpty>
|
|
||||||
ORDER BY 1=1
|
|
||||||
<isNotEmpty property="searchSortCnd">
|
|
||||||
,$searchSortCnd$
|
|
||||||
</isNotEmpty>
|
|
||||||
<isNotEmpty property="searchSortOrd">
|
|
||||||
$searchSortOrd$
|
|
||||||
</isNotEmpty>
|
|
||||||
LIMIT #recordCountPerPage# OFFSET #firstIndex#
|
|
||||||
) MMGD
|
|
||||||
JOIN (
|
|
||||||
SELECT
|
|
||||||
MSG_GROUP_ID
|
|
||||||
, MSG_NOTICETALK_SENDER_KEY
|
|
||||||
, SUM(CASE WHEN MSG_RESULT = '00' THEN 1 ELSE 0 END) AS waitCount
|
|
||||||
, SUM(CASE WHEN MSG_RESULT = '10' THEN 1 ELSE 0 END) AS successCount
|
|
||||||
, SUM(CASE WHEN MSG_RESULT = '20' THEN 1 ELSE 0 END) AS failCount
|
|
||||||
, SUM(CASE WHEN MSG_RESULT = '30' THEN 1 ELSE 0 END) AS resendWaitCount
|
|
||||||
, SUM(CASE WHEN MSG_RESULT = '40' THEN 1 ELSE 0 END) AS resendSuccCount
|
|
||||||
, SUM(CASE WHEN MSG_RESULT = '50' THEN 1 ELSE 0 END) AS resendFailCount
|
|
||||||
FROM
|
|
||||||
MJ_MSG_DATA
|
|
||||||
GROUP BY
|
|
||||||
MSG_GROUP_ID
|
|
||||||
) MMD
|
|
||||||
ON MMGD.MSG_GROUP_ID = MMD.MSG_GROUP_ID
|
|
||||||
<isEqual property="yellowIdYn" compareValue="Y">
|
|
||||||
LEFT JOIN
|
|
||||||
MJ_KAKAO_PROFILE_INFO MKPI
|
|
||||||
ON MKPI.SENDER_KEY = MMD.MSG_NOTICETALK_SENDER_KEY
|
|
||||||
AND MKPI.USER_ID = MMGD.USER_ID
|
|
||||||
</isEqual>
|
|
||||||
</select>
|
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1491,8 +1491,7 @@
|
|||||||
) F
|
) F
|
||||||
ON A.MOID = F.MOID
|
ON A.MOID = F.MOID
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
/* AND A.USER_ID LIKE CONCAT('%', #searchKeyword#, '%') */
|
AND A.USER_ID LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
AND A.USER_ID = #searchKeyword#
|
|
||||||
ORDER BY 1=1 ,
|
ORDER BY 1=1 ,
|
||||||
moid desc
|
moid desc
|
||||||
LIMIT #recordCountPerPage# OFFSET #firstIndex#
|
LIMIT #recordCountPerPage# OFFSET #firstIndex#
|
||||||
|
|||||||
@ -4728,59 +4728,102 @@ function fnInputSmsTxt(){
|
|||||||
<c:choose>
|
<c:choose>
|
||||||
<c:when test="${not empty kakaoResultList}">
|
<c:when test="${not empty kakaoResultList}">
|
||||||
<c:forEach var="kakaoResultList" items="${kakaoResultList}" varStatus="status">
|
<c:forEach var="kakaoResultList" items="${kakaoResultList}" varStatus="status">
|
||||||
<tr>
|
<c:if test="${status.count < 4}">
|
||||||
<td><c:out value="${status.count}"/></td>
|
<tr>
|
||||||
<td>
|
<td><c:out value="${status.count}"/></td>
|
||||||
<c:choose>
|
<td>
|
||||||
<c:when test="${kakaoResultList.msgType == '8'}">
|
<c:choose>
|
||||||
알림톡
|
<c:when test="${kakaoResultList.msgType == '8'}">
|
||||||
</c:when>
|
알림톡
|
||||||
<c:when test="${kakaoResultList.msgType == '9'}">
|
</c:when>
|
||||||
친구톡
|
<c:when test="${kakaoResultList.msgType == '9'}">
|
||||||
</c:when>
|
친구톡
|
||||||
<c:otherwise>
|
</c:when>
|
||||||
-
|
<c:otherwise>
|
||||||
</c:otherwise>
|
-
|
||||||
</c:choose>
|
</c:otherwise>
|
||||||
</td>
|
</c:choose>
|
||||||
<td>
|
</td>
|
||||||
<fmt:parseDate value="${kakaoResultList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
<td>
|
||||||
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
<c:choose>
|
||||||
</td>
|
<c:when test="${not empty kakaoResultList.regDate}">
|
||||||
<td>
|
|
||||||
<c:if test="${kakaoResultList.reserveYn eq 'Y'}">
|
<%-- ${fnc:setStrToDataFormatter(kakaoResultList.regDate, 'MM-dd HH:mm') } --%>
|
||||||
[예약]<br/>
|
<fmt:parseDate value="${kakaoResultList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||||
</c:if>
|
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||||
<c:if test="${kakaoResultList.atDelayYn eq 'Y'
|
</c:when>
|
||||||
and kakaoResultList.atDelayCompleteYn eq 'Y'
|
<c:otherwise>
|
||||||
and not empty kakaoResultList.cancelDate}">
|
-
|
||||||
<span style="color: red;">
|
</c:otherwise>
|
||||||
[발송취소]
|
</c:choose>
|
||||||
</span>
|
</td>
|
||||||
</c:if>
|
<td>
|
||||||
<fmt:parseDate value="${kakaoResultList.reqDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
<c:choose>
|
||||||
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
<c:when test="${not empty kakaoResultList.rsltDate}">
|
||||||
</td>
|
<c:if test="${kakaoResultList.reserveYn eq 'Y'}">
|
||||||
<td><c:out value="${kakaoResultList.yellowId}"/></td>
|
[예약]<br />
|
||||||
<td class="sms_detail" style="text-align: left;">
|
</c:if>
|
||||||
<div class="ellipsis_line">
|
<fmt:parseDate value="${kakaoResultList.rsltDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||||
<c:out value="${kakaoResultList.smsTxt}"/>
|
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||||
<div class="kakao_detail_hover">
|
</c:when>
|
||||||
<c:out value="${kakaoResultList.smsTxt}"/>
|
<c:otherwise>
|
||||||
</div>
|
<c:choose>
|
||||||
</div>
|
<c:when test="${kakaoResultList.atDelayYn eq 'Y' && kakaoResultList.atDelayCompleteYn eq 'Y' && not empty kakaoResultList.cancelDate}">
|
||||||
</td>
|
<span style="color: red;">
|
||||||
<td><fmt:formatNumber value="${kakaoResultList.msgGroupCnt}" type="number" /></td>
|
[발송취소]<br />
|
||||||
<td><fmt:formatNumber value="${kakaoResultList.successCount}" type="number" /></td>
|
<c:if test="${kakaoResultList.reserveYn eq 'Y'}">
|
||||||
<td><fmt:formatNumber value="${kakaoResultList.resendSuccCount + kakaoResultList.resendFailCount + kakaoResultList.resendWaitCount}" type="number" /></td>
|
[예약]<br />
|
||||||
<td><fmt:formatNumber value="${kakaoResultList.resendSuccCount}" type="number" /></td>
|
</c:if>
|
||||||
<td><fmt:formatNumber value="${(kakaoResultList.successCount / kakaoResultList.msgGroupCnt) * 100}" pattern="#,###" />%</td>
|
<fmt:parseDate value="${kakaoResultList.cancelDate}" var="cancelDateValue" pattern="yyyy-MM-dd HH:mm"/>
|
||||||
</tr>
|
<fmt:formatDate value="${cancelDateValue}" pattern="MM-dd HH:mm"/>
|
||||||
|
</span>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${kakaoResultList.reserveCYn eq 'Y'}">
|
||||||
|
[예약취소]<br />
|
||||||
|
<fmt:parseDate value="${kakaoResultList.cancelDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||||
|
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${kakaoResultList.reserveYn eq 'Y' && kakaoResultList.reserveCYn eq 'N'}">
|
||||||
|
[예약]<br />
|
||||||
|
<fmt:parseDate value="${kakaoResultList.reqDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||||
|
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
-
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
<td><c:out value="${kakaoResultList.yellowId}"/></td>
|
||||||
|
<td class="sms_detail" style="text-align: left;">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${empty kakaoResultList.smsTxt}">
|
||||||
|
-
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<div class="ellipsis_line">
|
||||||
|
<c:out value="${kakaoResultList.smsTxt}"/>
|
||||||
|
<div class="kakao_detail_hover">
|
||||||
|
<c:out value="${kakaoResultList.smsTxt}"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td><fmt:formatNumber value="${kakaoResultList.msgGroupCnt}" type="number" /></td>
|
||||||
|
<td><fmt:formatNumber value="${kakaoResultList.successCount}" type="number" /></td>
|
||||||
|
<td><fmt:formatNumber value="${kakaoResultList.kakaoResendSuccCount + kakaoResultList.kakaoResendFailCount}" type="number" /></td>
|
||||||
|
<td><fmt:formatNumber value="${kakaoResultList.kakaoResendSuccCount}" type="number" /></td>
|
||||||
|
<td><fmt:formatNumber value="${(kakaoResultList.successCount / kakaoResultList.msgGroupCnt) * 100}" pattern="#,###" />%</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
</c:forEach>
|
</c:forEach>
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:otherwise>
|
<c:otherwise>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="11">카카오톡 전송 내역이 없습니다.</td>
|
<td colspan="11">카카오톡 발송 내역이 없습니다.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</c:otherwise>
|
</c:otherwise>
|
||||||
</c:choose>
|
</c:choose>
|
||||||
@ -4803,6 +4846,10 @@ function fnInputSmsTxt(){
|
|||||||
<col style="width:15%;">
|
<col style="width:15%;">
|
||||||
<col style="width:auto;">
|
<col style="width:auto;">
|
||||||
<col style="width:8%;">
|
<col style="width:8%;">
|
||||||
|
<col style="width:8%;">
|
||||||
|
<col style="width:8%;">
|
||||||
|
<col style="width:8%;">
|
||||||
|
<col style="width:8%;">
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@ -4813,61 +4860,112 @@ function fnInputSmsTxt(){
|
|||||||
<th>채널ID</th>
|
<th>채널ID</th>
|
||||||
<th>내용</th>
|
<th>내용</th>
|
||||||
<th>발송</th>
|
<th>발송</th>
|
||||||
|
<th>성공</th>
|
||||||
|
<th>발송(대)</th>
|
||||||
|
<th>성공(대)</th>
|
||||||
|
<th>성공율</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<c:choose>
|
<c:choose>
|
||||||
<c:when test="${not empty kakaoReserveList}">
|
<c:when test="${not empty kakaoReserveList}">
|
||||||
<c:forEach var="kakaoReserveList" items="${kakaoReserveList}" varStatus="status">
|
<c:forEach var="kakaoReserveList" items="${kakaoReserveList}" varStatus="status">
|
||||||
<tr>
|
<c:if test="${status.count < 4}">
|
||||||
<td><c:out value="${status.count}"/></td>
|
<tr>
|
||||||
<td>
|
<td><c:out value="${status.count}"/></td>
|
||||||
<c:choose>
|
<td>
|
||||||
<c:when test="${kakaoReserveList.msgType == '8'}">
|
<c:choose>
|
||||||
알림톡
|
<c:when test="${kakaoReserveList.msgType == '8'}">
|
||||||
</c:when>
|
알림톡
|
||||||
<c:when test="${kakaoReserveList.msgType == '9'}">
|
</c:when>
|
||||||
친구톡
|
<c:when test="${kakaoReserveList.msgType == '9'}">
|
||||||
</c:when>
|
친구톡
|
||||||
<c:otherwise>
|
</c:when>
|
||||||
-
|
<c:otherwise>
|
||||||
</c:otherwise>
|
-
|
||||||
</c:choose>
|
</c:otherwise>
|
||||||
</td>
|
</c:choose>
|
||||||
<td>
|
</td>
|
||||||
<fmt:parseDate value="${kakaoReserveList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
<td>
|
||||||
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
<c:choose>
|
||||||
</td>
|
<c:when test="${not empty kakaoReserveList.regDate}">
|
||||||
<td>
|
<%-- ${fnc:setStrToDataFormatter(kakaoReserveList.regDate, 'MM-dd HH:mm') } --%>
|
||||||
<c:if test="${kakaoReserveList.reserveYn eq 'Y'}">
|
<fmt:parseDate value="${kakaoReserveList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||||
[예약]<br/>
|
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||||
</c:if>
|
|
||||||
<c:if test="${kakaoReserveList.atDelayYn eq 'Y'
|
</c:when>
|
||||||
and kakaoReserveList.atDelayCompleteYn eq 'Y'
|
<c:otherwise>
|
||||||
and not empty kakaoReserveList.cancelDate}">
|
-
|
||||||
<span style="color: red;">
|
</c:otherwise>
|
||||||
[발송취소]
|
</c:choose>
|
||||||
</span>
|
</td>
|
||||||
</c:if>
|
<td>
|
||||||
<fmt:parseDate value="${kakaoReserveList.reqDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
<c:choose>
|
||||||
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
<c:when test="${not empty kakaoReserveList.rsltDate}">
|
||||||
</td>
|
<c:if test="${kakaoReserveList.reserveYn eq 'Y'}">
|
||||||
<td><c:out value="${kakaoReserveList.yellowId}"/></td>
|
[예약]<br />
|
||||||
<td class="sms_detail" style="text-align: left;">
|
</c:if>
|
||||||
<div class="ellipsis_line">
|
<fmt:parseDate value="${kakaoReserveList.rsltDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||||
<c:out value="${kakaoReserveList.smsTxt}"/>
|
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||||
<div class="kakao_detail_hover">
|
</c:when>
|
||||||
<c:out value="${kakaoReserveList.smsTxt}"/>
|
<c:otherwise>
|
||||||
</div>
|
<c:choose>
|
||||||
</div>
|
<c:when test="${kakaoReserveList.atDelayYn eq 'Y' && kakaoReserveList.atDelayCompleteYn eq 'Y' && not empty kakaoReserveList.cancelDate}">
|
||||||
</td>
|
<span style="color: red;">
|
||||||
<td><fmt:formatNumber value="${kakaoReserveList.msgGroupCnt}" type="number" /></td>
|
[발송취소]<br />
|
||||||
</tr>
|
<c:if test="${kakaoReserveList.reserveYn eq 'Y'}">
|
||||||
|
[예약]<br />
|
||||||
|
</c:if>
|
||||||
|
<fmt:parseDate value="${kakaoReserveList.cancelDate}" var="cancelDateValue" pattern="yyyy-MM-dd HH:mm"/>
|
||||||
|
<fmt:formatDate value="${cancelDateValue}" pattern="MM-dd HH:mm"/>
|
||||||
|
</span>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${kakaoReserveList.reserveCYn eq 'Y'}">
|
||||||
|
[예약취소]<br />
|
||||||
|
<fmt:parseDate value="${kakaoReserveList.cancelDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||||
|
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${kakaoReserveList.reserveYn eq 'Y' && kakaoReserveList.reserveCYn eq 'N'}">
|
||||||
|
[예약]<br />
|
||||||
|
<fmt:parseDate value="${kakaoReserveList.reqDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||||
|
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
-
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
</td>
|
||||||
|
<td><c:out value="${kakaoReserveList.yellowId}"/></td>
|
||||||
|
<td class="sms_detail" style="text-align: left;">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${empty kakaoReserveList.smsTxt}">
|
||||||
|
-
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<div class="ellipsis_line">
|
||||||
|
<c:out value="${kakaoReserveList.smsTxt}"/>
|
||||||
|
<div class="kakao_detail_hover">
|
||||||
|
<c:out value="${kakaoReserveList.smsTxt}"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
<td><fmt:formatNumber value="${kakaoReserveList.msgGroupCnt}" type="number" /></td>
|
||||||
|
<td><fmt:formatNumber value="${kakaoReserveList.successCount}" type="number" /></td>
|
||||||
|
<td><fmt:formatNumber value="${kakaoReserveList.kakaoResendSuccCount + kakaoReserveList.kakaoResendFailCount}" type="number" /></td>
|
||||||
|
<td><fmt:formatNumber value="${kakaoReserveList.kakaoResendSuccCount}" type="number" /></td>
|
||||||
|
<td><fmt:formatNumber value="${(kakaoReserveList.successCount / kakaoReserveList.msgGroupCnt) * 100}" pattern="#,###" />%</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
</c:forEach>
|
</c:forEach>
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:otherwise>
|
<c:otherwise>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="7">카카오톡 예약 내역이 없습니다.</td>
|
<td colspan="11">카카오톡 발송 내역이 없습니다.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</c:otherwise>
|
</c:otherwise>
|
||||||
</c:choose>
|
</c:choose>
|
||||||
|
|||||||
@ -406,7 +406,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<input type="checkbox" checked="checked" disabled> <label for="">내보관함</label>
|
<input type="checkbox" checked="checked" disabled> <label for="">내보관함</label>
|
||||||
<input id="radio5" type="radio" name="customProvision" disabled="disabled" <c:if test="${mjonMsgCustomInfo.customProvision eq '01'}">checked="checked"</c:if>>
|
<input id="radio5" type="radio" name="customProvision" disabled="disabled" <c:if test="${mjonMsgCustomInfo.customProvision eq '01'}">checked="checked"</c:if>>
|
||||||
<label for="radio5">문자</label>
|
<label for="radio5">카카오톡</label>
|
||||||
|
|
||||||
<input id="radio6" type="radio" name="customProvision" disabled="disabled" <c:if test="${mjonMsgCustomInfo.customProvision eq '02'}">checked="checked"</c:if>>
|
<input id="radio6" type="radio" name="customProvision" disabled="disabled" <c:if test="${mjonMsgCustomInfo.customProvision eq '02'}">checked="checked"</c:if>>
|
||||||
<label for="radio6">이메일</label>
|
<label for="radio6">이메일</label>
|
||||||
|
|||||||
@ -897,9 +897,9 @@ function fn_SpamMberUpdt(userId, p_mberSttus, p_smiMemo, p_confirm_msg, p_msgGro
|
|||||||
<c:when test="${result.sendKind eq 'A'}">
|
<c:when test="${result.sendKind eq 'A'}">
|
||||||
API
|
API
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:otherwise>
|
<c:when test="${result.sendKind eq 'H'}">
|
||||||
WEB
|
WEB
|
||||||
</c:otherwise>
|
</c:when>
|
||||||
</c:choose>
|
</c:choose>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@ -385,31 +385,15 @@ function fnSelectMber(mberId) {
|
|||||||
<c:when test="${mjonMsgVO.msgKind eq 'A'}">
|
<c:when test="${mjonMsgVO.msgKind eq 'A'}">
|
||||||
광고문자
|
광고문자
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:when test="${mjonMsgVO.msgKind eq 'C'}">
|
<c:when test="${mjonMsgVO.msgKind eq 'C'}">
|
||||||
선거문자
|
선거문자
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:when test="${mjonMsgVO.msgKind eq 'S'}">
|
|
||||||
관리자 발송
|
|
||||||
</c:when>
|
|
||||||
<c:otherwise>
|
<c:otherwise>
|
||||||
일반문자
|
관리자 발송
|
||||||
</c:otherwise>
|
</c:otherwise>
|
||||||
</c:choose>
|
</c:choose>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<%-- <tr class="no_modi">
|
|
||||||
<th>방식</th>
|
|
||||||
<td colspan="3">
|
|
||||||
<c:choose>
|
|
||||||
<c:when test="${mjonMsgVO.sendKind eq 'A'}">
|
|
||||||
API
|
|
||||||
</c:when>
|
|
||||||
<c:otherwise>
|
|
||||||
WEB
|
|
||||||
</c:otherwise>
|
|
||||||
</c:choose>
|
|
||||||
</td>
|
|
||||||
</tr>--%>
|
|
||||||
<%--
|
<%--
|
||||||
<tr>
|
<tr>
|
||||||
<th><span class="reqArea">제목</span></th>
|
<th><span class="reqArea">제목</span></th>
|
||||||
|
|||||||
@ -15,87 +15,95 @@
|
|||||||
<%@page import="java.util.Map"%>
|
<%@page import="java.util.Map"%>
|
||||||
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
||||||
<%
|
<%
|
||||||
try{
|
try{
|
||||||
//기본 설정값
|
//기본 설정값
|
||||||
final String encodingType = "UTF-8";
|
final String encodingType = "UTF-8";
|
||||||
final String boundary = "____boundary____";
|
final String boundary = "____boundary____";
|
||||||
|
|
||||||
|
//비즈 아이디, APIKEY - 보안을 위해 실제 서비스 시에는 이곳에 bizId와 apiKey 값을 적어서 사용
|
||||||
|
//실제서비스용
|
||||||
|
final String accessKey = "3429312e6a2c732188d4cc7d15d8a1baa01d8d91"; //발급받은 api key
|
||||||
|
|
||||||
|
//테스트용
|
||||||
|
//String bizId = request.getParameter("p_bizId"); //비즈 아이디
|
||||||
|
//String apiKey = request.getParameter("p_apiKey"); //발급받은 api key
|
||||||
|
|
||||||
|
/******************** 전송 요청 URL ********************/
|
||||||
//비즈 아이디, APIKEY - 보안을 위해 실제 서비스 시에는 이곳에 bizId와 apiKey 값을 적어서 사용
|
|
||||||
//실제서비스용
|
|
||||||
final String accessKey = "3429312e6a2c732188d4cc7d15d8a1baa01d8d91"; //발급받은 api key
|
|
||||||
//테스트용
|
|
||||||
//String mberId = request.getParameter("p_mberId"); //문자온 로그인 아이디
|
|
||||||
//String apiKey = request.getParameter("p_apiKey"); //발급받은 api key
|
|
||||||
|
|
||||||
/******************** 전송 요청 URL ********************/
|
|
||||||
final String apiUrl = "http://119.193.215.98:8087/api/kakao/inqry/templates/detail"; //템플릿 상세 조회 API URL
|
final String apiUrl = "http://119.193.215.98:8087/api/kakao/inqry/templates/detail"; //템플릿 상세 조회 API URL
|
||||||
|
// final String apiUrl = "http://localhost:8088/api/kakao/inqry/templates/detail"; //템플릿 상세 조회 API URL
|
||||||
|
|
||||||
|
/******************** 전송 정보 ********************/
|
||||||
|
//필수 값
|
||||||
|
String p_senderKey = request.getParameter("p_senderKey"); //발신프로필키
|
||||||
|
String p_templateCode = request.getParameter("p_templateCode"); //템플릿코드
|
||||||
|
String p_mberId = request.getParameter("p_mberId"); //발신프로필키
|
||||||
|
|
||||||
|
Map<String, String> params = new HashMap<String, String>();
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("accessKey : "+ accessKey); //비즈 아이디
|
||||||
|
System.out.println("mberId : "+ p_mberId); //비즈 아이디
|
||||||
|
System.out.println("senderKey : "+ p_senderKey); //발신프로필키
|
||||||
|
System.out.println("templateCode : "+ p_templateCode); //템플릿코드
|
||||||
|
|
||||||
|
|
||||||
|
//기본 전송 데이터
|
||||||
|
params.put("accessKey", accessKey); //비즈 아이디
|
||||||
|
params.put("mberId", p_mberId); //비즈 아이디
|
||||||
|
params.put("senderKey", p_senderKey); //발신프로필키
|
||||||
|
params.put("templateCode", p_templateCode); //템플릿코드
|
||||||
|
|
||||||
|
//REST API 전송
|
||||||
|
String result = "";
|
||||||
|
|
||||||
|
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
||||||
|
|
||||||
|
builder.setBoundary(boundary);
|
||||||
|
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
|
||||||
|
builder.setCharset(Charset.forName(encodingType));
|
||||||
|
|
||||||
|
try{
|
||||||
|
for(Iterator<String> i = params.keySet().iterator(); i.hasNext();){
|
||||||
|
String key = i.next();
|
||||||
|
//전달값이 없는 경우 오류
|
||||||
|
try{
|
||||||
|
String value = params.get(key);
|
||||||
|
if(value != null) {
|
||||||
|
builder.addTextBody(key, value, ContentType.create("Multipart/related", encodingType));
|
||||||
|
}
|
||||||
|
}catch(Exception ex){
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}catch(Exception ex){
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
//회원아이디, APIKEY - 보안을 위해 실제 서비스 시에는 이곳에 mberId와 apiKey 값을 적어서 사용
|
HttpEntity entity = builder.build();
|
||||||
String p_senderKey = request.getParameter("p_senderKey"); //발신프로필키
|
|
||||||
String p_templateCode = request.getParameter("p_templateCode"); //템플릿코드
|
HttpClient client = HttpClients.createDefault();
|
||||||
String p_mberId = request.getParameter("p_mberId"); //발신프로필키
|
HttpPost post = new HttpPost(apiUrl);
|
||||||
|
post.setEntity(entity);
|
||||||
|
|
||||||
|
HttpResponse res = client.execute(post);
|
||||||
|
|
||||||
|
if(res != null){
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(res.getEntity().getContent(), encodingType));
|
||||||
|
String buffer = null;
|
||||||
|
while((buffer = in.readLine())!=null){
|
||||||
|
result += buffer;
|
||||||
|
}
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
out.print(result);
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
out.print("{\"data\":{\"resultCode\":99,\"msg\":\"WRONG API METHOD\"}}");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
Map<String, String> params = new HashMap<String, String>();
|
/**************** 템플릿 상세 조회 Response 예제 ******************/
|
||||||
|
/* "resultCode": 결과코드, "objectList": 템플릿 상세 정보 */
|
||||||
//기본 전송 데이터
|
/* "msg": 결과 메시지, "templateCode": 템플릿코드, "templateName": 템플릿명 */
|
||||||
params.put("accessKey", accessKey); //비즈 아이디
|
/* "template": 템플릿 내용, "buttons": 버튼 정보, "quickReplies": 퀵 리플라이 */
|
||||||
params.put("mberId", p_mberId); //비즈 아이디
|
|
||||||
params.put("senderKey", p_senderKey); //발신프로필키
|
|
||||||
params.put("templateCode", p_templateCode); //템플릿코드
|
|
||||||
|
|
||||||
//REST API 전송
|
|
||||||
String result = "";
|
|
||||||
|
|
||||||
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
|
||||||
|
|
||||||
builder.setBoundary(boundary);
|
|
||||||
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
|
|
||||||
builder.setCharset(Charset.forName(encodingType));
|
|
||||||
|
|
||||||
try{
|
|
||||||
for(Iterator<String> i = params.keySet().iterator(); i.hasNext();){
|
|
||||||
String key = i.next();
|
|
||||||
//전달값이 없는 경우 오류
|
|
||||||
try{
|
|
||||||
String value = params.get(key);
|
|
||||||
if(value != null) {
|
|
||||||
builder.addTextBody(key, value, ContentType.create("Multipart/related", encodingType));
|
|
||||||
}
|
|
||||||
}catch(Exception ex){
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}catch(Exception ex){
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
HttpEntity entity = builder.build();
|
|
||||||
|
|
||||||
HttpClient client = HttpClients.createDefault();
|
|
||||||
HttpPost post = new HttpPost(apiUrl);
|
|
||||||
post.setEntity(entity);
|
|
||||||
|
|
||||||
HttpResponse res = client.execute(post);
|
|
||||||
|
|
||||||
if(res != null){
|
|
||||||
BufferedReader in = new BufferedReader(new InputStreamReader(res.getEntity().getContent(), encodingType));
|
|
||||||
String buffer = null;
|
|
||||||
while((buffer = in.readLine())!=null){
|
|
||||||
result += buffer;
|
|
||||||
}
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
out.print(result);
|
|
||||||
|
|
||||||
}catch(Exception e){
|
|
||||||
out.print("{\"data\":{\"resultCode\":99,\"msg\":\"WRONG API METHOD\"}}");
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************** 채널ID 조회 Response 예제 ******************/
|
|
||||||
/* "resultCode": 결과코드, "objectList": 채널 목록 */
|
|
||||||
/* "msg": 결과 메시지, "profileId": 프로필ID, "senderKey": 발신프로필키 */
|
|
||||||
/* "phoneNumber": 핸드폰번호, "yellowId": 채널ID, "categoryName": 카테고리명 */
|
|
||||||
%>
|
%>
|
||||||
@ -15,86 +15,88 @@
|
|||||||
<%@page import="java.util.Map"%>
|
<%@page import="java.util.Map"%>
|
||||||
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
||||||
<%
|
<%
|
||||||
try{
|
try{
|
||||||
//기본 설정값
|
//기본 설정값
|
||||||
final String encodingType = "UTF-8";
|
final String encodingType = "UTF-8";
|
||||||
final String boundary = "____boundary____";
|
final String boundary = "____boundary____";
|
||||||
|
|
||||||
|
//비즈 아이디, APIKEY - 보안을 위해 실제 서비스 시에는 이곳에 bizId와 apiKey 값을 적어서 사용
|
||||||
|
//실제서비스용
|
||||||
|
final String accessKey = "3429312e6a2c732188d4cc7d15d8a1baa01d8d91"; //발급받은 api key
|
||||||
|
|
||||||
|
//테스트용
|
||||||
|
//String bizId = request.getParameter("p_bizId"); //비즈 아이디
|
||||||
|
//String apiKey = request.getParameter("p_apiKey"); //발급받은 api key
|
||||||
|
|
||||||
|
/******************** 전송 요청 URL ********************/
|
||||||
//비즈 아이디, APIKEY - 보안을 위해 실제 서비스 시에는 이곳에 bizId와 apiKey 값을 적어서 사용
|
|
||||||
//실제서비스용
|
|
||||||
final String accessKey = "3429312e6a2c732188d4cc7d15d8a1baa01d8d91"; //발급받은 api key
|
|
||||||
//테스트용
|
|
||||||
//String mberId = request.getParameter("p_mberId"); //문자온 로그인 아이디
|
|
||||||
//String apiKey = request.getParameter("p_apiKey"); //발급받은 api key
|
|
||||||
|
|
||||||
/******************** 전송 요청 URL ********************/
|
|
||||||
final String apiUrl = "http://119.193.215.98:8087/api/kakao/inqry/templates/list"; //템플릿 목록 조회 API URL
|
final String apiUrl = "http://119.193.215.98:8087/api/kakao/inqry/templates/list"; //템플릿 목록 조회 API URL
|
||||||
// final String apiUrl = "http://localhost:8088/api/kakao/inqry/templates/list"; //템플릿 목록 조회 API URL
|
// final String apiUrl = "http://localhost:8088/api/kakao/inqry/templates/list"; //템플릿 목록 조회 API URL
|
||||||
|
|
||||||
|
/******************** 전송 정보 ********************/
|
||||||
|
//필수 값
|
||||||
|
String p_senderKey = request.getParameter("p_senderKey"); //발신프로필키
|
||||||
|
String p_mberId = request.getParameter("p_mberId"); //발신프로필키
|
||||||
|
|
||||||
|
Map<String, String> params = new HashMap<String, String>();
|
||||||
|
|
||||||
|
System.out.println("accessKey : "+ accessKey);
|
||||||
|
|
||||||
|
//기본 전송 데이터
|
||||||
|
params.put("mberId", p_mberId); //비즈 아이디
|
||||||
|
params.put("accessKey", accessKey); //인증키
|
||||||
|
params.put("senderKey", p_senderKey); //발신프로필키
|
||||||
|
|
||||||
|
//REST API 전송
|
||||||
|
String result = "";
|
||||||
|
|
||||||
|
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
||||||
|
|
||||||
|
builder.setBoundary(boundary);
|
||||||
|
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
|
||||||
|
builder.setCharset(Charset.forName(encodingType));
|
||||||
|
|
||||||
|
try{
|
||||||
|
for(Iterator<String> i = params.keySet().iterator(); i.hasNext();){
|
||||||
|
String key = i.next();
|
||||||
|
//전달값이 없는 경우 오류
|
||||||
|
try{
|
||||||
|
String value = params.get(key);
|
||||||
|
if(value != null) {
|
||||||
|
builder.addTextBody(key, value, ContentType.create("Multipart/related", encodingType));
|
||||||
|
}
|
||||||
|
}catch(Exception ex){
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}catch(Exception ex){
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpEntity entity = builder.build();
|
||||||
|
|
||||||
|
HttpClient client = HttpClients.createDefault();
|
||||||
|
HttpPost post = new HttpPost(apiUrl);
|
||||||
|
post.setEntity(entity);
|
||||||
|
|
||||||
|
HttpResponse res = client.execute(post);
|
||||||
|
|
||||||
|
if(res != null){
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(res.getEntity().getContent(), encodingType));
|
||||||
|
String buffer = null;
|
||||||
|
while((buffer = in.readLine())!=null){
|
||||||
|
result += buffer;
|
||||||
|
}
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
out.print(result);
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
out.print("{\"data\":{\"resultCode\":99,\"msg\":\"WRONG API METHOD\"}}");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
//회원아이디, APIKEY - 보안을 위해 실제 서비스 시에는 이곳에 mberId와 apiKey 값을 적어서 사용
|
/**************** 템플릿 목록 조회 Response 예제 ******************/
|
||||||
String p_senderKey = request.getParameter("p_senderKey"); //발신자 번호
|
/* "resultCode": 결과코드, "objectList": 템플릿 목록 */
|
||||||
String p_mberId = request.getParameter("p_mberId"); //수신자 번호
|
/* "msg": 결과 메시지, "templateCode": 템플릿코드, "templateName": 템플릿명 */
|
||||||
|
/* "templateMessageType": 메시지타입, "status": 상태, "inspectionStatus": 검수상태 */
|
||||||
Map<String, String> params = new HashMap<String, String>();
|
|
||||||
|
|
||||||
//기본 전송 데이터
|
|
||||||
params.put("mberId", p_mberId); //비즈 아이디
|
|
||||||
params.put("accessKey", accessKey); //인증키
|
|
||||||
params.put("senderKey", p_senderKey); //발신프로필키
|
|
||||||
|
|
||||||
//REST API 전송
|
|
||||||
String result = "";
|
|
||||||
|
|
||||||
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
|
||||||
|
|
||||||
builder.setBoundary(boundary);
|
|
||||||
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
|
|
||||||
builder.setCharset(Charset.forName(encodingType));
|
|
||||||
|
|
||||||
try{
|
|
||||||
for(Iterator<String> i = params.keySet().iterator(); i.hasNext();){
|
|
||||||
String key = i.next();
|
|
||||||
//전달값이 없는 경우 오류
|
|
||||||
try{
|
|
||||||
String value = params.get(key);
|
|
||||||
if(value != null) {
|
|
||||||
builder.addTextBody(key, value, ContentType.create("Multipart/related", encodingType));
|
|
||||||
}
|
|
||||||
}catch(Exception ex){
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}catch(Exception ex){
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
HttpEntity entity = builder.build();
|
|
||||||
|
|
||||||
HttpClient client = HttpClients.createDefault();
|
|
||||||
HttpPost post = new HttpPost(apiUrl);
|
|
||||||
post.setEntity(entity);
|
|
||||||
|
|
||||||
HttpResponse res = client.execute(post);
|
|
||||||
|
|
||||||
if(res != null){
|
|
||||||
BufferedReader in = new BufferedReader(new InputStreamReader(res.getEntity().getContent(), encodingType));
|
|
||||||
String buffer = null;
|
|
||||||
while((buffer = in.readLine())!=null){
|
|
||||||
result += buffer;
|
|
||||||
}
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
out.print(result);
|
|
||||||
|
|
||||||
}catch(Exception e){
|
|
||||||
out.print("{\"data\":{\"resultCode\":99,\"msg\":\"WRONG API METHOD\"}}");
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************** 채널ID 조회 Response 예제 ******************/
|
|
||||||
/* "resultCode": 결과코드, "objectList": 채널 목록 */
|
|
||||||
/* "msg": 결과 메시지, "profileId": 프로필ID, "senderKey": 발신프로필키 */
|
|
||||||
/* "phoneNumber": 핸드폰번호, "yellowId": 채널ID, "categoryName": 카테고리명 */
|
|
||||||
%>
|
%>
|
||||||
@ -1,160 +1,116 @@
|
|||||||
<%@page import="java.io.InputStreamReader"%>
|
<%@page import="java.io.InputStreamReader"%>
|
||||||
<%@page import="java.io.BufferedReader"%>
|
<%@page import="java.io.BufferedReader"%>
|
||||||
<%@page import="org.apache.http.HttpResponse"%>
|
<%@page import="org.apache.http.client.entity.UrlEncodedFormEntity"%>
|
||||||
|
<%@page import="org.apache.http.client.methods.CloseableHttpResponse"%>
|
||||||
<%@page import="org.apache.http.client.methods.HttpPost"%>
|
<%@page import="org.apache.http.client.methods.HttpPost"%>
|
||||||
|
<%@page import="org.apache.http.impl.client.CloseableHttpClient"%>
|
||||||
<%@page import="org.apache.http.impl.client.HttpClients"%>
|
<%@page import="org.apache.http.impl.client.HttpClients"%>
|
||||||
<%@page import="org.apache.http.client.HttpClient"%>
|
<%@page import="org.apache.http.message.BasicNameValuePair"%>
|
||||||
<%@page import="org.apache.http.HttpEntity"%>
|
<%@page import="org.apache.http.NameValuePair"%>
|
||||||
<%@page import="java.net.URLEncoder"%>
|
<%@page import="java.nio.charset.StandardCharsets"%>
|
||||||
<%@page import="org.apache.http.entity.ContentType"%>
|
<%@page import="java.util.*"%>
|
||||||
<%@page import="java.nio.charset.Charset"%>
|
<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||||
<%@page import="org.apache.http.entity.mime.HttpMultipartMode"%>
|
|
||||||
<%@page import="org.apache.http.entity.mime.MultipartEntityBuilder"%>
|
|
||||||
<%@ page import="org.apache.http.message.BasicNameValuePair" %>
|
|
||||||
<%@page import="org.apache.http.entity.StringEntity"%>
|
|
||||||
<%@page import="org.apache.http.entity.ContentType"%>
|
|
||||||
<%@page import="java.net.URLEncoder"%>
|
|
||||||
<%@ page import="java.util.*" %>
|
|
||||||
<%@ page import="org.apache.http.impl.client.CloseableHttpClient" %>
|
|
||||||
<%@ page import="java.nio.charset.StandardCharsets" %>
|
|
||||||
<%@ page import="org.apache.http.client.entity.UrlEncodedFormEntity" %>
|
|
||||||
<%@ page import="org.apache.http.client.methods.CloseableHttpResponse" %>
|
|
||||||
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
|
||||||
<%
|
<%
|
||||||
try{
|
response.setCharacterEncoding("UTF-8");
|
||||||
//기본 설정값
|
|
||||||
final String encodingType = "UTF-8";
|
try {
|
||||||
final String boundary = "____boundary____";
|
// ===== 고정값(실서비스는 서버 보관) =====
|
||||||
|
|
||||||
|
// ===== 전송 URL =====
|
||||||
|
// final String apiUrl = "http://119.193.215.98:8087/api/kakao/at/sendMsg";
|
||||||
|
final String apiUrl = "http://119.193.215.98:8087/api/kakao/at/sendMsg";
|
||||||
|
// final String apiUrl = "http://localhost:8088/api/kakao/at/sendMsg";
|
||||||
|
|
||||||
|
|
||||||
//테스트용
|
String p_mberId = request.getParameter("mberId"); //사용자 ID
|
||||||
//String mberId = request.getParameter("p_mberId"); //문자온 로그인 아이디
|
String p_apiKey = request.getParameter("accessKey"); //API KEY
|
||||||
//String apiKey = request.getParameter("p_apiKey"); //발급받은 api key
|
|
||||||
|
System.out.println("p_mberId : "+ p_mberId);
|
||||||
|
System.out.println("p_apiKey : "+ p_apiKey);
|
||||||
|
|
||||||
|
// ===== 공통 파라미터 수신 (p_* / 비접두어 둘 다 허용) =====
|
||||||
|
String senderKey = request.getParameter("p_senderKey"); if (senderKey == null) senderKey = request.getParameter("senderKey");
|
||||||
|
String templateCode = request.getParameter("p_templateCode"); if (templateCode == null) templateCode = request.getParameter("templateCode");
|
||||||
|
String callFrom = request.getParameter("p_callFrom"); if (callFrom == null) callFrom = request.getParameter("callFrom");
|
||||||
|
String subMsgSendYn = request.getParameter("p_subMsgSendYn"); if (subMsgSendYn == null) subMsgSendYn = request.getParameter("subMsgSendYn");
|
||||||
|
String testYn = request.getParameter("p_testYn"); if (testYn == null) testYn = request.getParameter("testYn");
|
||||||
|
|
||||||
/******************** 전송 요청 URL ********************/
|
System.out.println("senderKey : "+ senderKey);
|
||||||
final String apiUrl = "http://119.193.215.98:8087/api/kakao/at/sendMsg";
|
|
||||||
|
|
||||||
|
if (callFrom != null) callFrom = callFrom.replaceAll("\\D", ""); // 숫자만
|
||||||
|
|
||||||
//회원아이디, APIKEY - 보안을 위해 실제 서비스 시에는 이곳에 mberId와 apiKey 값을 적어서 사용
|
// ===== form 구성 (x-www-form-urlencoded) =====
|
||||||
String p_mberId = request.getParameter("mberId"); //사용자 ID
|
List<NameValuePair> form = new ArrayList<>();
|
||||||
String p_apiKey = request.getParameter("accessKey"); //API KEY
|
form.add(new BasicNameValuePair("mberId", p_mberId));
|
||||||
|
form.add(new BasicNameValuePair("accessKey", p_apiKey));
|
||||||
Map<String, String> params = new HashMap<String, String>();
|
form.add(new BasicNameValuePair("senderKey", senderKey != null ? senderKey : ""));
|
||||||
|
form.add(new BasicNameValuePair("templateCode", templateCode != null ? templateCode : ""));
|
||||||
//기본 전송 데이터
|
form.add(new BasicNameValuePair("callFrom", callFrom != null ? callFrom : ""));
|
||||||
params.put("mberId", p_mberId); //회원 아이디
|
form.add(new BasicNameValuePair("subMsgSendYn", subMsgSendYn != null ? subMsgSendYn : ""));
|
||||||
params.put("accessKey", p_apiKey); //인증키
|
if (testYn != null && !testYn.isEmpty()) {
|
||||||
|
form.add(new BasicNameValuePair("testYn", testYn)); // snake_case 아님
|
||||||
|
|
||||||
// ===== 공통 파라미터 수신 (p_* / 비접두어 둘 다 허용) =====
|
|
||||||
String senderKey = request.getParameter("p_senderKey"); if (senderKey == null) senderKey = request.getParameter("senderKey");
|
|
||||||
String templateCode = request.getParameter("p_templateCode"); if (templateCode == null) templateCode = request.getParameter("templateCode");
|
|
||||||
String callFrom = request.getParameter("p_callFrom"); if (callFrom == null) callFrom = request.getParameter("callFrom");
|
|
||||||
String subMsgSendYn = request.getParameter("p_subMsgSendYn"); if (subMsgSendYn == null) subMsgSendYn = request.getParameter("subMsgSendYn");
|
|
||||||
String testYn = request.getParameter("p_testYn"); if (testYn == null) testYn = request.getParameter("testYn");
|
|
||||||
|
|
||||||
|
|
||||||
if (callFrom != null) callFrom = callFrom.replaceAll("\\D", ""); // 숫자만
|
|
||||||
|
|
||||||
Map<String, String> form = new LinkedHashMap<String, String>();
|
|
||||||
|
|
||||||
form.put("mberId", p_mberId);
|
|
||||||
form.put("accessKey", p_apiKey);
|
|
||||||
form.put("senderKey", senderKey != null ? senderKey : "");
|
|
||||||
form.put("templateCode", templateCode != null ? templateCode : "");
|
|
||||||
form.put("callFrom", callFrom != null ? callFrom : "");
|
|
||||||
form.put("subMsgSendYn", subMsgSendYn != null ? subMsgSendYn : "");
|
|
||||||
|
|
||||||
if (testYn != null && !testYn.isEmpty()) {
|
|
||||||
form.put("testYn", testYn);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===== 수신자 인덱스 수집 (callTo_* / p_callTo_* 모두 지원) =====
|
|
||||||
Set<Integer> idxSet = new TreeSet<Integer>(); // 자동 오름차순
|
|
||||||
for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) {
|
|
||||||
String nm = e.nextElement();
|
|
||||||
if (nm.startsWith("callTo_")) {
|
|
||||||
try { idxSet.add(Integer.parseInt(nm.substring("callTo_".length()))); } catch(Exception ignore){}
|
|
||||||
} else if (nm.startsWith("p_callTo_")) {
|
|
||||||
try { idxSet.add(Integer.parseInt(nm.substring("p_callTo_".length()))); } catch(Exception ignore){}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===== 인덱스별로 Postman 스타일 키 생성해 그대로 추가 =====
|
|
||||||
for (Integer idx : idxSet) {
|
|
||||||
String callTo = request.getParameter("callTo_" + idx);
|
|
||||||
if (callTo == null) callTo = request.getParameter("p_callTo_" + idx);
|
|
||||||
if (callTo == null || callTo.trim().isEmpty()) continue;
|
|
||||||
callTo = callTo.replaceAll("\\D", "");
|
|
||||||
|
|
||||||
String title = request.getParameter("templateTitle_" + idx);
|
|
||||||
if (title == null) title = request.getParameter("p_title_" + idx);
|
|
||||||
|
|
||||||
String content = request.getParameter("templateContent_" + idx);
|
|
||||||
if (content == null) content = request.getParameter("p_msgTxt_" + idx);
|
|
||||||
|
|
||||||
String subTxt = request.getParameter("subMsgTxt_" + idx);
|
|
||||||
if (subTxt == null) subTxt = request.getParameter("p_subMsgTxt_" + idx);
|
|
||||||
form.put("callTo_" + idx, callTo);
|
|
||||||
if (title != null && !title.isEmpty()) form.put("templateTitle_" + idx, title);
|
|
||||||
if (content != null && !content.isEmpty()) form.put("templateContent_" + idx, content);
|
|
||||||
if (subTxt != null && !subTxt.isEmpty()) form.put("subMsgTxt_" + idx, subTxt);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ===== 전송 =====
|
|
||||||
String result = "";
|
|
||||||
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
|
||||||
|
|
||||||
HttpPost post = new HttpPost(apiUrl);
|
|
||||||
post.setHeader("Accept", "application/json");
|
|
||||||
|
|
||||||
// form(Map)을 x-www-form-urlencoded 문자열로 변환
|
|
||||||
StringBuilder body = new StringBuilder();
|
|
||||||
for (Map.Entry<String, String> entry : form.entrySet()) {
|
|
||||||
if (body.length() > 0) {
|
|
||||||
body.append('&');
|
|
||||||
}
|
|
||||||
body.append(URLEncoder.encode(entry.getKey(), "UTF-8"))
|
|
||||||
.append('=')
|
|
||||||
.append(URLEncoder.encode(entry.getValue() != null ? entry.getValue() : "", "UTF-8"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// StringEntity로 설정
|
|
||||||
StringEntity entity = new StringEntity(
|
|
||||||
body.toString(),
|
|
||||||
ContentType.APPLICATION_FORM_URLENCODED.withCharset(StandardCharsets.UTF_8)
|
|
||||||
);
|
|
||||||
post.setEntity(entity);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try (CloseableHttpResponse res = client.execute(post)) {
|
|
||||||
if (res != null && res.getEntity() != null) {
|
|
||||||
try (BufferedReader in = new BufferedReader(
|
|
||||||
new InputStreamReader(res.getEntity().getContent(), StandardCharsets.UTF_8))) {
|
|
||||||
String line;
|
|
||||||
while ((line = in.readLine()) != null) result += line;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
out.print((result == null || result.isEmpty())
|
|
||||||
? "{\"data\":{\"resultCode\":99,\"msg\":\"EMPTY RESPONSE\"}}"
|
|
||||||
: result);
|
|
||||||
|
|
||||||
|
|
||||||
}catch(Exception e){
|
|
||||||
out.print("{\"data\":{\"resultCode\":99,\"msg\":\"WRONG API METHOD\"}}");
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************** 채널ID 조회 Response 예제 ******************/
|
// ===== 수신자 인덱스 수집 (callTo_* / p_callTo_* 모두 지원) =====
|
||||||
/* "resultCode": 결과코드, "objectList": 채널 목록 */
|
Set<Integer> idxSet = new TreeSet<Integer>(); // 자동 오름차순
|
||||||
/* "msg": 결과 메시지, "profileId": 프로필ID, "senderKey": 발신프로필키 */
|
for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) {
|
||||||
/* "phoneNumber": 핸드폰번호, "yellowId": 채널ID, "categoryName": 카테고리명 */
|
String nm = e.nextElement();
|
||||||
%>
|
if (nm.startsWith("callTo_")) {
|
||||||
|
try { idxSet.add(Integer.parseInt(nm.substring("callTo_".length()))); } catch(Exception ignore){}
|
||||||
|
} else if (nm.startsWith("p_callTo_")) {
|
||||||
|
try { idxSet.add(Integer.parseInt(nm.substring("p_callTo_".length()))); } catch(Exception ignore){}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===== 인덱스별로 Postman 스타일 키 생성해 그대로 추가 =====
|
||||||
|
for (Integer idx : idxSet) {
|
||||||
|
String callTo = request.getParameter("callTo_" + idx);
|
||||||
|
if (callTo == null) callTo = request.getParameter("p_callTo_" + idx);
|
||||||
|
if (callTo == null || callTo.trim().isEmpty()) continue;
|
||||||
|
callTo = callTo.replaceAll("\\D", "");
|
||||||
|
|
||||||
|
String title = request.getParameter("templateTitle_" + idx);
|
||||||
|
if (title == null) title = request.getParameter("p_title_" + idx);
|
||||||
|
|
||||||
|
String content = request.getParameter("templateContent_" + idx);
|
||||||
|
if (content == null) content = request.getParameter("p_msgTxt_" + idx);
|
||||||
|
|
||||||
|
String subTxt = request.getParameter("subMsgTxt_" + idx);
|
||||||
|
if (subTxt == null) subTxt = request.getParameter("p_subMsgTxt_" + idx);
|
||||||
|
|
||||||
|
form.add(new BasicNameValuePair("callTo_" + idx, callTo));
|
||||||
|
if (title != null && !title.isEmpty()) form.add(new BasicNameValuePair("templateTitle_" + idx, title));
|
||||||
|
if (content != null && !content.isEmpty()) form.add(new BasicNameValuePair("templateContent_" + idx, content));
|
||||||
|
if (subTxt != null && !subTxt.isEmpty()) form.add(new BasicNameValuePair("subMsgTxt_" + idx, subTxt));
|
||||||
|
}
|
||||||
|
|
||||||
|
// (선택) 서버 로그로 확인
|
||||||
|
System.out.println("form :: " + form);
|
||||||
|
|
||||||
|
// ===== 전송 =====
|
||||||
|
String result = "";
|
||||||
|
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
||||||
|
HttpPost post = new HttpPost(apiUrl);
|
||||||
|
post.setHeader("Accept", "application/json");
|
||||||
|
post.setEntity(new UrlEncodedFormEntity(form, StandardCharsets.UTF_8));
|
||||||
|
try (CloseableHttpResponse res = client.execute(post)) {
|
||||||
|
if (res != null && res.getEntity() != null) {
|
||||||
|
try (BufferedReader in = new BufferedReader(
|
||||||
|
new InputStreamReader(res.getEntity().getContent(), StandardCharsets.UTF_8))) {
|
||||||
|
String line;
|
||||||
|
while ((line = in.readLine()) != null) result += line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println(" ++ result :: "+ result);
|
||||||
|
|
||||||
|
out.print((result == null || result.isEmpty())
|
||||||
|
? "{\"data\":{\"resultCode\":99,\"msg\":\"EMPTY RESPONSE\"}}"
|
||||||
|
: result);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
out.print("{\"data\":{\"resultCode\":99,\"msg\":\"WRONG API METHOD\"}}");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
%>
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
<hr style="margin: 20px 0;">
|
<hr style="margin: 20px 0;">
|
||||||
<!-- 카카오톡 메시지 메뉴 -->
|
<!-- 카카오톡 메시지 메뉴 -->
|
||||||
<h2><a href="./jsp_example_send_at_form_r1.jsp">6.알림톡 발송</a></h2>
|
<h2><a href="./jsp_example_send_at_form_r1.jsp">6.알림톡 발송</a></h2>
|
||||||
<%-- <h2><a href="./jsp_example_send_ft_form_r1.jsp">7.친구톡 발송</a></h2>--%>
|
<h2><a href="./jsp_example_send_ft_form_r1.jsp">7.친구톡 발송</a></h2>
|
||||||
<hr style="margin: 20px 0;">
|
<hr style="margin: 20px 0;">
|
||||||
<!-- 조회 메뉴 -->
|
<!-- 조회 메뉴 -->
|
||||||
<h2><a href="./jsp_example_inqry_chnlid_form_r1.jsp">8.알림톡 채널ID 조회</a></h2>
|
<h2><a href="./jsp_example_inqry_chnlid_form_r1.jsp">8.알림톡 채널ID 조회</a></h2>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user