메일전송 문자전송 기능 추가

This commit is contained in:
name 2023-09-14 12:26:42 +09:00
parent c542e0e2cd
commit af074c1581
14 changed files with 1085 additions and 6 deletions

View File

@ -259,6 +259,57 @@ public class AdjReqMgrVO extends ComDefaultVO implements Serializable{
private String smsSendTypeCd; // 발송유형 - CC052 private String smsSendTypeCd; // 발송유형 - CC052
private String certNum; // 인증번호 private String certNum; // 인증번호
private String[] phoneList; //수신번호 리스트
//저작위 email 발송
/*
* emailTy ( 확인필요 )
* 000 - 관리자발송
* 001 - 보완요청
* 002 - 수수료납부요청
* 003 - 조정접수
* 004 - 기일통지서승인
* 005 - 기일조서 결재완료
* 006 - 조정조서 결재완료
* 007 - 직권조정결정서 확인완료
* 008 - 없음
* 009 - 조정불성립
*
* */
private String[] emailList; // 수신이메일 리스트
private String emailTitle; // 이메일 제목
private String emailContent; // 이메일 내용
private String emailTy; // 이메일 발송 유형
private String emailTo; // 이메일 발송 수신자
private String emailFrom; // 이메일 발송 발신자
public String getEmailTitle() {
return emailTitle;
}
public void setEmailTitle(String emailTitle) {
this.emailTitle = emailTitle;
}
public String getEmailContent() {
return emailContent;
}
public void setEmailContent(String emailContent) {
this.emailContent = emailContent;
}
public String[] getEmailList() {
return emailList;
}
public void setEmailList(String[] emailList) {
this.emailList = emailList;
}
public String[] getPhoneList() {
return phoneList;
}
public void setPhoneList(String[] phoneList) {
this.phoneList = phoneList;
}
public AdjReqMgrVO getAdrVO() { public AdjReqMgrVO getAdrVO() {
return adrVO; return adrVO;
} }
@ -1231,6 +1282,22 @@ public class AdjReqMgrVO extends ComDefaultVO implements Serializable{
public void setCertNum(String certNum) { public void setCertNum(String certNum) {
this.certNum = certNum; this.certNum = certNum;
} }
public String getEmailTy() {
return emailTy;
}
public void setEmailTy(String emailTy) {
this.emailTy = emailTy;
}
public String getEmailTo() {
return emailTo;
}
public void setEmailTo(String emailTo) {
this.emailTo = emailTo;
}
public String getEmailFrom() {
return emailFrom;
}
public void setEmailFrom(String emailFrom) {
this.emailFrom = emailFrom;
}
} }

View File

@ -62,6 +62,10 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM
@Value("#{globalSettings['Globals.SMSDB.TrId']}") @Value("#{globalSettings['Globals.SMSDB.TrId']}")
private String trId; // 시스템 구분자 private String trId; // 시스템 구분자
@Value("#{globalSettings['Globals.prod.islocal']}")
private String islocal; // 시스템 구분자
// SMS전송(SMS전송서버-오라클DB) // SMS전송(SMS전송서버-오라클DB)
@Resource(name = "SMSOracleDAO") @Resource(name = "SMSOracleDAO")
private SMSOracleDAO sMSOracleDAO; private SMSOracleDAO sMSOracleDAO;
@ -703,10 +707,14 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM
int bytes = adjReqMgrVO.getSendMsg().getBytes("euc-kr").length; // 발송메시지 바이트수 int bytes = adjReqMgrVO.getSendMsg().getBytes("euc-kr").length; // 발송메시지 바이트수
if (bytes > 90) { if (bytes > 90) {
sMSOracleDAO.insertMmsCustomSend(adjReqMgrVO); // SMS 등록 장문 > SMS DB(오라클) if(!islocal.equals("local")) {
sMSOracleDAO.insertMmsCustomSend(adjReqMgrVO); // SMS 등록 장문 > SMS DB(오라클)
}
adjReqMgrDAO.insertAdrMmsCustomSend(adjReqMgrVO); // SMS 이력 등록 장문 > 전자조정 adjReqMgrDAO.insertAdrMmsCustomSend(adjReqMgrVO); // SMS 이력 등록 장문 > 전자조정
} else { } else {
sMSOracleDAO.insertSmsCustomSend(adjReqMgrVO); // SMS 등록 단문 > SMS DB(오라클) if(!islocal.equals("local")) {
sMSOracleDAO.insertSmsCustomSend(adjReqMgrVO); // SMS 등록 단문 > SMS DB(오라클)
}
adjReqMgrDAO.insertAdrSmsCustomSend(adjReqMgrVO); // SMS 이력 등록 단문 > 전자조정 adjReqMgrDAO.insertAdrSmsCustomSend(adjReqMgrVO); // SMS 이력 등록 단문 > 전자조정
} }
//sms 발송 관리 테이블에 저장 //sms 발송 관리 테이블에 저장

