2025-11-10 16:16 설문내용 수정

This commit is contained in:
myname 2025-11-10 16:17:04 +09:00
parent 986b400838
commit ac7be2aeaa
15 changed files with 323 additions and 107 deletions

View File

@ -128,6 +128,30 @@ public class QustnrCommonUtil {
return p_model; 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<VEAQestnrVO> chasiSrvyList = p_vEALettnQestnrMIXService.selectDetail_MIX_LQI_05(vEAQestnrVO);
if(chasiSrvyList.size() > 0) {
p_model.addAttribute("chasiSrvyItemList",chasiSrvyList);
}
return p_model;
}
public ModelMap _chasiSrvyList_TA( public ModelMap _chasiSrvyList_TA(
ModelMap p_model ModelMap p_model
, String p_siteId , String p_siteId

View File

@ -132,6 +132,9 @@ public class QustnrRespondInfoVO implements Serializable {
private String prcsAplctPrdOrd = ""; private String prcsAplctPrdOrd = "";
private String qestnTyCode = "";
// 20231124 이호영 // 20231124 이호영
// 강화 기반은 라디오 버튼이라 변수 추가함 // 강화 기반은 라디오 버튼이라 변수 추가함
@ -676,4 +679,16 @@ public class QustnrRespondInfoVO implements Serializable {
} }
public String getQestnTyCode() {
return qestnTyCode;
}
public void setQestnTyCode(String qestnTyCode) {
this.qestnTyCode = qestnTyCode;
}
} }

View File

@ -1387,6 +1387,22 @@ public class CndtnPrcsInfoMngController {
ex.printStackTrace(); 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 //개인별 만족도 관리 - chasiSrvyEAList
try{ try{

View File

@ -18,4 +18,7 @@ public interface VEALettnQestnrMIXService {
//관리자 청소년,성인 - 개별 만족도 리스트 //관리자 청소년,성인 - 개별 만족도 리스트
List<VEAQestnrVO> selectDetail_MIX_LQI_04(VEAQestnrVO paramVO) throws Exception; // R List<VEAQestnrVO> selectDetail_MIX_LQI_04(VEAQestnrVO paramVO) throws Exception; // R
//관리자 청소년,성인 - 설문항목
List<VEAQestnrVO> selectDetail_MIX_LQI_05(VEAQestnrVO paramVO) throws Exception; // R
} }

View File

@ -95,6 +95,42 @@ public class VEAQestnrVO extends ComDefaultVO implements Serializable {
private String qustnrBirth; //개별설문등록자생년월일 private String qustnrBirth; //개별설문등록자생년월일
private String qustnrScore; //개별설문등록자점수 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() { public String getQestnrQesitmId() {
return qestnrQesitmId; return qestnrQesitmId;

View File

@ -32,4 +32,9 @@ public class VEALettnQestnrMIXDAO extends EgovAbstractDAO {
List<VEAQestnrVO> tlist = (List<VEAQestnrVO>) list("VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04", paramVO); List<VEAQestnrVO> tlist = (List<VEAQestnrVO>) list("VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04", paramVO);
return tlist; return tlist;
} }
public List<VEAQestnrVO> selectDetail_MIX_LQI_05(VEAQestnrVO paramVO) throws Exception {
List<VEAQestnrVO> tlist = (List<VEAQestnrVO>) list("VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_05", paramVO);
return tlist;
}
} }

View File

@ -40,4 +40,9 @@ public class VEALettnQestnrMIXServiceImpl implements VEALettnQestnrMIXService {
public List<VEAQestnrVO> selectDetail_MIX_LQI_04(VEAQestnrVO paramVO) throws Exception{ public List<VEAQestnrVO> selectDetail_MIX_LQI_04(VEAQestnrVO paramVO) throws Exception{
return vEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04(paramVO); return vEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04(paramVO);
} }
//관리자 설문 문항
public List<VEAQestnrVO> selectDetail_MIX_LQI_05(VEAQestnrVO paramVO) throws Exception{
return vEALettnQestnrMIXDAO.selectDetail_MIX_LQI_05(paramVO);
}
} }

