문자 발송부에 카카오 알림톡 발송로직 추가

This commit is contained in:
JooYoung 2022-12-06 17:06:34 +09:00
parent d7922f4b73
commit e7e9496956
17 changed files with 843 additions and 10 deletions

14
pom.xml
View File

@ -556,6 +556,20 @@
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ozsfw80.jar</systemPath>
</dependency>
<!-- scheduler -->
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>2.5.0</version>
</dependency>
<!-- JDBC TEMPLATE -->
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-jdbc-template</artifactId>
<version>2.5.0</version>
</dependency>
</dependencies>

View File

@ -13,7 +13,6 @@ import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.annotation.Resource;
@ -32,6 +31,8 @@ import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import kcc.kccadr.adjreqmgr.service.impl.AdjReqMgrDAO;
import kcc.kccadr.cmm.KccadrConstants;
import kcc.kccadr.cmm.service.SMSOracleService;
import kcc.kccadr.message.service.KakaoAtSendDAO;
import kcc.kccadr.message.service.KakaoAtSendVO;
import kcc.kccadr.msg.service.impl.MsgMgrDAO;
import kcc.let.utl.fcc.service.EgovCryptoUtil;
@ -78,7 +79,10 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM
@Resource(name = "adrSmsLogGnrService")
private EgovIdGnrService idgenService;
//카카오 알림톡
@Resource(name = "kakaoAtSendDAO")
private KakaoAtSendDAO kakaoAtSendDAO;
// 오라클 연동 테스트
public void selectOracleTest() throws Exception {
@ -146,6 +150,19 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM
msgMgrDAO.insertAdrSmsLog(map); // SMS 이력 등록 단문 > 전자조정
}
//카카오 알림톡 DB 저장
KakaoAtSendVO apiVO = new KakaoAtSendVO();
//msgTy별 템플릿 코드 가져오기
String msgTy = (String) map.get("msgTy");
String templateCode = msgMgrDAO.selectMsgMgrTemplateCode(msgTy);
apiVO.setSendTo(rpplPhone);
apiVO.setTemplatecode(templateCode);
apiVO.setMessage(sendMsg);
kakaoAtSendDAO.insertKakaoAtSendBatch(apiVO);
result = "succ";
}
} catch (Exception e) {
@ -606,6 +623,18 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM
}
//카카오 알림톡 DB 저장
KakaoAtSendVO apiVO = new KakaoAtSendVO();
//msgTy별 템플릿 코드 가져오기
String msgTy = (String) map.get("msgTy");
String templateCode = msgMgrDAO.selectMsgMgrTemplateCode(msgTy);
apiVO.setSendTo(rpplPhone);
apiVO.setTemplatecode(templateCode);
apiVO.setMessage(sendMsg);
kakaoAtSendDAO.insertKakaoAtSendBatch(apiVO);
result = "succ";

View File

