From e7b600a9a6abb4d4ed1abcfd1ee993e0c2ab0379 Mon Sep 17 00:00:00 2001 From: TaehunPark Date: Wed, 5 Oct 2022 14:25:34 +0900 Subject: [PATCH] =?UTF-8?q?fix:=EC=99=B8=EC=82=AC=EB=B6=84=EC=8B=A4?= =?UTF-8?q?=ED=98=84=ED=99=A9=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../faisp/fipTarget/FipTargetController.java | 111 ++++++++++++++++-- .../fipTarget/mapper/FipTargetMapper.java | 2 + .../fipTarget/service/FipTargetService.java | 12 +- src/main/java/com/dbnt/faisp/util/Utils.java | 9 +- .../resources/mybatisMapper/FipTarget.xml | 14 ++- src/main/resources/static/js/common.js | 4 +- .../resources/static/js/fipTarget/partInfo.js | 28 +++++ .../fipTarget/partInfoEditModal.html | 16 +-- .../templates/fipTarget/partInfoHistory.html | 14 +-- .../templates/fipTarget/partInfoList.html | 10 +- .../fipTarget/partInfoModifyModal.html | 19 +-- 11 files changed, 189 insertions(+), 50 deletions(-) diff --git a/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java b/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java index 858c8331..b0106e73 100644 --- a/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java +++ b/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java @@ -3,24 +3,29 @@ package com.dbnt.faisp.fipTarget; import com.dbnt.faisp.authMgt.service.AuthMgtService; import com.dbnt.faisp.fipTarget.model.PartInfo; +import com.dbnt.faisp.fipTarget.model.PartInfoFile; import com.dbnt.faisp.fipTarget.service.FipTargetService; import com.dbnt.faisp.organMgt.service.OrganConfigService; -import com.dbnt.faisp.publicBoard.model.PublicBoard; -import com.dbnt.faisp.translator.model.Translator; import com.dbnt.faisp.userInfo.model.UserInfo; import com.dbnt.faisp.util.ParamMap; import com.dbnt.faisp.util.Utils; import lombok.RequiredArgsConstructor; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.net.URLEncoder; import java.time.LocalDateTime; import java.util.List; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.ui.Model; +import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; @@ -43,22 +48,22 @@ public class FipTargetController { //엑셀다운 if(partInfo.getExcel() != null && partInfo.getExcel().equals("Y")){ ParamMap header = fipTargetService.selectWorkTypeTotal(partInfo); - String[] headers = { "mgt_organ", "land_police", "mp_work_type", "mp_people_cnt", "mp_description", "pl_work_type", "pl_people_cnt", "pl_description", "terminal_nm", "pi_manager_name", "rent_price", "utility_price", "wrt_dt"}; - String[] headerNames = { "해경서", "육경서", "해경", "", "", "육경", "", "", "", "", "", "",""}; + String[] headers = { "mgt_organ", "land_police", "terminal_nm", "mp_work_type", "mp_people_cnt", "mp_description", "pl_work_type", "pl_people_cnt", "pl_description", "pi_manager_name", "rent_price", "utility_price", "wrt_dt"}; + String[] headerNames = { "해경서", "육경서","터미넡명", "해경", "", "", "육경", "", "", "", "", "",""}; String[] headerNames2 = null; if(header != null) { - headerNames2 = new String[] { "", "", "상주 "+header.getString("mp_sangju")+"개소 "+header.getString("mp_sangju_total")+"명" + headerNames2 = new String[] { "", "", "", "상주 "+header.getString("mp_sangju")+"개소 "+header.getString("mp_sangju_total")+"명" ,"비상주 "+header.getString("mp_bsangju")+"개소 "+header.getString("mp_bsangju_total")+"명" ,"폐쇄 "+header.getString("mp_closure")+"개소 "+header.getString("mp_closure_total")+"명" ,"상주 "+header.getString("pl_sangju")+"개소 "+header.getString("pl_sangju_total")+"명" ,"비상주 "+header.getString("pl_bsangju")+"개소 "+header.getString("pl_bsangju_total")+"명" ,"폐쇄 "+header.getString("pl_closure")+"개소 "+header.getString("pl_closure_total")+"명" - , "", "", "", "", "" }; + , "", "", "", "" }; }else { - headerNames2 = new String[] { "", "", "상주 0개소 0명","비상주 0개소 0명","폐쇄 0개소 0명","상주 0개소 0명","비상주 0개소 0명","폐쇄 0개소 0명", "", "", "", "", "" }; + headerNames2 = new String[] { "", "","", "상주 0개소 0명","비상주 0개소 0명","폐쇄 0개소 0명","상주 0개소 0명","비상주 0개소 0명","폐쇄 0개소 0명", "", "", "", "" }; } - String[] headerNames3 = { "", "", "근무방법", "명", "비고", "근무방법", "명", "비고", "터미널명", "담당자", "임차료", "공공요금", "최종수정일" }; - String[] columnType = { "String", "String", "String", "int", "String", "String", "int", "String", "String", "String", "String","String", "String"}; + String[] headerNames3 = { "", "","", "근무방법", "명", "비고", "근무방법", "명", "비고", "담당자", "임차료", "공공요금", "최종수정일" }; + String[] columnType = { "String", "String","String", "String", "int", "String", "String", "int", "String", "String", "String","String", "String"}; String sheetName = "외사 분실 현황"; String excelFileName = "외사 분실 현황"; List partInfoList= fipTargetService.selectPartInfoList(partInfo); @@ -71,7 +76,7 @@ public class FipTargetController { return null; } //메뉴권한 확인 - String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/equip/equipStatus").get(0).getAccessAuth(); + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/partInfoList").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); partInfo.setDownOrganCdList(loginUser.getDownOrganCdList()); partInfo.setQueryInfo(); @@ -122,6 +127,11 @@ public class FipTargetController { mav.addObject("managerList", fipTargetService.selectPartInfoManagerList(param)); partInfoView.setFileList(fipTargetService.selectPartInfoFile(partInfo)); mav.addObject("partInfo", partInfoView); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/partInfoList").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + mav.addObject("userId", loginUser.getUserId()); + mav.addObject("wrtId", fipTargetService.selectPartInfoFirstId(partInfo)); return mav; } @@ -132,6 +142,7 @@ public class FipTargetController { partInfo.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); partInfo.setWrtUserSeq(loginUser.getUserSeq()); partInfo.setWrtNm(loginUser.getUserId()); + partInfo.setWrtOrgan(loginUser.getOgCd()); partInfo.setWrtPart(loginUser.getOfcCd()); partInfo.setWrtDt(LocalDateTime.now()); fipTargetService.updatePartInfo(partInfo,deleteFileSeq); @@ -158,6 +169,84 @@ public class FipTargetController { public void deletePartInfo(@RequestBody PartInfo partInfo) { fipTargetService.deletePartInfo(partInfo); } + + @GetMapping("/partInfoFileDownload") + public void fileDownload(HttpServletRequest request, + HttpServletResponse response, + Integer fileSeq, + Integer piSeq, + Integer versionNo) { + PartInfoFile downloadFile = null; + + downloadFile = fipTargetService.selectPartInfoFileDown(fileSeq, piSeq,versionNo); + + + BufferedInputStream in; + BufferedOutputStream out; + try { + File file = new File(downloadFile.getFilePath(), downloadFile.getConvNm()); + + setDisposition(downloadFile.getOrigNm()+'.'+downloadFile.getFileExtn(), request, response); + in = new BufferedInputStream(new FileInputStream(file)); + out = new BufferedOutputStream(response.getOutputStream()); + FileCopyUtils.copy(in, out); + out.flush(); + if(out!=null) out.close(); + if(in!=null )in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + 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"); + } + } + + 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"; + } //외사분실 운영현황 끝 diff --git a/src/main/java/com/dbnt/faisp/fipTarget/mapper/FipTargetMapper.java b/src/main/java/com/dbnt/faisp/fipTarget/mapper/FipTargetMapper.java index be4b58ca..c1fca3e9 100644 --- a/src/main/java/com/dbnt/faisp/fipTarget/mapper/FipTargetMapper.java +++ b/src/main/java/com/dbnt/faisp/fipTarget/mapper/FipTargetMapper.java @@ -29,6 +29,8 @@ public interface FipTargetMapper { List selectPartInfoFileHistoryView(PartInfo partInfo); + String selectPartInfoFirstId(Integer piSeq); + diff --git a/src/main/java/com/dbnt/faisp/fipTarget/service/FipTargetService.java b/src/main/java/com/dbnt/faisp/fipTarget/service/FipTargetService.java index ccb0d6df..5920e9fe 100644 --- a/src/main/java/com/dbnt/faisp/fipTarget/service/FipTargetService.java +++ b/src/main/java/com/dbnt/faisp/fipTarget/service/FipTargetService.java @@ -3,6 +3,7 @@ package com.dbnt.faisp.fipTarget.service; import com.dbnt.faisp.config.BaseService; +import com.dbnt.faisp.config.FileInfo; import com.dbnt.faisp.equip.model.Equip; import com.dbnt.faisp.equip.model.Equip.EquipId; import com.dbnt.faisp.fipTarget.mapper.FipTargetMapper; @@ -135,8 +136,7 @@ public class FipTargetService extends BaseService { partTmp.setWrtUserSeq(partInfo.getWrtUserSeq()); partTmp.setWrtNm(partInfo.getWrtNm()); partTmp.setWrtPart(partInfo.getWrtPart()); - //첫번째 작성자 관서그대로입력 - partTmp.setWrtOrgan(dbPart.getWrtOrgan()); + partTmp.setWrtOrgan(partInfo.getWrtOrgan()); partTmp.setWrtDt(partInfo.getWrtDt()); partInfoRepository.save(partTmp); //업데이트하는 버전 파일조회 @@ -198,6 +198,14 @@ public class FipTargetService extends BaseService { partInfoRepository.deleteByPiSeq(partInfo.getPiSeq()); } + + public PartInfoFile selectPartInfoFileDown(Integer fileSeq, Integer piSeq, Integer versionNo) { + return partInfoFileRepository.findById(new PartInfoFileId(fileSeq, piSeq,versionNo)).orElse(null); + } + + public String selectPartInfoFirstId(PartInfo partInfo) { + return fipTargetMapper.selectPartInfoFirstId(partInfo.getPiSeq()); + } diff --git a/src/main/java/com/dbnt/faisp/util/Utils.java b/src/main/java/com/dbnt/faisp/util/Utils.java index 526f4aec..dfbc54cf 100644 --- a/src/main/java/com/dbnt/faisp/util/Utils.java +++ b/src/main/java/com/dbnt/faisp/util/Utils.java @@ -422,13 +422,13 @@ public class Utils { Row row = sheet.createRow(i+3); rowData.set("mgt_organ", partInfoList.get(i).getMgtOrgan()); rowData.set("land_police", partInfoList.get(i).getLandPolice()); + rowData.set("terminal_nm", partInfoList.get(i).getTerminalNm()); rowData.set("mp_work_type", partInfoList.get(i).getMpWorkType()); rowData.set("mp_people_cnt", partInfoList.get(i).getMpPeopleCnt()); rowData.set("mp_description", partInfoList.get(i).getMpDescription()); rowData.set("pl_work_type", partInfoList.get(i).getPlWorkType()); rowData.set("pl_people_cnt", partInfoList.get(i).getPlPeopleCnt()); rowData.set("pl_description", partInfoList.get(i).getPlDescription()); - rowData.set("terminal_nm", partInfoList.get(i).getTerminalNm()); rowData.set("pi_manager_name", partInfoList.get(i).getPiManagerName()); if(partInfoList.get(i).getRentType().equals("Y")) { rowData.set("rent_price", partInfoList.get(i).getRentPrice().toString()+"만"); @@ -482,9 +482,10 @@ public class Utils { } sheet.addMergedRegion(new CellRangeAddress(0,2,0,0)); sheet.addMergedRegion(new CellRangeAddress(0,2,1,1)); - sheet.addMergedRegion(new CellRangeAddress(0,0,2,4)); - sheet.addMergedRegion(new CellRangeAddress(0,0,5,7)); - sheet.addMergedRegion(new CellRangeAddress(0,1,8,12)); + sheet.addMergedRegion(new CellRangeAddress(0,2,2,2)); + sheet.addMergedRegion(new CellRangeAddress(0,0,3,5)); + sheet.addMergedRegion(new CellRangeAddress(0,0,6,8)); + sheet.addMergedRegion(new CellRangeAddress(0,1,9,12)); //엑셀이름 한글깨짐방지 String outputFileName = new String(excelFileName.getBytes("KSC5601"), "8859_1"); diff --git a/src/main/resources/mybatisMapper/FipTarget.xml b/src/main/resources/mybatisMapper/FipTarget.xml index 29933625..edecec2c 100644 --- a/src/main/resources/mybatisMapper/FipTarget.xml +++ b/src/main/resources/mybatisMapper/FipTarget.xml @@ -40,7 +40,7 @@ from part_info group by pi_seq) b where pi.pi_seq = b.pi_seq and pi.version_no = b.lastVer - and wrt_organ in + and mgt_organ in #{item} @@ -93,7 +93,7 @@ from part_info group by pi_seq) b where pi.pi_seq = b.pi_seq and pi.version_no = b.lastVer - and wrt_organ in + and mgt_organ in #{item} @@ -186,7 +186,7 @@ from part_info group by pi_seq) b where pi.pi_seq = b.pi_seq and pi.version_no = b.lastVer - and wrt_organ in + and mgt_organ in #{item} @@ -311,5 +311,13 @@ where pi_seq = #{piSeq} and version_no = #{versionNo} + + \ No newline at end of file diff --git a/src/main/resources/static/js/common.js b/src/main/resources/static/js/common.js index 8bb6e6d0..1097ca25 100644 --- a/src/main/resources/static/js/common.js +++ b/src/main/resources/static/js/common.js @@ -109,7 +109,9 @@ function setUploadDiv(){ } }).on('click', function (e){ if(e.target.className.indexOf("ileDelete")<0){ - $("#fileInputer").click(); + if( e.target.className.indexOf("artInfo")<0){ + $("#fileInputer").click(); + } } }); } diff --git a/src/main/resources/static/js/fipTarget/partInfo.js b/src/main/resources/static/js/fipTarget/partInfo.js index 5c6eceb9..668ed3dc 100644 --- a/src/main/resources/static/js/fipTarget/partInfo.js +++ b/src/main/resources/static/js/fipTarget/partInfo.js @@ -93,6 +93,11 @@ $(document).on('click', '#savePartInfo', function (){ $('#piUserSeq').focus(); return false; } + if($('#terminalNm').val() == ''){ + alert('터미널명을 입력해주세요'); + $('#terminalNm').focus(); + return false; + } if($('#mpWorkType').val() != ''){ if($('#mpPeopleCnt').val() == ''){ alert('해경 인원수를 입력해주세요'); @@ -223,6 +228,11 @@ $(document).on('click', '#updatePartInfo', function (){ $('#mPiUserSeq').focus(); return false; } + if($('#mTerminalNm').val() == ''){ + alert('터미널명을 입력해주세요'); + $('#mTerminalNm').focus(); + return false; + } if($('#mMpWorkType').val() != ''){ if($('#mMpPeopleCnt').val() == ''){ alert('해경 인원수를 입력해주세요'); @@ -370,4 +380,22 @@ $(document).on('click', '#deletePartInfo', function (){ } }) +$(document).on('click', '.fileDownPartInfo', function (){ + const target = $(this) + let url = "/target/partInfoFileDownload?" + url += "&fileSeq="+target.attr("data-fileSeq"); + url += "&piSeq="+target.attr("data-piSeq"); + url += "&versionNo="+target.attr("data-verNo"); + window.open(encodeURI(url)); +}) + +$(document).on('click', '#closeModal', function (){ + location.reload(); +}) + +$(document).on('click', '#btn-close', function (){ + location.reload(); +}) + + diff --git a/src/main/resources/templates/fipTarget/partInfoEditModal.html b/src/main/resources/templates/fipTarget/partInfoEditModal.html index 2071773e..1305e7d8 100644 --- a/src/main/resources/templates/fipTarget/partInfoEditModal.html +++ b/src/main/resources/templates/fipTarget/partInfoEditModal.html @@ -34,6 +34,12 @@ +
+ +
+ +
+


해경
@@ -75,13 +81,7 @@
-

-
- -
- -
-
+

@@ -122,7 +122,7 @@
diff --git a/src/main/resources/templates/fipTarget/partInfoHistory.html b/src/main/resources/templates/fipTarget/partInfoHistory.html index a193cd7c..8fed6b46 100644 --- a/src/main/resources/templates/fipTarget/partInfoHistory.html +++ b/src/main/resources/templates/fipTarget/partInfoHistory.html @@ -68,6 +68,12 @@
+
+ +
+ +
+

해경
@@ -106,12 +112,6 @@

-
- -
- -
-
@@ -140,7 +140,7 @@
diff --git a/src/main/resources/templates/fipTarget/partInfoList.html b/src/main/resources/templates/fipTarget/partInfoList.html index c104250a..c165479d 100644 --- a/src/main/resources/templates/fipTarget/partInfoList.html +++ b/src/main/resources/templates/fipTarget/partInfoList.html @@ -90,9 +90,9 @@ 해경서 육경서 - 해경 - 육경 터미널명 + 해경 + 육경 담당자 임차료 공공요금 @@ -132,13 +132,13 @@ + - - + 무상 @@ -175,7 +175,7 @@
- +
diff --git a/src/main/resources/templates/fipTarget/partInfoModifyModal.html b/src/main/resources/templates/fipTarget/partInfoModifyModal.html index 7440b689..fb964fcf 100644 --- a/src/main/resources/templates/fipTarget/partInfoModifyModal.html +++ b/src/main/resources/templates/fipTarget/partInfoModifyModal.html @@ -47,6 +47,12 @@ +
+ +
+ +
+


해경
@@ -89,12 +95,6 @@


-
- -
- -
-
@@ -131,6 +131,7 @@ @@ -143,9 +144,9 @@
\ No newline at end of file