View File

@ -127,7 +127,7 @@
A.LAST_UPDT_PNTTM, A.LAST_UPDT_PNTTM,
A.LAST_UPDUSR_ID, A.LAST_UPDUSR_ID,
A.QESTN_SN, A.QESTN_SN,
A.QESTN_TY_CODE, A.QESTN_TY_CODE "qestnTyCode",
A.QESTN_CN, A.QESTN_CN,
A.MXMM_CHOISE_CO, A.MXMM_CHOISE_CO,
A.QUSTNR_TMPLAT_ID "qestnrTmplatId" A.QUSTNR_TMPLAT_ID "qestnrTmplatId"
@ -806,7 +806,7 @@
, e.prcs_ord AS prcsAplctPrdOrd , e.prcs_ord AS prcsAplctPrdOrd
, f.qestn_ty_code AS qestnTyCode
FROM lettnqustnrqesitm a FROM lettnqustnrqesitm a
LEFT OUTER JOIN LETTNQESTNRRSLTDETAIL b LEFT OUTER JOIN LETTNQESTNRRSLTDETAIL b
@ -863,6 +863,9 @@
) )
LEFT OUTER JOIN lettnqustnrqesitm f
ON a.QUSTNR_QESITM_ID = f.QUSTNR_QESITM_ID
,( ,(
SELECT a.prcs_ord SELECT a.prcs_ord

View File

@ -832,12 +832,12 @@
END AS qestRsltExists, END AS qestRsltExists,
/* 설문지 정보 */ /* 설문지 정보 */
I.qustnr_tmplat_id AS qustnrTmplatId , I.qustnr_tmplat_id AS qustnrTmplatId ,
COALESCE(qustnr01.QESTNR_ID_10, COALESCE(i.qestnr_id_10, qustnr01.QESTNR_ID_10
i.qestnr_id_10) AS qestnrId10 , ) AS qestnrId10 ,
COALESCE(qustnr01.QESTNR_ID_20, COALESCE(i.qestnr_id_20, qustnr01.QESTNR_ID_20
i.qestnr_id_20) AS qestnrId20 , ) AS qestnrId20 ,
COALESCE(qustnr01.QESTNR_ID_30, COALESCE(i.qestnr_id_30, qustnr01.QESTNR_ID_30
i.qestnr_id_30) AS qestnrId30 , ) AS qestnrId30 ,
/* 답변 정보 */ /* 답변 정보 */
qustnr01.QESTNR_ID_10_CNT AS qestnrId10Cnt , qustnr01.QESTNR_ID_10_CNT AS qestnrId10Cnt ,
qustnr01.QESTNR_ID_20_CNT AS qestnrId20Cnt , qustnr01.QESTNR_ID_20_CNT AS qestnrId20Cnt ,
@ -955,7 +955,7 @@
*/ */
) I ON ) 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'))

View File

