2025-10-28 15:48 교육실적통계

This commit is contained in:
myname 2025-10-28 15:49:07 +09:00
parent 221865ec6e
commit d9632e260a
7 changed files with 216 additions and 1595 deletions

View File

@ -187,4 +187,9 @@ public interface VEInstrMixService {
//교육실정통계- 월별 교육차시별 차시명, 이수, 미이수, 연기인원 통계
List<VELctrDetailVO> selectEduPrfrmInfo_csi_no7(VEInstrDetailVO vEInstrDetailVO) throws Exception;
//예방교육
//교육실정통계- 월별 교육 이수 현황(그래프 포함)
List<VELctrDetailVO> selectEduPrfrmInfo_csi_prevent_no5(VEInstrDetailVO vEInstrDetailVO) throws Exception;
}

View File

@ -363,4 +363,9 @@ public class VEInstrMixDAO extends EgovAbstractDAO {
List<VELctrDetailVO> tlist = (List<VELctrDetailVO>) list("VESttstMixDAO.selectEduPrfrmInfo_csi_no7", vEInstrDetailVO);
return tlist;
}
public List<VELctrDetailVO> selectEduPrfrmInfo_csi_prevent_no5(VEInstrDetailVO vEInstrDetailVO) throws Exception {
List<VELctrDetailVO> tlist = (List<VELctrDetailVO>) list("VESttstMixDAO.selectEduPrfrmInfo_csi_prevent_no5", vEInstrDetailVO);
return tlist;
}
}

View File

@ -290,4 +290,9 @@ public class VEInstrMixServiceImpl implements VEInstrMixService {
public List<VELctrDetailVO> selectEduPrfrmInfo_csi_no7(VEInstrDetailVO vEInstrDetailVO) throws Exception{
return vEInstrMixDAO.selectEduPrfrmInfo_csi_no7(vEInstrDetailVO);
}
public List<VELctrDetailVO> selectEduPrfrmInfo_csi_prevent_no5(VEInstrDetailVO vEInstrDetailVO) throws Exception{
return vEInstrMixDAO.selectEduPrfrmInfo_csi_prevent_no5(vEInstrDetailVO);
}
}

View File

