개발서버 본인인증 로그인 적용

This commit is contained in:
leejunho 2025-12-05 11:29:23 +09:00
parent 598d6767e2
commit 09f90f8504
21 changed files with 831 additions and 413 deletions

View File

@ -13,8 +13,12 @@ import kcc.com.cmm.service.FileVO;
import kcc.com.utl.user.service.CheckLoginUtil; import kcc.com.utl.user.service.CheckLoginUtil;
import kcc.kccadr.xxx.service.XxxService; import kcc.kccadr.xxx.service.XxxService;
import kcc.kccadr.xxx.service.XxxVO; import kcc.kccadr.xxx.service.XxxVO;
import kcc.ve.cmm.VeConstants;
import kcc.ve.cmm.crt.CertPhoneRequestUtill; import kcc.ve.cmm.crt.CertPhoneRequestUtill;
import kcc.ve.cmm.sendAt.SendAtUtill;
import kcc.ve.cmm.sendAt.SendService; import kcc.ve.cmm.sendAt.SendService;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsAplctPrdService;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.*; import org.springframework.http.*;
@ -33,6 +37,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.regex.Pattern;
/** /**
@ -91,6 +96,16 @@ public class XxxWebController {
@Resource(name = "SendService") @Resource(name = "SendService")
private SendService sendService; private SendService sendService;
//과정차시 관리
@Resource(name = "vEPrcsAplctPrdService")
private VEPrcsAplctPrdService vEPrcsAplctPrdService;
//과정차시 관리
@Resource(name = "sendAtUtill")
private SendAtUtill sendAtUtill;
/** /**
* XXX 목록 화면 * XXX 목록 화면
*/ */
@ -324,16 +339,20 @@ public class XxxWebController {
@RequestMapping("/web/kccadr/xxx/atTest.do") @RequestMapping("/web/kccadr/xxx/atTest.do")
public String atTest() throws Exception { public String atTest() throws Exception {
Map<String, String> chihwan = new HashMap<>(); // Map<String, String> chihwan = new HashMap<>();
chihwan.put("content", "귀하의 상표권 교육조건부 기소유예 교육 신청이 완료되었습니다.\n"); // chihwan.put("content", "귀하의 상표권 교육조건부 기소유예 교육 신청이 완료되었습니다.\n");
chihwan.put("eduDay", "2025.11.28 (금) 9시~18시"); // chihwan.put("eduDay", "2025.11.28 (금) 9시~18시");
chihwan.put("eduRegDay", "(교육등록:8:50~9시)"); // chihwan.put("eduRegDay", "(교육등록:8:50~9시)");
chihwan.put("eduPlace", "서울 강남구 테헤란로 131, 한국지식재산센터 지하 1층 훈민정음 홀 (역삼역 4번출구 인근)"); // chihwan.put("eduPlace", "서울 강남구 테헤란로 131, 한국지식재산센터 지하 1층 훈민정음 홀 (역삼역 4번출구 인근)");
//
sendService.sendAt("01030266269", "TEMPLATE_EDU_SUBMIT", chihwan); // sendService.sendAt("01030266269", "TEMPLATE_EDU_SUBMIT", chihwan);
// sendService.sendSms("01030266269", "테스트문자제목", "테스트 내용", "SMS"); // sendService.sendSms("01030266269", "테스트문자제목", "테스트 내용", "SMS");
Map<String, String> chihwan = sendAtUtill.chihwanSet(VeConstants.LCTR_DIV_CD_70, "prcsAplctPrd_0000240");
return null; return null;
} }

View File

@ -1,10 +1,12 @@
package kcc.ve.aplct.cmdTrgt.service.impl; package kcc.ve.aplct.cmdTrgt.service.impl;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import kcc.ve.cmm.sendAt.SendService;
import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -55,6 +57,9 @@ public class CmdTrgtServiceImpl implements CmdTrgtService {
@Resource(name = "vEEduAplctSndHstryService") @Resource(name = "vEEduAplctSndHstryService")
private VEEduAplctSndHstryService vEEduAplctSndHstryService; private VEEduAplctSndHstryService vEEduAplctSndHstryService;
@Resource(name = "SendService")
private SendService sendService;
@Override @Override
public void insertVeEduAplct(VEEduAplctVO paramVO) { public void insertVeEduAplct(VEEduAplctVO paramVO) {
vEEduAplctDAO.insertVeEduAplct(paramVO); vEEduAplctDAO.insertVeEduAplct(paramVO);
@ -236,6 +241,11 @@ public class CmdTrgtServiceImpl implements CmdTrgtService {
vEEduAplctVO.setClphone(cmdTrgtMngVO.getClphone()); vEEduAplctVO.setClphone(cmdTrgtMngVO.getClphone());
vEEduAplctVO.setSndFlag("B"); vEEduAplctVO.setSndFlag("B");
Map<String, Object> resultMap = sendSMS.VeSendSMS(vEEduAplctVO.getClphone(), vEEduAplctVO.getSndCn(), vEEduAplctVO.getSndFlag()); Map<String, Object> resultMap = sendSMS.VeSendSMS(vEEduAplctVO.getClphone(), vEEduAplctVO.getSndCn(), vEEduAplctVO.getSndFlag());
Map<String, String> chihwan = new HashMap<>();
chihwan.put("certNo", code);
sendService.sendAt(vEEduAplctVO.getClphone(), "TEMPLATE_CERT_NO", chihwan);
//문자 발송 성공 //문자 발송 성공
if("1".equals(resultMap.get("result_code"))){ if("1".equals(resultMap.get("result_code"))){
//발송 로그 //발송 로그

View File

@ -3,12 +3,15 @@ package kcc.ve.aplct.cmdTrgt.web;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import kcc.ve.cmm.sendAt.SendAtUtill;
import kcc.ve.cmm.sendAt.SendService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -187,6 +190,12 @@ public class CmdTrgtController {
@Resource(name = "iTNotiUtil") @Resource(name = "iTNotiUtil")
private ITNotiUtil iTNotiUtil; private ITNotiUtil iTNotiUtil;
@Resource(name = "sendAtUtill")
private SendAtUtill sendAtUtill;
@Resource(name = "SendService")
private SendService sendService;
private String p_lctr_div_cd = "70"; //시정명령 코드, 기소유예 - 60, 예방교육 - 80 private String p_lctr_div_cd = "70"; //시정명령 코드, 기소유예 - 60, 예방교육 - 80
/** /**
@ -740,6 +749,11 @@ public class CmdTrgtController {
} }
result = "success"; result = "success";
//신청 알림톡 발송
Map<String, String> chihwan = sendAtUtill.chihwanSet(VeConstants.LCTR_DIV_CD_70, vEPrcsDetailVO.getPrcsAplctPrdOrd());
sendService.sendAt(vEPrcsDetailVO.getPhone().trim().replaceAll("-", ""), "TEMPLATE_EDU_SUBMIT", chihwan);
} catch (Exception e) { } catch (Exception e) {
// TODO: handle exception // TODO: handle exception
} }

View File

@ -1,10 +1,12 @@
package kcc.ve.aplct.prevent.service.impl; package kcc.ve.aplct.prevent.service.impl;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import kcc.ve.cmm.sendAt.SendService;
import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -55,6 +57,9 @@ public class PreventServiceImpl implements PreventService {
@Resource(name = "vEEduAplctSndHstryService") @Resource(name = "vEEduAplctSndHstryService")
private VEEduAplctSndHstryService vEEduAplctSndHstryService; private VEEduAplctSndHstryService vEEduAplctSndHstryService;
@Resource(name = "SendService")
private SendService sendService;
@Override @Override
public void insertVeEduAplct(VEEduAplctVO paramVO) { public void insertVeEduAplct(VEEduAplctVO paramVO) {
vEEduAplctDAO.insertVeEduAplct(paramVO); vEEduAplctDAO.insertVeEduAplct(paramVO);
@ -232,6 +237,11 @@ public class PreventServiceImpl implements PreventService {
vEEduAplctVO.setClphone(cmdTrgtMngVO.getClphone()); vEEduAplctVO.setClphone(cmdTrgtMngVO.getClphone());
vEEduAplctVO.setSndFlag("B"); vEEduAplctVO.setSndFlag("B");
Map<String, Object> resultMap = sendSMS.VeSendSMS(vEEduAplctVO.getClphone(), vEEduAplctVO.getSndCn(), vEEduAplctVO.getSndFlag()); Map<String, Object> resultMap = sendSMS.VeSendSMS(vEEduAplctVO.getClphone(), vEEduAplctVO.getSndCn(), vEEduAplctVO.getSndFlag());
Map<String, String> chihwan = new HashMap<>();
chihwan.put("certNo", code);
sendService.sendAt(vEEduAplctVO.getClphone(), "TEMPLATE_CERT_NO", chihwan);
//문자 발송 성공 //문자 발송 성공
if("1".equals(resultMap.get("result_code"))){ if("1".equals(resultMap.get("result_code"))){
//발송 로그 //발송 로그

View File

@ -9,6 +9,8 @@ import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import kcc.ve.cmm.sendAt.SendAtUtill;
import kcc.ve.cmm.sendAt.SendService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -186,6 +188,12 @@ public class PreventController {
@Resource(name = "iTNotiUtil") @Resource(name = "iTNotiUtil")
private ITNotiUtil iTNotiUtil; private ITNotiUtil iTNotiUtil;
@Resource(name = "sendAtUtill")
private SendAtUtill sendAtUtill;
@Resource(name = "SendService")
private SendService sendService;
private String p_lctr_div_cd = "80"; //시정명령 코드, 기소유예 - 60, 예방교육 - 80 private String p_lctr_div_cd = "80"; //시정명령 코드, 기소유예 - 60, 예방교육 - 80
/** /**
@ -739,6 +747,10 @@ public class PreventController {
} }
result = "success"; result = "success";
//신청 알림톡 발송
Map<String, String> chihwan = sendAtUtill.chihwanSet(VeConstants.LCTR_DIV_CD_80, vEPrcsDetailVO.getPrcsAplctPrdOrd());
sendService.sendAt(vEPrcsDetailVO.getPhone().trim().replaceAll("-", ""), "TEMPLATE_EDU_SUBMIT", chihwan);
} catch (Exception e) { } catch (Exception e) {
// TODO: handle exception // TODO: handle exception
} }

View File

@ -1,10 +1,12 @@
package kcc.ve.aplct.sspnIdtmt.service.impl; package kcc.ve.aplct.sspnIdtmt.service.impl;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import kcc.ve.cmm.sendAt.SendService;
import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -56,6 +58,9 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService {
@Resource(name = "vEEduAplctSndHstryService") @Resource(name = "vEEduAplctSndHstryService")
private VEEduAplctSndHstryService vEEduAplctSndHstryService; private VEEduAplctSndHstryService vEEduAplctSndHstryService;
@Resource(name = "SendService")
private SendService sendService;
@Override @Override
public void insertVeEduAplct(VEEduAplctVO paramVO) { public void insertVeEduAplct(VEEduAplctVO paramVO) {
vEEduAplctDAO.insertVeEduAplct(paramVO); vEEduAplctDAO.insertVeEduAplct(paramVO);
@ -293,6 +298,11 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService {
vEEduAplctVO.setClphone(cndtnTrgtInfoMngVO.getClphone()); vEEduAplctVO.setClphone(cndtnTrgtInfoMngVO.getClphone());
vEEduAplctVO.setSndFlag("B"); vEEduAplctVO.setSndFlag("B");
Map<String, Object> resultMap = sendSMS.VeSendSMS(vEEduAplctVO.getClphone(), vEEduAplctVO.getSndCn(), vEEduAplctVO.getSndFlag()); Map<String, Object> resultMap = sendSMS.VeSendSMS(vEEduAplctVO.getClphone(), vEEduAplctVO.getSndCn(), vEEduAplctVO.getSndFlag());
Map<String, String> chihwan = new HashMap<>();
chihwan.put("certNo", code);
sendService.sendAt(vEEduAplctVO.getClphone(), "TEMPLATE_CERT_NO", chihwan);
//문자 발송 성공 //문자 발송 성공
if("1".equals(resultMap.get("result_code"))){ if("1".equals(resultMap.get("result_code"))){
//발송 로그 //발송 로그

View File

@ -9,6 +9,8 @@ import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import kcc.ve.cmm.sendAt.SendAtUtill;
import kcc.ve.cmm.sendAt.SendService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -179,6 +181,12 @@ public class SspnIdtmtController {
@Resource(name = "iTNotiUtil") @Resource(name = "iTNotiUtil")
private ITNotiUtil iTNotiUtil; private ITNotiUtil iTNotiUtil;
@Resource(name = "sendAtUtill")
private SendAtUtill sendAtUtill;
@Resource(name = "SendService")
private SendService sendService;
private String p_lctr_div_cd = "60"; private String p_lctr_div_cd = "60";
/** /**
@ -730,6 +738,10 @@ public class SspnIdtmtController {
} }
result = "success"; result = "success";
//신청 알림톡 발송
Map<String, String> chihwan = sendAtUtill.chihwanSet(VeConstants.LCTR_DIV_CD_60, vEPrcsDetailVO.getPrcsAplctPrdOrd());
sendService.sendAt(vEPrcsDetailVO.getPhone().trim().replaceAll("-", ""), "TEMPLATE_EDU_SUBMIT", chihwan);
} catch (Exception e) { } catch (Exception e) {
// TODO: handle exception // TODO: handle exception
} }

View File

@ -0,0 +1,66 @@
package kcc.ve.cmm.sendAt;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import kcc.ve.cmm.VeConstants;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsAplctPrdService;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import lombok.*;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
@Component(value = "sendAtUtill")
public class SendAtUtill{
//과정차시 관리
@Resource(name = "vEPrcsAplctPrdService")
private VEPrcsAplctPrdService vEPrcsAplctPrdService;
public Map<String, String> chihwanSet(String lctrDivCd, String prcsAplctPrdOrd) throws Exception {
VEPrcsDetailVO vEPrcsDetailVO = new VEPrcsDetailVO();
vEPrcsDetailVO.setPrcsAplctPrdOrd(prcsAplctPrdOrd);
VEPrcsDetailVO vEPrcsDetailVODetail = vEPrcsAplctPrdService.selectDetailNewOne4Fndth(vEPrcsDetailVO);
String[] prvtMemoCn = vEPrcsDetailVODetail.getPrvtMemoCn().split(Pattern.quote("|"));
String content = "";
String eduDay = "";
String eduRegDay = "";
String eduPlace = "";
if(VeConstants.LCTR_DIV_CD_60.equals(lctrDivCd)){
content = "귀하의 상표권 교육조건부 기소유예 교육 신청이 완료되었습니다.";
}else if(VeConstants.LCTR_DIV_CD_70.equals(lctrDivCd)){
content = "귀하의 부정경쟁행위 시정명령 교육 신청이 완료되었습니다.";
}else if(VeConstants.LCTR_DIV_CD_80.equals(lctrDivCd)){
content = "귀하의 상표권 침해・부정경쟁행위 예방 교육 신청이 완료되었습니다.";
}else{
content = "귀하의 교육 신청이 완료되었습니다.";
}
if(prvtMemoCn.length > 0){
eduDay = prvtMemoCn[0];
eduRegDay = prvtMemoCn[1];
eduPlace = prvtMemoCn[2];
}
Map<String, String> chihwan = new HashMap<>();
chihwan.put("content", content);
chihwan.put("eduDay", eduDay);
chihwan.put("eduRegDay", eduRegDay);
chihwan.put("eduPlace", eduPlace);
return chihwan;
}
}

View File

@ -1,41 +1,13 @@
package kcc.ve.cmm.sendAt; package kcc.ve.cmm.sendAt;
import java.io.Serializable;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.*;
import lombok.AllArgsConstructor; import java.io.Serializable;
import lombok.Builder; import java.util.Map;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @packageName : kcc.com.snd.service
* @templatecode
* @신청인_접수확인_1 :
* TEMPLATE_APP_JUBSU
* @chihwan : 없음
* @신청인_담당자배정_1 :
* TEMPLATE_APP_BAEJUNG
* @chihwan : "caseNo", "team", "examiner", "tel", "email"
* @양당사자_분쟁조정협의회 안건상정 :
* TEMPLATE_BOTH_SANGJUNG
* @chihwan : "caseNo", "cfrnc", "tel", "email"
* @양당사자_출석요구 n차 :
* TEMPLATE_BOTH_CHULSUK
* @chihwan : "caseNo", "nCha"
* @양당사자_통지 :
* TEMPLATE_BOTH_TONGJI
* @chihwan : "caseNo", "cfrnc"
* @신청인_보완요구 n차 :
* TEMPLATE_APP_BOWAN
* @chihwan : "caseNo", "nCha"
*
*/
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
@ -56,6 +28,8 @@ public class SendAtVO implements Serializable {
private String from; private String from;
private String to; private String to;
private Content content; private Content content;
private Resend resend;
private Recontent recontent;
@JsonIgnore @JsonIgnore
private Map<String, String> chihwan; private Map<String, String> chihwan;
@ -85,7 +59,7 @@ public class SendAtVO implements Serializable {
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public static class resend { public static class Resend {
private String first; private String first;
} }
@ -94,7 +68,7 @@ public class SendAtVO implements Serializable {
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public static class recontent { public static class Recontent {
private Lms lms; private Lms lms;
@Getter @Getter

View File

@ -0,0 +1,57 @@
package kcc.ve.cmm.sendAt;
import kcc.com.cmm.util.StringUtil;
import kcc.com.utl.user.service.CheckLoginUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
@Controller
public class SendController {
private static final Logger LOGGER = LoggerFactory.getLogger(SendController.class);
//로그인 체크 util
@Resource(name = "checkLoginUtil")
private CheckLoginUtil checkLoginUtil;
@Resource(name = "SendService")
private SendService sendService;
@RequestMapping("/cmm/sendAt/smsSendAjax.do")
public ModelAndView atSendAjax( SendSmsVO sendSmsVO ) throws Exception {
ModelAndView modelAndView = new ModelAndView();
if(StringUtil.isEmpty(sendSmsVO.getSmsContent())) {
sendSmsVO.setSmsContent("");
}
String msgType = msgType(sendSmsVO.getSmsContent());
sendService.sendSms(sendSmsVO.getTo(), "지식재산보호원", sendSmsVO.getSmsContent(), msgType);
return modelAndView;
}
@RequestMapping("/cmm/sendAt/smsSend.do")
public String smsSend() throws Exception {
return "ve/cmm/sendAt/SmsSend";
}
private String msgType( String content ) throws UnsupportedEncodingException {
// EUC-KR 기준 바이트 길이 계산
int byteLength = content.getBytes("EUC-KR").length;
// SMS/LMS 판별
String msgType = byteLength > 90 ? "LMS" : "SMS";
return msgType;
}
}

View File

@ -0,0 +1,177 @@
package kcc.ve.cmm.sendAt;
import kcc.let.utl.fcc.service.EgovCryptoUtil;
import kcc.ve.cmm.VeConstants;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
@Component
public class SendScheduler {
@Resource(name = "SendService")
private SendService sendService;
@Resource(name = "egovCryptoUtil")
private EgovCryptoUtil egovCryptoUtil;
@Value("${Globals.prod.islocal}")
private String isLocal;
private static final Logger LOGGER = LoggerFactory.getLogger(SendScheduler.class);
/**
* 매일 새벽 1시에 실행
* cron = "0 0 1 * * ?" 요일
*/
@Scheduled(cron = "0 0 9 * * ?")
public void sevenDaybeforeAt() {
// svr 일때만 실행
if(!"real".equals(isLocal)){
LOGGER.info("[sevenDaybeforeAt] Skipped - Globals.prod.islocal=" + isLocal);
return;
}
try {
List<VEPrcsDetailVO> targetList = sendService.select7DaybeforeAt(7);
targetList.stream().forEach(t ->
{
if(StringUtils.isNotEmpty(t.getPhone())){
String[] phone = t.getPhone().split(",");
Arrays.stream(phone).forEach( b ->
{
String to = egovCryptoUtil.decrypt(egovCryptoUtil.decrypt(b));
if(StringUtils.isNotEmpty(t.getPrvtMemoCn())){
Map<String, String> chihwan = getSevenDaybeforeAtChihwanMap(t);
try {
sendService.sendAt(to, "TEMPLATE_EDU_SUBMIT", chihwan);
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
});
}
});
} catch(Exception e) {
throw new RuntimeException(e);
}
}
@Scheduled(cron = "0 1 9 * * ?")
public void oneDaybeforeAt() {
// svr 일때만 실행
if(!"real".equals(isLocal)){
LOGGER.info("[sevenDaybeforeAt] Skipped - Globals.prod.islocal=" + isLocal);
return;
}
try {
List<VEPrcsDetailVO> targetList = sendService.select7DaybeforeAt(1);
targetList.stream().forEach(t ->
{
if(StringUtils.isNotEmpty(t.getPhone())){
String[] phone = t.getPhone().split(",");
Arrays.stream(phone).forEach( b ->
{
String to = egovCryptoUtil.decrypt(egovCryptoUtil.decrypt(b));
if(StringUtils.isNotEmpty(t.getPrvtMemoCn())){
Map<String, String> chihwan = getOneDaybeforeAtChihwanMap(t);
try {
sendService.sendAt(to, "TEMPLATE_EDU_SUBMIT", chihwan);
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
});
}
});
} catch(Exception e) {
throw new RuntimeException(e);
}
}
private static Map<String, String> getSevenDaybeforeAtChihwanMap( VEPrcsDetailVO t ) {
String[] prvtMemoCn = t.getPrvtMemoCn().split(Pattern.quote("|"));
String content = "";
String eduDay = "";
String eduRegDay = "";
String eduPlace = "";
if(VeConstants.LCTR_DIV_CD_60.equals(t.getLctrDivCd())){
content = "귀하의 상표권 교육조건부 기소유예 교육 안내입니다.";
}else if(VeConstants.LCTR_DIV_CD_70.equals(t.getLctrDivCd())){
content = "귀하의 부정경쟁행위 시정명령 교육 안내입니다.";
}else if(VeConstants.LCTR_DIV_CD_80.equals(t.getLctrDivCd())){
content = "귀하의 상표권 침해・부정경쟁행위 예방 교육 안내입니다.";
}else{
content = "귀하의 교육 안내입니다.";
}
if(prvtMemoCn.length > 0){
eduDay = prvtMemoCn[0];
eduRegDay = prvtMemoCn[1];
eduPlace = prvtMemoCn[2];
}
Map<String, String> chihwan = new HashMap<>();
chihwan.put("content", content);
chihwan.put("eduDay", eduDay);
chihwan.put("eduRegDay", eduRegDay);
chihwan.put("eduPlace", eduPlace);
return chihwan;
}
private static Map<String, String> getOneDaybeforeAtChihwanMap( VEPrcsDetailVO t ) {
String[] prvtMemoCn = t.getPrvtMemoCn().split(Pattern.quote("|"));
String content = "";
String eduDay = "";
String eduRegDay = "";
String eduPlace = "";
LocalDate tomorrow = LocalDate.now().plusDays(1);
String tomorrowStr = tomorrow.format(DateTimeFormatter.ofPattern("M/d"));
if(VeConstants.LCTR_DIV_CD_60.equals(t.getLctrDivCd())){
content = "귀하의 내일(" + tomorrowStr + ") 상표권 교육조건부 기소유예 교육 안내입니다.";
}else if(VeConstants.LCTR_DIV_CD_70.equals(t.getLctrDivCd())){
content = "귀하의 내일(" + tomorrowStr + ") 부정경쟁행위 시정명령 교육 안내입니다.";
}else if(VeConstants.LCTR_DIV_CD_80.equals(t.getLctrDivCd())){
content = "귀하의 내일(" + tomorrowStr + ") 상표권 침해・부정경쟁행위 예방 교육 안내입니다.";
}else{
content = "귀하의 내일(" + tomorrowStr + ") 교육 안내입니다.";
}
if(prvtMemoCn.length > 0){
eduDay = prvtMemoCn[0];
eduRegDay = prvtMemoCn[1];
eduPlace = prvtMemoCn[2];
eduPlace += "\r\n※주차 지원이 불가하오니 대중교통을 이용바랍니다.";
}
Map<String, String> chihwan = new HashMap<>();
chihwan.put("content", content);
chihwan.put("eduDay", eduDay);
chihwan.put("eduRegDay", eduRegDay);
chihwan.put("eduPlace", eduPlace);
return chihwan;
}
}

View File

@ -1,6 +1,7 @@
package kcc.ve.cmm.sendAt; package kcc.ve.cmm.sendAt;
import egovframework.rte.psl.dataaccess.util.EgovMap; import egovframework.rte.psl.dataaccess.util.EgovMap;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -46,4 +47,6 @@ public interface SendService {
void updateSendSet(SendSmsVO sendSmsVO) throws Exception; void updateSendSet(SendSmsVO sendSmsVO) throws Exception;
public List<VEPrcsDetailVO> select7DaybeforeAt(Integer diffDay) throws Exception;
} }

View File

@ -1,9 +1,9 @@
package kcc.ve.cmm.sendAt.impl; package kcc.ve.cmm.sendAt.impl;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import kcc.com.cmm.service.impl.EgovComAbstractDAO; import kcc.com.cmm.service.impl.EgovComAbstractDAO;
import kcc.ve.cmm.sendAt.SendAtVO; import kcc.ve.cmm.sendAt.SendAtVO;
import kcc.ve.cmm.sendAt.SendSmsVO; import kcc.ve.cmm.sendAt.SendSmsVO;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@ -27,4 +27,9 @@ public class SendDAO extends EgovComAbstractDAO {
public void updateSendSet(SendSmsVO sendSmsVO) throws Exception{ public void updateSendSet(SendSmsVO sendSmsVO) throws Exception{
update("sendDAO.updateSendSet", sendSmsVO); update("sendDAO.updateSendSet", sendSmsVO);
} }
public List<VEPrcsDetailVO> select7DaybeforeAt(Integer diffDay) throws Exception{
return (List<VEPrcsDetailVO>) list("sendDAO.select7DaybeforeAt", diffDay);
}
} }

View File

@ -5,10 +5,14 @@ import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.psl.dataaccess.util.EgovMap; import egovframework.rte.psl.dataaccess.util.EgovMap;
import kcc.ve.cmm.sendAt.SendAtVO.Content; import kcc.ve.cmm.sendAt.SendAtVO.Content;
import kcc.ve.cmm.sendAt.SendAtVO.Content.At; import kcc.ve.cmm.sendAt.SendAtVO.Content.At;
import kcc.ve.cmm.sendAt.SendAtVO.Resend;
import kcc.ve.cmm.sendAt.SendAtVO.Recontent;
import kcc.ve.cmm.sendAt.SendAtVO.Recontent.Lms;
import kcc.ve.cmm.sendAt.PpurioGlobalSet; import kcc.ve.cmm.sendAt.PpurioGlobalSet;
import kcc.ve.cmm.sendAt.SendAtVO; import kcc.ve.cmm.sendAt.SendAtVO;
import kcc.ve.cmm.sendAt.SendService; import kcc.ve.cmm.sendAt.SendService;
import kcc.ve.cmm.sendAt.SendSmsVO; import kcc.ve.cmm.sendAt.SendSmsVO;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.json.JSONObject; import org.json.JSONObject;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -18,10 +22,7 @@ import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; import javax.net.ssl.X509TrustManager;
import java.io.BufferedReader; import java.io.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.security.KeyManagementException; import java.security.KeyManagementException;
@ -33,7 +34,7 @@ import java.util.*;
@Service("SendService") @Service("SendService")
public class SendServiceImpl extends EgovAbstractServiceImpl implements SendService { public class SendServiceImpl extends EgovAbstractServiceImpl implements SendService {
@Resource(name="sendDAO") @Resource(name = "sendDAO")
private SendDAO sendDAO; private SendDAO sendDAO;
@Override @Override
@ -41,7 +42,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
String to String to
, String templateCode , String templateCode
, Map<String, String> chihwan , Map<String, String> chihwan
) throws Exception{ ) throws Exception {
SendAtVO vo = new SendAtVO(); SendAtVO vo = new SendAtVO();
vo = sendDAO.selectToken(); vo = sendDAO.selectToken();
@ -51,7 +52,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
if(this.getPpurioToken(vo)) { if(this.getPpurioToken(vo)) {
//토큰 갱신 //토큰 갱신
sendDAO.updateToken(vo); sendDAO.updateToken(vo);
}else { } else {
System.out.println("토큰 갱신 실패"); System.out.println("토큰 갱신 실패");
throw new Exception(); throw new Exception();
} }
@ -64,15 +65,14 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
.type(vo.getType()) .type(vo.getType())
.to(to) .to(to)
.content(Content.builder() .content(Content.builder()
.at(SendAtVO.Content.At.builder() .at(At.builder()
.templatecode(templateCode) .templatecode(templateCode)
.build() .build()
) )
.build() .build()
) )
.chihwan(chihwan) .chihwan(chihwan)
.build() .build();
;
this.sendAt(vo); this.sendAt(vo);
@ -84,7 +84,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
, String subject , String subject
, String smsContent , String smsContent
, String type , String type
) throws Exception{ ) throws Exception {
Boolean success = true; Boolean success = true;
int successCnt = 0; int successCnt = 0;
SendAtVO vo = new SendAtVO(); SendAtVO vo = new SendAtVO();
@ -96,7 +96,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
if(this.getPpurioToken(vo)) { if(this.getPpurioToken(vo)) {
//토큰 갱신 //토큰 갱신
sendDAO.updateToken(vo); sendDAO.updateToken(vo);
}else { } else {
System.out.println("토큰 갱신 실패"); System.out.println("토큰 갱신 실패");
throw new Exception(); throw new Exception();
} }
@ -113,56 +113,62 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
boolean result = this.sendSmsPrcs(smsVO); boolean result = this.sendSmsPrcs(smsVO);
if(result) { if(result) {
successCnt++; successCnt++;
}else { } else {
success = false; success = false;
System.out.println("문자 발송 실패: " + phone); System.out.println("문자 발송 실패: " + phone);
} }
} }
Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new HashMap<>();
resultMap.put("success" , success); resultMap.put("success", success);
resultMap.put("successCnt" , successCnt); resultMap.put("successCnt", successCnt);
return resultMap; return resultMap;
} }
@Override @Override
public SendSmsVO selectSendSet() throws Exception{ public SendSmsVO selectSendSet() throws Exception {
return sendDAO.selectSendSet(); return sendDAO.selectSendSet();
} }
@Override @Override
public void updateSendSet(SendSmsVO sendSmsVO) throws Exception{ public void updateSendSet( SendSmsVO sendSmsVO ) throws Exception {
sendDAO.updateSendSet(sendSmsVO); sendDAO.updateSendSet(sendSmsVO);
} }
@Override
public List<VEPrcsDetailVO> select7DaybeforeAt(Integer diffDay) throws Exception{
return sendDAO.select7DaybeforeAt(diffDay);
}
/** /**
* @methodName : timeDiffBefore
* @author : JunHo Lee
* @date : 2024.12.09
* @description :
* @param str * @param str
* @return : * @return :
* !str이 현재 시간보다 이전이면 true * !str이 현재 시간보다 이전이면 true
* !str이 현재 시간보다 이후이면 false * !str이 현재 시간보다 이후이면 false
* @methodName : timeDiffBefore
* @author : JunHo Lee
* @date : 2024.12.09
* @description :
*/ */
private Boolean timeDiffBefore(String str) { private Boolean timeDiffBefore( String str ) {
try { try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date diffDate = sdf.parse(str); Date diffDate = sdf.parse(str);
Date currentDate = new Date(); Date currentDate = new Date();
if (diffDate.before(currentDate)) { if(diffDate.before(currentDate)) {
return true; return true;
} else { } else {
return false; return false;
} }
} catch (Exception e) { } catch(Exception e) {
return false; return false;
} }
} }
public static String sendAt(SendAtVO sendAtVO) { public static String sendAt( SendAtVO sendAtVO ) {
StringBuffer result = new StringBuffer(); StringBuffer result = new StringBuffer();
@ -173,10 +179,17 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/ /** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) { if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; } public X509Certificate[] getAcceptedIssuers() {
public void checkClientTrusted(X509Certificate[] chain, String authType) { } return null;
public void checkServerTrusted(X509Certificate[] chain, String authType) { } } }; }
public void checkClientTrusted( X509Certificate[] chain, String authType ) {
}
public void checkServerTrusted( X509Certificate[] chain, String authType ) {
}
} };
SSLContext sc = SSLContext.getInstance("SSL"); SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom()); sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
@ -213,29 +226,36 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
.message(at.getMessage()) .message(at.getMessage())
.build() .build()
) )
.build() .build())
) .resend(Resend.builder()
.first("lms")
.build())
.recontent(Recontent.builder()
.lms(Lms.builder()
.message(at.getMessage())
.build())
.build())
.build(); .build();
// Request body 전송 // Request body 전송
try (OutputStream os = connection.getOutputStream()) { try(OutputStream os = connection.getOutputStream()) {
os.write(sendAtVO.toJson().getBytes("UTF-8")); os.write(sendAtVO.toJson().getBytes("UTF-8"));
os.flush(); os.flush();
} }
// 서버 응답 처리 // 서버 응답 처리
int responseCode = connection.getResponseCode(); int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { if(responseCode == HttpURLConnection.HTTP_OK) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) { try(BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
while ((input = reader.readLine()) != null) { while((input = reader.readLine()) != null) {
result.append(input); result.append(input);
} }
} }
} else { } else {
// 오류 응답 처리 // 오류 응답 처리
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) { try(BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
StringBuilder errorResponse = new StringBuilder(); StringBuilder errorResponse = new StringBuilder();
while ((input = reader.readLine()) != null) { while((input = reader.readLine()) != null) {
errorResponse.append(input); errorResponse.append(input);
} }
System.out.println("Error Response: " + errorResponse.toString()); System.out.println("Error Response: " + errorResponse.toString());
@ -250,13 +270,13 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
// status = jObject.getString("description"); // status = jObject.getString("description");
} catch (IOException e) { } catch(IOException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} catch (KeyManagementException e) { } catch(KeyManagementException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} catch (NoSuchAlgorithmException e) { } catch(NoSuchAlgorithmException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
@ -264,7 +284,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
// return status; // return status;
} }
public static Boolean sendSmsPrcs(SendSmsVO sendSmsVO) { public static Boolean sendSmsPrcs( SendSmsVO sendSmsVO ) {
Boolean success = true; Boolean success = true;
@ -278,10 +298,17 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/ /** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) { if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; } public X509Certificate[] getAcceptedIssuers() {
public void checkClientTrusted(X509Certificate[] chain, String authType) { } return null;
public void checkServerTrusted(X509Certificate[] chain, String authType) { } } }; }
public void checkClientTrusted( X509Certificate[] chain, String authType ) {
}
public void checkServerTrusted( X509Certificate[] chain, String authType ) {
}
} };
SSLContext sc = SSLContext.getInstance("SSL"); SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom()); sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
@ -309,7 +336,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
JSONObject content = new JSONObject(); JSONObject content = new JSONObject();
if("SMS".equals(sendSmsVO.getType())) { if("SMS".equals(sendSmsVO.getType())) {
content.put("sms", sms); content.put("sms", sms);
}else { } else {
content.put("lms", sms); content.put("lms", sms);
} }
@ -324,24 +351,24 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
String body = json.toString(); String body = json.toString();
// Request body 전송 // Request body 전송
try (OutputStream os = connection.getOutputStream()) { try(OutputStream os = connection.getOutputStream()) {
os.write(body.getBytes("UTF-8")); os.write(body.getBytes("UTF-8"));
os.flush(); os.flush();
} }
// 서버 응답 처리 // 서버 응답 처리
int responseCode = connection.getResponseCode(); int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { if(responseCode == HttpURLConnection.HTTP_OK) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) { try(BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
while ((input = reader.readLine()) != null) { while((input = reader.readLine()) != null) {
result.append(input); result.append(input);
} }
} }
} else { } else {
// 오류 응답 처리 // 오류 응답 처리
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) { try(BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
StringBuilder errorResponse = new StringBuilder(); StringBuilder errorResponse = new StringBuilder();
while ((input = reader.readLine()) != null) { while((input = reader.readLine()) != null) {
errorResponse.append(input); errorResponse.append(input);
} }
System.out.println("Error Response: " + errorResponse.toString()); System.out.println("Error Response: " + errorResponse.toString());
@ -357,15 +384,15 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
// status = jObject.getString("description"); // status = jObject.getString("description");
} catch (IOException e) { } catch(IOException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
success = false; success = false;
} catch (KeyManagementException e) { } catch(KeyManagementException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
success = false; success = false;
} catch (NoSuchAlgorithmException e) { } catch(NoSuchAlgorithmException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
success = false; success = false;
@ -374,7 +401,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
// return status; // return status;
} }
public static Boolean getPpurioToken(SendAtVO sendAtVO) { public static Boolean getPpurioToken( SendAtVO sendAtVO ) {
StringBuffer result = new StringBuffer(); StringBuffer result = new StringBuffer();
@ -383,13 +410,19 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
PpurioGlobalSet ppurioGlobalSet = new PpurioGlobalSet(); PpurioGlobalSet ppurioGlobalSet = new PpurioGlobalSet();
try { try {
System.out.println("test");
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/ /** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) { if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; } public X509Certificate[] getAcceptedIssuers() {
public void checkClientTrusted(X509Certificate[] chain, String authType) { } return null;
public void checkServerTrusted(X509Certificate[] chain, String authType) { } } }; }
public void checkClientTrusted( X509Certificate[] chain, String authType ) {
}
public void checkServerTrusted( X509Certificate[] chain, String authType ) {
}
} };
SSLContext sc = SSLContext.getInstance("SSL"); SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom()); sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
@ -421,14 +454,14 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
/** Response **/ /** Response **/
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
while ((input = in.readLine()) != null) { while((input = in.readLine()) != null) {
result.append(input); result.append(input);
} }
connection.disconnect(); connection.disconnect();
if (result.length() > 0) { if(result.length() > 0) {
JSONObject jObject = new JSONObject(result.toString()); JSONObject jObject = new JSONObject(result.toString());
if ( if(
jObject.has("accesstoken") jObject.has("accesstoken")
&& !jObject.isNull("accesstoken") && !jObject.isNull("accesstoken")
&& jObject.has("type") && jObject.has("type")
@ -448,13 +481,13 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
return false; return false;
} }
} catch (IOException e) { } catch(IOException e) {
System.out.println(e.getMessage()); System.out.println(e.getMessage());
return false; return false;
} catch (KeyManagementException e) { } catch(KeyManagementException e) {
System.out.println(e.getMessage()); System.out.println(e.getMessage());
return false; return false;
} catch (NoSuchAlgorithmException e) { } catch(NoSuchAlgorithmException e) {
System.out.println(e.getMessage()); System.out.println(e.getMessage());
return false; return false;
} }
@ -468,43 +501,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
String content = ""; String content = "";
Map<String, String[]> requiredPlaceholders = new HashMap<>(); Map<String, String[]> requiredPlaceholders = new HashMap<>();
switch (at.getTemplatecode()) { switch(at.getTemplatecode()) {
/*case "TEMPLATE_APP_JUBSU": // 신청인_접수확인_1
at.setTemplatecode("bizp_2024112810423519814410026");
content = "[한국공정거래조정원] \r\n"
+ "귀사(하)의 조정신청이 접수 완료되었습니다.\r\n"
+ "향후 담당부서 및 담당자가 배정될 예정입니다.";
break;
case "TEMPLATE_APP_BAEJUNG": // 신청인_담당자배정_2
at.setTemplatecode("bizp_2024121915475924487679960");
content = "[한국공정거래조정원]\r\n"
+ "귀사(하)가 #{respondent}을(를) 상대로 신청한 사건의 사건번호는 #{caseNo}, 담당자는 #{team}팀 #{examiner} 조사관(유선전화:#{tel}, 메일주소 #{email})입니다.\r\n"
+ "향후 담당 조사관이 공문 등을 통해 연락드릴 예정입니다.";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"respondent","caseNo", "team", "examiner", "tel", "email"});
break;
case "TEMPLATE_BOTH_SANGJUNG": // 양당사자_분쟁조정협의회 안건상정
at.setTemplatecode("bizp_2024112810492919814837182");
content = "[한국공정거래조정원]\r\n"
+ "귀사(하)가 진행 중인 분쟁조정 사건 [사건번호 #{caseNo}]이 향후 개최될 #{cfrnc}분쟁조정협의회에 상정될 예정입니다.\r\n"
+ "#{cfrnc}분쟁조정협의회 기일은 담당 조사관(유선전화:#{tel}, 메일주소 #{email})에게 문의주시면 안내드리겠습니다.";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "cfrnc", "tel", "email"});
break;
case "TEMPLATE_BOTH_CHULSUK": // 양당사자_출석요구 n차
at.setTemplatecode("bizp_2025011515420924487914030");
content = "[한국공정거래조정원]\r\n"
+ "귀사(하)가 진행 중인 분쟁조정 사건 [사건번호 #{caseNo}]의 출석조사(#{nCha}차) 기일이 확정되었습니다. \r\n"
+ "향후 담당 조사관이 공문 등을 통해 연락드릴 예정입니다. \r\n"
+ "https://fairnet.kofair.or.kr";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "nCha"});
break;
case "TEMPLATE_BOTH_TONGJI": // 양당사자_통지
at.setTemplatecode("bizp_2025011515425124487733149");
content = "[한국공정거래조정원]\r\n"
+ "귀사(하)가 진행 중인 분쟁조정 사건 [사건번호 #{caseNo}]에 대한 #{cfrnc}분쟁조정협의회 의결이 완료되었습니다.\r\n"
+ "한국공정거래조정원 분쟁조정사건처리시스템에서 확인해주시기 바랍니다.\r\n"
+ "https://fairnet.kofair.or.kr";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "cfrnc"});
break;*/
case "TEMPLATE_EDU_SUBMIT": // 교육신청 case "TEMPLATE_EDU_SUBMIT": // 교육신청
at.setTemplatecode("bizp_2025112512494050432369880"); at.setTemplatecode("bizp_2025112512494050432369880");
content = content =
@ -521,15 +518,24 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
+ "3.준비물 : 필기구, 실물신분증\r\n" + "3.준비물 : 필기구, 실물신분증\r\n"
+ "\r\n" + "\r\n"
+ "문의처:1670-1271"; + "문의처:1670-1271";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"content", "eduDay", "eduRegDay", "eduPlace"}); requiredPlaceholders.put(at.getTemplatecode(), new String[]{ "content", "eduDay", "eduRegDay", "eduPlace" });
break;
case "TEMPLATE_CERT_NO": // 교육신청
at.setTemplatecode("bizp_2025120212451011178763650");
content =
"[한국지식재산보호원]\r\n"
+ "전송된 인증번호를 입력해 주세요.\r\n"
+ "\r\n"
+ "인증번호 : #{certNo}";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{ "certNo"});
break; break;
} }
String[] placeholders = requiredPlaceholders.get(at.getTemplatecode()); String[] placeholders = requiredPlaceholders.get(at.getTemplatecode());
if (placeholders != null) { if(placeholders != null) {
for (String placeholder : placeholders) { for(String placeholder : placeholders) {
String value = chihwan.get(placeholder); String value = chihwan.get(placeholder);
if (value == null || value.isEmpty()) { if(value == null || value.isEmpty()) {
throw new IllegalArgumentException(placeholder + " 값이 없습니다."); throw new IllegalArgumentException(placeholder + " 값이 없습니다.");
} }
content = content.replace("#{" + placeholder + "}", value); content = content.replace("#{" + placeholder + "}", value);

View File

@ -69,13 +69,13 @@ Globals.Innorix.FilePath=/usr/local/tomcat/file/sht/
# =========================== # ===========================
# Siren24 \uC778\uC99D \uAD00\uB828 \uC124\uC815 # Siren24 \uC778\uC99D \uAD00\uB828 \uC124\uC815
# =========================== # ===========================
globals.certPhone.retUrl=https://dev-ipedu.iten.co.kr/ipedu/ globals.certPhone.retUrl=https://www.koipa.re.kr/ipedu/
globals.certPhone.cryptoUrl=https://sciapi.siren24.com:52099/authentication/api/v1.0/common/crypto/token globals.certPhone.cryptoUrl=https://sciapi.siren24.com:52099/authentication/api/v1.0/common/crypto/token
globals.certPhone.reqNo=koipa_edu globals.certPhone.reqNo=koipa_edu
globals.certPhone.id=SKIP001 globals.certPhone.id=SKIP001
globals.certPhone.clientId=5a2a72e2-16ce-420c-8816-57b3dda0e231 globals.certPhone.clientId=5a2a72e2-16ce-420c-8816-57b3dda0e231
#globals.certPhone.srvNo=001003 #globals.certPhone.srvNo=001003
globals.certPhone.srvNo=002002 globals.certPhone.srvNo=003002
globals.certPhone.accessToken=994b5d96-3788-4239-a5b0-a0ba2e0cf089 globals.certPhone.accessToken=994b5d96-3788-4239-a5b0-a0ba2e0cf089
globals.certPhone.stosUrl=https://pcc.siren24.com/servlet/StoS globals.certPhone.stosUrl=https://pcc.siren24.com/servlet/StoS

View File

@ -6,6 +6,8 @@
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/> <typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="sendAtVO" type="kcc.ve.cmm.sendAt.SendAtVO"/> <typeAlias alias="sendAtVO" type="kcc.ve.cmm.sendAt.SendAtVO"/>
<typeAlias alias="sendSmsVO" type="kcc.ve.cmm.sendAt.SendSmsVO"/> <typeAlias alias="sendSmsVO" type="kcc.ve.cmm.sendAt.SendSmsVO"/>
<typeAlias alias="vEPrcsDetailVO" type="kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO"/>
<select id="sendDAO.selectToken" resultClass="sendAtVO"> <select id="sendDAO.selectToken" resultClass="sendAtVO">
SELECT SELECT
@ -27,126 +29,61 @@
</update> </update>
<!--<select id="sendDAO.selectTEMPLATE_APP_BAEJUNG" parameterClass="egovMap" resultClass="egovMap"> <select id="sendDAO.select7DaybeforeAt" parameterClass="java.lang.Integer" resultClass="vEPrcsDetailVO">
SELECT
LISTAGG(A.RESPONDENT_COMPANY, ',') WITHIN GROUP (ORDER BY A.RESPONDENT_COMPANY) AS RESPONDENT_COMPANY, SELECT COUNT(1) OVER () AS totCnt,
A.CASE_NO AS CASE_NO, a.prcs_aplct_prd_ord AS prcsAplctPrdOrd,
B.RCEPT_NO AS RCEPT_NO, a.lctr_div_cd AS lctrDivCd,
CASE TO_CHAR(C.MEMBER_DEPT) a.strt_pnttm AS strtPnttm,
WHEN '1001000000' THEN a.end_pnttm AS endPnttm,
'한국공정거래조정원' a.use_yn AS useYn,
WHEN '1002000000' THEN TO_CHAR(a.frst_regist_pnttm, 'YYYY-MM-DD') AS frstRegistPnttm,
'운영지원팀' a.frst_register_id AS frstRegisterId,
WHEN '1003000000' THEN TO_CHAR(a.last_updt_pnttm, 'YYYY-MM-DD') AS lastUpdtPnttm,
'분쟁조정실' a.last_updusr_id AS lastUpdusrId,
WHEN '1004000000' THEN a.anncm_cn AS anncmCn,
'공정약관1팀' a.popup_cn AS popupCn,
WHEN '1005000000' THEN a.atch_file_id AS atchFileId,
'가맹대리점유통팀' a.title AS title,
WHEN '1006000000' THEN (SELECT user_nm
'건설하도급팀' FROM comvnusermaster
WHEN '1007000000' THEN WHERE esntl_id = a.frst_register_id
'제조하도급팀' LIMIT 1) AS frstRegisterNm,
WHEN '1008000000' THEN (SELECT orignl_file_nm
'약관1팀' FROM lettnfiledetail
WHEN '1009000000' THEN WHERE atch_file_id = a.atch_file_id
'대리점팀' LIMIT 1) AS atchFileNm,
WHEN '1010000000' THEN b.prcs_nm as prcsNm,
'민원상담센터' b.prcs_div as prcsDiv,
WHEN '1020000000' THEN a.edu_place as eduPlace,
'관리팀' a.qustnr_strt_pnttm AS qustnrStrtPnttm,
WHEN '1030000000' THEN a.qustnr_tm AS qustnrTm,
'유통팀' a.dead_line_dt AS deadLineDt,
WHEN '1040000000' THEN a.prcs_ord AS prcsOrd,
'플랫폼1팀' a.edu_part_cd AS eduPartCd,
WHEN '1041000000' THEN a.nos AS nos,
'약관2팀' a.ddln_cd AS ddlnCd,
WHEN '1042000000' THEN a.edu_strt_pnttm AS eduStrtPnttm,
'플랫폼2팀' a.edu_ddln_pnttm AS eduDdlnPnttm,
WHEN '1043000000' THEN a.prcs_cn AS prcsCn,
'공정약관2팀' b.prcs_cn AS prcsCnTwo,
ELSE '' AS lctrPlanRsltAtchFileId,
'기타' a.prvt_memo_cn AS prvtMemoCn,
END AS MEMBER_DEPT, a.cn_atch_file_id AS cnAtchFileId,
C.MEMBER_NAME AS MEMBER_NAME, phone_agg.phone_list AS phone
C.MEMBER_TEL AS MEMBER_TEL, FROM ve_prcs_aplct_prd a
C.MEMBER_EMAIL1 JOIN ve_prcs b
|| '@' ON a.prcs_ord = b.prcs_ord
|| C.MEMBER_EMAIL2 AS MEMBER_EMAIL, LEFT outer JOIN (SELECT e.prcs_ord,
D.CONFERENCE_NAMES string_agg(e.phone, ',' ORDER BY e.phone) AS phone_list
FROM FROM ve_edu_aplct e
C_CASERESPONDENT A WHERE 1 = 1
LEFT OUTER JOIN C_MASTER B AND e.sbmt_yn = 'Y'
ON A.CASE_NO = B.CASE_NO AND e.use_yn = 'Y'
LEFT OUTER JOIN T_MEMBER C GROUP BY e.prcs_ord) phone_agg
ON B.CASE_EXAMINER = C.MEMBER_ID ON phone_agg.prcs_ord = a.prcs_aplct_prd_ord
LEFT OUTER JOIN ( WHERE 1 = 1
SELECT AND to_date(a.strt_pnttm, 'YYYY.MM.DD') = current_date + #diffDay#
A.CFRNC_NO,
A.CONFERENCE_NAMES, B.CASE_NO
FROM
C_CFRNCMANAGE A
INNER JOIN (
SELECT
AA.CFRNC_NO,
AA.CASE_NO
FROM
(
SELECT
A.CFRNC_NO,
A.CASE_NO
FROM
C_ENDMTR A
UNION
ALL
SELECT
B.CFRNC_NO,
B.CASE_NO
FROM
C_DLBRTMTR B
UNION
ALL
SELECT
C.CFRNC_NO,
C.CASE_NO
FROM
C_ENDJOSU C
) AA
) B
ON A.CFRNC_NO = B.CFRNC_NO
) D
ON D.CASE_NO = A.CASE_NO
WHERE
A.CASE_NO = #caseNo#
GROUP BY
A.CASE_NO,
B.RCEPT_NO,
C.MEMBER_DEPT,
C.MEMBER_NAME,
C.MEMBER_TEL,
C.MEMBER_EMAIL1,
C.MEMBER_EMAIL2,
D.CONFERENCE_NAMES
</select> </select>
<select id="sendDAO.selectTEMPLATE_BOTH_CHULSUK" parameterClass="egovMap" resultClass="egovMap">
SELECT
A.SEQ_NO AS SEQ_NO,
A.TEL AS TEL
FROM
C_CASEAPPLCNT A
WHERE
A.CASE_NO = #caseNo#
UNION
ALL
SELECT
B.SEQ_NO AS SEQ_NO,
B.TEL AS TEL
FROM
C_CASERESPONDENT B
WHERE
B.CASE_NO = #caseNo#
</select>-->
</sqlMap> </sqlMap>

View File

@ -0,0 +1,106 @@
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ve" uri="/WEB-INF/tlds/kcc_tld.tld" %>
<html lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
$(document).ready(function () {
});
function smsSend() {
var to = $('#to').val().trim().replaceAll('-', '');
var smsContent = $('#smsContent').val();
$.ajax({
type: "POST",
url: "<c:url value='/cmm/sendAt/smsSendAjax.do' />",
data: {
"to": to,
"smsContent": smsContent
},
dataType: 'json',
success: function (returnData, status) {
if (status == "success") {
alert("문자메시지가 전송되었습니다.");
} else {
alert("ERROR!");
return;
}
},
error: function (request, status, error) {
alert("code:" + request.status + "\n" + "message:" + request.responseText + "\n" + "error:" + error);
}
});
}
</script>
<title>문자발송</title>
</head>
<body>
<form id="listForm" name="listForm" action="">
<div class="cont_wrap">
<div class="box">
<c:import url="/cmm/navi/adminContNav.do">
<c:param name="url" value="/cmm/sendAt/smsSend.do"/>
<c:param name="name1" value=""/>
<c:param name="name2" value=""/>
<c:param name="name3" value=""/>
</c:import>
<div class="cont">
<!-- list_top -->
<div class="list_top">
<div class="list_top_1">
<div class="util_left">
<p>문자메시지</p>
</div>
</div>
</div>
<!-- //list_top -->
<div class="tbType02">
<table>
<colgroup>
<col style="width: 20%">
<col style="width: 80%">
</colgroup>
<tbody>
<tr>
<th><span class="reqArea">수신번호</span></th>
<td>
<input type="text" name="to" id="to"/>
</td>
</tr>
<tr>
<th><span class="reqArea">내용</span></th>
<td>
<textarea name="smsContent" id="smsContent" cols="30" rows="10"></textarea>
</td>
</tr>
</tbody>
</table>
</div>
<div class="btn_wrap btn_layout01">
<div class="area_left">
</div>
<div class="area_right">
<button type="button" class="btnType02" onclick="smsSend(); return false;">등록
</button>
</div>
</div>
</div>
</div>
</div>
</form>
</body>
</html>

View File

@ -189,7 +189,7 @@ function certPhone() {
<option value="박길동:01055551111:W:19991124:GwekrDfuErjWrj/DSjfsduerlkrkjweR+DJfisdfioueklrjiJeudsdWErQWERasdvDASgfeRTdsioufiuERwe==">박길동:01055551111:W:19991124</option> <option value="박길동:01055551111:W:19991124:GwekrDfuErjWrj/DSjfsduerlkrkjweR+DJfisdfioueklrjiJeudsdWErQWERasdvDASgfeRTdsioufiuERwe==">박길동:01055551111:W:19991124</option>
<option value="이준호:01030266269:M:19890202:HwekrDfuErjWrj/DSjfsduerlkrkjweR+DJfisdfioueklrjiJeudsdWErQWERasdvDASgfeRTdsioufiuERwe==">이준호:01030266269:M:19890202</option> <option value="이준호:01030266269:M:19890202:HwekrDfuErjWrj/DSjfsduerlkrkjweR+DJfisdfioueklrjiJeudsdWErQWERasdvDASgfeRTdsioufiuERwe==">이준호:01030266269:M:19890202</option>
</select> </select>
</div>4 </div>
</c:if> </c:if>
</div> </div>
</form:form> </form:form>

View File

@ -140,7 +140,7 @@
$("#jender_input").prop('readonly', true); $("#jender_input").prop('readonly', true);
$("#clphone").prop('readonly', true); $("#clphone").prop('readonly', true);
$(".duet-date__toggle").remove(); $(".duet-date__toggle").remove();
alert(returnData.crtfdNumber); // alert(returnData.crtfdNumber);
}else{ //본인인증 후 }else{ //본인인증 후

View File

@ -142,7 +142,7 @@
$("#jender_input").prop('readonly', true); $("#jender_input").prop('readonly', true);
$("#clphone").prop('readonly', true); $("#clphone").prop('readonly', true);
$(".duet-date__toggle").remove(); $(".duet-date__toggle").remove();
alert(returnData.crtfdNumber); // alert(returnData.crtfdNumber);
}else{ //본인인증 후 }else{ //본인인증 후

View File

@ -140,7 +140,7 @@
$("#jender_input").prop('readonly', true); $("#jender_input").prop('readonly', true);
$("#clphone").prop('readonly', true); $("#clphone").prop('readonly', true);
$(".duet-date__toggle").remove(); $(".duet-date__toggle").remove();
alert(returnData.crtfdNumber); // alert(returnData.crtfdNumber);
}else{ //본인인증 후 }else{ //본인인증 후