From ac7be2aeaa7eff336b3d05622da7c90e6928f70e Mon Sep 17 00:00:00 2001 From: myname Date: Mon, 10 Nov 2025 16:17:04 +0900 Subject: [PATCH] =?UTF-8?q?2025-11-10=2016:16=20=EC=84=A4=EB=AC=B8?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utl/user/service/QustnrCommonUtil.java | 24 +++ .../olp/qri/service/QustnrRespondInfoVO.java | 15 ++ .../web/CndtnPrcsInfoMngController.java | 16 ++ .../service/VEALettnQestnrMIXService.java | 3 + .../ve/oprtn/qestnr/service/VEAQestnrVO.java | 36 ++++ .../service/impl/VEALettnQestnrMIXDAO.java | 5 + .../impl/VEALettnQestnrMIXServiceImpl.java | 5 + .../EgovQustnrRespondInfo_SQL_Postgresql.xml | 9 +- .../ve/edu/VEEdu_MIX_SQL_Postgresql.xml | 14 +- .../ve/prcs/VEPrcsAplctPrd_SQL_Postgresql.xml | 20 ++- .../VEALettnQestnrMIX_SQL_Postgresql.xml | 35 +++- .../cmdTrgt/cndtnEduPrcsAplctCfnMngDetail.jsp | 26 ++- .../cndtnEduPrcsAplctCfnMngDetail.jsp | 40 ++++- .../prevent/cndtnEduPrcsAplctCfnMngDetail.jsp | 19 +- .../popup/qustnrFndtnPopList.jsp | 163 +++++++++++------- 15 files changed, 323 insertions(+), 107 deletions(-) diff --git a/src/main/java/kcc/com/utl/user/service/QustnrCommonUtil.java b/src/main/java/kcc/com/utl/user/service/QustnrCommonUtil.java index dc27bbc5..1a9a0ec5 100644 --- a/src/main/java/kcc/com/utl/user/service/QustnrCommonUtil.java +++ b/src/main/java/kcc/com/utl/user/service/QustnrCommonUtil.java @@ -128,6 +128,30 @@ public class QustnrCommonUtil { return p_model; } + public ModelMap _chasiSrvyItemList( + ModelMap p_model + , String p_siteId + , String p_siteIdCd + , String p_eduAplctOrd + , String p_eduChasiOrd + , VEALettnQestnrMIXService p_vEALettnQestnrMIXService + )throws Exception{ + VEAQestnrVO vEAQestnrVO = new VEAQestnrVO(); + vEAQestnrVO.setSiteId(p_siteId); //청소년 + vEAQestnrVO.setSiteIdCd(p_siteIdCd); //10-기본설문, 20-신청자설문, 30-강사설문 + vEAQestnrVO.setEduAplctOrd(p_eduAplctOrd); + vEAQestnrVO.setEduChasiOrd(p_eduChasiOrd); + vEAQestnrVO = p_vEALettnQestnrMIXService.selectDetail_MIX_LQI_02(vEAQestnrVO); + + List chasiSrvyList = p_vEALettnQestnrMIXService.selectDetail_MIX_LQI_05(vEAQestnrVO); + + if(chasiSrvyList.size() > 0) { + p_model.addAttribute("chasiSrvyItemList",chasiSrvyList); + } + + return p_model; + } + public ModelMap _chasiSrvyList_TA( ModelMap p_model , String p_siteId diff --git a/src/main/java/kcc/let/uss/olp/qri/service/QustnrRespondInfoVO.java b/src/main/java/kcc/let/uss/olp/qri/service/QustnrRespondInfoVO.java index 30b99b9a..7e393e7b 100644 --- a/src/main/java/kcc/let/uss/olp/qri/service/QustnrRespondInfoVO.java +++ b/src/main/java/kcc/let/uss/olp/qri/service/QustnrRespondInfoVO.java @@ -132,6 +132,9 @@ public class QustnrRespondInfoVO implements Serializable { private String prcsAplctPrdOrd = ""; + private String qestnTyCode = ""; + + // 20231124 이호영 // 강화 기반은 라디오 버튼이라 변수 추가함 @@ -674,6 +677,18 @@ public class QustnrRespondInfoVO implements Serializable { public void setUserId(String userId) { this.userId = userId; } + + + + public String getQestnTyCode() { + return qestnTyCode; + } + + + + public void setQestnTyCode(String qestnTyCode) { + this.qestnTyCode = qestnTyCode; + } } diff --git a/src/main/java/kcc/ve/oprtn/cndtnSspnIdtmt/web/CndtnPrcsInfoMngController.java b/src/main/java/kcc/ve/oprtn/cndtnSspnIdtmt/web/CndtnPrcsInfoMngController.java index 3e66a791..a4885d2e 100644 --- a/src/main/java/kcc/ve/oprtn/cndtnSspnIdtmt/web/CndtnPrcsInfoMngController.java +++ b/src/main/java/kcc/ve/oprtn/cndtnSspnIdtmt/web/CndtnPrcsInfoMngController.java @@ -1387,6 +1387,22 @@ public class CndtnPrcsInfoMngController { ex.printStackTrace(); } + // 설문조사 문항항목 + try{ + model = qustnrCommonUtil._chasiSrvyItemList( + model + , LCTR_DIV_CD //청소년 -10, 성인-20, ...VE0012 + , "10" //10-기본설문, 20-신청자설문, 30-강사설문 VEA012 + , vEPrcsDetailVO.getPrcsAplctPrdOrd() + , "" + //, vEEduAplctVO.getEduAplctOrd() + //, vEEduAplctVO.getEduChasiOrd() + , vEALettnQestnrMIXService + ); + + }catch(Exception ex) { + ex.printStackTrace(); + } //개인별 만족도 관리 - chasiSrvyEAList try{ diff --git a/src/main/java/kcc/ve/oprtn/qestnr/service/VEALettnQestnrMIXService.java b/src/main/java/kcc/ve/oprtn/qestnr/service/VEALettnQestnrMIXService.java index 1f9c42d5..b1ace3f2 100644 --- a/src/main/java/kcc/ve/oprtn/qestnr/service/VEALettnQestnrMIXService.java +++ b/src/main/java/kcc/ve/oprtn/qestnr/service/VEALettnQestnrMIXService.java @@ -18,4 +18,7 @@ public interface VEALettnQestnrMIXService { //관리자 청소년,성인 - 개별 만족도 리스트 List selectDetail_MIX_LQI_04(VEAQestnrVO paramVO) throws Exception; // R + + //관리자 청소년,성인 - 설문항목 + List selectDetail_MIX_LQI_05(VEAQestnrVO paramVO) throws Exception; // R } diff --git a/src/main/java/kcc/ve/oprtn/qestnr/service/VEAQestnrVO.java b/src/main/java/kcc/ve/oprtn/qestnr/service/VEAQestnrVO.java index 28e0b5b3..47a6b762 100644 --- a/src/main/java/kcc/ve/oprtn/qestnr/service/VEAQestnrVO.java +++ b/src/main/java/kcc/ve/oprtn/qestnr/service/VEAQestnrVO.java @@ -95,6 +95,42 @@ public class VEAQestnrVO extends ComDefaultVO implements Serializable { private String qustnrBirth; //개별설문등록자생년월일 private String qustnrScore; //개별설문등록자점수 + private String sn1; + private String sn2; + private String sn3; + public String getSn1() { + return sn1; + } + public void setSn1(String sn1) { + this.sn1 = sn1; + } + public String getSn2() { + return sn2; + } + public void setSn2(String sn2) { + this.sn2 = sn2; + } + public String getSn3() { + return sn3; + } + public void setSn3(String sn3) { + this.sn3 = sn3; + } + public String getSn4() { + return sn4; + } + public void setSn4(String sn4) { + this.sn4 = sn4; + } + public String getSn5() { + return sn5; + } + public void setSn5(String sn5) { + this.sn5 = sn5; + } + private String sn4; + private String sn5; + public String getQestnrQesitmId() { return qestnrQesitmId; diff --git a/src/main/java/kcc/ve/oprtn/qestnr/service/impl/VEALettnQestnrMIXDAO.java b/src/main/java/kcc/ve/oprtn/qestnr/service/impl/VEALettnQestnrMIXDAO.java index f7265ecf..460e4197 100644 --- a/src/main/java/kcc/ve/oprtn/qestnr/service/impl/VEALettnQestnrMIXDAO.java +++ b/src/main/java/kcc/ve/oprtn/qestnr/service/impl/VEALettnQestnrMIXDAO.java @@ -32,4 +32,9 @@ public class VEALettnQestnrMIXDAO extends EgovAbstractDAO { List tlist = (List) list("VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04", paramVO); return tlist; } + + public List selectDetail_MIX_LQI_05(VEAQestnrVO paramVO) throws Exception { + List tlist = (List) list("VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_05", paramVO); + return tlist; + } } diff --git a/src/main/java/kcc/ve/oprtn/qestnr/service/impl/VEALettnQestnrMIXServiceImpl.java b/src/main/java/kcc/ve/oprtn/qestnr/service/impl/VEALettnQestnrMIXServiceImpl.java index 27731be9..64680c40 100644 --- a/src/main/java/kcc/ve/oprtn/qestnr/service/impl/VEALettnQestnrMIXServiceImpl.java +++ b/src/main/java/kcc/ve/oprtn/qestnr/service/impl/VEALettnQestnrMIXServiceImpl.java @@ -40,4 +40,9 @@ public class VEALettnQestnrMIXServiceImpl implements VEALettnQestnrMIXService { public List selectDetail_MIX_LQI_04(VEAQestnrVO paramVO) throws Exception{ return vEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04(paramVO); } + + //관리자 설문 문항 + public List selectDetail_MIX_LQI_05(VEAQestnrVO paramVO) throws Exception{ + return vEALettnQestnrMIXDAO.selectDetail_MIX_LQI_05(paramVO); + } } diff --git a/src/main/resources/egovframework/sqlmap/let/uss/olp/qri/EgovQustnrRespondInfo_SQL_Postgresql.xml b/src/main/resources/egovframework/sqlmap/let/uss/olp/qri/EgovQustnrRespondInfo_SQL_Postgresql.xml index ba275dc7..5d0ac3cd 100644 --- a/src/main/resources/egovframework/sqlmap/let/uss/olp/qri/EgovQustnrRespondInfo_SQL_Postgresql.xml +++ b/src/main/resources/egovframework/sqlmap/let/uss/olp/qri/EgovQustnrRespondInfo_SQL_Postgresql.xml @@ -127,7 +127,7 @@ A.LAST_UPDT_PNTTM, A.LAST_UPDUSR_ID, A.QESTN_SN, - A.QESTN_TY_CODE, + A.QESTN_TY_CODE "qestnTyCode", A.QESTN_CN, A.MXMM_CHOISE_CO, A.QUSTNR_TMPLAT_ID "qestnrTmplatId" @@ -805,9 +805,9 @@ , d.answer1 , e.prcs_ord AS prcsAplctPrdOrd - - + , f.qestn_ty_code AS qestnTyCode + FROM lettnqustnrqesitm a LEFT OUTER JOIN LETTNQESTNRRSLTDETAIL b on(1=1 @@ -862,6 +862,9 @@ AND a.qustnr_qesitm_id=d.qustnr_qesitm_id ) + + LEFT OUTER JOIN lettnqustnrqesitm f + ON a.QUSTNR_QESITM_ID = f.QUSTNR_QESITM_ID ,( diff --git a/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Postgresql.xml b/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Postgresql.xml index 28aa10dd..026d35ab 100644 --- a/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Postgresql.xml +++ b/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Postgresql.xml @@ -832,12 +832,12 @@ END AS qestRsltExists, /* 설문지 정보 */ I.qustnr_tmplat_id AS qustnrTmplatId , - COALESCE(qustnr01.QESTNR_ID_10, - i.qestnr_id_10) AS qestnrId10 , - COALESCE(qustnr01.QESTNR_ID_20, - i.qestnr_id_20) AS qestnrId20 , - COALESCE(qustnr01.QESTNR_ID_30, - i.qestnr_id_30) AS qestnrId30 , + COALESCE(i.qestnr_id_10, qustnr01.QESTNR_ID_10 + ) AS qestnrId10 , + COALESCE(i.qestnr_id_20, qustnr01.QESTNR_ID_20 + ) AS qestnrId20 , + COALESCE(i.qestnr_id_30, qustnr01.QESTNR_ID_30 + ) AS qestnrId30 , /* 답변 정보 */ qustnr01.QESTNR_ID_10_CNT AS qestnrId10Cnt , qustnr01.QESTNR_ID_20_CNT AS qestnrId20Cnt , @@ -955,7 +955,7 @@ */ ) I ON - (vpap.edu_strt_pnttm between coalesce(I.qustnr_bgnde, '20000101') and coalesce(I.qustnr_endde,'99991231')) + (replace(vpap.edu_strt_pnttm,'.','') between coalesce(I.qustnr_bgnde, '20000101') and coalesce(I.qustnr_endde,'99991231')) diff --git a/src/main/resources/egovframework/sqlmap/ve/prcs/VEPrcsAplctPrd_SQL_Postgresql.xml b/src/main/resources/egovframework/sqlmap/ve/prcs/VEPrcsAplctPrd_SQL_Postgresql.xml index 7c366c9d..9694a889 100644 --- a/src/main/resources/egovframework/sqlmap/ve/prcs/VEPrcsAplctPrd_SQL_Postgresql.xml +++ b/src/main/resources/egovframework/sqlmap/ve/prcs/VEPrcsAplctPrd_SQL_Postgresql.xml @@ -1789,9 +1789,9 @@ I10.qustnr_tmplat_id AS qustnrTmplatId , */ - COALESCE(qustnr01.QESTNR_ID_10, I10.qestnr_id_10) AS qestnrId10 , - COALESCE(qustnr01.QESTNR_ID_20, I20.qestnr_id_20) AS qestnrId20 , - COALESCE(qustnr01.QESTNR_ID_30, I30.qestnr_id_30) AS qestnrId30 , + COALESCE(I10.qestnr_id_10, qustnr01.QESTNR_ID_10) AS qestnrId10 , + COALESCE(I20.qestnr_id_20, qustnr01.QESTNR_ID_20) AS qestnrId20 , + COALESCE(I30.qestnr_id_30, qustnr01.QESTNR_ID_30) AS qestnrId30 , /* 답변 정보 */ @@ -1885,9 +1885,13 @@ */ + /* SELECT site_id, min(qestnr_id_10) as qestnr_id_10 + */ + SELECT a0.prcs_ord, a0.site_id, a0.qestnr_id_10 FROM ( select + b0.prcs_ord, a.QUSTNR_TMPLAT_ID , a.SITE_ID , /* (CASE WHEN a.STTUS = '1' THEN a.QESTNR_ID END) AS QESTNR_ID_10 */ @@ -1900,6 +1904,7 @@ , ( select + a.prcs_ord , b.edu_strt_pnttm , b.lctr_div_cd from @@ -1919,7 +1924,7 @@ /* AND a.STTUS IN ('1') */ - and b0.edu_strt_pnttm between coalesce(a.qustnr_bgnde, + and replace(b0.edu_strt_pnttm,'.','') between coalesce(a.qustnr_bgnde, '2000.01.01') and coalesce(a.qustnr_endde, '9999.12.31') @@ -1928,11 +1933,16 @@ coalesce(a.qustnr_bgnde, '9999.12.31') )a0 + /* group by a0.site_id + */ + GROUP BY a0.prcs_ord, a0.site_id, a0.qestnr_id_10 ) I10 ON - (1 = 1 and a.lctr_div_cd = I10.site_id) + (1 = 1 and a.lctr_div_cd = I10.site_id + and a.prcs_ord = I10.prcs_ord + ) LEFT OUTER JOIN ( /* 현재 진행가능한 설문 정보(기본, 선생님, 강사) 여러개가 있는 경우는 최근 등록된 설문 정보를 가져온다.*/ diff --git a/src/main/resources/egovframework/sqlmap/ve/qustnr/VEALettnQestnrMIX_SQL_Postgresql.xml b/src/main/resources/egovframework/sqlmap/ve/qustnr/VEALettnQestnrMIX_SQL_Postgresql.xml index 116dd1a1..531f93a4 100644 --- a/src/main/resources/egovframework/sqlmap/ve/qustnr/VEALettnQestnrMIX_SQL_Postgresql.xml +++ b/src/main/resources/egovframework/sqlmap/ve/qustnr/VEALettnQestnrMIX_SQL_Postgresql.xml @@ -170,7 +170,7 @@ AND COALESCE(A.site_id_cd, '10')=#siteIdCd# AND c.prcs_aplct_prd_ord=#eduAplctOrd# - AND c.edu_strt_pnttm between coalesce(a.qustnr_bgnde, '20000101') and coalesce(a.qustnr_endde, '99991231') + AND REPLACE(c.edu_strt_pnttm,'.','') between coalesce(a.qustnr_bgnde, '20000101') and coalesce(a.qustnr_endde, '99991231') /* AND to_char(NOW(), 'YYYY.MM.DD') BETWEEN @@ -398,5 +398,36 @@ , a.qustnr_nm , a.qustnr_birth - + + + + diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/cmdTrgt/cndtnEduPrcsAplctCfnMngDetail.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/cmdTrgt/cndtnEduPrcsAplctCfnMngDetail.jsp index 2b0f67eb..e0395ee0 100644 --- a/src/main/webapp/WEB-INF/jsp/oprtn/cmdTrgt/cndtnEduPrcsAplctCfnMngDetail.jsp +++ b/src/main/webapp/WEB-INF/jsp/oprtn/cmdTrgt/cndtnEduPrcsAplctCfnMngDetail.jsp @@ -211,8 +211,9 @@ // form.action = ""; form.action = ""; - - window.open("#", "_securityPop", "scrollbars = no, top=100px, left=100px, height=750px, width=950px"); + form.action = ""; + + window.open("#", "_securityPop", "scrollbars = no, top=100px, left=100px, height=750px, width=950px"); form.target = "_securityPop"; form.submit(); } @@ -535,8 +536,20 @@
- + + + + + + + + + + + + + + --> +
@@ -820,8 +834,10 @@ - + --> diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/cndtnEduPrcsAplctCfnMngDetail.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/cndtnEduPrcsAplctCfnMngDetail.jsp index a04248c0..8eaf6131 100644 --- a/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/cndtnEduPrcsAplctCfnMngDetail.jsp +++ b/src/main/webapp/WEB-INF/jsp/oprtn/cndtnSspnIdtmt/cndtnEduPrcsAplctCfnMngDetail.jsp @@ -1167,18 +1167,46 @@ - 평가문항 - 매우만족 - 만족 - 보통 - 불만족 - 매우불만족 + - + - + - + - + - + - + + + + + + + + + 객관식질문 + ${chasiSrvyItemInfo.sn1} + ${chasiSrvyItemInfo.sn2} + ${chasiSrvyItemInfo.sn3} + ${chasiSrvyItemInfo.sn4} + ${chasiSrvyItemInfo.sn5} + + + + + 주관식질문 + + + + + + + + + ${status1.count}) diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/prevent/cndtnEduPrcsAplctCfnMngDetail.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/prevent/cndtnEduPrcsAplctCfnMngDetail.jsp index 139f8d02..3c9c9c64 100644 --- a/src/main/webapp/WEB-INF/jsp/oprtn/prevent/cndtnEduPrcsAplctCfnMngDetail.jsp +++ b/src/main/webapp/WEB-INF/jsp/oprtn/prevent/cndtnEduPrcsAplctCfnMngDetail.jsp @@ -484,20 +484,7 @@ // listForm.searchCondition.value = $("#searchCondition").val() ; vForm.action = ""; vForm.submit(); - } - - // 이수증 - function fncPrintCert(prcsAplctPrdOrd) { - var form = document.popForm; - - form.prcsAplctPrdOrd.value = prcsAplctPrdOrd; - - form.action = ""; - - window.open("#", "_printCertPop", "scrollbars = no, top=10px, left=10px, height=1500px, width=1200px"); - form.target = "_printCertPop"; - form.submit(); - } + } @@ -942,8 +929,8 @@ - + - diff --git a/src/main/webapp/WEB-INF/jsp/web/ve/aplct/cpyrgExprnClsrm/exprnClsrmInfo/popup/qustnrFndtnPopList.jsp b/src/main/webapp/WEB-INF/jsp/web/ve/aplct/cpyrgExprnClsrm/exprnClsrmInfo/popup/qustnrFndtnPopList.jsp index 66c760ae..394d75de 100644 --- a/src/main/webapp/WEB-INF/jsp/web/ve/aplct/cpyrgExprnClsrm/exprnClsrmInfo/popup/qustnrFndtnPopList.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/ve/aplct/cpyrgExprnClsrm/exprnClsrmInfo/popup/qustnrFndtnPopList.jsp @@ -114,6 +114,27 @@ function popupSrvySendSubmit(){ + + const $inputs = $('.check-input'); // 동일한 class의 text input들 + const totalCount = $inputs.length; // 전체 개수 + let filledCount = 0; // 값이 입력된 개수 + + $inputs.each(function() { + if ($(this).val().trim() !== '') { + filledCount++; + } + }); + + if (filledCount === totalCount) { + alert("✅ 모든 ${totalCount}개의 입력란이 채워졌습니다."); + //$('#result').text(`✅ 모든 ${totalCount}개의 입력란이 채워졌습니다.`); + } else { + alert("⚠️ 전체 ${totalCount}개 중 ${filledCount}개만 입력되었습니다."); + //$('#result').text(`⚠️ 전체 ${totalCount}개 중 ${filledCount}개만 입력되었습니다.`); + } + + //return; + var v_qestmSize = parseInt('${chasiSrvyListCnt}'); //평가문항 수량 var v_sum = 0; @@ -197,7 +218,7 @@ - if(v_qestmSize != v_sum ){ + if(v_qestmSize != v_sum + filledCount ){ alert("문항의 합계가 응답수량과 맞지 않습니다."); $("#verySatisfied_"+i).focus(); return @@ -454,84 +475,100 @@ $(document).ready(function(){ -
+ - - - +
+ + + + + + checked + + + > + + + + + + + checked - - + + > - - - - - + + + + + + + + checked - + > - + + + + + + + + checked + + + > + + - - - - - - - checked - - - > - - - - - - - - - checked - - - > - - + + + + checked + + + > + + + +
- - - - - - checked - - - > - - -
-
+ + +
+ + + +
+
+