This commit is contained in:
myname 2022-12-07 16:35:39 +09:00
commit 211c233abf
27 changed files with 967 additions and 81 deletions

14
pom.xml
View File

@ -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>

View File

@ -1,12 +1,11 @@
package kcc.com.cmm.util;
import java.util.Calendar;
import com.dsmdb.japi.MagicDBAPI;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import com.dsmdb.japi.MagicDBAPI;
import kcc.kccadr.adjReqMgrPast.service.AdjReqMgrPastVO;
@ -35,13 +34,13 @@ public final class MagicDBAPIUtil {
}
public static String encryptOnlyOneString(String stringVal) {
// return MagicDBAPI.encrypt(POLICY_NAME, stringVal);
return stringVal;
return MagicDBAPI.encrypt(POLICY_NAME, stringVal);
// return stringVal;
}
public static String decryptOnlyOneString(String stringVal) {
// return MagicDBAPI.decrypt(POLICY_NAME, stringVal);
return stringVal;
return MagicDBAPI.decrypt(POLICY_NAME, stringVal);
// return stringVal;
}
}

View File

@ -223,8 +223,11 @@ public class AdjReqMgrPastServiceImpl extends EgovAbstractServiceImpl implements
public ResponseEntity<RestResponse> insertAdjReqMgrRpplReq(AdjReqMgrPastVO adjReqMgrPastVO) throws Exception{
//조정 사건 키값 생성 디비 생성해주기
String adrSeq = adrIdgenService.getNextStringId(); // 고유ID
String adrSeq = adrIdgenService.getNextStringId(); // 고유ID
try {
//조정 사건 키값 생성 디비 생성해주기
adjReqMgrPastVO.setAdrSeq(adrSeq);
adjReqMgrPastVO.setReqOlCd(KccadrConstants.ADR_REQ_PAST); //과거이력 구분 코드 2
@ -453,21 +456,29 @@ public class AdjReqMgrPastServiceImpl extends EgovAbstractServiceImpl implements
}
}
int adrSn = Integer.parseInt(adjReqMgrPastVO.getAdrSn());
int cnt = 1;
while(cnt <= adrSn)
if(StringUtils.isNotEmpty(adjReqMgrPastVO.getAdrSn()))
{
adjReqMgrPastVO.setPrtclSeq(idgenPrtclSeqService.getNextStringId()); // idgenPrtclSeqService
adjReqMgrPastVO.setAdrSn(Integer.toString(cnt));
adjReqMgrPastDAO.insertAdrSnInit(adjReqMgrPastVO);
cnt++;
int adrSn = Integer.parseInt(adjReqMgrPastVO.getAdrSn());
int cnt = 1;
while(cnt <= adrSn)
{
adjReqMgrPastVO.setPrtclSeq(idgenPrtclSeqService.getNextStringId()); // idgenPrtclSeqService
adjReqMgrPastVO.setAdrSn(Integer.toString(cnt));
adjReqMgrPastDAO.insertAdrSnInit(adjReqMgrPastVO);
cnt++;
}
}
adjReqMgrPastVO.setAdrHstrySeq(adrHstrySeqGnrService.getNextStringId());
adjReqMgrPastVO.setAdrSn("0");
adjReqMgrPastDAO.insertAdjReqRecordAjax(adjReqMgrPastVO);
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return ResponseEntity.ok(new RestResponse(HttpStatus.OK, "조정신청 정보 저장이 완료되었습니다.", adrSeq, LocalDateTime.now()));
}
@ -974,18 +985,22 @@ public class AdjReqMgrPastServiceImpl extends EgovAbstractServiceImpl implements
{
if(prtclRowList.size() < 1)
{
int adrSn = Integer.parseInt(prmtrAdrSn);
int cnt = 1;
logger.info(" ++ cnt : [{}] / adrSn : [{}] ", cnt, adrSn);
while(cnt <= adrSn)
if(StringUtils.isNotEmpty(prmtrAdrSn))
{
int adrSn = Integer.parseInt(prmtrAdrSn);
int cnt = 1;
logger.info(" ++ cnt : [{}] / adrSn : [{}] ", cnt, adrSn);
adjReqMgrPastVO.setPrtclSeq(idgenPrtclSeqService.getNextStringId()); // idgenPrtclSeqService
adjReqMgrPastVO.setAdrSn(Integer.toString(cnt));
adjReqMgrPastDAO.insertAdrSnInit(adjReqMgrPastVO);
cnt++;
while(cnt <= adrSn)
{
logger.info(" ++ cnt : [{}] / adrSn : [{}] ", cnt, adrSn);
adjReqMgrPastVO.setPrtclSeq(idgenPrtclSeqService.getNextStringId()); // idgenPrtclSeqService
adjReqMgrPastVO.setAdrSn(Integer.toString(cnt));
adjReqMgrPastDAO.insertAdrSnInit(adjReqMgrPastVO);
cnt++;
}
adjReqMgrPastDAO.updateAdrSn(adjReqMgrPastVO);
}
adjReqMgrPastDAO.updateAdrSn(adjReqMgrPastVO);
}
}

