Merge branch 'JIWOO' into advc

This commit is contained in:
jiwoo 2024-02-23 18:14:17 +09:00
commit f2e1453b21
13 changed files with 321 additions and 14 deletions

View File

@ -421,6 +421,7 @@ public class EgovFileMngController {
String atchFileId = (String) commandMap.get("param_atchFileId");
String eduAplctOrd = (String) commandMap.get("eduAplctOrd");
String type = (String) commandMap.get("type");
String chgNm = (String) commandMap.get("chgNm");
fileVO.setAtchFileId(atchFileId);
List<FileVO> result = fileService.selectFileInfs(fileVO);
@ -430,6 +431,7 @@ public class EgovFileMngController {
model.addAttribute("atchFileId", atchFileId);
model.addAttribute("eduAplctOrd", eduAplctOrd);
model.addAttribute("type", type);
model.addAttribute("chgNm", chgNm);
return "cmm/fms/selectRsltRprtFileWithDelete";
}
@ -463,7 +465,9 @@ public class EgovFileMngController {
@RequestMapping("/cmm/fms/selectForNmChgFile.do")
public String selectForNmChgFile(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map<String, Object> commandMap, ModelMap model) throws Exception {
String atchFileId = (String) commandMap.get("param_atchFileId");
String chgNm = (String) commandMap.get("chgNm");
String chgNm = (String) commandMap.get("chgNm"); //변경된 파일 이름
String date = (String) commandMap.get("date");
String viewNmChg = (String) commandMap.get("viewNmChg"); //화면에 보이는 파일 이름 변경 유무 ex) Y=화면에 뿌려줄 때도 변경된 이름으로. N=화면에는 오리지널 파일이름이 보이며 다운로드 변경된 파일이름으로 다운
fileVO.setAtchFileId(atchFileId);
List<FileVO> result = fileService.selectFileInfs(fileVO);
@ -471,6 +475,8 @@ public class EgovFileMngController {
model.addAttribute("fileListCnt", result.size());
model.addAttribute("atchFileId", atchFileId);
model.addAttribute("chgNm", chgNm);
model.addAttribute("date", date);
model.addAttribute("viewNmChg", viewNmChg);
return "cmm/fms/selectForNmChgFile";
}

View File

@ -119,4 +119,6 @@ public interface VEEduMIXService {
List<VEEduAplctVO> selectExprnAtchFileDownList(VEEduAplctVO paramVO) throws Exception;
List<VEEduAplctVO> selectTngrRsltRprtList(VEEduAplctVO paramVO) throws Exception;
List<VEEduAplctVO> selectExprnRsltFileDownList(VEEduAplctVO paramVO) throws Exception;
}

View File

@ -294,4 +294,10 @@ public class VEEduMIXDAO extends EgovAbstractDAO {
List<VEEduAplctVO> tlist = (List<VEEduAplctVO>) list("VEEduMIXDAO.selectTngrRsltRprtList", paramVO);
return tlist;
}
public List<VEEduAplctVO> selectExprnRsltFileDownList(VEEduAplctVO paramVO) throws Exception {
@SuppressWarnings("unchecked")
List<VEEduAplctVO> tlist = (List<VEEduAplctVO>) list("VEEduMIXDAO.selectExprnRsltFileDownList", paramVO);
return tlist;
}
}

View File

@ -259,4 +259,8 @@ public class VEEduMIXServiceImpl implements VEEduMIXService {
public List<VEEduAplctVO> selectTngrRsltRprtList(VEEduAplctVO paramVO) throws Exception{
return vEEduMIXDAO.selectTngrRsltRprtList(paramVO);
}
public List<VEEduAplctVO> selectExprnRsltFileDownList(VEEduAplctVO paramVO) throws Exception{
return vEEduMIXDAO.selectExprnRsltFileDownList(paramVO);
}
}

View File

@ -714,6 +714,213 @@ String[] order = {
}
}
/**
* 저작권 체험교실 결과보고 파일 유무 체크
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "oprtnAplctRsltFileChkAjax.do")
public ModelAndView oprtnAplctRsltFileChkAjax(VEEduAplctVO vEEduAplctVO
, HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
vEEduAplctVO.setEduAplctOrdList(Arrays.asList(vEEduAplctVO.getChk().split(",")));
List<VEEduAplctVO> vEEduAplctVOList = vEEduMIXService.selectExprnRsltFileDownList(vEEduAplctVO);
List<String> atchFileIdList = new ArrayList<String>();
vEEduAplctVOList.forEach( vo -> {
if(vo.getOrgnlRsltAtchFileId() != null) {
atchFileIdList.add(vo.getOrgnlRsltAtchFileId());
}
if(vo.getCpyRsltAtchFileId() != null) {
atchFileIdList.add(vo.getCpyRsltAtchFileId());
}
if(vo.getEvdncPhtAtchFileId() != null) {
atchFileIdList.add(vo.getEvdncPhtAtchFileId());
}
if(vo.getRmtTrnAtchFileId() != null) {
atchFileIdList.add(vo.getRmtTrnAtchFileId());
}
});
if(atchFileIdList.size() < 1) {
modelAndView.addObject("result", "fail");
modelAndView.addObject("msg", "첨부 파일이 없습니다.");
}else {
modelAndView.addObject("result", "success");
}
return modelAndView;
}
/**
* 저작권 체험교실 운영현황 목록 결과보고 파일 일괄 다운로드
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value = "oprtnAplctRsltFileDownLoad.do")
public void oprtnAplctRsltFileDownLoad(VEEduAplctVO vEEduAplctVO
, HttpServletRequest request, HttpServletResponse response) throws Exception {
vEEduAplctVO.setEduAplctOrdList(Arrays.asList(vEEduAplctVO.getChk().split(",")));
List<VEEduAplctVO> vEEduAplctVOList = vEEduMIXService.selectExprnRsltFileDownList(vEEduAplctVO);
vEEduAplctVOList = egovCryptoUtil.decryptVEEduAplctVOList(vEEduAplctVOList);
//첨부파일있는 항목만 재배치
String orgnZipNm = "체험교실 결과보고.zip";
String downloadType = "A";
//첨부파일있는 항목만 재배치
List<String> atchFileIdList = new ArrayList<String>();
List<String> fileNmList = new ArrayList<String>();
vEEduAplctVOList.forEach( vo -> {
if(vo.getOrgnlRsltAtchFileId() != null) {
atchFileIdList.add(vo.getOrgnlRsltAtchFileId());
fileNmList.add(vo.getScholInsttNm()+"_"+vo.getChrgNm()+"_원본");
}
if(vo.getCpyRsltAtchFileId() != null) {
atchFileIdList.add(vo.getCpyRsltAtchFileId());
fileNmList.add(vo.getScholInsttNm()+"_"+vo.getChrgNm()+"_사본");
}
if(vo.getEvdncPhtAtchFileId() != null) {
atchFileIdList.add(vo.getEvdncPhtAtchFileId());
fileNmList.add(vo.getScholInsttNm()+"_"+vo.getChrgNm()+"_증빙");
}
if(vo.getRmtTrnAtchFileId() != null) {
atchFileIdList.add(vo.getRmtTrnAtchFileId());
fileNmList.add(vo.getScholInsttNm()+"_"+vo.getChrgNm()+"_이수증");
}
});
FileVO fileVO = new FileVO();
fileVO.setDownloadType(downloadType);
fileVO.setAtchFileIdList(atchFileIdList);
List<FileVO> fvoList = fileService.selectZipFileList(fileVO); // 해당 기능에 맞게 파일 조회
int size = 1024;
byte[] buf = new byte[size];
String outZipNm = fvoList.get(0).getFileStreCours()+File.separator + orgnZipNm;
FileInputStream fis = null;
ZipArchiveOutputStream zos = null;
BufferedInputStream bis = null;
int fileCnt = 0;
try {
System.out.println("outZipNm : "+ outZipNm);
// Zip 파일생성
zos = new ZipArchiveOutputStream(new BufferedOutputStream(new FileOutputStream(outZipNm)));
Iterator<FileVO> fvoIterator = fvoList.iterator();
Iterator<String> fileNmIterator = fileNmList.iterator();
while (fvoIterator.hasNext() && fileNmIterator.hasNext() ){
FileVO vo = fvoIterator.next();
String fileNm = fileNmIterator.next();
zos.setEncoding("UTF-8");
// Create a file object
File file = new File(vo.getFileStreCours() + "/" + vo.getStreFileNm());
// 1. check if the file exists or not
boolean isExists = file.exists();
if(isExists) {
System.out.println("getStreFileNm() " + vo.getStreFileNm());
System.out.println("I find the existFile.txt");
fileCnt++;
} else {
continue;
}
/*String renamedFileName = generateRenamedFileName(vo.getOrignlFileNm());*/
String renamedFileName = fileNm + "."+ vo.getFileExtsn();
vo.setOrignlFileNm(renamedFileName);
//buffer에 해당파일의 stream을 입력한다.
fis = new FileInputStream(vo.getFileStreCours() + "/" + vo.getStreFileNm());
bis = new BufferedInputStream(fis,size);
//zip에 넣을 다음 entry 가져온다.
zos.putArchiveEntry(new ZipArchiveEntry(vo.getOrignlFileNm()));
//준비된 버퍼에서 집출력스트림으로 write 한다.
int len;
while((len = bis.read(buf,0,size)) != -1) zos.write(buf,0,len);
bis.close();
fis.close();
zos.closeArchiveEntry();
}
zos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
if( zos != null ) zos.close();
if( fis != null ) fis.close();
if( bis != null ) bis.close();
}
File uFile = new File(fvoList.get(0).getFileStreCours(), orgnZipNm);
long fSize = uFile.length();
if (fSize > 0) {
String mimetype = "application/x-msdownload";
response.setContentType(mimetype);
setDisposition(orgnZipNm, request, response);
//response.setContentLength(fSize);
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(uFile));
out = new BufferedOutputStream(response.getOutputStream());
FileCopyUtils.copy(in, out);
out.flush();
} catch (Exception ex) {
LOGGER.debug("IGNORED: {}", ex.getMessage());
} finally {
if (in != null) {
try {
in.close();
} catch (Exception ignore) {
LOGGER.debug("IGNORED: {}", ignore.getMessage());
}
}
if (out != null) {
try {
out.close();
} catch (Exception ignore) {
LOGGER.debug("IGNORED: {}", ignore.getMessage());
}
}
}
//파일 다운로드 파일 삭제
File delFile = new File(outZipNm);
delFile.delete();
} else {
response.setContentType("application/x-msdownload");
PrintWriter printwriter = response.getWriter();
printwriter.println("<html>");
printwriter.println("<br><br><br><h2>Could not get file name:<br>" + orgnZipNm + "</h2>");
printwriter.println("<br><br><br><center><h3><a href='javascript: history.go(-1)'>Back</a></h3></center>");
printwriter.println("<br><br><br>&copy; webAccess");
printwriter.println("</html>");
printwriter.flush();
printwriter.close();
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//

View File

@ -9122,4 +9122,26 @@ VALUES
<iterate open="(" close=")" conjunction="," property="rsltList" prepend="AND b.edu_chasi_ord IN" > #rsltList[]#</iterate>
ORDER BY b.EDU_HOPE_DT ASC, B.STRT_TM ASC;
</select>
<select id="VEEduMIXDAO.selectExprnRsltFileDownList" parameterClass="VEEduAplctVO" resultClass="VEEduAplctVO">
/* 임시.*NOT_SQL_LOG.* VEEduMIXDAO.selectExprnAtchFileDownList */
SELECT
A.edu_aplct_ord AS eduAplctOrd,
A.schol_instt_nm AS scholInsttNm,
A.chrg_nm AS chrgNm,
A.oath_atch_file_id AS oathAtchFileId,
A.SCHOL_SEAL_ATCH_FILE_ID AS scholSealAtchFileId,
B.ORGNL_RSLT_ATCH_FILE_ID AS orgnlRsltAtchFileId,
B.CPY_RSLT_ATCH_FILE_ID AS cpyRsltAtchFileId,
B.EVDNC_PHT_ATCH_FILE_ID AS evdncPhtAtchFileId,
B.RMT_TRN_ATCH_FILE_ID AS rmtTrnAtchFileId
FROM VE_EDU_APLCT A
LEFT JOIN VE_EDU_RSLT_RPRT B
ON A.EDU_APLCT_ORD = B.EDU_APLCT_ORD
WHERE A.edu_aplct_ord IN
<iterate property="eduAplctOrdList" open="(" close=")" conjunction=",">
#eduAplctOrdList[]#
</iterate>
</select>
</sqlMap>

View File

@ -84,9 +84,17 @@
<!--<title>파일목록</title> -->
<c:forEach var="fileVO" items="${fileList}" varStatus="status">
<a href="javascript:fn_egov_downChgNmFile('<c:out value="${fileVO.atchFileId}"/>','<c:out value="${fileVO.fileSn}"/>')" class="file_download_a" title="다운로드" style="display:inline-block;">
<c:out value="${fileVO.orignlFileNm}"/>
<fmt:parseDate value="${fileVO.creatDt}" var="creatDt" pattern="yyyy-MM-dd HH:mm:ss"/>
(<fmt:formatDate value="${creatDt}" pattern="yyyy년MM월dd일"/>)
<c:if test="${viewNmChg eq 'Y'}">
<c:out value="${chgNm}"/>
</c:if>
<c:if test="${viewNmChg ne 'Y'}">
<c:out value="${fileVO.orignlFileNm}"/>
</c:if>
<c:if test="${date eq 'Y'}">
<fmt:parseDate value="${fileVO.creatDt}" var="creatDt" pattern="yyyy-MM-dd HH:mm:ss"/>
(<fmt:formatDate value="${creatDt}" pattern="yyyy년MM월dd일"/>)
</c:if>
</a>
<br/>
</c:forEach>

View File

@ -27,8 +27,9 @@
<!-- link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css"-->
<script type="text/javascript">
function fn_egov_downFile(atchFileId, fileSn){
window.open("<c:url value='/cmm/fms/FileDown.do?atchFileId="+atchFileId+"&fileSn="+fileSn+"'/>");
function fn_egov_downChgNmFile${type}(atchFileId, fileSn){
var chgNm = $("#chgNm${type}").val()
window.open("<c:url value='/cmm/fms/fileNmChgDown.do?atchFileId="+atchFileId+"&fileSn="+fileSn+"&chgNm="+chgNm+"'/>");
}
/* 등록되어 있는 파일 삭제버튼 클릭시 */
@ -78,12 +79,13 @@
<input type="hidden" name="atchFileId" value="${atchFileId}">
<input type="hidden" name="fileSn" >
<input type="hidden" name="fileListCnt" id="fileListCnt" value="${fileListCnt}">
<input type="hidden" id="chgNm${type}" value="${chgNm}">
<c:set var="fileCount" value="${fn:length(fileList) }" />
<!-- </form> -->
<!--<title>파일목록</title> -->
<c:forEach var="fileVO" items="${fileList}" varStatus="status">
<a href="javascript:fn_egov_downFile('<c:out value="${fileVO.atchFileId}"/>','<c:out value="${fileVO.fileSn}"/>')" class="file_download_a" title="다운로드" style="display:inline-block;">
<c:out value="${fileVO.orignlFileNm}"/>
<a href="javascript:fn_egov_downChgNmFile${type}('<c:out value="${fileVO.atchFileId}"/>','<c:out value="${fileVO.fileSn}"/>')" class="file_download_a" title="다운로드" style="display:inline-block;">
<c:out value="${chgNm}"/>
<fmt:parseDate value="${fileVO.creatDt}" var="creatDt" pattern="yyyy-MM-dd HH:mm:ss"/>
(<fmt:formatDate value="${creatDt}" pattern="yyyy년MM월dd일"/>)
</a>

View File

@ -315,8 +315,11 @@
<p>서약서</p>
</th>
<td>
<c:import url="/cmm/fms/selectBBSFileInfs.do" charEncoding="utf-8">
<c:import url="/cmm/fms/selectForNmChgFile.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${info.oathAtchFileId}" />
<c:param name="chgNm" value="${info.scholInsttNm}_${info.chrgNm}_서약서" />
<c:param name="date" value="N" />
<c:param name="viewNmChg" value="Y" />
</c:import>
</td>
</tr>
@ -406,8 +409,11 @@
<p>신청서</p>
</th>
<td>
<c:import url="/cmm/fms/selectBBSFileInfs.do" charEncoding="utf-8">
<c:import url="/cmm/fms/selectForNmChgFile.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${info.scholSealAtchFileId}" />
<c:param name="chgNm" value="${info.scholInsttNm}_${info.chrgNm}_신청서" />
<c:param name="date" value="N" />
<c:param name="viewNmChg" value="Y" />
</c:import>
</td>
</tr>

View File

@ -352,7 +352,7 @@ input:read-only {
<c:if test="${vEEduAplctVO.pageUnit == '100'}">selected</c:if>>100줄</option>
</select>
<button type="button" class="btn_type06" style="height:40px; border:1px solid #3a72db; font-size:16px; border-radius:5px; vertical-align:middle;"
onclick="fileChk();">첨부파일 다운로드</button>
onclick="fileChk();">신청서 일괄 다운로드</button>
<button type="button" class="btn_down_excel"
onclick="excelDownLoad();">엑셀 다운로드</button>
</div>

View File

@ -338,8 +338,11 @@
<p>서약서</p>
</th>
<td>
<c:import url="/cmm/fms/selectBBSFileInfs.do" charEncoding="utf-8">
<c:import url="/cmm/fms/selectForNmChgFile.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${info.oathAtchFileId}" />
<c:param name="chgNm" value="${info.scholInsttNm}_${info.chrgNm}_서약서" />
<c:param name="date" value="N" />
<c:param name="viewNmChg" value="Y" />
</c:import>
</td>
</tr>
@ -500,6 +503,7 @@
<c:param name="param_atchFileId" value="${info.orgnlRsltAtchFileId}" />
<c:param name="eduAplctOrd" value="${info.eduAplctOrd}" />
<c:param name="type" value="rslt" />
<c:param name="chgNm" value="${info.scholInsttNm}_${info.chrgNm}_원본" />
</c:import>
</td>
</tr>
@ -512,6 +516,7 @@
<c:param name="param_atchFileId" value="${info.cpyRsltAtchFileId}" />
<c:param name="eduAplctOrd" value="${info.eduAplctOrd}" />
<c:param name="type" value="cpy" />
<c:param name="chgNm" value="${info.scholInsttNm}_${info.chrgNm}_사본" />
</c:import>
</td>
</tr>
@ -524,6 +529,7 @@
<c:param name="param_atchFileId" value="${info.evdncPhtAtchFileId}" />
<c:param name="eduAplctOrd" value="${info.eduAplctOrd}" />
<c:param name="type" value="evdnc" />
<c:param name="chgNm" value="${info.scholInsttNm}_${info.chrgNm}_증빙" />
</c:import>
</td>
</tr>
@ -536,6 +542,7 @@
<c:param name="param_atchFileId" value="${info.rmtTrnAtchFileId}" />
<c:param name="eduAplctOrd" value="${info.eduAplctOrd}" />
<c:param name="type" value="rmt" />
<c:param name="chgNm" value="${info.scholInsttNm}_${info.chrgNm}_이수증" />
</c:import>
</td>
</tr>

View File

@ -161,11 +161,47 @@
}
});
}
function rsltFileChk() {
var chkLen = $(listForm).find("input[name=chk]:checked").length;
if(chkLen ==0){
alert("선택된 항목이 없습니다.");
return;
}
var downForm = new FormData(document.getElementById("listForm"));
$.ajax({
type:"POST",
url: "<c:url value='/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctRsltFileChkAjax.do'/>",
data: downForm,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success:function(returnData){
console.log('returnData : ', returnData);
if(returnData.result == 'fail'){
alert(returnData.msg);
}else{
rsltFileDownLoad();
}
},
error:function(request , status, error){
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
}
});
}
function fileDownLoad() {
var downForm = document.listForm;
downForm.action = "<c:url value='/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctFileAllDownLoad.do'/>";
downForm.submit();
}
function rsltFileDownLoad() {
var downForm = document.listForm;
downForm.action = "<c:url value='/kccadr/oprtn/cpyrgExprnClsrm/oprtnAplctRsltFileDownLoad.do'/>";
downForm.submit();
}
</script>
<title>교육과정관리</title>
</head>
@ -311,7 +347,8 @@
<option value='30' <c:if test="${adjReqMgrVO.pageUnit == '30'}">selected</c:if>>30줄</option>
<option value='100' <c:if test="${adjReqMgrVO.pageUnit == '100'}">selected</c:if>>100줄</option>
</select>
<button type="button" class="btn_type06" style="height:40px; border:1px solid #3a72db; font-size:16px; border-radius:5px; vertical-align:middle;" onclick="fileChk();">첨부파일 다운로드</button>
<button type="button" class="btn_type06" style="height:40px; border:1px solid #3a72db; font-size:16px; border-radius:5px; vertical-align:middle;" onclick="rsltFileChk();">결과보고 일괄 다운로드</button>
<!-- <button type="button" class="btn_type06" style="height:40px; border:1px solid #3a72db; font-size:16px; border-radius:5px; vertical-align:middle;" onclick="fileChk();">신청서 일괄 다운로드</button> -->
<button type="button" class="btn_down_excel" onclick="excelDownLoad();">엑셀 다운로드</button>
</div>
</div>

View File

@ -1332,7 +1332,7 @@
<div class="btn_center">
<!-- 240222 요청으로 교육콘텐츠 버튼 삭제 -->
<!-- <button type="button" class="btnType04" onclick="fncGoLctrAplctReg();">교육콘텐츠 신청</button> -->
<c:if test="${info.aprvlCd eq VeConstants.EXPRN_APRVL_CD_50 or (rsltAllYn eq 'N' and info.aprvlCd > VeConstants.EXPRN_APRVL_CD_50)}">
<c:if test="${info.aprvlCd eq VeConstants.EXPRN_APRVL_CD_50 or (rsltAllYn eq 'N' and info.aprvlCd > VeConstants.EXPRN_APRVL_CD_50) or info.exprnAprvlCd eq '230'}">
<button type="button" class="btnType05" onclick="fncGoRslt();">결과보고제출</button>
</c:if>
<c:if test="${info.aprvlCd eq VeConstants.EXPRN_APRVL_CD_40}">