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.model.PartWork; import com.dbnt.faisp.fipTarget.model.PartWorkFile; import com.dbnt.faisp.fipTarget.service.FipTargetService; import com.dbnt.faisp.organMgt.service.OrganConfigService; 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.util.FileCopyUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; @RestController @RequiredArgsConstructor @RequestMapping("/target") public class FipTargetController { private final OrganConfigService organConfigService; private final AuthMgtService authMgtService; private final FipTargetService fipTargetService; // 외사분실운영현황 시작 @GetMapping("/partInfoList") public ModelAndView partInfoList(@AuthenticationPrincipal UserInfo loginUser,PartInfo partInfo, HttpServletResponse response) { ModelAndView mav = new ModelAndView("fipTarget/partInfoList"); partInfo.setDownOrganCdList(loginUser.getDownOrganCdList()); //엑셀다운 if(partInfo.getExcel() != null && partInfo.getExcel().equals("Y")){ ParamMap header = fipTargetService.selectWorkTypeTotal(partInfo); 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")+"명" ,"비상주 "+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명", "", "", "", "" }; } 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); try { Utils.partInfolistToExcel(partInfoList, response, headers, headerNames,headerNames2,headerNames3, columnType, sheetName, excelFileName); } catch (IOException e) { } return null; } //메뉴권한 확인 String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/partInfoList").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); partInfo.setQueryInfo(); mav.addObject("total", fipTargetService.selectWorkTypeTotal(partInfo)); mav.addObject("partInfoList", fipTargetService.selectPartInfoList(partInfo)); partInfo.setContentCnt(fipTargetService.selectPartInfoListCnt(partInfo)); partInfo.setPaginationInfo(); mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); mav.addObject("searchParams", partInfo); return mav; } @GetMapping("/partInfoEditModal") public ModelAndView partInfoEditModal(@AuthenticationPrincipal UserInfo loginUser,PartInfo partInfo) { ModelAndView mav = new ModelAndView("fipTarget/partInfoEditModal"); //메뉴권한 확인 String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/partInfoList").get(0).getAccessAuth(); mav.addObject("userOrgan", loginUser.getOgCd()); mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); mav.addObject("accessAuth", accessAuth); return mav; } @GetMapping("/partInfoSelecBox") public ModelAndView equipTypeSelecBox(String ogCd) { ModelAndView mav = new ModelAndView("fipTarget/partInfoSelecBox"); ParamMap param = new ParamMap(); param.put("downOrganCdList", organConfigService.selectDownOrganListWhereUserOgCd(ogCd)); mav.addObject("managerList", fipTargetService.selectPartInfoManagerList(param)); return mav; } @PostMapping("/savePartInfo") public void savePartInfo (@AuthenticationPrincipal UserInfo loginUser, PartInfo partInfo,MultipartHttpServletRequest request){ partInfo.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); partInfo.setWrtNm(loginUser.getUserId()); partInfo.setWrtPart(loginUser.getOfcCd()); partInfo.setWrtUserSeq(loginUser.getUserSeq()); partInfo.setWrtOrgan(loginUser.getOgCd()); partInfo.setWrtDt(LocalDateTime.now()); fipTargetService.savePartInfo(partInfo); } @GetMapping("/updatePartInfoPage") public ModelAndView updatePartInfoPage(@AuthenticationPrincipal UserInfo loginUser,PartInfo partInfo) { ModelAndView mav = new ModelAndView("fipTarget/partInfoModifyModal"); mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); PartInfo partInfoView = fipTargetService.selectPartInfo(partInfo); ParamMap param = new ParamMap(); param.put("downOrganCdList", organConfigService.selectDownOrganListWhereUserOgCd(partInfoView.getMgtOrgan())); 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; } @PostMapping("/updatePartInfo") public int updatePartInfo (@AuthenticationPrincipal UserInfo loginUser,PartInfo partInfo, MultipartHttpServletRequest request, @RequestParam(value = "fileSeq", required = false) List < Integer > deleteFileSeq){ 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); return partInfo.getPiSeq(); } @GetMapping("/PartInfoHistoryPage") public ModelAndView PartInfoHistoryPage(PartInfo partInfo) { ModelAndView mav = new ModelAndView("fipTarget/partInfoHistory"); mav.addObject("partInfoList", fipTargetService.selectPartInfoSeq(partInfo)); return mav; } @GetMapping("/partInfoHistoryView") @ResponseBody public PartInfo partInfoHistoryView(PartInfo partInfo){ PartInfo partInfoHistory = fipTargetService.selectPartInfoHistoryView(partInfo); partInfoHistory.setFileList(fipTargetService.selectPartInfoFileHistoryView(partInfo)); return partInfoHistory; } @PostMapping("/deletePartInfo") @ResponseBody public void deletePartInfo(@RequestBody PartInfo partInfo) { fipTargetService.deletePartInfo(partInfo); } @GetMapping("/partInfoFileDownload") public void partInfoFileDownload(HttpServletRequest request, HttpServletResponse response, Integer fileSeq, Integer piSeq, Integer versionNo) { PartInfoFile 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"; } //외사분실 운영현황 끝 //외사분실실적 시작 @GetMapping("/partWorkList") public ModelAndView partWorkList(@AuthenticationPrincipal UserInfo loginUser,PartWork partWork, HttpServletResponse response) { ModelAndView mav = new ModelAndView("fipTarget/partWorkList"); partWork.setDownOrganCdList(loginUser.getDownOrganCdList()); //엑셀다운 if(partWork.getExcel() != null && partWork.getExcel().equals("Y")){ String[] headers = { "terminal_nm", "wrt_nm", "work_dt", "work_type_ch", "work_type_poci", "work_type_sri", "work_type_ji", "work_type_mt", "work_type_etc", "description", "file_cnt","wrt_dt"}; String[] headerNames = { "외사 터미널명", "작성자","일시", "종류", "", "", "", "", "", "비고", "첨부파일", "최근수정일"}; String[] headerNames2 = { "", "","", "사건처리", "범죄첩보제공", "SRI", "합동점검", "회의", "기타", "", "", ""}; String[] columnType = { "String", "String","String", "String", "String", "String", "String", "String", "String", "String", "String","String"}; String sheetName = "외사분실 실적"; String excelFileName = "외사분실 실적"; List partWorkList= fipTargetService.selectPartWorkList(partWork); try { Utils.partWorkListToExcel(partWorkList, response, headers, headerNames,headerNames2, columnType, sheetName, excelFileName); } catch (IOException e) { } return null; } //메뉴권한 확인 String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/partWorkList").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); partWork.setQueryInfo(); mav.addObject("partWorkList", fipTargetService.selectPartWorkList(partWork)); partWork.setContentCnt(fipTargetService.selectPartWorkListCnt(partWork)); partWork.setPaginationInfo(); mav.addObject("uesrId", loginUser.getUserId()); mav.addObject("searchParams", partWork); return mav; } @GetMapping("/partWorkEditModal") public ModelAndView partWorkEditModal(@AuthenticationPrincipal UserInfo loginUser,PartWork partWork) { ModelAndView mav = new ModelAndView("fipTarget/partWorkEditModal"); partWork.setDownOrganCdList(loginUser.getDownOrganCdList()); //메뉴권한 확인 String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/partWorkList").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); mav.addObject("tnList", fipTargetService.selectTerminalName(partWork)); return mav; } @PostMapping("/savePartWork") public void savePartWork (@AuthenticationPrincipal UserInfo loginUser, PartWork partWork,MultipartHttpServletRequest request){ partWork.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); partWork.setWrtNm(loginUser.getUserId()); partWork.setWrtPart(loginUser.getOfcCd()); partWork.setWrtUserSeq(loginUser.getUserSeq()); partWork.setWrtOrgan(loginUser.getOgCd()); partWork.setWrtDt(LocalDateTime.now()); fipTargetService.savePartWork(partWork); } @GetMapping("/partWorkView") public ModelAndView partWorkView(@AuthenticationPrincipal UserInfo loginUser,PartWork partWork) { ModelAndView mav = new ModelAndView("fipTarget/partWorkModifyModal"); partWork.setDownOrganCdList(loginUser.getDownOrganCdList()); PartWork partWorkView = fipTargetService.selectPartWorkInfo(partWork); partWorkView.setFileList(fipTargetService.selectPartWorkFile(partWork)); mav.addObject("pwInfo", partWorkView); //메뉴권한 확인 String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/partInfoList").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); mav.addObject("userId", loginUser.getUserId()); return mav; } @PostMapping("/updatePartWork") public PartWork updatePartWork (@AuthenticationPrincipal UserInfo loginUser, PartWork partWork, MultipartHttpServletRequest request, @RequestParam(value = "fileSeq", required = false) List < Integer > deleteFileSeq){ partWork.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); partWork.setWrtDt(LocalDateTime.now()); fipTargetService.updatePartWork(partWork,deleteFileSeq); return partWork; } @PostMapping("/deletePartWork") @ResponseBody public void deletePartWork(@RequestBody PartWork partWork) { fipTargetService.deletePartWork(partWork); } @GetMapping("/partWorkFileDownload") public void partWorkFileDownload(HttpServletRequest request, HttpServletResponse response, Integer fileSeq, Integer pwSeq, Integer piSeq) { PartWorkFile downloadFile = fipTargetService.selectPartWorkFileDown(fileSeq, pwSeq,piSeq); 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(); } } //외사분실실적 끝 }