@ -709,9 +709,10 @@ public class PreventMngController {
//vEInstrDetailVODetail.setLctrDivCd("10"); //강의구분코드 VE0011 - 10-청소년, 20-성인, 30-체험교실, 50-실무영역, 60-기소유예
//통계- 검찰청별 교육 의뢰 현황(그래프 포함)
/*
//통계- 검찰청별 교육 의뢰 현황(그래프 포함)
{
//vEInstrDetailVODetail.setInstrNm(vEInstrDetailVODetail.getSearchKeyword());
vEInstrDetailVODetail = egovCryptoUtil.encryptVEInstrDetailVO(vEInstrDetailVODetail);
@ -726,7 +727,7 @@ public class PreventMngController {
//통계- 월별 교육의뢰현황(그래프 포함)
{
//vEInstrDetailVODetail.setNo3("10"); /* 10-횟수, 20-인원 */
//vEInstrDetailVODetail.setNo3("10"); * 10-횟수, 20-인원 *
//vEInstrDetailVODetail.setInstrNm(vEInstrDetailVODetail.getSearchKeyword());
vEInstrDetailVODetail = egovCryptoUtil.encryptVEInstrDetailVO(vEInstrDetailVODetail);
List<VELctrDetailVO> selectAsgnmInfoT2List_no2 = vEInstrMixService.selectEduPrfrmInfo_csi_no2(vEInstrDetailVODetail);
@ -739,8 +740,9 @@ public class PreventMngController {
//통계- 대상별 교육의뢰현황(그래프 포함)
{
//vEInstrDetailVODetail.setNo3("20"); /* 10-횟수, 20-인원 */
{
// * 10-횟수, 20-인원 *
//vEInstrDetailVODetail.setNo3("20");
//vEInstrDetailVODetail.setInstrNm(vEInstrDetailVODetail.getSearchKeyword());
vEInstrDetailVODetail = egovCryptoUtil.encryptVEInstrDetailVO(vEInstrDetailVODetail);
List<VELctrDetailVO> selectAsgnmInfoT2List_no3 = vEInstrMixService.selectEduPrfrmInfo_csi_no3(vEInstrDetailVODetail);
@ -760,14 +762,18 @@ public class PreventMngController {
model.addAttribute("list_no4",selectAsgnmInfoT4List_no4);
}
*/
// 월별 교육이수현황(그래프 포함) - 대상이 없어서 제공안됨
{
vEInstrDetailVODetail.setLctrDivCd(LCTR_DIV_CD);
vEInstrDetailVODetail = egovCryptoUtil.encryptVEInstrDetailVO(vEInstrDetailVODetail);
vEInstrDetailVODetail.setSearchEduStateCd("20"); //이수만 보기
List<VELctrDetailVO> selectAsgnmInfoT5List = vEInstrMixService.selectEduPrfrmInfo_csi_no5(vEInstrDetailVODetail);
List<VELctrDetailVO> selectAsgnmInfoT5List = vEInstrMixService.selectEduPrfrmInfo_csi_prevent_no5(vEInstrDetailVODetail);
model.addAttribute("list_no5",selectAsgnmInfoT5List);
}
/*
// 대상별 교육이수현황(그래프 포함) - 대상이 없어서 제공안됨
{
vEInstrDetailVODetail = egovCryptoUtil.encryptVEInstrDetailVO(vEInstrDetailVODetail);
@ -782,6 +788,7 @@ public class PreventMngController {
List<VELctrDetailVO> selectAsgnmInfoT7List = vEInstrMixService.selectEduPrfrmInfo_csi_no7(vEInstrDetailVODetail);
model.addAttribute("list_no7",selectAsgnmInfoT7List);
}
*/
//통계- 인구감소지역별 교육횟수 교육인원, 교육기관, 교육일자(그래프 포함)) - 대상이 없어서 제공안됨
/*
{
@ -813,6 +820,87 @@ public class PreventMngController {
}
/**
* 교육실적통계 Excel - 조건부기소유예 - 5검찰청별 교육 이수 현황(그래프 포함)
* @param model
* @return
* @throws Exception
*/
@SuppressWarnings("rawtypes")
@RequestMapping(value = "/kccadr/oprtn/prevent/eduPrfrmMngExcelDownLoad_csi_no5.do")
public ModelAndView eduPrfrmMngExcelDownLoad_csi_no5(
@ModelAttribute("vEEduAplctVO") VEEduAplctVO vEEduAplctVO
, @ModelAttribute("vEInstrDetailVODetail") VEInstrDetailVO vEInstrDetailVODetail
, ModelMap model
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("excelDownloadView");
try {
//통계- 월별 횟수/교육인원(그래프 포함)
//vEInstrDetailVODetail.setInstrNm(vEInstrDetailVODetail.getSearchKeyword());
vEInstrDetailVODetail = egovCryptoUtil.encryptVEInstrDetailVO(vEInstrDetailVODetail);
vEInstrDetailVODetail.setSearchEduStateCd("20"); //이수만 보기
List<VELctrDetailVO> selectAsgnmInfoT2List = vEInstrMixService.selectEduPrfrmInfo_csi_prevent_no5(vEInstrDetailVODetail);
//복호화
//selectAsgnmInfoT2List = egovCryptoUtil.decryptVELctrDetailVOList(selectAsgnmInfoT2List);
System.out.println("out-list-2");
selectAsgnmInfoT2List.get(12).setCodeNm("합계");
List<Object> excelData = new ArrayList<>();
excelData.addAll(selectAsgnmInfoT2List);
// 세팅값
String title = "교육실적통계-월별 교육 이수 현황";
int[] width = {
4000, 4000, 4000
}; // 너비
//33개 항목
String[] header = {
""
, "이수(명)"
, "횟수"
};
String[] order = {
"CodeNm"
, "Cnt"
, "Cnt2"
};
excelDown(
excelData,
title,
width,
header,
order,
model
);
}catch(Exception ep) {
ep.getStackTrace();
}
modelAndView.addObject(model);
return modelAndView;
}
/**
* @methodName : instrActvtHstrySignMngList
* @author : 이호영
@ -3294,4 +3382,26 @@ public class PreventMngController {
return p_paginationInfo;
}
@SuppressWarnings("unused")
private void excelDown(
List list,
String title,
int[] width,
String[] header,
String[] order,
ModelMap model
){
// 호출
SXSSFWorkbook workbook;
try {
workbook = ExcelUtil.makeSimpleFruitExcelWorkbook(list, header, order, width, title);
model.addAttribute("locale", Locale.KOREA);
model.addAttribute("workbook", workbook);
model.addAttribute("workbookName", title);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

View File

@ -2612,5 +2612,71 @@
on(bbb.codeNm2=ccc.prcs_aplct_prd_ord)
ORDER BY aaa.mnt, ccc.title
</select>
</select>
<!-- 교육실정통계- ⑤월별 교육 이수 현황(그래프 포함) -->
<select id="VESttstMixDAO.selectEduPrfrmInfo_csi_prevent_no5" parameterClass="VEInstrDetailVO" resultClass="VELctrDetailVO">
/* VESttstMixDAO.selectEduPrfrmInfo_csi_prevent_no5 */
SELECT aaa.mnt AS codeNm
, coalesce(bbb.cnt,0) AS cnt
, coalesce(bbb.cnt2,0) AS cnt2
FROM (
SELECT '01' AS mnt
UNION ALL SELECT '02' AS mnt
UNION ALL SELECT '03' AS mnt
UNION ALL SELECT '04' AS mnt
UNION ALL SELECT '05' AS mnt
UNION ALL SELECT '06' AS mnt
UNION ALL SELECT '07' AS mnt
UNION ALL SELECT '08' AS mnt
UNION ALL SELECT '09' AS mnt
UNION ALL SELECT '10' AS mnt
UNION ALL SELECT '11' AS mnt
UNION ALL SELECT '12' AS mnt
UNION ALL SELECT '13' AS mnt
)aaa
LEFT OUTER JOIN
(
SELECT
coalesce(aa.CMPTNT_ATHRT,'13') AS codeNm
, sum(aa.cnt) AS cnt
, sum(aa.cnt2) AS cnt2
FROM
(
SELECT CMPTNT_ATHRT
, sum(cnt) cnt
, count(*) cnt2
FROM (
SELECT
SUBSTRING(c.edu_strt_pnttm,6,2) AS CMPTNT_ATHRT ,
count(*) AS cnt
FROM
ve_edu_aplct b
, ve_prcs_aplct_prd c
, vea_aplct_detail_info d
WHERE SUBSTRING(c.edu_strt_pnttm,1,4)=#mngNmbrYr#
AND b.aprvl_cd='60'
AND b.prcs_ord=c.prcs_aplct_prd_ord
AND b.EDU_APLCT_ORD =d.EDU_APLCT_ORD
AND d.aplct_state_cd = '20'
AND b.lctr_div_cd = #lctrDivCd#
GROUP BY
SUBSTRING(c.edu_strt_pnttm,6,2)
)z0
GROUP BY CMPTNT_ATHRT
)aa
GROUP BY
ROLLUP(aa.CMPTNT_ATHRT)
)bbb
on(aaa.mnt=bbb.codeNm)
ORDER BY aaa.mnt
</select>
</sqlMap>

View File

@ -211,7 +211,7 @@
<c:if test="${not empty vEEduAplctVO.mngNmbrYr}">
<!-- list util -->
<div class="list_util">
<div class="list_util" style="display:none;">
<!--
<p class="list_util_p">총 건수 : <span><c:out value="${paginationInfo.totalRecordCount}" /></span>건</p>
-->
@ -250,7 +250,7 @@
month.pop();
</script>
<div id="chartContainer" style="display:flex; width:100%;">
<div id="chartContainer" style="display:none; width:100%;">
<div id="chartAll" style="float:left; width: 100%; height:600px;">
</div>
<script type="text/javascript">
@ -327,7 +327,7 @@
<!-- /월별 횟수/교육인원 차트 -->
<!-- list -->
<div class="tb_type01">
<div class="tb_type01" style="display:none;">
<table>
<colgroup>
<%-- <col style="width: 10%"> --%>
@ -375,7 +375,7 @@
<!-- list util -->
<div class="list_util">
<div class="list_util" style="display:none;">
<!--
<p class="list_util_p">총 건수 : <span><c:out value="${paginationInfo.totalRecordCount}" /></span>건</p>
-->
@ -414,8 +414,8 @@
month_2.pop();
</script>
<div id="chartContainer" style="display:flex; width:100%;">
<div id="chartAll_2" style="float:left; width: 100%; height:600px;">
<div id="chartContainer" style="display:none; width:100%;">
<div id="chartAll_2" style="float:left; width: 100%; height:600px;" style="display:none;">
</div>
<script type="text/javascript">
var chartAll_2 = echarts.init(document.getElementById('chartAll_2'));
@ -491,7 +491,7 @@
<!-- /월별 횟수/교육인원 차트 -->
<!-- list -->
<div class="tb_type01">
<div class="tb_type01" style="display:none;">
<table>
<colgroup>
<%-- <col style="width: 10%"> --%>
@ -548,7 +548,7 @@
<!-- //list -->
<!-- list util -->
<div class="list_util">
<div class="list_util" style="display:none;">
<!--
<p class="list_util_p">총 건수 : <span><c:out value="${paginationInfo.totalRecordCount}" /></span>건</p>
-->
@ -587,7 +587,7 @@
month_3.pop();
</script>
<div id="chartContainer" style="display:flex; width:100%;">
<div id="chartContainer" style="display:none; width:100%;" style="display:none;">
<div id="chartAll_3" style="float:left; width: 100%; height:600px;">
</div>
<script type="text/javascript">
@ -664,7 +664,7 @@
<!-- /월별 횟수/교육인원 차트 -->
<!-- list -->
<div class="tb_type01">
<div class="tb_type01" style="display:none;">
<table>
<colgroup>
<%-- <col style="width: 10%"> --%>
@ -712,7 +712,7 @@
<!-- list util -->
<div class="list_util">
<div class="list_util" style="display:none;">
<!--
<p class="list_util_p">총 건수 : <span><c:out value="${paginationInfo.totalRecordCount}" /></span>건</p>
-->
@ -751,7 +751,7 @@
month_4.pop();
</script>
<div id="chartContainer" style="display:flex; width:100%;">
<div id="chartContainer" style="display:none; width:100%;" style="display:none;">
<div id="chartAll_4" style="float:left; width: 100%; height:600px;">
</div>
<script type="text/javascript">
@ -828,7 +828,7 @@
<!-- /월별 횟수/교육인원 차트 -->
<!-- list -->
<div class="tb_type01">
<div class="tb_type01" style="display:none;">
<table>
<colgroup>
<%-- <col style="width: 10%"> --%>
@ -880,8 +880,9 @@
<!--
<p class="list_util_p">총 건수 : <span><c:out value="${paginationInfo.totalRecordCount}" /></span>건</p>
-->
<!-- ⑤ -->
<p class="list_util_p">
월별 교육 이수 현황
월별 교육 이수 현황
</p>
<div>
<!-- <button type="button" class="btn_down_excel" onclick="excelDownLoadArea();">엑셀 다운로드(강의지역)</button> -->
@ -1056,7 +1057,7 @@
<!-- list util -->
<div class="list_util">
<div class="list_util" style="display:none;">
<!--
<p class="list_util_p">총 건수 : <span><c:out value="${paginationInfo.totalRecordCount}" /></span>건</p>
-->
@ -1095,7 +1096,7 @@
month_6.pop();
</script>
<div id="chartContainer" style="display:flex; width:100%;">
<div id="chartContainer" style="display:none; width:100%;" style="display:none;">
<div id="chartAll_6" style="float:left; width: 100%; height:600px;">
</div>
<script type="text/javascript">
@ -1172,7 +1173,7 @@
<!-- /월별 횟수/교육인원 차트 -->
<!-- list -->
<div class="tb_type01">
<div class="tb_type01" style="display:none;">
<table>
<colgroup>
<%-- <col style="width: 10%"> --%>