이준호 문자온 커밋

- (관리자)점검중페이지 관리 기능 추가
This commit is contained in:
leejunho 2023-07-12 14:16:46 +09:00
parent 7976d83eaf
commit 1dc6d2f759
9 changed files with 471 additions and 15 deletions

View File

@ -161,5 +161,7 @@ public interface EgovSiteManagerService {
int selectPersnalMemberCnt(String userId) throws Exception;
// 첫결제여부
int selectFirstPayCnt(String userId) throws Exception;
int selectFirstPayCnt(String userId) throws Exception;
void updateInspManage(SiteManagerVO siteManagerVO) throws Exception;
}

View File

@ -62,6 +62,8 @@ public class SiteManagerVO extends ComDefaultVO {
private String sessionTimeCdText; //세션타임 코드 텍스트
private String sessionTimeUserCd; //세션타임 사용자 코드 텍스트
private String sessionTimeUserCdTxt; //세션타임 사용자 코드 텍스트
private String sysMaintenance; //점검중페이지 노출여부
private String sysMaintenanceIp; //점검중페이지제외IP
public static long getSerialversionuid() {
return serialVersionUID;
@ -332,4 +334,21 @@ public class SiteManagerVO extends ComDefaultVO {
this.sessionTimeUserCdTxt = sessionTimeUserCdTxt;
}
public String getSysMaintenance() {
return sysMaintenance;
}
public void setSysMaintenance(String sysMaintenance) {
this.sysMaintenance = sysMaintenance;
}
public String getSysMaintenanceIp() {
return sysMaintenanceIp;
}
public void setSysMaintenanceIp(String sysMaintenanceIp) {
this.sysMaintenanceIp = sysMaintenanceIp;
}
}

View File

@ -5,6 +5,7 @@ import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import itn.let.sym.site.service.EgovSiteManagerService;
@ -388,5 +389,16 @@ public class EgovSiteManagerServiceImpl extends EgovAbstractServiceImpl implemen
@Override
public int selectFirstPayCnt(String userId) throws Exception{
return siteManagerDAO.selectFirstPayCnt(userId);
}
}
@Override
public void updateInspManage(SiteManagerVO siteManagerVO) throws Exception {
if(!StringUtils.isEmpty(siteManagerVO.getSysMaintenanceIp())) {
siteManagerVO.setSysMaintenanceIp(siteManagerVO.getSysMaintenanceIp().trim().replaceAll(" ", ""));
}
siteManagerDAO.updateInspManage(siteManagerVO);
}
}

View File

@ -370,6 +370,10 @@ public class SiteManagerDAO extends EgovAbstractDAO {
// 첫결제여부
public int selectFirstPayCnt(String userId) throws Exception{
return (int) select("siteManagerDAO.selectFirstPayCnt", userId);
}
}
public void updateInspManage(SiteManagerVO siteManagerVO) throws Exception{
update("siteManagerDAO.updateInspManage", siteManagerVO);
}
}

View File

