8 Commits

Author SHA1 Message Date
dca7c687c8 Merge pull request '날짜표기수정' (#26) from feature/counting into master
All checks were successful
Main-Build / build-and-push (push) Successful in 26s
Reviewed-on: #26
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2026-01-08 00:38:44 +00:00
revlis44
d0b75f6d83 날짜표기수정
All checks were successful
PR-CI / build-test (pull_request) Successful in 16s
2026-01-08 09:37:48 +09:00
9b35c0e445 Merge pull request 'css' (#25) from feature/counting into master
All checks were successful
Main-Build / build-and-push (push) Successful in 26s
Reviewed-on: #25
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2026-01-07 23:45:53 +00:00
revlis44
d797aae068 css
All checks were successful
PR-CI / build-test (pull_request) Successful in 16s
2026-01-08 08:45:13 +09:00
5ca0ea9c92 Merge pull request 'css cash refresh' (#24) from feature/counting into master
All checks were successful
Main-Build / build-and-push (push) Successful in 27s
Reviewed-on: #24
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2026-01-06 02:40:37 +00:00
revlis44
e546b17ff5 css cash refresh
All checks were successful
PR-CI / build-test (pull_request) Successful in 17s
2026-01-06 11:40:06 +09:00
441754d72c Merge pull request '처리 현황 집계 기준을 지난 한달간으로 변경하고 막대그래프 제목 아래에 연간요청현황 추가' (#23) from feature/counting into master
All checks were successful
Main-Build / build-and-push (push) Successful in 29s
Reviewed-on: #23
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2026-01-06 02:31:17 +00:00
revlis44
baf73eb534 처리 현황 집계 기준을 지난 한달간으로 변경하고 막대그래프 제목 아래에 연간요청현황 추가
All checks were successful
PR-CI / build-test (pull_request) Successful in 19s
처리 현황이 업데이트 되면 즉시 집계에 반영되도록 변경
2026-01-06 11:28:51 +09:00
12 changed files with 223 additions and 60 deletions

View File

@@ -46,6 +46,10 @@ extends EgovComAbstractDAO {
return (Integer)this.select("dmsHdbDAO.selectDmsHdbListTotCnt_S", (Object)searchVO); return (Integer)this.select("dmsHdbDAO.selectDmsHdbListTotCnt_S", (Object)searchVO);
} }
public List selectDmsHdbStat(DmsHdbDefaultVO searchVO) throws Exception {
return this.list("dmsHdbDAO.selectDmsHdbStat_D", (Object)searchVO);
}
public List selectDmsHdbReplyList(DmsHdbDefaultVO searchVO) { public List selectDmsHdbReplyList(DmsHdbDefaultVO searchVO) {
return this.list("dmsHdbDAO.selectDmsHdbReplyList_D", (Object)searchVO); return this.list("dmsHdbDAO.selectDmsHdbReplyList_D", (Object)searchVO);
} }
@@ -70,8 +74,10 @@ extends EgovComAbstractDAO {
return (List<DmsHdbGraphVO>) this.list("dmsHdbDAO.selectDmsHdbPerYearChart", (Object)searchVO); return (List<DmsHdbGraphVO>) this.list("dmsHdbDAO.selectDmsHdbPerYearChart", (Object)searchVO);
} }
public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO searchVO) { /*
return (DmsHdbGraphVO)this.select("dmsHdbDAO.selectDmsHdbForMonthChart", (Object)searchVO); * public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO searchVO) {
} * return (DmsHdbGraphVO)this.select("dmsHdbDAO.selectDmsHdbForMonthChart",
* (Object)searchVO); }
*/
} }

View File

@@ -32,6 +32,8 @@ public interface DmsHdbService {
public int selectDmsHdbListTotCnt(DmsHdbDefaultVO var1); public int selectDmsHdbListTotCnt(DmsHdbDefaultVO var1);
public List selectDmsHdbStat(DmsHdbDefaultVO var1) throws Exception;
public String checkFileWhiteList(MultipartHttpServletRequest var1, String var2, String var3) throws Exception; public String checkFileWhiteList(MultipartHttpServletRequest var1, String var2, String var3) throws Exception;
public List selectDmsHdbReplyList(DmsHdbDefaultVO var1); public List selectDmsHdbReplyList(DmsHdbDefaultVO var1);
@@ -46,6 +48,6 @@ public interface DmsHdbService {
public List<DmsHdbGraphVO> selectDmsHdbPerYearChart(DmsHdbDefaultVO var1); public List<DmsHdbGraphVO> selectDmsHdbPerYearChart(DmsHdbDefaultVO var1);
public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO var1); /* public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO var1); */
} }

