Merge branch 'master_tolag3'

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

View File

@ -1,10 +1,12 @@
package kcc.ve.aplct.cmdTrgt.service.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import kcc.ve.cmm.sendAt.SendService;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@ -54,6 +56,9 @@ public class CmdTrgtServiceImpl implements CmdTrgtService {
// 교육신청발송이력
@Resource(name = "vEEduAplctSndHstryService")
private VEEduAplctSndHstryService vEEduAplctSndHstryService;
@Resource(name = "SendService")
private SendService sendService;
@Override
public void insertVeEduAplct(VEEduAplctVO paramVO) {
@ -236,6 +241,11 @@ public class CmdTrgtServiceImpl implements CmdTrgtService {
vEEduAplctVO.setClphone(cmdTrgtMngVO.getClphone());
vEEduAplctVO.setSndFlag("B");
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"))){
//발송 로그

View File

@ -3,12 +3,15 @@ package kcc.ve.aplct.cmdTrgt.web;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -186,6 +189,12 @@ public class CmdTrgtController {
//알림
@Resource(name = "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
@ -740,6 +749,11 @@ public class CmdTrgtController {
}
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) {
// TODO: handle exception
}

View File

@ -1,10 +1,12 @@
package kcc.ve.aplct.prevent.service.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import kcc.ve.cmm.sendAt.SendService;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@ -54,6 +56,9 @@ public class PreventServiceImpl implements PreventService {
// 교육신청발송이력
@Resource(name = "vEEduAplctSndHstryService")
private VEEduAplctSndHstryService vEEduAplctSndHstryService;
@Resource(name = "SendService")
private SendService sendService;
@Override
public void insertVeEduAplct(VEEduAplctVO paramVO) {
@ -232,6 +237,11 @@ public class PreventServiceImpl implements PreventService {
vEEduAplctVO.setClphone(cmdTrgtMngVO.getClphone());
vEEduAplctVO.setSndFlag("B");
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"))){
//발송 로그

View File

@ -9,6 +9,8 @@ import java.util.Map;
import javax.annotation.Resource;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -185,6 +187,12 @@ public class PreventController {
//알림
@Resource(name = "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
@ -739,6 +747,10 @@ public class PreventController {
}
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) {
// TODO: handle exception
}

View File

@ -1,10 +1,12 @@
package kcc.ve.aplct.sspnIdtmt.service.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import kcc.ve.cmm.sendAt.SendService;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@ -55,6 +57,9 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService {
// 교육신청발송이력
@Resource(name = "vEEduAplctSndHstryService")
private VEEduAplctSndHstryService vEEduAplctSndHstryService;
@Resource(name = "SendService")
private SendService sendService;
@Override
public void insertVeEduAplct(VEEduAplctVO paramVO) {
@ -293,6 +298,11 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService {
vEEduAplctVO.setClphone(cndtnTrgtInfoMngVO.getClphone());
vEEduAplctVO.setSndFlag("B");
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"))){
//발송 로그

View File

@ -9,6 +9,8 @@ import java.util.Map;
import javax.annotation.Resource;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -178,6 +180,12 @@ public class SspnIdtmtController {
//알림
@Resource(name = "iTNotiUtil")
private ITNotiUtil iTNotiUtil;
@Resource(name = "sendAtUtill")
private SendAtUtill sendAtUtill;
@Resource(name = "SendService")
private SendService sendService;
private String p_lctr_div_cd = "60";
@ -730,6 +738,10 @@ public class SspnIdtmtController {
}
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) {
// 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;
import java.io.Serializable;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
import java.util.Map;
/**
* @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
@Setter
@NoArgsConstructor
@ -56,6 +28,8 @@ public class SendAtVO implements Serializable {
private String from;
private String to;
private Content content;
private Resend resend;
private Recontent recontent;
@JsonIgnore
private Map<String, String> chihwan;
@ -85,7 +59,7 @@ public class SendAtVO implements Serializable {
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class resend {
public static class Resend {
private String first;
}
@ -94,7 +68,7 @@ public class SendAtVO implements Serializable {
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class recontent {
public static class Recontent {
private Lms lms;
@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;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import java.util.List;
import java.util.Map;
@ -46,4 +47,6 @@ public interface SendService {
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;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import kcc.com.cmm.service.impl.EgovComAbstractDAO;
import kcc.ve.cmm.sendAt.SendAtVO;
import kcc.ve.cmm.sendAt.SendSmsVO;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import org.springframework.stereotype.Repository;
import java.util.List;
@ -27,4 +27,9 @@ public class SendDAO extends EgovComAbstractDAO {
public void updateSendSet(SendSmsVO sendSmsVO) throws Exception{
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 kcc.ve.cmm.sendAt.SendAtVO.Content;
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.SendAtVO;
import kcc.ve.cmm.sendAt.SendService;
import kcc.ve.cmm.sendAt.SendSmsVO;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
import org.apache.commons.beanutils.BeanUtils;
import org.json.JSONObject;
import org.springframework.stereotype.Service;
@ -18,10 +22,7 @@ import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
@ -33,70 +34,69 @@ import java.util.*;
@Service("SendService")
public class SendServiceImpl extends EgovAbstractServiceImpl implements SendService {
@Resource(name="sendDAO")
@Resource(name = "sendDAO")
private SendDAO sendDAO;
@Override
public void sendAt(
String to
, String templateCode
, Map<String, String> chihwan
) throws Exception{
String to
, String templateCode
, Map<String, String> chihwan
) throws Exception {
SendAtVO vo = new SendAtVO();
vo = sendDAO.selectToken();
//이전 발급 토큰이 만료되었는지 시간비교
if(timeDiffBefore(vo.getExpired())) {
//토큰 발급
if(this.getPpurioToken(vo)) {
//토큰 갱신
sendDAO.updateToken(vo);
}else {
} else {
System.out.println("토큰 갱신 실패");
throw new Exception();
}
}
vo = vo.builder()
.accesstoken(vo.getAccesstoken())
.expired(vo.getExpired())
.refkey("test1234")
.type(vo.getType())
.to(to)
.content(Content.builder()
.at(SendAtVO.Content.At.builder()
.templatecode(templateCode)
.build()
)
.build()
)
.chihwan(chihwan)
.accesstoken(vo.getAccesstoken())
.expired(vo.getExpired())
.refkey("test1234")
.type(vo.getType())
.to(to)
.content(Content.builder()
.at(At.builder()
.templatecode(templateCode)
.build()
)
.build()
;
)
.chihwan(chihwan)
.build();
this.sendAt(vo);
}
@Override
public Map<String, Object> sendSms(
String to
, String subject
, String smsContent
, String type
) throws Exception{
public Map<String, Object> sendSms(
String to
, String subject
, String smsContent
, String type
) throws Exception {
Boolean success = true;
int successCnt = 0;
SendAtVO vo = new SendAtVO();
vo = sendDAO.selectToken();
//이전 발급 토큰이 만료되었는지 시간비교
if(timeDiffBefore(vo.getExpired())) {
//토큰 발급
if(this.getPpurioToken(vo)) {
//토큰 갱신
sendDAO.updateToken(vo);
}else {
} else {
System.out.println("토큰 갱신 실패");
throw new Exception();
}
@ -106,63 +106,69 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
smsVO.setSubject(subject);
smsVO.setSmsContent(smsContent);
smsVO.setType(type);
String[] phoneNums = to.split(",");
for(String phone : phoneNums) {
smsVO.setTo(phone);
boolean result = this.sendSmsPrcs(smsVO);
if(result) {
successCnt++;
}else {
} else {
success = false;
System.out.println("문자 발송 실패: " + phone);
}
}
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("success" , success);
resultMap.put("successCnt" , successCnt);
resultMap.put("success", success);
resultMap.put("successCnt", successCnt);
return resultMap;
}
@Override
public SendSmsVO selectSendSet() throws Exception{
public SendSmsVO selectSendSet() throws Exception {
return sendDAO.selectSendSet();
}
@Override
public void updateSendSet(SendSmsVO sendSmsVO) throws Exception{
public void updateSendSet( SendSmsVO sendSmsVO ) throws Exception {
sendDAO.updateSendSet(sendSmsVO);
}
/**
* @methodName : timeDiffBefore
* @author : JunHo Lee
* @date : 2024.12.09
* @description :
* @param str
* @return :
* !str이 현재 시간보다 이전이면 true
* !str이 현재 시간보다 이후이면 false
*/
private Boolean timeDiffBefore(String str) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date diffDate = sdf.parse(str);
Date currentDate = new Date();
if (diffDate.before(currentDate)) {
return true;
} else {
return false;
}
} catch (Exception e) {
return false;
}
@Override
public List<VEPrcsDetailVO> select7DaybeforeAt(Integer diffDay) throws Exception{
return sendDAO.select7DaybeforeAt(diffDay);
}
public static String sendAt(SendAtVO sendAtVO) {
/**
* @param str
* @return :
* !str이 현재 시간보다 이전이면 true
* !str이 현재 시간보다 이후이면 false
* @methodName : timeDiffBefore
* @author : JunHo Lee
* @date : 2024.12.09
* @description :
*/
private Boolean timeDiffBefore( String str ) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date diffDate = sdf.parse(str);
Date currentDate = new Date();
if(diffDate.before(currentDate)) {
return true;
} else {
return false;
}
} catch(Exception e) {
return false;
}
}
public static String sendAt( SendAtVO sendAtVO ) {
StringBuffer result = new StringBuffer();
@ -173,10 +179,17 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
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) { } } };
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());
@ -207,42 +220,49 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
.from(ppurioGlobalSet.getFrom())
.to(sendAtVO.getTo())
.content(Content.builder()
.at(At.builder()
.senderkey(ppurioGlobalSet.getSenderKey())
.templatecode(at.getTemplatecode())
.message(at.getMessage())
.build()
)
.build()
.at(At.builder()
.senderkey(ppurioGlobalSet.getSenderKey())
.templatecode(at.getTemplatecode())
.message(at.getMessage())
.build()
)
.build())
.resend(Resend.builder()
.first("lms")
.build())
.recontent(Recontent.builder()
.lms(Lms.builder()
.message(at.getMessage())
.build())
.build())
.build();
// Request body 전송
try (OutputStream os = connection.getOutputStream()) {
os.write(sendAtVO.toJson().getBytes("UTF-8"));
os.flush();
}
try(OutputStream os = connection.getOutputStream()) {
os.write(sendAtVO.toJson().getBytes("UTF-8"));
os.flush();
}
// 서버 응답 처리
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
while ((input = reader.readLine()) != null) {
result.append(input);
}
}
} else {
// 오류 응답 처리
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
StringBuilder errorResponse = new StringBuilder();
while ((input = reader.readLine()) != null) {
errorResponse.append(input);
}
System.out.println("Error Response: " + errorResponse.toString());
return "Error: " + errorResponse.toString();
}
}
connection.disconnect();
// 서버 응답 처리
int responseCode = connection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK) {
try(BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
while((input = reader.readLine()) != null) {
result.append(input);
}
}
} else {
// 오류 응답 처리
try(BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
StringBuilder errorResponse = new StringBuilder();
while((input = reader.readLine()) != null) {
errorResponse.append(input);
}
System.out.println("Error Response: " + errorResponse.toString());
return "Error: " + errorResponse.toString();
}
}
connection.disconnect();
System.out.println("Response : " + result.toString());
@ -250,21 +270,21 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
// status = jObject.getString("description");
} catch (IOException e) {
// TODO Auto-generated catch block
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
} catch(KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
} catch(NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
// return status;
}
public static Boolean sendSmsPrcs(SendSmsVO sendSmsVO) {
public static Boolean sendSmsPrcs( SendSmsVO sendSmsVO ) {
Boolean success = true;
@ -278,10 +298,17 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
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) { } } };
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());
@ -302,54 +329,54 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
/*SMS LMS 구분처리*/
JSONObject sms = new JSONObject();
sms.put("message", sendSmsVO.getSmsContent());
if("LMS".equals(sendSmsVO.getType())) {
sms.put("subject", sendSmsVO.getSubject());
}
JSONObject content = new JSONObject();
if("SMS".equals(sendSmsVO.getType())) {
content.put("sms", sms);
}else {
content.put("lms", sms);
}
sms.put("message", sendSmsVO.getSmsContent());
if("LMS".equals(sendSmsVO.getType())) {
sms.put("subject", sendSmsVO.getSubject());
}
JSONObject content = new JSONObject();
if("SMS".equals(sendSmsVO.getType())) {
content.put("sms", sms);
} else {
content.put("lms", sms);
}
JSONObject json = new JSONObject();
json.put("account", ppurioGlobalSet.getId());
json.put("type", sendSmsVO.getType().toLowerCase());
json.put("from", ppurioGlobalSet.getFrom());
json.put("to", sendSmsVO.getTo());
json.put("content", content);
json.put("refkey", "test1234");
JSONObject json = new JSONObject();
json.put("account", ppurioGlobalSet.getId());
json.put("type", sendSmsVO.getType().toLowerCase());
json.put("from", ppurioGlobalSet.getFrom());
json.put("to", sendSmsVO.getTo());
json.put("content", content);
json.put("refkey", "test1234");
String body = json.toString();
String body = json.toString();
// Request body 전송
try (OutputStream os = connection.getOutputStream()) {
os.write(body.getBytes("UTF-8"));
os.flush();
}
try(OutputStream os = connection.getOutputStream()) {
os.write(body.getBytes("UTF-8"));
os.flush();
}
// 서버 응답 처리
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
while ((input = reader.readLine()) != null) {
result.append(input);
}
}
} else {
// 오류 응답 처리
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
StringBuilder errorResponse = new StringBuilder();
while ((input = reader.readLine()) != null) {
errorResponse.append(input);
}
System.out.println("Error Response: " + errorResponse.toString());
success = false;
//return "Error: " + errorResponse.toString();
}
}
connection.disconnect();
// 서버 응답 처리
int responseCode = connection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK) {
try(BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
while((input = reader.readLine()) != null) {
result.append(input);
}
}
} else {
// 오류 응답 처리
try(BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
StringBuilder errorResponse = new StringBuilder();
while((input = reader.readLine()) != null) {
errorResponse.append(input);
}
System.out.println("Error Response: " + errorResponse.toString());
success = false;
//return "Error: " + errorResponse.toString();
}
}
connection.disconnect();
System.out.println("Response : " + result.toString());
@ -357,16 +384,16 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
// status = jObject.getString("description");
} catch (IOException e) {
// TODO Auto-generated catch block
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
success = false;
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
} catch(KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
success = false;
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
} catch(NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
success = false;
}
@ -374,7 +401,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
// return status;
}
public static Boolean getPpurioToken(SendAtVO sendAtVO) {
public static Boolean getPpurioToken( SendAtVO sendAtVO ) {
StringBuffer result = new StringBuffer();
@ -383,13 +410,19 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
PpurioGlobalSet ppurioGlobalSet = new PpurioGlobalSet();
try {
System.out.println("test");
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
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) { } } };
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());
@ -421,40 +454,40 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
/** Response **/
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
while ((input = in.readLine()) != null) {
while((input = in.readLine()) != null) {
result.append(input);
}
connection.disconnect();
if (result.length() > 0) {
JSONObject jObject = new JSONObject(result.toString());
if (
jObject.has("accesstoken")
&& !jObject.isNull("accesstoken")
&& jObject.has("type")
&& !jObject.isNull("type")
&& jObject.has("expired")
&& !jObject.isNull("expired")
) {
sendAtVO.setAccesstoken(jObject.getString("accesstoken"));
sendAtVO.setType(jObject.getString("type"));
sendAtVO.setExpired(jObject.getString("expired"));
} else {
System.out.println("response data not found or is null");
return false;
}
} else {
System.out.println("Empty response");
return false;
}
if(result.length() > 0) {
JSONObject jObject = new JSONObject(result.toString());
if(
jObject.has("accesstoken")
&& !jObject.isNull("accesstoken")
&& jObject.has("type")
&& !jObject.isNull("type")
&& jObject.has("expired")
&& !jObject.isNull("expired")
) {
sendAtVO.setAccesstoken(jObject.getString("accesstoken"));
sendAtVO.setType(jObject.getString("type"));
sendAtVO.setExpired(jObject.getString("expired"));
} else {
System.out.println("response data not found or is null");
return false;
}
} else {
System.out.println("Empty response");
return false;
}
} catch (IOException e) {
} catch(IOException e) {
System.out.println(e.getMessage());
return false;
} catch (KeyManagementException e) {
} catch(KeyManagementException e) {
System.out.println(e.getMessage());
return false;
} catch (NoSuchAlgorithmException e) {
} catch(NoSuchAlgorithmException e) {
System.out.println(e.getMessage());
return false;
}
@ -462,52 +495,16 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
}
private static At messageSet(
At at,
Map<String, String> chihwan
) {
At at,
Map<String, String> chihwan
) {
String content = "";
Map<String, String[]> requiredPlaceholders = new HashMap<>();
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;*/
switch(at.getTemplatecode()) {
case "TEMPLATE_EDU_SUBMIT": // 교육신청
at.setTemplatecode("bizp_2025112512494050432369880");
content =
at.setTemplatecode("bizp_2025112512494050432369880");
content =
"[한국지식재산보호원]\r\n"
+ "#{content}\r\n"
+ "\r\n"
@ -521,16 +518,25 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
+ "3.준비물 : 필기구, 실물신분증\r\n"
+ "\r\n"
+ "문의처:1670-1271";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"content", "eduDay", "eduRegDay", "eduPlace"});
break;
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;
}
String[] placeholders = requiredPlaceholders.get(at.getTemplatecode());
if (placeholders != null) {
for (String placeholder : placeholders) {
if(placeholders != null) {
for(String placeholder : placeholders) {
String value = chihwan.get(placeholder);
if (value == null || value.isEmpty()) {
throw new IllegalArgumentException(placeholder + " 값이 없습니다.");
if(value == null || value.isEmpty()) {
throw new IllegalArgumentException(placeholder + " 값이 없습니다.");
}
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
# ===========================
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.reqNo=koipa_edu
globals.certPhone.id=SKIP001
globals.certPhone.clientId=5a2a72e2-16ce-420c-8816-57b3dda0e231
#globals.certPhone.srvNo=001003
globals.certPhone.srvNo=002002
globals.certPhone.srvNo=003002
globals.certPhone.accessToken=994b5d96-3788-4239-a5b0-a0ba2e0cf089
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="sendAtVO" type="kcc.ve.cmm.sendAt.SendAtVO"/>
<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
@ -27,126 +29,61 @@
</update>
<!--<select id="sendDAO.selectTEMPLATE_APP_BAEJUNG" parameterClass="egovMap" resultClass="egovMap">
SELECT
LISTAGG(A.RESPONDENT_COMPANY, ',') WITHIN GROUP (ORDER BY A.RESPONDENT_COMPANY) AS RESPONDENT_COMPANY,
A.CASE_NO AS CASE_NO,
B.RCEPT_NO AS RCEPT_NO,
CASE TO_CHAR(C.MEMBER_DEPT)
WHEN '1001000000' THEN
'한국공정거래조정원'
WHEN '1002000000' THEN
'운영지원팀'
WHEN '1003000000' THEN
'분쟁조정실'
WHEN '1004000000' THEN
'공정약관1팀'
WHEN '1005000000' THEN
'가맹대리점유통팀'
WHEN '1006000000' THEN
'건설하도급팀'
WHEN '1007000000' THEN
'제조하도급팀'
WHEN '1008000000' THEN
'약관1팀'
WHEN '1009000000' THEN
'대리점팀'
WHEN '1010000000' THEN
'민원상담센터'
WHEN '1020000000' THEN
'관리팀'
WHEN '1030000000' THEN
'유통팀'
WHEN '1040000000' THEN
'플랫폼1팀'
WHEN '1041000000' THEN
'약관2팀'
WHEN '1042000000' THEN
'플랫폼2팀'
WHEN '1043000000' THEN
'공정약관2팀'
ELSE
'기타'
END AS MEMBER_DEPT,
C.MEMBER_NAME AS MEMBER_NAME,
C.MEMBER_TEL AS MEMBER_TEL,
C.MEMBER_EMAIL1
|| '@'
|| C.MEMBER_EMAIL2 AS MEMBER_EMAIL,
D.CONFERENCE_NAMES
FROM
C_CASERESPONDENT A
LEFT OUTER JOIN C_MASTER B
ON A.CASE_NO = B.CASE_NO
LEFT OUTER JOIN T_MEMBER C
ON B.CASE_EXAMINER = C.MEMBER_ID
LEFT OUTER JOIN (
SELECT
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 id="sendDAO.select7DaybeforeAt" parameterClass="java.lang.Integer" resultClass="vEPrcsDetailVO">
SELECT COUNT(1) OVER () AS totCnt,
a.prcs_aplct_prd_ord AS prcsAplctPrdOrd,
a.lctr_div_cd AS lctrDivCd,
a.strt_pnttm AS strtPnttm,
a.end_pnttm AS endPnttm,
a.use_yn AS useYn,
TO_CHAR(a.frst_regist_pnttm, 'YYYY-MM-DD') AS frstRegistPnttm,
a.frst_register_id AS frstRegisterId,
TO_CHAR(a.last_updt_pnttm, 'YYYY-MM-DD') AS lastUpdtPnttm,
a.last_updusr_id AS lastUpdusrId,
a.anncm_cn AS anncmCn,
a.popup_cn AS popupCn,
a.atch_file_id AS atchFileId,
a.title AS title,
(SELECT user_nm
FROM comvnusermaster
WHERE esntl_id = a.frst_register_id
LIMIT 1) AS frstRegisterNm,
(SELECT orignl_file_nm
FROM lettnfiledetail
WHERE atch_file_id = a.atch_file_id
LIMIT 1) AS atchFileNm,
b.prcs_nm as prcsNm,
b.prcs_div as prcsDiv,
a.edu_place as eduPlace,
a.qustnr_strt_pnttm AS qustnrStrtPnttm,
a.qustnr_tm AS qustnrTm,
a.dead_line_dt AS deadLineDt,
a.prcs_ord AS prcsOrd,
a.edu_part_cd AS eduPartCd,
a.nos AS nos,
a.ddln_cd AS ddlnCd,
a.edu_strt_pnttm AS eduStrtPnttm,
a.edu_ddln_pnttm AS eduDdlnPnttm,
a.prcs_cn AS prcsCn,
b.prcs_cn AS prcsCnTwo,
'' AS lctrPlanRsltAtchFileId,
a.prvt_memo_cn AS prvtMemoCn,
a.cn_atch_file_id AS cnAtchFileId,
phone_agg.phone_list AS phone
FROM ve_prcs_aplct_prd a
JOIN ve_prcs b
ON a.prcs_ord = b.prcs_ord
LEFT outer JOIN (SELECT e.prcs_ord,
string_agg(e.phone, ',' ORDER BY e.phone) AS phone_list
FROM ve_edu_aplct e
WHERE 1 = 1
AND e.sbmt_yn = 'Y'
AND e.use_yn = 'Y'
GROUP BY e.prcs_ord) phone_agg
ON phone_agg.prcs_ord = a.prcs_aplct_prd_ord
WHERE 1 = 1
AND to_date(a.strt_pnttm, 'YYYY.MM.DD') = current_date + #diffDay#
</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>

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="이준호:01030266269:M:19890202:HwekrDfuErjWrj/DSjfsduerlkrkjweR+DJfisdfioueklrjiJeudsdWErQWERasdvDASgfeRTdsioufiuERwe==">이준호:01030266269:M:19890202</option>
</select>
</div>4
</div>
</c:if>
</div>
</form:form>

View File

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

View File

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

View File

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