@ -2469,4 +2469,46 @@ public class EgovSiteManagerController {
modelAndView.addObject("msg", msg);
return modelAndView;
}
/**
* 관리자 알림 여부
*
* @param joinSettingVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/sym/site/selectInspManage.do")
public String selectInspManage(ModelMap model) throws Exception {
model.addAttribute("model", egovSiteManagerService.selectSiteManagerVO(new SiteManagerVO()));
return "/sym/site/inspManage";
}
@RequestMapping("/sym/site/updateInspManageAjax.do")
public ModelAndView updateInspManage(SiteManagerVO siteManagerVO, ModelMap model) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
siteManagerVO.setLastUpdusrId(userId);
String msg = "저장되었습니다.";
String result = "SUCCESS";
try {
egovSiteManagerService.updateInspManage(siteManagerVO);
} catch (Exception e) {
System.out.println(e.getMessage());
msg = "저장에 실패했습니다.";
result = "fail";
}
model.addAttribute("msg", msg);
model.addAttribute("result", result);
return modelAndView;
}
}

View File

@ -13,6 +13,7 @@ import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
@ -50,6 +51,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@ -717,6 +719,23 @@ public class MainController {
ModelMap model, HttpServletRequest request)
throws Exception {
//점검중 페이지 체크
SiteManagerVO siteManagerVO_ = new SiteManagerVO();
siteManagerVO_ = egovSiteManagerService.selectSiteManagerVO(siteManagerVO_);
//1. 사이트 점검중 페이지 노출
//2. siteManager 테이블의 SYS_MAINTENANCE, SYS_MAINTENANCE_IP 통해 구분
//3. 점검중페이지 노출 방식
// 미사용 : 점검 페이지 미노출
// IP로제어 : 등록 IP를 제외하고 모든 페이지에서 '점검중' 레이어 노출
// PATH로제어 : '/web/main/mainPage.do' 메인페이지에 접근했을때만 점검중페이지로 이동
String userIP = this.getClientIP(request);
Boolean result = this.inspPageIp(request, userIP, siteManagerVO_);
if(!result) {
model.addAttribute("inspYn", "Y");
}
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
@ -1296,19 +1315,23 @@ public class MainController {
//점검중 페이지 체크
SiteManagerVO siteManagerVO = new SiteManagerVO();
siteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO);
if("Y".equals(siteManagerVO.getInspFlag() )){ //점검중
// if("Y".equals(siteManagerVO.getInspFlag() )){ //점검중
// return "web/com/insp";
// }
//1. 사이트 점검중 페이지 노출
//2. siteManager 테이블의 SYS_MAINTENANCE, SYS_MAINTENANCE_IP 통해 구분
//3. 점검중페이지 노출 방식
// 미사용 : 점검 페이지 미노출
// IP로제어 : 등록 IP를 제외하고 모든 페이지에서 '점검중' 레이어 노출
// PATH로제어 : '/web/main/mainPage.do' 메인페이지에 접근했을때만 점검중페이지로 이동
String userIP = this.getClientIP(request);
Boolean result = this.inspPagePath(request, userIP, siteManagerVO);
if(!result) {
return "web/com/insp";
}
/*LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
String authority = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
if("ROLE_ADMIN".equals(authority)) {
String referer = request.getHeader("Referer");
request.getSession().invalidate();
return "redirect:/web/main/mainPage.do";
}*/
//자신의 위치 정보
List<MenuManageJTreeVO> menuCurrentResultList = new ArrayList<MenuManageJTreeVO>(); //자신의 위치
@ -2695,6 +2718,229 @@ public class MainController {
modelAndView.addObject("msg", msg);
return modelAndView;
}
}
@RequestMapping(value = "/web/main/mainPage_insp.do")
public String mainPage_insp(HttpServletRequest request, ModelMap model, HttpSession session,
@RequestParam(value="message", defaultValue="0") String message, LetterVO letterVO) throws Exception{
//메인이미지
String referer = (String)request.getHeader("REFERER");
//로그인 실패시 메세지
if(!"0".equals(message)) {
model.addAttribute("messageflag", "1");
model.addAttribute("message", message);
}
//kisa 사용자 경고 팝업
LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(EgovUserDetailsHelper.isAuthenticated() && user!=null) {
KisaVO kisaVO = new KisaVO();
kisaVO.setMberId(user.getId());
kisaVO.setKisaPopupYn("Y");
List<KisaVO> kisaList = kisaService.selectKisaListMberId(kisaVO);
if(kisaList.size() > 0) {
//kisa 코드 조회
ComDefaultCodeVO kisacodeVO = new ComDefaultCodeVO();
kisacodeVO.setCodeId("ITN034");
List<?> kisacodeResult = cmmUseService.selectCmmCodeDetail(kisacodeVO);
model.addAttribute("kisacodeResult", kisacodeResult);
//위반 사항 안내 종합 (아이디별 kisalist의 각각 kisaWarnMessage를 한번에 보여주기 위해)
String[] chk = {};
ArrayList<String> kisaWarnMessagelist = new ArrayList<String>();
for(KisaVO tmpVO : kisaList) {
if(!"".equals(tmpVO.getKisaWarnMessage()) && tmpVO.getKisaWarnMessage() != null) {
chk = tmpVO.getKisaWarnMessage().split(",");
for(int i = 0 ; i < chk.length ; i++) {
if(!kisaWarnMessagelist.contains(chk[i])) {
kisaWarnMessagelist.add(chk[i]);
}
}
}
}
model.addAttribute("chk", kisaWarnMessagelist);
model.addAttribute("kisaListSize", kisaList.size());
model.addAttribute("kisaList", kisaList);
}
}
//공지사항 게시글 불러오기
BoardMasterVO boardMasterVO = new BoardMasterVO();
//공지사항 url로 전체게시글 불러오기
boardMasterVO.setUrl("/web/cop/bbs/NoticeList.do");
BoardMasterVO bmVO = new BoardMasterVO();
BoardVO boardVO = new BoardVO();
boardVO.setPageUnit(7);
boardVO.setPageSize(10);
if("".equals(boardMasterVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
boardMasterVO.setSearchSortCnd("nttId");
boardMasterVO.setSearchSortOrd("desc");
}
//전체 게시글 불러오기
Map<String, Object> map = new HashMap<String, Object>();
if(boardMasterVO.getPageUnit() != 10) {
bmVO.setPageUnit(boardMasterVO.getPageUnit());
}
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(bmVO.getPageIndex());
paginationInfo.setRecordCountPerPage(bmVO.getPageUnit());
paginationInfo.setPageSize(bmVO.getPageSize());
paginationInfo.setCurrentPageNo(boardVO.getPageIndex());
paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());
paginationInfo.setPageSize(boardVO.getPageSize());
boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex());
boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
String temp = boardMasterVO.getUrl(); //Url 패턴에 Ajax 구문 삭제처리
boardMasterVO.setUrl(temp.replace("Ajax", ""));
Map<String, Object> noticeMap = bbsMngService.selectBoardArticlesWebUrl(boardMasterVO, null);
if(!noticeMap.get("resultCnt").equals("0")){
@SuppressWarnings("unchecked")
ArrayList<BoardVO> boardList= (ArrayList<BoardVO>)noticeMap.get("resultList") ; //nttcn 태그 삭제 처리
for( BoardVO tempBoardVO : boardList){
if("".equals(tempBoardVO.getNttCn().replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", "").split("<")[0].equals(""))){
tempBoardVO.setNttCn ( tempBoardVO.getNttCn().replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", "")) ;
}else {
tempBoardVO.setNttCn( tempBoardVO.getNttCn().replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", "").split("<")[0] ) ;
}
}
model.addAttribute("noticeList", noticeMap.get("resultList"));
}
// 문자 카테고리 리스트 불러오기
List<CateCode> cateConfList = letterService.selectCateConfWithList("N");
model.addAttribute("cateCodeList", cateConfList);
// 맞춤문자 카테고리 리스트 불러오기
List<CateCode> cateConfCustomList = letterService.selectCateConfWithList("C");
model.addAttribute("cateConfCustomList", cateConfCustomList);
{
/**
*
* 이벤트를 위한 결제내역 조회
* 결제 내역이 없으면 첫결제 이벤트 팝업 호출 있도록 .
*
* */
String userId = user == null ? "" : EgovStringUtil.isNullToString(user.getId());
int payCnt = 0;
if(StringUtil.isNotEmpty(userId)) {
//결제내역 카운트 조회
payCnt = mjonPayService.selectMemerPayCount(userId);
}
model.addAttribute("payCount", payCnt);
model.addAttribute("userId", userId);
//현재 진행중 이벤트 조회(최저가 문자발송 이벤트 진행중인지 조회 - like 검색으로 진행중인 이벤트를 1개만 불러온다.)
//일단 테스트로 게시글 제목으로 조회하도록 .
String nttSj = "[첫결제 이벤트] 첫 결제 시, 누구나 조건 없이 인생 최저가!"; //제목 검색
BoardVO eventBoardVO = new BoardVO();
eventBoardVO.setBbsId("BBSMSTR_000000000731");
eventBoardVO.setNttSj(nttSj);
BoardVO resultEvent = mjonEventService.selectEventInfoByNttSj(eventBoardVO);
model.addAttribute("resultEvent", resultEvent);
String blineCode = "N";
if(StringUtil.isNotEmpty(userId)) {
// B선 전송사 사용여부
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(userId);
blineCode = mberManageService.selectBlineCodeByMberId(mberManageVO);
}
model.addAttribute("blineCode", blineCode);
}
return "web/main/mainPage";
}
private String getClientIP(HttpServletRequest request) {
String ip = "";
try {
ip = request.getHeader("X-Forwarded-For");
//logger.info("> X-FORWARDED-FOR : " + ip);
//System.out.println("> X-FORWARDED-FOR : " + ip);
if (ip == null) {
ip = request.getHeader("Proxy-Client-IP");
//System.out.println("> Proxy-Client-IP : " + ip);
}
if (ip == null) {
ip = request.getHeader("WL-Proxy-Client-IP");
//System.out.println("> WL-Proxy-Client-IP : " + ip);
}
if (ip == null) {
ip = request.getHeader("HTTP_CLIENT_IP");
//System.out.println("> HTTP_CLIENT_IP : " + ip);
}
if (ip == null) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
//System.out.println("> HTTP_X_FORWARDED_FOR : " + ip);
}
if (ip == null) {
ip = request.getRemoteAddr();
//System.out.println("> getRemoteAddr : "+ip);
}
//System.out.println("> Result : IP Address : "+ip);
}catch(Exception ex)
{
ex.printStackTrace();
}
return ip;
}
private Boolean inspPagePath(HttpServletRequest request, String userIP, SiteManagerVO siteManagerVO) {
// if("IP".equals(siteManagerVO.getSysMaintenance())) {
// if(!StringUtils.isEmpty(siteManagerVO.getSysMaintenanceIp())) {
// if(!Arrays.stream(siteManagerVO.getSysMaintenanceIp().split(",")).anyMatch(userIP::equals)) {
// /* 점검중 */
// return false;
// }
// } else {
// /* 점검중 */
// return false;
// }
// }
if("PATH".equals(siteManagerVO.getSysMaintenance())) {
if("/web/main/mainPage.do".equals(request.getRequestURI())) {
/* 점검중 */
return false;
}
}
return true;
}
private Boolean inspPageIp(HttpServletRequest request, String userIP, SiteManagerVO siteManagerVO) {
if("IP".equals(siteManagerVO.getSysMaintenance())) {
if(!StringUtils.isEmpty(siteManagerVO.getSysMaintenanceIp())) {
if(!Arrays.stream(siteManagerVO.getSysMaintenanceIp().split(",")).anyMatch(userIP::equals)) {
/* 점검중 */
return false;
}
} else {
/* 점검중 */
return false;
}
}
// if("PATH".equals(siteManagerVO.getSysMaintenance())) {
// if("/web/main/mainPage.do".equals(request.getRequestURI())) {
// /* 점검중 */
// return false;
// }
// }
return true;
}
}

