Merge branch 'anjooyoung'
Conflicts: src/main/resources/egovframework/egovProps/globals_local.properties src/main/resources/egovframework/egovProps/globals_svr.properties
This commit is contained in:
commit
d44ae8d019
14
pom.xml
14
pom.xml
@ -564,6 +564,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>
|
||||
|
||||
|
||||
@ -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";
|
||||
|
||||
89
src/main/java/kcc/kccadr/message/SchedulerUtil.java
Normal file
89
src/main/java/kcc/kccadr/message/SchedulerUtil.java
Normal 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);
|
||||
}
|
||||
}
|
||||
25
src/main/java/kcc/kccadr/message/service/KakaoAtSendDAO.java
Normal file
25
src/main/java/kcc/kccadr/message/service/KakaoAtSendDAO.java
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
229
src/main/java/kcc/kccadr/message/service/KakaoAtSendVO.java
Normal file
229
src/main/java/kcc/kccadr/message/service/KakaoAtSendVO.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
215
src/main/java/kcc/kccadr/message/web/KakaoAtSendAPI.java
Normal file
215
src/main/java/kcc/kccadr/message/web/KakaoAtSendAPI.java
Normal 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() {}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -203,3 +203,8 @@ Globals.Naver.callbackUrl=http://127.0.0.1:8090/web/kccadr/certDoc/snsCallBack.d
|
||||
#[\uce74\uce74\uc624]Sns \uc778\uc99d \uac12
|
||||
Globals.Kakao.Key=bf3de0d897afe0e4bef0775f7086f048
|
||||
|
||||
# \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
|
||||
|
||||
@ -191,4 +191,10 @@ Globals.pay.signKey=UE9idGFmcGJEdU1HR04zbEdLdUM0QT09
|
||||
Globals.pay.siteDomain=https://adr.copyright.or.kr/web/kccadr/payment/inipay
|
||||
|
||||
#DB \uc554\ud638\ud654 \uc194\ub8e8\uc158 \uc815\ucc45\uba85
|
||||
Globals.MagicDB.PolicyName=POLICY001
|
||||
Globals.MagicDB.PolicyName=POLICY001
|
||||
|
||||
# \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
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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">
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user