View File

@ -644,7 +644,6 @@ public class AdjReqMgrPastController {
//사용자 유니크 아이디 받아오기
adjReqMgrPastVO.setFrstRegisterId(userId);
adjReqMgrPastVO.setLastUpdusrId(userId);
//조정신청, 대리인, 신청인 등록 처리
return adjReqMgrPastService.insertAdjReqMgrRpplReq(adjReqMgrPastVO);
}

View File

@ -306,13 +306,6 @@ public class AdjstReqWebController {
public String adjstReqRegistInformation(@ModelAttribute("adjstReqVO") AdjstReqVO adjstReqVO, ModelMap model) throws Exception {
adjstReqVO.setStep(KccadrConstants.STEP0);
// 오라클 연동 테스트 > 여현준
// sMSOracleService.selectOracleTest();
// AdjReqMgrVO adjReqMgrVO = new AdjReqMgrVO();
// adjReqMgrVO.setAdrSeq("ADR_0000000000000381");
// adjReqMgrVO.setStatCd("104010");
// sMSOracleService.insertSmsSend(adjReqMgrVO);
//로그인 권한정보 불러오기
// LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
// String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getUniqId());

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 {
@ -123,27 +127,53 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM
String rpplSmsYn = (String) map.get("rpplSmsYn");
String rpplEmailYn = (String) map.get("rpplEmailYn");
String emailResult = "N";
if (rpplEmailYn != null && rpplEmailYn.equals("Y") && StringUtil2.isNotEmpty(rpplEmail)) { // 메일 수신여부
// emailResult = insertEmailSend(map);
}
//전송 수단별 발송여부
EgovMap sendTypeMap = msgMgrDAO.selectAdrSendType();
String emailYn = (String) sendTypeMap.get("emailYn");
String smsYn = (String) sendTypeMap.get("smsYn");
String alrimtalkYn = (String) sendTypeMap.get("alrimtalkYn");
String emailResult = "N";
if("Y".equals(emailYn)) {
if (rpplEmailYn != null && rpplEmailYn.equals("Y") && StringUtil2.isNotEmpty(rpplEmail)) { // 메일 수신여부
// emailResult = insertEmailSend(map);
}
}
map.put("emailSendResult", emailResult);
if (rpplSmsYn != null && rpplSmsYn.equals("Y") && StringUtil2.isNotEmpty(rpplPhone)) { // 문자 수신여부
if (bytes > 90) {
sMSOracleDAO.insertMmsSend(map); // SMS 등록 장문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrMmsSend(map); // SMS 이력 등록 장문 > 전자조정
} else {
sMSOracleDAO.insertSmsSend(map); // SMS 등록 단문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrSmsSend(map); // SMS 이력 등록 단문 > 전자조정
}
//sms 발송 관리 테이블에 저장
msgMgrDAO.insertAdrSmsLog(map); // SMS 이력 등록 단문 > 전자조정
} else { // 메일만 보낼시 단문테이블에라도 이력 등록
adjReqMgrDAO.insertAdrSmsSend(map); // SMS 이력 등록 단문 > 전자조정
//sms 발송 관리 테이블에 저장
msgMgrDAO.insertAdrSmsLog(map); // SMS 이력 등록 단문 > 전자조정
if("Y".equals(smsYn)) {
if (rpplSmsYn != null && rpplSmsYn.equals("Y") && StringUtil2.isNotEmpty(rpplPhone)) { // 문자 수신여부
if (bytes > 90) {
sMSOracleDAO.insertMmsSend(map); // SMS 등록 장문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrMmsSend(map); // SMS 이력 등록 장문 > 전자조정
} else {
sMSOracleDAO.insertSmsSend(map); // SMS 등록 단문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrSmsSend(map); // SMS 이력 등록 단문 > 전자조정
}
//sms 발송 관리 테이블에 저장
msgMgrDAO.insertAdrSmsLog(map); // SMS 이력 등록 단문 > 전자조정
} else { // 메일만 보낼시 단문테이블에라도 이력 등록
adjReqMgrDAO.insertAdrSmsSend(map); // SMS 이력 등록 단문 > 전자조정
//sms 발송 관리 테이블에 저장
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);
if("Y".equals(alrimtalkYn)) {
// kakaoAtSendDAO.insertKakaoAtSendBatch(apiVO);
}
result = "succ";
@ -606,6 +636,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

@ -71,8 +71,21 @@ public class KccadrMgrUdtServiceImpl implements KccadrMgrUdtService{
int rs = _updateAdrMgrUdt(adjReqMgrVO, "");
// 알림(SMS) 전송 - 운영서버에서만 알림발송이 되도록 처리함
if ("real".equals(prodIsLocal)) {
//sMSOracleService.selectOracleTest(); // 연동 테스트. 콘솔 로그 확인
sMSOracleService.insertSmsSend(adjReqMgrVO);
}else {// 개발서버에서 테스트의 경우 로그만 디비에 기록되도록 수정함
sMSOracleService.insertSmsSendLocalTest(adjReqMgrVO);
}
return rs;
/*
// 필수값 체크
if (StringUtil2.isEmpty(adjReqMgrVO.getAdrSeq())
@ -117,17 +130,6 @@ public class KccadrMgrUdtServiceImpl implements KccadrMgrUdtService{
// }
// 알림(SMS) 전송 - 운영서버에서만 알림발송이 되도록 처리함
// if ("real".equals(prodIsLocal)) {
// //sMSOracleService.selectOracleTest(); // 연동 테스트. 콘솔 로그 확인
// sMSOracleService.insertSmsSend(adjReqMgrVO);
//
// }else {// 개발서버에서 테스트의 경우 로그만 디비에 기록되도록 수정함
//
// sMSOracleService.insertSmsSendLocalTest(adjReqMgrVO);
//
// }
// 조정상태변경 - 비프로세스 경우 master에 남기지 않는다.
//his에는 남겨야 하기 때문에 해당 process는 태운다.
@ -136,7 +138,6 @@ public class KccadrMgrUdtServiceImpl implements KccadrMgrUdtService{
// }else {
// return adjReqMgrDAO.updateAdrMgrMasterStatus(adjReqMgrVO);
// }
}
@Override

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);
@ -85,4 +91,9 @@ public class MsgMgrDAO extends EgovAbstractDAO {
return (String) select("MsgMgrDAO.selectAdrOtpCertNumSmsLog", adjReqMgrVO);
}
public EgovMap selectAdrSendType() throws Exception{
return (EgovMap) select("MsgMgrDAO.selectAdrSendType");
}
}

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;
/*
@ -394,7 +399,7 @@ public class EgovLoginController {
//sMSOracleService.selectOracleTest(); // 연동 테스트. 콘솔 로그 확인
//AdjReqMgrVO adjReqMgrVO = new AdjReqMgrVO();
//sMSOracleService.insertSmsSend(adjReqMgrVO);
// sMSOracleService.insertSmsSendTest();
sMSOracleService.insertSmsSendTest();
LOGGER.debug("@ prod @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@End");
//}
//
@ -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

@ -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

View File

@ -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

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,53 @@
<?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
kakao_at_seq AS kakaoAtSeq
,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">
@ -262,4 +275,13 @@
</select>
<select id="MsgMgrDAO.selectAdrSendType" resultClass="egovMap">
SELECT email_yn AS emailYn,
sms_yn AS smsYn,
alrimtalk_yn AS alrimtalkYn
FROM adr_slct_send_type
</select>
</sqlMap>

View File

@ -1506,6 +1506,10 @@ function fn_btnLoad(adrSeq){
<form id="nextGoPageForm">
<input type="hidden" id="adrSeqHidden" name="adrSeq" value="<c:out value="${adrVO.adrSeq }" />" />
</form>
<form id="goForm" name="goForm" action="<c:url value="/kccadr/adjReqMgOff/adjReqMgrPastBasicRegist.do" />" method="post">
<input type="hidden" id="adrSeq" name="adrSeq" value="" />
</form>
<!-- //cont -->
</body>
</html>

View File

@ -121,6 +121,7 @@ function openExampleAdminPop(exmpCd) {
}
if(reqPerTotCnt >= 5){
alert("피신청인은 최대 5명까지 등록이 가능합니다.");
@ -145,10 +146,10 @@ function openExampleAdminPop(exmpCd) {
onKeyUpBizNo($("[name='adjReqMgrVoList["+ num +"].rpplBizNo']")); // 개인사업자번호 자동맞춤
//추가 피신청인 카운트 늘려주기
$('#reqPerTotCnt').val(reqPerTotCnt + 1);
$('#reqPerTotCnt').val(reqPerTotCnt);
}
});

View File

@ -18,8 +18,13 @@
var reqTy = '<c:out value="${adrVO.reqTy}" />'; // 조정신청 유형
var rpplTy = '<c:out value="${adrVO.rpplTy}" />'; // 조정신청 대상
// var reqTy = '<c:out value="${adrVO.reqTy}" />'; // 조정신청 유형
// var rpplTy = '<c:out value="${adrVO.rpplTy}" />'; // 조정신청 대상
var reqTy = $('input[name=reqTy]:checked').val();; // 조정신청 유형
var rpplTy = $('input[name=rpplTy]:checked').val();; // 조정신청 유형
console.log('reqTy : ', reqTy);
console.log('rpplTy : ', rpplTy);
//대리인 정보 처리해주기
if (rpplTy == "30") {

View File

@ -402,8 +402,8 @@
$(".popBtnChk").text("수정");
$(".popBtn").show();
fn_btnLoad(data.dataSub);
fn_goDetail(data.dataSub);
// fn_btnLoad(data.dataSub);
// $('#nextGoPageForm').submit();
}
else if(data.status == 'Unauthorized' || data.status == 'BAD_REQUEST')
@ -415,4 +415,13 @@
});
}
}
}
function fn_goDetail(adrSeq){
var goForm = document.goForm;
goForm.adrSeq.value = adrSeq;
goForm.submit();
}