@ -1789,9 +1789,9 @@
I10.qustnr_tmplat_id AS qustnrTmplatId , I10.qustnr_tmplat_id AS qustnrTmplatId ,
*/ */
COALESCE(qustnr01.QESTNR_ID_10, I10.qestnr_id_10) AS qestnrId10 , COALESCE(I10.qestnr_id_10, qustnr01.QESTNR_ID_10) AS qestnrId10 ,
COALESCE(qustnr01.QESTNR_ID_20, I20.qestnr_id_20) AS qestnrId20 , COALESCE(I20.qestnr_id_20, qustnr01.QESTNR_ID_20) AS qestnrId20 ,
COALESCE(qustnr01.QESTNR_ID_30, I30.qestnr_id_30) AS qestnrId30 , 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 site_id, min(qestnr_id_10) as qestnr_id_10
*/
SELECT a0.prcs_ord, a0.site_id, a0.qestnr_id_10
FROM ( FROM (
select select
b0.prcs_ord,
a.QUSTNR_TMPLAT_ID , a.QUSTNR_TMPLAT_ID ,
a.SITE_ID , a.SITE_ID ,
/* (CASE WHEN a.STTUS = '1' THEN a.QESTNR_ID END) AS QESTNR_ID_10 */ /* (CASE WHEN a.STTUS = '1' THEN a.QESTNR_ID END) AS QESTNR_ID_10 */
@ -1900,6 +1904,7 @@
, ( , (
select select
a.prcs_ord ,
b.edu_strt_pnttm b.edu_strt_pnttm
, b.lctr_div_cd , b.lctr_div_cd
from from
@ -1919,7 +1924,7 @@
/* /*
AND a.STTUS IN ('1') */ 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') '2000.01.01')
and coalesce(a.qustnr_endde, and coalesce(a.qustnr_endde,
'9999.12.31') '9999.12.31')
@ -1928,11 +1933,16 @@
coalesce(a.qustnr_bgnde, coalesce(a.qustnr_bgnde,
'9999.12.31') '9999.12.31')
)a0 )a0
/*
group by a0.site_id group by a0.site_id
*/
GROUP BY a0.prcs_ord, a0.site_id, a0.qestnr_id_10
) I10 ON ) 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 ( LEFT OUTER JOIN (
/* 현재 진행가능한 설문 정보(기본, 선생님, 강사) 여러개가 있는 경우는 최근 등록된 설문 정보를 가져온다.*/ /* 현재 진행가능한 설문 정보(기본, 선생님, 강사) 여러개가 있는 경우는 최근 등록된 설문 정보를 가져온다.*/

View File

@ -170,7 +170,7 @@
AND COALESCE(A.site_id_cd, '10')=#siteIdCd# AND COALESCE(A.site_id_cd, '10')=#siteIdCd#
AND c.prcs_aplct_prd_ord=#eduAplctOrd# 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 AND to_char(NOW(), 'YYYY.MM.DD') BETWEEN
@ -399,4 +399,35 @@
, a.qustnr_birth , a.qustnr_birth
</select> </select>
<!-- //관리자 청소년/성인 만족도 평가 R -->
<select id="VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_05" parameterClass="VEAQestnrVO" resultClass="VEAQestnrVO">
/* VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_05 */
SELECT
a.qestnr_id as qestnrId,
qustnr_qesitm_id as qustnrQesitmId
, max(case
when a.iem_sn = 1 then a.iem_cn
end) as sn1
, max(case
when a.iem_sn = 2 then a.iem_cn
end) as sn2
, max(case
when a.iem_sn = 3 then a.iem_cn
end) as sn3
, max(case
when a.iem_sn = 4 then a.iem_cn
end) as sn4
, max(case
when a.iem_sn = 5 then a.iem_cn
end) as sn5
FROM lettnqustnriem a
WHERE 1=1
and A.QESTNR_ID = #qestnrId#
GROUP BY a.qestnr_id, qustnr_qesitm_id
</select>
</sqlMap> </sqlMap>

View File

@ -211,6 +211,7 @@
// form.action = "<c:url value='/kccadr/oprtn/cmdTrgt/popup/fndthInstrAsgnmPopup.do'/>"; // form.action = "<c:url value='/kccadr/oprtn/cmdTrgt/popup/fndthInstrAsgnmPopup.do'/>";
form.action = "<c:url value='/kccadr/oprtn/cmdTrgt/popup/cndtnInstrAsgnmPopup.do'/>"; form.action = "<c:url value='/kccadr/oprtn/cmdTrgt/popup/cndtnInstrAsgnmPopup.do'/>";
form.action = "<c:url value='/kccadr/oprtn/cndtnSspnIdtmt/popup/cndtnInstrAsgnmPopup.do'/>";
window.open("#", "_securityPop", "scrollbars = no, top=100px, left=100px, height=750px, width=950px"); window.open("#", "_securityPop", "scrollbars = no, top=100px, left=100px, height=750px, width=950px");
form.target = "_securityPop"; form.target = "_securityPop";
@ -535,8 +536,20 @@
<div class="cont_wrap"> <div class="cont_wrap">
<div class="box"> <div class="box">
<!-- cont_tit -->
<!-- 메뉴에 등록된 URL을 넣으면 해당 메뉴명까지 자동 노출 해줌 -->
<!-- 메뉴에 등록되지 않은 메뉴를 마지막에 넣을떄 1 -->
<!-- 메뉴에 등록되지 않은 메뉴를 마지막에 넣을떄 2 -->
<!-- 메뉴에 등록되지 않은 메뉴를 마지막에 넣을떄 3 -->
<c:import url="/cmm/navi/adminContNav.do">
<c:param name="url" value="/kccadr/oprtn/cmdTrgt/cndtnEduPrcsMngList.do"/>
<c:param name="name1" value="확정과정관리"/>
<c:param name="name2" value="확정과정 상세"/>
<c:param name="name3" value=""/>
</c:import>
<!-- cont_tit --> <!-- cont_tit -->
<!--
<div class="cont_tit"> <div class="cont_tit">
<h2>교육확정상세</h2> <h2>교육확정상세</h2>
<ul class="cont_nav"> <ul class="cont_nav">
@ -547,6 +560,7 @@
<li><span class="cur_nav">교육확정상세</span></li> <li><span class="cur_nav">교육확정상세</span></li>
</ul> </ul>
</div> </div>
-->
<!-- //cont_tit --> <!-- //cont_tit -->
<div class="cont"> <div class="cont">
@ -820,8 +834,10 @@
<input type="text" id="email_${status.count}" name="email_${status.count}" <input type="text" id="email_${status.count}" name="email_${status.count}"
placeholder="이메일을 입력하세요." class="search_input" placeholder="이메일을 입력하세요." class="search_input"
value="<c:out value='${list.email}'/>"> value="<c:out value='${list.email}'/>">
<!--
<button type="button" class="btn_type04" <button type="button" class="btn_type04"
onclick="fn_emailChg('<c:out value="${list.eduAplctOrd }" />', 'email_${status.count}')">저장</button> onclick="fn_emailChg('<c:out value="${list.eduAplctOrd }" />', 'email_${status.count}')">저장</button>
-->
</td> </td>
<td> <td>
<c:out value="${list.phone}"/> <c:out value="${list.phone}"/>

View File

@ -1167,18 +1167,46 @@
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr>
<th scope="col">평가문항</th> <th scope="col">-</th>
<th scope="col">매우만족</th> <th scope="col">-</th>
<th scope="col">만족</th> <th scope="col">-</th>
<th scope="col">보통</th> <th scope="col">-</th>
<th scope="col">불만족</th> <th scope="col">-</th>
<th scope="col">매우불만족</th> <th scope="col">-</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<c:forEach items="${Comtnqustnrqesitm}" var="QestmInfo" varStatus="status1"> <c:forEach items="${Comtnqustnrqesitm}" var="QestmInfo" varStatus="status1">
<c:forEach items="${chasiSrvyList}" var="chasiSrvyInfo" varStatus=""> <c:forEach items="${chasiSrvyList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qestnrQesitmId}"> <c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qestnrQesitmId}">
<c:forEach items="${chasiSrvyItemList}" var="chasiSrvyItemInfo" varStatus="">
<c:if test="${chasiSrvyItemInfo.qustnrQesitmId eq chasiSrvyInfo.qestnrQesitmId}">
<c:if test="${QestmInfo.qestnTyCode eq '1'}">
<tr>
<td>객관식질문</td>
<td>${chasiSrvyItemInfo.sn1}</td>
<td>${chasiSrvyItemInfo.sn2}</td>
<td>${chasiSrvyItemInfo.sn3}</td>
<td>${chasiSrvyItemInfo.sn4}</td>
<td>${chasiSrvyItemInfo.sn5}</td>
</tr>
</c:if>
<c:if test="${QestmInfo.qestnTyCode eq '2'}">
<tr>
<td>주관식질문</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</c:if>
</c:if>
</c:forEach>
<tr> <tr>
<th scope="row" class="t_left"> <th scope="row" class="t_left">
${status1.count}) <c:out value="${QestmInfo.qestnCn}" escapeXml="true" /> ${status1.count}) <c:out value="${QestmInfo.qestnCn}" escapeXml="true" />

