이준호 전자조정시스템 고도화 커밋

- sms메세지 발송
This commit is contained in:
LJH 2022-10-11 09:39:39 +09:00
parent 0919382a38
commit 837c0fba33
11 changed files with 396 additions and 158 deletions

View File

@ -76,6 +76,7 @@ import kcc.kccadr.adjst.service.AdjstReqVO;
import kcc.kccadr.advc.service.AdrHstryMgrService;
import kcc.kccadr.advc.service.AdrHstryMgrVO;
import kcc.kccadr.cmm.KccadrConstants;
import kcc.kccadr.cmm.service.SMSOracleService;
import kcc.kccadr.kccadrCom.service.KccadrCommonSearchVO;
import kcc.kccadr.kccadrCom.service.KccadrCommonService;
import kcc.kccadr.kccadrCom.service.KccadrCommonVO;
@ -207,6 +208,10 @@ public class ApmController {
@Value("#{globalSettings['Globals.prod.islocal']}")
public void setIslocal(String path) { islocal = path; }
// SMS 문자발송 서비스
@Resource(name = "SMSOracleService")
private SMSOracleService sMSOracleService;
/**
* 조정진행목록 목록
*
@ -841,83 +846,113 @@ public class ApmController {
/**
* 사건메모 팝업 상세
*
* @param apmVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "popup/adrMemo.do")
public String adrMemo(@ModelAttribute("apmVO") ApmVO apmVO, ModelMap model) throws Exception {
//이미 있는메모 정보가져오는 쿼리작성(adr_mgr_master > adr_cn 컬럼)
//등록,수정(merge into)
//삭제(update > '')
// 팝업에서 동작
ApmVO memoVO = new ApmVO();
memoVO = apmService.selectAdrMemo(apmVO);
model.addAttribute("apmVO", apmVO);
model.addAttribute("memoVO", memoVO);
return "/kccadr/adjPgrMgr/apm/popup/adrMemoPop";
}
/**
* 사건메모 팝업 상세
*
* @param apmVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "popup/adrMemo.do")
public String adrMemo(@ModelAttribute("apmVO") ApmVO apmVO, ModelMap model) throws Exception {
//이미 있는메모 정보가져오는 쿼리작성(adr_mgr_master > adr_cn 컬럼)
//등록,수정(merge into)
//삭제(update > '')
// 팝업에서 동작
ApmVO memoVO = new ApmVO();
memoVO = apmService.selectAdrMemo(apmVO);
model.addAttribute("apmVO", apmVO);
model.addAttribute("memoVO", memoVO);
return "/kccadr/adjPgrMgr/apm/popup/adrMemoPop";
}
/**
* 사건메모 등록/수정/삭제
*
* @param apmVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "popup/updateAdrMemoAjax.do")
public ModelAndView updateAdrMemoAjax(
@ModelAttribute("apmVO") ApmVO apmVO
, ModelMap model
, HttpServletRequest request) throws Exception {
/**
* 사건메모 등록/수정/삭제
*
* @param apmVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "popup/updateAdrMemoAjax.do")
public ModelAndView updateAdrMemoAjax(
@ModelAttribute("apmVO") ApmVO apmVO
, ModelMap model
, HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() : null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getUniqId());
try {
//최종수정자 set
apmVO.setLastUpdusrId(userId);
//등록, 수정, 삭제 모두 update
apmService.updateAdrMemo(apmVO);
modelAndView.addObject("result", "success");
} catch (Exception e) {
System.out.println(e.getMessage());
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
/**
* 문자발송 팝업
*
* @param apmVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "popup/smsSendPop.do")
public String adrMemo() throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() : null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getUniqId());
try {
//최종수정자 set
apmVO.setLastUpdusrId(userId);
return "/kccadr/adjPgrMgr/apm/popup/smsSendPop";
}
//등록, 수정, 삭제 모두 update
apmService.updateAdrMemo(apmVO);
modelAndView.addObject("result", "success");
} catch (Exception e) {
System.out.println(e.getMessage());
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 문자발송 팝업
*
* @param apmVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "popup/smsSendPop.do")
public String adrMemo(@ModelAttribute("adjReqMgrVO") AdjReqMgrVO adjReqMgrVO) throws Exception {
return "/kccadr/adjPgrMgr/apm/popup/smsSendPop";
}
/**
* 문자발송 팝업
*
* @param apmVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "smsSendAjax.do")
public ModelAndView smsSendAjax(@ModelAttribute("adjReqMgrVO") AdjReqMgrVO adjReqMgrVO
, RedirectAttributes redirectAttributes
, HttpServletRequest request ) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
String result = sMSOracleService.insertSmsCustomSend(adjReqMgrVO);
modelAndView.addObject("result", result);
}catch (Exception e) {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "문자발송 요청에 실패했습니다.");
}
return modelAndView;
}
/**
* 취하신청 팝업 상세

View File

@ -234,7 +234,22 @@ public class AdjReqMgrVO extends ComDefaultVO implements Serializable{
private String trPhone; // 수신자
private String sendTelNo; // 송신자
private String sendMsg; // 송신 메세지
private String emailSendResult;
private String smsTy; // 문자 발송 문구 분류
/*
* smsTy
* 000 - 관리자발송
* 001 - 보완요청
* 002 - 수수료납부요청
* 003 - 조정접수
* 004 - 기일통지서승인
* 005 - 기일조서 결재완료
* 006 - 조정조서 결재완료
* 007 - 직권조정결정서 확인완료
* 008 - 없음
* 009 - 조정불성립
*
* */
public AdjReqMgrVO getAdrVO() {
return adrVO;
@ -1158,6 +1173,19 @@ public class AdjReqMgrVO extends ComDefaultVO implements Serializable{
public void setSendMsg(String sendMsg) {
this.sendMsg = sendMsg;
}
public String getSmsTy() {
return smsTy;
}
public void setSmsTy(String smsTy) {
this.smsTy = smsTy;
}
public String getEmailSendResult() {
return emailSendResult;
}
public void setEmailSendResult(String emailSendResult) {
this.emailSendResult = emailSendResult;
}

View File

@ -148,4 +148,14 @@ public class AdjReqMgrDAO extends EgovAbstractDAO {
update("adjReqMgrDAO.updateAdrMgrMasterDetailApprCn", adjReqMgrVO);
}
// 조정알림SMS - SMS전송 요청 LOG 등록
public int insertAdrSmsCustomSend(AdjReqMgrVO adjReqMgrVO) throws Exception{
return update("AdjReqMgrDAO.insertAdrSmsCustomSend", adjReqMgrVO);
}
// 조정알림SMS - MMS전송 요청 LOG 등록
public int insertAdrMmsCustomSend(AdjReqMgrVO adjReqMgrVO) throws Exception{
return update("AdjReqMgrDAO.insertAdrMmsCustomSend", adjReqMgrVO);
}
}

View File

@ -8,6 +8,7 @@ import com.ibatis.sqlmap.client.SqlMapClient;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
/**
* 저작위 SMS서버를 사용하기 위한 데이터 접근 클래스
@ -55,8 +56,13 @@ public class SMSOracleDAO extends EgovAbstractDAO {
}
// SMS 작성 메세지 전송 등록
public void insertSmsCustomSend(EgovMap egovMap) throws Exception{
insert("SMSOracleDAO.insertSmsCustomSend", egovMap);
public void insertSmsCustomSend(AdjReqMgrVO adjReqMgrVO) throws Exception{
insert("SMSOracleDAO.insertSmsCustomSend", adjReqMgrVO);
}
// MMS 작성 메세지 전송 등록
public void insertMmsCustomSend(AdjReqMgrVO adjReqMgrVO) throws Exception{
insert("SMSOracleDAO.insertMmsCustomSend", adjReqMgrVO);
}
}

View File

@ -10,7 +10,6 @@ import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -620,45 +619,48 @@ public class SMSOracleServiceImpl extends EgovAbstractServiceImpl implements SM
String result = "fail";
// List<EgovMap> sendMapList = getSmsSendMsg(adjReqMgrVO); // 전송 메세지 > 전자조정DB
EgovMap sendMap = new EgovMap();
try {
/*
* 1. adjReqMgrVO에서 수신자(trPhone), 메시지(sendMsg) 파라미터로 받는다.
* 2. 정해진 송신자, 시스템 구분자는 미리 정의된 globals.properties 에서 받는다.
* 3. 저작위 SMS 발송 DB로 insert
* 4. 발송 이력을 남긴다.
*
* */
adjReqMgrVO.setTrId(trId); // 시스템 구분자
adjReqMgrVO.setSendTelNo(sendTelNo); // 송신자 번호
int bytes = adjReqMgrVO.getSendMsg().getBytes("euc-kr").length; // 발송메시지 바이트수
// sendMap.put("sendTelNo", sendTelNo); // 송신자 번호
// sendMap.put("trId", trId); // 시스템 구분자
// String sendMsg = (String) sendMap.get("sendMsg");
// int bytes = sendMsg.getBytes("euc-kr").length;
String rpplPhone = (String) sendMap.get("rpplPhone");
String rpplEmail = (String) sendMap.get("rpplEmail");
String rpplSmsYn = (String) sendMap.get("rpplSmsYn");
String rpplEmailYn = (String) sendMap.get("rpplEmailYn");
if (bytes > 90) {
sMSOracleDAO.insertMmsSend(sendMap); // SMS 등록 장문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrMmsSend(sendMap); // SMS 이력 등록 장문 > 전자조정
} else {
sMSOracleDAO.insertSmsSend(sendMap); // SMS 등록 단문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrSmsSend(sendMap); // SMS 이력 등록 단문 > 전자조정
}
//sms 발송 관리 테이블에 저장
msgMgrDAO.insertAdrSmsLog(sendMap); // SMS 이력 등록 단문 > 전자조정
result = "succ";
/*
* 1. adjReqMgrVO로 수신자(trPhone), 메시지(sendMsg), 사건번호(adrNo) 파라미터로 받는다.
* 2. 정해진 송신자, 시스템 구분자는 미리 정의된 globals.properties 에서 받는다.
* 3. 저작위 SMS 발송 DB로 insert
* 4. 발송 이력을 남긴다.
*
* */
adjReqMgrVO.setTrId(trId); // 시스템 구분자
adjReqMgrVO.setSendTelNo(sendTelNo); // 송신자 번호
adjReqMgrVO.setSmsTy("000"); //문자 발송 문구 분류
/*
* smsTy
* 000 - 관리자발송
* 001 - 보완요청
* 002 - 수수료납부요청
* 003 - 조정접수
* 004 - 기일통지서승인
* 005 - 기일조서 결재완료
* 006 - 조정조서 결재완료
* 007 - 직권조정결정서 확인완료
* 008 - 없음
* 009 - 조정불성립
*
* */
int bytes = adjReqMgrVO.getSendMsg().getBytes("euc-kr").length; // 발송메시지 바이트수
if (bytes > 90) {
// sMSOracleDAO.insertMmsCustomSend(adjReqMgrVO); // SMS 등록 장문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrMmsCustomSend(adjReqMgrVO); // SMS 이력 등록 장문 > 전자조정
} else {
// sMSOracleDAO.insertSmsCustomSend(adjReqMgrVO); // SMS 등록 단문 > SMS DB(오라클)
adjReqMgrDAO.insertAdrSmsCustomSend(adjReqMgrVO); // SMS 이력 등록 단문 > 전자조정
}
//sms 발송 관리 테이블에 저장
adjReqMgrVO.setRpplNm("");
msgMgrDAO.insertAdrSmsCustomLog(adjReqMgrVO); // SMS 이력 등록 단문 > 전자조정
result = "SUCCESS";
} catch (Exception e) {
System.out.println("Exception Occured!!!");
}

View File

@ -6,6 +6,7 @@ import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import kcc.kccadr.adjreqmgr.service.AdjReqMgrVO;
import kcc.kccadr.msg.service.MsgMgrVO;
import kcc.kccadr.msg.service.SmsMgrVO;
@ -68,4 +69,9 @@ public class MsgMgrDAO extends EgovAbstractDAO {
insert("MsgMgrDAO.insertAdrSmsLog", egovMap);
}
public void insertAdrSmsCustomLog(AdjReqMgrVO adjReqMgrVO) throws Exception{
insert("MsgMgrDAO.insertAdrSmsCustomLog", adjReqMgrVO);
}
}

