일, 월 회원 로그인 통계 화면 및 기능 추가
@1d57ffaed110bc3eed8a46480e556fa6683ff2e9
--- src/main/java/itn/let/sym/log/clg/service/EgovLoginLogService.java
+++ src/main/java/itn/let/sym/log/clg/service/EgovLoginLogService.java
... | ... | @@ -99,5 +99,7 @@ |
| 99 | 99 |
|
| 100 | 100 |
public List<LoginLog> selectDeviceLogList(LoginLog loginLog) throws Exception; |
| 101 | 101 |
|
| 102 |
- |
|
| 102 |
+ public List<LoginLog> SelectDauLoginLogList(LoginLog loginLog) throws Exception; |
|
| 103 |
+ |
|
| 104 |
+ public List<LoginLog> SelectMauLoginLogList(LoginLog loginLog) throws Exception; |
|
| 103 | 105 |
} |
--- src/main/java/itn/let/sym/log/clg/service/LoginLog.java
+++ src/main/java/itn/let/sym/log/clg/service/LoginLog.java
... | ... | @@ -128,6 +128,7 @@ |
| 128 | 128 |
private String conectId ; |
| 129 | 129 |
|
| 130 | 130 |
/*관리자 메소드 부분 추가*/ |
| 131 |
+ |
|
| 131 | 132 |
private String methodNm; //메소드 이름 |
| 132 | 133 |
|
| 133 | 134 |
private String param; //파라미터 |
... | ... | @@ -153,6 +154,39 @@ |
| 153 | 154 |
private int visitCnt; // 방문수 |
| 154 | 155 |
private String startDateType; // 시작날짜 |
| 155 | 156 |
|
| 157 |
+ |
|
| 158 |
+ private String regDate; // 일자 |
|
| 159 |
+ |
|
| 160 |
+ private String joinUserCnt; // 회원가입 회원수 |
|
| 161 |
+ |
|
| 162 |
+ private String loginUserCnt; // 로그인 회원수 |
|
| 163 |
+ |
|
| 164 |
+ private String userRatio; // 이용자 비율 |
|
| 165 |
+ |
|
| 166 |
+ public String getRegDate() {
|
|
| 167 |
+ return regDate; |
|
| 168 |
+ } |
|
| 169 |
+ public void setRegDate(String regDate) {
|
|
| 170 |
+ this.regDate = regDate; |
|
| 171 |
+ } |
|
| 172 |
+ public String getJoinUserCnt() {
|
|
| 173 |
+ return joinUserCnt; |
|
| 174 |
+ } |
|
| 175 |
+ public void setJoinUserCnt(String joinUserCnt) {
|
|
| 176 |
+ this.joinUserCnt = joinUserCnt; |
|
| 177 |
+ } |
|
| 178 |
+ public String getLoginUserCnt() {
|
|
| 179 |
+ return loginUserCnt; |
|
| 180 |
+ } |
|
| 181 |
+ public void setLoginUserCnt(String loginUserCnt) {
|
|
| 182 |
+ this.loginUserCnt = loginUserCnt; |
|
| 183 |
+ } |
|
| 184 |
+ public String getUserRatio() {
|
|
| 185 |
+ return userRatio; |
|
| 186 |
+ } |
|
| 187 |
+ public void setUserRatio(String userRatio) {
|
|
| 188 |
+ this.userRatio = userRatio; |
|
| 189 |
+ } |
|
| 156 | 190 |
public String getStartDateType() {
|
| 157 | 191 |
return startDateType; |
| 158 | 192 |
} |
... | ... | @@ -522,6 +556,4 @@ |
| 522 | 556 |
public void setmCnt(String mCnt) {
|
| 523 | 557 |
this.mCnt = mCnt; |
| 524 | 558 |
} |
| 525 |
- |
|
| 526 |
- |
|
| 527 | 559 |
} |
--- src/main/java/itn/let/sym/log/clg/service/impl/EgovLoginLogServiceImpl.java
+++ src/main/java/itn/let/sym/log/clg/service/impl/EgovLoginLogServiceImpl.java
... | ... | @@ -222,6 +222,16 @@ |
| 222 | 222 |
@Override |
| 223 | 223 |
public List<LoginLog> selectDeviceLogList(LoginLog loginLog) throws Exception {
|
| 224 | 224 |
return loginLogDAO.selectDeviceLogList(loginLog); |
| 225 |
+ } |
|
| 226 |
+ |
|
| 227 |
+ @Override |
|
| 228 |
+ public List<LoginLog> SelectDauLoginLogList(LoginLog loginLog) throws Exception {
|
|
| 229 |
+ return loginLogDAO.SelectDauLoginLogList(loginLog); |
|
| 230 |
+ } |
|
| 231 |
+ |
|
| 232 |
+ @Override |
|
| 233 |
+ public List<LoginLog> SelectMauLoginLogList(LoginLog loginLog) throws Exception {
|
|
| 234 |
+ return loginLogDAO.SelectMauLoginLogList(loginLog); |
|
| 225 | 235 |
} |
| 226 | 236 |
|
| 227 | 237 |
} |
--- src/main/java/itn/let/sym/log/clg/service/impl/LoginLogDAO.java
+++ src/main/java/itn/let/sym/log/clg/service/impl/LoginLogDAO.java
... | ... | @@ -198,4 +198,14 @@ |
| 198 | 198 |
return (List<LoginLog>)list("LoginLogDAO.selectDeviceLogList", loginLog);
|
| 199 | 199 |
} |
| 200 | 200 |
|
| 201 |
+ @SuppressWarnings("unchecked")
|
|
| 202 |
+ public List<LoginLog> SelectDauLoginLogList(LoginLog loginLog) throws Exception {
|
|
| 203 |
+ return (List<LoginLog>)list("LoginLogDAO.SelectDauLoginLogList", loginLog);
|
|
| 204 |
+ } |
|
| 205 |
+ |
|
| 206 |
+ @SuppressWarnings("unchecked")
|
|
| 207 |
+ public List<LoginLog> SelectMauLoginLogList(LoginLog loginLog) throws Exception {
|
|
| 208 |
+ return (List<LoginLog>)list("LoginLogDAO.SelectMauLoginLogList", loginLog);
|
|
| 209 |
+ } |
|
| 210 |
+ |
|
| 201 | 211 |
} |
--- src/main/java/itn/let/sym/log/clg/web/EgovLoginLogController.java
+++ src/main/java/itn/let/sym/log/clg/web/EgovLoginLogController.java
... | ... | @@ -37,6 +37,7 @@ |
| 37 | 37 |
import itn.com.cmm.EgovMessageSource; |
| 38 | 38 |
import itn.com.cmm.LoginVO; |
| 39 | 39 |
import itn.com.cmm.util.RedirectUrlMaker; |
| 40 |
+import itn.let.mjo.msg.service.MjonMsgVO; |
|
| 40 | 41 |
import itn.let.sym.log.clg.service.EgovLoginLogService; |
| 41 | 42 |
import itn.let.sym.log.clg.service.LoginLog; |
| 42 | 43 |
import itn.let.sym.log.clg.service.MsgLog; |
... | ... | @@ -425,7 +426,6 @@ |
| 425 | 426 |
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/log/clg/SelectLogMethodList.do");
|
| 426 | 427 |
return redirectUrlMaker.getRedirectUrl(); |
| 427 | 428 |
} |
| 428 |
- |
|
| 429 | 429 |
|
| 430 | 430 |
/*관리자로그설정관리 수정/view*/ |
| 431 | 431 |
@RequestMapping(value="/sym/log/clg/ViewLogMethod.do") |
... | ... | @@ -440,7 +440,6 @@ |
| 440 | 440 |
model.addAttribute("loginLog", loginLog);
|
| 441 | 441 |
return "sym/log/clg/ViewLogMethod"; |
| 442 | 442 |
} |
| 443 |
- |
|
| 444 | 443 |
|
| 445 | 444 |
/* 관리자로그설정관리 등록*/ |
| 446 | 445 |
@RequestMapping(value="/sym/log/clg/InsertLogMethod.do") |
... | ... | @@ -951,4 +950,64 @@ |
| 951 | 950 |
//model.addAttribute("paginationInfo", paginationInfo);
|
| 952 | 951 |
return "sym/log/clg/SelectMsgLogList"; |
| 953 | 952 |
} |
| 953 |
+ |
|
| 954 |
+ |
|
| 955 |
+ /** |
|
| 956 |
+ * @Method Name : SelectDauLoginLogList |
|
| 957 |
+ * @작성일 : 2023. 8. 22. |
|
| 958 |
+ * @작성자 : WYH |
|
| 959 |
+ * @변경이력 : |
|
| 960 |
+ * @Method 설명 : 일 이용자 수 통계 |
|
| 961 |
+ */ |
|
| 962 |
+ @RequestMapping(value = "/sym/log/clg/SelectDauLoginLogList.do") |
|
| 963 |
+ public String SelectDauLoginLogList( |
|
| 964 |
+ @ModelAttribute("searchVO") LoginLog loginLog
|
|
| 965 |
+ , @RequestParam Map<String, Object> commandMap |
|
| 966 |
+ , ModelMap model) throws Exception {
|
|
| 967 |
+ |
|
| 968 |
+ /** pageing */ |
|
| 969 |
+ PaginationInfo paginationInfo = new PaginationInfo(); |
|
| 970 |
+ paginationInfo.setCurrentPageNo(loginLog.getPageIndex()); |
|
| 971 |
+ paginationInfo.setRecordCountPerPage(loginLog.getPageUnit()); |
|
| 972 |
+ paginationInfo.setPageSize(loginLog.getPageSize()); |
|
| 973 |
+ |
|
| 974 |
+ loginLog.setFirstIndex(paginationInfo.getFirstRecordIndex()); |
|
| 975 |
+ loginLog.setLastIndex(paginationInfo.getLastRecordIndex()); |
|
| 976 |
+ loginLog.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); |
|
| 977 |
+ |
|
| 978 |
+ List<LoginLog> dauLoginLogList = loginLogService.SelectDauLoginLogList(loginLog); |
|
| 979 |
+ |
|
| 980 |
+ model.addAttribute("dauLoginLogList", dauLoginLogList);
|
|
| 981 |
+ paginationInfo.setTotalRecordCount(dauLoginLogList.size() > 0 ? ((LoginLog)dauLoginLogList.get(0)).getTotCnt() : 0); |
|
| 982 |
+ model.addAttribute("paginationInfo", paginationInfo);
|
|
| 983 |
+ |
|
| 984 |
+ return "sym/log/clg/SelectDauLoginLogList"; |
|
| 985 |
+ } |
|
| 986 |
+ |
|
| 987 |
+ |
|
| 988 |
+ /** |
|
| 989 |
+ * @Method Name : SelectMauLoginLogList |
|
| 990 |
+ * @작성일 : 2023. 8. 22. |
|
| 991 |
+ * @작성자 : WYH |
|
| 992 |
+ * @변경이력 : |
|
| 993 |
+ * @Method 설명 : 월 이용자 수 통계 |
|
| 994 |
+ */ |
|
| 995 |
+ @RequestMapping(value = "/sym/log/clg/SelectMauLoginLogList.do") |
|
| 996 |
+ public String SelectMauLoginLogList( |
|
| 997 |
+ @ModelAttribute("searchVO") LoginLog loginLog
|
|
| 998 |
+ , @RequestParam Map<String, Object> commandMap |
|
| 999 |
+ , ModelMap model) throws Exception {
|
|
| 1000 |
+ |
|
| 1001 |
+ if("".equals(loginLog.getSearchCnd()) || loginLog.getSearchCnd() == null){ //최초조회시 현재년도 조회
|
|
| 1002 |
+ LocalDate now = LocalDate.now(); |
|
| 1003 |
+ int year = now.getYear(); |
|
| 1004 |
+ loginLog.setSearchCnd(Integer.toString(year)); |
|
| 1005 |
+ } |
|
| 1006 |
+ |
|
| 1007 |
+ List<LoginLog> mauLoginLogList = loginLogService.SelectMauLoginLogList(loginLog); |
|
| 1008 |
+ |
|
| 1009 |
+ model.addAttribute("mauLoginLogList", mauLoginLogList);
|
|
| 1010 |
+ |
|
| 1011 |
+ return "sym/log/clg/SelectMauLoginLogList"; |
|
| 1012 |
+ } |
|
| 954 | 1013 |
} |
--- src/main/resources/egovframework/sqlmap/let/sym/log/clg/EgovLoginLog_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/sym/log/clg/EgovLoginLog_SQL_Mysql.xml
... | ... | @@ -974,6 +974,64 @@ |
| 974 | 974 |
ON A.days = C.mday |
| 975 | 975 |
ORDER BY days DESC |
| 976 | 976 |
|
| 977 |
- </select> |
|
| 977 |
+ </select> |
|
| 978 |
+ |
|
| 979 |
+ <select id="LoginLogDAO.SelectDauLoginLogList" parameterClass="loginLog" resultClass="loginLog"> |
|
| 980 |
+ SELECT |
|
| 981 |
+ COUNT(0) OVER() AS totCnt |
|
| 982 |
+ , M.REG_DATE AS regDate |
|
| 983 |
+ , M.REG_STEP_SUM AS joinUserCnt |
|
| 984 |
+ , D.TDAY_U_CNT AS loginUserCnt |
|
| 985 |
+ , ROUND((D.TDAY_U_CNT / M.REG_STEP_SUM) * 100,2) AS userRatio |
|
| 986 |
+ FROM |
|
| 987 |
+ (SELECT |
|
| 988 |
+ DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m-%d') AS REG_DATE |
|
| 989 |
+ , SUM(COUNT(0)) OVER(ORDER BY DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m-%d') ASC) AS REG_STEP_SUM |
|
| 990 |
+ FROM LETTNGNRLMBER L |
|
| 991 |
+ WHERE 1=1 |
|
| 992 |
+ AND L.MBER_STTUS = 'Y' |
|
| 993 |
+ <isNotEmpty prepend="AND" property="searchBgnDe"> |
|
| 994 |
+ <![CDATA[DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m-%d') >= DATE_FORMAT(#searchBgnDe#, '%Y-%m-%d')]]> |
|
| 995 |
+ </isNotEmpty> |
|
| 996 |
+ <isNotEmpty prepend="AND" property="searchEndDe"> |
|
| 997 |
+ <![CDATA[DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m-%d') <= DATE_FORMAT(#searchEndDe#, '%Y-%m-%d')]]> |
|
| 998 |
+ </isNotEmpty> |
|
| 999 |
+ GROUP BY DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m-%d') |
|
| 1000 |
+ ORDER BY DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m-%d') DESC |
|
| 1001 |
+ ) M |
|
| 1002 |
+ INNER JOIN MJ_DASH_STAT D |
|
| 1003 |
+ ON D.STAT_DATE = M.REG_DATE |
|
| 1004 |
+ WHERE 1=1 |
|
| 1005 |
+ ORDER BY M.REG_DATE DESC |
|
| 1006 |
+ LIMIT #recordCountPerPage# OFFSET #firstIndex# |
|
| 1007 |
+ </select> |
|
| 1008 |
+ |
|
| 1009 |
+ <select id="LoginLogDAO.SelectMauLoginLogList" parameterClass="loginLog" resultClass="loginLog"> |
|
| 1010 |
+ SELECT |
|
| 1011 |
+ COUNT(0) OVER() AS totCnt |
|
| 1012 |
+ , M.REG_DATE AS regDate |
|
| 1013 |
+ , M.REG_STEP_SUM AS joinUserCnt |
|
| 1014 |
+ , D.TDAY_U_CNT AS loginUserCnt |
|
| 1015 |
+ , ROUND((D.TDAY_U_CNT / M.REG_STEP_SUM) * 100,2) AS userRatio |
|
| 1016 |
+ FROM |
|
| 1017 |
+ (SELECT |
|
| 1018 |
+ DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m') AS REG_DATE |
|
| 1019 |
+ , SUM(COUNT(0)) OVER(ORDER BY DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m') ASC) AS REG_STEP_SUM |
|
| 1020 |
+ FROM |
|
| 1021 |
+ LETTNGNRLMBER L |
|
| 1022 |
+ WHERE 1=1 |
|
| 1023 |
+ AND L.MBER_STTUS = 'Y' |
|
| 1024 |
+ GROUP BY DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m') |
|
| 1025 |
+ ORDER BY DATE_FORMAT(L.APPROVAL_PNTTM, '%Y-%m') DESC |
|
| 1026 |
+ )M |
|
| 1027 |
+ INNER JOIN MJ_DASH_STAT D |
|
| 1028 |
+ ON DATE_FORMAT(D.STAT_DATE, '%Y-%m') = M.REG_DATE |
|
| 1029 |
+ WHERE 1=1 |
|
| 1030 |
+ <isNotEmpty prepend="AND" property="searchCnd"> |
|
| 1031 |
+ <![CDATA[ DATE_FORMAT(D.STAT_DATE, '%Y') IN (#searchCnd#) ]]> |
|
| 1032 |
+ </isNotEmpty> |
|
| 1033 |
+ GROUP BY DATE_FORMAT(D.STAT_DATE, '%Y-%m') |
|
| 1034 |
+ ORDER BY M.REG_DATE DESC |
|
| 1035 |
+ </select> |
|
| 978 | 1036 |
</sqlMap> |
| 979 | 1037 |
|
+++ src/main/webapp/WEB-INF/jsp/sym/log/clg/SelectDauLoginLogList.jsp
... | ... | @@ -0,0 +1,188 @@ |
| 1 | +<%@ page contentType="text/html; charset=utf-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> | |
| 5 | +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> | |
| 6 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> | |
| 7 | +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> | |
| 8 | +<% | |
| 9 | + response.setHeader("Cache-Control","no-store"); | |
| 10 | + response.setHeader("Pragma","no-cache"); | |
| 11 | + response.setDateHeader("Expires",0); | |
| 12 | + if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache"); | |
| 13 | +%> | |
| 14 | + | |
| 15 | +<meta http-equiv="content-type" content="text/html; charset=utf-8"> | |
| 16 | +<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script> | |
| 17 | +<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script> | |
| 18 | +<script type="text/javaScript" language="javascript"> | |
| 19 | +function fn_search(){ | |
| 20 | + linkPage(1); | |
| 21 | +} | |
| 22 | + | |
| 23 | +function linkPage(pageNo){ | |
| 24 | + var listForm = document.listForm ; | |
| 25 | + listForm.pageIndex.value = pageNo ; | |
| 26 | + | |
| 27 | + if( $('#searchBgnDeYYYMMDD').val() != '' && $('#searchEndDeYYYMMDD').val() != '' ){ | |
| 28 | + var iChkBeginDe = Number($('#searchBgnDeYYYMMDD').val().replaceAll("-", "")); | |
| 29 | + var iChkEndDe = Number($('#searchEndDeYYYMMDD').val().replaceAll("-", "")); | |
| 30 | + if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){ | |
| 31 | + alert("검색 시작 일자는 종료 일자 보다 클 수 없습니다."); | |
| 32 | + return; | |
| 33 | + } | |
| 34 | + } | |
| 35 | + | |
| 36 | + $('#searchBgnDe').val($('#searchBgnDeYYYMMDD').val()) ; | |
| 37 | + $('#searchEndDe').val($('#searchEndDeYYYMMDD').val()) ; | |
| 38 | + | |
| 39 | + listForm.submit(); | |
| 40 | +} | |
| 41 | + | |
| 42 | +/* 날짜 초기화 */ | |
| 43 | +function init_date(){ | |
| 44 | + $('#ntceBgndeYYYMMDD').val(''); | |
| 45 | + $('#ntceEnddeYYYMMDD').val(''); | |
| 46 | + $('#ntceBgnde').val(''); | |
| 47 | + $('#ntceEndde').val(''); | |
| 48 | +} | |
| 49 | + | |
| 50 | +//기간선택 select | |
| 51 | +function fnSetCalMonth(val) { | |
| 52 | + if(val == 0) { | |
| 53 | + init_date(); | |
| 54 | + return; | |
| 55 | + } | |
| 56 | + | |
| 57 | + var form = document.listForm; | |
| 58 | + var today = new Date(); | |
| 59 | + | |
| 60 | + var year = today.getFullYear(); | |
| 61 | + var month = ("0"+(today.getMonth()+1)).slice(-2); | |
| 62 | + var date = ("0"+today.getDate()).slice(-2); | |
| 63 | + | |
| 64 | + var sDate = new Date(today.setMonth(today.getMonth() - val)); | |
| 65 | + | |
| 66 | + var sYear = sDate.getFullYear(); | |
| 67 | + var sMonth = ("0"+(sDate.getMonth()+1)).slice(-2); | |
| 68 | + var sDate = ("0"+sDate.getDate()).slice(-2); | |
| 69 | + | |
| 70 | + form.searchBgnDeYYYMMDD.value = sYear + "-" + sMonth + "-" + sDate; | |
| 71 | + form.searchEndDeYYYMMDD.value = year + "-" + month + "-" + date; | |
| 72 | + | |
| 73 | +} | |
| 74 | +</script> | |
| 75 | +<style> | |
| 76 | +.calBtn { | |
| 77 | + border: none; | |
| 78 | + background-color: transparent !important; | |
| 79 | + background-image: url(/pb/img/common/calendarIcon.png); | |
| 80 | + background-repeat: no-repeat; | |
| 81 | + width: 25px; | |
| 82 | + height: 25px !important; | |
| 83 | + vertical-align: middle; | |
| 84 | + margin-left: -38px !important; | |
| 85 | + margin-top: -2px !important; | |
| 86 | + cursor: pointer; | |
| 87 | +} | |
| 88 | +</style> | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | +<form name="listForm" action="<c:url value='/sym/log/clg/SelectDauLoginLogList.do'/>" method="post"> | |
| 93 | + <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/> | |
| 94 | + <input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" /> | |
| 95 | + <input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" /> | |
| 96 | + <input type="hidden" name="searchBgnDe" id="searchBgnDe" value="<c:out value="${searchVO.searchBgnDe}" />"> | |
| 97 | + <input type="hidden" name="searchEndDe" id="searchEndDe" value="<c:out value="${searchVO.searchEndDe}" />"> | |
| 98 | + | |
| 99 | + <div class="contWrap"> | |
| 100 | + <div class="pageTitle"> | |
| 101 | + <div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div> | |
| 102 | + <h2 class="titType1 c_222222 fwBold">DAU(일 이용자 수)</h2> | |
| 103 | + <p class="tType6 c_999999">일 기준 순 이용자(1회라도 로그인 한 이용자, 중복제거)를 확인할 수 있습니다.</p> | |
| 104 | + </div> | |
| 105 | + | |
| 106 | + <div class="pageCont"> | |
| 107 | + <div class="listSerch"> | |
| 108 | + <select name="setCalMonth" onchange="fnSetCalMonth(this.value)"> | |
| 109 | + <option value="0">전체</option> | |
| 110 | + <option value="1">1개월</option> | |
| 111 | + <option value="3">3개월</option> | |
| 112 | + <option value="6">6개월</option> | |
| 113 | + </select> | |
| 114 | + <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.searchBgnDeYYYMMDD);"> | |
| 115 | + <input style="width:auto;min-width: 83px;" type="text" class="date_format" name="searchBgnDeYYYMMDD" id="searchBgnDeYYYMMDD" size="4" maxlength="4" readonly="" | |
| 116 | + value="<c:out value="${searchVO.searchBgnDe}" />" > | |
| 117 | + <input type="button" class="calBtn"> | |
| 118 | + </a> | |
| 119 | + <span class="line"> ~</span> | |
| 120 | + <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.searchEndDeYYYMMDD);"> | |
| 121 | + <input style="width:auto;min-width: 83px;" type="text" class="date_format" name="searchEndDeYYYMMDD" id="searchEndDeYYYMMDD" size="4" maxlength="4" readonly="" | |
| 122 | + value="<c:out value="${searchVO.searchEndDe}" />" > | |
| 123 | + <input type="button" class="calBtn"> | |
| 124 | + </a> | |
| 125 | + <a href="#" style="margin-left: 17px;" onclick="init_date(); return false;"> | |
| 126 | + <img src="/pb/img/common/topTimeOut.png" alt="타임아웃 아이콘"> | |
| 127 | + </a> | |
| 128 | + <input type="button" class="btnType1" style="margin-left:10px;" value="검색" onclick="fn_search(); return false;"> | |
| 129 | + | |
| 130 | + </div> | |
| 131 | + <div class="listTop"> | |
| 132 | + <p class="tType5"> | |
| 133 | + 총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건 | |
| 134 | + </p> | |
| 135 | + <div class="rightWrap"> | |
| 136 | + <!-- <input type="button" class="printBtn"> --> | |
| 137 | + <select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);"> | |
| 138 | + <option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option> | |
| 139 | + <option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option> | |
| 140 | + <option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option> | |
| 141 | + </select> | |
| 142 | + </div> | |
| 143 | + </div> | |
| 144 | + <div class="tableWrap"> | |
| 145 | + <table class="tbType1"> | |
| 146 | + <colgroup> | |
| 147 | + <col style="width: auto;"> | |
| 148 | + <col style="width: 25%"> | |
| 149 | + <col style="width: 25%"> | |
| 150 | + <col style="width: 25%"> | |
| 151 | + </colgroup> | |
| 152 | + <thead> | |
| 153 | + <tr> | |
| 154 | + <th>일자</th> | |
| 155 | + <th>회원수</th> | |
| 156 | + <th>순 이용자</th> | |
| 157 | + <th>순 이용자 비율</th> | |
| 158 | + </tr> | |
| 159 | + </thead> | |
| 160 | + <tbody> | |
| 161 | + <c:forEach var="result" items="${dauLoginLogList}" varStatus="status"> | |
| 162 | + <tr> | |
| 163 | + <td><c:out value="${result.regDate}"/></td> | |
| 164 | + <td><fmt:formatNumber value="${result.joinUserCnt}" pattern="#,###" /></td> | |
| 165 | + <td><fmt:formatNumber value="${result.loginUserCnt}" pattern="#,###" /></td> | |
| 166 | + <td><c:out value="${result.userRatio}"/>%</td> | |
| 167 | + </tr> | |
| 168 | + </c:forEach> | |
| 169 | + <c:if test="${empty dauLoginLogList}"> | |
| 170 | + <tr><td colspan="4"><spring:message code="common.nodata.msg" /></td></tr> | |
| 171 | + </c:if> | |
| 172 | + </tbody> | |
| 173 | + </table> | |
| 174 | + </div> | |
| 175 | + <div class="btnWrap"> | |
| 176 | + </div> | |
| 177 | + <!-- 페이지 네비게이션 시작 --> | |
| 178 | + <c:if test="${!empty dauLoginLogList}"> | |
| 179 | + <div class="page"> | |
| 180 | + <ul class="inline"> | |
| 181 | + <ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" /> | |
| 182 | + </ul> | |
| 183 | + </div> | |
| 184 | + </c:if> | |
| 185 | + <!-- //페이지 네비게이션 끝 --> | |
| 186 | + </div> | |
| 187 | + </div> | |
| 188 | +</form> |
+++ src/main/webapp/WEB-INF/jsp/sym/log/clg/SelectMauLoginLogList.jsp
... | ... | @@ -0,0 +1,86 @@ |
| 1 | +<%@ page contentType="text/html; charset=utf-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> | |
| 5 | +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> | |
| 6 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> | |
| 7 | +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> | |
| 8 | +<% | |
| 9 | + response.setHeader("Cache-Control","no-store"); | |
| 10 | + response.setHeader("Pragma","no-cache"); | |
| 11 | + response.setDateHeader("Expires",0); | |
| 12 | + if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache"); | |
| 13 | +%> | |
| 14 | +<title>월별 회원가입건수 통계</title> | |
| 15 | +<meta http-equiv="content-type" content="text/html; charset=utf-8"> | |
| 16 | +<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script> | |
| 17 | +<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script> | |
| 18 | +<script type="text/javaScript" language="javascript"> | |
| 19 | + $(document).ready(function(){ | |
| 20 | + var date = new Date(); | |
| 21 | + var year = date.getFullYear(); | |
| 22 | + | |
| 23 | + var startY = Number(year); | |
| 24 | + var endY = 2021; | |
| 25 | + for(var y = startY; y>= endY; y-- ){ | |
| 26 | + $('#searchYear').append("<option value='"+y+"'>" + y+"년"+"</option>") | |
| 27 | + } | |
| 28 | + $('#searchYear').find('option[value="${searchVO.searchCnd}"]').attr("selected",true); | |
| 29 | + }); | |
| 30 | + | |
| 31 | + function linkPage(){ | |
| 32 | + var listForm = document.listForm ; | |
| 33 | + $('#searchCnd').val($('#searchYear option:selected').val()); | |
| 34 | + listForm.submit(); | |
| 35 | + } | |
| 36 | + | |
| 37 | +</script> | |
| 38 | + | |
| 39 | +<form name="listForm" action="<c:url value='/sym/log/clg/SelectMauLoginLogList.do'/>" method="post"> | |
| 40 | + <input type="hidden" name="searchCnd" id="searchCnd" value=""> | |
| 41 | + | |
| 42 | + <div class="contWrap"> | |
| 43 | + <div class="pageTitle"> | |
| 44 | + <div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div> | |
| 45 | + <h2 class="titType1 c_222222 fwBold">MAU(월 이용자 수)</h2> | |
| 46 | + <p class="tType6 c_999999">월 기준 순 이용자(1회라도 로그인 한 이용자, 중복제거)를 확인할 수 있습니다..</p> | |
| 47 | + </div> | |
| 48 | + | |
| 49 | + <div class="pageCont"> | |
| 50 | + <div class="listSerch"> | |
| 51 | + <select id="searchYear" name="searchYear" onchange="linkPage();"></select> | |
| 52 | + </div> | |
| 53 | + <div class="tableWrap"> | |
| 54 | + <table class="tbType1"> | |
| 55 | + <colgroup> | |
| 56 | + <col style="width: 20%"> | |
| 57 | + <col style="width: 20%"> | |
| 58 | + <col style="width: 20%"> | |
| 59 | + <col style="width: 20%"> | |
| 60 | + </colgroup> | |
| 61 | + <thead> | |
| 62 | + <tr> | |
| 63 | + <th>일자</th> | |
| 64 | + <th>회원수</th> | |
| 65 | + <th>순 이용자</th> | |
| 66 | + <th>순 이용자 비율</th> | |
| 67 | + </tr> | |
| 68 | + </thead> | |
| 69 | + <tbody> | |
| 70 | + <c:forEach var="result" items="${mauLoginLogList}" varStatus="status"> | |
| 71 | + <tr> | |
| 72 | + <td><c:out value="${result.regDate}"/></td> | |
| 73 | + <td><fmt:formatNumber value="${result.joinUserCnt}" pattern="#,###" /></td> | |
| 74 | + <td><fmt:formatNumber value="${result.loginUserCnt}" pattern="#,###" /></td> | |
| 75 | + <td><c:out value="${result.userRatio}"/>%</td> | |
| 76 | + </tr> | |
| 77 | + </c:forEach> | |
| 78 | + <c:if test="${empty mauLoginLogList}"> | |
| 79 | + <tr><td colspan="4"><spring:message code="common.nodata.msg" /></td></tr> | |
| 80 | + </c:if> | |
| 81 | + </tbody> | |
| 82 | + </table> | |
| 83 | + </div> | |
| 84 | + </div> | |
| 85 | + </div> | |
| 86 | +</form>(No newline at end of file) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?