View File

@ -485,19 +485,6 @@
vForm.action = "<c:url value='/kccadr/oprtn/prevent/trgtEduAplctCnfrmExcel.do'/>"; vForm.action = "<c:url value='/kccadr/oprtn/prevent/trgtEduAplctCnfrmExcel.do'/>";
vForm.submit(); vForm.submit();
} }
// 이수증
function fncPrintCert(prcsAplctPrdOrd) {
var form = document.popForm;
form.prcsAplctPrdOrd.value = prcsAplctPrdOrd;
form.action = "<c:url value='/kccadr/oprtn/cndtnSspnIdtmt/popup/printCertPopup.do'/>";
window.open("#", "_printCertPop", "scrollbars = no, top=10px, left=10px, height=1500px, width=1200px");
form.target = "_printCertPop";
form.submit();
}
</script> </script>
</head> </head>
@ -943,7 +930,7 @@
<c:when test="${list.qestRsltExists and list.aprvlCd eq '60' and list.aplctStateCd eq '20' and list.qestnrId10Cnt gt 0}"> <c:when test="${list.qestRsltExists and list.aprvlCd eq '60' and list.aplctStateCd eq '20' and list.qestnrId10Cnt gt 0}">
<!-- 교육 기간 종료 & 교육신청은 확정(60) & 교육상태는 이슈(20) & 수료증 출력 가능 --> <!-- 교육 기간 종료 & 교육신청은 확정(60) & 교육상태는 이슈(20) & 수료증 출력 가능 -->
<button type="button" class="btn_type04" <button type="button" class="btn_type04"
onclick="fncPrintCert('<c:out value="${info.prcsAplctPrdOrd }" />')"/>출력</button> onclick="fncPrintCert('${list.eduAplctOrd}','${list.eduChasiOrd}','10','insert','${list.qustnrTmplatId}','${list.qestnrId10}','')"/>출력</button>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
- -