View File

@ -2,6 +2,7 @@
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap>
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="AdjReqMgrVO" type="kcc.kccadr.adjreqmgr.service.AdjReqMgrVO"/>
<select id="SMSOracleDAO.selectOracleTest" resultClass="int">
SELECT 1 FROM DUAL
@ -109,4 +110,52 @@
)
</insert>
<!-- SMS 작성 메세지 전송 -->
<insert id="SMSOracleDAO.insertSmsCustomSend" parameterClass="AdjReqMgrVO">
INSERT INTO SC_TRAN (
TR_NUM
,TR_SENDDATE
,TR_ID
/*,TR_SENDSTAT*/
/*,TR_MSGTYPE*/
,TR_PHONE
,TR_CALLBACK
,TR_MSG
) VALUES (
SC_TRAN_SEQ.NEXTVAL
,SYSDATE
,#trId#
/*,'0'*/
/*,'0'*/
,replace(#trPhone#, '-', '')
,#sendTelNo#
,#sendMsg#
)
</insert>
<!-- MMS 작성 메세지 전송 -->
<insert id="SMSOracleDAO.insertMmsCustomSend" parameterClass="AdjReqMgrVO">
INSERT INTO MMS_MSG (
MSGKEY
,ID
,SUBJECT
,PHONE
,CALLBACK
,STATUS
,REQDATE
,MSG
,TYPE
) VALUES (
MMS_MSG_SEQ.NEXTVAL
,#trId#
,'[한국저작권위원회]'
,replace(#trPhone#, '-', '')
,#sendTelNo#
,'0'
,SYSDATE
,#sendMsg#
,'0'
)
</insert>
</sqlMap>

View File

@ -902,5 +902,57 @@
</update>
<!-- SMS 작성 메세지 전송 요청 LOG 등록 -->
<update id="AdjReqMgrDAO.insertAdrSmsCustomSend" parameterClass="AdjReqMgrVO">
INSERT INTO ADR_SC_TRAN (
TR_NUM
,TR_SENDDATE
,TR_ID
/*,TR_SENDSTAT*/
/*,TR_MSGTYPE*/
,TR_PHONE
,TR_CALLBACK
,TR_MSG
,EMAIL_SEND_RESULT
) VALUES (
(SELECT IFNULL(MAX(TR_NUM), 0) + 1 FROM ADR_SC_TRAN)
,SYSDATE
,#trId#
/*,'0'*/
/*,'0'*/
,IFNULL(#trPhone#, '-')
,IFNULL(#sendTelNo#, '-')
,#sendMsg#
,#emailSendResult#
)
</update>
<!-- MMS 작성 메세지 전송 요청 LOG 등록 -->
<update id="AdjReqMgrDAO.insertAdrMmsCustomSend" parameterClass="AdjReqMgrVO">
INSERT INTO ADR_MMS_MSG (
MSGKEY
,ID
,SUBJECT
,PHONE
,CALLBACK
,STATUS
,REQDATE
,MSG
,TYPE
,EMAIL_SEND_RESULT
) VALUES (
(SELECT IFNULL(MAX(MSGKEY), 0) + 1 FROM ADR_MMS_MSG)
,#trId#
,'[한국저작권위원회]'
,#trPhone#
,#sendTelNo#
,'0'
,SYSDATE
,#sendMsg#
,'0'
,#emailSendResult#
)
</update>
</sqlMap>

View File

@ -4,6 +4,7 @@
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="MsgMgrVO" type="kcc.kccadr.msg.service.MsgMgrVO"/>
<typeAlias alias="SmsMgrVO" type="kcc.kccadr.msg.service.SmsMgrVO"/>
<typeAlias alias="AdjReqMgrVO" type="kcc.kccadr.adjreqmgr.service.AdjReqMgrVO"/>
<!-- 발송문구 갯수 -->
<select id="MsgMgrDAO.msgMgrListCount" parameterClass="MsgMgrVO" resultClass="Integer">
@ -196,4 +197,31 @@
</insert>
<insert id="MsgMgrDAO.insertAdrSmsCustomLog" parameterClass="AdjReqMgrVO">
INSERT
INTO ADR_SMS_LOG
(
SMS_CN,
SMS_TY,
SMS_TO,
SMS_FROM,
ADR_NO,
SMS_SEND_PNTTM,
REGIST_PNTTM
)
VALUES
(
#sendMsg#,
#smsTy#,
#rpplNm#,
#trId#,
#adrNo#,
NOW(),
NOW()
)
</insert>
</sqlMap>

View File

@ -19,6 +19,7 @@
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<%@ taglib prefix="double-submit" uri="http://www.egovframe.go.kr/tags/double-submit/jsp" %>
<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<!DOCTYPE html>
<html>
<head>
@ -427,8 +428,9 @@ function authorChange(obj) {
<th><span class="reqArea">로그인 유형</span></th>
<td colspan="3">
<div class="radio_wrap">
<span><input type="radio" name="loginType" id="IP" class="radio2" value="IP"><label for="IP">IP제어</label></span>
<span><input type="radio" name="loginType" id="OTP" class="radio2" value="OTP" checked><label for="OTP">OTP</label></span>
<!-- <span><input type="radio" name="loginType" id="IP" class="radio2" value="IP"><label for="IP">IP제어</label></span>
<span><input type="radio" name="loginType" id="OTP" class="radio2" value="OTP" checked><label for="OTP">OTP</label></span> -->
<kc:radio codeId="CC051" name="loginType" id="loginType" selectedValue="002" />
</div>
</td>
</tr>

View File

@ -11,50 +11,70 @@
<title>사건메모</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
function fnSmsSend(){
var data = new FormData(document.smsForm);
$.ajax({
type: "POST",
url: "/kccadr/adjPgrMgr/apm/smsSendAjax.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("문자발송요청에 성공하였습니다.");
if(confirm("문자발송을 계속하시겠습니까?")){
}else{
window.close()
}
}else{
alert(returnData.message);
}
},
error: function (e) { alert("요청에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
</script>
</head>
<body>
<%-- <form id="memoForm" name="memoForm" onsubmit="return false;" method="post"> --%>
<%-- <input type="hidden" name="adrSeq" value="<c:out value="${apmVO.adrSeq}" />" /> --%>
<!-- <input type="hidden" id="adrCn" name="adrCn" value=""/> -->
<%-- </form> --%>
<div class="area_popup supm_popup" style="width: 800px;">
<div class="cont_popup">
<p class="tb_tit">문자 발송</p>
<table class="pop_tbType01">
<colgroup>
<col style="width: 20%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>전화번호</th>
<td>
<p><input type="text"/></p>
</td>
</tr>
<tr>
<th>내용</th>
<td>
<p><textarea rows="20" cols="30"></textarea></p>
</td>
</tr>
</tbody>
</table>
<div class="btn_wrap btn_layout04">
<%-- <c:if test="${memoVO.adrCn eq '' || memoVO.adrCn eq null}"> --%>
<!-- <button type="button" class="btnType06" onclick="fnMemo('insert'); return false;">등록</button> -->
<%-- </c:if> --%>
<%-- <c:if test="${memoVO.adrCn ne '' && memoVO.adrCn ne null}"> --%>
<!-- <button type="button" class="btnType06" onclick="fnMemo('modify'); return false;">수정</button> -->
<!-- <button type="button" class="btnType02" onclick="fnMemo('delete'); return false;">삭제</button> -->
<%-- </c:if> --%>
<button type="button" class="btnType06" onclick="window.close()">발송</button>
<button type="button" class="btnType03" onclick="window.close()">닫기</button>
<form id="smsForm" name="smsForm" onsubmit="return false;" method="post">
<input type="hidden" name="adrSeq" id="adrSeq" value="<c:out value="${adjReqMgrVO.adrSeq}" />" />
<input type="hidden" name="adrNo" id="adrNo" value="<c:out value="${adjReqMgrVO.adrNo}" />" />
<div class="area_popup supm_popup" style="width: 800px;">
<div class="cont_popup">
<p class="tb_tit">문자 발송</p>
<table class="pop_tbType01">
<colgroup>
<col style="width: 20%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>전화번호</th>
<td>
<p><input type="text" name="trPhone" id="trPhone"/></p>
</td>
</tr>
<tr>
<th>내용</th>
<td>
<p><textarea rows="50" cols="30" name="sendMsg" id="sendMsg"></textarea></p>
</td>
</tr>
</tbody>
</table>
<div class="btn_wrap btn_layout04">
<button type="button" class="btnType06" onclick="fnSmsSend();">발송</button>
<button type="button" class="btnType03" onclick="window.close()">닫기</button>
</div>
</div>
</div>
</div>
</form>
</body>
</html>