View File

@ -0,0 +1,82 @@
package kcc.kccadr.msg.service;
import java.io.Serializable;
import kcc.com.cmm.ComDefaultVO;
public class EmailMgrVO extends ComDefaultVO implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String emailSeq; // 이메일 발송 일련번호
private String emailTitle; // 이메일 제목
private String emailContent; // 이메일 내용
private String emailTy; // 이메일 발송 유형
private String emailTo; // 이메일 발송 수신자
private String emailFrom; // 이메일 발송 발신자
private String adrSeq; // 조정일련번호
private String emailSendPnttm; // 이메일 발송일자
private String frstRegistPnttm; // 로그등록일자
public String getEmailSeq() {
return emailSeq;
}
public void setEmailSeq(String emailSeq) {
this.emailSeq = emailSeq;
}
public String getEmailTitle() {
return emailTitle;
}
public void setEmailTitle(String emailTitle) {
this.emailTitle = emailTitle;
}
public String getEmailContent() {
return emailContent;
}
public void setEmailContent(String emailContent) {
this.emailContent = emailContent;
}
public String getEmailTy() {
return emailTy;
}
public void setEmailTy(String emailTy) {
this.emailTy = emailTy;
}
public String getEmailTo() {
return emailTo;
}
public void setEmailTo(String emailTo) {
this.emailTo = emailTo;
}
public String getEmailFrom() {
return emailFrom;
}
public void setEmailFrom(String emailFrom) {
this.emailFrom = emailFrom;
}
public String getAdrSeq() {
return adrSeq;
}
public void setAdrSeq(String adrSeq) {
this.adrSeq = adrSeq;
}
public String getEmailSendPnttm() {
return emailSendPnttm;
}
public void setEmailSendPnttm(String emailSendPnttm) {
this.emailSendPnttm = emailSendPnttm;
}
public String getFrstRegistPnttm() {
return frstRegistPnttm;
}
public void setFrstRegistPnttm(String frstRegistPnttm) {
this.frstRegistPnttm = frstRegistPnttm;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}

View File

@ -2,6 +2,8 @@ package kcc.kccadr.msg.service;
import java.util.List; import java.util.List;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
public interface MsgMgrService { public interface MsgMgrService {
//발송문구 갯수 //발송문구 갯수
@ -27,4 +29,14 @@ public interface MsgMgrService {
//발송문자 리스트 //발송문자 리스트
List<SmsMgrVO> smsMgrList(SmsMgrVO smsMgrVO) throws Exception; List<SmsMgrVO> smsMgrList(SmsMgrVO smsMgrVO) throws Exception;
//발송 email 갯수
int emailMgrListCount(EmailMgrVO emailMgrVO) throws Exception;
// 발송 email 내역 리스트 조회
List<EmailMgrVO> emailMgrList(EmailMgrVO emailMgrVO) throws Exception;
// 발송 email 내역 등록
String insertAdrEmailLog(AdjReqMgrVO adjReqMgrVO) throws Exception;
} }

View File

@ -8,6 +8,7 @@ import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO; import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import egovframework.rte.psl.dataaccess.util.EgovMap; import egovframework.rte.psl.dataaccess.util.EgovMap;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO; import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import kcc.kccadr.msg.service.EmailMgrVO;
import kcc.kccadr.msg.service.MsgMgrVO; import kcc.kccadr.msg.service.MsgMgrVO;
import kcc.kccadr.msg.service.SmsMgrVO; import kcc.kccadr.msg.service.SmsMgrVO;
@ -101,4 +102,20 @@ public class MsgMgrDAO extends EgovAbstractDAO {
update("msgMgrDAO.updateAdrSendType", map); update("msgMgrDAO.updateAdrSendType", map);
} }
//발송문자 갯수
public int emailMgrListCount(EmailMgrVO emailMgrVO) throws Exception{
return (int) select("MsgMgrDAO.emailMgrListCount", emailMgrVO);
}
// 발송 email 내역 리스트 조회
@SuppressWarnings("unchecked")
public List<EmailMgrVO> emailMgrList(EmailMgrVO emailMgrVO) throws Exception{
return (List<EmailMgrVO>) list("MsgMgrDAO.emailMgrList", emailMgrVO);
}
// 발송 email 내역 등록
public void insertAdrEmailLog(AdjReqMgrVO adjReqMgrVO) throws Exception{
insert("MsgMgrDAO.insertAdrEmailLog", adjReqMgrVO);
}
} }