@ -0,0 +1,89 @@
package kcc.kccadr.message;
import java.net.InetAddress;
import java.util.List;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import kcc.kccadr.message.service.KakaoAtSendService;
import kcc.kccadr.message.service.KakaoAtSendVO;
import kcc.kccadr.message.web.KakaoAtSendAPI;
import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.core.SchedulerLock;
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
@Service("SchedulerUtil")
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S") // Scheduler Lock 사용 가능 설정 (기본 30초동안 Lock)
public class SchedulerUtil {
@Value("#{globalSettings['Globals.BizPpurio.siteUrl']}")
private String apiUrl;
@Value("#{globalSettings['Globals.prod.islocal']}")
private String isLocal;
@Resource (name = "KakaoAtSendService")
private KakaoAtSendService kakaoAtSendService;
private static final String ONE_MIN = "PT1M"; // 1분동안 LOCK
//로컬 테스트용 아이피 허용
private String myLocalIp = "192.168.0.40";
//운영 외부망 WAS1
private String dmzIp1 = "222.231.43.66";
//운영 외부망 WAS2
private String dmzIp2 = "222.231.43.69";
//10분마다 실행
@Scheduled(cron = "0 0/10 * * * *")
@SchedulerLock(name = "kakaoAtSendPrcs", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void kakaoAtSendPrcs() throws Exception {
String ip = null;
try {
ip = InetAddress.getLocalHost().getHostAddress();
if(ip.equals(myLocalIp) || ip.equals(dmzIp1) || ip.equals(dmzIp2) ) {
//접속 서버 분기처리 필요
List<KakaoAtSendVO> list = kakaoAtSendService.selectKakaoAtList();
int listSize = list.size();
for(int i=0; i<listSize ; i++) {
KakaoAtSendAPI kakaoAtSendAPI = KakaoAtSendAPI.getInstance();
String status = kakaoAtSendAPI.sendMessage(list.get(i), isLocal, apiUrl);
if("success".equals(status)) {
kakaoAtSendService.updateKakaoAtDetail(list.get(i));
}
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
@Bean
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(dataSource);
}
}

View File

@ -0,0 +1,25 @@
package kcc.kccadr.message.service;
import java.util.List;
import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
@Repository("kakaoAtSendDAO")
public class KakaoAtSendDAO extends EgovAbstractDAO {
@SuppressWarnings("unchecked")
public List<KakaoAtSendVO> selectKakaoAtList() throws Exception{
return (List<KakaoAtSendVO>) list("kakaoAtSendDAO.selectKakaoAtList");
}
public void insertKakaoAtSendBatch(KakaoAtSendVO kakaoAtSendVO) throws Exception{
insert("kakaoAtSendDAO.insertKakaoAtSendBatch", kakaoAtSendVO);
}
public void updateKakaoAtDetail(KakaoAtSendVO kakaoAtSendVO) throws Exception{
update("kakaoAtSendDAO.updateKakaoAtDetail", kakaoAtSendVO);
}
}

View File

@ -0,0 +1,13 @@
package kcc.kccadr.message.service;
import java.util.List;
public interface KakaoAtSendService {
List<KakaoAtSendVO> selectKakaoAtList() throws Exception;
void updateKakaoAtDetail(KakaoAtSendVO kakaoAtSendVO) throws Exception;
void insertKakaoAtSendBatch(KakaoAtSendVO kakaoAtSendVO) throws Exception;
}

View File

@ -0,0 +1,229 @@
package kcc.kccadr.message.service;
public class KakaoAtSendVO {
//token
private String accessToken;
private String type;
private String expired;
//공통
private String sendFrom;
private String sendTo;
private String country;
private String content;
private String refkey;
private String userinfo;
private String resend;
private String recontent;
private String resellercode;
private String sendtime;
//알림톡
private String message;
private String senderkey;
private String templatecode;
private String quickreply;
private String title;
private String header;
private String kakaoAtSeq;
private String sendFlag;
private String sendTime;
//global
private String isLocal;
private String apiUrl;
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getExpired() {
return expired;
}
public void setExpired(String expired) {
this.expired = expired;
}
public String getSendFrom() {
return sendFrom;
}
public void setSendFrom(String sendFrom) {
this.sendFrom = sendFrom;
}
public String getSendTo() {
return sendTo;
}
public void setSendTo(String sendTo) {
this.sendTo = sendTo;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getRefkey() {
return refkey;
}
public void setRefkey(String refkey) {
this.refkey = refkey;
}
public String getUserinfo() {
return userinfo;
}
public void setUserinfo(String userinfo) {
this.userinfo = userinfo;
}
public String getResend() {
return resend;
}
public void setResend(String resend) {
this.resend = resend;
}
public String getRecontent() {
return recontent;
}
public void setRecontent(String recontent) {
this.recontent = recontent;
}
public String getResellercode() {
return resellercode;
}
public void setResellercode(String resellercode) {
this.resellercode = resellercode;
}
public String getSendtime() {
return sendtime;
}
public void setSendtime(String sendtime) {
this.sendtime = sendtime;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getSenderkey() {
return senderkey;
}
public void setSenderkey(String senderkey) {
this.senderkey = senderkey;
}
public String getTemplatecode() {
return templatecode;
}
public void setTemplatecode(String templatecode) {
this.templatecode = templatecode;
}
public String getQuickreply() {
return quickreply;
}
public void setQuickreply(String quickreply) {
this.quickreply = quickreply;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public String getIsLocal() {
return isLocal;
}
public void setIsLocal(String isLocal) {
this.isLocal = isLocal;
}
public String getApiUrl() {
return apiUrl;
}
public void setApiUrl(String apiUrl) {
this.apiUrl = apiUrl;
}
public String getKakaoAtSeq() {
return kakaoAtSeq;
}
public void setKakaoAtSeq(String kakaoAtSeq) {
this.kakaoAtSeq = kakaoAtSeq;
}
public String getSendFlag() {
return sendFlag;
}
public void setSendFlag(String sendFlag) {
this.sendFlag = sendFlag;
}
public String getSendTime() {
return sendTime;
}
public void setSendTime(String sendTime) {
this.sendTime = sendTime;
}
}

View File

@ -0,0 +1,38 @@
package kcc.kccadr.message.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import kcc.kccadr.message.service.KakaoAtSendDAO;
import kcc.kccadr.message.service.KakaoAtSendService;
import kcc.kccadr.message.service.KakaoAtSendVO;
@Service("KakaoAtSendService")
public class KakaoAtSendServiceImpl implements KakaoAtSendService {
@Resource(name = "kakaoAtSendDAO")
private KakaoAtSendDAO kakaoAtSendDAO;
@Override
public List<KakaoAtSendVO> selectKakaoAtList() throws Exception {
return kakaoAtSendDAO.selectKakaoAtList();
}
@Override
public void insertKakaoAtSendBatch(KakaoAtSendVO kakaoAtSendVO) throws Exception {
kakaoAtSendDAO.insertKakaoAtSendBatch(kakaoAtSendVO);
}
@Override
public void updateKakaoAtDetail(KakaoAtSendVO kakaoAtSendVO) throws Exception {
kakaoAtSendDAO.updateKakaoAtDetail(kakaoAtSendVO);
}
}

View File

@ -0,0 +1,215 @@
package kcc.kccadr.message.web;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.Base64;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.json.JSONObject;
import kcc.kccadr.message.service.KakaoAtSendVO;
/**
* @Class Name : KakaoAtSendAPI.java
* @Description : 카카오알림톡 API Class
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ --------- --------- -------------------------------
* @ 2022.11.29 안주영 최초생성
*
* @author An Joo Young
* @version 1.0
* @see
*
*
*/
public class KakaoAtSendAPI{
private static KakaoAtSendAPI bizPpurioAPI = null;
private String tokenUrl = "/v1/token";
private String msgUrl = "/v3/message";
private String senderkey = "b734cce3d7e2349286ea2ab70804bcb2283facb5";
private String input = null;
StringBuffer result = null;
URL url = null;
KakaoAtSendVO vo = new KakaoAtSendVO();
//비즈뿌리오 계정
private static String BIZPPURIO_ACCOUNT = "adr_copyright";
private static String BIZPPURIO_ACCOUNT_PASSWORD = "Copy0723!";
// Token 발행
private String getAccessToken(String isLocal, String apiUrl) {
result = new StringBuffer();
String token = "";
try {
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(!"real".equals(isLocal)) {
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(X509Certificate[] chain, String authType) { }
public void checkServerTrusted(X509Certificate[] chain, String authType) { } } };
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
url = new URL(apiUrl + tokenUrl);
/** Connection 설정 **/
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.addRequestProperty("Content-Type", "application/json");
connection.addRequestProperty("Accept-Charset", "UTF-8");
//Base64 인코딩
String idpw = BIZPPURIO_ACCOUNT + ":" + BIZPPURIO_ACCOUNT_PASSWORD;
String authData = Base64.getEncoder().encodeToString(idpw.getBytes());
connection.addRequestProperty("Authorization", "Basic " + authData);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setConnectTimeout(15000);
/** Request **/
OutputStream os = connection.getOutputStream();
os.flush();
/** Response **/
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
while ((input = in.readLine()) != null) {
result.append(input);
}
connection.disconnect();
// System.out.println("Response : " + result.toString());
JSONObject jObject = new JSONObject(result.toString());
token = jObject.getString("accesstoken");
} catch (IOException e) {
// TODO Auto-generated catch block
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return token;
}
public String sendMessage(KakaoAtSendVO vo, String isLocal, String apiUrl) {
vo.setAccessToken(getAccessToken(isLocal,apiUrl));
String status = "";
result = new StringBuffer();
try {
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(!"real".equals(isLocal)) {
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(X509Certificate[] chain, String authType) { }
public void checkServerTrusted(X509Certificate[] chain, String authType) { } } };
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
url = new URL(apiUrl + msgUrl);
/** Connection 설정 **/
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.addRequestProperty("Content-Type", "application/json");
connection.addRequestProperty("Accept-Charset", "UTF-8");
connection.addRequestProperty("Authorization", "Bearer " + vo.getAccessToken());
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setConnectTimeout(15000);
/** Request **/
OutputStream os = connection.getOutputStream();
String at = "{\"account\":\""+BIZPPURIO_ACCOUNT+"\",\"refkey\":\"1234\","
+ "\"type\":\"at\",\"from\":\"0226690044\",\"to\":\""+vo.getSendTo()+"\","
+ "\"content\":{\"at\":{\"senderkey\":\""+ senderkey +"\",\"templatecode\":\""+vo.getTemplatecode()+"\",\"message\":\""+vo.getMessage()+"\"}}}";
os.write(at.getBytes("UTF-8"));
os.flush();
/** Response **/
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
while ((input = in.readLine()) != null) {
result.append(input);
}
connection.disconnect();
System.out.println("Response : " + result.toString());
JSONObject jObject = new JSONObject(result.toString());
status = jObject.getString("description");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return status;
}
public static KakaoAtSendAPI getInstance()
{
if(bizPpurioAPI==null)
{
bizPpurioAPI = new KakaoAtSendAPI();
}
return bizPpurioAPI;
}
private KakaoAtSendAPI() {}
}

View File

@ -0,0 +1,58 @@
package kcc.kccadr.message.web;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import kcc.kccadr.message.service.KakaoAtSendService;
import kcc.kccadr.message.service.KakaoAtSendVO;
import kcc.kccadr.msg.service.MsgMgrService;
@Controller
public class KakaoAtSendController {
// 발송문구 관리 서비스단
@Resource(name = "MsgMgrService")
private MsgMgrService msgMgrService;
@Resource (name = "KakaoAtSendService")
private KakaoAtSendService kakaoAtSendService;
@Value("#{globalSettings['Globals.BizPpurio.siteUrl']}")
private String apiUrl;
@Value("#{globalSettings['Globals.prod.islocal']}")
private String isLocal;
/**
* 알림톡 배치 수동 실행
*/
@RequestMapping(value = "/kccadr/message/kakaoAtSendPrcsTest.do")
public ModelAndView kakaoAtSendPrcsTest(HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
List<KakaoAtSendVO> list = kakaoAtSendService.selectKakaoAtList();
int listSize = list.size();
for(int i=0; i<listSize ; i++) {
KakaoAtSendAPI kakaoAtSendAPI = KakaoAtSendAPI.getInstance();
kakaoAtSendAPI.sendMessage(list.get(i), isLocal, apiUrl);
}
return modelAndView;
}
}

View File

@ -19,6 +19,7 @@ public class MsgMgrVO extends ComDefaultVO implements Serializable{
private String frstRegisterId; // 등록자
private String lastUpdtPnttm; // 수정일시
private String lastUpdusrId; // 수정자
private String templateCode; //카카오알림톡 템플릿코드
public String getMsgSeq() {
return msgSeq;
@ -68,6 +69,12 @@ public class MsgMgrVO extends ComDefaultVO implements Serializable{
public void setLastUpdusrId(String lastUpdusrId) {
this.lastUpdusrId = lastUpdusrId;
}
public String getTemplateCode() {
return templateCode;
}
public void setTemplateCode(String templateCode) {
this.templateCode = templateCode;
}

View File

@ -30,6 +30,12 @@ public class MsgMgrDAO extends EgovAbstractDAO {
return (MsgMgrVO) select("MsgMgrDAO.selectMsgMgrInfo", msgMgrVO);
}
//발송유형별 알림톡 템플릿 코드 가져오기
public String selectMsgMgrTemplateCode(String msgTy) throws Exception{
return (String) select("MsgMgrDAO.selectMsgMgrTemplateCode", msgTy);
}
//발송문구 정보 수정하기
public void updateMsgMgrInfo(MsgMgrVO msgMgrVO) throws Exception{
update("MsgMgrDAO.updateMsgMgrInfo", msgMgrVO);

View File

@ -69,6 +69,8 @@ import kcc.com.cmm.util.WebUtil;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import kcc.kccadr.cmm.service.SMSOracleService;
import kcc.kccadr.kccadrCom.web.OtpCertUtil;
import kcc.kccadr.message.service.KakaoAtSendService;
import kcc.kccadr.message.service.KakaoAtSendVO;
import kcc.let.sym.log.clg.service.EgovLoginLogService;
import kcc.let.sym.log.clg.service.LoginLog;
import kcc.let.sym.mnu.mpm.service.MenuManageJTreeVO;
@ -180,6 +182,9 @@ public class EgovLoginController {
@Resource(name = "OtpCertUtil")
private OtpCertUtil otpCertUtil;
@Resource(name = "KakaoAtSendService")
private KakaoAtSendService kakaoAtSendService;
/*
@ -2255,7 +2260,7 @@ public class EgovLoginController {
/**
* (관리자) OTP인증 인증번호 발송 Ajax
* (관리자) OTP인증 인증번호 발송 Ajax (문자, 알림톡)
*
* @return model
* @throws Exception
@ -2273,9 +2278,22 @@ public class EgovLoginController {
adjReqMgrVO.setFrstRegisterId(loginService.selectUniqueId(userId));
// data set
adjReqMgrVO = otpDataSet(adjReqMgrVO);
adjReqMgrVO = otpDataSet(adjReqMgrVO, "sms");
sMSOracleService.insertSmsOtpCertNumSend(adjReqMgrVO);
// 문자내용 알림톡발송
KakaoAtSendVO atVO = new KakaoAtSendVO();
// data set
adjReqMgrVO = otpDataSet(adjReqMgrVO, "at");
atVO.setTemplatecode("bizp_2022113014301718895978260"); // 로그인 OTP 템플릿 코드
atVO.setSendTo(adjReqMgrVO.getTrPhone()); //수신자
atVO.setMessage(adjReqMgrVO.getSendMsg()); //발송메시지
kakaoAtSendService.insertKakaoAtSendBatch(atVO);
// 문자내용 알림톡발송
modelAndView.addObject("result", "SUCCESS");
@ -2293,10 +2311,17 @@ public class EgovLoginController {
*
* @return AdjReqMgrVO
*/
private AdjReqMgrVO otpDataSet(AdjReqMgrVO adjReqMgrVO) {
private AdjReqMgrVO otpDataSet(AdjReqMgrVO adjReqMgrVO, String flag) {
// 인증번호 난수 생성
String contents = "전자조정시스템 OTP 인증 로그인 인증번호 문자입니다. 인증번호는 : %code% 입니다.";
String contents = "";
if("sms".equals(flag)) {
contents = "전자조정시스템 OTP 인증 로그인 인증번호 문자입니다. 인증번호는 : %code% 입니다.";
} else if("at".equals(flag)) {
contents = "전자조정시스템 OTP 인증 로그인 인증번호 문자입니다. \n인증번호는 : %code% 입니다.";
}
String code = "";
long seed = System.currentTimeMillis();
Random random = new Random(seed);
@ -2317,6 +2342,7 @@ public class EgovLoginController {
return adjReqMgrVO;
}
}

View File

@ -191,4 +191,10 @@ Globals.pay.siteDomain=http://119.193.215.98:8081/web/kccadr/inipay
#inipay \uacb0\uc81c
#Globals.pay.mid=crosorkr01
#Globals.pay.signKey=UE9idGFmcGJEdU1HR04zbEdLdUM0QT09
#Globals.pay.siteDomain=https://adr.copyright.or.kr/web/kccadr/inipay
#Globals.pay.siteDomain=https://adr.copyright.or.kr/web/kccadr/inipay
# \uce74\uce74\uc624\uc54c\ub9bc\ud1a1(\ube44\uc988\ubfcc\ub9ac\uc624) API URL
#\uac1c\ubc1c\uc11c\ubc84
Globals.BizPpurio.siteUrl=https://dev-api.bizppurio.com
#\uc2e4\uc11c\ubc84
#Globals.BizPpurio.siteUrl=https://api.bizppurio.com

View File

@ -189,4 +189,10 @@ Globals.pay.siteDomain=http://119.193.215.98:8087/web/kccadr/inipay
#inipay \uacb0\uc81c
#Globals.pay.mid=crosorkr01
#Globals.pay.signKey=UE9idGFmcGJEdU1HR04zbEdLdUM0QT09
#Globals.pay.siteDomain=https://adr.copyright.or.kr/web/kccadr/inipay
#Globals.pay.siteDomain=https://adr.copyright.or.kr/web/kccadr/inipay
# \uce74\uce74\uc624\uc54c\ub9bc\ud1a1(\ube44\uc988\ubfcc\ub9ac\uc624) API URL
#\uac1c\ubc1c\uc11c\ubc84
#Globals.BizPpurio.siteUrl=https://dev-api.bizppurio.com
#\uc2e4\uc11c\ubc84
Globals.BizPpurio.siteUrl=https://api.bizppurio.com

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/kccadr/message/KakaoAtSend_SQL_Mysql.xml"/>
</sqlMapConfig>

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="KakaoAtSendDAO">
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="KakaoAtSendVO" type="kcc.kccadr.message.service.KakaoAtSendVO"/>
<insert id="kakaoAtSendDAO.insertKakaoAtSendBatch" parameterClass="KakaoAtSendVO">
INSERT INTO adr_kakao_at_batch
(
template_code
,send_to
,message
)
VALUES
(
#templateCode#
,#sendTo#
,#message#
)
</insert>
<select id="kakaoAtSendDAO.selectKakaoAtList" resultClass="KakaoAtSendVO">
SELECT
template_code AS templateCode
,send_to AS sendTo
,message AS message
FROM
adr_kakao_at_batch
WHERE
send_flag='N'
</select>
<!-- 발송문구 수정 처리 -->
<update id="kakaoAtSendDAO.updateKakaoAtDetail" parameterClass="KakaoAtSendVO">
UPDATE
adr_kakao_at_batch
SET
send_flag = 'Y'
,send_time = NOW()
WHERE
kakao_at_seq = #kakaoAtSeq#
</update>
</sqlMap>

View File

@ -31,7 +31,8 @@
FRST_REGISTER_ID AS frstRegisterId,
TO_CHAR ( FRST_REGIST_PNTTM, 'YYYY/MM/DD' ) AS frstRegistPnttm,
TO_CHAR ( LAST_UPDT_PNTTM, 'YYYY/MM/DD' ) AS lastUpdtPnttm,
LAST_UPDUSR_ID AS lastUpdusrId
LAST_UPDUSR_ID AS lastUpdusrId,
TEMPLATE_CODE AS templateCode
FROM ADR_MSG_MGR
WHERE 1=1
<isNotEmpty property="searchKeyword">
@ -60,12 +61,24 @@
FRST_REGISTER_ID AS frstRegisterId,
FRST_REGIST_PNTTM AS frstRegistPnttm,
LAST_UPDT_PNTTM AS lastUpdtPnttm,
LAST_UPDUSR_ID AS lastUpdusrId
LAST_UPDUSR_ID AS lastUpdusrId,
TEMPLATE_CODE AS templateCode
FROM ADR_MSG_MGR
WHERE MSG_SEQ = #msgSeq#
</select>
<!-- 발송문구 상세보기 -->
<select id="MsgMgrDAO.selectMsgMgrTemplateCode" parameterClass="String" resultClass="String">
SELECT
TEMPLATE_CODE AS templateCode
FROM
ADR_MSG_MGR
WHERE MSG_TY = #msgTy#
</select>
<!-- 발송문구 수정 처리 -->
<update id="MsgMgrDAO.updateMsgMgrInfo" parameterClass="MsgMgrVO">