From a239d8d323187abdeee98d9d6c56fa0b09305c61 Mon Sep 17 00:00:00 2001 From: leebj Date: Thu, 5 Sep 2024 11:08:27 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8B=A8=EC=86=8D=EC=82=AC=EC=A7=84=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20=EC=9D=B4=EB=8F=99(FileControl?= =?UTF-8?q?ler=20->=20Crdn06Controller)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xit/fims/base/web/FileController.java | 308 ------------------ .../xit/fims/crdn/web/Crdn06Controller.java | 79 +++++ .../resources/sql/mapper/base/file-mapper.xml | 184 ----------- 3 files changed, 79 insertions(+), 492 deletions(-) delete mode 100644 src/main/java/cokr/xit/fims/base/web/FileController.java delete mode 100644 src/main/resources/sql/mapper/base/file-mapper.xml diff --git a/src/main/java/cokr/xit/fims/base/web/FileController.java b/src/main/java/cokr/xit/fims/base/web/FileController.java deleted file mode 100644 index ada61c96..00000000 --- a/src/main/java/cokr/xit/fims/base/web/FileController.java +++ /dev/null @@ -1,308 +0,0 @@ -package cokr.xit.fims.base.web; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.StringWriter; -import java.net.URISyntaxException; -import java.net.URLDecoder; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.function.Consumer; -import java.util.regex.Matcher; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.apache.commons.io.FilenameUtils; -import org.apache.poi.xslf.usermodel.XMLSlideShow; -import org.springframework.core.io.ClassPathResource; -import org.springframework.http.HttpHeaders; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.ModelAndView; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -import cokr.xit.base.file.dao.FileMapper; -import cokr.xit.base.file.service.FileQuery; -import cokr.xit.base.file.service.bean.FileBean; -import cokr.xit.fims.crdn.Crdn; -import cokr.xit.fims.crdn.dao.CrdnInfoMapper; -import cokr.xit.fims.sprt.Sprt; -import cokr.xit.fims.sprt.service.bean.MediaBean; -import cokr.xit.foundation.Downloadable; -import cokr.xit.foundation.data.DataObject; - -@Controller -public class FileController extends cokr.xit.base.file.web.FileController { - @Resource(name = "fileMapper") - private FileMapper fileMapper; - - @Resource(name = "crdnInfoMapper") - private CrdnInfoMapper crdnInfoMapper; - - @Resource(name="fileBean") - private FileBean fileBean; - - @Resource(name="mediaBean") - private MediaBean mediaBean; - - @Override - public ModelAndView getFileList(FileQuery req) { - ModelAndView mav = new ModelAndView("jsonView"); - - String infoType = ifEmpty(req.getInfoType(), () -> ""); - boolean singleKey = (req.getInfoKeys() != null && req.getInfoKeys().length == 1); - - //파일 목록 - List fileInfoList = fileService().getFileList(req); - for(DataObject fileInfo : fileInfoList) { - List mosaicInfos = mediaBean.getMosaicList(fileInfo.string("FILE_ID")); - if(mosaicInfos != null) { - String mosaic = ""; - for(int i=0; i < mosaicInfos.size(); i++) { - DataObject mosaicInfo = mosaicInfos.get(i); - if(i != 0) { - mosaic += "|"; - } - mosaic += mosaicInfo.string("X_AXS") - + "," + mosaicInfo.string("Y_AXS") - + "," + mosaicInfo.string("MOSC_LEN") - + "," + mosaicInfo.string("MOSC_HGT"); - } - fileInfo.set("MOSAIC", mosaic); - } else { - fileInfo.set("MOSAIC", ""); - } - - } - mav = setPagingInfo(mav, fileInfoList, "file"); - - //민원 동영상파일 첨부 여부 - String cvlcptVideoExistYn = "N"; - if(infoType.equals(Crdn.INF_TYPE) && singleKey) { - - DataObject dataObject = crdnInfoMapper.selectCrdnInfo(req.getInfoKeys()[0]); - - String linkTblNm = dataObject.string("LINK_TBL_NM"); - if(!linkTblNm.equals("")) { //민원연계자료 - FileQuery cvlcptFileQuery = new FileQuery(); - if(linkTblNm.equals("TB_ESB_INTERFACE")) { - cvlcptFileQuery.setInfoType("010"); - } else if(linkTblNm.equals("TB_SA_CVLCPT_DTL")) { - cvlcptFileQuery.setInfoType("020"); - } else { - throw new RuntimeException("파일 조회 중 오류가 발생하였습니다."); - } - - cvlcptFileQuery.setInfoKeys(dataObject.string("LINK_ID")); - List linkFileList = fileBean.getFileList(cvlcptFileQuery); - if(linkFileList != null && !linkFileList.isEmpty()) { - for(int i=0; i < linkFileList.size(); i++) { - String mimeType = linkFileList.get(i).string("MIME_TYPE"); - if(Arrays.asList(Sprt.VIDEO_MIME_TYPE).contains(mimeType)) { - cvlcptVideoExistYn = "Y"; - } - } - } - } - } - mav.addObject("cvlcptVideoExistYn", cvlcptVideoExistYn); - - return mav; - } - - - /** 메뉴얼을 다운로드한다. - * @return 메뉴얼 파일 - * @throws Exception - */ - @GetMapping(name = "메뉴얼 다운로드", value = "/downloadMenual.do") - public ModelAndView downloadMenual() throws Exception { - ModelAndView mav = new ModelAndView("downloadView"); - - String filePath = ("menual/메뉴얼.pptx"); - ClassPathResource cps = new ClassPathResource(filePath); - String menualVersion = ""; - try (XMLSlideShow slideShow = new XMLSlideShow(cps.getInputStream())) { - menualVersion = slideShow - .getProperties() - .getCoreProperties() - .getUnderlyingProperties() - .getVersionProperty() - .get(); - } - - InputStream menualIS = cps.getInputStream(); - byte[] menualBytes = menualIS.readAllBytes(); - menualIS.close(); - - Consumer writer = new Consumer() { - @Override - public void accept(OutputStream os) { - try { - os.write(menualBytes); - } catch (IOException e) { - e.printStackTrace(); - } - } - }; - - mav.addObject("download", - new Downloadable() - .setContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation") - .setWriter(writer) - .setFilename("과태료통합관리시스템_메뉴얼"+"("+"v"+menualVersion+")"+".pptx") - ); - - return mav; - } - - - @GetMapping(name = "SVG 이미지 파일 색상 변경", value = "/modifySvg/**") - public void modifySvg(HttpServletRequest request, HttpServletResponse response) throws URISyntaxException, IOException, ParserConfigurationException, SAXException { - String requestURI = request.getRequestURI().toString(); - - String filepath = requestURI.split("modifySvg")[1]; - filepath = URLDecoder.decode(filepath, "UTF-8"); - filepath = filepath.replaceAll("/", Matcher.quoteReplacement(File.separator)); - filepath = "svg" + filepath; - - ClassPathResource resource = new ClassPathResource(filepath); - InputStream is = resource.getInputStream(); - - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = factory.newDocumentBuilder(); - Document document = documentBuilder.parse(is); - Element root = document.getDocumentElement(); - NodeList nodeList = root.getChildNodes(); - - try { - String modify = request.getParameter("modify"); - if(modify == null || modify.equals("")){ - - } else if(modify.equals("active")){ - updateTagFillColor(nodeList, "green"); - } else if(modify.equals("alert")){ - updateTagFillColor(nodeList, "red"); - } - - String str4 = DocumentToString(document); - byte[] bytes = str4.getBytes(); - - response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes"); - response.setHeader(HttpHeaders.CONTENT_TYPE, "image/svg+xml"); - response.setHeader(HttpHeaders.CONNECTION, "keep-alive"); - response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); - response.setHeader("Pragma", "no-cache"); - response.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, must-revalidate"); - response.setDateHeader(HttpHeaders.EXPIRES, 0); - response.setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(bytes.length)); - response.setContentType("image/svg+xml"); - - OutputStream os = response.getOutputStream(); - os.write(bytes); - os.flush(); - os.close(); - - - } catch (Exception e){ - - } - - - } - - - - public static String DocumentToString( Document doc ) - { - try - { - StringWriter clsOutput = new StringWriter( ); - Transformer clsTrans = TransformerFactory.newInstance( ).newTransformer( ); - - clsTrans.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "no" ); - clsTrans.setOutputProperty( OutputKeys.METHOD, "xml" ); - clsTrans.setOutputProperty( OutputKeys.INDENT, "yes" ); - clsTrans.setOutputProperty( OutputKeys.ENCODING, "UTF-8" ); - - clsTrans.transform( new DOMSource( doc ), new StreamResult( clsOutput ) ); - - return clsOutput.toString( ); - } - catch( Exception ex ) - { - return ""; - } - } - - private void updateTagFillColor(NodeList nodeList, String newFillColor) { - - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - NamedNodeMap namedNodeMap = node.getAttributes(); - if(namedNodeMap != null && namedNodeMap.getLength() > 0){ - for (int j = 0; j < namedNodeMap.getLength(); j++) { - Node namedNode = namedNodeMap.item(j); - if (namedNode.getNodeName().equalsIgnoreCase("fill")) { - namedNode.setNodeValue(newFillColor); // Change the color of the fill attribute. - } - } - } - } - } - - - @PostMapping(name = "처리 전 파일업로드", value = "/uploadBeforeProcess.do") - public ModelAndView uploadBeforeProcess(MultipartFile[] uploadFiles) { - ModelAndView mav = new ModelAndView("jsonView"); - - boolean saved = false; - - MultipartFile uploadFile = uploadFiles[0]; - String orginalFileName = uploadFile.getOriginalFilename(); - String extension = FilenameUtils.getExtension(orginalFileName); - - SimpleDateFormat ymdhmsFormat = new SimpleDateFormat("yyyyMMddHHmmss"); - String currentTime = ymdhmsFormat.format(new Date()); - - String folderPath = "files/temp/uploadFirst"; - File folder = new File(folderPath); - folder.mkdirs(); - String filePath = folderPath + "/"+currentTime+"."+extension; - File file = new File(filePath); - - - try { - uploadFile.transferTo(file); - saved = true; - } catch (IOException e) { - throw new RuntimeException("파일업로드 오류"+e); - } - - mav.addObject("saved", saved); - mav.addObject("filePath", filePath); - return mav; - } - -} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/crdn/web/Crdn06Controller.java b/src/main/java/cokr/xit/fims/crdn/web/Crdn06Controller.java index 7765c82b..07340099 100644 --- a/src/main/java/cokr/xit/fims/crdn/web/Crdn06Controller.java +++ b/src/main/java/cokr/xit/fims/crdn/web/Crdn06Controller.java @@ -1,6 +1,7 @@ package cokr.xit.fims.crdn.web; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -24,6 +25,7 @@ import cokr.xit.base.docs.xls.XLSWriter; import cokr.xit.base.file.FileInfo; import cokr.xit.base.file.FileInfo.Relation; import cokr.xit.base.file.service.FileQuery; +import cokr.xit.base.file.service.FileService; import cokr.xit.base.file.service.bean.FileBean; import cokr.xit.base.file.web.FileInfoFactory; import cokr.xit.base.user.dao.UserMapper; @@ -34,9 +36,12 @@ import cokr.xit.fims.cmmn.xls.FormatMaker; import cokr.xit.fims.cmmn.xls.StyleMaker; import cokr.xit.fims.crdn.Crdn; import cokr.xit.fims.crdn.CrdnQuery; +import cokr.xit.fims.crdn.dao.CrdnInfoMapper; import cokr.xit.fims.crdn.dao.CrdnStngMapper; import cokr.xit.fims.crdn.service.CrdnService; import cokr.xit.fims.crdn.service.CrdnStngService; +import cokr.xit.fims.sprt.Sprt; +import cokr.xit.fims.sprt.service.bean.MediaBean; import cokr.xit.fims.task.Task; import cokr.xit.foundation.data.DataObject; @@ -82,6 +87,15 @@ public class Crdn06Controller extends ApplicationController { @Resource(name = "stngBean") private StngBean stngBean; + @Resource(name = "crdnInfoMapper") + private CrdnInfoMapper crdnInfoMapper; + + @Resource(name = "mediaBean") + private MediaBean mediaBean; + + @Resource(name = "fileService") + private FileService fileService; + /** 단속 관리 메인화면을 연다. * @return fims/crdn/crdn06010-main */ @@ -540,4 +554,69 @@ public class Crdn06Controller extends ApplicationController { .addObject("retMessage", retMessage); } + + @RequestMapping(name= "단속 사진 목록", value = "/fileList.do") + public ModelAndView getFileList(FileQuery req) { + ModelAndView mav = new ModelAndView("jsonView"); + + String infoType = ifEmpty(req.getInfoType(), () -> ""); + boolean singleKey = (req.getInfoKeys() != null && req.getInfoKeys().length == 1); + + //파일 목록 + List fileInfoList = fileService.getFileList(req); + for(DataObject fileInfo : fileInfoList) { + List mosaicInfos = mediaBean.getMosaicList(fileInfo.string("FILE_ID")); + if(mosaicInfos != null) { + String mosaic = ""; + for(int i=0; i < mosaicInfos.size(); i++) { + DataObject mosaicInfo = mosaicInfos.get(i); + if(i != 0) { + mosaic += "|"; + } + mosaic += mosaicInfo.string("X_AXS") + + "," + mosaicInfo.string("Y_AXS") + + "," + mosaicInfo.string("MOSC_LEN") + + "," + mosaicInfo.string("MOSC_HGT"); + } + fileInfo.set("MOSAIC", mosaic); + } else { + fileInfo.set("MOSAIC", ""); + } + + } + mav = setPagingInfo(mav, fileInfoList, "file"); + + //민원 동영상파일 첨부 여부 + String cvlcptVideoExistYn = "N"; + if(infoType.equals(Crdn.INF_TYPE) && singleKey) { + + DataObject dataObject = crdnInfoMapper.selectCrdnInfo(req.getInfoKeys()[0]); + + String linkTblNm = dataObject.string("LINK_TBL_NM"); + if(!linkTblNm.equals("")) { //민원연계자료 + FileQuery cvlcptFileQuery = new FileQuery(); + if(linkTblNm.equals("TB_ESB_INTERFACE")) { + cvlcptFileQuery.setInfoType("010"); + } else if(linkTblNm.equals("TB_SA_CVLCPT_DTL")) { + cvlcptFileQuery.setInfoType("020"); + } else { + throw new RuntimeException("파일 조회 중 오류가 발생하였습니다."); + } + + cvlcptFileQuery.setInfoKeys(dataObject.string("LINK_ID")); + List linkFileList = fileBean.getFileList(cvlcptFileQuery); + if(linkFileList != null && !linkFileList.isEmpty()) { + for(int i=0; i < linkFileList.size(); i++) { + String mimeType = linkFileList.get(i).string("MIME_TYPE"); + if(Arrays.asList(Sprt.VIDEO_MIME_TYPE).contains(mimeType)) { + cvlcptVideoExistYn = "Y"; + } + } + } + } + } + mav.addObject("cvlcptVideoExistYn", cvlcptVideoExistYn); + + return mav; + } } diff --git a/src/main/resources/sql/mapper/base/file-mapper.xml b/src/main/resources/sql/mapper/base/file-mapper.xml deleted file mode 100644 index 5a564e37..00000000 --- a/src/main/resources/sql/mapper/base/file-mapper.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -CONCAT('files/', DIR, DATE_FORMAT(CURRENT_DATE, '/%Y/%m/%d/')) -FILE_PATH - - -SELECT INF_TYPE - , DIR - FROM ( - SELECT '010' INF_TYPE, 'interface/attachment/smg' DIR UNION - SELECT '020' INF_TYPE, 'interface/attachment/saeol' DIR UNION - SELECT '030' INF_TYPE, 'interface/attachment/epost' DIR UNION - - SELECT '100' INF_TYPE, 'attachment/violation' DIR UNION - SELECT '110' INF_TYPE, 'attachment/opinion' DIR UNION - SELECT '120' INF_TYPE, 'attachment/rent' DIR UNION - SELECT '190' INF_TYPE, 'attachment/capture' DIR - ) FILE_DIRS - - - - -SELECT A.FILE_ID - , A.INF_TYPE - , A.INF_KEY - , A.SUB_TYPE - , A.FILE_NM - , A.FILE_PATH - , A.MIME_TYPE - , A.FILE_SIZE - , A.DNLD_CNT - , A.SRT_ORD - , A.USE_YN - , A.REG_DT - , A.RGTR - , AS URL - FROM TB_FILE A - WHERE FILE_ID IN (#{fileID}) - ORDER BY FILE_ID - - - -SELECT A.FILE_ID - , A.INF_TYPE - , A.INF_KEY - , A.SUB_TYPE - , A.FILE_NM - , A.FILE_PATH - , A.MIME_TYPE - , A.FILE_SIZE - , A.DNLD_CNT - , A.SRT_ORD - , A.USE_YN - , A.REG_DT - , A.RGTR - , AS URL - FROM TB_FILE A - - AND A.INF_TYPE = #{infoType} - AND INF_KEY IN (#{infoKey}) - AND USE_YN = 'Y' - - - - - - - - - - - - - -/* 파일 등록(fileMapper.insertFile) */ - -SELECT NEW_ID - , CONCAT(DIR, NEW_ID, '.', #{file.extension}) PATH - FROM ( - SELECT NVL(MAX(FILE_ID) + 1, CONCAT(THIS_DAY, '00001')) NEW_ID - FROM () B - LEFT OUTER JOIN TB_FILE A ON FILE_ID LIKE CONCAT(THIS_DAY, '%') - ) T1 - , ( - - WHERE INF_TYPE = #{file.infoType} - ) T2 - -INSERT INTO TB_FILE ( - FILE_ID - , INF_TYPE - , INF_KEY - , SUB_TYPE - , FILE_NM - , FILE_PATH - , MIME_TYPE - , FILE_SIZE - , DNLD_CNT - , SRT_ORD - , RGTR - , REG_DT - , USE_YN -) VALUES ( - #{file.id} - , #{file.infoType} - , #{file.infoKey} - , #{file.subType} - , #{file.name} - , #{file.path} - , #{file.mimeType} - , #{file.size} - , #{file.downloadCount} - , #{file.sortOrder} - , #{currentUser.id} - , - , 'Y' -) - - - -/* 파일 순서 변경(fileMapper.reorder) */ -UPDATE TB_FILE - SET SRT_ORD = CASE FILE_ID - - WHEN #{fileID} THEN #{index} - - ELSE SRT_ORD END - WHERE FILE_ID IN (#{fileID}) - - - -/* 다운로드 횟수 증가(fileMapper.updateDownloadCount) */ -UPDATE TB_FILE SET - DNLD_CNT = DNLD_CNT + 1 - WHERE USE_YN = 'Y' - AND FILE_ID IN (#{fileID}) - - - -/* 파일 제거(fileMapper.removeFiles) */ -UPDATE TB_FILE - SET USE_YN = 'N' - WHERE USE_YN = 'Y' - AND FILE_ID IN (#{fileID}) - - AND INF_TYPE = #{infoType} - AND INF_KEY IN (#{infoKey}) - - -/* 파일 삭제(fileMapper.deleteFiles) */ -DELETE - FROM TB_FILE -WHERE FILE_ID IN (#{fileID}) - - - \ No newline at end of file