View File

@ -7,6 +7,8 @@ import javax.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import kcc.kccadr.msg.service.EmailMgrVO;
import kcc.kccadr.msg.service.MsgMgrService; import kcc.kccadr.msg.service.MsgMgrService;
import kcc.kccadr.msg.service.MsgMgrVO; import kcc.kccadr.msg.service.MsgMgrVO;
import kcc.kccadr.msg.service.SmsMgrVO; import kcc.kccadr.msg.service.SmsMgrVO;
@ -62,4 +64,43 @@ public class MsgMgrServiceImpl extends EgovAbstractServiceImpl implements MsgMgr
return msgMgrDAO.smsMgrList(smsMgrVO); return msgMgrDAO.smsMgrList(smsMgrVO);
} }
//발송 email 갯수
public int emailMgrListCount(EmailMgrVO emailMgrVO) throws Exception {
return msgMgrDAO.emailMgrListCount(emailMgrVO);
}
// 발송 email 내역 리스트 조회
public List<EmailMgrVO> emailMgrList(EmailMgrVO emailMgrVO) throws Exception {
return msgMgrDAO.emailMgrList(emailMgrVO);
}
// 발송 email 내역 등록
public String insertAdrEmailLog(AdjReqMgrVO adjReqMgrVO) throws Exception {
String result = "fail";
try {
/*추후 확인 필요
* adrSeq ( 확인필요 )
* emailTy ( 확인필요 )
* 000 - 관리자발송
* 001 - 보완요청
* 002 - 수수료납부요청
* 003 - 조정접수
* 004 - 기일통지서승인
* 005 - 기일조서 결재완료
* 006 - 조정조서 결재완료
* 007 - 직권조정결정서 확인완료
* 008 - 없음
* 009 - 조정불성립
*
* */
msgMgrDAO.insertAdrEmailLog(adjReqMgrVO);
result = "SUCCESS";
}catch (Exception e) {
System.out.println("Exception Occured!!!");
}
return result;
}
} }

View File

