Commit df4d48b3fe074208bc2234e27d5dd8ff22c175aa

Authored by 徐烜
1 parent 96c63262

时刻表v2.7.10

1、修改fnCalcuOtherBc方法,如果最后一班次是吃饭班次需要删除
2、修改重新生成页面,添加主站副站参数
3、修改后台动态时刻表导出功能,可以导出Excel97 xls和Excel2007 xlsx两个版本的excel文件
src/main/java/com/bsth/controller/schedule/core/TTInfoDetailController.java
@@ -8,6 +8,7 @@ import com.bsth.service.schedule.datatools.TTInfoDetailForEdit; @@ -8,6 +8,7 @@ import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;
8 import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData; 8 import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData;
9 import com.bsth.service.schedule.timetable.ExcelFormatType; 9 import com.bsth.service.schedule.timetable.ExcelFormatType;
10 import com.bsth.service.schedule.utils.DataToolsFile; 10 import com.bsth.service.schedule.utils.DataToolsFile;
  11 +import com.bsth.service.schedule.utils.DataToolsFileType;
11 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.web.bind.annotation.*; 13 import org.springframework.web.bind.annotation.*;
13 14
@@ -128,11 +129,19 @@ public class TTInfoDetailController extends BController<TTInfoDetail, Long> { @@ -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 public void exportFile( 133 public void exportFile(
133 - @RequestBody TTinfoDetailDynamicData.DTInfos dtInfos, 134 + @RequestBody TTinfoDetailDynamicData.DTInfos dtInfos, @PathVariable("type") String type,
134 HttpServletResponse response) throws Exception { 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 response.setHeader("content-type", "application/octet-stream"); 146 response.setHeader("content-type", "application/octet-stream");
138 response.setHeader("Content-Disposition", "attachment; filename=" + dataToolsFile.getFile().getName()); 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 +6,7 @@ import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData;
6 import com.bsth.service.schedule.exception.ScheduleException; 6 import com.bsth.service.schedule.exception.ScheduleException;
7 import com.bsth.service.schedule.timetable.ExcelFormatType; 7 import com.bsth.service.schedule.timetable.ExcelFormatType;
8 import com.bsth.service.schedule.utils.DataToolsFile; 8 import com.bsth.service.schedule.utils.DataToolsFile;
  9 +import com.bsth.service.schedule.utils.DataToolsFileType;
9 10
10 import java.util.List; 11 import java.util.List;
11 import java.util.Map; 12 import java.util.Map;
@@ -30,7 +31,7 @@ public interface TTInfoDetailService extends BService<TTInfoDetail, Long> { @@ -30,7 +31,7 @@ public interface TTInfoDetailService extends BService<TTInfoDetail, Long> {
30 * @return 31 * @return
31 * @throws ScheduleException 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,10 +14,6 @@ import org.apache.commons.lang3.StringUtils;
14 import org.apache.poi.ss.usermodel.Cell; 14 import org.apache.poi.ss.usermodel.Cell;
15 import org.apache.poi.ss.usermodel.Row; 15 import org.apache.poi.ss.usermodel.Row;
16 import org.apache.poi.ss.util.CellRangeAddress; 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 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 17 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
22 import org.joda.time.DateTime; 18 import org.joda.time.DateTime;
23 import org.joda.time.LocalTime; 19 import org.joda.time.LocalTime;
@@ -31,7 +27,6 @@ import org.springframework.stereotype.Service; @@ -31,7 +27,6 @@ import org.springframework.stereotype.Service;
31 27
32 import java.awt.*; 28 import java.awt.*;
33 import java.io.File; 29 import java.io.File;
34 -import java.io.FileOutputStream;  
35 import java.io.PrintWriter; 30 import java.io.PrintWriter;
36 import java.io.StringWriter; 31 import java.io.StringWriter;
37 import java.util.*; 32 import java.util.*;
@@ -438,14 +433,14 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -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 //-------------------------------- 1、路牌班次数据 -------------------------------// 439 //-------------------------------- 1、路牌班次数据 -------------------------------//
445 List<LpObj> lpObjList = dtInfos.getLpObjList(); 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 if (lpObjList.size() == 0) { 444 if (lpObjList.size() == 0) {
450 throw new RuntimeException("没有班次数据!"); 445 throw new RuntimeException("没有班次数据!");
451 } 446 }
@@ -455,40 +450,36 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -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 StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1()); 455 StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1());
460 StationRoute station2 = stationRouteService.findById(lpObjList.get(1).getStationRouteId2()); 456 StationRoute station2 = stationRouteService.findById(lpObjList.get(1).getStationRouteId2());
461 for (int i = 0; i < groupCount; i++) { 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 for (int i = 0; i < lpObjList.size(); i++) { 465 for (int i = 0; i < lpObjList.size(); i++) {
474 LpObj lpObj = lpObjList.get(i); 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 for (int j = 0; j < groupCount; j++) { 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 for (BcObj bcObj : lpObj.getBcObjList()) { 473 for (BcObj bcObj : lpObj.getBcObjList()) {
482 if (bcObj.getBcType() == BcType.NORMAL) { 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 lpObj.getZgs() / 60); 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 lpObj.getZbc()); 483 lpObj.getZbc());
493 } 484 }
494 485
@@ -514,9 +505,9 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -514,9 +505,9 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
514 505
515 int startrow = lpObjList.size() + 3; 506 int startrow = lpObjList.size() + 3;
516 for (int i = startrow; i <= startrow + 22; i++) { 507 for (int i = startrow; i <= startrow + 22; i++) {
517 - XSSFRow xssfRow = sheet.createRow(i); 508 + Row row = excelPoiOperator.createSheetRow(sheet, i);
518 for (int j = 0; j < 10; j++) { 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,27 +528,27 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
537 StatInfo statInfo = statInfos.get(i); 528 StatInfo statInfo = statInfos.get(i);
538 529
539 // 1、统计序号 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 sheet.getRow(startrow + 2 + i).getCell(0).setCellValue(i); 532 sheet.getRow(startrow + 2 + i).getCell(0).setCellValue(i);
542 533
543 // 2、统计项目 534 // 2、统计项目
544 sheet.getRow(startrow + 2 + i).getCell(1).setCellValue(statInfo.getStatItem()); 535 sheet.getRow(startrow + 2 + i).getCell(1).setCellValue(statInfo.getStatItem());
545 536
546 // 3、统计数值 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 sheet.getRow(startrow + 2 + i).getCell(9).setCellValue(statInfo.getStatValue()); 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 //-------------------------------- 1、路牌班次数据 -------------------------------// 547 //-------------------------------- 1、路牌班次数据 -------------------------------//
557 List<LpObj> lpObjList = dtInfos.getLpObjList(); 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 if (lpObjList.size() == 0) { 552 if (lpObjList.size() == 0) {
562 throw new RuntimeException("没有班次数据!"); 553 throw new RuntimeException("没有班次数据!");
563 } 554 }
@@ -567,72 +558,61 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -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 StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1()); 567 StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1());
572 StationRoute station2 = stationRouteService.findById(lpObjList.get(1).getStationRouteId2()); 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 for (int i = 1; i <= groupCount; i++) { 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 // 1个分班进场班次插入到前面的班次 575 // 1个分班进场班次插入到前面的班次
586 // 后面添加两个班次,1个到场班次,1个离场班次 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 for (int i = 0; i < lpObjList.size(); i++) { 590 for (int i = 0; i < lpObjList.size(); i++) {
608 LpObj lpObj = lpObjList.get(i); 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 for (int j = 1; j <= groupCount; j++) { 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 for (int j = 0; j < lpObj.getBcObjList().size(); j++) { 614 for (int j = 0; j < lpObj.getBcObjList().size(); j++) {
634 BcObj bcObj = lpObj.getBcObjList().get(j); // 当前班次 615 BcObj bcObj = lpObj.getBcObjList().get(j); // 当前班次
635 - Cell cell = null; // 待处理的单元格  
636 616
637 switch (bcObj.getBcType()) { 617 switch (bcObj.getBcType()) {
638 case BD: // 报到班次 618 case BD: // 报到班次
@@ -680,14 +660,16 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -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 String.format("%d%s%d", (int) (lpObj.getZgs() / 60), ":", (int) (lpObj.getZgs() % 60))); 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 String.format("%d%s%d", (int) (lpObj.getYygs() / 60), ":", (int) (lpObj.getYygs() % 60))); 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,24 +692,33 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
710 } 692 }
711 693
712 @Override 694 @Override
713 - public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException { 695 + public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos, DataToolsFileType type) throws ScheduleException {
714 try { 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 // 使用POI,创建xlsx文件 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 // wb内存写入文件 711 // wb内存写入文件
721 String filepath = dataToolsProperties.getFileoutputDir() + 712 String filepath = dataToolsProperties.getFileoutputDir() +
722 File.separator + 713 File.separator +
723 "动态时刻表-" + 714 "动态时刻表-" +
724 new DateTime().toString("yyyyMMddHHmmss") + ".xlsx"; 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 DataToolsFile dataToolsFile = new DataToolsFile(); 719 DataToolsFile dataToolsFile = new DataToolsFile();
729 dataToolsFile.setFileType(DataToolsFileType.XLSX); 720 dataToolsFile.setFileType(DataToolsFileType.XLSX);
730 - dataToolsFile.setFile(new File(filepath)); 721 + dataToolsFile.setFile(file);
731 722
732 return dataToolsFile; 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,6 +2,7 @@ package com.bsth.service.schedule.datatools;
2 2
3 import com.bsth.service.schedule.exception.ScheduleException; 3 import com.bsth.service.schedule.exception.ScheduleException;
4 import com.bsth.service.schedule.utils.DataToolsFile; 4 import com.bsth.service.schedule.utils.DataToolsFile;
  5 +import com.bsth.service.schedule.utils.DataToolsFileType;
5 import com.fasterxml.jackson.annotation.JsonCreator; 6 import com.fasterxml.jackson.annotation.JsonCreator;
6 import com.fasterxml.jackson.annotation.JsonValue; 7 import com.fasterxml.jackson.annotation.JsonValue;
7 8
@@ -374,5 +375,5 @@ public interface TTinfoDetailDynamicData { @@ -374,5 +375,5 @@ public interface TTinfoDetailDynamicData {
374 * @return 375 * @return
375 * @throws ScheduleException 376 * @throws ScheduleException
376 */ 377 */
377 - public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException;  
378 -}  
379 \ No newline at end of file 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&lt;TTInfoDetail, Long&gt; im @@ -145,8 +145,8 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
145 } 145 }
146 146
147 @Override 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 @Override 152 @Override
src/main/resources/static/pages/base/timesmodel/gantt.html
@@ -50,9 +50,31 @@ @@ -50,9 +50,31 @@
50 <!--<div class="btn-group btn-group-devided checkbtn" data-toggle="buttons">--> 50 <!--<div class="btn-group btn-group-devided checkbtn" data-toggle="buttons">-->
51 <!--<a class="btn btn-circle blue checkAdd" href="javascript:;" data-pjax><i class="fa fa-check"></i> 保存数据</a>--> 51 <!--<a class="btn btn-circle blue checkAdd" href="javascript:;" data-pjax><i class="fa fa-check"></i> 保存数据</a>-->
52 <!--</div>--> 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 </div> 74 </div>
  75 +
  76 +
  77 +
56 <div class="btn-group checkbtn"> 78 <div class="btn-group checkbtn">
57 <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown" aria-expanded="false"> 79 <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown" aria-expanded="false">
58 <i class="fa fa-cog"></i> 80 <i class="fa fa-cog"></i>
src/main/resources/static/pages/base/timesmodel/js/gantt.js
@@ -83,7 +83,6 @@ @@ -83,7 +83,6 @@
83 // TODO:绘制gantt图表 83 // TODO:绘制gantt图表
84 // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置 84 // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置
85 // TODO:CSMap.maxCar 之后要设定一下的 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 data = Main_v2.BXPplaceClassesTime03(_paramObj, CSMap.maxCar); 86 data = Main_v2.BXPplaceClassesTime03(_paramObj, CSMap.maxCar);
88 Main_v2.exportDataConfig(data.aInternalLpObj); 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,6 +1548,8 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) {
1548 oLp.fnGetBcChainInfo(0)["e_q"], 1548 oLp.fnGetBcChainInfo(0)["e_q"],
1549 oLp.fnGetBcChainInfo(0)["e_b"] 1549 oLp.fnGetBcChainInfo(0)["e_b"]
1550 ); 1550 );
  1551 + oEndBc.fnSetIsLastBc(false); // 有可能最后一个班次是吃饭班次,重置
  1552 + oEndBc.fnSetEatTime(0); // 有可能最后一个班次是吃饭班次,重置
1551 aOtherBc.push(_factory.createBcObj( 1553 aOtherBc.push(_factory.createBcObj(
1552 oLp, "in", true, 1, 1554 oLp, "in", true, 1,
1553 oEndBc.getArrTimeObj(), 1555 oEndBc.getArrTimeObj(),
src/main/resources/static/pages/base/timesmodel/js/v2/main_v2.js
@@ -821,7 +821,7 @@ var Main_v2 = function() { @@ -821,7 +821,7 @@ var Main_v2 = function() {
821 * @param aInternalLpObj 内部路牌对象列表 821 * @param aInternalLpObj 内部路牌对象列表
822 */ 822 */
823 exportDataConfig: function(aInternalLpObj) { 823 exportDataConfig: function(aInternalLpObj) {
824 - $('.exportAdd').on('click',function() { 824 + $('.exportAddXls').on('click', function() {
825 var aInfos = { 825 var aInfos = {
826 "lpObjList": _funCalcuExportData_lpObjList(aInternalLpObj), // 路牌班次信息列表 826 "lpObjList": _funCalcuExportData_lpObjList(aInternalLpObj), // 路牌班次信息列表
827 "statInfoList": _funCalcuExportData_statInfoList(aInternalLpObj) // 统计项目列表 827 "statInfoList": _funCalcuExportData_statInfoList(aInternalLpObj) // 统计项目列表
@@ -830,12 +830,12 @@ var Main_v2 = function() { @@ -830,12 +830,12 @@ var Main_v2 = function() {
830 console.log(aInfos); 830 console.log(aInfos);
831 831
832 $(".exportAdd").addClass("disabled"); 832 $(".exportAdd").addClass("disabled");
833 - $(".exportAdd").html("<i class=\"fa fa-spinner\" aria-hidden=\"true\"></i>" + " 正在导出..."); 833 + $(".exportAddSpan").html("正在导出...");
834 834
835 // 提交 835 // 提交
836 $.ajax({ 836 $.ajax({
837 type: 'POST', 837 type: 'POST',
838 - url: "/tidc/exportDTDFile", 838 + url: "/tidc/exportDTDFile/xls",
839 dataType: 'binary', 839 dataType: 'binary',
840 contentType: "application/json", 840 contentType: "application/json",
841 data: JSON.stringify(aInfos), 841 data: JSON.stringify(aInfos),
@@ -843,16 +843,48 @@ var Main_v2 = function() { @@ -843,16 +843,48 @@ var Main_v2 = function() {
843 Main_v2.downloadFile(data, "application/octet-stream", "时刻表信息.xls"); 843 Main_v2.downloadFile(data, "application/octet-stream", "时刻表信息.xls");
844 844
845 $(".exportAdd").removeClass("disabled"); 845 $(".exportAdd").removeClass("disabled");
846 - $(".exportAdd").html("<i class=\"fa fa-file-excel-o\"></i>" + " 导出数据"); 846 + $(".exportAddSpan").html(" 导出数据");
847 }, 847 },
848 error: function(xhr, type){ 848 error: function(xhr, type){
849 alert('错误:TODO'); 849 alert('错误:TODO');
850 850
851 $(".exportAdd").removeClass("disabled"); 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 <div class="modal fade" id="paramadd_mobal" tabindex="-1" role="basic" aria-hidden="true"> 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 <div class="modal-header"> 16 <div class="modal-header">
6 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> 17 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
7 <h4 class="modal-title">参数数据 </h4> 18 <h4 class="modal-title">参数数据 </h4>
@@ -318,6 +329,54 @@ @@ -318,6 +329,54 @@
318 </div> 329 </div>
319 </div> 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 <input type="hidden" name="skbName" value="{{map.skbName}}" id="skbName_id"/> 381 <input type="hidden" name="skbName" value="{{map.skbName}}" id="skbName_id"/>
323 <input type="hidden" name="skbmc" value="{{map.skbmc}}" id="skbmc_id"/> 382 <input type="hidden" name="skbmc" value="{{map.skbmc}}" id="skbmc_id"/>
@@ -423,6 +482,8 @@ @@ -423,6 +482,8 @@
423 // 1、 获取表单内容,并序列化 482 // 1、 获取表单内容,并序列化
424 var fp = form.serializeJSON(); 483 var fp = form.serializeJSON();
425 484
  485 + console.log(fp);
  486 +
426 // 2、重新刷新表单数据 487 // 2、重新刷新表单数据
427 var ganttMap = JSON.parse(window.localStorage.Gantt_AgursData); 488 var ganttMap = JSON.parse(window.localStorage.Gantt_AgursData);
428 var key; 489 var key;
@@ -431,6 +492,8 @@ @@ -431,6 +492,8 @@
431 if (ganttMap[key] != fp[key]) { 492 if (ganttMap[key] != fp[key]) {
432 ganttMap[key] = fp[key]; 493 ganttMap[key] = fp[key];
433 } 494 }
  495 + } else {
  496 + ganttMap[key] = fp[key];
434 } 497 }
435 } 498 }
436 window.localStorage.setItem("Gantt_AgursData",JSON.stringify(ganttMap)); 499 window.localStorage.setItem("Gantt_AgursData",JSON.stringify(ganttMap));
@@ -440,7 +503,7 @@ @@ -440,7 +503,7 @@
440 var paramObj = pp[0]; 503 var paramObj = pp[0];
441 var dataMap = pp[1]; 504 var dataMap = pp[1];
442 var csMap = getCSMap(paramObj); 505 var csMap = getCSMap(paramObj);
443 - console.log(graph); 506 + // console.log(graph);
444 var data = Main_v2.BXPplaceClassesTime03(paramObj, csMap.maxCar); 507 var data = Main_v2.BXPplaceClassesTime03(paramObj, csMap.maxCar);
445 Main_v2.exportDataConfig(data.aInternalLpObj); 508 Main_v2.exportDataConfig(data.aInternalLpObj);
446 509
@@ -491,6 +554,8 @@ @@ -491,6 +554,8 @@
491 opt.push("<option value='1'>" + d.stationName + "</option>"); 554 opt.push("<option value='1'>" + d.stationName + "</option>");
492 } 555 }
493 }); 556 });
  557 + initTagsinput(opt.join(","));
  558 +
494 opt.push("<option value='allYes'>起终点站都可以</option>"); 559 opt.push("<option value='allYes'>起终点站都可以</option>");
495 $('#cfdd_id').html(opt.join("")); 560 $('#cfdd_id').html(opt.join(""));
496 $('#cfdd_id').val(param.cfdd); 561 $('#cfdd_id').val(param.cfdd);
@@ -524,10 +589,62 @@ @@ -524,10 +589,62 @@
524 $('#lateStartTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'}); 589 $('#lateStartTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
525 $('#lateEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'}); 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 function getMinDate(d1,d2) { 649 function getMinDate(d1,d2) {
533 // 1、定义返回字符串. 650 // 1、定义返回字符串.