대상자 엑셀 업로드 진행중

This commit is contained in:
hylee 2024-01-10 15:09:39 +09:00
parent f19109e26f
commit 661aad122c
9 changed files with 422 additions and 20 deletions

View File

@ -116,7 +116,7 @@ public class EgovCmmUseServiceImpl extends EgovAbstractServiceImpl implements Eg
@Override
public String selectCmmCodeDetailCode(ComDefaultCodeVO vo) {
String resultCodeNm = "";
if(StringUtils.isNotBlank(vo.getCodeId()) && StringUtils.isNotBlank(vo.getCode())){
if(StringUtils.isNotBlank(vo.getCodeId())){
CmmnDetailCode code = cmmUseDAO.selectCmmCodeDetailValue(vo);
if(code != null){
resultCodeNm = code.getCode();

View File

@ -25,6 +25,8 @@ public interface CndtnTrgtMngService {
List<CndtnTrgtMngVO> selectDuplChk(CndtnTrgtMngVO cndtnTrgtInfoMngVO);
void bulkInsert(List<CndtnTrgtMngVO> trgtExcelVOList);

View File

@ -243,6 +243,7 @@ public class CndtnTrgtMngVO extends ComDefaultVO implements Serializable {
@Override
public String toString() {
return "\n CndtnTrgtMngVO => \n"
+ " sspnIdtmtTrgtOrd=[" + sspnIdtmtTrgtOrd + "] // pk\n"
+ " reqPnttm=[" + reqPnttm + "] // 요청 점수 시간\n"
+ ", vntYear=[" + vntYear + "] // 사건 년도\n"
+ ", vntNmbr=[" + vntNmbr + "] // 사건 번호\n"

View File

@ -137,5 +137,9 @@ public class CndtnTrgtMngDAO extends EgovAbstractDAO {
return (List<CndtnTrgtMngVO>) list("cndtnTrgtInfoMngDAO.selectDuplChk", cndtnTrgtInfoMngVO);
}
public void bulkInsert(List<CndtnTrgtMngVO> trgtExcelVOList) {
insert("cndtnTrgtInfoMngDAO.bulkInsert", trgtExcelVOList);
}
}

View File

@ -74,4 +74,9 @@ public class CndtnTrgtMngServiceImpl implements CndtnTrgtMngService {
return cndtnTrgtInfoMngDAO.selectDuplChk(cndtnTrgtInfoMngVO);
}
@Override
public void bulkInsert(List<CndtnTrgtMngVO> trgtExcelVOList) {
cndtnTrgtInfoMngDAO.bulkInsert(trgtExcelVOList);
}
}

View File

@ -23,6 +23,7 @@ import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import egovframework.rte.fdl.cmmn.exception.FdlException;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import kcc.com.cmm.ComDefaultCodeVO;
@ -563,6 +564,7 @@ public class CndtnTrgtMngController {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
modelAndView.addObject("result", "success");
//로그인 처리====================================
//로그인 정보 가져오기
@ -592,33 +594,76 @@ public class CndtnTrgtMngController {
List<FileVO> fileList = fileService.selectFileInfs(fileVO);
if(fileList.size() > 0) {
System.out.println(fileList.get(0).toString());
LOGGER.info(" ++ SAVE FILE INFO :: [{}] ", fileList.get(0).toString());
FileVO fileInfoVO = fileList.get(0);
// String filePathAndNm = fileInfoVO.getFileStreCours() + fileInfoVO.getStreFileNm()+"."+fileInfoVO.getFileExtsn();
// 파일경로 + 파일명 생성
String filePathAndNm = fileInfoVO.getFileStreCours() + fileInfoVO.getStreFileNm();
LOGGER.info(" ++ filePathAndNm :: [{}]", filePathAndNm);
TrgtExcelReader reader = new TrgtExcelReader(filePathAndNm);
TrgtExcelReader excelReader = new TrgtExcelReader(filePathAndNm);
try {
long startTime = System.currentTimeMillis();
List<CndtnTrgtMngVO> trgtExcelVOList = reader.readExcelFile();
long endTime = System.currentTimeMillis();
double duration = (endTime - startTime) / 1000.0; // 밀리초를 초로 변환
LOGGER.info(" ++ Excel Read Start");
// 엑셀 Read
List<CndtnTrgtMngVO> trgtExcelVOList = excelReader.readExcelFile();
LOGGER.info(" ++ Excel Read End Total :: [{}]", trgtExcelVOList.size());
System.out.println("Execution time: " + duration + " milliseconds");
LOGGER.info("trgtExcelVOList.size() :: [{}]", trgtExcelVOList.size());
LOGGER.info("trgtExcelVOList.get(0).toString() :: [{}]", trgtExcelVOList.get(0).toString());
int i = 0 ;
for(CndtnTrgtMngVO cndtnTrgtMngVO : trgtExcelVOList)
{
cndtnTrgtMngVO.setSspnIdtmtTrgtOrd(trgtOrdService.getNextStringId());
cndtnTrgtMngVO.setFrstRegisterId(loginVO.getUniqId()); //esntl_id
// 의뢰 상태코드
ComDefaultCodeVO comDefaultReqCodeVO = new ComDefaultCodeVO();
comDefaultReqCodeVO.setCodeId("VEA005");
comDefaultReqCodeVO.setCodeDc(cndtnTrgtMngVO.getReqStateCd());
cndtnTrgtMngVO.setReqStateCd( egovCmmUseService.selectCmmCodeDetailCode(comDefaultReqCodeVO) );
// 교육상태코드
ComDefaultCodeVO comDefaultEduCodeVO = new ComDefaultCodeVO();
comDefaultEduCodeVO.setCodeId("VEA002");
comDefaultEduCodeVO.setCodeDc(cndtnTrgtMngVO.getEduStateCd());
cndtnTrgtMngVO.setEduStateCd( egovCmmUseService.selectCmmCodeDetailCode(comDefaultEduCodeVO) );
// 교육상태코드
// 설별
ComDefaultCodeVO comDefaultSexCodeVO = new ComDefaultCodeVO();
comDefaultSexCodeVO.setCodeId("COM014");
comDefaultSexCodeVO.setCodeDc(cndtnTrgtMngVO.getSex());
cndtnTrgtMngVO.setSex( egovCmmUseService.selectCmmCodeDetailCode(comDefaultSexCodeVO) );
cndtnTrgtMngVO = egovCryptoUtil.encryptCndtnTrgtMngVOInfo(cndtnTrgtMngVO);
LOGGER.info(cndtnTrgtMngVO.toString());
// 이수 상태일 경우 vea_aplct_detail_info TB에 INSERT 해야함
// if("20".equals(cndtnTrgtMngVO.getEduStateCd()))
// {
// CndtnTrgtMngVO veaAplctDetailInfoVO = new CndtnTrgtMngVO();
//
// }
// TEST
// i++;
// if(i==10)
// break;
}
LOGGER.info(" 엑셀 insert :: [{}]건", trgtExcelVOList.size());
cndtnTrgtInfoMngService.bulkInsert(trgtExcelVOList);
} catch (Exception e) {
// TODO: handle exception
modelAndView.addObject("result", "fail");
e.printStackTrace();
}

View File

@ -990,16 +990,14 @@ public class CndtnPrcsInfoMngController {
SsoLoginVO ssoLoginVO = checkLoginUtil.getSSOLoginVO(request); //SSO 로그인 정보 가져오기
// System.out.println("vEEduAplctVO.getPrcsAplctPrdOrd() : "+ vEEduAplctVO.getPrcsAplctPrdOrd());
System.out.println("vEEduAplctVO.getEduAplctOrd() : "+ vEEduAplctVO.getEduAplctOrd());
// 이수 상태라면
// 이수 상태라면 이수번호 생성
if("20".equals(vEEduAplctVO.getAplctStateCd())) {
vEEduAplctVO.setEduCmpltCrtfcNmbr(this.cmpltChkAndMakeNmber(vEEduAplctVO.getLctrDivCd()));
}else if("10".equals(vEEduAplctVO.getAplctStateCd())) {
vEEduAplctVO.setEduCmpltCrtfcNmbr("DEL");
}
// 신청상세정보 상태값 update
// 신청상세정보 상태값 update
vEEduAplctVO.setLastUpdusrId(loginVO.getUniqId());
vEEduMIXService.updateAplctStateCd(vEEduAplctVO);
@ -1008,6 +1006,8 @@ public class CndtnPrcsInfoMngController {
vEEduMIXService.updateEduStateCd(vEEduAplctVO);
// 알림 영역
// 알림 영역
// 알림 영역
List<String> eduAplctOrdList = new ArrayList<String>();
eduAplctOrdList.add(vEEduAplctVO.getEduAplctOrd());

View File

@ -39,6 +39,7 @@
, prcs_aplct_prd_ord_cmplt
, edu_aplct_ord
, rmrks
</sql>
<!-- 조회용 공통 컬럼 명 -->
@ -103,7 +104,45 @@
, #reqStateCd#
, #atchFileId#
, ''
, ''
, ''
, #rmrks#
)
</insert>
<!-- bulkInsert -->
<insert id="cndtnTrgtInfoMngDAO.bulkInsert" parameterClass="CndtnPrcsInfoMngVO">
INSERT INTO <include refid="CndtnTrgtInfoMngDAO.table_name"/> (
<include refid="CndtnTrgtInfoMngDAO.column_name"/>
)VALUES(
<iterate conjunction=",">
#[]sspnIdtmtTrgtOrd#
, #[]userId#
, ''
, SYSDATE
, #[]frstRegisterId#
, ''
, ''
, #[]trgtNm#
, #[]clphone#
, #[]dBirth#
, #[]addr#
, #[]addrDetail#
, #[]post#
, #[]email#
, #[]reqPnttm#
, #[]vntYear#
, #[]vntNmbr#
, #[]cmptntAthrt#
, #[]sex#
, #[]reqNmbr#
, #[]prsctrNm#
, #[]reqStateCd#
, #[]atchFileId#
, ''
, ''
, #[]rmrks#
</iterate>
)
</insert>

View File

@ -0,0 +1,306 @@
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ve" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<%@ taglib prefix="un" uri="http://jakarta.apache.org/taglibs/unstandard-1.0" %>
<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<un:useConstants var="VeConstants" className="kcc.ve.cmm.VeConstants" />
<title>교육신청 목록 > 성인 찾아가는 저작권 교육 > 한국저작권위원회 저작권 교육 시스템</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javaScript" language="javascript">
function linkPage(pageNo){
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
listForm.action = "<c:url value='/web/ve/aplct/adultVisitEdu/eduAplct/eduAplctList.do'/>";
listForm.submit();
}
function goWrite(){
$("#listForm").attr("action","${pageContext.request.contextPath}/web/ve/aplct/adultVisitEdu/eduAplct/eduAplctReg.do").submit();
}
function fncGoDetail(prcsAplctPrdOrd){
var viewForm = document.viewForm ;
viewForm.prcsAplctPrdOrd.value = prcsAplctPrdOrd ;
viewForm.action = "<c:url value='/web/ve/aplct/sspnIdtmt/eduAplctDetail.do'/>";
viewForm.submit();
}
function fncGoList(){
linkPage(1);
}
function fncReset(thisObj){
var targetObj = $(thisObj).closest('.list_top').find('select,input');
$.each(targetObj, function(){
$(this).val('');
});
}
//FAQ 답변 open&close
function faqOpen(item) {
if($(item).is(".slide_open") == true) {
$(item).removeClass("slide_open");
$(item).next(".answer").slideUp(300);
$(item).attr("title","답변 열기");
} else {
$(item).addClass("slide_open");
$(item).next(".answer").slideDown(300);
$(item).attr("title","답변 닫기");
$(item).closest("li").siblings("li").children(".question").removeClass("slide_open");
$(item).closest("li").siblings("li").children(".answer").slideUp(300);
$(item).closest("li").siblings("li").children(".question").attr("title","답변 열기");
}
}
function fn_qnaReg(){
if(!confirm("문의 등록을 하시겠습니까?")){
$('#qnaCn').val('');
$('.btn_popup_close').click();
return false;
}
var data = new FormData(document.getElementById("qnaForm"));
var url = "${pageContext.request.contextPath}/web/ve/aplct/sspnIdtmt/qnaRegAjax.do";
$.ajax({
type:"POST",
url: url,
data: data,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success:function(returnData){
console.log('returnData : ', returnData);
if(returnData.result == "success"){
// 대상자 테이블 pk 값
var sspnIdtmtTrgtOrd = returnData.id;
alert(returnData.msg);
}else{
alert(returnData.msg);
}
// fn_target_confirm_clean();
location.reload();
},
error:function(request , status, error){
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
}
});
$('#target_confirm_popup-close').click();
}
function fn_goListForm(data){
var form = document.goListForm ;
form.searchStatus.value = data ;
form.submit();
}
//설문 팝업
function fncQustnrList(
id //aplctOrd
, chId //chasiOrd
, p_site_id_cd //10,20,30
, p_action //select, insert
, p_qustnrTmplatId //select, insert
, p_qestnrId //select, insert
, p_qustnrRespondId //select, insert
) {
paramObj = {
"eduAplctOrd" : id
,"eduChasiOrd" : chId
,"siteIdCd" : p_site_id_cd
,"siteId" : "60" //설문정보를 위해서 설문지의 대상값을 넣는다. VE0011 10-청소년, 20-성인,30-체험, 40-외부, 50-기반, 60-기소
,"action" : p_action
,"qustnrTmplatId" : p_qustnrTmplatId
,"qestnrId" : p_qestnrId
,"qustnrRespondId" : p_qustnrRespondId
};
commonPopLayeropen(
//"${pageContext.request.contextPath}/web/ve/aplct/cpyrgExprnClsrm/scholInfo/popup/qustnrPopList.do"
"${pageContext.request.contextPath}/web/ve/aplct/cpyrgExprnClsrm/scholInfo/popup/qustnrFndtnPopList.do"
, 800
, 700
, paramObj
, "Y"
, "QustnrList"
);
}
</script>
<!-- content -->
<div class="cont_wrap" id="sub">
<form id="goListForm" name="goListForm" action="<c:url value="/web/ve/aplct/sspnIdtmt/sspnIdtmtEduAplctList.do" />" method="post">
<input type="hidden" id="searchStatus" name="searchStatus" />
</form>
<form name="viewForm" id="viewForm">
<input type="hidden" name="prcsAplctPrdOrd">
</form>
<form:form id="listForm" name="listForm" commandName="vEEduAplctVO">
<input type="hidden" name="pageIndex" value="<c:out value='${vEEduAplctVO.pageIndex}' default='1' />"/>
<input type="hidden" name="searchSortCnd" value="<c:out value="${vEEduAplctVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${vEEduAplctVO.searchSortOrd}" />" />
<!--FAQ 내용 있을때-->
<div class="q_wrap">
<div class="btn_wrap btn_layout01">
<div class="tb_tit02">
<div class="tb_tit02_left">
<div class="t_best q_title">FAQ</div>
</div>
</div>
</div>
<c:if test="${not empty FAQList}">
<div class="tb_list02">
<div class="faq_wrap">
<ul class="faq">
<c:forEach var="FAQList" items="${FAQList}" varStatus="status">
<li <c:if test="${status.index == 0}"> class='first' </c:if>>
<button type="button" title="답변 열기" class="question" onclick="faqOpen(this);">
<p class="qst_text"><span>질문</span>Q</p>
<div>
<p class="qst_cont">${FAQList.nttSj}</p>
<p class="date">${FAQList.frstRegisterPnttm}</p>
</div>
</button>
<div class="answer">
<div class="answer_in">
<p class="qst_text"><span>답변</span>A</p>
<div>
<p class="awr_cont">${FAQList.nttCn }</p>
</div>
</div>
</div>
</li>
</c:forEach>
</ul>
</div>
</div>
</c:if>
<c:if test="${empty FAQList}">
<div class="q_text">
- 내용이 없습니다.
</div>
</c:if>
</div>
<!--Q&A 내용 있을때-->
<div class="q_wrap">
<div class="btn_wrap btn_layout01">
<div class="tb_tit02">
<div class="tb_tit02_left">
<div class="t_best q_title">Q&amp;A</div>
</div>
</div>
<div class="btn_right">
<button type="button" class="btnType04" data-tooltip="target_confirm_popup">교육문의</button>
</div>
</div>
<c:if test="${not empty qnaList}">
<div class="tb_list02">
<div class="faq_wrap">
<ul class="faq">
<c:forEach var="list" items="${qnaList}" varStatus="status">
<li <c:if test="${status.index == 0}"> class='first' </c:if>>
<button type="button" title="답변 열기" class="question" onclick="faqOpen(this);">
<p class="qst_text"><span>질문</span>Q</p>
<div>
<p class="qst_cont">${list.qnaCn }</p>
<p class="date">${list.frstRegistPnttm }</p>
</div>
</button>
<div class="answer">
<div class="answer_in">
<p class="qst_text"><span>답변</span>A</p>
<c:choose>
<c:when test="${not empty list.qnaAnswerCn }">
<div>
<p class="awr_cont">${list.qnaAnswerCn }</p>
<p class="date">${list.lastUpdtPnttm }</p>
</div>
</c:when>
<c:otherwise>
<p class="awr_cont">내용이 없습니다.</p>
</c:otherwise>
</c:choose>
</div>
</div>
</li>
</c:forEach>
</ul>
</div>
</div>
</c:if>
<c:if test="${empty qnaList}">
<div class="q_text">
- 내용이 없습니다.
</div>
</c:if>
</div>
</form:form>
</div>
<form id="qnaForm" name="qnaForm" method="post">
<!-- 교육대상자 확인 -->
<div class="tooltip-wrap q_pop">
<div class="popup_wrap popType01" tabindex="0" data-tooltip-con="target_confirm_popup" data-focus="target_confirm_popup" data-focus-prev="target_confirm_popup_close">
<div class="popup_tit">
<p>교육문의하기</p>
<button class="btn_popup_close tooltip-close" data-focus="target_confirm_popup_close" title="팝업 닫기"><i></i></button>
</div>
<div class="popup_cont">
<div class="cont_body">
<div class="pop_tb_type01" style="overflow:visible;">
<table>
<thead>
<tr>
<th>문의내용</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<textarea type="text" id="qnaCn" name="qnaCn" style="height: 220px;width: 100%;"></textarea>
</td>
</tr>
</tbody>
</table>
</div>
<div class="pop_btn_wrap btn_layout01">
<div class="btn_left">
</div>
<div class="btn_center">
<button type="button" class="btnType05" onclick="fn_qnaReg()">문의</button>
<button type="button" class="btnType02 tooltip-close" id="target_confirm_popup-close" data-focus="target_confirm_popup-close" data-focus-next="target_confirm_popup">취소</button>
</div>
<div class="btn_right">
</div>
</div>
</div>
</div>
</div>
</div>
<!--// 신청 클릭 > 기소유예 대상자 확인 팝업 -->
</form>