View File

@@ -20,7 +20,10 @@ import egovframework.dms.prj.vo.DmsPrjDefaultVO;
import egovframework.edosi.egov.helper.UserDetailsHelper; import egovframework.edosi.egov.helper.UserDetailsHelper;
import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@@ -128,13 +131,33 @@ public class DmsHdbServiceImpl implements DmsHdbService {
return resultVO; return resultVO;
} }
public List selectDmsHdbList(DmsHdbDefaultVO searchVO) throws Exception { @SuppressWarnings("unchecked")
return this.dmsHdbDAO.selectDmsHdbList(searchVO); public List<EgovMap> selectDmsHdbList(DmsHdbDefaultVO searchVO) throws Exception {
List<EgovMap> list = this.dmsHdbDAO.selectDmsHdbList(searchVO);
for (EgovMap map : list) {
Object createDateObj = map.get("createDate");
if (createDateObj != null) {
// ISO 문자열: 2025-11-11T11:44:43
String createDateStr = createDateObj.toString();
// T → 공백 치환
map.put("createDate", createDateStr.replace('T', ' '));
}
}
return list;
} }
public int selectDmsHdbListTotCnt(DmsHdbDefaultVO searchVO) { public int selectDmsHdbListTotCnt(DmsHdbDefaultVO searchVO) {
return this.dmsHdbDAO.selectDmsHdbListTotCnt(searchVO); return this.dmsHdbDAO.selectDmsHdbListTotCnt(searchVO);
} }
public List selectDmsHdbStat(DmsHdbDefaultVO searchVO) throws Exception {
return this.dmsHdbDAO.selectDmsHdbStat(searchVO);
}
public String addMultiFiles(MultipartHttpServletRequest multiRequest, String targetNm) throws Exception { public String addMultiFiles(MultipartHttpServletRequest multiRequest, String targetNm) throws Exception {
multiRequest.setCharacterEncoding("utf-8"); multiRequest.setCharacterEncoding("utf-8");
@@ -301,7 +324,8 @@ public class DmsHdbServiceImpl implements DmsHdbService {
return this.dmsHdbDAO.selectDmsHdbPerYearChart(searchVO); return this.dmsHdbDAO.selectDmsHdbPerYearChart(searchVO);
} }
public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO searchVO) { /*
return this.dmsHdbDAO.selectDmsHdbForMonthChart(searchVO); * public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO searchVO) {
} * return this.dmsHdbDAO.selectDmsHdbForMonthChart(searchVO); }
*/
} }

View File

