package com.dbnt.faisp.util; import java.io.IOException; import java.io.PrintWriter; import java.text.DecimalFormat; import java.time.format.DateTimeFormatter; import java.util.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.dbnt.faisp.main.codeMgt.model.CodeMgt; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.IndexedColors; 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.usermodel.XSSFDataFormat; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.dbnt.faisp.main.equip.model.CellPhone; import com.dbnt.faisp.main.equip.model.UseList; import com.dbnt.faisp.main.fipTarget.model.PartInfo; import com.dbnt.faisp.main.fipTarget.model.PartWork; import com.dbnt.faisp.main.userInfo.model.UserInfo; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; public class Utils { public static boolean isEmpty(final Object obj) { return !isNotEmpty(obj); } public static boolean isNotEmpty(final Object obj) { if(null == obj) return false; else { if(obj instanceof String) return "".equals(obj) ? false : true; else if(obj instanceof List) return !((List)obj).isEmpty(); else if(obj instanceof Map) return !((Map)obj).isEmpty(); // else if(obj instanceof Object[]) return 0 == Array.getLength(obj) ? false : true; else if(obj instanceof Integer) return !(null == obj); else if(obj instanceof Long) return !(null == obj); else return false; } } public static String getTimeStampString(final String format) { return getTimeStampString(new Date(), format); } public static String getTimeStampString(final Date date) { return getTimeStampString(date, "yyyyMMddHHmmss"); } public static String getTimeStampString(final Date date, final String format){ java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat (format, java.util.Locale.KOREA); return formatter.format(date); } public static String getTimeStampString(String date, final String format) { try { if(null == date || "".equals(date)) return ""; Date d = null; date= date.replaceAll("-", ""); switch(date.length()) { case 14: break; case 12: date += "00"; break; case 10: date += "0000"; break; case 8: date += "000000"; break; case 6: date += "01000000"; break; case 4: date += "0101000000"; break; default: return ""; } java.text.SimpleDateFormat tmpFormat = new java.text.SimpleDateFormat("yyyyMMddHHmmss", java.util.Locale.KOREA); if("".equals(date)) d = new Date(); else { tmpFormat.setLenient(true); d = tmpFormat.parse(date); } return getTimeStampString(d, format); } catch(Exception e) { e.printStackTrace(); return ""; } } public static String getFileExtention(final String filename) { if(null == filename || "".equals(filename)) return ""; return -1 < filename.lastIndexOf(".") ? filename.substring(filename.lastIndexOf(".") + 1).toLowerCase() : ""; } public static String generationSaveName() { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } return Utils.getTimeStampString("yyyyMMdd_HHmmss_SSS"); } public static void listToExcel(List list, HttpServletResponse response, String[] headers, String[] headerNames, String[] columnType, String sheetName, String excelFileName) throws IOException { if(Utils.isNotEmpty(list)) { // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(sheetName); Row headerRow = sheet.createRow(0); CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식 CellStyle cellStyle2 = wb.createCellStyle(); //숫자양식 CellStyle headerStyle = wb.createCellStyle(); //숫자양식 XSSFDataFormat format = wb.createDataFormat(); cellStyle1.setDataFormat(format.getFormat("#,##0")); cellStyle2.setDataFormat(format.getFormat("#")); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setFillForegroundColor((short)3); headerStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); for(int i=0; i list, HttpServletResponse response, String[] headers, String[] headerNames,String[] headerNames2, String[] columnType, String sheetName, String excelFileName) throws IOException { if(Utils.isNotEmpty(list)) { // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(sheetName); Row headerRow = sheet.createRow(0); Row headerRow2 = sheet.createRow(1); CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식 CellStyle cellStyle2 = wb.createCellStyle(); //숫자양식 CellStyle headerStyle = wb.createCellStyle(); //숫자양식 CellStyle headerStyle2 = wb.createCellStyle(); XSSFDataFormat format = wb.createDataFormat(); cellStyle1.setDataFormat(format.getFormat("#,##0")); cellStyle2.setDataFormat(format.getFormat("#,##0")); cellStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setFillForegroundColor((short)3); headerStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); //로우그리기 for(int i=0; i list, HttpServletResponse response, String[] headers, String[] headerNames,String[] headerNames2, String[] columnType, String sheetName, String excelFileName) throws IOException { if(Utils.isNotEmpty(list)) { // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(sheetName); Row headerRow = sheet.createRow(0); Row headerRow2 = sheet.createRow(1); CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식 CellStyle cellStyle2 = wb.createCellStyle(); //숫자양식 CellStyle headerStyle = wb.createCellStyle(); //숫자양식 CellStyle headerStyle2 = wb.createCellStyle(); CellStyle headerStyle3 = wb.createCellStyle(); XSSFDataFormat format = wb.createDataFormat(); cellStyle1.setDataFormat(format.getFormat("#,##0")); cellStyle2.setDataFormat(format.getFormat("#,##0")); cellStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setBorderTop(BorderStyle.THIN); headerStyle2.setBorderBottom(BorderStyle.THIN); headerStyle2.setBorderLeft(BorderStyle.THIN); headerStyle2.setBorderRight(BorderStyle.THIN); headerStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle2.setFillForegroundColor((short)3); headerStyle2.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setFillForegroundColor((short)3); headerStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle3.setBorderTop(BorderStyle.THIN); headerStyle3.setBorderBottom(BorderStyle.THIN); headerStyle3.setBorderLeft(BorderStyle.THIN); headerStyle3.setBorderRight(BorderStyle.THIN); headerStyle3.setAlignment(HorizontalAlignment.CENTER); headerStyle3.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle3.setFillForegroundColor((short)3); headerStyle3.setFillForegroundColor(IndexedColors.LIME.getIndex()); //로우그리기 for(int i=0; i partInfoList, HttpServletResponse response, String[] headers, String[] headerNames,String[] headerNames2,String[] headerNames3, String[] columnType, String sheetName, String excelFileName) throws IOException { if(Utils.isNotEmpty(partInfoList)) { // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(sheetName); Row headerRow = sheet.createRow(0); Row headerRow2 = sheet.createRow(1); Row headerRow3 = sheet.createRow(2); CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식 CellStyle cellStyle2 = wb.createCellStyle(); //숫자양식 CellStyle headerStyle = wb.createCellStyle(); //숫자양식 CellStyle headerStyle2 = wb.createCellStyle(); CellStyle headerStyle3 = wb.createCellStyle(); XSSFDataFormat format = wb.createDataFormat(); cellStyle1.setAlignment(HorizontalAlignment.CENTER); cellStyle2.setDataFormat(format.getFormat("#,##0")); cellStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setBorderTop(BorderStyle.THIN); headerStyle2.setBorderBottom(BorderStyle.THIN); headerStyle2.setBorderLeft(BorderStyle.THIN); headerStyle2.setBorderRight(BorderStyle.THIN); headerStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle2.setFillForegroundColor((short)3); headerStyle2.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setFillForegroundColor((short)3); headerStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle3.setBorderTop(BorderStyle.THIN); headerStyle3.setBorderBottom(BorderStyle.THIN); headerStyle3.setBorderLeft(BorderStyle.THIN); headerStyle3.setBorderRight(BorderStyle.THIN); headerStyle3.setAlignment(HorizontalAlignment.CENTER); headerStyle3.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle3.setFillForegroundColor((short)3); headerStyle3.setFillForegroundColor(IndexedColors.LIME.getIndex()); //로우그리기 for(int i=0; i partWorkList, List pwtList, HttpServletResponse response, String[] headers, String[] headerNames, String[] headerNames2, String[] columnType, String sheetName, String excelFileName) throws IOException { if(Utils.isNotEmpty(partWorkList)) { // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(sheetName); Row headerRow = sheet.createRow(0); Row headerRow2 = sheet.createRow(1); CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식 CellStyle cellStyle2 = wb.createCellStyle(); //숫자양식 CellStyle headerStyle = wb.createCellStyle(); //숫자양식 CellStyle headerStyle2 = wb.createCellStyle(); CellStyle headerStyle3 = wb.createCellStyle(); XSSFDataFormat format = wb.createDataFormat(); cellStyle1.setAlignment(HorizontalAlignment.CENTER); cellStyle2.setDataFormat(format.getFormat("#,##0")); cellStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setBorderTop(BorderStyle.THIN); headerStyle2.setBorderBottom(BorderStyle.THIN); headerStyle2.setBorderLeft(BorderStyle.THIN); headerStyle2.setBorderRight(BorderStyle.THIN); headerStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle2.setFillForegroundColor((short)3); headerStyle2.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setFillForegroundColor((short)3); headerStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle3.setBorderTop(BorderStyle.THIN); headerStyle3.setBorderBottom(BorderStyle.THIN); headerStyle3.setBorderLeft(BorderStyle.THIN); headerStyle3.setBorderRight(BorderStyle.THIN); headerStyle3.setAlignment(HorizontalAlignment.CENTER); headerStyle3.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle3.setFillForegroundColor((short)3); headerStyle3.setFillForegroundColor(IndexedColors.LIME.getIndex()); //로우그리기 for(int i=0; i cellPhoneList, HttpServletResponse response, String[] headers, String[] headerNames, String[] columnType, String sheetName, String excelFileName) throws IOException { if(Utils.isNotEmpty(cellPhoneList)) { // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(sheetName); Row headerRow = sheet.createRow(0); CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식 CellStyle cellStyle2 = wb.createCellStyle(); //숫자양식 CellStyle headerStyle = wb.createCellStyle(); //숫자양식 CellStyle headerStyle2 = wb.createCellStyle(); CellStyle headerStyle3 = wb.createCellStyle(); XSSFDataFormat format = wb.createDataFormat(); cellStyle1.setAlignment(HorizontalAlignment.CENTER); cellStyle2.setDataFormat(format.getFormat("#,##0")); cellStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setBorderTop(BorderStyle.THIN); headerStyle2.setBorderBottom(BorderStyle.THIN); headerStyle2.setBorderLeft(BorderStyle.THIN); headerStyle2.setBorderRight(BorderStyle.THIN); headerStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle2.setFillForegroundColor((short)3); headerStyle2.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setFillForegroundColor((short)3); headerStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle3.setBorderTop(BorderStyle.THIN); headerStyle3.setBorderBottom(BorderStyle.THIN); headerStyle3.setBorderLeft(BorderStyle.THIN); headerStyle3.setBorderRight(BorderStyle.THIN); headerStyle3.setAlignment(HorizontalAlignment.CENTER); headerStyle3.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle3.setFillForegroundColor((short)3); headerStyle3.setFillForegroundColor(IndexedColors.LIME.getIndex()); //로우그리기 for(int i=0; i useExcelList, HttpServletResponse response, String[] headers, String[] headerNames, String[] columnType, String sheetName, String excelFileName) throws IOException { if(Utils.isNotEmpty(useExcelList)) { // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(sheetName); Row headerRow = sheet.createRow(0); CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식 CellStyle cellStyle2 = wb.createCellStyle(); //숫자양식 CellStyle headerStyle = wb.createCellStyle(); //숫자양식 CellStyle headerStyle2 = wb.createCellStyle(); CellStyle headerStyle3 = wb.createCellStyle(); XSSFDataFormat format = wb.createDataFormat(); cellStyle1.setAlignment(HorizontalAlignment.CENTER); cellStyle2.setDataFormat(format.getFormat("#,##0")); cellStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setBorderTop(BorderStyle.THIN); headerStyle2.setBorderBottom(BorderStyle.THIN); headerStyle2.setBorderLeft(BorderStyle.THIN); headerStyle2.setBorderRight(BorderStyle.THIN); headerStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle2.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle2.setFillForegroundColor((short)3); headerStyle2.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setFillForegroundColor((short)3); headerStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle3.setBorderTop(BorderStyle.THIN); headerStyle3.setBorderBottom(BorderStyle.THIN); headerStyle3.setBorderLeft(BorderStyle.THIN); headerStyle3.setBorderRight(BorderStyle.THIN); headerStyle3.setAlignment(HorizontalAlignment.CENTER); headerStyle3.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle3.setFillForegroundColor((short)3); headerStyle3.setFillForegroundColor(IndexedColors.LIME.getIndex()); //로우그리기 for(int i=0; i"); out.write(""); out.write(""); out.write(""); out.write(""); out.write(""); out.flush(); out.close(); } private static void excelNameHangulBrokenPrevention(HttpServletResponse response, XSSFWorkbook wb, Excel excel) throws IOException { excel.setOutputFileName(new String(excel.getExcelFileName().getBytes("KSC5601"), "8859_1")); response.setHeader("Set-Cookie", "fileDownload=true; path=/"); response.setHeader("Content-Disposition", String.format("attachment; filename=\""+excel.getOutputFileName()+"_"+Utils.getTimeStampString("yyyyMMdd_HHmm")+".xlsx\"")); wb.write(response.getOutputStream()); wb.close(); } private static void createHeader(Excel excel, String[] headerNames, CellStyle headerStyle, int index) { if (headerNames.length > 0) { excel.setHeaderRow(excel.getSheet().createRow(index)); for(int j=0; j< headerNames.length; j++) { Cell cell = excel.getHeaderRow().createCell(j); cell.setCellValue(headerNames[j]); cell.setCellStyle(headerStyle); excel.getSheet().autoSizeColumn(j); excel.getSheet().setColumnWidth(j, (excel.getSheet().getColumnWidth(j)) + 1024); } } } private static void rowCreate(Excel excel, int rownum, int startIndex, int endIndex){ int mergeCount = 1; boolean mergeCheck = false; for(int i=0; i 0 && j > 0) { if (rowData.get(excel.getHeaders()[0]).equals(excel.getList().get(i-1).get(excel.getHeaders()[0])) && !(j >= startIndex && j <= endIndex)) { if (i < excel.getList().size()-1 && rowData.get(excel.getHeaders()[0]).equals(excel.getList().get(i+1).get(excel.getHeaders()[0]))) { mergeCheck = true; } else { excel.getSheet().addMergedRegion(new CellRangeAddress(i+rownum-mergeCount, i+rownum, j, j)); mergeCheck = false; } } } if(excel.getColumnType()[j].equalsIgnoreCase("Money")) { cell.setCellValue(rowData.getInt(excel.getHeaders()[j])); cell.setCellStyle(excel.getCellStyle1()); } else if(excel.getColumnType()[j].equalsIgnoreCase("Int")) { cell.setCellValue(rowData.getInt(excel.getHeaders()[j])); cell.setCellStyle(excel.getCellStyle2()); } else if(excel.getColumnType()[j].equalsIgnoreCase("String")) { cell.setCellValue(rowData.getString(excel.getHeaders()[j])); } else { cell.setCellValue(rowData.getString(excel.getHeaders()[j])); } } } } public static void ipShipDownExcel(List ipShipList, HttpServletResponse response, String[] headers, String[] headerNames, String[] columnType, String sheetName, String excelFileName) throws IOException { DecimalFormat formatter3 = new DecimalFormat("#,##0.####"); if(Utils.isNotEmpty(ipShipList)) { // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(sheetName); Row headerRow = sheet.createRow(0); CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식 CellStyle cellStyle2 = wb.createCellStyle(); CellStyle cellStyle3 = wb.createCellStyle();//숫자양식 CellStyle headerStyle = wb.createCellStyle(); //숫자양식 XSSFDataFormat format = wb.createDataFormat(); cellStyle1.setDataFormat(format.getFormat("#,##0")); cellStyle2.setDataFormat(format.getFormat("#,##0")); cellStyle3.setWrapText(true); cellStyle1.setAlignment(HorizontalAlignment.CENTER); cellStyle2.setAlignment(HorizontalAlignment.CENTER); cellStyle3.setAlignment(HorizontalAlignment.CENTER); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setFillForegroundColor((short)3); headerStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle.setWrapText(true); //로우그리기 for(int i=0; i emptyNames = new HashSet<>(); for(java.beans.PropertyDescriptor pd : pds) { Object srcValue = src.getPropertyValue(pd.getName()); if (srcValue == null) emptyNames.add(pd.getName()); } String[] result = new String[emptyNames.size()]; return emptyNames.toArray(result); } public static void policelistToExcel(List policeList, HttpServletResponse response, String[] headers, String[] headerNames, String[] columnType, String sheetName, String excelFileName) throws IOException { if(Utils.isNotEmpty(policeList)) { // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(sheetName); Row headerRow = sheet.createRow(0); CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식 CellStyle cellStyle2 = wb.createCellStyle(); //숫자양식 CellStyle headerStyle3 = wb.createCellStyle(); XSSFDataFormat format = wb.createDataFormat(); cellStyle1.setAlignment(HorizontalAlignment.CENTER); cellStyle2.setDataFormat(format.getFormat("#,##0")); cellStyle2.setAlignment(HorizontalAlignment.CENTER); headerStyle3.setBorderTop(BorderStyle.THIN); headerStyle3.setBorderBottom(BorderStyle.THIN); headerStyle3.setBorderLeft(BorderStyle.THIN); headerStyle3.setBorderRight(BorderStyle.THIN); headerStyle3.setAlignment(HorizontalAlignment.CENTER); headerStyle3.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle3.setFillForegroundColor((short)3); headerStyle3.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerStyle3.setWrapText(true); //로우그리기 for(int i=0; i