21 Commits

Author SHA1 Message Date
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
b652e9f9cc 작성일 시:분:초 표시 하도록 추가
All checks were successful
Main-Build / build-and-push (push) Successful in 32s
2025-12-11 16:01:12 +09:00
778747ba7e maven-cache 스토리지 방식 변경 (RWO > RWX)
All checks were successful
Main-Build / build-and-push (push) Successful in 44s
2025-12-11 15:57:04 +09:00
baccdcdf5f 날짜 형식 변환
All checks were successful
Main-Build / build-and-push (push) Successful in 1m2s
2025-12-11 15:41:03 +09:00
a396981ebb 날짜처리 에러 부분 수정
All checks were successful
Main-Build / build-and-push (push) Successful in 40s
2025-12-11 15:17:40 +09:00
179fd7d95c JSTL fmt:formatDate 이 LocalDateTime 처리 불가하기 때문에 재처리 기능 추가
All checks were successful
Main-Build / build-and-push (push) Successful in 42s
2025-12-11 13:40:17 +09:00
78b5561e7a mysql 8.4.7 로 원복
All checks were successful
Main-Build / build-and-push (push) Successful in 32s
소스 수정으로 localdatetime 문제 해결 진행
2025-12-11 12:03:29 +09:00
031a7fad81 mysql 8.4.7 테스트 - 1
All checks were successful
Main-Build / build-and-push (push) Successful in 29s
2025-12-11 11:12:08 +09:00
49b7f0b984 구 개발디비로 테스트 변경
All checks were successful
Main-Build / build-and-push (push) Successful in 26s
2025-12-11 10:58:08 +09:00
680bbce797 mysql connector 버전에 따른 localdatetime 포맷 문제 발생으로 구버전 라이브러리로 복원 - 2
All checks were successful
Main-Build / build-and-push (push) Successful in 26s
2025-12-11 10:42:30 +09:00
8a54aee412 mysql connector 버전에 따른 localdatetime 포맷 문제 발생으로 구버전 라이브러리로 복원
All checks were successful
Main-Build / build-and-push (push) Successful in 31s
2025-12-11 10:40:18 +09:00
049fe4ee29 mysql 8.4.7 로 변경 테스트 - 4
All checks were successful
Main-Build / build-and-push (push) Successful in 35s
2025-12-11 10:23:03 +09:00
000e3145bd mysql 8.4.7 로 변경 테스트 - 3
All checks were successful
Main-Build / build-and-push (push) Successful in 27s
2025-12-11 09:44:58 +09:00
862c73bd38 mysql 8.4.7 로 변경 테스트 - 2
All checks were successful
Main-Build / build-and-push (push) Successful in 26s
2025-12-11 09:37:28 +09:00
2f7fcc5081 mysql 8.4.7 로 변경 테스트
All checks were successful
Main-Build / build-and-push (push) Successful in 27s
2025-12-11 09:32:54 +09:00
a7cfad592b Merge pull request 'stage 추가' (#22) from feature/add-stage into master
All checks were successful
Main-Build / build-and-push (push) Successful in 28s
Reviewed-on: #22
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-10 07:49:37 +00:00
51847f834f Merge pull request 'stage 추가' (#21) from feature/add-stage into master
All checks were successful
Main-Build / build-and-push (push) Successful in 36s
Reviewed-on: #21
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-10 07:02:52 +00:00
85b7ba26d5 Merge pull request 'stage 버전 추가' (#20) from feature/add-stage into master
All checks were successful
Main-Build / build-and-push (push) Successful in 37s
Reviewed-on: #20
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-10 06:54:07 +00:00
19 changed files with 268 additions and 84 deletions

2
Jenkinsfile vendored
View File

@@ -67,7 +67,7 @@ spec:
emptyDir: {}
- name: maven-cache
persistentVolumeClaim:
claimName: maven-repo-pvc
claimName: maven-repo-pvc-rwx
"""
) {
node(L) {

42
pom.xml
View File

@@ -229,16 +229,28 @@
<!-- </dependency>-->
<!-- Database -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<!-- mysql 5.X -->
<!-- <dependency>-->
<!-- <groupId>mysql</groupId>-->
<!-- <artifactId>mysql-connector-java</artifactId>-->
<!-- <version>5.1.31</version>-->
<!-- </dependency>-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- mysql 8.4.7 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.5.0</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<!-- Logging (Log4j 2 + SLF4J) -->
<!-- <dependency>
@@ -532,17 +544,17 @@
<!-- </dependency>-->
<!-- &lt;!&ndash; Add other system jars similarly if compilation fails &ndash;&gt;-->
<dependency>
<groupId>com.tmax.tibero</groupId>
<artifactId>tibero-jdbc</artifactId>
<version>5.0</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.tmax.tibero</groupId>-->
<!-- <artifactId>tibero-jdbc</artifactId>-->
<!-- <version>5.0</version>-->
<!-- </dependency>-->
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>oracle</groupId>-->
<!-- <artifactId>ojdbc14</artifactId>-->
<!-- <version>10.2.0.4.0</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.acube</groupId>

View File

@@ -46,6 +46,10 @@ extends EgovComAbstractDAO {
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) {
return this.list("dmsHdbDAO.selectDmsHdbReplyList_D", (Object)searchVO);
}
@@ -70,8 +74,10 @@ extends EgovComAbstractDAO {
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 List selectDmsHdbStat(DmsHdbDefaultVO var1) throws Exception;
public String checkFileWhiteList(MultipartHttpServletRequest var1, String var2, String var3) throws Exception;
public List selectDmsHdbReplyList(DmsHdbDefaultVO var1);
@@ -46,6 +48,6 @@ public interface DmsHdbService {
public List<DmsHdbGraphVO> selectDmsHdbPerYearChart(DmsHdbDefaultVO var1);
public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO var1);
/* public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO var1); */
}

View File

@@ -135,6 +135,10 @@ public class DmsHdbServiceImpl implements DmsHdbService {
public int selectDmsHdbListTotCnt(DmsHdbDefaultVO 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 {
multiRequest.setCharacterEncoding("utf-8");
@@ -301,7 +305,8 @@ public class DmsHdbServiceImpl implements DmsHdbService {
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.resource.EdosiResource;
import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import java.util.HashMap;
import java.util.Iterator;
@@ -86,9 +87,6 @@ public class DmsHdbController {
String prjSeq = request.getParameter("prjSeq");
Map<String, Object> prjInfo = (Map<String, Object>) request.getSession().getAttribute("prjInfo");
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) {
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_EMP", (Object)UserDetailsHelper.isRole((String)"ROLE_EMP"));
model.addAttribute("prjNm", prjNm);
model.addAttribute("hdbStsA", hdbStsA);
model.addAttribute("hdbStsB", hdbStsB);
model.addAttribute("hdbStsC", hdbStsC);
this.initModelData(model, bmode);
return viewName;
}
@@ -159,6 +154,12 @@ public class DmsHdbController {
if (totCnt > 0) {
List dmsHdbList = this.dmsHdbService.selectDmsHdbList(searchVO);
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) {
@@ -170,8 +171,11 @@ public class DmsHdbController {
List<DmsHdbGraphVO> annualList = dmsHdbService.selectDmsHdbPerYearChart(searchVO);
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);
return "dms/dmsHdb/DmsHdbList";

View File

@@ -51,9 +51,6 @@ public class TemplateController {
HashMap<String, String> prjInfo = new HashMap<String, String>();
prjInfo.put("prjSeq", prjSeq);
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);
}
}

View File

@@ -27,11 +27,18 @@ Globals.DbType =mysql
#Globals.Password =sksrhdqnffkr
## \uC138\uC774\uD5EC\uD504\uB370\uC2A4\uD06C
Globals.DriverClassName=com.mysql.jdbc.Driver
# mysql 5.X
#Globals.DriverClassName=com.mysql.jdbc.Driver
# mysql 8.4.7
Globals.DriverClassName=com.mysql.cj.jdbc.Driver
#\uC6B4\uC601
#Globals.Url=jdbc:mysql://192.168.0.217:3306/helpdesk_db?characterEncoding=utf8
#\uAC1C\uBC1C
Globals.Url=jdbc:mysql://192.168.0.114:13314/helpdesk_db?characterEncoding=utf8
## mysql 5.X
#Globals.Url=jdbc:mysql://192.168.0.114:13316/helpdesk_db?characterEncoding=utf8
## mysql 8.4.7
Globals.Url=jdbc:mysql://192.168.0.114:13316/helpdesk_db?characterEncoding=utf8
Globals.UserName =helpdesk
Globals.Password =helpdesk

View File

@@ -27,11 +27,18 @@ Globals.DbType =mysql
#Globals.Password =sksrhdqnffkr
## \uC138\uC774\uD5EC\uD504\uB370\uC2A4\uD06C
Globals.DriverClassName=com.mysql.jdbc.Driver
# mysql 5.X
#Globals.DriverClassName=com.mysql.jdbc.Driver
# mysql 8.4.7
Globals.DriverClassName=com.mysql.cj.jdbc.Driver
#\uC6B4\uC601
#Globals.Url=jdbc:mysql://192.168.0.217:3306/helpdesk_db?characterEncoding=utf8
#\uAC1C\uBC1C
Globals.Url=jdbc:mysql://192.168.0.114:13314/helpdesk_db?characterEncoding=utf8
## mysql 5.X
#Globals.Url=jdbc:mysql://192.168.0.114:13316/helpdesk_db?characterEncoding=utf8
## mysql 8.4.7
Globals.Url=jdbc:mysql://192.168.0.114:13316/helpdesk_db?characterEncoding=utf8
Globals.UserName =helpdesk
Globals.Password =helpdesk
@@ -55,7 +62,7 @@ Globals.OrgNm=\uC138\uC774\uC815\uBCF4\uAE30\uC220
Globals.OrgCode=8188
#Globals.AccessIp=10
Globals.SiteTitle=\uC138\uC774\uC815\uBCF4\uAE30\uC220 Help-desk (\uB85C\uCEEC)
Globals.SiteTitle=\uC138\uC774\uC815\uBCF4\uAE30\uC220 Help-desk (\uAC1C\uBC1C)
#Globals.MobileStartPage=/mobile/intro.do
Globals.MobileStartPage=/login.do
PushUrl=http://www.sejong.go.kr/sotong

View File

@@ -171,6 +171,77 @@
</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
COUNT(*) totcnt
@@ -306,7 +377,7 @@
</select>
<!-- 현재 기준 한달간 현황 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
COUNT(CASE WHEN HDB_STS = 'A' THEN 1 END) AS hdbStsA,
COUNT(CASE WHEN HDB_STS = 'B' THEN 1 END) AS hdbStsB,
@@ -316,5 +387,5 @@
AND D.PRJ_SEQ = #prjSeq#
AND (D.TITLE != '' OR D.CONTENTS != '')
<![CDATA[ AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) ]]>
</select>
</select> -->
</sqlMap>

View File

@@ -128,9 +128,9 @@
B.DEPT_CD,
B.POSITION_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 = '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 = '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 = '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 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 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
JOIN HMS_USER B
ON A.USER_ID = B.USER_ID

View File

@@ -129,9 +129,11 @@
<tbody>
<c:forEach var="list" items="${commentList }">
<tr>
<th class="left" colspan="3">
등록자 : ${list.userNm } | 등록일시 : <fmt:formatDate value="${list.createDate }" pattern="yyyy.MM.dd hh:mm"/>
<c:if test="${loginVO.name eq list.userNm }">&nbsp;<a href="#" onclick="fn_egov_comment_delete('${list.brdReplySeq }', '${commentVO.parentUrl}');">[삭제]</a> </c:if>
<th class="left" colspan="3">
등록자 : ${list.userNm } | 등록일시 :
<fmt:parseDate value="${list.createDate}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="parsedCreateDate"/>
<fmt:formatDate value="${parsedCreateDate}" pattern="yyyy.MM.dd HH:mm"/>
<c:if test="${loginVO.name eq list.userNm }">&nbsp;<a href="#" onclick="fn_egov_comment_delete('${list.brdReplySeq }', '${commentVO.parentUrl}');">[삭제]</a></c:if>
</th>
</tr>
<tr>

View File

@@ -72,7 +72,11 @@
<td><a href="#view" onclick="return fn_egov_select('${list.userSeq}')">${list.userNm} (${list.userId})</a></td>
<td>${list.tel}</td>
<td>${list.deptNm}</td>
<td><fmt:formatDate value="${list.createDate }" pattern="yyyy-MM-dd" /></td>
<td>
<fmt:parseDate value="${list.createDate}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="createdDate"/>
<fmt:formatDate value="${createdDate}" pattern="yyyy-MM-dd"/>
</td>
<td>${list.userType}</td>
</tr>
</c:forEach>

View File

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

View File

@@ -46,9 +46,9 @@
.main_box .bottom_box .bottom_logo{width:20%; float: left; margin-left: 10px;}
/* .main_box .bottom_box .bottom_txt{width:70%; float: left;} */
.sts-a { color: red; font-size: 12px;}
.sts-b { color: green; font-size: 12px; }
.sts-c { color: blue; font-size: 12px; }
.sts-a { color: rgb(75,192,192); font-size: 12px;}
.sts-b { color: rgb(255,99,132); font-size: 12px; }
.sts-c { color: rgb(54,162,235); font-size: 12px; }
</style>
</head>
<body class="main_wrap_body">
@@ -67,7 +67,8 @@
<div class="cent_menu">
<p class="prj_txt">● 프로젝트 현황</p>
<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">
<c:if test="${empty sessionPrjList }">
<p class="txt_list">담당하신 프로젝트가 없습니다. 관리자에게 문의해주세요.<p>
@@ -75,7 +76,7 @@
<c:if test="${!empty sessionPrjList }">
<c:forEach items="${sessionPrjList }" var="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 }
(<span class="sts-a">접수: ${list.hdbStsA}</span>,
<span class="sts-b">처리중: ${list.hdbStsB}</span>,

View File

@@ -43,8 +43,8 @@
<tr>
<th>등록일</th>
<td class="left">
<%-- <fmt:formatDate value="${dmsHdbVO.createDate}" pattern="yyyy-MM-dd" /> --%>
${dmsDtbVO.createDate}
<fmt:parseDate value="${dmsHdbVO.createDate}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="parsedCreateDate"/>
<fmt:formatDate value="${parsedCreateDate}" pattern="yyyy-MM-dd" />
</td>
</tr>
<tr>

View File

@@ -45,8 +45,8 @@
<tr>
<th>등록일</th>
<td class="left">
<%-- <fmt:formatDate value="${dmsHdbVO.createDate}" pattern="yyyy-MM-dd" /> --%>
${dmsHdbVO.createDate}
<fmt:parseDate value="${dmsHdbVO.createDate}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="createdDate"/>
<fmt:formatDate value="${createdDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
</td>
</tr>
<tr>

View File

@@ -29,7 +29,7 @@ if(UserHelper.isAuthenticated()) {
<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/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.easing.1.3.js" ></script><!--전체메뉴-->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/mobTnav.js" ></script><!--전체메뉴-->

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-b { color: red !important; font-size: 12px; }
.sts-c { color: blue !important; font-size: 12px; }
.sts-a { color: rgb(75,192,192) !important; font-size: 12px; }
.sts-b { color: rgb(255,99,132) !important; font-size: 12px; }
.sts-c { color: rgb(54,162,235) !important; font-size: 12px; }
.year-text {
font-size: 12px;
}
.year-info-wrap {
text-align: right; /* 오른쪽 정렬 */
text-align: right;
}
.year-info {
font-size: 12px;
color: red; /* 빨간 글씨 */
color: red;
position: relative;
left: 370px;
left: 300px;
}
/*차트*/
@@ -444,9 +444,47 @@ a.btn_search_gray:HOVER {background-color:#4c4c4c; border:1px solid #2f2f2f;}
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;
}