View File

@ -115,6 +115,27 @@
function popupSrvySendSubmit(){ 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_qestmSize = parseInt('${chasiSrvyListCnt}'); //평가문항 수량
var v_sum = 0; var v_sum = 0;
//var qestmSize = parseInt($("#qestmInfoSize").val()); //평가문항 수량 //var qestmSize = parseInt($("#qestmInfoSize").val()); //평가문항 수량
@ -197,7 +218,7 @@
if(v_qestmSize != v_sum ){ if(v_qestmSize != v_sum + filledCount ){
alert("문항의 합계가 응답수량과 맞지 않습니다."); alert("문항의 합계가 응답수량과 맞지 않습니다.");
$("#verySatisfied_"+i).focus(); $("#verySatisfied_"+i).focus();
return return
@ -454,6 +475,8 @@ $(document).ready(function(){
</th> </th>
<td style="text-align:left;"> <td style="text-align:left;">
<c:if test="${QestmInfo.qestnTyCode eq '1'}">
<div class="radio_wrap"> <div class="radio_wrap">
<c:if test="${not empty QestmInfo.answer5}"> <c:if test="${not empty QestmInfo.answer5}">
@ -532,6 +555,20 @@ $(document).ready(function(){
</span> </span>
</c:if> </c:if>
</div> </div>
</c:if>
<c:if test="${QestmInfo.qestnTyCode eq '2'}">
<div class="radio_wrap">
<span>
<label>
<input type="text" numberOnly class="popupInput check-input" style="width: 50%;"
id="answer" name="answer" value="<c:out value="${QestmInfo.answer}" />">
</label>
</span>
</div>
</c:if>
</td> </td>
</tr> </tr>
</c:forEach> </c:forEach>