• Y
  • List All
  • Feedback
    • This Project
    • All Projects
Profile Account settings Log out
  • Favorite
  • Project
  • All
Loading...
  • Log in
  • Sign up
chominsoo4245 / mjon_git star
Forked from hylee / mjon_git
  • Project homeH
  • CodeC
  • IssueI
  • Pull requestP
  • Review R
  • MilestoneM
  • BoardB
  • Files
  • Commit
  • Branches
mjon_gitsrcmainjavaitncomcmmutilFaxUtil.java
Download as .zip file
File name
Commit message
Commit date
DATABASE
mjon_git
2023-06-12
src/main
Merge branch 'hylee' into advc
2024-07-05
.codetogether.ignore
mjon_git
2023-06-12
.gitignore
gitignore 적용
2023-06-12
pom.xml
플러그인 추가 원복
2024-02-16
File name
Commit message
Commit date
java
[사용자] 결제관리 > 요금 결제내역 ==> 조회에 대한 기건설정 필수값으로 변경
2024-07-05
resources
2024-06-12 관리자 로그인 검색 쿼리 수정
2024-06-12
webapp
Merge branch 'hylee' into advc
2024-07-05
File name
Commit message
Commit date
egovframework
mjon_git
2023-06-12
itn
[사용자] 결제관리 > 요금 결제내역 ==> 조회에 대한 기건설정 필수값으로 변경
2024-07-05
File name
Commit message
Commit date
com
[사용자] 결제관리 > 요금 결제내역 ==> 조회에 대한 기건설정 필수값으로 변경
2024-07-05
let
[사용자] 결제관리 > 요금 결제내역 ==> 조회에 대한 기건설정 필수값으로 변경
2024-07-05
web
메인메뉴 및 사이트맵에서 선거 후보자 정보가 없는 경우 선거문자 메뉴가 안보이도록 처리
2024-02-08
File name
Commit message
Commit date
api/web
mjon_git
2023-06-12
cmm
[사용자] 결제관리 > 요금 결제내역 ==> 조회에 대한 기건설정 필수값으로 변경
2024-07-05
sym/log/ulg
mjon_git
2023-06-12
usr/search/web
mjon_git
2023-06-12
uss
IP 차단 관련 오류 확인전
2024-04-09
utl
mjon_git
2023-06-12
File name
Commit message
Commit date
aspect
mjon_git
2023-06-12
captcha
mjon_git
2023-06-12
filter
mjon_git
2023-06-12
interceptor
알림톡 발송내용 필터검사 하지 않도록 추가
2024-06-10
service
mjon_git
2023-06-12
taglibs
mjon_git
2023-06-12
util
[사용자] 결제관리 > 요금 결제내역 ==> 조회에 대한 기건설정 필수값으로 변경
2024-07-05
web
첨부파일 다운로드시 원본 파일명에 "," 가 포함된 경우 "_"로 변환하여 다운로드 되도록 변경 - 관리자 파일 다운로드시 오류가 발생하여 변경 처리 함.
2023-10-11
AltibaseClobStringTypeHandler.java
mjon_git
2023-06-12
ComDefaultCodeVO.java
mjon_git
2023-06-12
ComDefaultVO.java
mjon_git
2023-06-12
EgovComCrossSiteHndlr.java
mjon_git
2023-06-12
EgovComExcepHndlr.java
mjon_git
2023-06-12
EgovComOthersExcepHndlr.java
mjon_git
2023-06-12
EgovComTraceHandler.java
mjon_git
2023-06-12
EgovMessageSource.java
mjon_git
2023-06-12
EgovMultiPartEmail.java
mjon_git
2023-06-12
EgovWebUtil.java
mjon_git
2023-06-12
ImagePaginationRenderer.java
mjon_git
2023-06-12
ImagePaginationRendererWeb.java
mjon_git
2023-06-12
JsonResult.java
mjon_git
2023-06-12
LoginVO.java
선거문자 비로그인시 발신번호 조회가 안되도록 수정
2023-07-27
ReadVO.java
mjon_git
2023-06-12
SessionVO.java
mjon_git
2023-06-12
UserVO.java
mjon_git
2023-06-12
File name
Commit message
Commit date
ContextUtil.java
mjon_git
2023-06-12
Criteria.java
mjon_git
2023-06-12
DateUtil.java
[사용자] 결제관리 > 요금 결제내역 ==> 조회에 대한 기건설정 필수값으로 변경
2024-07-05
EgovBasicLogger.java
mjon_git
2023-06-12
EgovDoubleSubmitHelper.java
mjon_git
2023-06-12
EgovResourceCloseHelper.java
mjon_git
2023-06-12
ExcelDownloadUtil.java
mjon_git
2023-06-12
ExcelUploadUtil.java
mjon_git
2023-06-12
FaxUtil.java
mjon_git
2023-06-12
FileUtil.java
mjon_git
2023-06-12
IpUtil.java
이준호 문자온 커밋 - IP 받아오는 방식 수정
2023-07-28
MJUtil.java
관리자 문자전송 리스트 기본 검색 기간 변경 - 기본 검색 시작일자 한달전에서 하루전으로 변경
2024-01-26
Order.java
mjon_git
2023-06-12
OsProcessCheckUtil.java
mjon_git
2023-06-12
PdfUtil.java
파일경로 수정
2023-08-03
RedirectUrlMaker.java
mjon_git
2023-06-12
StringUtil.java
문자전송, 선거문자 하단 문자샘플, 그림샘플, 내문자함 검색어 입력 특수문자 입력 금지 기능 추가 - 기존 헤더부분 통합검색에만 적용되었던 기능을 확대 적용하였음.
2023-07-03
StringUtil2.java
mjon_git
2023-06-12
TokenUtil.java
mjon_git
2023-06-12
WebUtil.java
mjon_git
2023-06-12
XssFilterUtil.java
join 앞뒤 공백 처리
2024-04-01
hylee 2023-06-12 9347f1d mjon_git UNIX
Raw Open in browser Change history
package itn.com.cmm.util; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import itn.com.cmm.JsonResult; import itn.let.fax.user.service.FaxGroupDataVO; import itn.let.mjo.msgdata.service.PhoneVO; /** * * @author : 이호영 * @fileName : FaxUtil.java * @date : 2023.03.20 * @description : 팩스 관련 Util * =========================================================== * DATE AUTHOR NOTE * ----------------------------------------------------------- * * 2023.03.20 이호영 최초 생성 * * * */ public final class FaxUtil { public static HttpServletResponse getResponse() { ServletRequestAttributes attr = (ServletRequestAttributes)RequestContextHolder.currentRequestAttributes(); return attr.getResponse(); } /** * @methodName : checkHpNum * @author : 이호영 * @date : 2023.03.20 * @description : * @param faxConvertFilePath * @param seq * @return */ public static String makeDownloadPath(String faxConvertFilePath, String seq) { return faxConvertFilePath + "/" + seq + ".pdf"; } /** * @methodName : exelFileConvertForFax * @author : 이준호 * @date : 2023.05.08 * @description : * @param multiRequest * @return */ public static JsonResult exelFileConvertForFax(MultipartHttpServletRequest multiRequest) { JsonResult jr = new JsonResult(); jr.setSuccess(false); jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); //final Map<String, MultipartFile> files = multiRequest.getFileMap(); List<MultipartFile> files = (List<MultipartFile>) multiRequest.getFiles("file0"); // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx int fileNameSplitCnt = 0; if(!files.isEmpty()) { fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length; if (files.get(0).getSize() > 0 && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) || files.get(0).getContentType().indexOf("ms-excel") > -1 || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1 || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) { // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 long fileSize = multiRequest.getFile("file0").getSize(); if(fileSize > 3374653) { jr.setMessage("엑셀 파일은 3MB를 넘을수 없습니다."); return jr; } String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; String errMessage = ""; String cellValue = ""; // String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; int errPhoneCnt = 0; int errNameCnt = 0; try { //엑셀 확장자에 따른 처리 로직 분리 if(Ext.equals("xls")) { HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); HSSFSheet sheet = workbook.getSheetAt(0); if(sheet.getLastRowNum() > 20000) { // errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; jr.setSuccess(false); jr.setMessage(errMessage); return jr; } List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>(); PhoneVO pVO = new PhoneVO(); for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) HSSFRow row = sheet.getRow(i); //열읽기 if(null == row) { continue; } HashMap<String, String> jm = new HashMap<>(); // 행의 두번째 열(이름부터 받아오기) HSSFCell cell = null; boolean errSts = true; for(int j = 0 ; j < 2; j++){ //행읽기(6행까지나 2행까지만 필요) cellValue = ""; cell = row.getCell(j); //이름/수신번호 if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 //System.out.println("Cell 데이터가 없습니다."); if(j == 1) { if (sheet.getLastRowNum() == i) { continue; } break; } } if(null != cell){ switch(cell.getCellType()){ //숫자타임을 문자로 변환 case Cell.CELL_TYPE_NUMERIC: cell.setCellType(Cell.CELL_TYPE_STRING); } cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; } if(j == 0) { //이름 boolean nmChk = getNameRepLenChk("name", cellValue); if(nmChk && errSts) { jm.put("name", cellValue); }else { errNameCnt++; errSts = false; break; } } if(j == 1) { //전화번호 if(errSts) { jm.put("phone", cellValue); }else { errPhoneCnt++; errSts = false; break; } } } if(null != jm.get("phone") && errSts) { json.add(jm); } } int resultErrCnt = errPhoneCnt + errNameCnt; int resultErrCntExceptPhone = errPhoneCnt + errNameCnt; jr.setData(json); jr.setSuccess(true); if(resultErrCnt > 0) { jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건,\n이름 : 20byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건 있습니다.\n해당 건을 제외하고 추가됩니다."); }else { jr.setMessage(""); } }else { //확장자가 xlsx OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 opcPackage.close(); if(sheet.getLastRowNum() > 20000) { // errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; jr.setSuccess(false); jr.setMessage(errMessage); return jr; } List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>(); PhoneVO pVO = new PhoneVO(); for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) XSSFRow row = sheet.getRow(i); //열읽기 if(null == row) { continue; } HashMap<String, String> jm = new HashMap<>(); // 행의 두번째 열(이름부터 받아오기) XSSFCell cell = null; boolean errSts = true; for(int j = 0 ; j < 2; j++){ //행읽기(6행까지나 2행까지만 필요) cellValue = ""; cell = row.getCell(j); //이름/수신번호 if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 if(j == 1) { if (sheet.getLastRowNum() == i) { continue; } break; } } if(null != cell){ switch(cell.getCellType()){ //숫자타임을 문자로 변환 case Cell.CELL_TYPE_NUMERIC: cell.setCellType(Cell.CELL_TYPE_STRING); } cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; } if(j == 0) { //이름 boolean nmChk = getNameRepLenChk("name", cellValue); if(nmChk && errSts) { jm.put("name", cellValue); }else { errNameCnt++; errSts = false; break; } } if(j == 1) { //수신번호 if(errSts) { jm.put("phone", cellValue); }else { errPhoneCnt++; errSts = false; break; } } } if(null != jm.get("phone") && errSts) { json.add(jm); } } int resultErrCnt = errPhoneCnt + errNameCnt; int resultErrCntExceptPhone = errPhoneCnt + errNameCnt; jr.setData(json); jr.setSuccess(true); if(resultErrCnt > 0) { jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건,\n이름 : 20byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건 있습니다.\n해당 건을 제외하고 추가됩니다."); }else { jr.setMessage(""); } } //xlsx 처리 끝 } catch (Exception e) { jr.setMessage("처리 중 오류가 발생했습니다. 관리자에게 문의하세요."); } } } return jr; } public static void getExcelForFaxSendList(List<FaxGroupDataVO> faxGroupListVO) { HttpServletResponse response =ContextUtil.getResponse(); // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. SXSSFWorkbook wb = new SXSSFWorkbook(); String fileName ="팩스 발송 내역"; // 저장 파일명 String sheetTitle = "팩스 발송 내역" ; // 셀 제목 Sheet sheet = wb.createSheet(sheetTitle); Cell cell = null; Row row = null; CellStyle style = wb.createCellStyle(); style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 style.setBorderLeft(CellStyle.BORDER_THIN); style.setBorderRight(CellStyle.BORDER_THIN); style.setBorderTop(CellStyle.BORDER_THIN); // 정렬 style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 Font font = wb.createFont(); font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold try{ //발송 성공,실패 건수 불러오기 row = sheet.createRow(0); sheet.setColumnWidth(1, 7000); // 발송형태 칼럼의 폭 조절 sheet.setColumnWidth(2, 5000); // 접수일자 칼럼의 폭 조절 //셀병합 처리 sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //발송상태 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //접수일자 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //예약일자 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //형태 세로 셀병합 cell = row.createCell(0); cell.setCellValue("번호"); cell.setCellStyle(style); cell = row.createCell(1); cell.setCellValue("제목"); cell.setCellStyle(style); cell = row.createCell(2); cell.setCellValue("전송시간"); cell.setCellStyle(style); cell = row.createCell(3); cell.setCellValue("문서 매수"); cell.setCellStyle(style); cell = row.createCell(4); cell.setCellValue("발송 건수"); cell.setCellStyle(style); cell = row.createCell(5); cell.setCellValue("발송결과 건수"); sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); // 발송결과 건수 가로 셀병합 cell.setCellStyle(style); cell = row.createCell(6); cell.setCellStyle(style); row = sheet.createRow(1); cell = row.createCell(0); cell.setCellStyle(style); cell = row.createCell(1); cell.setCellStyle(style); cell = row.createCell(2); cell.setCellStyle(style); cell = row.createCell(3); cell.setCellStyle(style); cell = row.createCell(4); cell.setCellStyle(style); cell = row.createCell(5); cell.setCellValue("성공"); cell.setCellStyle(style); cell = row.createCell(6); cell.setCellValue("실패"); cell.setCellStyle(style); int rowNum = 2; for(FaxGroupDataVO faxGroupDataVO : faxGroupListVO) { row = sheet.createRow(rowNum); cell = row.createCell(0); cell.setCellStyle(style); cell.setCellValue(rowNum-1); cell = row.createCell(1); cell.setCellStyle(style); cell.setCellValue(faxGroupDataVO.getSubject()); cell = row.createCell(2); cell.setCellStyle(style); cell.setCellValue(faxGroupDataVO.getDoneDate()); cell = row.createCell(3); cell.setCellStyle(style); cell.setCellValue(faxGroupDataVO.getPage()); cell = row.createCell(4); cell.setCellStyle(style); cell.setCellValue(faxGroupDataVO.getTotalEa()); cell = row.createCell(5); cell.setCellStyle(style); cell.setCellValue(faxGroupDataVO.getSentEa()); cell = row.createCell(6); cell.setCellStyle(style); cell.setCellValue(faxGroupDataVO.getHoldEa()+faxGroupDataVO.getUnSendEa()+faxGroupDataVO.getErrorEa()); rowNum++; } response.setHeader("Set-Cookie", "fileDownload=true; path=/"); SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA ); Date currentTime = new Date (); String mTime = mSimpleDateFormat.format ( currentTime ); fileName = fileName+"("+mTime+")"; response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); wb.write(response.getOutputStream()); }catch(Exception e) { response.setHeader("Set-Cookie", "fileDownload=false; path=/"); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Content-Type","text/html; charset=utf-8"); OutputStream out = null; try { out = response.getOutputStream(); byte[] data = new String("fail..").getBytes(); out.write(data, 0, data.length); } catch(Exception ignore) { ignore.printStackTrace(); } finally { if(out != null) try { out.close(); } catch(Exception ignore) {} } }finally { // 디스크 적었던 임시파일을 제거합니다. wb.dispose(); try { wb.close(); } catch(Exception ignore) {} } } /*==================================================================== = private function zone = ====================================================================*/ // 팩스 엑셀 업로드 이름 길이 체크 private static boolean getNameRepLenChk(String type, String value) { boolean rtnValue = true; if(type.equals("name")) { String tmpNm = value; int nmLen = tmpNm.length(); if(nmLen > 12) { rtnValue = false; } }else if(type.equals("rep")) { String tmpRep = value; int repLen = tmpRep.length(); if(repLen > 20) { rtnValue = false; } } return rtnValue; } }

          
        
    
    
Copyright Yona authors & © NAVER Corp. & NAVER LABS Supported by NAVER CLOUD PLATFORM

or
Sign in with github login with Google Sign in with Google
Reset password | Sign up