@@ -46,6 +46,7 @@ import egovframework.edosi.egov.helper.UserDetailsHelper;
import egovframework.edosi.filter.XssFilter; import egovframework.edosi.filter.XssFilter;
import egovframework.edosi.resource.EdosiResource; import egovframework.edosi.resource.EdosiResource;
import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
@@ -86,9 +87,6 @@ public class DmsHdbController {
String prjSeq = request.getParameter("prjSeq"); String prjSeq = request.getParameter("prjSeq");
Map<String, Object> prjInfo = (Map<String, Object>) request.getSession().getAttribute("prjInfo"); Map<String, Object> prjInfo = (Map<String, Object>) request.getSession().getAttribute("prjInfo");
String prjNm = prjInfo == null ? null : (String) prjInfo.get("prjNm"); String prjNm = prjInfo == null ? null : (String) prjInfo.get("prjNm");
String hdbStsA = prjInfo == null ? null : (String) prjInfo.get("hdbStsA");
String hdbStsB = prjInfo == null ? null : (String) prjInfo.get("hdbStsB");
String hdbStsC = prjInfo == null ? null : (String) prjInfo.get("hdbStsC");
if (moveDetail != null || prjSeq != null) { if (moveDetail != null || prjSeq != null) {
request.getSession().setAttribute("prjSeq", (Object)prjSeq); request.getSession().setAttribute("prjSeq", (Object)prjSeq);
@@ -114,9 +112,6 @@ public class DmsHdbController {
model.addAttribute("ROLE_CUS", (Object)UserDetailsHelper.isRole((String)"ROLE_CUS")); model.addAttribute("ROLE_CUS", (Object)UserDetailsHelper.isRole((String)"ROLE_CUS"));
model.addAttribute("ROLE_EMP", (Object)UserDetailsHelper.isRole((String)"ROLE_EMP")); model.addAttribute("ROLE_EMP", (Object)UserDetailsHelper.isRole((String)"ROLE_EMP"));
model.addAttribute("prjNm", prjNm); model.addAttribute("prjNm", prjNm);
model.addAttribute("hdbStsA", hdbStsA);
model.addAttribute("hdbStsB", hdbStsB);
model.addAttribute("hdbStsC", hdbStsC);
this.initModelData(model, bmode); this.initModelData(model, bmode);
return viewName; return viewName;
} }
@@ -159,6 +154,12 @@ public class DmsHdbController {
if (totCnt > 0) { if (totCnt > 0) {
List dmsHdbList = this.dmsHdbService.selectDmsHdbList(searchVO); List dmsHdbList = this.dmsHdbService.selectDmsHdbList(searchVO);
model.addAttribute("resultList", (Object)dmsHdbList); model.addAttribute("resultList", (Object)dmsHdbList);
List dmsHdbStatList = this.dmsHdbService.selectDmsHdbStat(searchVO);
EgovMap dmsHdbStat = null;
if (dmsHdbStatList != null && !dmsHdbStatList.isEmpty()) {
dmsHdbStat = (EgovMap) dmsHdbStatList.get(0);
}
model.addAttribute("dmsHdbStat", (Object)dmsHdbStat);
} }
} }
catch (Exception e) { catch (Exception e) {
@@ -170,8 +171,11 @@ public class DmsHdbController {
List<DmsHdbGraphVO> annualList = dmsHdbService.selectDmsHdbPerYearChart(searchVO); List<DmsHdbGraphVO> annualList = dmsHdbService.selectDmsHdbPerYearChart(searchVO);
model.addAttribute("annualList", annualList); model.addAttribute("annualList", annualList);
DmsHdbGraphVO monthlyList = dmsHdbService.selectDmsHdbForMonthChart(searchVO); /*
model.addAttribute("monthlyList", monthlyList); * DmsHdbGraphVO monthlyList =
* dmsHdbService.selectDmsHdbForMonthChart(searchVO);
* model.addAttribute("monthlyList", monthlyList);
*/
// model.addAttribute("year", year); // model.addAttribute("year", year);
return "dms/dmsHdb/DmsHdbList"; return "dms/dmsHdb/DmsHdbList";

View File

@@ -51,9 +51,6 @@ public class TemplateController {
HashMap<String, String> prjInfo = new HashMap<String, String>(); HashMap<String, String> prjInfo = new HashMap<String, String>();
prjInfo.put("prjSeq", prjSeq); prjInfo.put("prjSeq", prjSeq);
prjInfo.put("prjNm", dmsPrjVO.getPrjNm()); prjInfo.put("prjNm", dmsPrjVO.getPrjNm());
prjInfo.put("hdbStsA", request.getParameter("hdbStsA"));
prjInfo.put("hdbStsB", request.getParameter("hdbStsB"));
prjInfo.put("hdbStsC", request.getParameter("hdbStsC"));
request.getSession().setAttribute("prjInfo", prjInfo); request.getSession().setAttribute("prjInfo", prjInfo);
} }
} }

View File

@@ -171,6 +171,77 @@
</select> </select>
<select id="dmsHdbDAO.selectDmsHdbStat_D" parameterClass="dmsHdbSerarchVO" resultClass="egovMap">
SELECT
COUNT(CASE
WHEN B.HDB_STS = 'A'
AND B.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY)
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsA
, COUNT(CASE
WHEN B.HDB_STS = 'B'
AND B.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY)
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsB
, COUNT(CASE
WHEN B.HDB_STS = 'C'
AND B.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY)
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsC
, COUNT(CASE
WHEN B.HDB_STS = 'A'
AND YEAR(B.CREATE_DATE) = YEAR(NOW())
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsYrA
, COUNT(CASE
WHEN B.HDB_STS = 'B'
AND YEAR(B.CREATE_DATE) = YEAR(NOW())
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsYrB
, COUNT(CASE
WHEN B.HDB_STS = 'C'
AND YEAR(B.CREATE_DATE) = YEAR(NOW())
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsYrC
FROM
DMS_HDB B
WHERE 1=1
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
<isNotEmpty property="prjSeq" prepend="AND">
B.PRJ_SEQ = #prjSeq#
</isNotEmpty>
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="1" prepend="AND">
B.TITLE LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
<isEqual property="searchCondition" compareValue="2" prepend="AND">
B.WRITER_NM LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
</isNotEmpty>
</select>
<select id="dmsHdbDAO.selectDmsHdbListTotCnt_S" parameterClass="dmsHdbSerarchVO" resultClass="int"> <select id="dmsHdbDAO.selectDmsHdbListTotCnt_S" parameterClass="dmsHdbSerarchVO" resultClass="int">
SELECT SELECT
COUNT(*) totcnt COUNT(*) totcnt
@@ -306,7 +377,7 @@
</select> </select>
<!-- 현재 기준 한달간 현황 donut chart --> <!-- 현재 기준 한달간 현황 donut chart -->
<select id="dmsHdbDAO.selectDmsHdbForMonthChart" parameterClass="dmsHdbSerarchVO" resultClass="egovframework.dms.hdb.vo.DmsHdbGraphVO"> <!-- <select id="dmsHdbDAO.selectDmsHdbForMonthChart" parameterClass="dmsHdbSerarchVO" resultClass="egovframework.dms.hdb.vo.DmsHdbGraphVO">
SELECT SELECT
COUNT(CASE WHEN HDB_STS = 'A' THEN 1 END) AS hdbStsA, COUNT(CASE WHEN HDB_STS = 'A' THEN 1 END) AS hdbStsA,
COUNT(CASE WHEN HDB_STS = 'B' THEN 1 END) AS hdbStsB, COUNT(CASE WHEN HDB_STS = 'B' THEN 1 END) AS hdbStsB,
@@ -316,5 +387,5 @@
AND D.PRJ_SEQ = #prjSeq# AND D.PRJ_SEQ = #prjSeq#
AND (D.TITLE != '' OR D.CONTENTS != '') AND (D.TITLE != '' OR D.CONTENTS != '')
<![CDATA[ AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) ]]> <![CDATA[ AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) ]]>
</select> </select> -->
</sqlMap> </sqlMap>

View File

@@ -128,9 +128,9 @@
B.DEPT_CD, B.DEPT_CD,
B.POSITION_NM, B.POSITION_NM,
C.PRJ_NM, C.PRJ_NM,
COUNT(CASE WHEN D.HDB_STS = 'A' AND YEAR(D.CREATE_DATE) = YEAR(NOW()) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsA, COUNT(CASE WHEN D.HDB_STS = 'A' AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsA,
COUNT(CASE WHEN D.HDB_STS = 'B' AND YEAR(D.CREATE_DATE) = YEAR(NOW()) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsB, COUNT(CASE WHEN D.HDB_STS = 'B' AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsB,
COUNT(CASE WHEN D.HDB_STS = 'C' AND YEAR(D.CREATE_DATE) = YEAR(NOW()) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsC COUNT(CASE WHEN D.HDB_STS = 'C' AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsC
FROM DMS_PRJ_AUTH_USER A FROM DMS_PRJ_AUTH_USER A
JOIN HMS_USER B JOIN HMS_USER B
ON A.USER_ID = B.USER_ID ON A.USER_ID = B.USER_ID

View File

@@ -24,15 +24,17 @@
<script src="/js/common/charts-plugin-datalabels.js"></script> <script src="/js/common/charts-plugin-datalabels.js"></script>
<c:set var="now" value="<%= new java.util.Date() %>" /> <c:set var="now" value="<%= new java.util.Date() %>" />
<fmt:formatDate value="${now}" pattern="yyyy" var="curYear" />
<div class="location_box"> <div class="location_box">
<div class="loc_h3"><h3>${prjNm} <%=MainGlobals.MENU_HDB%> <div class="loc_h3"><h3>${prjNm} <%=MainGlobals.MENU_HDB%>
( (
<span class="year-text"> <span class="year-text">
<fmt:formatDate value="${now}" pattern="yyyy" /> 년 - <%-- ${curYear} 년 --%>
한달간 처리 현황
</span> </span>
<span class="sts-a">접수: ${hdbStsA}</span>, <span class="sts-a">접수: ${dmsHdbStat.hdbStsA}</span>,
<span class="sts-b">처리중: ${hdbStsB}</span>, <span class="sts-b">처리중: ${dmsHdbStat.hdbStsB}</span>,
<span class="sts-c">완료: ${hdbStsC}</span> ) <span class="sts-c">완료: ${dmsHdbStat.hdbStsC}</span> )
</h3><span></span></div> </h3><span></span></div>
<span class="loccation"><img src="/images/admin/loccation_home.png" alt="홈" /> > <strong><%=MainGlobals.MENU_HDB%></strong></span> <span class="loccation"><img src="/images/admin/loccation_home.png" alt="홈" /> > <strong><%=MainGlobals.MENU_HDB%></strong></span>
</div> </div>
@@ -116,8 +118,7 @@
</c:if> </c:if>
</td> </td>
<td> <td>
<fmt:parseDate value="${list.createDate}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="parsedCreateDate"/> ${list.createDate}
<fmt:formatDate value="${parsedCreateDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
</td> </td>
<td>${list.rdCnt }</td> <td>${list.rdCnt }</td>
<%-- <td>${list.compScdDate}</td> --%> <%-- <td>${list.compScdDate}</td> --%>
@@ -161,19 +162,33 @@
sbData.append("]"); sbData.append("]");
// 한달 현황 (도넛) // 한달 현황 (도넛)
DmsHdbGraphVO monthlyList = (DmsHdbGraphVO) request.getAttribute("monthlyList"); /* DmsHdbGraphVO monthlyList = (DmsHdbGraphVO) request.getAttribute("monthlyList");
int cntA = monthlyList.getHdbStsA(); // 접수 int cntA = monthlyList.getHdbStsA(); // 접수
int cntB = monthlyList.getHdbStsB(); // 처리중 int cntB = monthlyList.getHdbStsB(); // 처리중
int cntC = monthlyList.getHdbStsC(); // 완료 int cntC = monthlyList.getHdbStsC(); // 완료 */
%> %>
<div class="chart-container"> <div class="chart-container">
<!-- 막대 그래프 --> <div class="chart-wrapper">
<div class="chart-box" style="flex:2;"> <div class="chart-title">
<canvas id="yearChart"></canvas> <div class="chart-main-title">
</div> ${curYear}년 요청 통계
</div>
<div class="chart-sub-title"><strong>Total [ </strong>
<span class="sts-a">접수 ${dmsHdbStat.hdbStsYrA}건</span>
<span class="sep">/</span>
<span class="sts-b">처리중 ${dmsHdbStat.hdbStsYrB}건</span>
<span class="sep">/</span>
<span class="sts-c">완료 ${dmsHdbStat.hdbStsYrC}건</span>
<strong> ]</strong>
</div>
</div>
<!-- 막대 그래프 -->
<div class="chart-box" style="flex:2;">
<canvas id="yearChart"></canvas>
</div>
</div>
<!-- 도넛 그래프 --> <!-- 도넛 그래프 -->
<div class="chart-box" style="flex:1; position:relative;"> <div class="chart-box" style="flex:1; position:relative;">
<canvas id="monthChart"></canvas> <canvas id="monthChart"></canvas>
@@ -197,6 +212,11 @@ Chart.register(ChartDataLabels);
const annualLabels = <%= sbLabels.toString() %>; const annualLabels = <%= sbLabels.toString() %>;
const annualData = <%= sbData.toString() %>; const annualData = <%= sbData.toString() %>;
const YEAR = '${curYear}';
const hdbStsA = Number('${dmsHdbStat.hdbStsA != null ? hdbStsA : 0}');
const hdbStsB = Number('${dmsHdbStat.hdbStsB != null ? hdbStsB : 0}');
const hdbStsC = Number('${dmsHdbStat.hdbStsC != null ? hdbStsC : 0}');
new Chart( new Chart(
document.getElementById('yearChart'), document.getElementById('yearChart'),
{ {
@@ -217,8 +237,8 @@ new Chart(
plugins: { plugins: {
title: { title: {
display: true, display: false,
text: '2025년 월별 요청 통계', //text: YEAR + `년 요청 통계 (접수 ${hdbStsA}건 / 처리중 ${hdbStsB}건 / 완료 ${hdbStsC}건)`,
font: { size: 20, weight: 'bold' }, font: { size: 20, weight: 'bold' },
padding: { top: 10, bottom: 20 } padding: { top: 10, bottom: 20 }
}, },
@@ -269,9 +289,9 @@ new Chart(
/**************************************** /****************************************
* 2) 한달 현황 도넛 차트 * 2) 한달 현황 도넛 차트
****************************************/ ****************************************/
const cntA = <%= cntA %>; // 접수 const cntA = ${dmsHdbStat.hdbStsA}; // 접수
const cntB = <%= cntB %>; // 처리중 const cntB = ${dmsHdbStat.hdbStsB}; // 처리중
const cntC = <%= cntC %>; // 완료 const cntC = ${dmsHdbStat.hdbStsC}; // 완료
const monthChartCanvas = document.getElementById('monthChart'); const monthChartCanvas = document.getElementById('monthChart');
const noDataMsg = document.getElementById('noDataMsg'); const noDataMsg = document.getElementById('noDataMsg');

View File

@@ -19,7 +19,7 @@
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/DwrCommonService.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/DwrCommonService.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/common/jquery/jquery.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/common/jquery/jquery.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/common/common.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/common/common.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/cms/all.css?ver=20251125_1"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/cms/all.css?ver=20260108_1">
<style> <style>
.main_wrap_body{ background:url(${pageContext.request.contextPath}/images/admin/login_bg.gif) repeat left top; font-family:"맑은 고딕",Malgun Gothic,AppleGothic,sans-serif,"돋움", Dotum; } .main_wrap_body{ background:url(${pageContext.request.contextPath}/images/admin/login_bg.gif) repeat left top; font-family:"맑은 고딕",Malgun Gothic,AppleGothic,sans-serif,"돋움", Dotum; }
.main_wrap{display:block; height:100%; left:0; position:fixed; top:0; width:100%; z-index:10000;} .main_wrap{display:block; height:100%; left:0; position:fixed; top:0; width:100%; z-index:10000;}
@@ -46,9 +46,9 @@
.main_box .bottom_box .bottom_logo{width:20%; float: left; margin-left: 10px;} .main_box .bottom_box .bottom_logo{width:20%; float: left; margin-left: 10px;}
/* .main_box .bottom_box .bottom_txt{width:70%; float: left;} */ /* .main_box .bottom_box .bottom_txt{width:70%; float: left;} */
.sts-a { color: red; font-size: 12px;} .sts-a { color: rgb(75,192,192); font-size: 12px;}
.sts-b { color: green; font-size: 12px; } .sts-b { color: rgb(255,99,132); font-size: 12px; }
.sts-c { color: blue; font-size: 12px; } .sts-c { color: rgb(54,162,235); font-size: 12px; }
</style> </style>
</head> </head>
<body class="main_wrap_body"> <body class="main_wrap_body">
@@ -67,7 +67,8 @@
<div class="cent_menu"> <div class="cent_menu">
<p class="prj_txt">● 프로젝트 현황</p> <p class="prj_txt">● 프로젝트 현황</p>
<c:set var="now" value="<%= new java.util.Date() %>" /> <c:set var="now" value="<%= new java.util.Date() %>" />
<span class="year-info">※괄호 안 현황 정보는 <fmt:formatDate value="${now}" pattern="yyyy" />년도 기준입니다.</span> <%-- <span class="year-info">※괄호 안 현황 정보는 <fmt:formatDate value="${now}" pattern="yyyy" />년도 기준입니다.</span> --%>
<span class="year-info">※괄호 안 현황 정보는 지난 한달 간 데이터 집계입니다.</span>
<div class="txt_field"> <div class="txt_field">
<c:if test="${empty sessionPrjList }"> <c:if test="${empty sessionPrjList }">
<p class="txt_list">담당하신 프로젝트가 없습니다. 관리자에게 문의해주세요.<p> <p class="txt_list">담당하신 프로젝트가 없습니다. 관리자에게 문의해주세요.<p>
@@ -75,7 +76,7 @@
<c:if test="${!empty sessionPrjList }"> <c:if test="${!empty sessionPrjList }">
<c:forEach items="${sessionPrjList }" var="list"> <c:forEach items="${sessionPrjList }" var="list">
<p class="txt_list"> <p class="txt_list">
<a href='/dms/contents/dms/hdb/01/hdb.01.001.motion?prjSeq=${list.prjSeq }&moveDetail=Y&hdbStsA=${list.hdbStsA}&hdbStsB=${list.hdbStsB}&hdbStsC=${list.hdbStsC}'> <a href='/dms/contents/dms/hdb/01/hdb.01.001.motion?prjSeq=${list.prjSeq }&moveDetail=Y'>
- ${list.prjNm } - ${list.prjNm }
(<span class="sts-a">접수: ${list.hdbStsA}</span>, (<span class="sts-a">접수: ${list.hdbStsA}</span>,
<span class="sts-b">처리중: ${list.hdbStsB}</span>, <span class="sts-b">처리중: ${list.hdbStsB}</span>,

View File

@@ -29,7 +29,7 @@ if(UserHelper.isAuthenticated()) {
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/DwrCommonService.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/DwrCommonService.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/common.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/common.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/layout.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/layout.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/contents.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/contents.css?ver=20260106">
<script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/jquery-1.7.1.min.js"></script><!--전체메뉴--> <script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/jquery-1.7.1.min.js"></script><!--전체메뉴-->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/jquery.easing.1.3.js" ></script><!--전체메뉴--> <script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/jquery.easing.1.3.js" ></script><!--전체메뉴-->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/mobTnav.js" ></script><!--전체메뉴--> <script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/mobTnav.js" ></script><!--전체메뉴-->

View File

@@ -5,6 +5,6 @@
@import url(font.css); @import url(font.css);
@import url(main.css); @import url(main.css);
@import url(layout.css); @import url(layout.css);
@import url(contents.css?ver=20251125); @import url(contents.css);
@import url(login.css); @import url(login.css);
@import url(form.css); @import url(form.css);

View File

@@ -414,23 +414,23 @@ a.btn_search_gray:HOVER {background-color:#4c4c4c; border:1px solid #2f2f2f;}
} }
/*요청처리현황*/ /*요청처리현황*/
.sts-a { color: green !important; font-size: 12px; } .sts-a { color: rgb(75,192,192) !important; font-size: 12px; }
.sts-b { color: red !important; font-size: 12px; } .sts-b { color: rgb(255,99,132) !important; font-size: 12px; }
.sts-c { color: blue !important; font-size: 12px; } .sts-c { color: rgb(54,162,235) !important; font-size: 12px; }
.year-text { .year-text {
font-size: 12px; font-size: 12px;
} }
.year-info-wrap { .year-info-wrap {
text-align: right; /* 오른쪽 정렬 */ text-align: right;
} }
.year-info { .year-info {
font-size: 12px; font-size: 12px;
color: red; /* 빨간 글씨 */ color: red;
position: relative; position: relative;
left: 370px; left: 300px;
} }
/*차트*/ /*차트*/
@@ -444,9 +444,47 @@ a.btn_search_gray:HOVER {background-color:#4c4c4c; border:1px solid #2f2f2f;}
flex: 1; flex: 1;
} }
.chart-wrapper {
width: 100%;
max-width: 900px; /* 차트 너비와 동일하게 */
margin: 0 auto; /* 중앙 정렬 */
}
.chart-title {
text-align: center;
margin-bottom: 16px;
}
.chart-main-title {
font-size: 20px;
font-weight: bold;
color: #666;
margin-bottom: 6px; /* 줄바꿈 간격 */
}
.chart-sub-title {
font-size: 14px;
}
/* 상태별 색상 */
.chart-sub-title .sts-a {
color: rgb(75,192,192); /* 접수 - 초록 */
font-weight: 600;
}
.chart-sub-title .sts-b {
color: rgb(255,99,132); /* 처리중 - 빨강 */
font-weight: 600;
}
.chart-sub-title .sts-c {
color: rgb(54,162,235); /* 완료 - 파랑 */
font-weight: 600;
}
.chart-sub-title .sep {
margin: 0 6px;
color: #666;
}