package cmm.web; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import kccf.res.service.ResourcesService; import kccf.sch.service.vo.SearchVO; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import cmm.Constant; import cmm.service.CmmAmsDocTableOfContentsVO; import cmm.service.CmmApiService; import cmm.service.CmmFileService; import cmm.service.CmmService; import cmm.service.ExtService; import cmm.service.FileDetailVO; import cmm.util.CmmUtil; import cmm.util.CmmVO; import cmm.util.DataMap; import cmm.util.MessageAlertUtil; import egovframework.com.cmm.ComDefaultCodeVO; //import egovframework.com.cmm.EgovMessageSource; import egovframework.com.cmm.service.EgovCmmUseService; import egovframework.rte.fdl.cmmn.exception.EgovBizException; import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; /** * @Class Name : CmmController.java * @author ecplaza * @since 2018-04-17 * @version 1.0 */ @Controller public class CmmController { /** LOGGER */ private static final Logger LOGGER = LoggerFactory.getLogger(CmmController.class); /** EgovPropertyService */ @Resource(name = "propertiesService") protected EgovPropertyService propertiesService; // @Resource(name="egovMessageSource") // EgovMessageSource egovMessageSource; // @Resource(name = "cmmFileService") private CmmFileService cmmFileService; /** extService */ @Resource(name = "extService") private ExtService extService; /** cmmApiService */ @Resource(name = "cmmApiService") private CmmApiService cmmApiService; /** cmmService */ @Resource(name = "cmmService") private CmmService cmmService; /** EgovCmmUseService */ @Resource(name = "EgovCmmUseService") private EgovCmmUseService cmmUseService; /** resourcesService */ @Resource(name = "resourcesService") private ResourcesService resourcesService; @RequestMapping(value="/cmm/downloadFile.do") public void cvplFileDownload(HttpServletRequest request, HttpServletResponse response) throws IOException, EgovBizException { String atchFileId = request.getParameter("atchFileId"); String fileSn = request.getParameter("fileSn"); FileDetailVO paramVO = new FileDetailVO(); paramVO.setAtchFileId(atchFileId); paramVO.setFileSn(fileSn); FileDetailVO fileDetailVO = cmmFileService.selectFileDetail(paramVO); File uFile = new File(fileDetailVO.getFileStreCours(), fileDetailVO.getStreFileNm()); long fSize = uFile.length(); if (fSize > 0) { String mimetype = "application/x-msdownload"; response.setContentType(mimetype); setDisposition(fileDetailVO.getOrignlFileNm(), request, response); //response.setContentLength(fSize); BufferedInputStream in = null; FileInputStream fis = null; BufferedOutputStream out = null; try { fis = new FileInputStream(uFile); in = new BufferedInputStream(fis); out = new BufferedOutputStream(response.getOutputStream()); FileCopyUtils.copy(in, out); out.flush(); } catch (IOException ioe) { LOGGER.error("Error in cvplFileDownload()", ioe); } catch (NullPointerException npe) { LOGGER.error("Error in cvplFileDownload()", npe); } finally { if (fis != null) { try { fis.close(); } catch (IOException ioe) { LOGGER.error("Error in cvplFileDownload()", ioe); } } if (in != null) { try { in.close(); } catch (IOException ioe) { LOGGER.error("Error in cvplFileDownload()", ioe); } } if (out != null) { try { out.close(); } catch (IOException ioe) { LOGGER.error("Error in cvplFileDownload()", ioe); } } } } else { MessageAlertUtil.alertBack("파일이 존재하지 않습니다." , response); } } @RequestMapping("/cmm/selectIconFileDownLoad.do") public String selectIconFileDownLoad(@ModelAttribute("searchVO") FileDetailVO fileVO, @RequestParam Map commandMap, ModelMap model) throws IOException, EgovBizException { String atchFileId = (String)commandMap.get("param_atchFileId"); List result = cmmFileService.selectIconFileDownLoad(atchFileId); model.addAttribute("fileList", result); model.addAttribute("fileListCnt", result.size()); model.addAttribute("atchFileId", atchFileId); return "kdm/cmm/cmmIconFileList"; } @RequestMapping(value="/cmm/cmmSigunguList.do") public ModelAndView selectCmmSigunguList(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); model.addAttribute("resultList", extService.selectExtSigunguList(paramMap)); return modelAndView; } @RequestMapping(value="/cmm/cmmSigunguList2.do") public ModelAndView selectCmmSigunguList2(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); model.addAttribute("resultList", extService.selectExtSigunguList2(paramMap)); return modelAndView; } @RequestMapping(value="/cmm/cmmGisSigunguList.do") public ModelAndView selectCmmGisSigunguList(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); model.addAttribute("resultList", extService.selectExtGisSigunguList(paramMap)); return modelAndView; } @RequestMapping(value="/cmm/cmmGisSigunguList2.do") public ModelAndView selectCmmGisSigunguList2(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); model.addAttribute("resultList", extService.selectExtGisSigunguList(paramMap)); return modelAndView; } @RequestMapping(value="/cmm/cmmGisDongList.do") public ModelAndView selectCmmGisDongList(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); model.addAttribute("resultList", extService.selectExtGisDongList(paramMap)); return modelAndView; } @RequestMapping(value="/cmm/cmmJusoCheck.do") public ModelAndView jusoCheck(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String addr = paramMap.getString("localSido") + " " + paramMap.getString("localSigungu") + " " + paramMap.getString("localDong"); paramMap.clear(); paramMap.setString("juso", addr); DataMap rtnMap = cmmApiService.getNaverApiJuso(paramMap); model.addAttribute("resultData", rtnMap); return modelAndView; } @RequestMapping(value="/cmm/cmmPscHstTotCnt.do") public void selectCmmPscHstTotCnt(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ DataMap paramMap = DataMap.getParamMap(request); paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); String successYn = "N"; int cnt = 0; try { cnt = cmmService.selectCmmPscHstTotCnt(paramMap); successYn = "Y"; } catch (EgovBizException e) { LOGGER.error("Error in selectCmmPscHstTotCnt()", e); } JSONObject jsonObj = new JSONObject(); jsonObj.put("successYn", successYn); jsonObj.put("cnt", cnt); response.setContentType("text/html; charset=utf-8"); response.setDateHeader("Expires", -1); response.setHeader("Pragma", "no-cahce"); response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 response.getWriter().write(jsonObj.toString()); } @RequestMapping(value="/cmm/regCmmPscHst.do") public void insertCmmPscHst(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ DataMap paramMap1 = DataMap.getParamMap(request); DataMap paramMap2 = DataMap.getParamMap(request); DataMap paramMap3 = DataMap.getParamMap(request); paramMap1.setString("jsessionId", CmmUtil.getCookieId(request)); paramMap1.setString("sidoName", paramMap1.getString("localSido1")); paramMap1.setString("sigunguName", paramMap1.getString("localSigungu1")); paramMap2.setString("jsessionId", CmmUtil.getCookieId(request)); paramMap2.setString("sidoName", paramMap2.getString("localSido2")); paramMap2.setString("sigunguName", paramMap2.getString("localSigungu2")); paramMap3.setString("jsessionId", CmmUtil.getCookieId(request)); paramMap3.setString("sidoName", paramMap3.getString("localSido3")); paramMap3.setString("sigunguName", paramMap3.getString("localSigungu3")); String successYn = "N"; String addr = ""; try { addr = paramMap1.getString("localSido1") + "|" + paramMap1.getString("localSigungu1") + "^"; addr = addr + paramMap2.getString("localSido2") + "|" + paramMap2.getString("localSigungu2") + "^"; addr = addr + paramMap3.getString("localSido3") + "|" + paramMap3.getString("localSigungu3"); paramMap1.setInt("sortOrdr", 1); if(cmmService.selectCmmPscHstTotCnt(paramMap1)>0){ cmmService.updateCmmPscHst(paramMap1); }else{ cmmService.insertCmmPscHst(paramMap1); } paramMap2.setInt("sortOrdr", 2); if(cmmService.selectCmmPscHstTotCnt(paramMap2)>0){ cmmService.updateCmmPscHst(paramMap2); }else{ cmmService.insertCmmPscHst(paramMap2); } paramMap3.setInt("sortOrdr", 3); if(cmmService.selectCmmPscHstTotCnt(paramMap3)>0){ cmmService.updateCmmPscHst(paramMap3); }else{ cmmService.insertCmmPscHst(paramMap3); } CmmUtil.removeCookie(request, response, CmmUtil.getCookie(request, propertiesService.getString("kccf.cookie.addr.key"))); //CmmUtil.removeCookie(request, response, CmmUtil.getCookie(request, propertiesService.getString("kccf.cookie.pscType.key"))); CmmUtil.setEncoderCookie(response, propertiesService.getString("kccf.cookie.addr.key"), addr); //CmmUtil.setEncoderCookie(response, propertiesService.getString("kccf.cookie.pscType.key"), paramMap.getString("pscType")); successYn = "Y"; } catch (PatternSyntaxException ex1) { LOGGER.error("Error in insertCmmPscHst()", ex1); } catch (EgovBizException ex2) { LOGGER.error("Error in insertCmmPscHst()", ex2); } JSONObject jsonObj = new JSONObject(); jsonObj.put("successYn", successYn); response.setContentType("text/html; charset=utf-8"); response.setDateHeader("Expires", -1); response.setHeader("Pragma", "no-cahce"); response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 response.getWriter().write(jsonObj.toString()); } @RequestMapping(value="/cmm/regCmmPscHst-data.do") public String insertCmmPscHstAjax(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ DataMap paramMap = DataMap.getParamMap(request); paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); paramMap.setString("sidoName", paramMap.getString("localSido")); paramMap.setString("sigunguName", paramMap.getString("localSigungu")); String addr = ""; try { addr = paramMap.getString("localSido") + "|" + paramMap.getString("localSigungu"); if(cmmService.selectCmmPscHstTotCnt(paramMap)>0){ cmmService.updateCmmPscHst(paramMap); }else{ cmmService.insertCmmPscHst(paramMap); } CmmUtil.removeCookie(request, response, CmmUtil.getCookie(request, propertiesService.getString("kccf.cookie.addr.key"))); CmmUtil.removeCookie(request, response, CmmUtil.getCookie(request, propertiesService.getString("kccf.cookie.pscType.key"))); CmmUtil.setEncoderCookie(response, propertiesService.getString("kccf.cookie.addr.key"), addr); CmmUtil.setEncoderCookie(response, propertiesService.getString("kccf.cookie.pscType.key"), paramMap.getString("pscType")); int pscHstCnt = 0; DataMap pscHstMap = cmmService.selectCmmPscHstDetail(paramMap); List sigunguList = null; if(pscHstMap != null){ pscHstCnt = 1; paramMap.clear(); paramMap.setString("sido", pscHstMap.getString("sidoName")); sigunguList = extService.selectExtSigunguList(paramMap); } model.addAttribute("pscHstCnt", pscHstCnt); model.addAttribute("pscHst", pscHstMap); model.addAttribute("pscHstSigunguList", sigunguList); } catch (PatternSyntaxException ex1) { LOGGER.error("Error in insertCmmPscHst()", ex1); } catch (EgovBizException ex2) { LOGGER.error("Error in insertCmmPscHst()", ex2); } return "kccf/cmm/userSetPopupAjax.jsp"; } @RequestMapping(value="/cmm/cmmActivityHstAllListTotCnt.do") public ModelAndView selectCmmActivityHstAllListTotCnt(ModelMap model, HttpServletRequest request, HttpServletResponse response) { DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); String successYn = "N"; List resultList = null; try { resultList = cmmService.selectCmmActivityHstAllListTotCnt(paramMap); successYn = "Y"; } catch (EgovBizException e) { LOGGER.error("Error in selectCmmActivityHstAllListTotCnt()", e); } model.addAttribute("successYn", successYn); model.addAttribute("resultList", resultList); return modelAndView; } @RequestMapping(value="/cmm/regCmmScrap.do") public void insertCmmScrap(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ DataMap paramMap = DataMap.getParamMap(request); paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); paramMap.setString("contentId", paramMap.getString("cId")); paramMap.setString("contentType", paramMap.getString("cType")); String keyName = "contentId"; if(Constant.CONTENT_TYPE_G.equals(paramMap.getString("contentType")) || Constant.CONTENT_TYPE_I.equals(paramMap.getString("contentType")) || Constant.CONTENT_TYPE_P.equals(paramMap.getString("contentType")) ){ keyName = "targetId"; } paramMap.setString("linkUrl", paramMap.getString("lUrl") + "?"+keyName+"="+paramMap.getString("contentId")); String successYn = "Y"; String resultCode = "01"; try { if("on".equals(paramMap.getString("already"))){ if(cmmService.selectCmmScrapCnt(paramMap)<1){ successYn = "N"; resultCode = "98"; }else{ cmmService.deleteCmmScrapInfo(paramMap); } }else{ // 다른곳에서 등록시에는 불이 안들어온 상태로 DB에만 등록되어있어서 체크 해야함. if(cmmService.selectCmmScrapCnt(paramMap)>0){ successYn = "N"; resultCode = "99"; }else{ resultCode = "00"; cmmService.insertCmmScrap(paramMap); } } } catch (EgovBizException e) { LOGGER.error("Error in insertCmmScrap()", e); } JSONObject jsonObj = new JSONObject(); jsonObj.put("successYn", successYn); jsonObj.put("resultCode", resultCode); response.setContentType("text/html; charset=utf-8"); response.setDateHeader("Expires", -1); response.setHeader("Pragma", "no-cahce"); response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 response.getWriter().write(jsonObj.toString()); } @RequestMapping(value="/cmm/regCmmRecentlyView.do") public void insertCmmRecentlyView(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ DataMap paramMap = DataMap.getParamMap(request); paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); paramMap.setString("contentId", paramMap.getString("cId")); paramMap.setString("contentType", paramMap.getString("cType")); paramMap.setString("linkUrl", paramMap.getString("lUrl")); String successYn = "N"; try { cmmService.insertCmmActivityHst(paramMap); successYn = "Y"; } catch (EgovBizException e) { LOGGER.error("Error in insertCmmRecentlyView()", e); } JSONObject jsonObj = new JSONObject(); jsonObj.put("successYn", successYn); response.setContentType("text/html; charset=utf-8"); response.setDateHeader("Expires", -1); response.setHeader("Pragma", "no-cahce"); response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 response.getWriter().write(jsonObj.toString()); } @RequestMapping(value="/cmm/regSatisfaction.do") public ModelAndView insertSatisfaction(ModelMap model, HttpServletRequest request, HttpServletResponse response) { DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String satisfaction; switch (paramMap.get("satisfaction").toString()){ case "매우만족" : satisfaction="5"; break; case "만족" : satisfaction="4"; break; case "보통" : satisfaction="3"; break; case "불만족" : satisfaction="2"; break; default: satisfaction="1"; break; } paramMap.setString("contentId", paramMap.get("contentId").toString()); paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); paramMap.setString("stsfdg", satisfaction); //만족도 paramMap.setString("stsfdgCnt", paramMap.get("satisfactionText").toString()); paramMap.setString("contentType", paramMap.get("type").toString()); String successYn = "N"; try { if(cmmService.selectSatisfactionTotCnt(paramMap) > 0){ successYn = "Y"; }else{ cmmService.insertSatisfaction(paramMap); successYn = "N"; } } catch (EgovBizException e) { LOGGER.error("Error in insertSatisfaction()", e); } model.addAttribute("successYn", successYn); return modelAndView; } @RequestMapping(value="/cmm/cmmAmsAssetMediaList.do") public String selectCmmAmsAssetMediaList( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { DataMap paramMap = DataMap.getParamMap(req); //paramMap.setString("aId", paramMap.getString("aId")); //cmmVO.setaId(paramMap.getString("aId")); // 스크랩 여부 키 paramMap.setString("sessionId", CmmUtil.getCookieId(req)); model.addAttribute("paramVO", cmmVO); // 파라미터 // ams 서버 패스 정보 CmmUtil.setAmsPathModelMap(req,model); // ams nfs 파일 경로 CmmUtil.setNfsPathModelMap(req,model); return "/kccf/cmm/layerMediaListAjax"; } /** * AMS ASSETS 상세 정보 * pick 레이어 에셋의 상세정보 : 모든 데이터 * @param cmmVO * @param model * @param commandMap * @param req * @param res * @return * @throws EgovBizException */ @RequestMapping(value="/cmm/cmmAmsAssetsPick.do") public String selectCmmAmsAssetsPick( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { DataMap paramMap = DataMap.getParamMap(req); LOGGER.info("selectCmmAmsAssetsPick() paramMap={}", paramMap); //paramMap.setString("aId", paramMap.getString("aId")); //cmmVO.setaId(paramMap.getString("aId")); // 스크랩 여부 키 paramMap.setString("sessionId", CmmUtil.getCookieId(req)); // Asset 상세정보 : 죄측 상단 및 상세 DataMap cmmAmsAssetsDetail = cmmService.selectCmmAmsAssetsDetail(paramMap); model.addAttribute("cmmAmsAssetsDetail", cmmAmsAssetsDetail); // 다른문화원 소장자료 목록 정보를 가져오기 위한 맵핑 paramMap.setString("sojangCouncil", cmmAmsAssetsDetail.getString("sojangCouncil")); // 소장문화원 // AssetMedia 그룹 목록 : 좌측 목록 Cnt List cmmAmsAssetsMediaGroupListCnt = cmmService.selectCmmAmsAssetsMediaGroupListCnt(paramMap); model.addAttribute("cmmAmsAssetsMediaGroupListCnt", cmmAmsAssetsMediaGroupListCnt); // AssetMedia 그룹 목록 : 좌측 목록 List cmmAmsAssetsMediaGroupList = cmmService.selectCmmAmsAssetsMediaGroupList(paramMap); model.addAttribute("cmmAmsAssetsMediaGroupList", cmmAmsAssetsMediaGroupList); /**** 연속자료 paging ****/ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(cmmVO.getPageIndex()); paginationInfo.setRecordCountPerPage(cmmVO.getPageUnit()); paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmVO.getMobilePageSize() : cmmVO.getPageSize()); cmmVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); cmmVO.setLastIndex(paginationInfo.getLastRecordIndex()); cmmVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); /**** 연속자료 paging ****/ int totCnt = 0; DataMap cmmAmsAssetsMediaDetail = null; List cmmAmsAssetsContinueList = null; List tagsListResult = null; // 화면에서 mId 값 넘어오면(지역문화Pick 유형별 목록) 넘어온 값 사용하도록 수정 (2019.10.16) String mediaId = paramMap.getString("mId"); if (StringUtils.isEmpty(mediaId)) { // 화면에서 mId 값 넘어오지 않는 경우 (지역문화Pick 지역별 목록) if(cmmAmsAssetsMediaGroupList != null && cmmAmsAssetsMediaGroupList.size()>0) { mediaId = cmmAmsAssetsMediaGroupList.get(0).getString("id"); // 0번째의 미디어 아이디 } } LOGGER.info("selectCmmAmsAssetsPick() mediaId={}", mediaId); if(StringUtils.isNotEmpty(mediaId)){ // 미디어 ID 맵핑 if (StringUtils.isEmpty(paramMap.getString("mId"))) paramMap.setString("mId", mediaId); cmmVO.setmId(paramMap.getString("mId")); // 에셋 미디어 상세정보(원문보기 쪽 상세정보) cmmAmsAssetsMediaDetail = cmmService.selectCmmAmsAssetsMediaDetail(paramMap); /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 // 문서 목차정보 파싱 List tableOfContentsList = CmmUtil.parseTableOfContents(cmmAmsAssetsMediaDetail.getString("tableOfContents")); cmmAmsAssetsMediaDetail.put("tableOfContentsList", tableOfContentsList); */ // 연관태그목록 tagsListResult = cmmService.selectCmmAmsAssetsTagsList(paramMap); model.addAttribute("cmmAmsAssetsTagsList", tagsListResult); // 연속자료 총 수 totCnt = cmmService.selectCmmAmsAssetsContinueListTotCnt(cmmVO); // 연속자료 목록 cmmAmsAssetsContinueList = cmmService.selectCmmAmsAssetsContinueList(cmmVO); } // 상세정보 model.addAttribute("cmmAmsAssetsMediaDetail", cmmAmsAssetsMediaDetail); /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 // 문서 원문보기 OCR 목록 (2019.10.04) if (cmmAmsAssetsMediaDetail != null && cmmAmsAssetsMediaDetail.getInt("ocrSplitNum") > 1) { model.addAttribute("cmmAmsAssetsMediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); } */ // 연속자료 페이징 오브젝트 paginationInfo.setTotalRecordCount(totCnt); model.addAttribute("paginationInfo", paginationInfo); model.addAttribute("cmmAmsAssetsContinueList", cmmAmsAssetsContinueList); // 연속자료 목록 // 연관 지역문화 이야기 List cmsTag = new ArrayList(); for(int i = 0; i < tagsListResult.size() ; i++){ cmsTag.add(tagsListResult.get(i).get("tagsName") ); } List themesResult = cmmService.selectCmmAmsAssetsThemesContentsList(cmsTag); model.addAttribute("cmmAmsAssetsThemesContentsList",themesResult); // 문화원의 다른 소장자료 목록 List diffSojangListResult = cmmService.selectCmmAmsAssetsDiffSojangList(paramMap); /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 for (int i=0; diffSojangListResult!=null && i diffSojangTableOfContentsList = CmmUtil.parseTableOfContents(diffSojang.getString("tableOfContents")); diffSojang.put("tableOfContentsList", diffSojangTableOfContentsList); // 문서 원문보기 OCR 목록 if (diffSojang.getInt("ocrSplitNum") > 1) { diffSojang.put("mediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); } // LOGGER.info("selectCmmAmsAssetsPick() diffSojangListResult... i={}, diffSojang.get(\"tableOfContentsLis\")=", i, diffSojang.get("tableOfContentsList")); } */ model.addAttribute("cmmAmsAssetsDiffSojangList", diffSojangListResult); /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 // 문서 목차정보 파싱 List tableOfContentsList = CmmUtil.parseTableOfContents(cmmAmsAssetsMediaDetail.getString("tableOfContents")); cmmAmsAssetsMediaDetail.put("tableOfContentsList", tableOfContentsList); */ paramMap.setString("jsessionId", CmmUtil.getCookieId(req)); paramMap.setString("contentId", paramMap.getString("mId")); paramMap.setString("contentType", Constant.CONTENT_TYPE_A); cmmService.insertCmmActivityHst(paramMap); model.addAttribute("paramVO", cmmVO); // 파라미터 // ams 서버 패스 정보 CmmUtil.setAmsPathModelMap(req,model); // ams nfs 파일 경로 CmmUtil.setNfsPathModelMap(req,model); // jsi 값 세팅 model.addAttribute("jsi", CmmUtil.getCookieId(req)); return "/kccf/cmm/layerAmsAssetsPickAjax"; } //AMS 미디어 목록 상세 레이어(PICK) : Ajax @RequestMapping(value="/cmm/cmmAmsAssetsPickDetail.do") public String selectCmmAmsAssetsPickDetail( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { DataMap paramMap = DataMap.getParamMap(req); //paramMap.setString("aId", paramMap.getString("aId")); //cmmVO.setaId(paramMap.getString("aId")); //paramMap.setString(mId", paramMap.getString("mId")); //cmmVO.setaId(paramMap.getString("mId")); // 스크랩 여부 키 paramMap.setString("sessionId", CmmUtil.getCookieId(req)); // Asset 상세정보(죄측 상단 및 상세) DataMap cmmAmsAssetsDetail = cmmService.selectCmmAmsAssetsDetail(paramMap); model.addAttribute("cmmAmsAssetsDetail", cmmAmsAssetsDetail); // 다른문화원 소장자료 목록 정보를 가져오기 위한 맵핑 paramMap.setString("sojangCouncil", cmmAmsAssetsDetail.getString("sojangCouncil")); // 소장문화원 // 에셋 미디어 상세정보(원문보기 쪽 상세정보) DataMap cmmAmsAssetsMediaDetail = cmmService.selectCmmAmsAssetsMediaDetail(paramMap); model.addAttribute("cmmAmsAssetsMediaDetail", cmmAmsAssetsMediaDetail); /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 // 문서 목차정보 파싱 List tableOfContentsList = CmmUtil.parseTableOfContents(cmmAmsAssetsMediaDetail.getString("tableOfContents")); cmmAmsAssetsMediaDetail.put("tableOfContentsList", tableOfContentsList); // 문서 원문보기 OCR 목록 (2019.10.04) if (cmmAmsAssetsMediaDetail != null && cmmAmsAssetsMediaDetail.getInt("ocrSplitNum") > 1) { model.addAttribute("cmmAmsAssetsMediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); } */ // 연관태그목록 List tagsListResult = cmmService.selectCmmAmsAssetsTagsList(paramMap); model.addAttribute("cmmAmsAssetsTagsList", tagsListResult); /**** 연속자료 paging ****/ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(cmmVO.getPageIndex()); paginationInfo.setRecordCountPerPage(cmmVO.getPageUnit()); paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmVO.getMobilePageSize() : cmmVO.getPageSize()); cmmVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); cmmVO.setLastIndex(paginationInfo.getLastRecordIndex()); cmmVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); /**** 연속자료 paging ****/ // 미디어 ID 맵핑 cmmVO.setmId(paramMap.getString("mId")); // 연속자료 총 수 int totCnt = cmmService.selectCmmAmsAssetsContinueListTotCnt(cmmVO); // 연속자료 목록 model.addAttribute("cmmAmsAssetsContinueList", cmmService.selectCmmAmsAssetsContinueList(cmmVO)); // 연속자료 페이징 오브젝트 paginationInfo.setTotalRecordCount(totCnt); model.addAttribute("paginationInfo", paginationInfo); // 연관 지역문화 이야기 List cmsTag = new ArrayList(); for(int i = 0; i < tagsListResult.size() ; i++){ cmsTag.add(tagsListResult.get(i).get("tagsName") ); } List themesResult = cmmService.selectCmmAmsAssetsThemesContentsList(cmsTag); model.addAttribute("cmmAmsAssetsThemesContentsList",themesResult); // 문화원의 다른 소장자료 목록 List diffSojangListResult = cmmService.selectCmmAmsAssetsDiffSojangList(paramMap); /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 for (int i=0; diffSojangListResult!=null && i diffSojangTableOfContentsList = CmmUtil.parseTableOfContents(diffSojang.getString("tableOfContents")); diffSojang.put("tableOfContentsList", diffSojangTableOfContentsList); // 문서 원문보기 OCR 목록 if (diffSojang.getInt("ocrSplitNum") > 1) { diffSojang.put("mediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); } // LOGGER.info("selectCmmAmsAssetsPickDetail() diffSojangListResult... i={}, diffSojang.get(\"tableOfContentsLis\")=", i, diffSojang.get("tableOfContentsList")); } */ model.addAttribute("cmmAmsAssetsDiffSojangList", diffSojangListResult); paramMap.setString("jsessionId", CmmUtil.getCookieId(req)); paramMap.setString("contentId", paramMap.getString("mId")); paramMap.setString("contentType", Constant.CONTENT_TYPE_A); cmmService.insertCmmActivityHst(paramMap); // 관심지역 정보 model.addAttribute("pscHst", cmmService.selectCmmPscHstDetail(paramMap)); model.addAttribute("paramVO", cmmVO); // 파라미터 // ams 서버 패스 정보 CmmUtil.setAmsPathModelMap(req,model); // ams nfs 파일 경로 CmmUtil.setNfsPathModelMap(req,model); return "/kccf/cmm/layerAmsAssetsPickDetailAjax"; } //AMS 미디어 목록 상세 레이어(PICK) : 연속자료 목록: Ajax @RequestMapping(value="/cmm/cmmAmsAssetsPickContinueList.do") public String selectCmmAmsAssetsPickContinueList( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { DataMap paramMap = DataMap.getParamMap(req); // 스크랩 여부 키 paramMap.setString("sessionId", CmmUtil.getCookieId(req)); // Asset 상세정보(죄측 상단 및 상세) DataMap cmmAmsAssetsDetail = cmmService.selectCmmAmsAssetsDetail(paramMap); model.addAttribute("cmmAmsAssetsDetail", cmmAmsAssetsDetail); // 에셋 미디어 상세정보(원문보기 쪽 상세정보) DataMap cmmAmsAssetsMediaDetail = cmmService.selectCmmAmsAssetsMediaDetail(paramMap); model.addAttribute("cmmAmsAssetsMediaDetail", cmmAmsAssetsMediaDetail); /**** 연속자료 paging ****/ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(cmmVO.getPageIndex()); paginationInfo.setRecordCountPerPage(cmmVO.getPageUnit()); paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmVO.getMobilePageSize() : cmmVO.getPageSize()); cmmVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); cmmVO.setLastIndex(paginationInfo.getLastRecordIndex()); cmmVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); /**** 연속자료 paging ****/ // 연속자료 총 수 int totCnt = cmmService.selectCmmAmsAssetsContinueListTotCnt(cmmVO); // 연속자료 목록 model.addAttribute("cmmAmsAssetsContinueList", cmmService.selectCmmAmsAssetsContinueList(cmmVO)); // 연속자료 페이징 오브젝트 paginationInfo.setTotalRecordCount(totCnt); model.addAttribute("paginationInfo", paginationInfo); // 관심지역 정보 model.addAttribute("pscHst", cmmService.selectCmmPscHstDetail(paramMap)); model.addAttribute("paramVO", cmmVO); // 파라미터 // ams 서버 패스 정보 CmmUtil.setAmsPathModelMap(req,model); // ams nfs 파일 경로 CmmUtil.setNfsPathModelMap(req,model); return "/kccf/cmm/layerAmsAssetsPickContinueListAjax"; } // 미디어 기준의 목록(레이어 원문보기용) @RequestMapping(value="/cmm/cmmAmsAssetsOriginViewList.do") public String selectCmmAmsAssetsOriginViewList( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { DataMap paramMap = DataMap.getParamMap(req); paramMap.setString("aid", paramMap.getString("aId")); paramMap.setString("mid", paramMap.getString("mId")); // AssetMedia 목록 String rsUrl = ""; String assetType = ""; if(Constant.M_TYPE_I.equals(paramMap.getString("mType"))){ // 이미지 rsUrl = "/kccf/cmm/layerImgAjax"; assetType = Constant.M_TYPE_ARRAY[0]; } else if(Constant.M_TYPE_V.equals(paramMap.getString("mType"))){ // 비디오 rsUrl = "/kccf/cmm/layerVideoAjax"; assetType = Constant.M_TYPE_ARRAY[1]; } else if(Constant.M_TYPE_A.equals(paramMap.getString("mType"))){ // 오디오 rsUrl = "/kccf/cmm/layerAudioAjax"; assetType = Constant.M_TYPE_ARRAY[2]; } paramMap.setString("assetType", assetType); model.addAttribute("mType", paramMap.getString("mType")); model.addAttribute("pageIndex", 1); model.addAttribute("lastPageNo", 1); model.addAttribute("cmmOriginViewList", cmmService.selectCmmAmsAssetsOriginViewList(paramMap)); // ams 서버 패스 정보 CmmUtil.setAmsPathModelMap(req,model); return rsUrl; } @RequestMapping(value="/cmm/cmmAmsAssetsOriginViewList-data.do") public String selectCmmAmsAssetsOriginViewListData( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { DataMap paramMap = DataMap.getParamMap(req); model.addAttribute("paramVO",cmmVO); paramMap.setString("uaType", Constant.UA_TYPE_A); paramMap.setString("activityType", Constant.ACTIVITY_TYPE_B); // 파라미터 맵핑 paramMap.setString("aid", paramMap.getString("aId")); paramMap.setString("mid", paramMap.getString("mId")); // AssetMedia 목록 String rsUrl = ""; String assetType = ""; if(Constant.M_TYPE_I.equals(paramMap.getString("mType"))){ // 이미지 rsUrl = "/kccf/cmm/layerImgAddAjax"; assetType = Constant.M_TYPE_ARRAY[0]; } else if(Constant.M_TYPE_V.equals(paramMap.getString("mType"))){ // 비디오 rsUrl = "/kccf/cmm/layerVideoAddAjax"; assetType = Constant.M_TYPE_ARRAY[1]; } else if(Constant.M_TYPE_A.equals(paramMap.getString("mType"))){ // 오디오 rsUrl = "/kccf/cmm/layerVideoAddAjax"; assetType = Constant.M_TYPE_ARRAY[2]; } paramMap.setString("assetType", assetType); model.addAttribute("mType", paramMap.getString("mType")); /**** paging ****/ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(cmmVO.getPageIndex()); paginationInfo.setRecordCountPerPage(cmmVO.getPageUnit()); paginationInfo.setPageSize(cmmVO.getPageSize()); cmmVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); cmmVO.setLastIndex(paginationInfo.getLastRecordIndex()); cmmVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); /**** paging ****/ paramMap.setInt("recordCountPerPage", paginationInfo.getRecordCountPerPage()); paramMap.setInt("firstIndex", paginationInfo.getFirstRecordIndex()); paramMap.setInt("lastIndex", paginationInfo.getLastRecordIndex()); int totCnt = cmmService.selectCmmAmsAssetsOriginViewListAjaxCnt(paramMap); model.addAttribute("totCnt", totCnt); paginationInfo.setTotalRecordCount(totCnt); model.addAttribute("paginationInfo", paginationInfo); model.addAttribute("lastPageNo", paginationInfo.getLastPageNo()); model.addAttribute("cmmOriginViewList", cmmService.selectCmmAmsAssetsOriginViewListAjax(paramMap)); // ams 서버 패스 정보 CmmUtil.setAmsPathModelMap(req,model); return rsUrl; } // 미디어 기준의 상세(레이어 원문보기용) @RequestMapping(value="/cmm/cmmAmsAssetsOriginViewDetail.do") public ModelAndView selectCmmAmsAssetsOriginViewDetail( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { LOGGER.info("selectCmmAmsAssetsOriginViewDetail() start... req.getRequestURI()={}, req.getQueryString()={}", req.getRequestURI(), req.getQueryString()); DataMap paramMap = DataMap.getParamMap(req); paramMap.setString("mid", paramMap.getString("mId")); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); DataMap responseMap = new DataMap(); DataMap resultMap = cmmService.selectCmmAmsAssetsOriginViewDetail(paramMap); responseMap.put("result", resultMap); // 미디어 활동이력 (원문보기 이력) 등록 (2019.08.26) DataMap hstParamMap = new DataMap(); hstParamMap.put("jsessionId", CmmUtil.getCookieId(req)); hstParamMap.put("contentId", paramMap.getString("mId")); hstParamMap.put("assetType", resultMap.getString("assetType")); hstParamMap.put("linkUrl", req.getRequestURI()+"?"+req.getQueryString()); hstParamMap.put("uaType", CmmUtil.isMobile(req) ? Constant.UA_TYPE_M : Constant.UA_TYPE_W); cmmService.insertCmmActivityMediaHst(hstParamMap); model.addAttribute("responseData", responseMap); return modelAndView; } @RequestMapping(value="/cmm/imageSrc.do") public String cmmSmartEditorImageView(HttpServletRequest request, HttpServletResponse response) { return "egovframework/cmm/cmmSmartEditorImageView"; } private String getBrowser(HttpServletRequest request) { String header = request.getHeader("User-Agent"); if (header.indexOf("MSIE") > -1) { return "MSIE"; } else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지 return "Trident"; } else if (header.indexOf("Chrome") > -1) { return "Chrome"; } else if (header.indexOf("Opera") > -1) { return "Opera"; } return "Firefox"; } private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException { String browser = getBrowser(request); String dispositionPrefix = "attachment; filename="; String encodedFilename = null; if (browser.equals("MSIE")) { encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); } else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지 encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); } else if (browser.equals("Firefox")) { encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; } else if (browser.equals("Opera")) { encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; } else if (browser.equals("Chrome")) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < filename.length(); i++) { char c = filename.charAt(i); if (c > '~') { sb.append(URLEncoder.encode("" + c, "UTF-8")); } else { sb.append(c); } } encodedFilename = sb.toString(); } else { throw new IOException("Not supported browser"); } response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename); if ("Opera".equals(browser)) { response.setContentType("application/octet-stream;charset=UTF-8"); } } /** * response Cache * @param response */ @SuppressWarnings("unused") private void setResponseCacheControl(HttpServletResponse response){ response.setContentType("text/html; charset=utf-8"); response.setDateHeader("Expires", -1); response.setHeader("Pragma", "no-cahce"); response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 } /** * PDF 호출 - [RIS] 파일에 표시되는 URL (viewer에 관계없이 변하지 않는 URL 제공위해 생성) * ex) /npdfView.do?npdf=R10692 * * npdf="미디어ID" (사용여부, 원문공개여부 모두 Y가 아니면 404 페이지) * npdf="R+미디어인터페이스ID" (사용여부, 원문공개여부 모두 Y가 아니면 404 페이지) * npdf="I+미디어인터페이스ID" (사용여부, 원문공개여부 모두 Y가 아니면 404 페이지) * npdf="A+미디어인터페이스ID" (사용여부, 원문공개여부 관계없이 항상 뷰어 띄움) * * @param request * @param response * @param model * @return */ @RequestMapping(value="/npdfView.do") public String nPdfView(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { DataMap paramMap = DataMap.getParamMap(request); String npdf = paramMap.getString("npdf"); // "R" + interfaceId String pNumber = paramMap.getString("pn"); if (StringUtils.isEmpty(npdf)) { LOGGER.error("nPdfView() npdf is empty..."); return "/code404.jsp"; } String rfType = ""; // RIS일 경우 "R" (Constant.UA_TYPE_R) String contentId = ""; // asset media id if (npdf.startsWith(Constant.UA_TYPE_R) || npdf.startsWith("I") || npdf.startsWith("A")) { // npdf="R+인터페이스ID", npdf="I+인터페이스ID", npdf="A+인터페이스ID" if (npdf.startsWith(Constant.UA_TYPE_R)) rfType = Constant.UA_TYPE_R; if (npdf.length() > 1) { // interface_id 로 media_id 구하기 DataMap mediaParamMap = new DataMap(); mediaParamMap.put("interfaceId", npdf.substring(1)); DataMap mediaMap = cmmService.selectCmmAmsAssetsMediaDetailByInterfaceId(mediaParamMap); if (mediaMap != null) contentId = mediaMap.getString("id"); } } else { // mediaId만 넘긴 경우 (npdf="미디어ID") contentId = npdf; } LOGGER.info("nPdfView() contentId={}, rfType={}", contentId, rfType); // searchData index (분할파일일 경우 default로 띄울 분할파일 index 값 (1부터 시작하는 값)) //int sdIdx = paramMap.getInt("sd"); xss 때문에 아래처럼 수정 String sd = CmmUtil.clearXSS(paramMap.getString("sd")); // XSS 방지 if(sd == "") sd = "0"; int sdIdx = Integer.parseInt(sd); if (sdIdx == 0) sdIdx += 1; LOGGER.info("nPdfView() sdIdx={}", sdIdx); String assetType = ""; // String encData = ""; // 원본파일 사용할 경우 String path = ""; // 분할파일 사용할 경우 String title = ""; // 분할파일 사용할 경우 String searchData = ""; // 분할파일 사용할 경우 (분할파알 중 default로 선택될 파일명) String orginTitle = ""; String ogData = ""; if (StringUtils.isNotEmpty(contentId)) { String jsessionId = CmmUtil.getCookieId(request); // media 단건조회 DataMap mediaParamMap = new DataMap(); mediaParamMap.put("mId", contentId); mediaParamMap.put("sessionId", jsessionId); if (npdf.startsWith("A")){ mediaParamMap.put("allView", "Y"); } DataMap mediaMap = cmmService.selectCmmAmsAssetsMediaDetail(mediaParamMap); orginTitle = mediaMap.getString("title"); ogData = mediaMap.getString("title")+"||"; ogData = ogData + CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY)+request.getRequestURI()+"?"+request.getQueryString()+"||"; if (StringUtils.isNotEmpty(mediaMap.getString("mainImg"))){ ogData = ogData + CmmUtil.getAssetImageUrl(mediaMap.getString("mainImg"))+"||"; }else{ ogData = ogData + "||"; } ogData = ogData + mediaMap.getString("sojangCouncilNm"); if (mediaMap != null) { if ("N".equals(mediaMap.getString("useAt")) || "N".equals(mediaMap.getString("orgOpenAt"))) { LOGGER.error("nPdfView() USE_AT=N or ORG_OPEN_AT=N ... npdf={}, mediaParamMap={}", npdf, mediaParamMap); if (!npdf.startsWith("A")) return "/code404.jsp"; // npdf="A***" 형식일 때는 사용여부/원문공개여부 상관없이 항상 띄움 } assetType = mediaMap.getString("assetType"); String pdfViewerDelimiter = "||"; // pdf뷰어에서 사용하는 delimiter String amsNasPath = CmmUtil.getPropertyStr(Constant.NFS_NAS_KEY); // 분할파일 정보 조회 List ocrList = cmmService.selectCmmAmsAssetsMediaOcrList(mediaParamMap); if (ocrList == null || ocrList.size() == 0) { String streFileName = mediaMap.getString("streFileName"); String filePath = CmmUtil.getPropertyStr(Constant.NFS_NAS_KEY)+CmmUtil.getPropertyStr(Constant.NFS_DOC_KEY); if (streFileName.contains("/")) filePath = CmmUtil.getPropertyStr(Constant.NFS_NAS_KEY); if (streFileName.startsWith(CmmUtil.getPropertyStr("ams.nas.root.path"))) filePath = ""; // ex) /nfs_nas/minio/amsweb-opt/pdf/***.pdf path += filePath + streFileName; /* // 암호화 문자열 생성 - 기존방식 (원본파일 하나 호출) encData = FunctionTag.unidocsViewer(filePath, streFileName); */ // 2019.12.27 수정작업 이후 - customLayout.jsp 사용하려면 반드시 searchData 값 존재해야 함 searchData = FilenameUtils.getName(path); // 경로 제외한 파일명만 } else { // sdIdx 값이 ocrList 크기를 벗어날 경우 첫번째 분할 파일 default로 보여주기 if (sdIdx > ocrList.size()) sdIdx = 1; for (int i=0; i 0) path += pdfViewerDelimiter; if (fileName.startsWith(CmmUtil.getPropertyStr("ams.nas.root.path"))) path += fileName; // ex) /nfs_nas/minio/amsweb-opt/pdf/***.pdf else path += amsNasPath + fileName; // ex) 248/15/5064_divide1-1.pdf if (i == (sdIdx-1)) { searchData = fileName; searchData = FilenameUtils.getName(path); // 경로 제외한 파일명만 } } pNumber = "1"; //분할파일은 1페이지 부터 무조건 시작 } LOGGER.info("nPdfView() path={}", path); LOGGER.info("nPdfView() searchData={}", searchData); // 문서 목차정보 파싱 List tableOfContentsList = CmmUtil.parseTableOfContents(mediaMap.getString("tableOfContents")); title = CmmUtil.makeTableOfContentsMarkup(tableOfContentsList, pdfViewerDelimiter); LOGGER.info("nPdfView() title={}", title); /* // 암호화 문자열 생성 // PDFPath, downloadYn(true/false), printYn(true/false) String download = "true"; String print = "true"; String annotation = "false"; String[] param = new String[]{ java.net.URLEncoder.encode( path, "UTF-8" ), java.net.URLEncoder.encode( title, "UTF-8" ), download, print, annotation}; encData = PDFInfoEncrypter.encrypt( param ); LOGGER.info("nPdfView() encData={}", encData); */ } // 미디어 활동이력 (원문보기 이력) 등록 DataMap hstParamMap = new DataMap(); hstParamMap.put("jsessionId", jsessionId); hstParamMap.put("contentId", contentId); hstParamMap.put("assetType", assetType); hstParamMap.put("linkUrl", request.getRequestURI()+"?"+request.getQueryString()); String uaType = rfType; // rfType 값이 넘어온 경우 그대로 사용 if (StringUtils.isEmpty(uaType)) { if (CmmUtil.isMobile(request)) uaType = Constant.UA_TYPE_M; else uaType = Constant.UA_TYPE_W; } hstParamMap.put("uaType", uaType); cmmService.insertCmmActivityMediaHst(hstParamMap); } /*if (StringUtils.isNotEmpty(encData)) { // 원본파일 열 경우 - 기존방식 사용 String pdfPath = CmmUtil.getPropertyStr(Constant.PDF_VIEW_KEY); return "redirect:"+pdfPath + "/customLayoutBasic.jsp?encdata="+encData; } else */ if (StringUtils.isNotEmpty(path)) { // prepareCustomLayout.jsp 에서 암호화 후 POST 전송 (직접 redirect 하면 "Request-URI Too Long" 에러 발생 // 목차 + 분할파일 열 경우 및 원본파일 일 경우 모두 신규방식 사용 (2019.12.27) request.setAttribute("path", path); request.setAttribute("title", title); request.setAttribute("searchData", searchData); request.setAttribute("orginTitle", orginTitle); request.setAttribute("ogData", ogData); request.setAttribute("pNumber", pNumber); return "kccf/cmm/prepareCustomLayout"; } else { LOGGER.error("nPdfView() encData, path empty... npdf={}", npdf); return "/code404.jsp"; } } /** * 테스트용 PDF 호출 * @param request * @param response * @param model * @return */ @RequestMapping(value="/cmm/pdfView.do") public String cmmPdfView(HttpServletRequest request, HttpServletResponse response, ModelMap model) { DataMap paramMap = DataMap.getParamMap(request); String fileNm = paramMap.getString("fileNm"); model.addAttribute("fileNm", fileNm); return "/kccf/cmm/pdfTestView"; } /** * 테스트용 vod 호출 (ams에서 동영상 확인위해 사용한다고 함) * @param request * @param response * @param model * @return */ @RequestMapping(value="/cmm/vodView.do") public String cmmVodView(HttpServletRequest request, HttpServletResponse response, ModelMap model) { DataMap paramMap = DataMap.getParamMap(request); // 동영상파일명 String fileNm = paramMap.getString("fileNm"); model.addAttribute("fileNm", fileNm); // 자막파일명 String sFileNm = paramMap.getString("sFileNm"); model.addAttribute("sFileNm", sFileNm); return "/kccf/cmm/vodTestView"; } /** * 테스트용 audio 호출 * @param request * @param response * @param model * @return */ @RequestMapping(value="/cmm/audioView.do") public String cmmAudioView(HttpServletRequest request, HttpServletResponse response, ModelMap model) { DataMap paramMap = DataMap.getParamMap(request); String fileNm = paramMap.getString("fileNm"); String fileNmOri = paramMap.getString("fileNmOri"); model.addAttribute("fileNm", fileNm); model.addAttribute("fileNmOri", fileNmOri); return "/kccf/cmm/audioTestView"; } // 미디어 활동이력 (원문보기 이력) 등록 (2019.08.26) @RequestMapping(value="/cmm/regCmmMediaHst.do") public ModelAndView insertCmmActivityMediaHst( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { LOGGER.info("insertCmmActivityMediaHst() start... req.getRequestURI()={}, req.getQueryString()={}", req.getRequestURI(), req.getQueryString()); DataMap paramMap = DataMap.getParamMap(req); paramMap.setString("mid", paramMap.getString("mId")); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); DataMap responseMap = new DataMap(); DataMap resultMap = cmmService.selectCmmAmsAssetsOriginViewDetail(paramMap); responseMap.put("result", resultMap); // 미디어 활동이력 (원문보기 이력) 등록 (2019.08.26) DataMap hstParamMap = new DataMap(); hstParamMap.put("jsessionId", CmmUtil.getCookieId(req)); hstParamMap.put("contentId", paramMap.getString("mId")); hstParamMap.put("assetType", resultMap.getString("assetType")); hstParamMap.put("linkUrl", req.getRequestURI()+"?"+req.getQueryString()); hstParamMap.put("uaType", CmmUtil.isMobile(req) ? Constant.UA_TYPE_M : Constant.UA_TYPE_W); cmmService.insertCmmActivityMediaHst(hstParamMap); model.addAttribute("responseData", hstParamMap); return modelAndView; } /** * [상세검색] 레이어 - 지역문화원 정보 * @param cmmVO * @param model * @param commandMap * @param req * @param res * @return * @throws Exception */ @RequestMapping(value="/cmm/cmmSearchLayerCouncilInfo-data.do") public String selectCmmSearchLayerCouncilInfoAjax( @ModelAttribute("searchVO") SearchVO searchVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws Exception { DataMap paramMap = DataMap.getParamMap(req); LOGGER.info("selectCmmCouncilInfoListAjax() paramMap={}, searchVO={}", paramMap, searchVO); ComDefaultCodeVO CodeVO = new ComDefaultCodeVO(); CodeVO.setCodeId(Constant.CODE_ID_FMS018); model.addAttribute("couSidoList", cmmUseService.selectCmmCodeDetail(CodeVO)); List councilList = resourcesService.selectCouncilList(); model.addAttribute("councilList", councilList); model.addAttribute("searchVO", searchVO); return "kccf/cmm/searchLayerCouncilAjax"; } @RequestMapping(value="/cmm/risDownloadFile.do") public void risFileDownload(HttpServletRequest request, HttpServletResponse response) throws Exception { DataMap paramMap = DataMap.getParamMap(request); LOGGER.info("risFileDownload() paramMap={}", paramMap); DataMap media = cmmService.selectCmmAmsAssetsMediaDetail2(paramMap); // asset id로 조회 String mediaId = media.getString("mediaId"); String mediaInterfaceId = media.getString("mediaInterfaceId"); List tagsList = null; tagsList = cmmService.selectCmmAmsAssetsTagKeyList(paramMap); StringBuffer msb = new StringBuffer(); msb.append("TY - BOOK\n"); if(media.get("title") != null){ msb.append("TI - " + media.get("title").toString() + "\n");} //제목 if(media.get("author") != null){ msb.append("AU - " + media.get("author").toString() + "\n");} //저자 if(media.get("summary") != null){ //요약 msb.append("AB - " + media.get("summary").toString() + "\n"); }else{ msb.append("AB - 한국문화원연합회 지역문화 포털에서 제공하는 지방문화원 소장자료 입니다.\n"); } if(media.get("mgntNo") != null){ msb.append("CN - " + media.get("mgntNo").toString() + "\n");} //도서번호 if(media.get("genyear") != null){ msb.append("DA - " + media.get("genyear").toString() + "\n");} //발행일자 if(media.get("genyear") != null){ msb.append("PY - " + media.get("genyear").toString() + "\n");} //발행년도 if(media.get("totalPage") != null){ msb.append("SP - " + media.get("totalPage").toString() + "\n");} //총페이지수 msb.append("LA - Korean\n"); //언어 if(media.get("copyright") != null){ msb.append("PB - " + media.get("copyright").toString() + "\n");} //출판사 if (StringUtils.isNotEmpty(mediaInterfaceId)) { // mediaInterfaceId가 존재할 경우만 URL 정보 생성 if(media.get("assetType") != null){ if(media.get("assetType").toString().equals("문서") ){ String url = CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY)+"/npdfView.do?"; url += "npdf="+Constant.UA_TYPE_R+mediaInterfaceId; // MEDIA 의 INTERFACE_ID 사용 if(media.get("orgOpenAt").toString().equals("Y")){ //원문공개여부 msb.append("UR - "+url+"\n"); } }else if(media.get("assetType").toString().equals("링크")){ msb.append("UR - " + media.get("linkData").toString() + "\n"); }else{ String url = CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY)+"/lib/libraryDetail.do?contentId="+mediaId; url += "&rfType="+Constant.UA_TYPE_R; // 히스토리 등록 시 사용 msb.append("UR - " + url + "\n"); } } } if(media.get("source") != null){ msb.append("DB - " + media.get("source").toString() + "\n");} //아카이브 for(int i = 0; i < tagsList.size() ; i++){ if(tagsList.get(i).get("tagName").toString() != "-"){ msb.append("KW - " + tagsList.get(i).get("tagName").toString() + "\n");} //키워드 } if(media.get("subtitle") != null){ msb.append("T2 - " + media.get("subtitle").toString() + "\n");} //부제목 msb.append("ER - "); byte[] content = msb.toString().getBytes(); String fileName = media.get("title").toString() + ".ris"; //FileOutputStream fos = null; BufferedOutputStream outs = null; try { String orglFileNm = new String(fileName.getBytes("euc-kr"), "iso-8859-1"); response.setHeader("Content-Disposition", "attachment; filename=\""+ orglFileNm +"\""); outs = new BufferedOutputStream(response.getOutputStream()); outs.write(content); outs.close(); } catch (IOException e){ LOGGER.error("fail in risFileDownload()", e); } catch (Exception e){ LOGGER.error("fail in risFileDownload()", e); } response.getOutputStream().flush(); response.getOutputStream().close(); } @RequestMapping(value="/cmm/cmmWebzineSubScribe.do") public String selectCmmWebzineCnfirm(ModelMap model, HttpServletRequest request, HttpServletResponse response) { DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); String successYn = "N"; int cnt = 0; try { cnt = cmmService.selectCmmWebzineCnfirm(paramMap); if(cnt < 1){ cmmService.insertCmmWebzineSubScribe(paramMap); successYn = "Y"; }else{ successYn = "F"; } } catch (EgovBizException e) { LOGGER.error("Error in selectCmmWebzineCnfirm()", e); } model.addAttribute("successYn", successYn); return "/kccf/cmm/webzineMessage"; } @RequestMapping(value="/cmm/nvodView.do") public String cmmNvodView(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws EgovBizException { DataMap paramMap = DataMap.getParamMap(request); String nvod = paramMap.getString("nvod"); String rfType = ""; // RIS일 경우 "R" (Constant.UA_TYPE_R) String contentId = ""; // asset media id String assetType = ""; String fileNm = ""; String sFileNm = ""; String mainImg = ""; if (nvod.startsWith("Z")) { // nvod="Z+인터페이스ID" (웹진) if (nvod.length() > 1) { // interface_id 로 media_id 구하기 DataMap mediaParamMap = new DataMap(); mediaParamMap.put("interfaceId", nvod.substring(1)); mediaParamMap.put("useAt", "Y"); DataMap mediaMap = cmmService.selectCmmAmsAssetsMediaDetailByInterfaceId(mediaParamMap); if (mediaMap != null){ contentId = mediaMap.getString("id"); assetType = mediaMap.getString("assetType"); } // 동영상파일명 fileNm = mediaMap.getString("streFileName"); model.addAttribute("fileNm", fileNm); // 자막파일명 sFileNm = mediaMap.getString("subtitleStreFileName"); model.addAttribute("sFileNm", sFileNm); // 자막파일명 mainImg = mediaMap.getString("mainImg"); model.addAttribute("mainImg", mainImg); model.addAttribute("mediaMap", mediaMap); } } if (StringUtils.isNotEmpty(contentId)) { String jsessionId = CmmUtil.getCookieId(request); // 미디어 활동이력 (원문보기 이력) 등록 DataMap hstParamMap = new DataMap(); hstParamMap.put("jsessionId", jsessionId); hstParamMap.put("contentId", contentId); hstParamMap.put("assetType", assetType); hstParamMap.put("linkUrl", request.getRequestURI()+"?"+request.getQueryString()); String uaType = rfType; // rfType 값이 넘어온 경우 그대로 사용 if (StringUtils.isEmpty(uaType)) { if (CmmUtil.isMobile(request)) uaType = Constant.UA_TYPE_M; else uaType = Constant.UA_TYPE_W; } hstParamMap.put("uaType", uaType); cmmService.insertCmmActivityMediaHst(hstParamMap); } return "/kccf/cmm/vodView"; } // 미디어 기준의 목록(레이어 원문보기용) @RequestMapping(value="/cmm/cmmNvodViewLayer.do") public String cmmNvodViewLayer( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { DataMap paramMap = DataMap.getParamMap(req); paramMap.setString("aid", paramMap.getString("aId")); paramMap.setString("mid", paramMap.getString("mId")); // AssetMedia 목록 String rsUrl = ""; String assetType = ""; // 비디오 rsUrl = "/kccf/cmm/layerNvodViewAjax"; assetType = Constant.M_TYPE_ARRAY[1]; paramMap.setString("assetType", assetType); model.addAttribute("mType", paramMap.getString("mType")); model.addAttribute("pageIndex", 1); model.addAttribute("lastPageNo", 1); model.addAttribute("cmmOriginViewList", cmmService.selectCmmAmsAssetsOriginViewList(paramMap)); // ams 서버 패스 정보 CmmUtil.setAmsPathModelMap(req,model); return rsUrl; } /** * YOURLS의 API를 통해서 단축URL 가져오기 * @param cmmVO * @param model * @param commandMap * @param req * @param res * @return * @throws EgovBizException */ @RequestMapping(value="/cmm/shorturl-data.do") public ModelAndView shorturl ( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , HttpServletRequest req , HttpServletResponse res ) throws EgovBizException { String returnUrl = ""; DataMap paramMap = DataMap.getParamMap(req); try { String originUrl = URLEncoder.encode(paramMap.getString("url"), "UTF-8"); URL url = new URL( propertiesService.getString("shorturl.api") + "&action=shorturl&format=xml&title=nculture&url=" + originUrl); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); //con.setRequestProperty("Authorization", header); int responseCode = con.getResponseCode(); BufferedReader br; if(responseCode==200) { // 정상 호출 br = new BufferedReader(new InputStreamReader(con.getInputStream())); } else { // 에러 발생 br = new BufferedReader(new InputStreamReader(con.getErrorStream())); } String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = br.readLine()) != null) { response.append(inputLine); } br.close(); String str = response.toString(); Pattern pattern = Pattern.compile("(.+?)"); Matcher matcher = pattern.matcher(str); while (matcher.find()) { //System.out.println(matcher.group(1)); returnUrl = matcher.group(1); if(matcher.group(1) == null){ break; } } } catch (Exception e) { System.err.println(e.toString()); } ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); model.addAttribute("responseData", returnUrl); return modelAndView; } @RequestMapping(value="/cmm/cmmAssetSecondCategory.do") public ModelAndView selectCmmAssetSecondCategoryList(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception{ DataMap paramMap = DataMap.getParamMap(request); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); ComDefaultCodeVO CodeVO = new ComDefaultCodeVO(); CodeVO.setCodeId(Constant.CODE_ID_FMS015); CodeVO.setCode(paramMap.getString("code")); // DDDDDDDDDDDDDDDDDDDDD cmmUseService.selectCmmCodeDetail2 부재로 임시 막음 (2021.08.13) // model.addAttribute("resultList", cmmUseService.selectCmmCodeDetail2(CodeVO)); return modelAndView; } @RequestMapping(value="/cmm/tableOfContentsView.do") public String selectLocalCultureListAjax ( @ModelAttribute("cmmVO") CmmVO cmmVO , ModelMap model , @RequestParam Map commandMap , HttpServletRequest req , HttpServletResponse res ) throws Exception { DataMap paramMap = DataMap.getParamMap(req); DataMap cmmAmsAssetsMediaDetail = null; String mediaId = paramMap.getString("mId"); if(StringUtils.isNotEmpty(mediaId)){ // 미디어 ID 맵핑 if (StringUtils.isEmpty(paramMap.getString("mId"))) paramMap.setString("mId", mediaId); // 에셋 미디어 상세정보(원문보기 쪽 상세정보) cmmAmsAssetsMediaDetail = cmmService.selectCmmAmsAssetsMediaDetail(paramMap); List tableOfContentsList = CmmUtil.parseTableOfContents(cmmAmsAssetsMediaDetail.getString("tableOfContents")); cmmAmsAssetsMediaDetail.put("tableOfContentsList", tableOfContentsList); if (cmmAmsAssetsMediaDetail.getInt("ocrSplitNum") > 1) { cmmAmsAssetsMediaDetail.put("mediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); } } // 상세정보 model.addAttribute("cmmAmsAssetsMediaDetail", cmmAmsAssetsMediaDetail); paramMap.setString("jsessionId", CmmUtil.getCookieId(req)); CmmUtil.setAmsPathModelMap(req,model); return "/kccf/cmm/layerTableOfContentsAjax"; } }