Commit df4d48b3fe074208bc2234e27d5dd8ff22c175aa
1 parent
96c63262
时刻表v2.7.10
1、修改fnCalcuOtherBc方法,如果最后一班次是吃饭班次需要删除 2、修改重新生成页面,添加主站副站参数 3、修改后台动态时刻表导出功能,可以导出Excel97 xls和Excel2007 xlsx两个版本的excel文件
Showing
13 changed files
with
905 additions
and
107 deletions
src/main/java/com/bsth/controller/schedule/core/TTInfoDetailController.java
| ... | ... | @@ -8,6 +8,7 @@ import com.bsth.service.schedule.datatools.TTInfoDetailForEdit; |
| 8 | 8 | import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData; |
| 9 | 9 | import com.bsth.service.schedule.timetable.ExcelFormatType; |
| 10 | 10 | import com.bsth.service.schedule.utils.DataToolsFile; |
| 11 | +import com.bsth.service.schedule.utils.DataToolsFileType; | |
| 11 | 12 | import org.springframework.beans.factory.annotation.Autowired; |
| 12 | 13 | import org.springframework.web.bind.annotation.*; |
| 13 | 14 | |
| ... | ... | @@ -128,11 +129,19 @@ public class TTInfoDetailController extends BController<TTInfoDetail, Long> { |
| 128 | 129 | } |
| 129 | 130 | |
| 130 | 131 | |
| 131 | - @RequestMapping(value = "/exportDTDFile", method = RequestMethod.POST) | |
| 132 | + @RequestMapping(value = "/exportDTDFile/{type}", method = RequestMethod.POST) | |
| 132 | 133 | public void exportFile( |
| 133 | - @RequestBody TTinfoDetailDynamicData.DTInfos dtInfos, | |
| 134 | + @RequestBody TTinfoDetailDynamicData.DTInfos dtInfos, @PathVariable("type") String type, | |
| 134 | 135 | HttpServletResponse response) throws Exception { |
| 135 | - DataToolsFile dataToolsFile = ttInfoDetailService.exportDynamicTTinfo(dtInfos); | |
| 136 | + DataToolsFile dataToolsFile = null; | |
| 137 | + if ("xls".equals(type)) { | |
| 138 | + dataToolsFile = ttInfoDetailService.exportDynamicTTinfo(dtInfos, DataToolsFileType.XLS); | |
| 139 | + } else if ("xlsx".equals(type)) { | |
| 140 | + dataToolsFile = ttInfoDetailService.exportDynamicTTinfo(dtInfos, DataToolsFileType.XLSX); | |
| 141 | + } else { | |
| 142 | + throw new Exception("未知的导出格式==>" + type); | |
| 143 | + } | |
| 144 | + | |
| 136 | 145 | // 流输出导出文件 |
| 137 | 146 | response.setHeader("content-type", "application/octet-stream"); |
| 138 | 147 | response.setHeader("Content-Disposition", "attachment; filename=" + dataToolsFile.getFile().getName()); | ... | ... |
src/main/java/com/bsth/service/schedule/TTInfoDetailService.java
| ... | ... | @@ -6,6 +6,7 @@ import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData; |
| 6 | 6 | import com.bsth.service.schedule.exception.ScheduleException; |
| 7 | 7 | import com.bsth.service.schedule.timetable.ExcelFormatType; |
| 8 | 8 | import com.bsth.service.schedule.utils.DataToolsFile; |
| 9 | +import com.bsth.service.schedule.utils.DataToolsFileType; | |
| 9 | 10 | |
| 10 | 11 | import java.util.List; |
| 11 | 12 | import java.util.Map; |
| ... | ... | @@ -30,7 +31,7 @@ public interface TTInfoDetailService extends BService<TTInfoDetail, Long> { |
| 30 | 31 | * @return |
| 31 | 32 | * @throws ScheduleException |
| 32 | 33 | */ |
| 33 | - DataToolsFile exportDynamicTTinfo(TTinfoDetailDynamicData.DTInfos dtInfos) throws ScheduleException; | |
| 34 | + DataToolsFile exportDynamicTTinfo(TTinfoDetailDynamicData.DTInfos dtInfos, DataToolsFileType type) throws ScheduleException; | |
| 34 | 35 | |
| 35 | 36 | /** |
| 36 | 37 | * 获取时刻表最大发车顺序号 | ... | ... |
src/main/java/com/bsth/service/schedule/datatools/Excel2003PoiOperator.java
0 → 100644
| 1 | +package com.bsth.service.schedule.datatools; | |
| 2 | + | |
| 3 | +import org.apache.poi.hssf.usermodel.*; | |
| 4 | +import org.apache.poi.ss.usermodel.*; | |
| 5 | +import org.apache.poi.ss.util.WorkbookUtil; | |
| 6 | +import org.apache.poi.xssf.usermodel.XSSFColor; | |
| 7 | + | |
| 8 | +import java.awt.Color; | |
| 9 | +import java.io.File; | |
| 10 | +import java.io.FileOutputStream; | |
| 11 | +import java.util.Date; | |
| 12 | + | |
| 13 | +/** | |
| 14 | + * Excel2003表格Poi操作类。 | |
| 15 | + * TODO:2003里面还有很多和2007不通的样式设定方式,以后再改 | |
| 16 | + */ | |
| 17 | +public class Excel2003PoiOperator implements ExcelPoiOperator { | |
| 18 | + @Override | |
| 19 | + public Cell createCell( | |
| 20 | + Workbook workbook, Row row, short columnIndex, | |
| 21 | + Object value, int valueType, | |
| 22 | + HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment, | |
| 23 | + BorderStyle borderStyle, Color borderColor, | |
| 24 | + short fontSize, Color fontColor, String fontName, | |
| 25 | + Color backgroudColor, FillPatternType fillPatternType) { | |
| 26 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 27 | + HSSFRow hssfRow = (HSSFRow) row; | |
| 28 | + | |
| 29 | + CreationHelper creationHelper = hssfWorkbook.getCreationHelper(); | |
| 30 | + | |
| 31 | + // 1、创建单元格对象 | |
| 32 | + HSSFCell hssfCell = hssfRow.createCell((int) columnIndex); | |
| 33 | + | |
| 34 | + // 2、设定样式 | |
| 35 | + HSSFCellStyle hssfCellStyle = hssfWorkbook.createCellStyle(); | |
| 36 | + | |
| 37 | + // 设定值及数据格式 | |
| 38 | + DataFormat dataFormat = hssfWorkbook.createDataFormat(); | |
| 39 | + if (valueType == HSSFCell.CELL_TYPE_STRING) { | |
| 40 | + hssfCellStyle.setDataFormat(dataFormat.getFormat("@")); | |
| 41 | + hssfCell.setCellValue(creationHelper.createRichTextString(String.valueOf(value))); | |
| 42 | + } else if (valueType == HSSFCell.CELL_TYPE_NUMERIC) { | |
| 43 | + if (value instanceof Date) { // 日期 | |
| 44 | + hssfCellStyle.setDataFormat(dataFormat.getFormat("yyyy-mm-dd")); | |
| 45 | + hssfCell.setCellValue((Date) value); | |
| 46 | + } else if (value instanceof Double) { | |
| 47 | + hssfCellStyle.setDataFormat(dataFormat.getFormat("0.00")); | |
| 48 | + hssfCell.setCellValue((Double) value); | |
| 49 | + } else if (value instanceof Integer) { | |
| 50 | + hssfCellStyle.setDataFormat(dataFormat.getFormat("0")); | |
| 51 | + hssfCell.setCellValue(Double.valueOf(value.toString())); | |
| 52 | + } else { | |
| 53 | + throw new RuntimeException("Excel2003 只支持 String Date Double Integer 单元格类型"); | |
| 54 | + } | |
| 55 | + } else if (valueType == HSSFCell.CELL_TYPE_BLANK) { | |
| 56 | + hssfCell.setCellType(HSSFCell.CELL_TYPE_BLANK); | |
| 57 | + } else { | |
| 58 | + throw new RuntimeException("暂时不支持字符串、日期、数字以外的类型"); | |
| 59 | + } | |
| 60 | + | |
| 61 | + // 对齐方式 | |
| 62 | + hssfCellStyle.setAlignment((short) horizontalAlignment.ordinal()); | |
| 63 | + hssfCellStyle.setVerticalAlignment((short) verticalAlignment.ordinal()); | |
| 64 | + | |
| 65 | + // 边框样式 | |
| 66 | + hssfCellStyle.setBorderTop((short) borderStyle.ordinal()); | |
| 67 | + hssfCellStyle.setTopBorderColor(new XSSFColor(borderColor).getIndexed()); | |
| 68 | + hssfCellStyle.setBorderBottom((short) borderStyle.ordinal()); | |
| 69 | + hssfCellStyle.setBottomBorderColor(new XSSFColor(borderColor).getIndexed()); | |
| 70 | + hssfCellStyle.setBorderLeft((short) borderStyle.ordinal()); | |
| 71 | + hssfCellStyle.setLeftBorderColor(new XSSFColor(borderColor).getIndexed()); | |
| 72 | + hssfCellStyle.setBorderRight((short) borderStyle.ordinal()); | |
| 73 | + hssfCellStyle.setRightBorderColor(new XSSFColor(borderColor).getIndexed()); | |
| 74 | + | |
| 75 | + // 字体颜色 | |
| 76 | +// HSSFFont font = hssfWorkbook.createFont(); | |
| 77 | +// font.setColor(new XSSFColor(fontColor).getIndexed()); | |
| 78 | +// font.setFontHeightInPoints(fontSize); | |
| 79 | +// font.setFontName(fontName); | |
| 80 | +// hssfCellStyle.setFont(font); | |
| 81 | + | |
| 82 | + | |
| 83 | + // 单元背景色 | |
| 84 | + hssfCellStyle.setFillForegroundColor(new XSSFColor(backgroudColor).getIndexed()); | |
| 85 | +// hssfCellStyle.setFillPattern((short) fillPatternType.ordinal()); | |
| 86 | + | |
| 87 | + // TODO | |
| 88 | + | |
| 89 | + hssfCell.setCellStyle(hssfCellStyle); | |
| 90 | + return hssfCell; | |
| 91 | + } | |
| 92 | + | |
| 93 | + @Override | |
| 94 | + public Cell createStringCell( | |
| 95 | + Workbook workbook, Row row, short columnIndex, | |
| 96 | + String value) { | |
| 97 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 98 | + HSSFRow hssfRow = (HSSFRow) row; | |
| 99 | + | |
| 100 | + HSSFCell hssfCell = (HSSFCell) createCell( | |
| 101 | + hssfWorkbook, hssfRow, columnIndex, | |
| 102 | + value, HSSFCell.CELL_TYPE_STRING, | |
| 103 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 104 | + BorderStyle.MEDIUM, new java.awt.Color(0xdedede), | |
| 105 | + (short) 13, new java.awt.Color(0x2765A7), "宋体", | |
| 106 | + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND | |
| 107 | + ); | |
| 108 | + DataFormat dataFormat = hssfWorkbook.createDataFormat(); | |
| 109 | + hssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("@")); | |
| 110 | + return hssfCell; | |
| 111 | + } | |
| 112 | + | |
| 113 | + @Override | |
| 114 | + public Cell createStringCell( | |
| 115 | + Workbook workbook, Row row, short columnIndex, | |
| 116 | + String value, | |
| 117 | + Color backgroudColor) { | |
| 118 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 119 | + HSSFRow hssfRow = (HSSFRow) row; | |
| 120 | + | |
| 121 | + HSSFCell hssfCell = (HSSFCell) createCell( | |
| 122 | + hssfWorkbook, hssfRow, columnIndex, | |
| 123 | + value, HSSFCell.CELL_TYPE_STRING, | |
| 124 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 125 | + BorderStyle.MEDIUM, new java.awt.Color(0xdedede), | |
| 126 | + (short) 13, new java.awt.Color(0x2765A7), "宋体", | |
| 127 | + backgroudColor, FillPatternType.SOLID_FOREGROUND | |
| 128 | + ); | |
| 129 | + DataFormat dataFormat = hssfWorkbook.createDataFormat(); | |
| 130 | + hssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("@")); | |
| 131 | + return hssfCell; | |
| 132 | + } | |
| 133 | + | |
| 134 | + @Override | |
| 135 | + public Cell createIntegerCell( | |
| 136 | + Workbook workbook, Row row, short columnIndex, | |
| 137 | + Integer value) { | |
| 138 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 139 | + HSSFRow hssfRow = (HSSFRow) row; | |
| 140 | + | |
| 141 | + HSSFCell hssfCell = (HSSFCell) createCell( | |
| 142 | + hssfWorkbook, hssfRow, columnIndex, | |
| 143 | + value, HSSFCell.CELL_TYPE_NUMERIC, | |
| 144 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 145 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 146 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 147 | + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND | |
| 148 | + ); | |
| 149 | + | |
| 150 | + DataFormat dataFormat = hssfWorkbook.createDataFormat(); | |
| 151 | + hssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("0")); | |
| 152 | + return hssfCell; | |
| 153 | + } | |
| 154 | + | |
| 155 | + @Override | |
| 156 | + public Cell createIntegerCell( | |
| 157 | + Workbook workbook, Row row, short columnIndex, | |
| 158 | + Integer value, | |
| 159 | + Color backgroudColor) { | |
| 160 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 161 | + HSSFRow hssfRow = (HSSFRow) row; | |
| 162 | + | |
| 163 | + HSSFCell hssfCell = (HSSFCell) createCell( | |
| 164 | + hssfWorkbook, hssfRow, columnIndex, | |
| 165 | + value, HSSFCell.CELL_TYPE_NUMERIC, | |
| 166 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 167 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 168 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 169 | + backgroudColor, FillPatternType.SOLID_FOREGROUND | |
| 170 | + ); | |
| 171 | + | |
| 172 | + DataFormat dataFormat = hssfWorkbook.createDataFormat(); | |
| 173 | + hssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("0")); | |
| 174 | + return hssfCell; | |
| 175 | + } | |
| 176 | + | |
| 177 | + @Override | |
| 178 | + public Cell createDoubleCell( | |
| 179 | + Workbook workbook, Row row, short columnIndex, | |
| 180 | + Double value) { | |
| 181 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 182 | + HSSFRow hssfRow = (HSSFRow) row; | |
| 183 | + | |
| 184 | + HSSFCell hssfCell = (HSSFCell) createCell( | |
| 185 | + hssfWorkbook, hssfRow, columnIndex, | |
| 186 | + value, HSSFCell.CELL_TYPE_NUMERIC, | |
| 187 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 188 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 189 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 190 | + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND | |
| 191 | + ); | |
| 192 | + | |
| 193 | + DataFormat dataFormat = hssfWorkbook.createDataFormat(); | |
| 194 | + hssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("0.00")); | |
| 195 | + return hssfCell; | |
| 196 | + } | |
| 197 | + | |
| 198 | + @Override | |
| 199 | + public Cell createDoubleCell( | |
| 200 | + Workbook workbook, Row row, short columnIndex, | |
| 201 | + Double value, | |
| 202 | + Color backgroudColor) { | |
| 203 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 204 | + HSSFRow hssfRow = (HSSFRow) row; | |
| 205 | + | |
| 206 | + HSSFCell hssfCell = (HSSFCell) createCell( | |
| 207 | + hssfWorkbook, hssfRow, columnIndex, | |
| 208 | + value, HSSFCell.CELL_TYPE_NUMERIC, | |
| 209 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 210 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 211 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 212 | + backgroudColor, FillPatternType.SOLID_FOREGROUND | |
| 213 | + ); | |
| 214 | + | |
| 215 | + DataFormat dataFormat = hssfWorkbook.createDataFormat(); | |
| 216 | + hssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("0.00")); | |
| 217 | + return hssfCell; | |
| 218 | + } | |
| 219 | + | |
| 220 | + @Override | |
| 221 | + public Cell createBlankCell(Workbook workbook, Row row, short columnIndex) { | |
| 222 | + return createCell( | |
| 223 | + workbook, row, columnIndex, | |
| 224 | + null, HSSFCell.CELL_TYPE_BLANK, | |
| 225 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 226 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 227 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 228 | + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND | |
| 229 | + ); | |
| 230 | + } | |
| 231 | + | |
| 232 | + @Override | |
| 233 | + public Cell setCellDataFormat(Workbook workbook, Cell cell, String fmt) { | |
| 234 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 235 | + DataFormat dataFormat = hssfWorkbook.createDataFormat(); | |
| 236 | + cell.getCellStyle().setDataFormat(dataFormat.getFormat("fmt")); | |
| 237 | + return cell; | |
| 238 | + } | |
| 239 | + | |
| 240 | + @Override | |
| 241 | + public Cell setCellBackground(Cell cell, Color color) { | |
| 242 | + HSSFCell hssfCell = (HSSFCell) cell; | |
| 243 | + hssfCell.getCellStyle().setFillForegroundColor(new XSSFColor(color).getIndexed()); | |
| 244 | + return cell; | |
| 245 | + } | |
| 246 | + | |
| 247 | + @Override | |
| 248 | + public Workbook createWorkBook() { | |
| 249 | + return new HSSFWorkbook(); | |
| 250 | + } | |
| 251 | + | |
| 252 | + @Override | |
| 253 | + public Sheet createWorkBookSheet(Workbook workbook, String sheetName) { | |
| 254 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 255 | + return hssfWorkbook.createSheet(WorkbookUtil.createSafeSheetName(sheetName)); | |
| 256 | + } | |
| 257 | + | |
| 258 | + @Override | |
| 259 | + public Row createSheetRow(Sheet sheet, int rowIndex) { | |
| 260 | + HSSFSheet hssfSheet = (HSSFSheet) sheet; | |
| 261 | + return hssfSheet.createRow(rowIndex); | |
| 262 | + } | |
| 263 | + | |
| 264 | + @Override | |
| 265 | + public void writeExcel(File excelFile, Workbook workbook) { | |
| 266 | + try { | |
| 267 | + HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook; | |
| 268 | + FileOutputStream fileOutputStream = new FileOutputStream(excelFile); | |
| 269 | + hssfWorkbook.write(fileOutputStream); | |
| 270 | + } catch (Exception exp) { | |
| 271 | + throw new RuntimeException(exp); | |
| 272 | + } | |
| 273 | + } | |
| 274 | +} | ... | ... |
src/main/java/com/bsth/service/schedule/datatools/Excel2007PoiOperator.java
0 → 100644
| 1 | +package com.bsth.service.schedule.datatools; | |
| 2 | + | |
| 3 | +import org.apache.poi.ss.usermodel.*; | |
| 4 | +import org.apache.poi.ss.util.WorkbookUtil; | |
| 5 | +import org.apache.poi.xssf.usermodel.*; | |
| 6 | + | |
| 7 | +import java.awt.Color; | |
| 8 | +import java.io.File; | |
| 9 | +import java.io.FileOutputStream; | |
| 10 | +import java.util.Date; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * Excel2007表格Poi操作类。 | |
| 14 | + * TODO:以后测style需要重用 | |
| 15 | + */ | |
| 16 | +public class Excel2007PoiOperator implements ExcelPoiOperator { | |
| 17 | + @Override | |
| 18 | + public Cell createCell( | |
| 19 | + Workbook workbook, Row row, short columnIndex, | |
| 20 | + Object value, int valueType, | |
| 21 | + HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment, | |
| 22 | + BorderStyle borderStyle, java.awt.Color borderColor, | |
| 23 | + short fontSize, java.awt.Color fontColor, String fontName, | |
| 24 | + java.awt.Color backgroudColor, FillPatternType fillPatternType) { | |
| 25 | + | |
| 26 | + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook; | |
| 27 | + XSSFRow xssfRow = (XSSFRow) row; | |
| 28 | + | |
| 29 | + CreationHelper creationHelper = xssfWorkbook.getCreationHelper(); | |
| 30 | + | |
| 31 | + // 1、创建单元格对象 | |
| 32 | + XSSFCell xssfCell = xssfRow.createCell(columnIndex); | |
| 33 | + | |
| 34 | + // 2、设定样式 | |
| 35 | + XSSFCellStyle xssfCellStyle = xssfWorkbook.createCellStyle(); | |
| 36 | + | |
| 37 | + // 设定值及数据格式 | |
| 38 | + DataFormat dataFormat = xssfWorkbook.createDataFormat(); | |
| 39 | + if (valueType == XSSFCell.CELL_TYPE_STRING) { | |
| 40 | + xssfCellStyle.setDataFormat(dataFormat.getFormat("@")); | |
| 41 | + xssfCell.setCellValue(creationHelper.createRichTextString(String.valueOf(value))); | |
| 42 | + } else if (valueType == XSSFCell.CELL_TYPE_NUMERIC) { | |
| 43 | + if (value instanceof Date) { // 日期 | |
| 44 | + xssfCellStyle.setDataFormat(dataFormat.getFormat("yyyy-mm-dd")); | |
| 45 | + xssfCell.setCellValue((Date) value); | |
| 46 | + } else if (value instanceof Double) { | |
| 47 | + xssfCellStyle.setDataFormat(dataFormat.getFormat("0.00")); | |
| 48 | + xssfCell.setCellValue((Double) value); | |
| 49 | + } else if (value instanceof Integer) { | |
| 50 | + xssfCellStyle.setDataFormat(dataFormat.getFormat("0")); | |
| 51 | + xssfCell.setCellValue(Double.valueOf(value.toString())); | |
| 52 | + } else { | |
| 53 | + throw new RuntimeException("Excel2007 只支持 String Date Double Integer 单元格类型"); | |
| 54 | + } | |
| 55 | + } else if (valueType == XSSFCell.CELL_TYPE_BLANK) { | |
| 56 | + xssfCell.setCellType(Cell.CELL_TYPE_BLANK); | |
| 57 | + } else { | |
| 58 | + throw new RuntimeException("暂时不支持字符串、日期、数字以外的类型"); | |
| 59 | + } | |
| 60 | + | |
| 61 | + // 对齐方式 | |
| 62 | + xssfCellStyle.setAlignment(horizontalAlignment); | |
| 63 | + xssfCellStyle.setVerticalAlignment(verticalAlignment); | |
| 64 | + | |
| 65 | + // 边框样式 | |
| 66 | + xssfCellStyle.setBorderTop(borderStyle); | |
| 67 | + xssfCellStyle.setTopBorderColor(new XSSFColor(borderColor)); | |
| 68 | + xssfCellStyle.setBorderBottom(borderStyle); | |
| 69 | + xssfCellStyle.setBottomBorderColor(new XSSFColor(borderColor)); | |
| 70 | + xssfCellStyle.setBorderLeft(borderStyle); | |
| 71 | + xssfCellStyle.setLeftBorderColor(new XSSFColor(borderColor)); | |
| 72 | + xssfCellStyle.setBorderRight(borderStyle); | |
| 73 | + xssfCellStyle.setRightBorderColor(new XSSFColor(borderColor)); | |
| 74 | + | |
| 75 | + // 字体颜色 | |
| 76 | + XSSFFont font = xssfWorkbook.createFont(); | |
| 77 | + font.setColor(new XSSFColor(fontColor)); | |
| 78 | + font.setFontHeightInPoints(fontSize); | |
| 79 | + font.setFontName(fontName); | |
| 80 | + xssfCellStyle.setFont(font); | |
| 81 | + | |
| 82 | + | |
| 83 | + // 单元背景色 | |
| 84 | + xssfCellStyle.setFillForegroundColor(new XSSFColor(backgroudColor)); | |
| 85 | + xssfCellStyle.setFillPattern(fillPatternType); | |
| 86 | + | |
| 87 | + // TODO | |
| 88 | + | |
| 89 | + xssfCell.setCellStyle(xssfCellStyle); | |
| 90 | + return xssfCell; | |
| 91 | + } | |
| 92 | + | |
| 93 | + @Override | |
| 94 | + public Cell createStringCell( | |
| 95 | + Workbook workbook, Row row, short columnIndex, | |
| 96 | + String value) { | |
| 97 | + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook; | |
| 98 | + XSSFRow xssfRow = (XSSFRow) row; | |
| 99 | + | |
| 100 | + XSSFCell xssfCell = (XSSFCell) createCell( | |
| 101 | + xssfWorkbook, xssfRow, columnIndex, | |
| 102 | + value, XSSFCell.CELL_TYPE_STRING, | |
| 103 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 104 | + BorderStyle.MEDIUM, new java.awt.Color(0xdedede), | |
| 105 | + (short) 13, new java.awt.Color(0x2765A7), "宋体", | |
| 106 | + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND | |
| 107 | + ); | |
| 108 | + DataFormat dataFormat = xssfWorkbook.createDataFormat(); | |
| 109 | + xssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("@")); | |
| 110 | + return xssfCell; | |
| 111 | + } | |
| 112 | + | |
| 113 | + @Override | |
| 114 | + public Cell createStringCell( | |
| 115 | + Workbook workbook, Row row, short columnIndex, | |
| 116 | + String value, | |
| 117 | + Color backgroudColor) { | |
| 118 | + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook; | |
| 119 | + XSSFRow xssfRow = (XSSFRow) row; | |
| 120 | + | |
| 121 | + XSSFCell xssfCell = (XSSFCell) createCell( | |
| 122 | + xssfWorkbook, xssfRow, columnIndex, | |
| 123 | + value, XSSFCell.CELL_TYPE_STRING, | |
| 124 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 125 | + BorderStyle.MEDIUM, new java.awt.Color(0xdedede), | |
| 126 | + (short) 13, new java.awt.Color(0x2765A7), "宋体", | |
| 127 | + backgroudColor, FillPatternType.SOLID_FOREGROUND | |
| 128 | + ); | |
| 129 | + DataFormat dataFormat = xssfWorkbook.createDataFormat(); | |
| 130 | + xssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("@")); | |
| 131 | + return xssfCell; | |
| 132 | + } | |
| 133 | + | |
| 134 | + @Override | |
| 135 | + public Cell createIntegerCell( | |
| 136 | + Workbook workbook, Row row, short columnIndex, | |
| 137 | + Integer value) { | |
| 138 | + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook; | |
| 139 | + XSSFRow xssfRow = (XSSFRow) row; | |
| 140 | + | |
| 141 | + XSSFCell xssfCell = (XSSFCell) createCell( | |
| 142 | + xssfWorkbook, xssfRow, columnIndex, | |
| 143 | + value, XSSFCell.CELL_TYPE_NUMERIC, | |
| 144 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 145 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 146 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 147 | + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND | |
| 148 | + ); | |
| 149 | + | |
| 150 | + DataFormat dataFormat = xssfWorkbook.createDataFormat(); | |
| 151 | + xssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("0")); | |
| 152 | + return xssfCell; | |
| 153 | + } | |
| 154 | + | |
| 155 | + @Override | |
| 156 | + public Cell createIntegerCell( | |
| 157 | + Workbook workbook, Row row, short columnIndex, | |
| 158 | + Integer value, | |
| 159 | + Color backgroudColor) { | |
| 160 | + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook; | |
| 161 | + XSSFRow xssfRow = (XSSFRow) row; | |
| 162 | + | |
| 163 | + XSSFCell xssfCell = (XSSFCell) createCell( | |
| 164 | + xssfWorkbook, xssfRow, columnIndex, | |
| 165 | + value, XSSFCell.CELL_TYPE_NUMERIC, | |
| 166 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 167 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 168 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 169 | + backgroudColor, FillPatternType.SOLID_FOREGROUND | |
| 170 | + ); | |
| 171 | + | |
| 172 | + DataFormat dataFormat = xssfWorkbook.createDataFormat(); | |
| 173 | + xssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("0")); | |
| 174 | + return xssfCell; | |
| 175 | + } | |
| 176 | + | |
| 177 | + @Override | |
| 178 | + public Cell createDoubleCell( | |
| 179 | + Workbook workbook, Row row, short columnIndex, | |
| 180 | + Double value) { | |
| 181 | + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook; | |
| 182 | + XSSFRow xssfRow = (XSSFRow) row; | |
| 183 | + | |
| 184 | + XSSFCell xssfCell = (XSSFCell) createCell( | |
| 185 | + xssfWorkbook, xssfRow, columnIndex, | |
| 186 | + value, XSSFCell.CELL_TYPE_NUMERIC, | |
| 187 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 188 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 189 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 190 | + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND | |
| 191 | + ); | |
| 192 | + | |
| 193 | + DataFormat dataFormat = xssfWorkbook.createDataFormat(); | |
| 194 | + xssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("0.00")); | |
| 195 | + return xssfCell; | |
| 196 | + } | |
| 197 | + | |
| 198 | + @Override | |
| 199 | + public Cell createDoubleCell( | |
| 200 | + Workbook workbook, Row row, short columnIndex, | |
| 201 | + Double value, | |
| 202 | + Color backgroudColor) { | |
| 203 | + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook; | |
| 204 | + XSSFRow xssfRow = (XSSFRow) row; | |
| 205 | + | |
| 206 | + XSSFCell xssfCell = (XSSFCell) createCell( | |
| 207 | + xssfWorkbook, xssfRow, columnIndex, | |
| 208 | + value, XSSFCell.CELL_TYPE_NUMERIC, | |
| 209 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 210 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 211 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 212 | + backgroudColor, FillPatternType.SOLID_FOREGROUND | |
| 213 | + ); | |
| 214 | + | |
| 215 | + DataFormat dataFormat = xssfWorkbook.createDataFormat(); | |
| 216 | + xssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("0.00")); | |
| 217 | + return xssfCell; | |
| 218 | + } | |
| 219 | + | |
| 220 | + @Override | |
| 221 | + public Cell createBlankCell( | |
| 222 | + Workbook workbook, Row row, short columnIndex) { | |
| 223 | + return createCell( | |
| 224 | + workbook, row, columnIndex, | |
| 225 | + null, XSSFCell.CELL_TYPE_BLANK, | |
| 226 | + HorizontalAlignment.CENTER, VerticalAlignment.CENTER, | |
| 227 | + BorderStyle.MEDIUM, new Color(0xdedede), | |
| 228 | + (short) 13, new Color(0x2765A7), "宋体", | |
| 229 | + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND | |
| 230 | + ); | |
| 231 | + } | |
| 232 | + | |
| 233 | + @Override | |
| 234 | + public Cell setCellDataFormat(Workbook workbook, Cell cell, String fmt) { | |
| 235 | + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook; | |
| 236 | + DataFormat dataFormat = xssfWorkbook.createDataFormat(); | |
| 237 | + cell.getCellStyle().setDataFormat(dataFormat.getFormat(fmt)); | |
| 238 | + return cell; | |
| 239 | + } | |
| 240 | + | |
| 241 | + @Override | |
| 242 | + public Cell setCellBackground(Cell cell, Color color) { | |
| 243 | + XSSFCell xssfCell = (XSSFCell) cell; | |
| 244 | + xssfCell.getCellStyle().setFillForegroundColor(new XSSFColor(color)); | |
| 245 | + return cell; | |
| 246 | + } | |
| 247 | + | |
| 248 | + @Override | |
| 249 | + public Workbook createWorkBook() { | |
| 250 | + return new XSSFWorkbook(); | |
| 251 | + } | |
| 252 | + | |
| 253 | + @Override | |
| 254 | + public Sheet createWorkBookSheet(Workbook workbook, String sheetName) { | |
| 255 | + return workbook.createSheet(WorkbookUtil.createSafeSheetName(sheetName)); | |
| 256 | + } | |
| 257 | + | |
| 258 | + @Override | |
| 259 | + public Row createSheetRow(Sheet sheet, int rowIndex) { | |
| 260 | + XSSFSheet xssfSheet = (XSSFSheet) sheet; | |
| 261 | + return xssfSheet.createRow(rowIndex); | |
| 262 | + } | |
| 263 | + | |
| 264 | + @Override | |
| 265 | + public void writeExcel(File excelFile, Workbook workbook) { | |
| 266 | + try { | |
| 267 | + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook; | |
| 268 | + FileOutputStream fileOutputStream = new FileOutputStream(excelFile); | |
| 269 | + xssfWorkbook.write(fileOutputStream); | |
| 270 | + } catch (Exception exp) { | |
| 271 | + throw new RuntimeException(exp); | |
| 272 | + } | |
| 273 | + | |
| 274 | + } | |
| 275 | +} | ... | ... |
src/main/java/com/bsth/service/schedule/datatools/ExcelPoiOperator.java
0 → 100644
| 1 | +package com.bsth.service.schedule.datatools; | |
| 2 | + | |
| 3 | +import org.apache.poi.ss.usermodel.*; | |
| 4 | + | |
| 5 | +import java.awt.Color; | |
| 6 | +import java.io.File; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * Excel表格Poi操作接口。 | |
| 10 | + */ | |
| 11 | +public interface ExcelPoiOperator { | |
| 12 | + | |
| 13 | + | |
| 14 | + //---------------- 创建单元格 ---------------// | |
| 15 | + | |
| 16 | + Cell createCell( | |
| 17 | + Workbook workbook, Row row, short columnIndex, | |
| 18 | + Object value, int valueType, | |
| 19 | + HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment, | |
| 20 | + BorderStyle borderStyle, java.awt.Color borderColor, | |
| 21 | + short fontSize, java.awt.Color fontColor, String fontName, | |
| 22 | + java.awt.Color backgroudColor, FillPatternType fillPatternType | |
| 23 | + ); | |
| 24 | + | |
| 25 | + Cell createStringCell( | |
| 26 | + Workbook workbook, Row row, short columnIndex, | |
| 27 | + String value | |
| 28 | + ); | |
| 29 | + | |
| 30 | + Cell createStringCell( | |
| 31 | + Workbook workbook, Row row, short columnIndex, | |
| 32 | + String value, | |
| 33 | + java.awt.Color backgroudColor | |
| 34 | + ); | |
| 35 | + | |
| 36 | + Cell createIntegerCell( | |
| 37 | + Workbook workbook, Row row, short columnIndex, | |
| 38 | + Integer value | |
| 39 | + ); | |
| 40 | + | |
| 41 | + Cell createIntegerCell( | |
| 42 | + Workbook workbook, Row row, short columnIndex, | |
| 43 | + Integer value, | |
| 44 | + java.awt.Color backgroudColor | |
| 45 | + ); | |
| 46 | + | |
| 47 | + Cell createDoubleCell( | |
| 48 | + Workbook workbook, Row row, short columnIndex, | |
| 49 | + Double value | |
| 50 | + ); | |
| 51 | + | |
| 52 | + Cell createDoubleCell( | |
| 53 | + Workbook workbook, Row row, short columnIndex, | |
| 54 | + Double value, | |
| 55 | + java.awt.Color backgroudColor | |
| 56 | + ); | |
| 57 | + | |
| 58 | + Cell createBlankCell( | |
| 59 | + Workbook workbook, Row row, short columnIndex | |
| 60 | + ); | |
| 61 | + | |
| 62 | + //---------------- 创建单元格数据格式 ---------------// | |
| 63 | + | |
| 64 | + Cell setCellDataFormat(Workbook workbook, Cell cell, String fmt); | |
| 65 | + | |
| 66 | + Cell setCellBackground(Cell cell, Color color); | |
| 67 | + | |
| 68 | + //---------------- 创建workbook,sheet,row ---------------// | |
| 69 | + Workbook createWorkBook(); | |
| 70 | + Sheet createWorkBookSheet(Workbook workbook, String sheetName); | |
| 71 | + Row createSheetRow(Sheet sheet, int rowIndex); | |
| 72 | + | |
| 73 | + //---------------- 生成文件 ---------------// | |
| 74 | + void writeExcel(File excelFile, Workbook workbook); | |
| 75 | +} | ... | ... |
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
| ... | ... | @@ -14,10 +14,6 @@ import org.apache.commons.lang3.StringUtils; |
| 14 | 14 | import org.apache.poi.ss.usermodel.Cell; |
| 15 | 15 | import org.apache.poi.ss.usermodel.Row; |
| 16 | 16 | import org.apache.poi.ss.util.CellRangeAddress; |
| 17 | -import org.apache.poi.ss.util.WorkbookUtil; | |
| 18 | -import org.apache.poi.xssf.usermodel.XSSFCell; | |
| 19 | -import org.apache.poi.xssf.usermodel.XSSFRow; | |
| 20 | -import org.apache.poi.xssf.usermodel.XSSFSheet; | |
| 21 | 17 | import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
| 22 | 18 | import org.joda.time.DateTime; |
| 23 | 19 | import org.joda.time.LocalTime; |
| ... | ... | @@ -31,7 +27,6 @@ import org.springframework.stereotype.Service; |
| 31 | 27 | |
| 32 | 28 | import java.awt.*; |
| 33 | 29 | import java.io.File; |
| 34 | -import java.io.FileOutputStream; | |
| 35 | 30 | import java.io.PrintWriter; |
| 36 | 31 | import java.io.StringWriter; |
| 37 | 32 | import java.util.*; |
| ... | ... | @@ -438,14 +433,14 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail |
| 438 | 433 | } |
| 439 | 434 | } |
| 440 | 435 | |
| 441 | - private void createDynamicTTinfoStatSheet(XSSFWorkbook wb, DTInfos dtInfos) { | |
| 442 | - XSSFSheet sheet = wb.createSheet(WorkbookUtil.createSafeSheetName("时刻表信息_统计")); | |
| 436 | + private void createDynamicTTinfoStatSheet(org.apache.poi.ss.usermodel.Workbook wb, DTInfos dtInfos, ExcelPoiOperator excelPoiOperator) { | |
| 437 | + org.apache.poi.ss.usermodel.Sheet sheet = excelPoiOperator.createWorkBookSheet(wb, "时刻表信息_统计"); | |
| 443 | 438 | |
| 444 | 439 | //-------------------------------- 1、路牌班次数据 -------------------------------// |
| 445 | 440 | List<LpObj> lpObjList = dtInfos.getLpObjList(); |
| 446 | 441 | |
| 447 | 442 | // 构建第一行数据 |
| 448 | - XSSFRow lpHeadRow = sheet.createRow((short) 0); | |
| 443 | + Row lpHeadRow = excelPoiOperator.createSheetRow(sheet, 0); | |
| 449 | 444 | if (lpObjList.size() == 0) { |
| 450 | 445 | throw new RuntimeException("没有班次数据!"); |
| 451 | 446 | } |
| ... | ... | @@ -455,40 +450,36 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail |
| 455 | 450 | } |
| 456 | 451 | |
| 457 | 452 | // 构造表头 |
| 458 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short)0, "路牌", new Color(0x96b9d7)); | |
| 453 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) 0, "路牌", new Color(0x96b9d7)); | |
| 454 | + | |
| 459 | 455 | StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1()); |
| 460 | 456 | StationRoute station2 = stationRouteService.findById(lpObjList.get(1).getStationRouteId2()); |
| 461 | 457 | for (int i = 0; i < groupCount; i++) { |
| 462 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 1), | |
| 463 | - station1.getStationName(), new Color(0x96b9d7)); | |
| 464 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 2), | |
| 465 | - station2.getStationName(), new Color(0x96b9d7)); | |
| 458 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 1), station1.getStationName(), new Color(0x96b9d7)); | |
| 459 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 2), station2.getStationName(), new Color(0x96b9d7)); | |
| 466 | 460 | } |
| 467 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 1), | |
| 468 | - "路牌工时", new Color(0x96b9d7)); | |
| 469 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 2), | |
| 470 | - "营运班次数", new Color(0x96b9d7)); | |
| 461 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 1), "路牌工时", new Color(0x96b9d7)); | |
| 462 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 2), "营运班次数", new Color(0x96b9d7)); | |
| 471 | 463 | |
| 472 | 464 | // 构建每个路牌的班次数据 |
| 473 | 465 | for (int i = 0; i < lpObjList.size(); i++) { |
| 474 | 466 | LpObj lpObj = lpObjList.get(i); |
| 475 | - XSSFRow lpRow = sheet.createRow((short) (i + 1)); | |
| 476 | - PoiUtils.createStringXSSFCell(wb, lpRow, (short) 0, lpObj.getLpname()); | |
| 467 | + Row lpRow = excelPoiOperator.createSheetRow(sheet, i + 1); | |
| 468 | + excelPoiOperator.createStringCell(wb, lpRow, (short) 0, lpObj.getLpname()); | |
| 477 | 469 | for (int j = 0; j < groupCount; j++) { |
| 478 | - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 1)); | |
| 479 | - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 2)); | |
| 470 | + excelPoiOperator.createBlankCell(wb, lpRow, (short) (j * 2 + 1)); | |
| 471 | + excelPoiOperator.createBlankCell(wb, lpRow, (short) (j * 2 + 2)); | |
| 480 | 472 | } |
| 481 | 473 | for (BcObj bcObj : lpObj.getBcObjList()) { |
| 482 | 474 | if (bcObj.getBcType() == BcType.NORMAL) { |
| 483 | - Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 1)); | |
| 484 | - cell.setCellValue(bcObj.getFcsjDesc()); | |
| 475 | + lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 1)).setCellValue(bcObj.getFcsjDesc()); | |
| 485 | 476 | } |
| 486 | 477 | } |
| 487 | 478 | // 路牌工时/班次数 |
| 488 | - PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 1), | |
| 479 | + excelPoiOperator.createDoubleCell(wb, lpRow, (short) (groupCount * 2 + 1), | |
| 489 | 480 | lpObj.getZgs() / 60); |
| 490 | 481 | // 营运班次数 |
| 491 | - PoiUtils.createIntegerXSSFCell(wb, lpRow, (short) (groupCount * 2 + 2), | |
| 482 | + excelPoiOperator.createIntegerCell(wb, lpRow, (short) (groupCount * 2 + 2), | |
| 492 | 483 | lpObj.getZbc()); |
| 493 | 484 | } |
| 494 | 485 | |
| ... | ... | @@ -514,9 +505,9 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail |
| 514 | 505 | |
| 515 | 506 | int startrow = lpObjList.size() + 3; |
| 516 | 507 | for (int i = startrow; i <= startrow + 22; i++) { |
| 517 | - XSSFRow xssfRow = sheet.createRow(i); | |
| 508 | + Row row = excelPoiOperator.createSheetRow(sheet, i); | |
| 518 | 509 | for (int j = 0; j < 10; j++) { |
| 519 | - PoiUtils.createStringXSSFCell(wb, xssfRow, (short) j, ""); | |
| 510 | + excelPoiOperator.createStringCell(wb, row, (short) j, ""); | |
| 520 | 511 | |
| 521 | 512 | } |
| 522 | 513 | } |
| ... | ... | @@ -537,27 +528,27 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail |
| 537 | 528 | StatInfo statInfo = statInfos.get(i); |
| 538 | 529 | |
| 539 | 530 | // 1、统计序号 |
| 540 | - PoiUtils.setIntegerStyleXSSFCellStyle(wb, sheet.getRow(startrow + 2 + i).getCell(0)); | |
| 531 | + excelPoiOperator.setCellDataFormat(wb, sheet.getRow(startrow + 2 + i).getCell(0), "0"); | |
| 541 | 532 | sheet.getRow(startrow + 2 + i).getCell(0).setCellValue(i); |
| 542 | 533 | |
| 543 | 534 | // 2、统计项目 |
| 544 | 535 | sheet.getRow(startrow + 2 + i).getCell(1).setCellValue(statInfo.getStatItem()); |
| 545 | 536 | |
| 546 | 537 | // 3、统计数值 |
| 547 | - PoiUtils.setDoubleStyleXSSFCellStyle(wb, sheet.getRow(startrow + 2 + i).getCell(9)); | |
| 538 | + excelPoiOperator.setCellDataFormat(wb, sheet.getRow(startrow + 2 + i).getCell(9), "0.00"); | |
| 548 | 539 | sheet.getRow(startrow + 2 + i).getCell(9).setCellValue(statInfo.getStatValue()); |
| 549 | 540 | } |
| 550 | 541 | |
| 551 | 542 | } |
| 552 | 543 | |
| 553 | - private void createDynamicTTinfoSheet(XSSFWorkbook wb, DTInfos dtInfos) { | |
| 554 | - XSSFSheet sheet = wb.createSheet(WorkbookUtil.createSafeSheetName("时刻表信息")); | |
| 544 | + private void createDynamicTTinfoSheet(org.apache.poi.ss.usermodel.Workbook wb, DTInfos dtInfos, ExcelPoiOperator excelPoiOperator) { | |
| 545 | + org.apache.poi.ss.usermodel.Sheet sheet = excelPoiOperator.createWorkBookSheet(wb, "时刻表信息"); | |
| 555 | 546 | |
| 556 | 547 | //-------------------------------- 1、路牌班次数据 -------------------------------// |
| 557 | 548 | List<LpObj> lpObjList = dtInfos.getLpObjList(); |
| 558 | 549 | |
| 559 | 550 | // 构建第一行数据 |
| 560 | - XSSFRow lpHeadRow = sheet.createRow((short) 0); | |
| 551 | + Row lpHeadRow = excelPoiOperator.createSheetRow(sheet, 0); | |
| 561 | 552 | if (lpObjList.size() == 0) { |
| 562 | 553 | throw new RuntimeException("没有班次数据!"); |
| 563 | 554 | } |
| ... | ... | @@ -567,72 +558,61 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail |
| 567 | 558 | } |
| 568 | 559 | |
| 569 | 560 | // 构造表头,添加一个进场,添加一个出场 |
| 570 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short)0, "路牌", new Color(0x96b9d7)); | |
| 561 | + | |
| 562 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) 0, "路牌", new Color(0x96b9d7)); | |
| 563 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) 1, "报到", new Color(0x96b9d7)); | |
| 564 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) 2, "出场", new Color(0x96b9d7)); | |
| 565 | + | |
| 566 | + | |
| 571 | 567 | StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1()); |
| 572 | 568 | StationRoute station2 = stationRouteService.findById(lpObjList.get(1).getStationRouteId2()); |
| 573 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (1), | |
| 574 | - "报到", new Color(0x96b9d7)); | |
| 575 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (2), | |
| 576 | - "出场", new Color(0x96b9d7)); | |
| 577 | 569 | for (int i = 1; i <= groupCount; i++) { |
| 578 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 1), | |
| 579 | - station1.getStationName(), new Color(0x96b9d7)); | |
| 580 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 2), | |
| 581 | - station2.getStationName(), new Color(0x96b9d7)); | |
| 570 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 1), station1.getStationName(), new Color(0x96b9d7)); | |
| 571 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 2), station2.getStationName(), new Color(0x96b9d7)); | |
| 582 | 572 | } |
| 583 | 573 | |
| 584 | 574 | // 最后一个进场需要变成三个班次 |
| 585 | 575 | // 1个分班进场班次插入到前面的班次 |
| 586 | 576 | // 后面添加两个班次,1个到场班次,1个离场班次 |
| 587 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 3), | |
| 588 | - "到场", new Color(0x96b9d7)); | |
| 589 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 4), | |
| 590 | - "离场", new Color(0x96b9d7)); | |
| 577 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 3), "到场", new Color(0x96b9d7)); | |
| 578 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 4), "离场", new Color(0x96b9d7)); | |
| 591 | 579 | |
| 592 | 580 | // 路牌统计字段 |
| 593 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 5), | |
| 594 | - "总公里", new Color(0x96b9d7)); | |
| 595 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 6), | |
| 596 | - "营业公里", new Color(0x96b9d7)); | |
| 597 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 7), | |
| 598 | - "空驶公里", new Color(0x96b9d7)); | |
| 599 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 8), | |
| 600 | - "总工时", new Color(0x96b9d7)); | |
| 601 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 9), | |
| 602 | - "营业工时", new Color(0x96b9d7)); | |
| 603 | - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 10), | |
| 604 | - "营运班次", new Color(0x96b9d7)); | |
| 581 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 5), "总公里", new Color(0x96b9d7)); | |
| 582 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 6), "营业公里", new Color(0x96b9d7)); | |
| 583 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 7), "空驶公里", new Color(0x96b9d7)); | |
| 584 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 8), "总工时", new Color(0x96b9d7)); | |
| 585 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 9), "营业工时", new Color(0x96b9d7)); | |
| 586 | + excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (groupCount * 2 + 10), "营运班次", new Color(0x96b9d7)); | |
| 605 | 587 | |
| 606 | 588 | // 构建每个路牌的班次数据 |
| 589 | + Cell cell = null; | |
| 607 | 590 | for (int i = 0; i < lpObjList.size(); i++) { |
| 608 | 591 | LpObj lpObj = lpObjList.get(i); |
| 609 | - XSSFRow lpRow = sheet.createRow((short) (i + 1)); | |
| 610 | - PoiUtils.createStringXSSFCell(wb, lpRow, (short) 0, lpObj.getLpname()); | |
| 592 | + Row lpRow = excelPoiOperator.createSheetRow(sheet, i + 1); | |
| 593 | + excelPoiOperator.createStringCell(wb, lpRow, (short) 0, lpObj.getLpname()); | |
| 611 | 594 | |
| 612 | 595 | // 创建空白单元格,并设置字符串格式 |
| 613 | - XSSFCell xssfCell = null; | |
| 596 | + cell = excelPoiOperator.createBlankCell(wb, lpRow, (short) 1); | |
| 597 | + excelPoiOperator.setCellDataFormat(wb, cell, "@"); | |
| 614 | 598 | |
| 615 | - xssfCell = PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (1)); | |
| 616 | - PoiUtils.setStringStyleXSSFCellStyle(wb, xssfCell); | |
| 617 | - | |
| 618 | - xssfCell = PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (2)); | |
| 619 | - PoiUtils.setStringStyleXSSFCellStyle(wb, xssfCell); | |
| 599 | + cell = excelPoiOperator.createBlankCell(wb, lpRow, (short) 2); | |
| 600 | + excelPoiOperator.setCellDataFormat(wb, cell, "@"); | |
| 620 | 601 | |
| 621 | 602 | for (int j = 1; j <= groupCount; j++) { |
| 622 | - xssfCell = PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 1)); | |
| 623 | - PoiUtils.setStringStyleXSSFCellStyle(wb, xssfCell); | |
| 624 | - xssfCell = PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 2)); | |
| 625 | - PoiUtils.setStringStyleXSSFCellStyle(wb, xssfCell); | |
| 603 | + cell = excelPoiOperator.createBlankCell(wb, lpRow, (short) (j * 2 + 1)); | |
| 604 | + excelPoiOperator.setCellDataFormat(wb, cell, "@"); | |
| 605 | + cell = excelPoiOperator.createBlankCell(wb, lpRow, (short) (j * 2 + 2)); | |
| 606 | + excelPoiOperator.setCellDataFormat(wb, cell, "@"); | |
| 626 | 607 | } |
| 627 | 608 | |
| 628 | - xssfCell = PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (groupCount * 2 + 3)); | |
| 629 | - PoiUtils.setStringStyleXSSFCellStyle(wb, xssfCell); | |
| 630 | - xssfCell = PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (groupCount * 2 + 4)); | |
| 631 | - PoiUtils.setStringStyleXSSFCellStyle(wb, xssfCell); | |
| 609 | + cell = excelPoiOperator.createBlankCell(wb, lpRow, (short) (groupCount * 2 + 3)); | |
| 610 | + excelPoiOperator.setCellDataFormat(wb, cell, "@"); | |
| 611 | + cell = excelPoiOperator.createBlankCell(wb, lpRow, (short) (groupCount * 2 + 4)); | |
| 612 | + excelPoiOperator.setCellDataFormat(wb, cell, "@"); | |
| 632 | 613 | |
| 633 | 614 | for (int j = 0; j < lpObj.getBcObjList().size(); j++) { |
| 634 | 615 | BcObj bcObj = lpObj.getBcObjList().get(j); // 当前班次 |
| 635 | - Cell cell = null; // 待处理的单元格 | |
| 636 | 616 | |
| 637 | 617 | switch (bcObj.getBcType()) { |
| 638 | 618 | case BD: // 报到班次 |
| ... | ... | @@ -680,14 +660,16 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail |
| 680 | 660 | } |
| 681 | 661 | |
| 682 | 662 | // 路牌统计字段 |
| 683 | - PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 5), lpObj.getZlc()); | |
| 684 | - PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 6), lpObj.getYylc()); | |
| 685 | - PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 7), lpObj.getKslc()); | |
| 686 | - PoiUtils.createStringXSSFCell(wb, lpRow, (short) (groupCount * 2 + 8), | |
| 663 | + excelPoiOperator.createDoubleCell(wb, lpRow, (short) (groupCount * 2 + 5), lpObj.getZlc()); | |
| 664 | + excelPoiOperator.createDoubleCell(wb, lpRow, (short) (groupCount * 2 + 6), lpObj.getYylc()); | |
| 665 | + excelPoiOperator.createDoubleCell(wb, lpRow, (short) (groupCount * 2 + 7), lpObj.getKslc()); | |
| 666 | + cell = excelPoiOperator.createStringCell(wb, lpRow, (short) (groupCount * 2 + 8), | |
| 687 | 667 | String.format("%d%s%d", (int) (lpObj.getZgs() / 60), ":", (int) (lpObj.getZgs() % 60))); |
| 688 | - PoiUtils.createStringXSSFCell(wb, lpRow, (short) (groupCount * 2 + 9), | |
| 668 | + excelPoiOperator.setCellDataFormat(wb, cell, "[h]:mm"); | |
| 669 | + cell = excelPoiOperator.createStringCell(wb, lpRow, (short) (groupCount * 2 + 9), | |
| 689 | 670 | String.format("%d%s%d", (int) (lpObj.getYygs() / 60), ":", (int) (lpObj.getYygs() % 60))); |
| 690 | - PoiUtils.createIntegerXSSFCell(wb, lpRow, (short) (groupCount * 2 + 10), lpObj.getYybc()); | |
| 671 | + excelPoiOperator.setCellDataFormat(wb, cell, "[h]:mm"); | |
| 672 | + excelPoiOperator.createIntegerCell(wb, lpRow, (short) (groupCount * 2 + 10), lpObj.getYybc()); | |
| 691 | 673 | |
| 692 | 674 | } |
| 693 | 675 | |
| ... | ... | @@ -710,24 +692,33 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail |
| 710 | 692 | } |
| 711 | 693 | |
| 712 | 694 | @Override |
| 713 | - public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException { | |
| 695 | + public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos, DataToolsFileType type) throws ScheduleException { | |
| 714 | 696 | try { |
| 697 | + ExcelPoiOperator excelPoiOperator; | |
| 698 | + if (type == DataToolsFileType.XLS) { | |
| 699 | + excelPoiOperator = new Excel2003PoiOperator(); | |
| 700 | + } else if (type == DataToolsFileType.XLSX) { | |
| 701 | + excelPoiOperator = new Excel2007PoiOperator(); | |
| 702 | + } else { | |
| 703 | + throw new RuntimeException("未知的导出格式==>" + type); | |
| 704 | + } | |
| 705 | + | |
| 715 | 706 | // 使用POI,创建xlsx文件 |
| 716 | - XSSFWorkbook wb = new XSSFWorkbook(); | |
| 717 | - this.createDynamicTTinfoSheet(wb, dtInfos); | |
| 718 | - this.createDynamicTTinfoStatSheet(wb, dtInfos); | |
| 707 | + org.apache.poi.ss.usermodel.Workbook wb = excelPoiOperator.createWorkBook(); | |
| 708 | + this.createDynamicTTinfoSheet(wb, dtInfos, excelPoiOperator); | |
| 709 | + this.createDynamicTTinfoStatSheet(wb, dtInfos, excelPoiOperator); | |
| 719 | 710 | |
| 720 | 711 | // wb内存写入文件 |
| 721 | 712 | String filepath = dataToolsProperties.getFileoutputDir() + |
| 722 | 713 | File.separator + |
| 723 | 714 | "动态时刻表-" + |
| 724 | 715 | new DateTime().toString("yyyyMMddHHmmss") + ".xlsx"; |
| 725 | - FileOutputStream fileOut = new FileOutputStream(filepath); | |
| 726 | - wb.write(fileOut); | |
| 716 | + File file = new File(filepath); | |
| 717 | + excelPoiOperator.writeExcel(file, wb); | |
| 727 | 718 | |
| 728 | 719 | DataToolsFile dataToolsFile = new DataToolsFile(); |
| 729 | 720 | dataToolsFile.setFileType(DataToolsFileType.XLSX); |
| 730 | - dataToolsFile.setFile(new File(filepath)); | |
| 721 | + dataToolsFile.setFile(file); | |
| 731 | 722 | |
| 732 | 723 | return dataToolsFile; |
| 733 | 724 | ... | ... |
src/main/java/com/bsth/service/schedule/datatools/TTinfoDetailDynamicData.java
| ... | ... | @@ -2,6 +2,7 @@ package com.bsth.service.schedule.datatools; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.service.schedule.exception.ScheduleException; |
| 4 | 4 | import com.bsth.service.schedule.utils.DataToolsFile; |
| 5 | +import com.bsth.service.schedule.utils.DataToolsFileType; | |
| 5 | 6 | import com.fasterxml.jackson.annotation.JsonCreator; |
| 6 | 7 | import com.fasterxml.jackson.annotation.JsonValue; |
| 7 | 8 | |
| ... | ... | @@ -374,5 +375,5 @@ public interface TTinfoDetailDynamicData { |
| 374 | 375 | * @return |
| 375 | 376 | * @throws ScheduleException |
| 376 | 377 | */ |
| 377 | - public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException; | |
| 378 | -} | |
| 379 | 378 | \ No newline at end of file |
| 379 | + public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos, DataToolsFileType type) throws ScheduleException; | |
| 380 | +} | ... | ... |
src/main/java/com/bsth/service/schedule/impl/TTInfoDetailServiceImpl.java
| ... | ... | @@ -145,8 +145,8 @@ public class TTInfoDetailServiceImpl extends BServiceImpl<TTInfoDetail, Long> im |
| 145 | 145 | } |
| 146 | 146 | |
| 147 | 147 | @Override |
| 148 | - public DataToolsFile exportDynamicTTinfo(TTinfoDetailDynamicData.DTInfos dtInfos) throws ScheduleException { | |
| 149 | - return tTinfoDetailDynamicData.exportDynamicTTinfo(dtInfos); | |
| 148 | + public DataToolsFile exportDynamicTTinfo(TTinfoDetailDynamicData.DTInfos dtInfos, DataToolsFileType type) throws ScheduleException { | |
| 149 | + return tTinfoDetailDynamicData.exportDynamicTTinfo(dtInfos, type); | |
| 150 | 150 | } |
| 151 | 151 | |
| 152 | 152 | @Override | ... | ... |
src/main/resources/static/pages/base/timesmodel/gantt.html
| ... | ... | @@ -50,9 +50,31 @@ |
| 50 | 50 | <!--<div class="btn-group btn-group-devided checkbtn" data-toggle="buttons">--> |
| 51 | 51 | <!--<a class="btn btn-circle blue checkAdd" href="javascript:;" data-pjax><i class="fa fa-check"></i> 保存数据</a>--> |
| 52 | 52 | <!--</div>--> |
| 53 | - <div class="btn-group btn-group-devided exportbtn" data-toggle="buttons"> | |
| 54 | - <!--<a class="btn btn-circle blue exportAdd" href="javascript:;" data-pjax><i class="fa fa-file-excel-o"></i> 导出数据</a>--> | |
| 53 | + | |
| 54 | + <div class="btn-group exportbtn"> | |
| 55 | + <a href="javascript:" class="btn red btn-outline btn-circle exportAdd" data-toggle="dropdown"> | |
| 56 | + <i class="fa fa-file-excel-o"></i> | |
| 57 | + <span class="exportAddSpan">导出数据</span> | |
| 58 | + <i class="fa fa-angle-down"></i> | |
| 59 | + </a> | |
| 60 | + <ul class="dropdown-menu pull-right"> | |
| 61 | + <li> | |
| 62 | + <a href="javascript:" class="tool-action exportAddXls"> | |
| 63 | + <i class="fa fa-file-excel-o"></i> | |
| 64 | + Excel97 xls | |
| 65 | + </a> | |
| 66 | + </li> | |
| 67 | + <li> | |
| 68 | + <a href="javascript:" class="tool-action exportAddXlsx"> | |
| 69 | + <i class="fa fa-file-excel-o"></i> | |
| 70 | + Excel2007 xlsx | |
| 71 | + </a> | |
| 72 | + </li> | |
| 73 | + </ul> | |
| 55 | 74 | </div> |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 56 | 78 | <div class="btn-group checkbtn"> |
| 57 | 79 | <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown" aria-expanded="false"> |
| 58 | 80 | <i class="fa fa-cog"></i> | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/gantt.js
| ... | ... | @@ -83,7 +83,6 @@ |
| 83 | 83 | // TODO:绘制gantt图表 |
| 84 | 84 | // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置 |
| 85 | 85 | // TODO:CSMap.maxCar 之后要设定一下的 |
| 86 | - $(".exportbtn").html("<a class=\"btn btn-circle blue exportAdd\" href=\"javascript:;\" data-pjax><i class=\"fa fa-file-excel-o\"></i> 导出数据</a>"); | |
| 87 | 86 | data = Main_v2.BXPplaceClassesTime03(_paramObj, CSMap.maxCar); |
| 88 | 87 | Main_v2.exportDataConfig(data.aInternalLpObj); |
| 89 | 88 | } | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/v2/core/InternalScheduleObj.js
| ... | ... | @@ -1548,6 +1548,8 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { |
| 1548 | 1548 | oLp.fnGetBcChainInfo(0)["e_q"], |
| 1549 | 1549 | oLp.fnGetBcChainInfo(0)["e_b"] |
| 1550 | 1550 | ); |
| 1551 | + oEndBc.fnSetIsLastBc(false); // 有可能最后一个班次是吃饭班次,重置 | |
| 1552 | + oEndBc.fnSetEatTime(0); // 有可能最后一个班次是吃饭班次,重置 | |
| 1551 | 1553 | aOtherBc.push(_factory.createBcObj( |
| 1552 | 1554 | oLp, "in", true, 1, |
| 1553 | 1555 | oEndBc.getArrTimeObj(), | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/v2/main_v2.js
| ... | ... | @@ -821,7 +821,7 @@ var Main_v2 = function() { |
| 821 | 821 | * @param aInternalLpObj 内部路牌对象列表 |
| 822 | 822 | */ |
| 823 | 823 | exportDataConfig: function(aInternalLpObj) { |
| 824 | - $('.exportAdd').on('click',function() { | |
| 824 | + $('.exportAddXls').on('click', function() { | |
| 825 | 825 | var aInfos = { |
| 826 | 826 | "lpObjList": _funCalcuExportData_lpObjList(aInternalLpObj), // 路牌班次信息列表 |
| 827 | 827 | "statInfoList": _funCalcuExportData_statInfoList(aInternalLpObj) // 统计项目列表 |
| ... | ... | @@ -830,12 +830,12 @@ var Main_v2 = function() { |
| 830 | 830 | console.log(aInfos); |
| 831 | 831 | |
| 832 | 832 | $(".exportAdd").addClass("disabled"); |
| 833 | - $(".exportAdd").html("<i class=\"fa fa-spinner\" aria-hidden=\"true\"></i>" + " 正在导出..."); | |
| 833 | + $(".exportAddSpan").html("正在导出..."); | |
| 834 | 834 | |
| 835 | 835 | // 提交 |
| 836 | 836 | $.ajax({ |
| 837 | 837 | type: 'POST', |
| 838 | - url: "/tidc/exportDTDFile", | |
| 838 | + url: "/tidc/exportDTDFile/xls", | |
| 839 | 839 | dataType: 'binary', |
| 840 | 840 | contentType: "application/json", |
| 841 | 841 | data: JSON.stringify(aInfos), |
| ... | ... | @@ -843,16 +843,48 @@ var Main_v2 = function() { |
| 843 | 843 | Main_v2.downloadFile(data, "application/octet-stream", "时刻表信息.xls"); |
| 844 | 844 | |
| 845 | 845 | $(".exportAdd").removeClass("disabled"); |
| 846 | - $(".exportAdd").html("<i class=\"fa fa-file-excel-o\"></i>" + " 导出数据"); | |
| 846 | + $(".exportAddSpan").html(" 导出数据"); | |
| 847 | 847 | }, |
| 848 | 848 | error: function(xhr, type){ |
| 849 | 849 | alert('错误:TODO'); |
| 850 | 850 | |
| 851 | 851 | $(".exportAdd").removeClass("disabled"); |
| 852 | - $(".exportAdd").html("<i class=\"fa fa-file-excel-o\"></i>" + " 导出数据"); | |
| 852 | + $(".exportAddSpan").html(" 导出数据"); | |
| 853 | 853 | } |
| 854 | 854 | }); |
| 855 | + }); | |
| 856 | + | |
| 857 | + $('.exportAddXlsx').on('click', function() { | |
| 858 | + var aInfos = { | |
| 859 | + "lpObjList": _funCalcuExportData_lpObjList(aInternalLpObj), // 路牌班次信息列表 | |
| 860 | + "statInfoList": _funCalcuExportData_statInfoList(aInternalLpObj) // 统计项目列表 | |
| 861 | + }; | |
| 862 | + | |
| 863 | + console.log(aInfos); | |
| 864 | + | |
| 865 | + $(".exportAdd").addClass("disabled"); | |
| 866 | + $(".exportAddSpan").html("正在导出..."); | |
| 867 | + | |
| 868 | + // 提交 | |
| 869 | + $.ajax({ | |
| 870 | + type: 'POST', | |
| 871 | + url: "/tidc/exportDTDFile/xlsx", | |
| 872 | + dataType: 'binary', | |
| 873 | + contentType: "application/json", | |
| 874 | + data: JSON.stringify(aInfos), | |
| 875 | + success: function(data){ | |
| 876 | + Main_v2.downloadFile(data, "application/octet-stream", "时刻表信息.xlsx"); | |
| 855 | 877 | |
| 878 | + $(".exportAdd").removeClass("disabled"); | |
| 879 | + $(".exportAddSpan").html(" 导出数据"); | |
| 880 | + }, | |
| 881 | + error: function(xhr, type){ | |
| 882 | + alert('错误:TODO'); | |
| 883 | + | |
| 884 | + $(".exportAdd").removeClass("disabled"); | |
| 885 | + $(".exportAddSpan").html(" 导出数据"); | |
| 886 | + } | |
| 887 | + }); | |
| 856 | 888 | }); |
| 857 | 889 | }, |
| 858 | 890 | ... | ... |
src/main/resources/static/pages/base/timesmodel/paramadd.html
| 1 | 1 | <!-- 统计数据 --> |
| 2 | +<style> | |
| 3 | + .form-control:focus { | |
| 4 | + border-color: #53ced9; | |
| 5 | + } | |
| 6 | + .tagsDiv { | |
| 7 | + border: 1px solid #c2cad8; | |
| 8 | + margin-left: 15px; | |
| 9 | + padding: 4px 15px 4px 15px; | |
| 10 | + width: 50%; | |
| 11 | + } | |
| 12 | +</style> | |
| 2 | 13 | <div class="modal fade" id="paramadd_mobal" tabindex="-1" role="basic" aria-hidden="true"> |
| 3 | - <div class="modal-dialog" style="margin-left: 200px;"> | |
| 4 | - <div class="modal-content" style="width: 900px;"> | |
| 14 | + <div class="modal-dialog" style="margin-left: 100px;"> | |
| 15 | + <div class="modal-content" style="width: 1000px;"> | |
| 5 | 16 | <div class="modal-header"> |
| 6 | 17 | <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> |
| 7 | 18 | <h4 class="modal-title">参数数据 </h4> |
| ... | ... | @@ -318,6 +329,54 @@ |
| 318 | 329 | </div> |
| 319 | 330 | </div> |
| 320 | 331 | |
| 332 | + <div class="form-group"> | |
| 333 | + <div class="col-md-6"> | |
| 334 | + <label class="control-label col-md-5"><span class="required"> * </span>停站类型 :</label> | |
| 335 | + <div class="col-md-5 tagsDiv"> | |
| 336 | + <div class="row" style="margin-left: 15px;"> | |
| 337 | + <input type="text" value="{{map.stt}}" name="stt" id="stoptype_tagsinput" style="display: none;"> | |
| 338 | + </div> | |
| 339 | + | |
| 340 | + <div class="row" style="margin-top: 10px;"> | |
| 341 | + <label class="control-label col-md-4">停站类型:</label> | |
| 342 | + <div class="col-md-8"> | |
| 343 | + <select name="stopType" class="form-control" id="stopType_id"> | |
| 344 | + <option value="">-- 请选择停站类型 --</option> | |
| 345 | + <option value="0">主站停站</option> | |
| 346 | + <option value="1">双向停站</option> | |
| 347 | + </select> | |
| 348 | + </div> | |
| 349 | + </div> | |
| 350 | + | |
| 351 | + <div class="row" style="margin-top: 10px;"> | |
| 352 | + <label class="control-label col-md-4">主站:</label> | |
| 353 | + <div class="col-md-8"> | |
| 354 | + <select name="masterStop" class="form-control" id="masterStop_id"> | |
| 355 | + <option value="">请选择...</option> | |
| 356 | + <option value="0">{{map.startStationName}}</option> | |
| 357 | + <option value="1">{{map.endStationName}}</option> | |
| 358 | + </select> | |
| 359 | + </div> | |
| 360 | + </div> | |
| 361 | + | |
| 362 | + <div class="row" style="margin-top: 10px;margin-left: 116px;"> | |
| 363 | + <a href="javascript:" class="btn red" id="stoptype_tagsinput_add">添加</a> | |
| 364 | + </div> | |
| 365 | + </div> | |
| 366 | + | |
| 367 | + </div> | |
| 368 | + | |
| 369 | + <div class="col-md-6"> | |
| 370 | + <label class="control-label col-md-5"> | |
| 371 | + <span class="required"> * </span> 建议高峰配车数 :</label> | |
| 372 | + <div class="col-md-5"> | |
| 373 | + <input type="text" class="form-control" placeholder="车辆数" name="gfjypcs" | |
| 374 | + id="gfjypcsInput" min="1" value="{{map.gfjypcs}}"> | |
| 375 | + </div> | |
| 376 | + </div> | |
| 377 | + | |
| 378 | + </div> | |
| 379 | + | |
| 321 | 380 | <!-- 隐藏字段-时间 --> |
| 322 | 381 | <input type="hidden" name="skbName" value="{{map.skbName}}" id="skbName_id"/> |
| 323 | 382 | <input type="hidden" name="skbmc" value="{{map.skbmc}}" id="skbmc_id"/> |
| ... | ... | @@ -423,6 +482,8 @@ |
| 423 | 482 | // 1、 获取表单内容,并序列化 |
| 424 | 483 | var fp = form.serializeJSON(); |
| 425 | 484 | |
| 485 | + console.log(fp); | |
| 486 | + | |
| 426 | 487 | // 2、重新刷新表单数据 |
| 427 | 488 | var ganttMap = JSON.parse(window.localStorage.Gantt_AgursData); |
| 428 | 489 | var key; |
| ... | ... | @@ -431,6 +492,8 @@ |
| 431 | 492 | if (ganttMap[key] != fp[key]) { |
| 432 | 493 | ganttMap[key] = fp[key]; |
| 433 | 494 | } |
| 495 | + } else { | |
| 496 | + ganttMap[key] = fp[key]; | |
| 434 | 497 | } |
| 435 | 498 | } |
| 436 | 499 | window.localStorage.setItem("Gantt_AgursData",JSON.stringify(ganttMap)); |
| ... | ... | @@ -440,7 +503,7 @@ |
| 440 | 503 | var paramObj = pp[0]; |
| 441 | 504 | var dataMap = pp[1]; |
| 442 | 505 | var csMap = getCSMap(paramObj); |
| 443 | - console.log(graph); | |
| 506 | + // console.log(graph); | |
| 444 | 507 | var data = Main_v2.BXPplaceClassesTime03(paramObj, csMap.maxCar); |
| 445 | 508 | Main_v2.exportDataConfig(data.aInternalLpObj); |
| 446 | 509 | |
| ... | ... | @@ -491,6 +554,8 @@ |
| 491 | 554 | opt.push("<option value='1'>" + d.stationName + "</option>"); |
| 492 | 555 | } |
| 493 | 556 | }); |
| 557 | + initTagsinput(opt.join(",")); | |
| 558 | + | |
| 494 | 559 | opt.push("<option value='allYes'>起终点站都可以</option>"); |
| 495 | 560 | $('#cfdd_id').html(opt.join("")); |
| 496 | 561 | $('#cfdd_id').val(param.cfdd); |
| ... | ... | @@ -524,10 +589,62 @@ |
| 524 | 589 | $('#lateStartTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'}); |
| 525 | 590 | $('#lateEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'}); |
| 526 | 591 | |
| 592 | + }); | |
| 593 | + }); | |
| 594 | + | |
| 595 | + function initTagsinput(htmlStr) { | |
| 596 | + $('#masterStop_id').html(htmlStr); | |
| 597 | + | |
| 598 | + var elt = $('#stoptype_tagsinput'); | |
| 599 | + var value = elt.val(); | |
| 600 | + var stoptype = value.split("/")[0]; | |
| 601 | + var masterstop = value.split("/")[1]; | |
| 602 | + | |
| 603 | + $('#stopType_id').val(stoptype); | |
| 604 | + $('#masterStop_id').val(masterstop); | |
| 527 | 605 | |
| 606 | + elt.tagsinput({ | |
| 607 | + tagClass: function(item) { | |
| 608 | + return 'label label-danger label-important'; | |
| 609 | + }, | |
| 610 | + itemValue: 'value', | |
| 611 | + itemText: 'text' | |
| 612 | + }); | |
| 528 | 613 | |
| 614 | + $('#stoptype_tagsinput').on('beforeItemAdd', function(event) { | |
| 615 | + // TODO:这里可以做一些逻辑判定 | |
| 529 | 616 | }); |
| 530 | - }); | |
| 617 | + | |
| 618 | + $('#stoptype_tagsinput_add').on('click', function(){ | |
| 619 | + var stoptype = $("#stopType_id").val(); | |
| 620 | + var masterstop = $("#masterStop_id").val(); | |
| 621 | + var masterstop_text = $("#masterStop_id option:selected").text(); | |
| 622 | + | |
| 623 | + if (stoptype && stoptype != "") { | |
| 624 | + if (stoptype == "0" && masterstop && masterstop != "") { | |
| 625 | + elt.tagsinput('add', { | |
| 626 | + "value": stoptype + '/' + masterstop, | |
| 627 | + "text": "主站停站" + "/" + masterstop_text | |
| 628 | + }); | |
| 629 | + } else { | |
| 630 | + elt.tagsinput('add', { | |
| 631 | + "value": 1, | |
| 632 | + "text": "双向停站" | |
| 633 | + }); | |
| 634 | + } | |
| 635 | + } | |
| 636 | + }); | |
| 637 | + | |
| 638 | + if (stoptype && stoptype != "") { | |
| 639 | + elt.tagsinput('add', { | |
| 640 | + "value": stoptype + '/' + masterstop, | |
| 641 | + "text": | |
| 642 | + $("#stopType_id option:selected").text() + "/" + | |
| 643 | + $("#masterStop_id option:selected").text() | |
| 644 | + }); | |
| 645 | + } | |
| 646 | + | |
| 647 | + } | |
| 531 | 648 | |
| 532 | 649 | function getMinDate(d1,d2) { |
| 533 | 650 | // 1、定义返回字符串. | ... | ... |