@ -25,6 +25,7 @@ import kcc.com.cmm.LoginVO;
import kcc.com.cmm.service.EgovCmmUseService; import kcc.com.cmm.service.EgovCmmUseService;
import kcc.com.utl.fcc.service.EgovStringUtil; import kcc.com.utl.fcc.service.EgovStringUtil;
import kcc.kccadr.cmm.service.SMSOracleService; import kcc.kccadr.cmm.service.SMSOracleService;
import kcc.kccadr.msg.service.EmailMgrVO;
import kcc.kccadr.msg.service.MsgMgrService; import kcc.kccadr.msg.service.MsgMgrService;
import kcc.kccadr.msg.service.MsgMgrVO; import kcc.kccadr.msg.service.MsgMgrVO;
import kcc.kccadr.msg.service.SmsMgrVO; import kcc.kccadr.msg.service.SmsMgrVO;
@ -330,7 +331,52 @@ public class MsgMgrController {
return modelAndView; return modelAndView;
} }
@RequestMapping("/kccadr/msg/sendEmailMgrList.do")
public String sendEmailMgrList(@ModelAttribute("emailMgrVO") EmailMgrVO emailMgrVO, ModelMap model) throws Exception {
if(emailMgrVO.getPageUnit() != 10) {
emailMgrVO.setPageUnit(emailMgrVO.getPageUnit());
}
if("".equals(emailMgrVO.getSearchSortCnd())){
emailMgrVO.setSearchSortCnd("EMAIL_SEQ");
emailMgrVO.setSearchSortOrd("desc");
}
//검색조건이 수신자 검색의 경우 이름을 암호화 해준다.
if("2".equals(emailMgrVO.getSearchCondition()) && StringUtils.isNotBlank(emailMgrVO.getSearchKeyword())) {
emailMgrVO.setSearchKeyword(egovCryptoUtil.encrypt(emailMgrVO.getSearchKeyword()));
}
/** paging */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(emailMgrVO.getPageIndex());
paginationInfo.setRecordCountPerPage(emailMgrVO.getPageUnit());
paginationInfo.setPageSize(emailMgrVO.getPageSize());
emailMgrVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
emailMgrVO.setLastIndex(paginationInfo.getLastRecordIndex());
emailMgrVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
paginationInfo.setTotalRecordCount(msgMgrService.emailMgrListCount(emailMgrVO));
model.addAttribute("paginationInfo", paginationInfo);
List<EmailMgrVO> list = msgMgrService.emailMgrList(emailMgrVO);
// 복호화
decryptEmailInfomation(list, null);
model.addAttribute("list", list);
//검색조건이 수신자 검색의 경우 이름을 암호화 해준다.
if("2".equals(emailMgrVO.getSearchCondition()) && StringUtils.isNotBlank(emailMgrVO.getSearchKeyword())) {
emailMgrVO.setSearchKeyword(egovCryptoUtil.decrypt(emailMgrVO.getSearchKeyword()));
}
return "kccadr/msg/sendEmailMgrList";
}
// 문자전송 복호화
public void decryptInfomation(List<SmsMgrVO> list, SmsMgrVO info){ public void decryptInfomation(List<SmsMgrVO> list, SmsMgrVO info){
if(CollectionUtils.isNotEmpty(list)){ if(CollectionUtils.isNotEmpty(list)){
for(SmsMgrVO model : list){ for(SmsMgrVO model : list){
@ -382,4 +428,18 @@ public class MsgMgrController {
} }
} }
// 이메일 리스트 복호화
public void decryptEmailInfomation(List<EmailMgrVO> list, EmailMgrVO info){
if(CollectionUtils.isNotEmpty(list)){
for(EmailMgrVO model : list){
model.setEmailTo(egovCryptoUtil.decrypt(model.getEmailTo()));
model.setEmailFrom(egovCryptoUtil.decrypt(model.getEmailFrom()));
}
}
if(info != null){
info.setEmailTo(egovCryptoUtil.decrypt(info.getEmailTo()));
info.setEmailFrom(egovCryptoUtil.decrypt(info.getEmailFrom()));
}
}
} }

View File

@ -0,0 +1,133 @@
package kcc.kccadr.sendMgr.web;
import java.util.Properties;
import javax.annotation.Resource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import kcc.kccadr.msg.service.MsgMgrService;
import kcc.let.utl.fcc.service.EgovCryptoUtil;
/**
* EMAIL 발송관리자(관리자)
* EMAIL 발송관련 처리에 관한 controller 클래스를 정의한다.
* @author 원영현
* @since 2023.09.13
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023.09.13 원영현 최초 생성
*
* </pre>
*/
@Controller
public class SendMgrEmailController {
@Resource(name = "MsgMgrService")
private MsgMgrService msgMgrService;
//암복호화 유틸
@Resource(name = "egovCryptoUtil")
EgovCryptoUtil egovCryptoUtil;
/**
* @Method Name : emailSendMgrPage
* @작성일 : 2023. 9. 13.
* @작성자 : WYH
* @변경이력 :
* @Method 설명 : email 전송화면 이동
*/
@RequestMapping(value = "/kccadr/sendMgr/emailSendMgr.do")
public String emailSendMgrPage() {
return "/kccadr/sendMgr/emailSendMgr";
}
@RequestMapping(value = "/kccadr/sendMgr/emailSendMgrAjax.do")
public ModelAndView emailSendMgrAjax(
@ModelAttribute("adjReqMgrVO") AdjReqMgrVO adjReqMgrVO
, RedirectAttributes redirectAttributes
, HttpServletRequest request ) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
String emailFrom = "no-reply@copyright.or.kr"; // 추후 globals.properties 이용하여 변경
String emailPs = "Copycopy12!"; // 추후 globals.properties 이용하여 변경
try {
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "smtp.gov-dooray.com");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.protocols", "TLSv1");
props.put("mail.smtp.ssl.protocols", "TLSv1.1");
props.put("mail.smtp.ssl.protocols", "TLSv1.2");
props.put("mail.debug", "true");
Authenticator authenticator = new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(emailFrom,emailPs);
}
};
Session session = Session.getInstance(props, authenticator) ;
InternetAddress fromAddress = new InternetAddress(emailFrom);
String result = "";
String emailTo = "";
for(int i=0; i < adjReqMgrVO.getEmailList().length; i++) {
emailTo = adjReqMgrVO.getEmailList()[i];
InternetAddress toAddress = new InternetAddress(emailTo);
MimeMessage message = new MimeMessage(session);
message.setFrom(fromAddress);
message.addRecipient(Message.RecipientType.TO, toAddress );
message.setSubject(adjReqMgrVO.getEmailTitle());
message.setContent(adjReqMgrVO.getEmailContent()," text/html; charset=KSC5601");
System.out.println("------------------ 메일발송 시작 ----------------");
Transport.send(message);
System.out.println("------------------ 메일발송 끝 ----------------");
System.out.println("------------------ 메일발송Log 추가 시작----------------");
String encEmailFrom = egovCryptoUtil.encrypt(emailFrom); // email 수신자 주소 암호화
String encEmailTo = egovCryptoUtil.encrypt(emailTo); // email 발신자 주소 암호화
adjReqMgrVO.setEmailFrom(encEmailFrom);
adjReqMgrVO.setEmailTo(encEmailTo);
result = msgMgrService.insertAdrEmailLog(adjReqMgrVO);
System.out.println("------------------ 메일발송Log 추가 끝----------------");
}
modelAndView.addObject("result", result);
} catch (MessagingException e) {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "email발송 요청에 실패했습니다.");
}
return modelAndView;
}
}