View File

@ -48,7 +48,9 @@
A.TERMS_YN AS termsYn,
A.TERMS_CN AS termsCn,
C.CODE_DC AS sessionTimeCdText,
D.CODE_DC AS sessionTimeUserCdTxt
D.CODE_DC AS sessionTimeUserCdTxt,
A.SYS_MAINTENANCE AS sysMaintenance,
A.SYS_MAINTENANCE_IP AS sysMaintenanceIp
FROM SITEMANAGER A
LEFT JOIN LETTNFILEDETAIL B ON A.FAVICON_FILE_ID = B.ATCH_FILE_ID
LEFT JOIN (
@ -1358,5 +1360,15 @@
AND PG_STATUS = '1'
LIMIT 1
</select>
<update id="siteManagerDAO.updateInspManage" parameterClass="siteManagerVO">
UPDATE sitemanager
SET LAST_UPDUSR_ID = #lastUpdusrId#
,LAST_UPDT_PNTTM = now()
,SYS_MAINTENANCE = #sysMaintenance#
<isEqual property="sysMaintenance" compareValue="IP">
,SYS_MAINTENANCE_IP = #sysMaintenanceIp#
</isEqual>
</update>
</sqlMap>

View File

@ -0,0 +1,108 @@
<%@ 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 prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>점검중페이지관리</title>
<script type="text/javascript">
$(document).ready(function(){
disabledFn("<c:out value='${model.sysMaintenance}'/>");
});
function doUpdate() {
var data = new FormData(document.form);
var url = "/sym/site/updateInspManageAjax.do";
if (!confirm('수정하시겠습니까?'))
return;
$.ajax({
type: "POST",
url: url,
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(returnData.msg);
}else{
alert(returnData.msg);
}
},
error: function (e) { alert("요청에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
function disabledFn(pram){
if(pram == 'IP'){
$('#ipTable').find('input').removeAttr('disabled')
}else{
$('#ipTable').find('input').attr('disabled','disabled')
}
}
</script>
<style>
.cf_box{border: 2px solid #f5f7fa; border-radius: 5px; padding: 20px; margin: 0 0 20px 0; line-height:1.3;}
</style>
</head>
<body>
<div class="contWrap">
<div class="pageTitle">
<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
<h2 class="titType1 c_222222 fwBold">점검중페이지관리</h2>
<p class="tType6 c_999999">점검중페이지관리 페이지 입니다.</p>
</div>
<div class="pageCont">
<div class=cf_box>
<pre>
*방식 설명*
미사용 : 점검 중 페이지 미노출
IP로제어 : 등록 IP를 제외하고 모든 페이지에서 '점검중' 레이어 노출
PATH로제어 : '/web/main/mainPage.do' 메인페이지에 접근했을때만 점검중페이지로 이동
</pre>
</div>
<form name="form" id="form" method="post">
<div class="tableWrap">
<table class="tbType2">
<colgroup>
<col width="30%">
<col width="*">
</colgroup>
<tbody>
<tr>
<th>점검중 페이지 방식</th>
<td>
<select name="sysMaintenance" id="sysMaintenance" onchange="disabledFn(this.value); return false;">
<option value="NONE" <c:if test="${model.sysMaintenance == 'NONE'}">selected</c:if> >미사용</option>
<option value="IP" <c:if test="${model.sysMaintenance == 'IP'}">selected</c:if> >IP로 제어</option>
<option value="PATH" <c:if test="${model.sysMaintenance == 'PATH'}">selected</c:if> >PATH로 제어</option>
</select>
</td>
</tr>
<tr id="ipTable">
<th>IP테이블(IP로 선택 시 제외할 IP ','를 구분자로 기입)</th>
<td>
<input type="text" id="sysMaintenanceIp" name="sysMaintenanceIp" value="${model.sysMaintenanceIp}"/>
</td>
</tr>
</tbody>
</table>
</div>
</form>
<div class="btnWrap">
<input type="button" class="btnType1" value="수정" onclick="javascript:doUpdate(); return false;">
</div>
</div>
</div>
</body>
</html>

View File

@ -738,6 +738,17 @@ function actionLogin() {
}
</script>
<div class="mask"></div>
<c:if test="${inspYn == 'Y'}">
<style>
.mask_layer{position: fixed; background: white; width: 100%; height: 100%; z-index: 9999; text-align: center;}
.mask_layer .text_area{color: #000; position: relative; top: 50%; left: 50%; transform: translate(-50%, -50%);}
</style>
<div class="mask_layer">
<div class="text_area">
점검중임
</div>
</div>
</c:if>
<!-- 포인트 교환 팝업 -->
<form id="pointForm" name="pointForm" action="/web/member/pay/pointUseAjax.do" >
<input type="hidden" name="birthDate" value="000000" />