View File

@ -0,0 +1,82 @@
package kcc.kccadr.sendMgr.web;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import kcc.kccadr.cmm.service.SMSOracleService;
/**
* SMS 발송관리자(관리자)
* SMS 발송관련 처리에 관한 controller 클래스를 정의한다.
* @author 원영현
* @since 2023.09.13
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023.09.13 원영현 최초 생성
*
* </pre>
*/
@Controller
public class SendMgrSMSController {
// SMS 문자발송 서비스
@Resource(name = "SMSOracleService")
private SMSOracleService sMSOracleService;
/**
* @Method Name : smsSendMgrPage
* @작성일 : 2023. 9. 13.
* @작성자 : WYH
* @변경이력 :
* @Method 설명 : SMS 발송 화면이동
*/
@RequestMapping(value = "/kccadr/sendMgr/smsSendMgr.do")
public String smsSendMgrPage() {
return "/kccadr/sendMgr/smsSendMgr";
}
/**
* @Method Name : smsSendMgrAjax
* @작성일 : 2023. 9. 13.
* @작성자 : WYH
* @변경이력 :
* @Method 설명 : SMS 발송
*/
@RequestMapping(value = "/kccadr/sendMgr/smsSendMgrAjax.do")
public ModelAndView smsSendMgrAjax(
@ModelAttribute("adjReqMgrVO") AdjReqMgrVO adjReqMgrVO
, RedirectAttributes redirectAttributes
, HttpServletRequest request ) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
String result = "";
for(int i=0; i < adjReqMgrVO.getPhoneList().length; i++) {
adjReqMgrVO.setSendTelNo(adjReqMgrVO.getPhoneList()[i]);
result = sMSOracleService.insertSmsCustomSend(adjReqMgrVO);
}
modelAndView.addObject("result", result);
}catch (Exception e) {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "문자발송 요청에 실패했습니다.");
}
return modelAndView;
}
}

View File

@ -4,6 +4,7 @@
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/> <typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="MsgMgrVO" type="kcc.kccadr.msg.service.MsgMgrVO"/> <typeAlias alias="MsgMgrVO" type="kcc.kccadr.msg.service.MsgMgrVO"/>
<typeAlias alias="SmsMgrVO" type="kcc.kccadr.msg.service.SmsMgrVO"/> <typeAlias alias="SmsMgrVO" type="kcc.kccadr.msg.service.SmsMgrVO"/>
<typeAlias alias="EmailMgrVO" type="kcc.kccadr.msg.service.EmailMgrVO"/>
<typeAlias alias="AdjReqMgrVO" type="kcc.kccadr.adjreqmgr.service.AdjReqMgrVO"/> <typeAlias alias="AdjReqMgrVO" type="kcc.kccadr.adjreqmgr.service.AdjReqMgrVO"/>
<!-- 발송문구 갯수 --> <!-- 발송문구 갯수 -->
@ -298,5 +299,78 @@
alrimtalk_yn = #value# alrimtalk_yn = #value#
</isEqual> </isEqual>
</update> </update>
<insert id="MsgMgrDAO.insertAdrEmailLog" parameterClass="AdjReqMgrVO">
INSERT INTO ADR_EMAIL_LOG (
EMAIL_TIT
, EMAIL_CN
, EMAIL_TY
, EMAIL_TO
, EMAIL_FROM
, ADR_SEQ
, EMAIL_SEND_PNTTM
, FRST_REGIST_PNTTM
)
VALUES
(
#emailTitle#
, #emailContent#
, #emailTy#
, #emailTo#
, #emailFrom#
, #adrSeq#
, now()
, now()
)
</insert>
<select id="MsgMgrDAO.emailMgrListCount" parameterClass="EmailMgrVO" resultClass="Integer">
SELECT
COUNT(email_seq)
FROM
ADR_EMAIL_LOG
WHERE 1=1
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="1">
EMAIL_CN LIKE CONCAT('%' , #searchKeyword#, '%')
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="2">
EMAIL_TO = #searchKeyword#
</isEqual>
</isNotEmpty>
ORDER BY EMAIL_SEND_PNTTM DESC
</select>
<select id="MsgMgrDAO.emailMgrList" parameterClass="EmailMgrVO" resultClass="EmailMgrVO">
SELECT
EMAIL_SEQ AS emailSeq
, EMAIL_TIT AS emailTitle
, EMAIL_CN AS emailContent
, EMAIL_TY AS emailTy
, EMAIL_TO AS emailTo
, EMAIL_FROM AS emailFrom
, ADR_SEQ AS adrSeq
, TO_CHAR ( EMAIL_SEND_PNTTM, 'YYYY/MM/DD' ) AS emailSendPnttm
, TO_CHAR ( FRST_REGIST_PNTTM, 'YYYY/MM/DD' ) AS frstRegistPnttm
FROM ADR_EMAIL_LOG
WHERE 1=1
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="1">
EMAIL_CN LIKE CONCAT('%' , #searchKeyword#, '%')
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="2">
EMAIL_TO = #searchKeyword#
</isEqual>
</isNotEmpty>
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
</sqlMap> </sqlMap>

View File

@ -0,0 +1,175 @@
<%@ 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="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<%
/**
* @Class Name : sendMsgMgrList.jsp
* @Description : 발송문자 리스트
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2021.12.30 우영두 최초 생성
* @author 우영두
* @since 2021.12.30
* @version 1.0
* @see
*
*/
%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
</style>
<script type="text/javascript">
function fncGoList(){
linkPage(1);
}
function linkPage(pageNo){
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
listForm.searchCondition.value = $('#searchCondition').val();
listForm.searchKeyword.value = $('#searchKeyword').val();
listForm.action = "<c:url value='/kccadr/msg/sendEmailMgrList.do'/>";
listForm.submit();
}
//발송문구 관리 리스트화면으로 이동
function fncMsgMgrReg(msgSeq) {
location.href="<c:url value='/kccadr/msg/msgMgrList.do'/>";
}
</script>
<title>발송 Email 목록</title>
<form id="listForm" name="listForm" method="post">
<input type="hidden" name="pageIndex" value="<c:out value='${msgMgrVO.pageIndex}' default='1' />"/>
<input type="hidden" name="searchSortCnd" value="<c:out value="${msgMgrVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${msgMgrVO.searchSortOrd}" />" />
<input type="hidden" id="smsSeq" name="smsSeq" value=""/>
<div class="cont_wrap">
<div class="box">
<!-- cont_tit -->
<div class="cont_tit">
<h2>발송 Email 목록</h2>
<ul class="cont_nav">
<li class="home">
<a href="/">
<i></i>
</a>
</li>
<li>
<p>발송 관리</p>
</li>
<li>
<p>발송email 관리</p>
</li>
<li>
<span class="cur_nav">발송email 목록</span>
</li>
</ul>
</div>
<!-- //cont_tit -->
<div class="cont">
<!-- list_top -->
<div class="list_top">
<div class="list_util">
<div class="detail_search">
<ul>
<li>
<p class="tit_text">구분</p>
<select name="searchCondition" id="searchCondition">
<%-- <option value="" ${msgMgrVO.searchCondition eq '' ? 'selected' : '' }>전체</option> --%>
<option value="1" ${msgMgrVO.searchCondition eq '1' ? 'selected' : '' }>발송내용</option>
<option value="2" ${msgMgrVO.searchCondition eq '2' ? 'selected' : '' }>수신자</option>
</select>
<input type="text" id="searchKeyword" name="searchKeyword" class="search_input" placeholder="검색어를 입력하세요" value="<c:out value='${smsMgrVO.searchKeyword}'/>">
<button class="btn_search" onclick="fncGoList(); return false;">검색</button>
</li>
</ul>
</div>
</div>
</div>
<!-- //list_top -->
<!-- list -->
<div class="list tbType01">
<table>
<colgroup>
<col style="width: 5%">
<col style="width: 20%">
<col style="width: auto">
<col style="width: 10%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th>번호<button class="sort btn_sort" id="sort_msgSeq"></button></th>
<th>발송유형<button type="button" class="sort sortBtn" id="sort_emailTy"></button></th>
<th>발송내용<button type="button" class="sort sortBtn" id="sort_emailContent"></button></th>
<th>조정번호<button type="button" class="sort sortBtn" id="sort_adrSeq"></button></th>
<th>받는사람<button type="button" class="sort sortBtn" id="sort_emailTo"></button></th>
<th>보내는사람<button type="button" class="sort sortBtn" id="sort_emailFrom"></button></th>
<th>발송일자<button type="button" class="sort sortBtn" id="sort_emailSendPnttm"></button></th>
</tr>
</thead>
<tbody>
<c:forEach var="list" items="${list}" varStatus="status">
<tr onclick="fnAcptDetail('${list.emailSeq}');" style="cursor:pointer;">
<td>
<c:if test="${smsMgrVO.searchSortOrd eq 'desc' }">
<c:out value="${ ( paginationInfo.totalRecordCount - ((smsMgrVO.pageIndex -1)*smsMgrVO.pageUnit) ) - status.index }"/>
</c:if>
<c:if test="${smsMgrVO.searchSortOrd eq 'asc' }">
<c:out value="${(smsMgrVO.pageIndex - 1) * smsMgrVO.pageUnit + status.count}"/>
</c:if>
</td>
<td><kc:code codeId="CC050" code="${list.emailTy}"/></td>
<td>
<c:out value="${list.emailContent}"/>
</td>
<td>
<c:out value="${list.adrSeq}"/>
</td>
<td>
<c:out value="${list.emailTo}"/>
</td>
<td>
<c:out value="${list.emailFrom}"/>
</td>
<td>
<c:out value="${list.emailSendPnttm}"/>
</td>
</tr>
</c:forEach>
<c:if test="${empty list}">
<tr><td colspan="7"><spring:message code="common.nodata.msg" /></td></tr>
</c:if>
</tbody>
</table>
</div>
<!-- //list -->
<div class="btn_wrap btn_layout02">
<button class="btnType02" onclick="fncMsgMgrReg(); return false;">발송문구 관리</button>
</div>
<!-- page -->
<div class="page">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
</div>
<!-- //page -->
</div>
</div>
</div>
</form>

View File

@ -0,0 +1,170 @@
<!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="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<%
/**
* @Class Name : emailSendMgr.do
* @Description : email 발송 화면
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2023.09.13 원영현 최초 생성
* @author 원영현
* @since 2023.09.13
* @version 1.0
* @see
*
*/
%>
<script type="text/javascript">
function inputAddEamil(ty){
var inputEmail = $("#callTo").val();
if(inputEmail == "" || inputEmail == null){
alert("메일주소를 입력해 주세요");
return;
}
var taxExptext = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
if(taxExptext.test(inputEmail)==false){
alert("이메일주소 형식이 올바르지 않습니다.");
return false;
}
inputAddLine(ty);
}
function fnEmailSend(){
var sendLength = $("input[name=inputAdd]").length;
var emailSubject = $("#emailSubject").val();
var emailContent = $("#emailContent").val();
if(sendLength == 0){
alert("수신 메일주소를 입력해 주세요");
return;
}
if(emailSubject == ""){
alert("발송제목을 입력해 주세요");
return;
}
if(emailContent == ""){
alert("발송내용을 입력해 주세요");
return;
}
//전송 메일주소 배열 생성
var emailArr = new Array(sendLength);
for(var i=0; i < sendLength; i++){
emailArr[i] = $("input[name=inputAdd]").eq(i).val();
}
$("#emailList").val(emailArr);
var data = new FormData(document.emailForm);
$.ajax({
type: "POST"
, url: "/kccadr/sendMgr/emailSendMgrAjax.do"
, data: data
, dataType:'json'
, async: false
, processData: false
, contentType: false
, cache: false
, success: function (returnData, status) {
console.log(returnData.result);
if(returnData.result == 'SUCCESS'){
alert("email전송에 성공하였습니다.");
location.reload();
}else{
alert(returnData.message);
}
}
,error: function (e) {
alert("요청에 실패하였습니다.");
console.log("ERROR : ", e);
}
});
}
</script>
<form id="emailForm" name="emailForm" method="post">
<input type="hidden" id="emailList" name="emailList"/>
<!-- cont -->
<div class="cont_wrap">
<div class="box">
<!-- cont_tit -->
<div class="cont_tit">
<h2>이메일 발송</h2>
<ul class="cont_nav">
<li class="home"><a href="/"><i></i></a></li>
<li>
<p>발송 관리</p>
</li>
<li>
<span class="cur_nav">이메일 발송</span>
</li>
</ul>
</div>
<!-- //cont_tit -->
<div class="cont">
<!-- list_상세 -->
<div class="tbType02">
<table>
<colgroup>
<col style="width: 220px;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>수신메일주소</th>
<td>
<div class="input_form">
<input type="text" class="write_info" id="callTo" name="callTo" placeholder="email주소를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='email주소를 입력하세요'">
<button type="button" class="btnType01" onclick="inputAddEamil(this);">메일추가</button>
<div class="input_form_add_wrap">
</div>
</div>
</td>
</tr>
<tr>
<th>발송제목</th>
<td>
<input type="text" size="100" id="emailTitle" name="emailTitle">
</td>
</tr>
<tr>
<th>발송내용</th>
<td>
<textarea name="emailContent" id="emailContent" cols="30" rows="10"></textarea>
</td>
</tr>
</tbody>
</table>
</div>
<!-- //list_상세 -->
<!-- btn_wrap -->
<div class="btn_wrap btn_layout01">
<div class="area_left">
</div>
<div class="area_right">
<button class="btnType02" onclick="fnEmailSend(); return false;">발송</button>
</div>
</div>
<!-- //btn_wrap -->
</div>
</div>
</div>
<!-- //cont -->
</form>

View File

@ -0,0 +1,154 @@
<!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="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<%
/**
* @Class Name : smsSendMgr.do
* @Description : SMS 발송 화면
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2023.09.13 원영현 최초 생성
* @author 원영현
* @since 2023.09.13
* @version 1.0
* @see
*
*/
%>
<script type="text/javascript">
function inputAddPhone(ty){
var inputPhone = $("#callTo").val();
if(inputPhone == "" || inputPhone == null){
alert("수신번호를 입력해 주세요");
return;
}
inputAddLine(ty);
}
function fnSmsSend(){
var sendLength = $("input[name=inputAdd]").length;
var sendMsg = $("#sendMsg").val();
if(sendLength == 0){
alert("수신번호를 입력해 주세요");
return;
}
if(sendMsg == ""){
alert("발송내용을 입력해 주세요");
return;
}
//배열 생성
var phoneArr = new Array(sendLength);
for(var i=0; i < sendLength; i++){
phoneArr[i] = $("input[name=inputAdd]").eq(i).val();
}
$("#phoneList").val(phoneArr);
var data = new FormData(document.smsForm);
$.ajax({
type: "POST"
, url: "/kccadr/sendMgr/smsSendMgrAjax.do"
, data: data
, dataType:'json'
, async: false
, processData: false
, contentType: false
, cache: false
, success: function (returnData, status) {
console.log(returnData.result);
if(returnData.result == 'SUCCESS'){
alert("문자발송요청에 성공하였습니다.");
location.reload();
}else{
alert(returnData.message);
}
}
,error: function (e) {
alert("요청에 실패하였습니다.");
console.log("ERROR : ", e);
}
});
}
</script>
<form id="smsForm" name="smsForm" method="post">
<input type="hidden" id="phoneList" name="phoneList"/>
<!-- cont -->
<div class="cont_wrap">
<div class="box">
<!-- cont_tit -->
<div class="cont_tit">
<h2>SMS 발송</h2>
<ul class="cont_nav">
<li class="home"><a href="/"><i></i></a></li>
<li>
<p>발송 관리</p>
</li>
<li>
<span class="cur_nav">SMS 발송</span>
</li>
</ul>
</div>
<!-- //cont_tit -->
<div class="cont">
<!-- list_상세 -->
<div class="tbType02">
<table>
<colgroup>
<col style="width: 220px;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>수신번호</th>
<td>
<div class="input_form">
<input type="text" class="write_info" id="callTo" name="callTo" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');" placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'">
<button type="button" class="btnType01" onclick="inputAddPhone(this);">번호추가</button>
<ul class="input_form_add_wrap">
</ul>
</div>
</td>
</tr>
<tr>
<th>발송내용</th>
<td>
<textarea name="sendMsg" id="sendMsg" cols="30" rows="10"></textarea>
</td>
</tr>
</tbody>
</table>
</div>
<!-- //list_상세 -->
<!-- btn_wrap -->
<div class="btn_wrap btn_layout01">
<div class="area_left">
</div>
<div class="area_right">
<button class="btnType02" onclick="fnSmsSend(); return false;">발송</button>
</div>
</div>
<!-- //btn_wrap -->
</div>
</div>
</div>
<!-- //cont -->
</form>

View File

@ -172,7 +172,11 @@ function inputAddLine(itm){
var inputLineNum = $(itm).siblings(".input_form_add_wrap").find("li").length; var inputLineNum = $(itm).siblings(".input_form_add_wrap").find("li").length;
inputLineNum+=1; inputLineNum+=1;
console.log(inputLineNum); console.log(inputLineNum);
var inputLineText = '<li><p></p>'+inputValue+'<button type="button" onclick="inputDeleteLine(this);"><img src="/kccadrPb/adm/image/close-orange.png" alt=""></button></li>'; $("#callTo").val("");
var inputLineText = '<li><p></p><input type="hidden" name="inputAdd" value="'+inputValue+'"/>'
+inputValue
+'<button type="button" onclick="inputDeleteLine(this);"><img src="/kccadrPb/adm/image/close-orange.png" alt=""></button></li>';
$(itm).siblings(".input_form_add_wrap").append(inputLineText); $(itm).siblings(".input_form_add_wrap").append(inputLineText);
lineNumber(); lineNumber();
} }