Commit c1b02778c94a5a39e70c21f5fdb9f4c7684f97d6

Authored by 徐烜
1 parent 02fb2440

时刻表v2.7.7

1、修改fnAdjustGfbc的bug,处理中间班次的问题
2、添加大功能,可以导入自动生成时刻表的导出excel的sheet
src/main/java/com/bsth/controller/schedule/core/TTInfoDetailController.java
... ... @@ -6,6 +6,7 @@ import com.bsth.entity.schedule.TTInfoDetail;
6 6 import com.bsth.service.schedule.TTInfoDetailService;
7 7 import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;
8 8 import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData;
  9 +import com.bsth.service.schedule.timetable.ExcelFormatType;
9 10 import com.bsth.service.schedule.utils.DataToolsFile;
10 11 import org.springframework.beans.factory.annotation.Autowired;
11 12 import org.springframework.web.bind.annotation.*;
... ... @@ -41,13 +42,14 @@ public class TTInfoDetailController extends BController<TTInfoDetail, Long> {
41 42 */
42 43 @RequestMapping(value = "/validate/sheet", method = RequestMethod.POST)
43 44 public Map<String, Object> validate_sheet(
44   - String filename, String sheetname, Integer lineid, String linename, Integer lineversion) {
  45 + String filename, String sheetname, Integer lineid, String linename, Integer lineversion, String excelFormatType) {
45 46 Map<String, Object> rtn = new HashMap<>();
46 47 try {
47 48 if (lineversion == null) {
48 49 throw new Exception("线路版本未知");
49 50 }
50   - ttInfoDetailService.validateExcelSheet(filename, sheetname, lineid, linename, lineversion);
  51 + ttInfoDetailService.validateExcelSheet(filename, sheetname, lineid, linename, lineversion,
  52 + ExcelFormatType.getEnum(excelFormatType));
51 53 rtn.put("status", ResponseCode.SUCCESS);
52 54 } catch (Exception exp) {
53 55 rtn.put("status", ResponseCode.ERROR);
... ...
src/main/java/com/bsth/service/schedule/TTInfoDetailService.java
... ... @@ -4,6 +4,7 @@ import com.bsth.entity.schedule.TTInfoDetail;
4 4 import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;
5 5 import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData;
6 6 import com.bsth.service.schedule.exception.ScheduleException;
  7 +import com.bsth.service.schedule.timetable.ExcelFormatType;
7 8 import com.bsth.service.schedule.utils.DataToolsFile;
8 9  
9 10 import java.util.List;
... ... @@ -45,13 +46,15 @@ public interface TTInfoDetailService extends BService&lt;TTInfoDetail, Long&gt; {
45 46 * @param sheetname sheet名字
46 47 * @param lineid 线路id
47 48 * @param lineversion 线路版本
  49 + * @param excelFormatType 版本
48 50 */
49 51 void validateExcelSheet(
50 52 String filename,
51 53 String sheetname,
52 54 Integer lineid,
53 55 String linename,
54   - Integer lineversion) throws ScheduleException;
  56 + Integer lineversion,
  57 + ExcelFormatType excelFormatType) throws ScheduleException;
55 58  
56 59 /**
57 60 * 验证关联的线路标准信息(以后放到规则引擎里去做)。
... ...
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
1 1 package com.bsth.service.schedule.datatools;
2 2  
3   -import com.bsth.entity.Station;
4 3 import com.bsth.entity.StationRoute;
5 4 import com.bsth.service.StationRouteService;
6   -import com.bsth.service.StationService;
7 5 import com.bsth.service.schedule.exception.ScheduleException;
  6 +import com.bsth.service.schedule.timetable.ExcelFormatType;
8 7 import com.bsth.service.schedule.utils.*;
9 8 import jxl.Sheet;
10 9 import jxl.Workbook;
... ... @@ -16,6 +15,7 @@ import org.apache.poi.ss.usermodel.Cell;
16 15 import org.apache.poi.ss.usermodel.Row;
17 16 import org.apache.poi.ss.util.CellRangeAddress;
18 17 import org.apache.poi.ss.util.WorkbookUtil;
  18 +import org.apache.poi.xssf.usermodel.XSSFCell;
19 19 import org.apache.poi.xssf.usermodel.XSSFRow;
20 20 import org.apache.poi.xssf.usermodel.XSSFSheet;
21 21 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
... ... @@ -101,7 +101,8 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
101 101 Integer lineid = Integer.valueOf(String.valueOf(params.get("lineinfo"))); // 线路标准id
102 102 String xlname = String.valueOf(params.get("xlname")); // 线路名字
103 103 String ttname = String.valueOf(params.get("ttname")); // 时刻表名字
104   - Integer lineversion = Integer.valueOf(params.get("lineversion").toString());
  104 + Integer lineversion = Integer.valueOf(params.get("lineversion").toString()); // 线路路由版本
  105 + ExcelFormatType excelFormatType = ExcelFormatType.getEnum(String.valueOf(params.get("excelFormatType"))); // 格式
105 106  
106 107 LOGGER.info("参数1, xls文件名={},sheet名字={}", filename, sheetname);
107 108 LOGGER.info("参数2, 线路id={},线路名字={}", xlid, xlname);
... ... @@ -178,6 +179,10 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
178 179 // 实际数据ktr
179 180 File ktrFile2_version = new File(this.getClass().getResource(
180 181 dataToolsProperties.getTtinfodetailDatainputktr2version()).toURI());
  182 + // 实际数据ktr2
  183 + File ktrFile2_version2 = new File(this.getClass().getResource(
  184 + dataToolsProperties.getTtinfodetailDatainputktr2version2()).toURI());
  185 +
181 186  
182 187 // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
183 188 ktrParms.put("transpath", mktrFile.getAbsolutePath());
... ... @@ -185,7 +190,14 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
185 190 ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
186 191  
187 192 // 附加参数
188   - ktrParms.put("injectktrfile", ktrFile2_version.getAbsolutePath()); // 注入元数据的ktr文件
  193 + if (excelFormatType == ExcelFormatType.Normal) {
  194 + ktrParms.put("injectktrfile", ktrFile2_version.getAbsolutePath()); // 注入元数据的ktr文件
  195 + } else if (excelFormatType == ExcelFormatType.Dynamic) {
  196 + ktrParms.put("injectktrfile", ktrFile2_version2.getAbsolutePath()); // 注入元数据的ktr文件
  197 + } else {
  198 + throw new ScheduleException("未知ExcelFormatType");
  199 + }
  200 +
189 201 ktrParms.put("sheetname", sheetname); // sheet工作区的名字
190 202 ktrParms.put("lineinfoid", lineid); // 线路标准id
191 203 ktrParms.put("xlname", xlname); // 线路名称
... ... @@ -570,26 +582,25 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
570 582 }
571 583  
572 584 // 最后一个进场需要变成三个班次
573   - // 1个分班进场班次,1个到场班次,1个离场班次
  585 + // 1个分班进场班次插入到前面的班次
  586 + // 后面添加两个班次,1个到场班次,1个离场班次
574 587 PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 3),
575   - station2.getStationName(), new Color(0x96b9d7));
576   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 4),
577 588 "到场", new Color(0x96b9d7));
578   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 5),
  589 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 4),
579 590 "离场", new Color(0x96b9d7));
580 591  
581 592 // 路牌统计字段
582   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 6),
  593 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 5),
583 594 "总公里", new Color(0x96b9d7));
584   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 7),
  595 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 6),
585 596 "营业公里", new Color(0x96b9d7));
586   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 8),
  597 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 7),
587 598 "空驶公里", new Color(0x96b9d7));
588   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 9),
  599 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 8),
589 600 "总工时", new Color(0x96b9d7));
590   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 10),
  601 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 9),
591 602 "营业工时", new Color(0x96b9d7));
592   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 11),
  603 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 10),
593 604 "营运班次", new Color(0x96b9d7));
594 605  
595 606 // 构建每个路牌的班次数据
... ... @@ -597,74 +608,86 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
597 608 LpObj lpObj = lpObjList.get(i);
598 609 XSSFRow lpRow = sheet.createRow((short) (i + 1));
599 610 PoiUtils.createStringXSSFCell(wb, lpRow, (short) 0, lpObj.getLpname());
600   - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (1));
601   - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (2));
602   - for (int j = 1; j <= groupCount; j++) {
603   - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 1));
604   - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 2));
605   - }
606 611  
607   - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (groupCount * 2 + 3));
608   - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (groupCount * 2 + 4));
609   - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (groupCount * 2 + 5));
  612 + // 创建空白单元格,并设置字符串格式
  613 + XSSFCell xssfCell = null;
610 614  
611   - for (BcObj bcObj : lpObj.getBcObjList()) {
612   - if (bcObj.getBcType() == BcType.NORMAL) {
613   - Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
614   - cell.setCellValue(bcObj.getFcsj());
  615 + xssfCell = PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (1));
  616 + PoiUtils.setStringStyleXSSFCellStyle(wb, xssfCell);
615 617  
616   - } else if (bcObj.getBcType() == BcType.BD) {
617   - if (bcObj.getGroupNo() == -1) {
618   - Cell cell = lpRow.getCell((short) 1);
619   - cell.setCellValue(bcObj.getFcsj());
620   - } else if (bcObj.getGroupNo() > 0) { // 分班报到
621   - Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
622   - cell.setCellValue("报" + bcObj.getFcsj());
  618 + xssfCell = PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (2));
  619 + PoiUtils.setStringStyleXSSFCellStyle(wb, xssfCell);
623 620  
624   - }
  621 + 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);
  626 + }
625 627  
626   - } else if (bcObj.getBcType() == BcType.OUT) {
627   - if (bcObj.getGroupNo() == -1) {
628   - Cell cell = lpRow.getCell((short) (2));
  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);
  632 +
  633 + for (int j = 0; j < lpObj.getBcObjList().size(); j++) {
  634 + BcObj bcObj = lpObj.getBcObjList().get(j); // 当前班次
  635 + Cell cell = null; // 待处理的单元格
  636 +
  637 + switch (bcObj.getBcType()) {
  638 + case BD: // 报到班次
  639 + if (bcObj.getIsFb()) { // 分班-两个车次链
  640 + cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
  641 + cell.setCellValue("报" + bcObj.getFcsj());
  642 + } else { // 一个车次链
  643 + cell = lpRow.getCell((short) 1);
  644 + cell.setCellValue(bcObj.getFcsj());
  645 + }
  646 + break;
  647 + case OUT: // 出场班次
  648 + if (bcObj.getIsFb()) { // 分班-两个车次链
  649 + cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
  650 + cell.setCellValue("出" + bcObj.getFcsj());
  651 + } else { // 一个车次链
  652 + cell = lpRow.getCell((short) (2));
  653 + cell.setCellValue(bcObj.getFcsj());
  654 + }
  655 + break;
  656 + case NORMAL: // 正常班次
  657 + cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
629 658 cell.setCellValue(bcObj.getFcsj());
630   - } else if (bcObj.getGroupNo() > 0) { // 分班出场
631   - Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
632   - cell.setCellValue("出" + bcObj.getFcsj());
633   - }
634   -
635   - } else if (bcObj.getBcType() == BcType.IN) {
636   - if (bcObj.getGroupNo() == -2) {
637   - Cell cell = lpRow.getCell((short) (groupCount * 2 + 3));
638   - cell.setCellValue(bcObj.getFcsj() + "X");
639   - } else if (bcObj.getGroupNo() > 0) { //分班进场
640   - Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
641   - // 停驶用 ※
642   - cell.setCellValue(bcObj.getFcsj() + "X");
643   - }
644   -
645   - } else if (bcObj.getBcType() == BcType.LC) {
646   - if (bcObj.getGroupNo() == -2) {
  659 + break;
  660 + case IN: // 进场班次
  661 + if (bcObj.getIsFb()) { // 分班-两个车次链
  662 + cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
  663 + // TODO:停驶用 ※
  664 + cell.setCellValue(bcObj.getFcsj() + "X");
  665 + } else { // 一个车次链
  666 + cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
  667 + cell.setCellValue(bcObj.getFcsj() + "X");
  668 + }
  669 + break;
  670 + case LC:
647 671 // 这个是到场,准备离场班次
648   - Cell cell = lpRow.getCell((short) (groupCount * 2 + 4));
  672 + cell = lpRow.getCell((short) (groupCount * 2 + 3));
649 673 cell.setCellValue(bcObj.getFcsj());
650 674 // 加10分钟表示真正离场时间
651   - cell = lpRow.getCell((short) (groupCount * 2 + 5));
  675 + cell = lpRow.getCell((short) (groupCount * 2 + 4));
652 676 LocalTime localTime = LocalTime.parse(bcObj.getFcsj(), DateTimeFormat.forPattern("HH:mm"));
653 677 cell.setCellValue(localTime.plusMinutes(10).toString(DateTimeFormat.forPattern("HH:mm")));
654   - }
655   -
  678 + break;
656 679 }
657 680 }
658 681  
659 682 // 路牌统计字段
660   - PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 6), lpObj.getZlc());
661   - PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 7), lpObj.getYylc());
662   - PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 8), lpObj.getKslc());
663   - PoiUtils.createStringXSSFCell(wb, lpRow, (short) (groupCount * 2 + 9),
  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),
664 687 String.format("%d%s%d", (int) (lpObj.getZgs() / 60), ":", (int) (lpObj.getZgs() % 60)));
665   - PoiUtils.createStringXSSFCell(wb, lpRow, (short) (groupCount * 2 + 10),
  688 + PoiUtils.createStringXSSFCell(wb, lpRow, (short) (groupCount * 2 + 9),
666 689 String.format("%d%s%d", (int) (lpObj.getYygs() / 60), ":", (int) (lpObj.getYygs() % 60)));
667   - PoiUtils.createIntegerXSSFCell(wb, lpRow, (short) (groupCount * 2 + 11), lpObj.getYybc());
  690 + PoiUtils.createIntegerXSSFCell(wb, lpRow, (short) (groupCount * 2 + 10), lpObj.getYybc());
668 691  
669 692 }
670 693  
... ... @@ -684,7 +707,6 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
684 707 sheet.autoSizeColumn(groupCount * 2 + 8);
685 708 sheet.autoSizeColumn(groupCount * 2 + 9);
686 709 sheet.autoSizeColumn(groupCount * 2 + 10);
687   - sheet.autoSizeColumn(groupCount * 2 + 11);
688 710 }
689 711  
690 712 @Override
... ...
src/main/java/com/bsth/service/schedule/datatools/TTinfoDetailDynamicData.java
... ... @@ -54,6 +54,9 @@ public interface TTinfoDetailDynamicData {
54 54 /** 是否上行 */
55 55 private Boolean isUp;
56 56  
  57 + /** 是否分班 */
  58 + private Boolean isFb;
  59 +
57 60 /** 班次类型 */
58 61 private BcType bcType;
59 62 /** 发车时刻 */
... ... @@ -154,14 +157,6 @@ public interface TTinfoDetailDynamicData {
154 157 this.groupBcNo = groupBcNo;
155 158 }
156 159  
157   - public Boolean getUp() {
158   - return isUp;
159   - }
160   -
161   - public void setUp(Boolean up) {
162   - isUp = up;
163   - }
164   -
165 160 public String getFcsjDesc() {
166 161 return fcsjDesc;
167 162 }
... ... @@ -169,6 +164,14 @@ public interface TTinfoDetailDynamicData {
169 164 public void setFcsjDesc(String fcsjDesc) {
170 165 this.fcsjDesc = fcsjDesc;
171 166 }
  167 +
  168 + public Boolean getIsFb() {
  169 + return isFb;
  170 + }
  171 +
  172 + public void setIsFb(Boolean fb) {
  173 + isFb = fb;
  174 + }
172 175 }
173 176  
174 177 public static class LpObj { // 路牌对象
... ... @@ -314,6 +317,7 @@ public interface TTinfoDetailDynamicData {
314 317 public void setYybc(Integer yybc) {
315 318 this.yybc = yybc;
316 319 }
  320 +
317 321 }
318 322  
319 323 public static class StatInfo { // 统计数据对象
... ...
src/main/java/com/bsth/service/schedule/impl/TTInfoDetailServiceImpl.java
... ... @@ -15,12 +15,15 @@ import com.bsth.repository.schedule.TTInfoRepository;
15 15 import com.bsth.repository.sys.SysUserRepository;
16 16 import com.bsth.service.CarParkService;
17 17 import com.bsth.service.LineInformationService;
  18 +import com.bsth.service.LineService;
18 19 import com.bsth.service.StationRouteService;
19 20 import com.bsth.service.schedule.GuideboardInfoService;
20 21 import com.bsth.service.schedule.TTInfoDetailService;
21 22 import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;
22 23 import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData;
23 24 import com.bsth.service.schedule.exception.ScheduleException;
  25 +import com.bsth.service.schedule.timetable.ExcelData;
  26 +import com.bsth.service.schedule.timetable.ExcelFormatType;
24 27 import com.bsth.service.schedule.utils.DataToolsFile;
25 28 import com.bsth.service.schedule.utils.DataToolsFileType;
26 29 import com.bsth.service.schedule.utils.DataToolsService;
... ... @@ -77,6 +80,8 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
77 80 private SysUserRepository sysUserRepository;
78 81 @Autowired
79 82 private GuideboardInfoRepository guideboardInfoRepository;
  83 + @Autowired
  84 + private LineService lineService;
80 85  
81 86 @Autowired
82 87 @Qualifier(value = "ttInfoDetail_dataTool")
... ... @@ -155,130 +160,13 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
155 160 }
156 161  
157 162 @Override
158   - public void validateExcelSheet(String filename, String sheetname, Integer lineid, String linename, Integer lineversion) throws ScheduleException {
159   - try {
160   - File file = new File(filename);
161   - Workbook workbook;
162   -
163   - if (DataToolsFileType.XLS.isThisType(file)) {
164   - workbook = DataToolsFileType.XLS.getWorkBook(file);
165   - } else if (DataToolsFileType.XLSX.isThisType(file)) {
166   - workbook = DataToolsFileType.XLSX.getWorkBook(file);
167   - } else {
168   - throw new Exception("不是xls xlsx文件!");
169   - }
170   -
171   - Sheet sheet = workbook.getSheet(sheetname);
172   - int rowNums = sheet.getLastRowNum() + 1; // 基于0 base的,长度加1
173   - int colNums = sheet.getRow(0).getLastCellNum(); // 不需要加1,就是长度
174   -
175   - if (rowNums == 0 || colNums == 0) { // 工作区是否为空
176   - throw new Exception(String.format("%s 工作区没有数据!", sheetname));
177   - } else {
178   - if (rowNums <= 1 || rowNums <= 1) {
179   - throw new Exception(String.format("工作区至少包含2行2列的数据"));
180   - } else {
181   - Row firstRow = sheet.getRow(0); // 获取第一行数据列
182   - for (int i = 0; i < colNums; i++) {
183   - String cell_con = StringUtils.trimToEmpty(PoiUtils.getStringValueFromCell(firstRow.getCell(i))); // trimToEmpty
184   -
185   - if (StringUtils.isEmpty(cell_con)) {
186   - throw new Exception(String.format("第1行,第%d列数据不能为空", i + 1));
187   - } else {
188   - // 正则表达式去除右侧数字
189   -// cell_con = cell_con.replaceAll("[\\d+]", "");
190   -// cell_con = cell_con.replaceAll("(\\d+)$", "");
191   -
192   - // 如果站名中有类似->{数字},使用正则表达式过滤掉
193   - cell_con = cell_con.replaceAll("(->\\d+)", "");
194   -
195   - if (i == 0) { // 第一列必须是路牌2个字
196   - if (!"路牌".equals(cell_con.trim())) {
197   - throw new Exception("第1行,第1列数据必须是路牌2个字");
198   - }
199   - } else { // 排除出场,进场,其余内容到站点路由里查询,以各个方向的起点站为查询依据
200   - if ((!"出场".equals(cell_con.trim())) &&
201   - (!"进场".equals(cell_con.trim()))) {
202   - Map<String, Object> p1 = new HashMap<>();
203   - p1.put("line.id_eq", lineid);
204   - p1.put("stationName_eq", cell_con.trim());
205   - p1.put("stationMark_eq", "B"); // 起点站
206   - p1.put("destroy_eq", 0); // 未撤销
207   - p1.put("versions_eq", lineversion); // 带线路版本
208   -
209   - List<LsStationRoute> lsStationRoutes = (List<LsStationRoute>) stationRouteService.list_ls(p1);
210   - if (CollectionUtils.isEmpty(lsStationRoutes)) {
211   - throw new Exception(String.format("第1行,第%d列数据%s在%s站点路由中不是起点站", i + 1, cell_con.trim(), linename));
212   - } else if (lsStationRoutes.size() > 1) {
213   - throw new Exception(String.format("第1行,第%d列数据%s在%s站点路由中上下行都是起点站", i + 1, cell_con.trim(), linename));
214   - } else if (StringUtils.isEmpty(lsStationRoutes.get(0).getStationCode())) {
215   - throw new Exception(String.format("第1行,第%d列数据%s在%s站点路由中没有站点编码", i + 1, cell_con.trim(), linename));
216   - }
217   -
218   - }
219   -
220   - }
221   - }
222   - }
223   -
224   - // 验证路牌内容
225   - Map<String, Integer> gbindexmap = new HashMap<>(); // 记录每个路牌在第几行
226   - for (int i = 1; i < rowNums; i++) { // 从第2行开始验证数据
227   - Cell cell = sheet.getRow(i).getCell(0); // 获取第1列
228   - String bcell_con = StringUtils.trimToEmpty(PoiUtils.getStringValueFromCell(cell)); // trimToEmpty
229   - if (StringUtils.isEmpty(bcell_con)) {
230   - throw new Exception(String.format("第%d行,第1列路牌无数据", i + 1));
231   - } else if (gbindexmap.get(bcell_con.trim()) != null) {
232   - throw new Exception(String.format("第%d行,第1列的路牌数据与第%d行,第1列数据重复",
233   - i + 1,
234   - gbindexmap.get(bcell_con.trim())));
235   - } else {
236   - Map<String, Object> p2 = new HashMap<>();
237   - p2.put("xl.id_eq", lineid);
238   - p2.put("lpName_eq", bcell_con.trim());
239   - p2.put("isCancel_eq", false);
240   - List<GuideboardInfo> guideboardInfoList = (List<GuideboardInfo>) guideboardInfoService.list(p2);
241   - if (CollectionUtils.isEmpty(guideboardInfoList)) {
242   - throw new Exception(String.format("第%d行,第1列的路牌在%s中不存在", i + 1, linename));
243   - } else if (guideboardInfoList.size() > 1) {
244   - throw new Exception(String.format("第%d行,第1列的路牌在%s中重复", i + 1, linename));
245   - } else {
246   - gbindexmap.put(bcell_con.trim(), i + 1);
247   - }
248   - }
249   - }
250   -
251   - // 班次时间验证,正则表达式,格式hh:mm或者hhmm
252   - String rex1 = "^([01]?[0-9]|2[0-3]):[0-5][0-9]$"; // hh:mm格式
253   - String rex2 = "^([01]?[0-9]|2[0-3]),[0-5][0-9]$"; // hh,mm格式
254   - String rex3 = "^([01]?[0-9]|2[0-3])[0-5][0-9]$"; // hhmm格式
255   - Pattern p1 = Pattern.compile(rex1);
256   - Pattern p2 = Pattern.compile(rex2);
257   - Pattern p3 = Pattern.compile(rex3);
258   -
259   - for (int i = 1; i < rowNums; i++) { // 从第2行开始验证数据
260   - Row row = sheet.getRow(i);
261   - for (int j = 1; j < colNums; j++) { // 从第2列开始
262   - String bcell_con = StringUtils.trimToEmpty(PoiUtils.getStringValueFromCell(row.getCell(j))).replaceAll("\\s*", ""); // trimToEmpty
263   - if (StringUtils.isNotEmpty(bcell_con)) {
264   - Matcher m1 = p1.matcher(bcell_con.trim());
265   - Matcher m2 = p2.matcher(bcell_con.trim());
266   - Matcher m3 = p3.matcher(bcell_con.trim());
267   - if ((!m1.matches()) && (!m2.matches()) && (!m3.matches())) {
268   - throw new Exception(String.format("第%d行,第%d列的发车时间格式不正确,格式应为hh:mm或hh,mm或hhmm", i + 1, j + 1));
269   - }
270   - }
271   - }
272   - }
273   - }
274   -
275   - }
276   -
277   - } catch (Exception exp) {
278   - exp.printStackTrace();
279   - throw new ScheduleException(exp.getMessage());
280   - }
281   -
  163 + public void validateExcelSheet(String filename, String sheetname, Integer lineid, String linename, Integer lineversion, ExcelFormatType excelFormatType) throws ScheduleException {
  164 + ExcelData excelData = new ExcelData(
  165 + filename, sheetname, lineid,
  166 + lineService, guideboardInfoService,
  167 + lineversion, stationRouteService,
  168 + excelFormatType);
  169 + excelData.validateExcelSheet();
282 170 }
283 171  
284 172 @Override
... ...
src/main/java/com/bsth/service/schedule/timetable/ExcelData.java 0 → 100644
  1 +package com.bsth.service.schedule.timetable;
  2 +
  3 +import com.bsth.entity.Line;
  4 +import com.bsth.entity.LsStationRoute;
  5 +import com.bsth.entity.schedule.GuideboardInfo;
  6 +import com.bsth.service.LineService;
  7 +import com.bsth.service.StationRouteService;
  8 +import com.bsth.service.schedule.GuideboardInfoService;
  9 +import com.bsth.service.schedule.exception.ScheduleException;
  10 +import com.bsth.service.schedule.utils.DataToolsFile;
  11 +import com.bsth.service.schedule.utils.DataToolsFileType;
  12 +import com.bsth.service.schedule.utils.PoiUtils;
  13 +import org.apache.commons.lang3.StringUtils;
  14 +import org.apache.poi.ss.usermodel.Cell;
  15 +import org.apache.poi.ss.usermodel.Row;
  16 +import org.apache.poi.ss.usermodel.Sheet;
  17 +import org.apache.poi.ss.usermodel.Workbook;
  18 +import org.springframework.util.CollectionUtils;
  19 +
  20 +import java.io.File;
  21 +import java.util.ArrayList;
  22 +import java.util.HashMap;
  23 +import java.util.List;
  24 +import java.util.Map;
  25 +import java.util.regex.Matcher;
  26 +import java.util.regex.Pattern;
  27 +
  28 +/**
  29 + * 时刻表Excel数据类。
  30 + */
  31 +public class ExcelData {
  32 +
  33 + /** 导入后的Excel文件对象 */
  34 + private DataToolsFile dataToolsFile;
  35 + /** 数据sheet名 */
  36 + private String sheetName;
  37 + /** 线路 */
  38 + private Line line;
  39 + /** 线路路由列表(包含上下行的起终点站) */
  40 + private List<LsStationRoute> lsStationRouteList;
  41 + /** 路牌列表 */
  42 + private List<GuideboardInfo> guideboardInfoList;
  43 + /** excel数据格式 */
  44 + private ExcelFormatType excelFormatType;
  45 +
  46 + public DataToolsFile getDataToolsFile() {
  47 + return dataToolsFile;
  48 + }
  49 +
  50 + public void setDataToolsFile(DataToolsFile dataToolsFile) {
  51 + this.dataToolsFile = dataToolsFile;
  52 + }
  53 +
  54 + public String getSheetName() {
  55 + return sheetName;
  56 + }
  57 +
  58 + public void setSheetName(String sheetName) {
  59 + this.sheetName = sheetName;
  60 + }
  61 +
  62 + public Line getLine() {
  63 + return line;
  64 + }
  65 +
  66 + public void setLine(Line line) {
  67 + this.line = line;
  68 + }
  69 +
  70 + public List<LsStationRoute> getLsStationRouteList() {
  71 + return lsStationRouteList;
  72 + }
  73 +
  74 + public void setLsStationRouteList(List<LsStationRoute> lsStationRouteList) {
  75 + this.lsStationRouteList = lsStationRouteList;
  76 + }
  77 +
  78 + public List<GuideboardInfo> getGuideboardInfoList() {
  79 + return guideboardInfoList;
  80 + }
  81 +
  82 + public void setGuideboardInfoList(List<GuideboardInfo> guideboardInfoList) {
  83 + this.guideboardInfoList = guideboardInfoList;
  84 + }
  85 +
  86 + public ExcelFormatType getExcelFormatType() {
  87 + return excelFormatType;
  88 + }
  89 +
  90 + public void setExcelFormatType(ExcelFormatType excelFormatType) {
  91 + this.excelFormatType = excelFormatType;
  92 + }
  93 +
  94 + /**
  95 + * 构造函数
  96 + * @param filePath 文件路径
  97 + * @param sheetName sheet名字
  98 + * @param lineId 线路Id
  99 + * @param lineService LineServiceImpl
  100 + * @param guideboardInfoService GuideboardInfoServiceImpl
  101 + * @param lineRouteVersion 线路路由版本
  102 + * @param stationRouteService StationRouteServiceImpl
  103 + * @param excelFormatType excel数据格式
  104 + * @throws ScheduleException
  105 + * @see com.bsth.service.impl.LineServiceImpl
  106 + * @see com.bsth.service.schedule.impl.GuideboardInfoServiceImpl
  107 + * @see com.bsth.service.impl.StationRouteServiceImpl
  108 + */
  109 + public ExcelData(
  110 + String filePath, String sheetName,
  111 + Integer lineId, LineService lineService, GuideboardInfoService guideboardInfoService,
  112 + Integer lineRouteVersion, StationRouteService stationRouteService,
  113 + ExcelFormatType excelFormatType) throws ScheduleException {
  114 + // 获取Excel文件对象,类型
  115 + File file = new File(filePath);
  116 + this.dataToolsFile = new DataToolsFile();
  117 + this.dataToolsFile.setFile(file);
  118 + if (DataToolsFileType.XLS.isThisType(file)) {
  119 + this.dataToolsFile.setFileType(DataToolsFileType.XLS);
  120 + } else if (DataToolsFileType.XLSX.isThisType(file)) {
  121 + this.dataToolsFile.setFileType(DataToolsFileType.XLSX);
  122 + } else {
  123 + throw new ScheduleException("不是xls xlsx文件!");
  124 + }
  125 +
  126 + // sheet名字
  127 + this.sheetName = sheetName;
  128 + // 线路
  129 + this.line = lineService.findById(lineId);
  130 + // 线路路由列表
  131 + Map<String, Object> p1 = new HashMap<>();
  132 + p1.put("line.id_eq", lineId);
  133 + p1.put("stationMark_in", "B,E"); // 起点站
  134 + p1.put("destroy_eq", 0); // 未撤销
  135 + p1.put("versions_eq", lineRouteVersion); // 带线路版本
  136 + lsStationRouteList = (List<LsStationRoute>) stationRouteService.list_ls(p1);
  137 + // 路牌列表
  138 + p1.clear();
  139 + p1.put("xl.id_eq", lineId);
  140 + p1.put("isCancel_eq", false);
  141 + guideboardInfoList = guideboardInfoService.list(p1);
  142 +
  143 + // excel数据格式
  144 + this.excelFormatType = excelFormatType;
  145 + }
  146 +
  147 + /**
  148 + * 验证路由名字。
  149 + * @param colNum 列标号(从0开始)
  150 + * @param routeName 路由名字
  151 + * @throws ScheduleException
  152 + */
  153 + private void validateRouteName(int colNum, String routeName) throws ScheduleException {
  154 + List<LsStationRoute> lsStationRoutes = new ArrayList<>();
  155 + for (LsStationRoute lsStationRoute : this.lsStationRouteList) {
  156 + if ("B".equals(lsStationRoute.getStationMark()) && routeName.equals(lsStationRoute.getStationName())) {
  157 + lsStationRoutes.add(lsStationRoute);
  158 + }
  159 + }
  160 +
  161 + if (CollectionUtils.isEmpty(lsStationRoutes)) {
  162 + throw new ScheduleException(String.format("第1行,第%d列数据%s在%s站点路由中不是起点站",
  163 + colNum + 1, routeName, this.line.getName()));
  164 + } else if (lsStationRoutes.size() > 1) {
  165 + throw new ScheduleException(String.format("第1行,第%d列数据%s在%s站点路由中上下行都是起点站",
  166 + colNum + 1, routeName, this.line.getName()));
  167 + } else if (StringUtils.isEmpty(lsStationRoutes.get(0).getStationCode())) {
  168 + throw new ScheduleException(String.format("第1行,第%d列数据%s在%s站点路由中没有站点编码",
  169 + colNum + 1, routeName, this.line.getName()));
  170 + }
  171 +
  172 + }
  173 +
  174 + /**
  175 + * 验证路牌名字。
  176 + * @param colNum excelSheet 列index
  177 + * @param guideboardName 路牌名字
  178 + * @throws ScheduleException
  179 + */
  180 + private void validateGuideboardName(int colNum, String guideboardName) throws ScheduleException {
  181 + List<GuideboardInfo> guideboardInfos = new ArrayList<>();
  182 + for (GuideboardInfo guideboardInfo : this.guideboardInfoList) {
  183 + if (guideboardName.equals(guideboardInfo.getLpName())) {
  184 + guideboardInfos.add(guideboardInfo);
  185 + }
  186 + }
  187 +
  188 + if (CollectionUtils.isEmpty(guideboardInfos)) {
  189 + throw new ScheduleException(String.format("第%d行,第1列的路牌在%s中不存在",
  190 + colNum + 1, this.line.getName()));
  191 + } else if (guideboardInfos.size() > 1) {
  192 + throw new ScheduleException(String.format("第%d行,第1列的路牌在%s中重复",
  193 + colNum + 1, this.line.getName()));
  194 + }
  195 + }
  196 +
  197 + /**
  198 + * 验证发车时间内容。
  199 + * @param rowNum excelSheet 行index
  200 + * @param colNum excelSheet 列index
  201 + * @param fcsjContent 发车时间内容
  202 + * @throws ScheduleException
  203 + */
  204 + private void validateFcsjContent(int rowNum, int colNum, String fcsjContent) throws ScheduleException {
  205 + if (this.excelFormatType == ExcelFormatType.Normal) {
  206 + // 班次时间验证,正则表达式,格式hh:mm或者hhmm
  207 + String rex1 = "^([01]?[0-9]|2[0-3]):[0-5][0-9]$"; // hh:mm格式
  208 + String rex2 = "^([01]?[0-9]|2[0-3]),[0-5][0-9]$"; // hh,mm格式
  209 + String rex3 = "^([01]?[0-9]|2[0-3])[0-5][0-9]$"; // hhmm格式
  210 + Pattern p1 = Pattern.compile(rex1);
  211 + Pattern p2 = Pattern.compile(rex2);
  212 + Pattern p3 = Pattern.compile(rex3);
  213 +
  214 + Matcher m1 = p1.matcher(fcsjContent.trim());
  215 + Matcher m2 = p2.matcher(fcsjContent.trim());
  216 + Matcher m3 = p3.matcher(fcsjContent.trim());
  217 + if ((!m1.matches()) && (!m2.matches()) && (!m3.matches())) {
  218 + throw new ScheduleException(String.format("第%d行,第%d列的发车时间格式不正确,格式应为hh:mm或hh,mm或hhmm",
  219 + rowNum + 1, colNum + 1));
  220 + }
  221 + } else if (this.excelFormatType == ExcelFormatType.Dynamic) {
  222 + String rex1 = "^(\u62a5|\u51fa)?([01]?[0-9]|2[0-3]):[0-5][0-9]$"; // (报|出)hh:mm格式
  223 + String rex2 = "^([01]?[0-9]|2[0-3]):[0-5][0-9](X|\u203b)?$"; // hh:mm(X|※)格式
  224 + Pattern p1 = Pattern.compile(rex1);
  225 + Pattern p2 = Pattern.compile(rex2);
  226 + Matcher m1 = p1.matcher(fcsjContent.trim());
  227 + Matcher m2 = p2.matcher(fcsjContent.trim());
  228 + if ((!m1.matches()) && (!m2.matches())) {
  229 + throw new ScheduleException(String.format(
  230 + "第%d行,第%d列的发车时间格式不正确,格式应为(报|出)hh:mm或hh:mm(X|※)",
  231 + rowNum + 1, colNum + 1));
  232 + }
  233 + } else {
  234 + throw new ScheduleException("未知ExcelFormatType");
  235 + }
  236 +
  237 + }
  238 +
  239 + private List<Integer> calcuExcelSheetColIndexList(Workbook workbook) throws ScheduleException {
  240 + // 有些列不需要参与计算,找出参与计算的列
  241 + List<Integer> colIndexList = new ArrayList<>();
  242 + Sheet sheet = workbook.getSheet(this.sheetName);
  243 + Row firstRow = sheet.getRow(0); // 获取第一行数据列
  244 + for (int i = 0; i < firstRow.getLastCellNum(); i++) {
  245 + if (excelFormatType == ExcelFormatType.Normal) {
  246 + colIndexList.add(i);
  247 + } else if (excelFormatType == ExcelFormatType.Dynamic) {
  248 + String cell_con = StringUtils.trimToEmpty(
  249 + PoiUtils.getStringValueFromCell(firstRow.getCell(i))); // trimToEmpty
  250 + if ("报到".equals(cell_con) ||
  251 + "到场".equals(cell_con) ||
  252 + "离场".equals(cell_con) ||
  253 + "总公里".equals(cell_con) ||
  254 + "营业公里".equals(cell_con) ||
  255 + "空驶公里".equals(cell_con) ||
  256 + "总工时".equals(cell_con) ||
  257 + "营业工时".equals(cell_con) ||
  258 + "营运班次".equals(cell_con)) {
  259 + // 这些列全部祛除
  260 + continue;
  261 + } else {
  262 + colIndexList.add(i);
  263 + }
  264 + } else {
  265 + throw new ScheduleException("未知excelFormatType");
  266 + }
  267 + }
  268 + return colIndexList;
  269 + }
  270 +
  271 + /**
  272 + * 验证老系统ExcelSheet格式。
  273 + * @throws ScheduleException
  274 + */
  275 + public void validateExcelSheet() throws ScheduleException {
  276 + try {
  277 + Workbook workbook = this.dataToolsFile.getFileType().getWorkBook(
  278 + this.dataToolsFile.getFile()
  279 + );
  280 +
  281 + Sheet sheet = workbook.getSheet(this.sheetName);
  282 + int rowNums = sheet.getLastRowNum() + 1; // 基于0 base的,长度加1
  283 + int colNums = sheet.getRow(0).getLastCellNum(); // 不需要加1,就是长度
  284 +
  285 + if (rowNums == 0 || colNums == 0) { // 工作区是否为空
  286 + throw new Exception(String.format("%s 工作区没有数据!", this.sheetName));
  287 + } else {
  288 + if (rowNums <= 1 || rowNums <= 1) {
  289 + throw new Exception(String.format("工作区至少包含2行2列的数据"));
  290 + } else {
  291 + List<Integer> colIndexList = this.calcuExcelSheetColIndexList(workbook);
  292 + Row firstRow = sheet.getRow(0); // 获取第一行数据列
  293 + for (int n = 0; n < colIndexList.size(); n++) {
  294 + int i = colIndexList.get(n);
  295 + String cell_con = StringUtils.trimToEmpty(
  296 + PoiUtils.getStringValueFromCell(firstRow.getCell(i))); // trimToEmpty
  297 +
  298 + if (StringUtils.isEmpty(cell_con)) {
  299 + throw new Exception(String.format("第1行,第%d列数据不能为空", i + 1));
  300 + } else {
  301 + // 正则表达式去除右侧数字
  302 +// cell_con = cell_con.replaceAll("[\\d+]", "");
  303 +// cell_con = cell_con.replaceAll("(\\d+)$", "");
  304 +
  305 + // 如果站名中有类似->{数字},使用正则表达式过滤掉
  306 + cell_con = cell_con.replaceAll("(->\\d+)", "");
  307 +
  308 + if (i == 0) { // 第一列必须是路牌2个字
  309 + if (!"路牌".equals(cell_con.trim())) {
  310 + throw new Exception("第1行,第1列数据必须是路牌2个字");
  311 + }
  312 + } else { // 排除出场,进场,其余内容到站点路由里查询,以各个方向的起点站为查询依据
  313 + if ((!"出场".equals(cell_con.trim())) &&
  314 + (!"进场".equals(cell_con.trim()))) {
  315 + validateRouteName(i, cell_con.trim()); // 验证路由名字
  316 + }
  317 +
  318 + }
  319 + }
  320 + }
  321 +
  322 + // 验证路牌内容
  323 + Map<String, Integer> gbindexmap = new HashMap<>(); // 记录每个路牌在第几行
  324 + for (int i = 1; i < rowNums; i++) { // 从第2行开始验证数据
  325 + Cell cell = sheet.getRow(i).getCell(0); // 获取第1列
  326 + String bcell_con = StringUtils.trimToEmpty(
  327 + PoiUtils.getStringValueFromCell(cell)); // trimToEmpty
  328 + if (StringUtils.isEmpty(bcell_con)) {
  329 + throw new Exception(String.format("第%d行,第1列路牌无数据", i + 1));
  330 + } else if (gbindexmap.get(bcell_con.trim()) != null) {
  331 + throw new Exception(String.format("第%d行,第1列的路牌数据与第%d行,第1列数据重复",
  332 + i + 1,
  333 + gbindexmap.get(bcell_con.trim())));
  334 + } else {
  335 + validateGuideboardName(i, bcell_con.trim()); // 验证路牌名字
  336 + gbindexmap.put(bcell_con.trim(), i + 1);
  337 + }
  338 + }
  339 +
  340 + // 验证发车时间格式
  341 + for (int i = 1; i < rowNums; i++) { // 从第2行开始验证数据
  342 + Row row = sheet.getRow(i);
  343 + for (int n = 1; n < colIndexList.size(); n++) { // 从第2列开始
  344 + int j = colIndexList.get(n);
  345 + String bcell_con = StringUtils.trimToEmpty(
  346 + PoiUtils.getStringValueFromCell(
  347 + row.getCell(j))).replaceAll("\\s*", ""); // trimToEmpty
  348 + if (StringUtils.isNotEmpty(bcell_con)) {
  349 + validateFcsjContent(i, j, bcell_con);
  350 + }
  351 + }
  352 + }
  353 + }
  354 +
  355 + }
  356 +
  357 + } catch (Exception exp) {
  358 + exp.printStackTrace();
  359 + throw new ScheduleException(exp.getMessage());
  360 + }
  361 + }
  362 +
  363 +}
... ...
src/main/java/com/bsth/service/schedule/timetable/ExcelFormatType.java 0 → 100644
  1 +package com.bsth.service.schedule.timetable;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonCreator;
  4 +import com.fasterxml.jackson.annotation.JsonValue;
  5 +
  6 +/**
  7 + * 导入时刻表时,excel的数据格式类型。
  8 + */
  9 +public enum ExcelFormatType {
  10 + Normal("normal"), // 老系统格式
  11 + Dynamic("dynamic"); // 自动生成的导出格式
  12 +
  13 + private String flag;
  14 +
  15 + @JsonCreator
  16 + ExcelFormatType(String flag) {
  17 + this.flag = flag;
  18 + }
  19 +
  20 + @JsonValue
  21 + public String getFlag() {
  22 + return flag;
  23 + }
  24 +
  25 + public void setFlag(String flag) {
  26 + this.flag = flag;
  27 + }
  28 +
  29 + public static ExcelFormatType getEnum(String str) {
  30 + if ("normal".equals(str)) {
  31 + return Normal;
  32 + } else if ("dynamic".equals(str)) {
  33 + return Dynamic;
  34 + } else {
  35 + throw new IllegalArgumentException("未知ExcelFormatType");
  36 + }
  37 + }
  38 +}
... ...
src/main/java/com/bsth/service/schedule/utils/DataToolsFileType.java
... ... @@ -76,7 +76,8 @@ public enum DataToolsFileType {
76 76  
77 77 // application/x-tika-ooxml
78 78 if ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet".equals(type) ||
79   - "application/x-tika-ooxml".equals(type)) {
  79 + "application/x-tika-ooxml".equals(type) ||
  80 + "application/zip".equals(type)) {
80 81 // .xlsx 2007之后的格式
81 82 return true;
82 83 } else {
... ...
src/main/java/com/bsth/service/schedule/utils/DataToolsProperties.java
... ... @@ -81,6 +81,9 @@ public class DataToolsProperties {
81 81 /** 时刻表明细信息导入2(带版本) */
82 82 @NotNull
83 83 private String ttinfodetailDatainputktr2version;
  84 + /** 时刻表明细信息导入2(带版本),使用生成时刻表格式 */
  85 + @NotNull
  86 + private String ttinfodetailDatainputktr2version2;
84 87 /** 排班规则信息导入 */
85 88 @NotNull
86 89 private String scheduleruleDatainputktr;
... ... @@ -353,4 +356,12 @@ public class DataToolsProperties {
353 356 public void setTransTemplatedir(String transTemplatedir) {
354 357 this.transTemplatedir = transTemplatedir;
355 358 }
  359 +
  360 + public String getTtinfodetailDatainputktr2version2() {
  361 + return ttinfodetailDatainputktr2version2;
  362 + }
  363 +
  364 + public void setTtinfodetailDatainputktr2version2(String ttinfodetailDatainputktr2version2) {
  365 + this.ttinfodetailDatainputktr2version2 = ttinfodetailDatainputktr2version2;
  366 + }
356 367 }
... ...
src/main/java/com/bsth/service/schedule/utils/PoiUtils.java
... ... @@ -2,7 +2,6 @@ package com.bsth.service.schedule.utils;
2 2  
3 3 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
4 4 import org.apache.poi.ss.usermodel.*;
5   -import org.apache.poi.ss.util.WorkbookUtil;
6 5 import org.apache.poi.xssf.usermodel.*;
7 6  
8 7 import java.awt.Color;
... ... @@ -126,6 +125,12 @@ public class PoiUtils {
126 125 );
127 126 }
128 127  
  128 + public static XSSFCell setStringStyleXSSFCellStyle(XSSFWorkbook xssfWorkbook, XSSFCell xssfCell) {
  129 + DataFormat dataFormat = xssfWorkbook.createDataFormat();
  130 + xssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("@"));
  131 + return xssfCell;
  132 + }
  133 +
129 134 public static XSSFCell setIntegerStyleXSSFCellStyle(XSSFWorkbook xssfWorkbook, XSSFCell xssfCell) {
130 135 CreationHelper creationHelper = xssfWorkbook.getCreationHelper();
131 136 XSSFCellStyle xssfCellStyle = xssfCell.getCellStyle();
... ...
src/main/resources/datatools/config-dev.properties
... ... @@ -10,7 +10,7 @@ datatools.kvars_dbuname=root
10 10 #数据库密码
11 11 datatools.kvars_dbpwd=
12 12 #数据库库名
13   -datatools.kvars_dbdname=control
  13 +datatools.kvars_dbdname=test_control
14 14  
15 15 # 3、上传数据配置信息
16 16 # 上传文件目录配置(根据不同的环境需要修正)
... ... @@ -41,6 +41,8 @@ datatools.ttinfodetail_datainputktr=/datatools/ktrs/ttinfodetailDataInput.ktr
41 41 datatools.ttinfodetail_datainputktr2=/datatools/ktrs/ttinfodetailDataInput2.ktr
42 42 # 时刻表明细信息导入2(版本化)
43 43 datatools.ttinfodetail_datainputktr2version=/datatools/ktrs/ttinfodetailDataInput2_version.ktr
  44 +# 时刻表明细信息导入2(版本化),使用生成时刻表格式
  45 +datatools.ttinfodetail_datainputktr2version2=/datatools/ktrs/ttinfodetailDataInput2_version_2.ktr
44 46  
45 47 # 车辆配置信息导入
46 48 datatools.carsconfig_datainputktr=/datatools/ktrs/carsConfigDataInput.ktr
... ...
src/main/resources/datatools/config-prod.properties
... ... @@ -42,6 +42,8 @@ datatools.ttinfodetail_datainputktr=/datatools/ktrs/ttinfodetailDataInput.ktr
42 42 datatools.ttinfodetail_datainputktr2=/datatools/ktrs/ttinfodetailDataInput2.ktr
43 43 # 时刻表明细信息导入2(版本化)
44 44 datatools.ttinfodetail_datainputktr2version=/datatools/ktrs/ttinfodetailDataInput2_version.ktr
  45 +# 时刻表明细信息导入2(版本化),使用生成时刻表格式
  46 +datatools.ttinfodetail_datainputktr2version2=/datatools/ktrs/ttinfodetailDataInput2_version_2.ktr
45 47  
46 48 # 车辆配置信息导入
47 49 datatools.carsconfig_datainputktr=/datatools/ktrs/carsConfigDataInput.ktr
... ...
src/main/resources/datatools/ktrs/ttinfodetailDataInput2_version_2.ktr 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x5165;-&#x7ad9;&#x70b9;&#x8def;&#x7531;&#x7248;&#x672c;2</name>
  5 + <description>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</description>
  6 + <extended_description>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;&#xff0c;&#x4f7f;&#x7528;&#x751f;&#x6210;&#x65f6;&#x523b;&#x8868;&#x683c;&#x5f0f;</extended_description>
  7 + <trans_version/>
  8 + <trans_type>Normal</trans_type>
  9 + <trans_status>0</trans_status>
  10 + <directory>&#x2f;</directory>
  11 + <parameters>
  12 + </parameters>
  13 + <log>
  14 +<trans-log-table><connection/>
  15 +<schema/>
  16 +<table/>
  17 +<size_limit_lines/>
  18 +<interval/>
  19 +<timeout_days/>
  20 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
  21 +<perf-log-table><connection/>
  22 +<schema/>
  23 +<table/>
  24 +<interval/>
  25 +<timeout_days/>
  26 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
  27 +<channel-log-table><connection/>
  28 +<schema/>
  29 +<table/>
  30 +<timeout_days/>
  31 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
  32 +<step-log-table><connection/>
  33 +<schema/>
  34 +<table/>
  35 +<timeout_days/>
  36 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
  37 +<metrics-log-table><connection/>
  38 +<schema/>
  39 +<table/>
  40 +<timeout_days/>
  41 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
  42 + </log>
  43 + <maxdate>
  44 + <connection/>
  45 + <table/>
  46 + <field/>
  47 + <offset>0.0</offset>
  48 + <maxdiff>0.0</maxdiff>
  49 + </maxdate>
  50 + <size_rowset>10000</size_rowset>
  51 + <sleep_time_empty>50</sleep_time_empty>
  52 + <sleep_time_full>50</sleep_time_full>
  53 + <unique_connections>N</unique_connections>
  54 + <feedback_shown>Y</feedback_shown>
  55 + <feedback_size>50000</feedback_size>
  56 + <using_thread_priorities>Y</using_thread_priorities>
  57 + <shared_objects_file/>
  58 + <capture_step_performance>N</capture_step_performance>
  59 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  60 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  61 + <dependencies>
  62 + </dependencies>
  63 + <partitionschemas>
  64 + </partitionschemas>
  65 + <slaveservers>
  66 + </slaveservers>
  67 + <clusterschemas>
  68 + </clusterschemas>
  69 + <created_user>-</created_user>
  70 + <created_date>2016&#x2f;06&#x2f;30 12&#x3a;21&#x3a;57.536</created_date>
  71 + <modified_user>-</modified_user>
  72 + <modified_date>2016&#x2f;06&#x2f;30 12&#x3a;21&#x3a;57.536</modified_date>
  73 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  74 + <is_key_private>N</is_key_private>
  75 + </info>
  76 + <notepads>
  77 + <notepad>
  78 + <note>&#x5b57;&#x5178;&#x8868;&#x5bf9;&#x5e94;&#xff08;&#x4ee5;&#x540e;&#x76f4;&#x63a5;&#x67e5;&#x627e;&#x8868; bsth_c_sys_dictionary&#xff09;&#xa;&#x7c7b;&#x578b; &#x4ee3;&#x7801; &#x540d;&#x79f0;&#xa;LineTrend 0 &#x4e0a;&#x884c;&#xa;LineTrend 1 &#x4e0b;&#x884c;&#xa;ScheduleType normal &#x6b63;&#x5e38;&#x73ed;&#x6b21;&#xa;ScheduleType out &#x51fa;&#x573a;&#xa;ScheduleType in &#x8fdb;&#x573a;&#xa;ScheduleType temp &#x4e34;&#x52a0;&#xa;ScheduleType region &#x533a;&#x95f4;&#xa;ScheduleType venting &#x653e;&#x7a7a;&#xa;ScheduleType major &#x653e;&#x5927;&#x7ad9;</note>
  79 + <xloc>606</xloc>
  80 + <yloc>129</yloc>
  81 + <width>332</width>
  82 + <heigth>186</heigth>
  83 + <fontname>YaHei Consolas Hybrid</fontname>
  84 + <fontsize>12</fontsize>
  85 + <fontbold>N</fontbold>
  86 + <fontitalic>N</fontitalic>
  87 + <fontcolorred>0</fontcolorred>
  88 + <fontcolorgreen>0</fontcolorgreen>
  89 + <fontcolorblue>0</fontcolorblue>
  90 + <backgroundcolorred>255</backgroundcolorred>
  91 + <backgroundcolorgreen>205</backgroundcolorgreen>
  92 + <backgroundcolorblue>112</backgroundcolorblue>
  93 + <bordercolorred>100</bordercolorred>
  94 + <bordercolorgreen>100</bordercolorgreen>
  95 + <bordercolorblue>100</bordercolorblue>
  96 + <drawshadow>Y</drawshadow>
  97 + </notepad>
  98 + <notepad>
  99 + <note>&#x56e0;&#x4e3a;&#x65f6;&#x523b;&#x8868;&#x8f93;&#x5165;&#x683c;&#x5f0f;&#x4e0d;&#x786e;&#x5b9a;&#x6027;&#xff0c;&#x4e3b;&#x8981;&#x56e0;&#x4e3a;&#x8868;&#x7ed3;&#x6784;&#x662f;&#x53cd;&#x8303;&#x5f0f;&#x5316;&#x7684;&#xff0c;&#xa;&#x6240;&#x4ee5;&#x9700;&#x8981;&#x5916;&#x90e8;&#x52a8;&#x6001;&#x6307;&#x5b9a;&#x613f;&#x6570;&#x636e;&#xff0c;&#x5934;&#x4e09;&#x4e2a;step&#x52a8;&#x6001;&#x6307;&#x5b9a;&#x613f;&#x6570;&#x636e;&#xa;&#xa;</note>
  100 + <xloc>24</xloc>
  101 + <yloc>208</yloc>
  102 + <width>346</width>
  103 + <heigth>74</heigth>
  104 + <fontname>YaHei Consolas Hybrid</fontname>
  105 + <fontsize>12</fontsize>
  106 + <fontbold>N</fontbold>
  107 + <fontitalic>N</fontitalic>
  108 + <fontcolorred>0</fontcolorred>
  109 + <fontcolorgreen>0</fontcolorgreen>
  110 + <fontcolorblue>0</fontcolorblue>
  111 + <backgroundcolorred>255</backgroundcolorred>
  112 + <backgroundcolorgreen>205</backgroundcolorgreen>
  113 + <backgroundcolorblue>112</backgroundcolorblue>
  114 + <bordercolorred>100</bordercolorred>
  115 + <bordercolorgreen>100</bordercolorgreen>
  116 + <bordercolorblue>100</bordercolorblue>
  117 + <drawshadow>Y</drawshadow>
  118 + </notepad>
  119 + <notepad>
  120 + <note>&#x8fd9;&#x91cc;&#x6709;&#x4e9b;&#x95ee;&#x9898;&#xa;&#x5728;window2012&#x7684;&#x73af;&#x5883;&#x4e0b;&#xff0c;&#xa;MySql&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x4e2d;&#x5982;&#x679c;&#x8fd4;&#x56de;&#x4e2d;&#x6587;&#x5185;&#x5bb9;&#x7684;&#x5b57;&#x6bb5;&#xff0c;&#x8fd9;&#x4e2a;&#x5185;&#x5bb9;&#x4e71;&#x7801;&#xa;&#x89e3;&#x51b3;&#x529e;&#x6cd5;&#xff0c;&#x5c31;&#x662f;&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x5168;&#x90e8;&#x7f13;&#x5b58;&#xff0c;&#x5c31;&#x4e0d;&#x4e71;&#x7801;&#xa;linux&#x73af;&#x5883;&#x4e0b;&#x6ca1;&#x95ee;&#x9898;</note>
  121 + <xloc>721</xloc>
  122 + <yloc>762</yloc>
  123 + <width>333</width>
  124 + <heigth>90</heigth>
  125 + <fontname>YaHei Consolas Hybrid</fontname>
  126 + <fontsize>12</fontsize>
  127 + <fontbold>N</fontbold>
  128 + <fontitalic>N</fontitalic>
  129 + <fontcolorred>0</fontcolorred>
  130 + <fontcolorgreen>0</fontcolorgreen>
  131 + <fontcolorblue>0</fontcolorblue>
  132 + <backgroundcolorred>255</backgroundcolorred>
  133 + <backgroundcolorgreen>205</backgroundcolorgreen>
  134 + <backgroundcolorblue>112</backgroundcolorblue>
  135 + <bordercolorred>100</bordercolorred>
  136 + <bordercolorgreen>100</bordercolorgreen>
  137 + <bordercolorblue>100</bordercolorblue>
  138 + <drawshadow>Y</drawshadow>
  139 + </notepad>
  140 + <notepad>
  141 + <note>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#xff0c;&#x65b9;&#x5411;&#x6709;&#x65f6;&#x786e;&#x5b9a;&#x4e0d;&#x51c6;&#xff0c;&#xa;&#x7a7a;&#x7684;&#x60c5;&#x51b5;&#x4e0b;&#x8bbe;&#x5b9a;&#x4e3a;0&#xff08;&#x4e0a;&#x884c;&#xff09;</note>
  142 + <xloc>104</xloc>
  143 + <yloc>939</yloc>
  144 + <width>178</width>
  145 + <heigth>42</heigth>
  146 + <fontname>YaHei Consolas Hybrid</fontname>
  147 + <fontsize>12</fontsize>
  148 + <fontbold>N</fontbold>
  149 + <fontitalic>N</fontitalic>
  150 + <fontcolorred>0</fontcolorred>
  151 + <fontcolorgreen>0</fontcolorgreen>
  152 + <fontcolorblue>0</fontcolorblue>
  153 + <backgroundcolorred>255</backgroundcolorred>
  154 + <backgroundcolorgreen>205</backgroundcolorgreen>
  155 + <backgroundcolorblue>112</backgroundcolorblue>
  156 + <bordercolorred>100</bordercolorred>
  157 + <bordercolorgreen>100</bordercolorgreen>
  158 + <bordercolorblue>100</bordercolorblue>
  159 + <drawshadow>Y</drawshadow>
  160 + </notepad>
  161 + <notepad>
  162 + <note>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#xff0c;&#x65b9;&#x5411;&#x6709;&#x65f6;&#x786e;&#x5b9a;&#x4e0d;&#x51c6;&#xff0c;&#xa;&#x7a7a;&#x7684;&#x60c5;&#x51b5;&#x4e0b;&#x8bbe;&#x5b9a;&#x4e3a;0&#xff08;&#x4e0a;&#x884c;&#xff09;</note>
  163 + <xloc>578</xloc>
  164 + <yloc>1084</yloc>
  165 + <width>178</width>
  166 + <heigth>42</heigth>
  167 + <fontname>YaHei Consolas Hybrid</fontname>
  168 + <fontsize>12</fontsize>
  169 + <fontbold>N</fontbold>
  170 + <fontitalic>N</fontitalic>
  171 + <fontcolorred>0</fontcolorred>
  172 + <fontcolorgreen>0</fontcolorgreen>
  173 + <fontcolorblue>0</fontcolorblue>
  174 + <backgroundcolorred>255</backgroundcolorred>
  175 + <backgroundcolorgreen>205</backgroundcolorgreen>
  176 + <backgroundcolorblue>112</backgroundcolorblue>
  177 + <bordercolorred>100</bordercolorred>
  178 + <bordercolorgreen>100</bordercolorgreen>
  179 + <bordercolorblue>100</bordercolorblue>
  180 + <drawshadow>Y</drawshadow>
  181 + </notepad>
  182 + </notepads>
  183 + <connection>
  184 + <name>192.168.168.1_jwgl_dw</name>
  185 + <server>192.168.168.1</server>
  186 + <type>ORACLE</type>
  187 + <access>Native</access>
  188 + <database>orcl</database>
  189 + <port>1521</port>
  190 + <username>jwgl_dw</username>
  191 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  192 + <servername/>
  193 + <data_tablespace/>
  194 + <index_tablespace/>
  195 + <attributes>
  196 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  197 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  198 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  199 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  200 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  201 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  202 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  203 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  204 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  205 + </attributes>
  206 + </connection>
  207 + <connection>
  208 + <name>bus_control_variable</name>
  209 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  210 + <type>MYSQL</type>
  211 + <access>Native</access>
  212 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  213 + <port>3306</port>
  214 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  215 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  216 + <servername/>
  217 + <data_tablespace/>
  218 + <index_tablespace/>
  219 + <attributes>
  220 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  221 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  222 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  223 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  224 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  225 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  226 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  227 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  228 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  229 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  230 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  231 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  232 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  233 + </attributes>
  234 + </connection>
  235 + <connection>
  236 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  237 + <server>localhost</server>
  238 + <type>MYSQL</type>
  239 + <access>Native</access>
  240 + <database>control</database>
  241 + <port>3306</port>
  242 + <username>root</username>
  243 + <password>Encrypted </password>
  244 + <servername/>
  245 + <data_tablespace/>
  246 + <index_tablespace/>
  247 + <attributes>
  248 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  249 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  250 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  251 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  252 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  253 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  254 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  255 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  256 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  257 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  258 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  259 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  260 + </attributes>
  261 + </connection>
  262 + <connection>
  263 + <name>bus_control_&#x672c;&#x673a;</name>
  264 + <server>localhost</server>
  265 + <type>MYSQL</type>
  266 + <access>Native</access>
  267 + <database>control</database>
  268 + <port>3306</port>
  269 + <username>root</username>
  270 + <password>Encrypted </password>
  271 + <servername/>
  272 + <data_tablespace/>
  273 + <index_tablespace/>
  274 + <attributes>
  275 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  276 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  277 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  278 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  279 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  280 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  281 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  282 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  283 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  284 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  285 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  286 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  287 + </attributes>
  288 + </connection>
  289 + <connection>
  290 + <name>NHJW_VM</name>
  291 + <server>192.168.198.240</server>
  292 + <type>ORACLE</type>
  293 + <access>Native</access>
  294 + <database>orcl</database>
  295 + <port>1521</port>
  296 + <username>nhjw</username>
  297 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10d09aa5cd</password>
  298 + <servername/>
  299 + <data_tablespace/>
  300 + <index_tablespace/>
  301 + <attributes>
  302 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  303 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  304 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  305 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  306 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  307 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  308 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  309 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  310 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  311 + </attributes>
  312 + </connection>
  313 + <connection>
  314 + <name>PDGJ_VM</name>
  315 + <server>192.168.198.240</server>
  316 + <type>ORACLE</type>
  317 + <access>Native</access>
  318 + <database>orcl</database>
  319 + <port>1521</port>
  320 + <username>pdgj</username>
  321 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10ce96a8d0</password>
  322 + <servername/>
  323 + <data_tablespace/>
  324 + <index_tablespace/>
  325 + <attributes>
  326 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  327 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  328 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  329 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  330 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  331 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  332 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  333 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  334 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  335 + </attributes>
  336 + </connection>
  337 + <connection>
  338 + <name>xlab_mysql_youle</name>
  339 + <server>101.231.124.8</server>
  340 + <type>MYSQL</type>
  341 + <access>Native</access>
  342 + <database>xlab_youle</database>
  343 + <port>45687</port>
  344 + <username>xlab-youle</username>
  345 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  346 + <servername/>
  347 + <data_tablespace/>
  348 + <index_tablespace/>
  349 + <attributes>
  350 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  351 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  352 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  353 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  354 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  355 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  356 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  357 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  358 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  359 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  360 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  361 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  362 + </attributes>
  363 + </connection>
  364 + <connection>
  365 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  366 + <server>localhost</server>
  367 + <type>MYSQL</type>
  368 + <access>Native</access>
  369 + <database>xlab_youle</database>
  370 + <port>3306</port>
  371 + <username>root</username>
  372 + <password>Encrypted </password>
  373 + <servername/>
  374 + <data_tablespace/>
  375 + <index_tablespace/>
  376 + <attributes>
  377 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  378 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  379 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  380 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  381 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  382 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  383 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  384 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  385 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  386 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  387 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  388 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  389 + </attributes>
  390 + </connection>
  391 + <connection>
  392 + <name>xlab_youle</name>
  393 + <server/>
  394 + <type>MYSQL</type>
  395 + <access>JNDI</access>
  396 + <database>xlab_youle</database>
  397 + <port>1521</port>
  398 + <username/>
  399 + <password>Encrypted </password>
  400 + <servername/>
  401 + <data_tablespace/>
  402 + <index_tablespace/>
  403 + <attributes>
  404 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  405 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  406 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  407 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  408 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  409 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  410 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  411 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  412 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  413 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  414 + </attributes>
  415 + </connection>
  416 + <order>
  417 + <hop> <from>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</from><to>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</to><enabled>Y</enabled> </hop>
  418 + <hop> <from>&#x6dfb;&#x52a0;&#x5bf9;&#x5e94;&#x73ed;&#x6b21;&#x6570;</from><to>&#x5904;&#x7406;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  419 + <hop> <from>&#x67e5;&#x627e;&#x65f6;&#x523b;&#x8868;&#x57fa;&#x7840;&#x4fe1;&#x606f;&#x5173;&#x8054;</from><to>&#x67e5;&#x627e;&#x8def;&#x724c;&#x5173;&#x8054;</to><enabled>Y</enabled> </hop>
  420 + <hop> <from>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x5173;&#x8054;</from><to>&#x67e5;&#x627e;&#x65f6;&#x523b;&#x8868;&#x57fa;&#x7840;&#x4fe1;&#x606f;&#x5173;&#x8054;</to><enabled>Y</enabled> </hop>
  421 + <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178;</from><to>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178;</to><enabled>Y</enabled> </hop>
  422 + <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 2</from><to>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 2</to><enabled>Y</enabled> </hop>
  423 + <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 3</from><to>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 3</to><enabled>Y</enabled> </hop>
  424 + <hop> <from>&#x5339;&#x914d;&#x4e0a;&#x4e0b;&#x884c;&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x7c7b;&#x578b;&#x4fee;&#x6b63;</to><enabled>Y</enabled> </hop>
  425 + <hop> <from>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;1</from><to>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;2</to><enabled>Y</enabled> </hop>
  426 + <hop> <from>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;1</from><to>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  427 + <hop> <from>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;2</from><to>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  428 + <hop> <from>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;2</from><to>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  429 + <hop> <from>&#x67e5;&#x627e;&#x6240;&#x6709;&#x7ebf;&#x8def;&#x4e0a;&#x4e0b;&#x884c;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x5339;&#x914d;&#x4e0a;&#x4e0b;&#x884c;&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</to><enabled>Y</enabled> </hop>
  430 + <hop> <from>&#x67e5;&#x627e;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;</from><to>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178;</to><enabled>Y</enabled> </hop>
  431 + <hop> <from>&#x67e5;&#x627e;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</from><to>&#x67e5;&#x627e;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;</to><enabled>Y</enabled> </hop>
  432 + <hop> <from>&#x6b63;&#x5e38;&#x73ed;&#x6b21;_&#x5904;&#x7406;&#x6570;&#x636e;</from><to>&#x67e5;&#x627e;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</to><enabled>Y</enabled> </hop>
  433 + <hop> <from>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</from><to>&#x6b63;&#x5e38;&#x73ed;&#x6b21;_&#x5904;&#x7406;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  434 + <hop> <from>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178;</from><to>&#x67e5;&#x627e;&#x6240;&#x6709;&#x7ebf;&#x8def;&#x4e0a;&#x4e0b;&#x884c;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</to><enabled>Y</enabled> </hop>
  435 + <hop> <from>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 2</from><to>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x51fa;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</to><enabled>Y</enabled> </hop>
  436 + <hop> <from>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 3</from><to>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x8fdb;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</to><enabled>Y</enabled> </hop>
  437 + <hop> <from>&#x8ba1;&#x7b97;&#x73ed;&#x6b21;&#x7c7b;&#x578b;</from><to>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;1</to><enabled>Y</enabled> </hop>
  438 + <hop> <from>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</from><to>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;1</to><enabled>Y</enabled> </hop>
  439 + <hop> <from>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;1</from><to>&#x51fa;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x7ec8;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</to><enabled>Y</enabled> </hop>
  440 + <hop> <from>&#x51fa;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x7ec8;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</from><to>&#x67e5;&#x627e;&#x51fa;&#x573a;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</to><enabled>Y</enabled> </hop>
  441 + <hop> <from>&#x67e5;&#x627e;&#x51fa;&#x573a;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</from><to>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 2</to><enabled>Y</enabled> </hop>
  442 + <hop> <from>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</from><to>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;2</to><enabled>Y</enabled> </hop>
  443 + <hop> <from>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;2</from><to>&#x8fdb;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x8d77;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</to><enabled>Y</enabled> </hop>
  444 + <hop> <from>&#x8fdb;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x8d77;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</from><to>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x7ebf;&#x8def;&#x65b9;&#x5411;</to><enabled>Y</enabled> </hop>
  445 + <hop> <from>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x7ebf;&#x8def;&#x65b9;&#x5411;</from><to>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x7ec8;&#x70b9;&#x7ad9;&#xff0c;&#x5e76;&#x4f5c;&#x4e3a;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x7684;&#x8d77;&#x70b9;&#x7ad9;</to><enabled>Y</enabled> </hop>
  446 + <hop> <from>&#x5206;&#x7ec4;&#x5404;&#x4e2a;&#x8def;&#x724c;&#x7684;&#x7ad9;</from><to>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x5173;&#x8054;</to><enabled>Y</enabled> </hop>
  447 + <hop> <from>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</from><to>&#x8bb0;&#x5f55;&#x5173;&#x8054; &#x28;&#x7b1b;&#x5361;&#x5c14;&#x8f93;&#x51fa;&#x29;</to><enabled>Y</enabled> </hop>
  448 + <hop> <from>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</from><to>&#x8bb0;&#x5f55;&#x5173;&#x8054; &#x28;&#x7b1b;&#x5361;&#x5c14;&#x8f93;&#x51fa;&#x29;</to><enabled>Y</enabled> </hop>
  449 + <hop> <from>&#x8bb0;&#x5f55;&#x5173;&#x8054; &#x28;&#x7b1b;&#x5361;&#x5c14;&#x8f93;&#x51fa;&#x29;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  450 + <hop> <from>&#x7c7b;&#x578b;&#x4fee;&#x6b63;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail</to><enabled>Y</enabled> </hop>
  451 + <hop> <from>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x7ec8;&#x70b9;&#x7ad9;&#xff0c;&#x5e76;&#x4f5c;&#x4e3a;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x7684;&#x8d77;&#x70b9;&#x7ad9;</from><to>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</to><enabled>Y</enabled> </hop>
  452 + <hop> <from>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</from><to>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 3</to><enabled>Y</enabled> </hop>
  453 + <hop> <from>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x51fa;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x5339;&#x914d;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</to><enabled>Y</enabled> </hop>
  454 + <hop> <from>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x8fdb;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x5339;&#x914d;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</to><enabled>Y</enabled> </hop>
  455 + <hop> <from>&#x5339;&#x914d;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x4e0a;&#x4e0b;&#x884c;NULL&#x5224;&#x5b9a;</to><enabled>Y</enabled> </hop>
  456 + <hop> <from>&#x4e0a;&#x4e0b;&#x884c;NULL&#x5224;&#x5b9a;</from><to>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 2</to><enabled>Y</enabled> </hop>
  457 + <hop> <from>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 2</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 2</to><enabled>Y</enabled> </hop>
  458 + <hop> <from>&#x5339;&#x914d;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x4e0a;&#x4e0b;&#x884c;&#x5224;&#x5b9a; 2</to><enabled>Y</enabled> </hop>
  459 + <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5224;&#x5b9a; 2</from><to>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 3</to><enabled>Y</enabled> </hop>
  460 + <hop> <from>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 3</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 3</to><enabled>Y</enabled> </hop>
  461 + <hop> <from>&#x67e5;&#x627e;&#x8def;&#x724c;&#x5173;&#x8054;</from><to>&#x7ad9;&#x70b9;&#x8def;&#x7531;&#x7248;&#x672c;&#x7c7b;&#x578b;</to><enabled>Y</enabled> </hop>
  462 + <hop> <from>&#x7ad9;&#x70b9;&#x8def;&#x7531;&#x7248;&#x672c;&#x7c7b;&#x578b;</from><to>&#x8ba1;&#x7b97;&#x73ed;&#x6b21;&#x7c7b;&#x578b;</to><enabled>Y</enabled> </hop>
  463 + <hop> <from>&#x7ad9;&#x70b9;&#x8def;&#x7531;&#x7248;&#x672c;&#x7c7b;&#x578b;</from><to>&#x66f4;&#x65b0;&#x65f6;&#x523b;&#x8868;&#x4e3b;&#x8868;&#x7248;&#x672c;</to><enabled>Y</enabled> </hop>
  464 + <hop> <from>&#x6dfb;&#x52a0;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;</from><to>&#x6dfb;&#x52a0;&#x5bf9;&#x5e94;&#x73ed;&#x6b21;&#x6570;</to><enabled>Y</enabled> </hop>
  465 + <hop> <from>&#x5904;&#x7406;&#x6570;&#x636e;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;&#xff08;&#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x4e3a;&#x7a7a;&#xff09;</to><enabled>Y</enabled> </hop>
  466 + <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;&#xff08;&#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x4e3a;&#x7a7a;&#xff09;</from><to>&#x5206;&#x7ec4;&#x5404;&#x4e2a;&#x8def;&#x724c;&#x7684;&#x7ad9;</to><enabled>Y</enabled> </hop>
  467 + <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6dfb;&#x52a0;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;</to><enabled>Y</enabled> </hop>
  468 + </order>
  469 + <step>
  470 + <name>&#x4e0a;&#x4e0b;&#x884c;NULL&#x5224;&#x5b9a;</name>
  471 + <type>IfNull</type>
  472 + <description/>
  473 + <distribute>Y</distribute>
  474 + <custom_distribution/>
  475 + <copies>1</copies>
  476 + <partitioning>
  477 + <method>none</method>
  478 + <schema_name/>
  479 + </partitioning>
  480 + <replaceAllByValue/>
  481 + <replaceAllMask/>
  482 + <selectFields>Y</selectFields>
  483 + <selectValuesType>N</selectValuesType>
  484 + <setEmptyStringAll>N</setEmptyStringAll>
  485 + <valuetypes>
  486 + </valuetypes>
  487 + <fields>
  488 + <field>
  489 + <name>sxx</name>
  490 + <value>0</value>
  491 + <mask/>
  492 + <set_empty_string>N</set_empty_string>
  493 + </field>
  494 + </fields>
  495 + <cluster_schema/>
  496 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  497 + <xloc>335</xloc>
  498 + <yloc>938</yloc>
  499 + <draw>Y</draw>
  500 + </GUI>
  501 + </step>
  502 +
  503 + <step>
  504 + <name>&#x4e0a;&#x4e0b;&#x884c;&#x5224;&#x5b9a; 2</name>
  505 + <type>IfNull</type>
  506 + <description/>
  507 + <distribute>Y</distribute>
  508 + <custom_distribution/>
  509 + <copies>1</copies>
  510 + <partitioning>
  511 + <method>none</method>
  512 + <schema_name/>
  513 + </partitioning>
  514 + <replaceAllByValue/>
  515 + <replaceAllMask/>
  516 + <selectFields>Y</selectFields>
  517 + <selectValuesType>N</selectValuesType>
  518 + <setEmptyStringAll>N</setEmptyStringAll>
  519 + <valuetypes>
  520 + </valuetypes>
  521 + <fields>
  522 + <field>
  523 + <name>sxx2</name>
  524 + <value>0</value>
  525 + <mask/>
  526 + <set_empty_string>N</set_empty_string>
  527 + </field>
  528 + </fields>
  529 + <cluster_schema/>
  530 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  531 + <xloc>804</xloc>
  532 + <yloc>1081</yloc>
  533 + <draw>Y</draw>
  534 + </GUI>
  535 + </step>
  536 +
  537 + <step>
  538 + <name>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178;</name>
  539 + <type>ValueMapper</type>
  540 + <description/>
  541 + <distribute>Y</distribute>
  542 + <custom_distribution/>
  543 + <copies>1</copies>
  544 + <partitioning>
  545 + <method>none</method>
  546 + <schema_name/>
  547 + </partitioning>
  548 + <field_to_use>sxx</field_to_use>
  549 + <target_field>sxx_desc</target_field>
  550 + <non_match_default/>
  551 + <fields>
  552 + <field>
  553 + <source_value>0</source_value>
  554 + <target_value>&#x4e0a;&#x884c;</target_value>
  555 + </field>
  556 + <field>
  557 + <source_value>1</source_value>
  558 + <target_value>&#x4e0b;&#x884c;</target_value>
  559 + </field>
  560 + </fields>
  561 + <cluster_schema/>
  562 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  563 + <xloc>147</xloc>
  564 + <yloc>403</yloc>
  565 + <draw>Y</draw>
  566 + </GUI>
  567 + </step>
  568 +
  569 + <step>
  570 + <name>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 2</name>
  571 + <type>ValueMapper</type>
  572 + <description/>
  573 + <distribute>Y</distribute>
  574 + <custom_distribution/>
  575 + <copies>1</copies>
  576 + <partitioning>
  577 + <method>none</method>
  578 + <schema_name/>
  579 + </partitioning>
  580 + <field_to_use>sxx</field_to_use>
  581 + <target_field>sxx_desc</target_field>
  582 + <non_match_default/>
  583 + <fields>
  584 + <field>
  585 + <source_value>0</source_value>
  586 + <target_value>&#x4e0a;&#x884c;</target_value>
  587 + </field>
  588 + <field>
  589 + <source_value>1</source_value>
  590 + <target_value>&#x4e0b;&#x884c;</target_value>
  591 + </field>
  592 + </fields>
  593 + <cluster_schema/>
  594 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  595 + <xloc>331</xloc>
  596 + <yloc>598</yloc>
  597 + <draw>Y</draw>
  598 + </GUI>
  599 + </step>
  600 +
  601 + <step>
  602 + <name>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 3</name>
  603 + <type>ValueMapper</type>
  604 + <description/>
  605 + <distribute>Y</distribute>
  606 + <custom_distribution/>
  607 + <copies>1</copies>
  608 + <partitioning>
  609 + <method>none</method>
  610 + <schema_name/>
  611 + </partitioning>
  612 + <field_to_use>sxx</field_to_use>
  613 + <target_field>sxx_desc</target_field>
  614 + <non_match_default/>
  615 + <fields>
  616 + <field>
  617 + <source_value>0</source_value>
  618 + <target_value>&#x4e0a;&#x884c;</target_value>
  619 + </field>
  620 + <field>
  621 + <source_value>1</source_value>
  622 + <target_value>&#x4e0b;&#x884c;</target_value>
  623 + </field>
  624 + </fields>
  625 + <cluster_schema/>
  626 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  627 + <xloc>553</xloc>
  628 + <yloc>859</yloc>
  629 + <draw>Y</draw>
  630 + </GUI>
  631 + </step>
  632 +
  633 + <step>
  634 + <name>&#x51fa;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x7ec8;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</name>
  635 + <type>ScriptValueMod</type>
  636 + <description/>
  637 + <distribute>Y</distribute>
  638 + <custom_distribution/>
  639 + <copies>1</copies>
  640 + <partitioning>
  641 + <method>none</method>
  642 + <schema_name/>
  643 + </partitioning>
  644 + <compatible>N</compatible>
  645 + <optimizationLevel>9</optimizationLevel>
  646 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  647 + <jsScript_name>Script 1</jsScript_name>
  648 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;&#x2f;&#x2f; &#x6dfb;&#x52a0;&#x7ad9;&#x70b9;&#x6807;&#x8bc6;&#xa;var cc_groups &#x3d; qdzgroups.split&#x28;&#x22;,&#x22;&#x29;&#x3b; &#x2f;&#x2f; &#x6240;&#x6709;&#x73ed;&#x6b21;&#x8d77;&#x70b9;&#x7ad9;&#x6570;&#x7ec4;&#xa;var zdzname &#x3d; cc_groups&#x5b;gno&#x5d;&#x3b; &#x2f;&#x2f; &#x51fa;&#x573a;&#x73ed;&#x6b21;&#x7684;&#x7ec8;&#x70b9;&#x7ad9;&#x662f;&#x4e0b;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x8d77;&#x59cb;&#x7ad9;&#xa;var endZdtype &#x3d; &#x27;B&#x27;&#x3b;&#xa;&#x2f;&#x2f; var endZdtype &#x3d; &#x27;E&#x27;&#x3b;&#xa;&#xa;var destory &#x3d; 0&#x3b; &#x2f;&#x2f; &#x672a;&#x64a4;&#x9500;flag</jsScript_script>
  649 + </jsScript> </jsScripts> <fields> <field> <name>zdzname</name>
  650 + <rename>zdzname</rename>
  651 + <type>String</type>
  652 + <length>-1</length>
  653 + <precision>-1</precision>
  654 + <replace>N</replace>
  655 + </field> <field> <name>endZdtype</name>
  656 + <rename>endZdtype</rename>
  657 + <type>String</type>
  658 + <length>-1</length>
  659 + <precision>-1</precision>
  660 + <replace>N</replace>
  661 + </field> <field> <name>destory</name>
  662 + <rename>destory</rename>
  663 + <type>Integer</type>
  664 + <length>-1</length>
  665 + <precision>-1</precision>
  666 + <replace>N</replace>
  667 + </field> </fields> <cluster_schema/>
  668 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  669 + <xloc>575</xloc>
  670 + <yloc>502</yloc>
  671 + <draw>Y</draw>
  672 + </GUI>
  673 + </step>
  674 +
  675 + <step>
  676 + <name>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</name>
  677 + <type>Dummy</type>
  678 + <description/>
  679 + <distribute>Y</distribute>
  680 + <custom_distribution/>
  681 + <copies>1</copies>
  682 + <partitioning>
  683 + <method>none</method>
  684 + <schema_name/>
  685 + </partitioning>
  686 + <cluster_schema/>
  687 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  688 + <xloc>869</xloc>
  689 + <yloc>504</yloc>
  690 + <draw>Y</draw>
  691 + </GUI>
  692 + </step>
  693 +
  694 + <step>
  695 + <name>&#x5206;&#x7ec4;&#x5404;&#x4e2a;&#x8def;&#x724c;&#x7684;&#x7ad9;</name>
  696 + <type>GroupBy</type>
  697 + <description/>
  698 + <distribute>Y</distribute>
  699 + <custom_distribution/>
  700 + <copies>1</copies>
  701 + <partitioning>
  702 + <method>none</method>
  703 + <schema_name/>
  704 + </partitioning>
  705 + <all_rows>Y</all_rows>
  706 + <ignore_aggregate>N</ignore_aggregate>
  707 + <field_ignore/>
  708 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  709 + <prefix>grp</prefix>
  710 + <add_linenr>Y</add_linenr>
  711 + <linenr_fieldname>gno</linenr_fieldname>
  712 + <give_back_row>N</give_back_row>
  713 + <group>
  714 + <field>
  715 + <name>lp</name>
  716 + </field>
  717 + </group>
  718 + <fields>
  719 + <field>
  720 + <aggregate>qdzgroups</aggregate>
  721 + <subject>qdzname</subject>
  722 + <type>CONCAT_STRING</type>
  723 + <valuefield>,</valuefield>
  724 + </field>
  725 + </fields>
  726 + <cluster_schema/>
  727 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  728 + <xloc>892</xloc>
  729 + <yloc>44</yloc>
  730 + <draw>Y</draw>
  731 + </GUI>
  732 + </step>
  733 +
  734 + <step>
  735 + <name>&#x5339;&#x914d;&#x4e0a;&#x4e0b;&#x884c;&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  736 + <type>ScriptValueMod</type>
  737 + <description/>
  738 + <distribute>Y</distribute>
  739 + <custom_distribution/>
  740 + <copies>1</copies>
  741 + <partitioning>
  742 + <method>none</method>
  743 + <schema_name/>
  744 + </partitioning>
  745 + <compatible>N</compatible>
  746 + <optimizationLevel>9</optimizationLevel>
  747 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  748 + <jsScript_name>Script 1</jsScript_name>
  749 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var jhlc&#x3b; &#x2f;&#x2f; &#x8ba1;&#x5212;&#x91cc;&#x7a0b;&#xa;var bcsj&#x3b; &#x2f;&#x2f; &#x73ed;&#x6b21;&#x65f6;&#x95f4;&#xa;&#xa;&#x2f;&#x2f; &#x65f6;&#x95f4;&#x8303;&#x56f4;&#x6b63;&#x5219;&#x8868;&#x8fbe;&#x5f0f;&#xa;var timeRex &#x3d; &#x2f;&#x5e;&#x28;&#x5b;01&#x5d;&#x3f;&#x5b;0-9&#x5d;&#x7c;2&#x5b;0-3&#x5d;&#x29;&#x3a;&#x5b;0-5&#x5d;&#x5b;0-9&#x5d;&#x24;&#x2f;&#x3b;&#xa;&#x2f;&#x2f; &#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x8f6c;&#x6362;&#x6210;&#x65e5;&#x671f;&#xa;var fcsj_hour &#x3d; str2num&#x28;sendtime_calcu.substr&#x28;0, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa;var fcsj_min &#x3d; str2num&#x28;sendtime_calcu.substr&#x28;3, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa;var fcsj_date &#x3d; new Date&#x28;2000,1,1,fcsj_hour,fcsj_min,0&#x29;&#x3b;&#xa;&#xa;&#x2f;&#x2f; &#x5224;&#x5b9a;&#x662f;&#x5426;&#x65e9;&#x9ad8;&#x5cf0;&#xa;var isZgf &#x3d; false&#x3b;&#xa;if &#x28;timeRex.test&#x28;early_start_time&#x29; &#x26;&#x26; timeRex.test&#x28;early_end_time&#x29; &#x26;&#x26; early_up_time &#x21;&#x3d; null &#x26;&#x26; early_down_time &#x21;&#x3d; null&#x29; &#x7b;&#xa; var early_s_hour &#x3d; str2num&#x28;early_start_time.substr&#x28;0, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa; var early_s_min &#x3d; str2num&#x28;early_start_time.substr&#x28;3, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa; var early_s_date &#x3d; new Date&#x28;2000,1,1,early_s_hour,early_s_min,0&#x29;&#x3b;&#xa;&#xa; var early_e_hour &#x3d; str2num&#x28;early_end_time.substr&#x28;0, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa; var early_e_min &#x3d; str2num&#x28;early_end_time.substr&#x28;3, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa; var early_e_date &#x3d; new Date&#x28;2000,1,1,early_e_hour,early_e_min,0&#x29;&#x3b;&#xa;&#xa; if &#x28;fcsj_date &#x3e;&#x3d; early_s_date &#x26;&#x26; fcsj_date &#x3c;&#x3d; early_e_date&#x29; &#x7b;&#xa; isZgf &#x3d; true&#x3b;&#xa; &#x7d;&#xa;&#x7d;&#xa;&#xa;&#x2f;&#x2f; &#x5224;&#x5b9a;&#x662f;&#x5426;&#x665a;&#x9ad8;&#x5cf0;&#xa;var isWgf &#x3d; false&#x3b;&#xa;if &#x28;timeRex.test&#x28;late_start_time&#x29; &#x26;&#x26; timeRex.test&#x28;late_end_time&#x29; &#x26;&#x26; late_up_time &#x21;&#x3d; null &#x26;&#x26; late_down_time &#x21;&#x3d; null&#x29; &#x7b;&#xa; var late_s_hour &#x3d; str2num&#x28;late_start_time.substr&#x28;0, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa; var late_s_min &#x3d; str2num&#x28;late_start_time.substr&#x28;3, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa; var late_s_date &#x3d; new Date&#x28;2000,1,1,late_s_hour,late_s_min,0&#x29;&#x3b;&#xa;&#xa; var late_e_hour &#x3d; str2num&#x28;late_end_time.substr&#x28;0, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa; var late_e_min &#x3d; str2num&#x28;late_end_time.substr&#x28;3, 2&#x29;, &#x22;&#x23;&#x22;&#x29;&#x3b;&#xa; var late_e_date &#x3d; new Date&#x28;2000,1,1,late_e_hour,late_e_min,0&#x29;&#x3b;&#xa;&#xa; if &#x28;fcsj_date &#x3e;&#x3d; late_s_date &#x26;&#x26; fcsj_date &#x3c;&#x3d; late_e_date&#x29; &#x7b;&#xa; isWgf &#x3d; true&#x3b;&#xa; &#x7d;&#xa;&#x7d;&#xa;&#xa;&#x2f;&#x2f; &#x5224;&#x5b9a;&#x662f;&#x5426;&#x665a;&#x9ad8;&#x5cf0;&#xa;&#xa;if &#x28;sxx &#x3d;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x4e0a;&#x884c;&#xa; if &#x28;isZgf&#x29; &#x7b;&#xa; jhlc &#x3d; up_mileage&#x3b;&#xa; bcsj &#x3d; early_up_time &#x21;&#x3d; 0 &#x3f; early_up_time &#x3a; up_travel_time&#x3b;&#xa; &#x7d; else if &#x28;isWgf&#x29; &#x7b;&#xa; jhlc &#x3d; up_mileage&#x3b;&#xa; bcsj &#x3d; late_up_time &#x21;&#x3d; 0 &#x3f; late_up_time &#x3a; up_travel_time&#x3b;&#xa; &#x7d; else &#x7b;&#xa; jhlc &#x3d; up_mileage&#x3b;&#xa; bcsj &#x3d; up_travel_time&#x3b;&#xa; &#x7d;&#xa;&#x7d; else &#x7b; &#x2f;&#x2f; sxx &#x3d;&#x3d; 1 &#x4e0b;&#x884c;&#xa; if &#x28;isZgf&#x29; &#x7b;&#xa; jhlc &#x3d; down_mileage&#x3b;&#xa; bcsj &#x3d; early_down_time &#x21;&#x3d; 0 &#x3f; early_down_time &#x3a; down_travel_time&#x3b;&#xa; &#x7d; else if &#x28;isWgf&#x29; &#x7b;&#xa; jhlc &#x3d; down_mileage&#x3b;&#xa; bcsj &#x3d; late_down_time &#x21;&#x3d; 0 &#x3f; late_down_time &#x3a; down_travel_time&#x3b;&#xa; &#x7d; else &#x7b;&#xa; jhlc &#x3d; down_mileage&#x3b;&#xa; bcsj &#x3d; down_travel_time&#x3b;&#xa; &#x7d;&#xa;&#x7d;</jsScript_script>
  750 + </jsScript> </jsScripts> <fields> <field> <name>jhlc</name>
  751 + <rename>jhlc</rename>
  752 + <type>String</type>
  753 + <length>-1</length>
  754 + <precision>-1</precision>
  755 + <replace>N</replace>
  756 + </field> <field> <name>bcsj</name>
  757 + <rename>bcsj</rename>
  758 + <type>String</type>
  759 + <length>-1</length>
  760 + <precision>-1</precision>
  761 + <replace>N</replace>
  762 + </field> </fields> <cluster_schema/>
  763 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  764 + <xloc>148</xloc>
  765 + <yloc>674</yloc>
  766 + <draw>Y</draw>
  767 + </GUI>
  768 + </step>
  769 +
  770 + <step>
  771 + <name>&#x5339;&#x914d;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  772 + <type>ScriptValueMod</type>
  773 + <description/>
  774 + <distribute>Y</distribute>
  775 + <custom_distribution/>
  776 + <copies>1</copies>
  777 + <partitioning>
  778 + <method>none</method>
  779 + <schema_name/>
  780 + </partitioning>
  781 + <compatible>N</compatible>
  782 + <optimizationLevel>9</optimizationLevel>
  783 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  784 + <jsScript_name>Script 1</jsScript_name>
  785 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var out_mileage&#x3b; &#x2f;&#x2f; &#x51fa;&#x573a;&#x8ba1;&#x5212;&#x91cc;&#x7a0b;&#xa;var out_time&#x3b; &#x2f;&#x2f; &#x51fa;&#x573a;&#x8ba1;&#x5212;&#x65f6;&#x95f4;&#xa;&#xa;if &#x28;sxx &#x3d;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x4e0a;&#x884c;&#xa; out_mileage &#x3d; up_out_mileage&#x3b;&#xa; out_time &#x3d; up_out_timer&#x3b;&#xa;&#x7d; else &#x7b; &#x2f;&#x2f; sxx &#x3d;&#x3d; 1 &#x4e0b;&#x884c;&#xa; out_mileage &#x3d; down_out_mileage&#x3b;&#xa; out_time &#x3d; down_out_timer&#x3b;&#xa;&#x7d;&#xa;&#xa;&#xa;&#xa;</jsScript_script>
  786 + </jsScript> </jsScripts> <fields> <field> <name>out_mileage</name>
  787 + <rename>out_mileage</rename>
  788 + <type>String</type>
  789 + <length>-1</length>
  790 + <precision>-1</precision>
  791 + <replace>N</replace>
  792 + </field> <field> <name>out_time</name>
  793 + <rename>out_time</rename>
  794 + <type>String</type>
  795 + <length>-1</length>
  796 + <precision>-1</precision>
  797 + <replace>N</replace>
  798 + </field> </fields> <cluster_schema/>
  799 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  800 + <xloc>336</xloc>
  801 + <yloc>862</yloc>
  802 + <draw>Y</draw>
  803 + </GUI>
  804 + </step>
  805 +
  806 + <step>
  807 + <name>&#x5339;&#x914d;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  808 + <type>ScriptValueMod</type>
  809 + <description/>
  810 + <distribute>Y</distribute>
  811 + <custom_distribution/>
  812 + <copies>1</copies>
  813 + <partitioning>
  814 + <method>none</method>
  815 + <schema_name/>
  816 + </partitioning>
  817 + <compatible>N</compatible>
  818 + <optimizationLevel>9</optimizationLevel>
  819 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  820 + <jsScript_name>Script 1</jsScript_name>
  821 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var parade_mileage&#x3b; &#x2f;&#x2f; &#x8fdb;&#x573a;&#x8ba1;&#x5212;&#x91cc;&#x7a0b;&#xa;var parade_time&#x3b; &#x2f;&#x2f; &#x8fdb;&#x573a;&#x8ba1;&#x5212;&#x65f6;&#x95f4;&#xa;&#xa;if &#x28;sxx2 &#x3d;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x4e0a;&#x884c;&#xa; parade_mileage &#x3d; up_in_mileage&#x3b;&#xa; parade_time &#x3d; up_in_timer&#x3b;&#xa;&#x7d; else &#x7b; &#x2f;&#x2f; sxx &#x3d;&#x3d; 1 &#x4e0b;&#x884c;&#xa; parade_mileage &#x3d; down_in_mileage&#x3b;&#xa; parade_time &#x3d; down_in_timer&#x3b;&#xa;&#x7d;&#xa;&#xa;&#xa;&#xa;</jsScript_script>
  822 + </jsScript> </jsScripts> <fields> <field> <name>parade_mileage</name>
  823 + <rename>parade_mileage</rename>
  824 + <type>String</type>
  825 + <length>-1</length>
  826 + <precision>-1</precision>
  827 + <replace>N</replace>
  828 + </field> <field> <name>parade_time</name>
  829 + <rename>parade_time</rename>
  830 + <type>String</type>
  831 + <length>-1</length>
  832 + <precision>-1</precision>
  833 + <replace>N</replace>
  834 + </field> </fields> <cluster_schema/>
  835 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  836 + <xloc>726</xloc>
  837 + <yloc>1005</yloc>
  838 + <draw>Y</draw>
  839 + </GUI>
  840 + </step>
  841 +
  842 + <step>
  843 + <name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</name>
  844 + <type>DataGrid</type>
  845 + <description/>
  846 + <distribute>Y</distribute>
  847 + <custom_distribution/>
  848 + <copies>1</copies>
  849 + <partitioning>
  850 + <method>none</method>
  851 + <schema_name/>
  852 + </partitioning>
  853 + <fields>
  854 + </fields>
  855 + <data>
  856 + <line> </line>
  857 + </data>
  858 + <cluster_schema/>
  859 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  860 + <xloc>110</xloc>
  861 + <yloc>133</yloc>
  862 + <draw>Y</draw>
  863 + </GUI>
  864 + </step>
  865 +
  866 + <step>
  867 + <name>&#x5904;&#x7406;&#x6570;&#x636e;</name>
  868 + <type>ScriptValueMod</type>
  869 + <description/>
  870 + <distribute>Y</distribute>
  871 + <custom_distribution/>
  872 + <copies>1</copies>
  873 + <partitioning>
  874 + <method>none</method>
  875 + <schema_name/>
  876 + </partitioning>
  877 + <compatible>N</compatible>
  878 + <optimizationLevel>9</optimizationLevel>
  879 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  880 + <jsScript_name>Script 1</jsScript_name>
  881 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;&#x2f;&#x2f; &#x751f;&#x6210;&#x65f6;&#x523b;&#x8868;&#x7684;&#x683c;&#x5f0f;&#x6570;&#x636e;&#x5904;&#x7406;&#xa;&#x2f;&#x2f; &#x5df2;&#x7ecf;&#x8fc7;&#x6ee4;&#x4e86; &#x62a5;&#x5230;&#xff0c;&#x5230;&#x573a;&#xff0c;&#x79bb;&#x573a;&#xff0c;&#x603b;&#x516c;&#x91cc;&#xff0c;&#x8425;&#x4e1a;&#x516c;&#x91cc;&#xff0c;&#x7a7a;&#x9a76;&#x516c;&#x91cc;&#xff0c;&#x603b;&#x5de5;&#x65f6;&#xff0c;&#x8425;&#x4e1a;&#x5de5;&#x65f6;&#xff0c;&#x8425;&#x8fd0;&#x73ed;&#x6b21; &#x6570;&#x636e;&#xa;&#x2f;&#x2f; sendtime&#x9700;&#x8981;&#x5904;&#x7406; &#x28;&#x62a5;&#x7c;&#x51fa;&#x29;hh&#x3a;mm&#x683c;&#x5f0f; hh&#x3a;mm&#x28;X&#x7c;&#x203b;&#x29;&#x683c;&#x5f0f;&#xa;&#xa;&#x2f;&#x2f; &#x5982;&#x679c;&#x7ad9;&#x540d;&#x4e2d;&#x6709;&#x7c7b;&#x4f3c;-&#x3e;&#x7b;&#x6570;&#x5b57;&#x7d;&#xff0c;&#x4f7f;&#x7528;&#x6b63;&#x5219;&#x8868;&#x8fbe;&#x5f0f;&#x8fc7;&#x6ee4;&#x6389;&#xa;qdzname &#x3d; qdzname.replace&#x28;&#x2f;-&#x3e;&#x5c;d&#x2b;&#x2f;g,&#x27;&#x27;&#x29;&#x3b;&#xa;&#xa;var sendtime_calcu&#x3b;&#xa;if &#x28;qdzname &#x3d;&#x3d; &#x22;&#x62a5;&#x5230;&#x22; &#x7c;&#x7c; &#xa; qdzname &#x3d;&#x3d; &#x22;&#x5230;&#x573a;&#x22; &#x7c;&#x7c; &#xa; qdzname &#x3d;&#x3d; &#x22;&#x79bb;&#x573a;&#x22; &#x7c;&#x7c; &#xa; qdzname &#x3d;&#x3d; &#x22;&#x603b;&#x516c;&#x91cc;&#x22; &#x7c;&#x7c; &#xa; qdzname &#x3d;&#x3d; &#x22;&#x8425;&#x4e1a;&#x516c;&#x91cc;&#x22; &#x7c;&#x7c; &#xa; qdzname &#x3d;&#x3d; &#x22;&#x7a7a;&#x9a76;&#x516c;&#x91cc;&#x22; &#x7c;&#x7c; &#xa; qdzname &#x3d;&#x3d; &#x22;&#x603b;&#x5de5;&#x65f6;&#x22; &#x7c;&#x7c; &#xa; qdzname &#x3d;&#x3d; &#x22;&#x8425;&#x4e1a;&#x5de5;&#x65f6;&#x22; &#x7c;&#x7c; &#xa; qdzname &#x3d;&#x3d; &#x22;&#x8425;&#x8fd0;&#x73ed;&#x6b21;&#x22;&#x29; &#x7b;&#xa; sendtime_calcu &#x3d; null&#x3b;&#xa;&#x7d; else &#x7b;&#xa; if &#x28;sendtime &#x3d;&#x3d; null&#x29; &#x7b;&#xa; sendtime_calcu &#x3d; null&#x3b;&#xa; &#x7d; else &#x7b;&#xa; sendtime_calcu &#x3d; sendtime.replace&#x28;&#x2f;&#x5c;s&#x2f;g, &#x22;&#x22;&#x29;&#x3b;&#xa; if &#x28;sendtime_calcu.indexOf&#x28;&#x22;&#x62a5;&#x22;&#x29; &#x3e;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x5206;&#x73ed;&#x62a5;&#x5230;&#x73ed;&#x6b21;&#x795b;&#x9664;&#xa; sendtime_calcu &#x3d; null&#x3b;&#xa; &#x7d; else &#x7b;&#xa; if &#x28;sendtime_calcu.indexOf&#x28;&#x22;X&#x22;&#x29; &#x3e;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x8fdb;&#x573a;&#x73ed;&#x6b21;&#xa; qdzname &#x3d; &#x22;&#x8fdb;&#x573a;&#x22;&#x3b;&#xa; sendtime_calcu &#x3d; sendtime_calcu.substr&#x28;0, sendtime_calcu.indexOf&#x28;&#x22;X&#x22;&#x29;&#x29;&#x3b;&#xa; &#x7d; else if &#x28;sendtime_calcu.indexOf&#x28;&#x22;&#x51fa;&#x22;&#x29; &#x3e;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x5206;&#x73ed;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#xa; qdzname &#x3d; &#x22;&#x51fa;&#x573a;&#x22;&#x3b;&#xa; sendtime_calcu &#x3d; sendtime_calcu.substr&#x28;1&#x29;&#x3b;&#xa; &#x7d; else if &#x28;sendtime_calcu.indexOf&#x28;&#x22;&#x203b;&#x22;&#x29; &#x3e;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x505c;&#x9a76;&#x73ed;&#x6b21;&#xa; sendtime_calcu &#x3d; sendtime_calcu.substr&#x28;0, sendtime_calcu.indexOf&#x28;&#x22;X&#x22;&#x29;&#x29;&#x3b;&#xa; &#x7d; else &#x7b;&#xa; &#x2f;&#x2f; &#x6b63;&#x5e38;&#x73ed;&#x6b21;&#xa; &#x7d;&#xa;&#xa; &#x2f;&#x2f; &#x5904;&#x7406;&#x65f6;&#x95f4;&#x683c;&#x5f0f;&#xa; &#x2f;&#x2f; &#x56e0;&#x4e3a;&#x683c;&#x5f0f;&#x53ea;&#x652f;&#x6301; &#x3a; &#x5206;&#x9694;&#xff0c;&#x6240;&#x4ee5;&#x8865;0&#x5c31;&#x53ef;&#x4ee5;&#x4e86;&#xa; if &#x28;sendtime_calcu.length &#x3d;&#x3d; 4&#x29; &#x7b;&#xa; sendtime_calcu &#x3d; &#x22;0&#x22; &#x2b; sendtime_calcu&#x3b;&#xa; &#x7d; &#xa; &#x7d;&#xa;&#xa; &#x7d;&#xa;&#x7d;&#xa;&#xa;&#xa;&#x2f;&#x2f; &#x8bbe;&#x7f6e;&#x5206;&#x73ed;&#xa;var isfb &#x3d; 0&#x3b;&#xa;&#xa;&#x2f;&#x2f; &#x8bbe;&#x7f6e;&#x505c;&#x9a76;&#xa;var ists &#x3d; 0&#x3b;&#xa;&#xa;&#x2f;&#x2f; &#x8bbe;&#x7f6e;isCanceled&#xa;var iscanceled &#x3d; 0&#x3b;</jsScript_script>
  882 + </jsScript> </jsScripts> <fields> <field> <name>qdzname</name>
  883 + <rename>qdzname</rename>
  884 + <type>String</type>
  885 + <length>-1</length>
  886 + <precision>-1</precision>
  887 + <replace>Y</replace>
  888 + </field> <field> <name>isfb</name>
  889 + <rename>isfb</rename>
  890 + <type>Integer</type>
  891 + <length>-1</length>
  892 + <precision>-1</precision>
  893 + <replace>N</replace>
  894 + </field> <field> <name>iscanceled</name>
  895 + <rename>iscanceled</rename>
  896 + <type>Integer</type>
  897 + <length>-1</length>
  898 + <precision>-1</precision>
  899 + <replace>N</replace>
  900 + </field> <field> <name>sendtime_calcu</name>
  901 + <rename>sendtime_calcu</rename>
  902 + <type>String</type>
  903 + <length>-1</length>
  904 + <precision>-1</precision>
  905 + <replace>N</replace>
  906 + </field> <field> <name>ists</name>
  907 + <rename>ists</rename>
  908 + <type>Integer</type>
  909 + <length>-1</length>
  910 + <precision>-1</precision>
  911 + <replace>N</replace>
  912 + </field> </fields> <cluster_schema/>
  913 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  914 + <xloc>654</xloc>
  915 + <yloc>45</yloc>
  916 + <draw>Y</draw>
  917 + </GUI>
  918 + </step>
  919 +
  920 + <step>
  921 + <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
  922 + <type>SelectValues</type>
  923 + <description/>
  924 + <distribute>Y</distribute>
  925 + <custom_distribution/>
  926 + <copies>1</copies>
  927 + <partitioning>
  928 + <method>none</method>
  929 + <schema_name/>
  930 + </partitioning>
  931 + <fields> <field> <name>&#x8def;&#x724c;</name>
  932 + <rename>lp</rename>
  933 + <length>-2</length>
  934 + <precision>-2</precision>
  935 + </field> <field> <name>&#x7ad9;&#x70b9;&#x540d;&#x79f0;</name>
  936 + <rename>qdzname</rename>
  937 + <length>-2</length>
  938 + <precision>-2</precision>
  939 + </field> <field> <name>&#x53d1;&#x8f66;&#x65f6;&#x95f4;</name>
  940 + <rename>sendtime</rename>
  941 + <length>-2</length>
  942 + <precision>-2</precision>
  943 + </field> <select_unspecified>Y</select_unspecified>
  944 + </fields> <cluster_schema/>
  945 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  946 + <xloc>441</xloc>
  947 + <yloc>133</yloc>
  948 + <draw>Y</draw>
  949 + </GUI>
  950 + </step>
  951 +
  952 + <step>
  953 + <name>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;1</name>
  954 + <type>FilterRows</type>
  955 + <description/>
  956 + <distribute>Y</distribute>
  957 + <custom_distribution/>
  958 + <copies>1</copies>
  959 + <partitioning>
  960 + <method>none</method>
  961 + <schema_name/>
  962 + </partitioning>
  963 +<send_true_to>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</send_true_to>
  964 +<send_false_to>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;2</send_false_to>
  965 + <compare>
  966 +<condition>
  967 + <negated>N</negated>
  968 + <leftvalue>bctype</leftvalue>
  969 + <function>&#x3d;</function>
  970 + <rightvalue/>
  971 + <value><name>constant</name><type>String</type><text>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</text><length>-1</length><precision>-1</precision><isnull>N</isnull><mask/></value> </condition>
  972 + </compare>
  973 + <cluster_schema/>
  974 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  975 + <xloc>860</xloc>
  976 + <yloc>401</yloc>
  977 + <draw>Y</draw>
  978 + </GUI>
  979 + </step>
  980 +
  981 + <step>
  982 + <name>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;2</name>
  983 + <type>FilterRows</type>
  984 + <description/>
  985 + <distribute>Y</distribute>
  986 + <custom_distribution/>
  987 + <copies>1</copies>
  988 + <partitioning>
  989 + <method>none</method>
  990 + <schema_name/>
  991 + </partitioning>
  992 +<send_true_to>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</send_true_to>
  993 +<send_false_to>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</send_false_to>
  994 + <compare>
  995 +<condition>
  996 + <negated>N</negated>
  997 + <leftvalue>bctype</leftvalue>
  998 + <function>&#x3d;</function>
  999 + <rightvalue/>
  1000 + <value><name>constant</name><type>String</type><text>&#x51fa;&#x573a;</text><length>-1</length><precision>-1</precision><isnull>N</isnull><mask/></value> </condition>
  1001 + </compare>
  1002 + <cluster_schema/>
  1003 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1004 + <xloc>995</xloc>
  1005 + <yloc>503</yloc>
  1006 + <draw>Y</draw>
  1007 + </GUI>
  1008 + </step>
  1009 +
  1010 + <step>
  1011 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail</name>
  1012 + <type>InsertUpdate</type>
  1013 + <description/>
  1014 + <distribute>Y</distribute>
  1015 + <custom_distribution/>
  1016 + <copies>1</copies>
  1017 + <partitioning>
  1018 + <method>none</method>
  1019 + <schema_name/>
  1020 + </partitioning>
  1021 + <connection>bus_control_variable</connection>
  1022 + <commit>100</commit>
  1023 + <update_bypassed>N</update_bypassed>
  1024 + <lookup>
  1025 + <schema/>
  1026 + <table>bsth_c_s_ttinfo_detail</table>
  1027 + <key>
  1028 + <name>xlid</name>
  1029 + <field>xl</field>
  1030 + <condition>&#x3d;</condition>
  1031 + <name2/>
  1032 + </key>
  1033 + <key>
  1034 + <name>ttid</name>
  1035 + <field>ttinfo</field>
  1036 + <condition>&#x3d;</condition>
  1037 + <name2/>
  1038 + </key>
  1039 + <key>
  1040 + <name>lpid</name>
  1041 + <field>lp</field>
  1042 + <condition>&#x3d;</condition>
  1043 + <name2/>
  1044 + </key>
  1045 + <key>
  1046 + <name>fcno</name>
  1047 + <field>fcno</field>
  1048 + <condition>&#x3d;</condition>
  1049 + <name2/>
  1050 + </key>
  1051 + <key>
  1052 + <name>bcs</name>
  1053 + <field>bcs</field>
  1054 + <condition>&#x3d;</condition>
  1055 + <name2/>
  1056 + </key>
  1057 + <value>
  1058 + <name>lp</name>
  1059 + <rename>lpid</rename>
  1060 + <update>Y</update>
  1061 + </value>
  1062 + <value>
  1063 + <name>bc_type</name>
  1064 + <rename>bctype_code</rename>
  1065 + <update>Y</update>
  1066 + </value>
  1067 + <value>
  1068 + <name>bcs</name>
  1069 + <rename>bcs</rename>
  1070 + <update>Y</update>
  1071 + </value>
  1072 + <value>
  1073 + <name>bcsj</name>
  1074 + <rename>bcsj</rename>
  1075 + <update>Y</update>
  1076 + </value>
  1077 + <value>
  1078 + <name>fcno</name>
  1079 + <rename>fcno</rename>
  1080 + <update>Y</update>
  1081 + </value>
  1082 + <value>
  1083 + <name>jhlc</name>
  1084 + <rename>jhlc</rename>
  1085 + <update>Y</update>
  1086 + </value>
  1087 + <value>
  1088 + <name>fcsj</name>
  1089 + <rename>sendtime_calcu</rename>
  1090 + <update>Y</update>
  1091 + </value>
  1092 + <value>
  1093 + <name>ttinfo</name>
  1094 + <rename>ttid</rename>
  1095 + <update>Y</update>
  1096 + </value>
  1097 + <value>
  1098 + <name>xl</name>
  1099 + <rename>xlid</rename>
  1100 + <update>Y</update>
  1101 + </value>
  1102 + <value>
  1103 + <name>qdz</name>
  1104 + <rename>qdzid</rename>
  1105 + <update>Y</update>
  1106 + </value>
  1107 + <value>
  1108 + <name>zdz</name>
  1109 + <rename>zdzid</rename>
  1110 + <update>Y</update>
  1111 + </value>
  1112 + <value>
  1113 + <name>xl_dir</name>
  1114 + <rename>sxx</rename>
  1115 + <update>Y</update>
  1116 + </value>
  1117 + <value>
  1118 + <name>isfb</name>
  1119 + <rename>isfb</rename>
  1120 + <update>Y</update>
  1121 + </value>
  1122 + <value>
  1123 + <name>qdz_code</name>
  1124 + <rename>qdzcode</rename>
  1125 + <update>Y</update>
  1126 + </value>
  1127 + <value>
  1128 + <name>qdz_name</name>
  1129 + <rename>qdzname_</rename>
  1130 + <update>Y</update>
  1131 + </value>
  1132 + <value>
  1133 + <name>zdz_code</name>
  1134 + <rename>zdzcode</rename>
  1135 + <update>Y</update>
  1136 + </value>
  1137 + <value>
  1138 + <name>zdz_name</name>
  1139 + <rename>zdzname</rename>
  1140 + <update>Y</update>
  1141 + </value>
  1142 + <value>
  1143 + <name>ists</name>
  1144 + <rename>ists</rename>
  1145 + <update>Y</update>
  1146 + </value>
  1147 + <value>
  1148 + <name>line_version</name>
  1149 + <rename>version</rename>
  1150 + <update>Y</update>
  1151 + </value>
  1152 + </lookup>
  1153 + <cluster_schema/>
  1154 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1155 + <xloc>143</xloc>
  1156 + <yloc>860</yloc>
  1157 + <draw>Y</draw>
  1158 + </GUI>
  1159 + </step>
  1160 +
  1161 + <step>
  1162 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 2</name>
  1163 + <type>InsertUpdate</type>
  1164 + <description/>
  1165 + <distribute>Y</distribute>
  1166 + <custom_distribution/>
  1167 + <copies>1</copies>
  1168 + <partitioning>
  1169 + <method>none</method>
  1170 + <schema_name/>
  1171 + </partitioning>
  1172 + <connection>bus_control_variable</connection>
  1173 + <commit>100</commit>
  1174 + <update_bypassed>N</update_bypassed>
  1175 + <lookup>
  1176 + <schema/>
  1177 + <table>bsth_c_s_ttinfo_detail</table>
  1178 + <key>
  1179 + <name>xlid</name>
  1180 + <field>xl</field>
  1181 + <condition>&#x3d;</condition>
  1182 + <name2/>
  1183 + </key>
  1184 + <key>
  1185 + <name>ttid</name>
  1186 + <field>ttinfo</field>
  1187 + <condition>&#x3d;</condition>
  1188 + <name2/>
  1189 + </key>
  1190 + <key>
  1191 + <name>lpid</name>
  1192 + <field>lp</field>
  1193 + <condition>&#x3d;</condition>
  1194 + <name2/>
  1195 + </key>
  1196 + <key>
  1197 + <name>fcno</name>
  1198 + <field>fcno</field>
  1199 + <condition>&#x3d;</condition>
  1200 + <name2/>
  1201 + </key>
  1202 + <key>
  1203 + <name>bcs</name>
  1204 + <field>bcs</field>
  1205 + <condition>&#x3d;</condition>
  1206 + <name2/>
  1207 + </key>
  1208 + <value>
  1209 + <name>tcc</name>
  1210 + <rename>qdzid</rename>
  1211 + <update>Y</update>
  1212 + </value>
  1213 + <value>
  1214 + <name>zdz</name>
  1215 + <rename>zdzid</rename>
  1216 + <update>Y</update>
  1217 + </value>
  1218 + <value>
  1219 + <name>xl</name>
  1220 + <rename>xlid</rename>
  1221 + <update>Y</update>
  1222 + </value>
  1223 + <value>
  1224 + <name>ttinfo</name>
  1225 + <rename>ttid</rename>
  1226 + <update>Y</update>
  1227 + </value>
  1228 + <value>
  1229 + <name>xl_dir</name>
  1230 + <rename>sxx</rename>
  1231 + <update>Y</update>
  1232 + </value>
  1233 + <value>
  1234 + <name>lp</name>
  1235 + <rename>lpid</rename>
  1236 + <update>Y</update>
  1237 + </value>
  1238 + <value>
  1239 + <name>jhlc</name>
  1240 + <rename>out_mileage</rename>
  1241 + <update>Y</update>
  1242 + </value>
  1243 + <value>
  1244 + <name>fcsj</name>
  1245 + <rename>sendtime_calcu</rename>
  1246 + <update>Y</update>
  1247 + </value>
  1248 + <value>
  1249 + <name>bcsj</name>
  1250 + <rename>out_time</rename>
  1251 + <update>Y</update>
  1252 + </value>
  1253 + <value>
  1254 + <name>bcs</name>
  1255 + <rename>bcs</rename>
  1256 + <update>Y</update>
  1257 + </value>
  1258 + <value>
  1259 + <name>fcno</name>
  1260 + <rename>fcno</rename>
  1261 + <update>Y</update>
  1262 + </value>
  1263 + <value>
  1264 + <name>bc_type</name>
  1265 + <rename>bctype_code</rename>
  1266 + <update>Y</update>
  1267 + </value>
  1268 + <value>
  1269 + <name>isfb</name>
  1270 + <rename>isfb</rename>
  1271 + <update>Y</update>
  1272 + </value>
  1273 + <value>
  1274 + <name>qdz_code</name>
  1275 + <rename>qdzcode</rename>
  1276 + <update>Y</update>
  1277 + </value>
  1278 + <value>
  1279 + <name>qdz_name</name>
  1280 + <rename>tn</rename>
  1281 + <update>Y</update>
  1282 + </value>
  1283 + <value>
  1284 + <name>zdz_code</name>
  1285 + <rename>zdzcode</rename>
  1286 + <update>Y</update>
  1287 + </value>
  1288 + <value>
  1289 + <name>zdz_name</name>
  1290 + <rename>zdzname_</rename>
  1291 + <update>Y</update>
  1292 + </value>
  1293 + <value>
  1294 + <name>ists</name>
  1295 + <rename>ists</rename>
  1296 + <update>Y</update>
  1297 + </value>
  1298 + <value>
  1299 + <name>line_version</name>
  1300 + <rename>version</rename>
  1301 + <update>Y</update>
  1302 + </value>
  1303 + </lookup>
  1304 + <cluster_schema/>
  1305 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1306 + <xloc>340</xloc>
  1307 + <yloc>1087</yloc>
  1308 + <draw>Y</draw>
  1309 + </GUI>
  1310 + </step>
  1311 +
  1312 + <step>
  1313 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 3</name>
  1314 + <type>InsertUpdate</type>
  1315 + <description/>
  1316 + <distribute>Y</distribute>
  1317 + <custom_distribution/>
  1318 + <copies>1</copies>
  1319 + <partitioning>
  1320 + <method>none</method>
  1321 + <schema_name/>
  1322 + </partitioning>
  1323 + <connection>bus_control_variable</connection>
  1324 + <commit>100</commit>
  1325 + <update_bypassed>N</update_bypassed>
  1326 + <lookup>
  1327 + <schema/>
  1328 + <table>bsth_c_s_ttinfo_detail</table>
  1329 + <key>
  1330 + <name>xlid</name>
  1331 + <field>xl</field>
  1332 + <condition>&#x3d;</condition>
  1333 + <name2/>
  1334 + </key>
  1335 + <key>
  1336 + <name>ttid</name>
  1337 + <field>ttinfo</field>
  1338 + <condition>&#x3d;</condition>
  1339 + <name2/>
  1340 + </key>
  1341 + <key>
  1342 + <name>lpid</name>
  1343 + <field>lp</field>
  1344 + <condition>&#x3d;</condition>
  1345 + <name2/>
  1346 + </key>
  1347 + <key>
  1348 + <name>fcno</name>
  1349 + <field>fcno</field>
  1350 + <condition>&#x3d;</condition>
  1351 + <name2/>
  1352 + </key>
  1353 + <key>
  1354 + <name>bcs</name>
  1355 + <field>bcs</field>
  1356 + <condition>&#x3d;</condition>
  1357 + <name2/>
  1358 + </key>
  1359 + <value>
  1360 + <name>fcno</name>
  1361 + <rename>fcno</rename>
  1362 + <update>Y</update>
  1363 + </value>
  1364 + <value>
  1365 + <name>bcs</name>
  1366 + <rename>bcs</rename>
  1367 + <update>Y</update>
  1368 + </value>
  1369 + <value>
  1370 + <name>xl</name>
  1371 + <rename>xlid</rename>
  1372 + <update>Y</update>
  1373 + </value>
  1374 + <value>
  1375 + <name>ttinfo</name>
  1376 + <rename>ttid</rename>
  1377 + <update>Y</update>
  1378 + </value>
  1379 + <value>
  1380 + <name>lp</name>
  1381 + <rename>lpid</rename>
  1382 + <update>Y</update>
  1383 + </value>
  1384 + <value>
  1385 + <name>bc_type</name>
  1386 + <rename>bctype_code</rename>
  1387 + <update>Y</update>
  1388 + </value>
  1389 + <value>
  1390 + <name>bcsj</name>
  1391 + <rename>parade_time</rename>
  1392 + <update>Y</update>
  1393 + </value>
  1394 + <value>
  1395 + <name>jhlc</name>
  1396 + <rename>parade_mileage</rename>
  1397 + <update>Y</update>
  1398 + </value>
  1399 + <value>
  1400 + <name>fcsj</name>
  1401 + <rename>sendtime_calcu</rename>
  1402 + <update>Y</update>
  1403 + </value>
  1404 + <value>
  1405 + <name>xl_dir</name>
  1406 + <rename>sxx2</rename>
  1407 + <update>Y</update>
  1408 + </value>
  1409 + <value>
  1410 + <name>qdz</name>
  1411 + <rename>qdzid</rename>
  1412 + <update>Y</update>
  1413 + </value>
  1414 + <value>
  1415 + <name>tcc</name>
  1416 + <rename>zdzid</rename>
  1417 + <update>Y</update>
  1418 + </value>
  1419 + <value>
  1420 + <name>isfb</name>
  1421 + <rename>isfb</rename>
  1422 + <update>Y</update>
  1423 + </value>
  1424 + <value>
  1425 + <name>qdz_code</name>
  1426 + <rename>qdzcode</rename>
  1427 + <update>Y</update>
  1428 + </value>
  1429 + <value>
  1430 + <name>qdz_name</name>
  1431 + <rename>qname</rename>
  1432 + <update>Y</update>
  1433 + </value>
  1434 + <value>
  1435 + <name>zdz_code</name>
  1436 + <rename>zdzcode</rename>
  1437 + <update>Y</update>
  1438 + </value>
  1439 + <value>
  1440 + <name>zdz_name</name>
  1441 + <rename>tn</rename>
  1442 + <update>Y</update>
  1443 + </value>
  1444 + <value>
  1445 + <name>ists</name>
  1446 + <rename>ists</rename>
  1447 + <update>Y</update>
  1448 + </value>
  1449 + <value>
  1450 + <name>line_version</name>
  1451 + <rename>version</rename>
  1452 + <update>Y</update>
  1453 + </value>
  1454 + </lookup>
  1455 + <cluster_schema/>
  1456 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1457 + <xloc>845</xloc>
  1458 + <yloc>899</yloc>
  1459 + <draw>Y</draw>
  1460 + </GUI>
  1461 + </step>
  1462 +
  1463 + <step>
  1464 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</name>
  1465 + <type>ExcelInput</type>
  1466 + <description/>
  1467 + <distribute>N</distribute>
  1468 + <custom_distribution/>
  1469 + <copies>1</copies>
  1470 + <partitioning>
  1471 + <method>none</method>
  1472 + <schema_name/>
  1473 + </partitioning>
  1474 + <header>Y</header>
  1475 + <noempty>Y</noempty>
  1476 + <stoponempty>N</stoponempty>
  1477 + <filefield/>
  1478 + <sheetfield/>
  1479 + <sheetrownumfield/>
  1480 + <rownumfield/>
  1481 + <sheetfield/>
  1482 + <filefield/>
  1483 + <limit>0</limit>
  1484 + <encoding/>
  1485 + <add_to_result_filenames>Y</add_to_result_filenames>
  1486 + <accept_filenames>N</accept_filenames>
  1487 + <accept_field/>
  1488 + <accept_stepname/>
  1489 + <file>
  1490 + <name/>
  1491 + <filemask/>
  1492 + <exclude_filemask/>
  1493 + <file_required>N</file_required>
  1494 + <include_subfolders>N</include_subfolders>
  1495 + </file>
  1496 + <fields>
  1497 + </fields>
  1498 + <sheets>
  1499 + <sheet>
  1500 + <name/>
  1501 + <startrow>0</startrow>
  1502 + <startcol>0</startcol>
  1503 + </sheet>
  1504 + </sheets>
  1505 + <strict_types>N</strict_types>
  1506 + <error_ignored>N</error_ignored>
  1507 + <error_line_skipped>N</error_line_skipped>
  1508 + <bad_line_files_destination_directory/>
  1509 + <bad_line_files_extension>warning</bad_line_files_extension>
  1510 + <error_line_files_destination_directory/>
  1511 + <error_line_files_extension>error</error_line_files_extension>
  1512 + <line_number_files_destination_directory/>
  1513 + <line_number_files_extension>line</line_number_files_extension>
  1514 + <shortFileFieldName/>
  1515 + <pathFieldName/>
  1516 + <hiddenFieldName/>
  1517 + <lastModificationTimeFieldName/>
  1518 + <uriNameFieldName/>
  1519 + <rootUriNameFieldName/>
  1520 + <extensionFieldName/>
  1521 + <sizeFieldName/>
  1522 + <spreadsheet_type>JXL</spreadsheet_type>
  1523 + <cluster_schema/>
  1524 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1525 + <xloc>112</xloc>
  1526 + <yloc>44</yloc>
  1527 + <draw>Y</draw>
  1528 + </GUI>
  1529 + </step>
  1530 +
  1531 + <step>
  1532 + <name>&#x66f4;&#x65b0;&#x65f6;&#x523b;&#x8868;&#x4e3b;&#x8868;&#x7248;&#x672c;</name>
  1533 + <type>Update</type>
  1534 + <description/>
  1535 + <distribute>Y</distribute>
  1536 + <custom_distribution/>
  1537 + <copies>1</copies>
  1538 + <partitioning>
  1539 + <method>none</method>
  1540 + <schema_name/>
  1541 + </partitioning>
  1542 + <connection>bus_control_variable</connection>
  1543 + <skip_lookup>N</skip_lookup>
  1544 + <commit>100</commit>
  1545 + <use_batch>N</use_batch>
  1546 + <error_ignored>N</error_ignored>
  1547 + <ignore_flag_field/>
  1548 + <lookup>
  1549 + <schema/>
  1550 + <table>bsth_c_s_ttinfo</table>
  1551 + <key>
  1552 + <name>ttid</name>
  1553 + <field>id</field>
  1554 + <condition>&#x3d;</condition>
  1555 + <name2/>
  1556 + </key>
  1557 + <value>
  1558 + <name>line_version</name>
  1559 + <rename>version</rename>
  1560 + </value>
  1561 + </lookup>
  1562 + <cluster_schema/>
  1563 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1564 + <xloc>863</xloc>
  1565 + <yloc>338</yloc>
  1566 + <draw>Y</draw>
  1567 + </GUI>
  1568 + </step>
  1569 +
  1570 + <step>
  1571 + <name>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;1</name>
  1572 + <type>DBLookup</type>
  1573 + <description/>
  1574 + <distribute>Y</distribute>
  1575 + <custom_distribution/>
  1576 + <copies>1</copies>
  1577 + <partitioning>
  1578 + <method>none</method>
  1579 + <schema_name/>
  1580 + </partitioning>
  1581 + <connection>bus_control_variable</connection>
  1582 + <cache>N</cache>
  1583 + <cache_load_all>N</cache_load_all>
  1584 + <cache_size>0</cache_size>
  1585 + <lookup>
  1586 + <schema/>
  1587 + <table>bsth_c_car_park</table>
  1588 + <orderby/>
  1589 + <fail_on_multiple>N</fail_on_multiple>
  1590 + <eat_row_on_failure>N</eat_row_on_failure>
  1591 + <key>
  1592 + <name>tccname_</name>
  1593 + <field>park_name</field>
  1594 + <condition>&#x3d;</condition>
  1595 + <name2/>
  1596 + </key>
  1597 + <value>
  1598 + <name>id</name>
  1599 + <rename>qdzid</rename>
  1600 + <default/>
  1601 + <type>Integer</type>
  1602 + </value>
  1603 + <value>
  1604 + <name>park_code</name>
  1605 + <rename>qdzcode</rename>
  1606 + <default/>
  1607 + <type>String</type>
  1608 + </value>
  1609 + <value>
  1610 + <name>park_name</name>
  1611 + <rename>tn</rename>
  1612 + <default/>
  1613 + <type>String</type>
  1614 + </value>
  1615 + </lookup>
  1616 + <cluster_schema/>
  1617 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1618 + <xloc>755</xloc>
  1619 + <yloc>504</yloc>
  1620 + <draw>Y</draw>
  1621 + </GUI>
  1622 + </step>
  1623 +
  1624 + <step>
  1625 + <name>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;2</name>
  1626 + <type>DBLookup</type>
  1627 + <description/>
  1628 + <distribute>Y</distribute>
  1629 + <custom_distribution/>
  1630 + <copies>1</copies>
  1631 + <partitioning>
  1632 + <method>none</method>
  1633 + <schema_name/>
  1634 + </partitioning>
  1635 + <connection>bus_control_variable</connection>
  1636 + <cache>N</cache>
  1637 + <cache_load_all>N</cache_load_all>
  1638 + <cache_size>0</cache_size>
  1639 + <lookup>
  1640 + <schema/>
  1641 + <table>bsth_c_car_park</table>
  1642 + <orderby/>
  1643 + <fail_on_multiple>N</fail_on_multiple>
  1644 + <eat_row_on_failure>N</eat_row_on_failure>
  1645 + <key>
  1646 + <name>tccname_</name>
  1647 + <field>park_name</field>
  1648 + <condition>&#x3d;</condition>
  1649 + <name2/>
  1650 + </key>
  1651 + <value>
  1652 + <name>id</name>
  1653 + <rename>zdzid</rename>
  1654 + <default/>
  1655 + <type>Integer</type>
  1656 + </value>
  1657 + <value>
  1658 + <name>park_code</name>
  1659 + <rename>zdzcode</rename>
  1660 + <default/>
  1661 + <type>String</type>
  1662 + </value>
  1663 + <value>
  1664 + <name>park_name</name>
  1665 + <rename>tn</rename>
  1666 + <default/>
  1667 + <type>String</type>
  1668 + </value>
  1669 + </lookup>
  1670 + <cluster_schema/>
  1671 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1672 + <xloc>887</xloc>
  1673 + <yloc>608</yloc>
  1674 + <draw>Y</draw>
  1675 + </GUI>
  1676 + </step>
  1677 +
  1678 + <step>
  1679 + <name>&#x67e5;&#x627e;&#x51fa;&#x573a;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>
  1680 + <type>DBLookup</type>
  1681 + <description/>
  1682 + <distribute>Y</distribute>
  1683 + <custom_distribution/>
  1684 + <copies>1</copies>
  1685 + <partitioning>
  1686 + <method>none</method>
  1687 + <schema_name/>
  1688 + </partitioning>
  1689 + <connection>bus_control_variable</connection>
  1690 + <cache>N</cache>
  1691 + <cache_load_all>N</cache_load_all>
  1692 + <cache_size>0</cache_size>
  1693 + <lookup>
  1694 + <schema/>
  1695 + <table>bsth_c_ls_stationroute</table>
  1696 + <orderby/>
  1697 + <fail_on_multiple>N</fail_on_multiple>
  1698 + <eat_row_on_failure>N</eat_row_on_failure>
  1699 + <key>
  1700 + <name>xlid</name>
  1701 + <field>line</field>
  1702 + <condition>&#x3d;</condition>
  1703 + <name2/>
  1704 + </key>
  1705 + <key>
  1706 + <name>version</name>
  1707 + <field>versions</field>
  1708 + <condition>&#x3d;</condition>
  1709 + <name2/>
  1710 + </key>
  1711 + <key>
  1712 + <name>zdzname</name>
  1713 + <field>station_name</field>
  1714 + <condition>LIKE</condition>
  1715 + <name2/>
  1716 + </key>
  1717 + <key>
  1718 + <name>endZdtype</name>
  1719 + <field>station_mark</field>
  1720 + <condition>&#x3d;</condition>
  1721 + <name2/>
  1722 + </key>
  1723 + <key>
  1724 + <name>destory</name>
  1725 + <field>destroy</field>
  1726 + <condition>&#x3d;</condition>
  1727 + <name2/>
  1728 + </key>
  1729 + <value>
  1730 + <name>station</name>
  1731 + <rename>zdzid</rename>
  1732 + <default/>
  1733 + <type>Integer</type>
  1734 + </value>
  1735 + <value>
  1736 + <name>directions</name>
  1737 + <rename>sxx</rename>
  1738 + <default/>
  1739 + <type>Integer</type>
  1740 + </value>
  1741 + <value>
  1742 + <name>station_code</name>
  1743 + <rename>zdzcode</rename>
  1744 + <default/>
  1745 + <type>String</type>
  1746 + </value>
  1747 + <value>
  1748 + <name>station_name</name>
  1749 + <rename>zdzname_</rename>
  1750 + <default/>
  1751 + <type>String</type>
  1752 + </value>
  1753 + </lookup>
  1754 + <cluster_schema/>
  1755 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1756 + <xloc>329</xloc>
  1757 + <yloc>505</yloc>
  1758 + <draw>Y</draw>
  1759 + </GUI>
  1760 + </step>
  1761 +
  1762 + <step>
  1763 + <name>&#x67e5;&#x627e;&#x6240;&#x6709;&#x7ebf;&#x8def;&#x4e0a;&#x4e0b;&#x884c;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  1764 + <type>DBLookup</type>
  1765 + <description/>
  1766 + <distribute>Y</distribute>
  1767 + <custom_distribution/>
  1768 + <copies>1</copies>
  1769 + <partitioning>
  1770 + <method>none</method>
  1771 + <schema_name/>
  1772 + </partitioning>
  1773 + <connection>bus_control_variable</connection>
  1774 + <cache>N</cache>
  1775 + <cache_load_all>N</cache_load_all>
  1776 + <cache_size>0</cache_size>
  1777 + <lookup>
  1778 + <schema/>
  1779 + <table>bsth_c_line_information</table>
  1780 + <orderby/>
  1781 + <fail_on_multiple>N</fail_on_multiple>
  1782 + <eat_row_on_failure>N</eat_row_on_failure>
  1783 + <key>
  1784 + <name>xlid</name>
  1785 + <field>line</field>
  1786 + <condition>&#x3d;</condition>
  1787 + <name2/>
  1788 + </key>
  1789 + <value>
  1790 + <name>up_mileage</name>
  1791 + <rename>up_mileage</rename>
  1792 + <default/>
  1793 + <type>Number</type>
  1794 + </value>
  1795 + <value>
  1796 + <name>down_mileage</name>
  1797 + <rename>down_mileage</rename>
  1798 + <default/>
  1799 + <type>Number</type>
  1800 + </value>
  1801 + <value>
  1802 + <name>up_travel_time</name>
  1803 + <rename>up_travel_time</rename>
  1804 + <default/>
  1805 + <type>Number</type>
  1806 + </value>
  1807 + <value>
  1808 + <name>down_travel_time</name>
  1809 + <rename>down_travel_time</rename>
  1810 + <default/>
  1811 + <type>Number</type>
  1812 + </value>
  1813 + <value>
  1814 + <name>early_start_time</name>
  1815 + <rename>early_start_time</rename>
  1816 + <default/>
  1817 + <type>String</type>
  1818 + </value>
  1819 + <value>
  1820 + <name>early_end_time</name>
  1821 + <rename>early_end_time</rename>
  1822 + <default/>
  1823 + <type>String</type>
  1824 + </value>
  1825 + <value>
  1826 + <name>early_up_time</name>
  1827 + <rename>early_up_time</rename>
  1828 + <default/>
  1829 + <type>Number</type>
  1830 + </value>
  1831 + <value>
  1832 + <name>early_down_time</name>
  1833 + <rename>early_down_time</rename>
  1834 + <default/>
  1835 + <type>Number</type>
  1836 + </value>
  1837 + <value>
  1838 + <name>late_start_time</name>
  1839 + <rename>late_start_time</rename>
  1840 + <default/>
  1841 + <type>String</type>
  1842 + </value>
  1843 + <value>
  1844 + <name>late_end_time</name>
  1845 + <rename>late_end_time</rename>
  1846 + <default/>
  1847 + <type>String</type>
  1848 + </value>
  1849 + <value>
  1850 + <name>late_up_time</name>
  1851 + <rename>late_up_time</rename>
  1852 + <default/>
  1853 + <type>Number</type>
  1854 + </value>
  1855 + <value>
  1856 + <name>late_down_time</name>
  1857 + <rename>late_down_time</rename>
  1858 + <default/>
  1859 + <type>Number</type>
  1860 + </value>
  1861 + </lookup>
  1862 + <cluster_schema/>
  1863 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1864 + <xloc>149</xloc>
  1865 + <yloc>581</yloc>
  1866 + <draw>Y</draw>
  1867 + </GUI>
  1868 + </step>
  1869 +
  1870 + <step>
  1871 + <name>&#x67e5;&#x627e;&#x65f6;&#x523b;&#x8868;&#x57fa;&#x7840;&#x4fe1;&#x606f;&#x5173;&#x8054;</name>
  1872 + <type>DBLookup</type>
  1873 + <description/>
  1874 + <distribute>Y</distribute>
  1875 + <custom_distribution/>
  1876 + <copies>1</copies>
  1877 + <partitioning>
  1878 + <method>none</method>
  1879 + <schema_name/>
  1880 + </partitioning>
  1881 + <connection>bus_control_variable</connection>
  1882 + <cache>N</cache>
  1883 + <cache_load_all>N</cache_load_all>
  1884 + <cache_size>0</cache_size>
  1885 + <lookup>
  1886 + <schema/>
  1887 + <table>bsth_c_s_ttinfo</table>
  1888 + <orderby/>
  1889 + <fail_on_multiple>N</fail_on_multiple>
  1890 + <eat_row_on_failure>N</eat_row_on_failure>
  1891 + <key>
  1892 + <name>xlid</name>
  1893 + <field>xl</field>
  1894 + <condition>&#x3d;</condition>
  1895 + <name2/>
  1896 + </key>
  1897 + <key>
  1898 + <name>ttinfoname_</name>
  1899 + <field>name</field>
  1900 + <condition>&#x3d;</condition>
  1901 + <name2/>
  1902 + </key>
  1903 + <key>
  1904 + <name>iscanceled</name>
  1905 + <field>is_cancel</field>
  1906 + <condition>&#x3d;</condition>
  1907 + <name2/>
  1908 + </key>
  1909 + <value>
  1910 + <name>id</name>
  1911 + <rename>ttid</rename>
  1912 + <default/>
  1913 + <type>Integer</type>
  1914 + </value>
  1915 + </lookup>
  1916 + <cluster_schema/>
  1917 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1918 + <xloc>1011</xloc>
  1919 + <yloc>134</yloc>
  1920 + <draw>Y</draw>
  1921 + </GUI>
  1922 + </step>
  1923 +
  1924 + <step>
  1925 + <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x5173;&#x8054;</name>
  1926 + <type>DBLookup</type>
  1927 + <description/>
  1928 + <distribute>Y</distribute>
  1929 + <custom_distribution/>
  1930 + <copies>1</copies>
  1931 + <partitioning>
  1932 + <method>none</method>
  1933 + <schema_name/>
  1934 + </partitioning>
  1935 + <connection>bus_control_variable</connection>
  1936 + <cache>N</cache>
  1937 + <cache_load_all>N</cache_load_all>
  1938 + <cache_size>0</cache_size>
  1939 + <lookup>
  1940 + <schema/>
  1941 + <table>bsth_c_line</table>
  1942 + <orderby/>
  1943 + <fail_on_multiple>N</fail_on_multiple>
  1944 + <eat_row_on_failure>N</eat_row_on_failure>
  1945 + <key>
  1946 + <name>xlname_</name>
  1947 + <field>name</field>
  1948 + <condition>&#x3d;</condition>
  1949 + <name2/>
  1950 + </key>
  1951 + <key>
  1952 + <name>iscanceled</name>
  1953 + <field>destroy</field>
  1954 + <condition>&#x3d;</condition>
  1955 + <name2/>
  1956 + </key>
  1957 + <value>
  1958 + <name>id</name>
  1959 + <rename>xlid</rename>
  1960 + <default/>
  1961 + <type>Integer</type>
  1962 + </value>
  1963 + </lookup>
  1964 + <cluster_schema/>
  1965 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1966 + <xloc>1007</xloc>
  1967 + <yloc>43</yloc>
  1968 + <draw>Y</draw>
  1969 + </GUI>
  1970 + </step>
  1971 +
  1972 + <step>
  1973 + <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x51fa;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  1974 + <type>DBLookup</type>
  1975 + <description/>
  1976 + <distribute>Y</distribute>
  1977 + <custom_distribution/>
  1978 + <copies>1</copies>
  1979 + <partitioning>
  1980 + <method>none</method>
  1981 + <schema_name/>
  1982 + </partitioning>
  1983 + <connection>bus_control_variable</connection>
  1984 + <cache>N</cache>
  1985 + <cache_load_all>N</cache_load_all>
  1986 + <cache_size>0</cache_size>
  1987 + <lookup>
  1988 + <schema/>
  1989 + <table>bsth_c_line_information</table>
  1990 + <orderby/>
  1991 + <fail_on_multiple>N</fail_on_multiple>
  1992 + <eat_row_on_failure>N</eat_row_on_failure>
  1993 + <key>
  1994 + <name>xlid</name>
  1995 + <field>line</field>
  1996 + <condition>&#x3d;</condition>
  1997 + <name2/>
  1998 + </key>
  1999 + <value>
  2000 + <name>up_out_timer</name>
  2001 + <rename>up_out_timer</rename>
  2002 + <default/>
  2003 + <type>Number</type>
  2004 + </value>
  2005 + <value>
  2006 + <name>up_out_mileage</name>
  2007 + <rename>up_out_mileage</rename>
  2008 + <default/>
  2009 + <type>Number</type>
  2010 + </value>
  2011 + <value>
  2012 + <name>down_out_timer</name>
  2013 + <rename>down_out_timer</rename>
  2014 + <default/>
  2015 + <type>Number</type>
  2016 + </value>
  2017 + <value>
  2018 + <name>down_out_mileage</name>
  2019 + <rename>down_out_mileage</rename>
  2020 + <default/>
  2021 + <type>Number</type>
  2022 + </value>
  2023 + </lookup>
  2024 + <cluster_schema/>
  2025 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2026 + <xloc>335</xloc>
  2027 + <yloc>763</yloc>
  2028 + <draw>Y</draw>
  2029 + </GUI>
  2030 + </step>
  2031 +
  2032 + <step>
  2033 + <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x8fdb;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  2034 + <type>DBLookup</type>
  2035 + <description/>
  2036 + <distribute>Y</distribute>
  2037 + <custom_distribution/>
  2038 + <copies>1</copies>
  2039 + <partitioning>
  2040 + <method>none</method>
  2041 + <schema_name/>
  2042 + </partitioning>
  2043 + <connection>bus_control_variable</connection>
  2044 + <cache>N</cache>
  2045 + <cache_load_all>N</cache_load_all>
  2046 + <cache_size>0</cache_size>
  2047 + <lookup>
  2048 + <schema/>
  2049 + <table>bsth_c_line_information</table>
  2050 + <orderby/>
  2051 + <fail_on_multiple>N</fail_on_multiple>
  2052 + <eat_row_on_failure>N</eat_row_on_failure>
  2053 + <key>
  2054 + <name>xlid</name>
  2055 + <field>line</field>
  2056 + <condition>&#x3d;</condition>
  2057 + <name2/>
  2058 + </key>
  2059 + <value>
  2060 + <name>up_in_mileage</name>
  2061 + <rename>up_in_mileage</rename>
  2062 + <default/>
  2063 + <type>Number</type>
  2064 + </value>
  2065 + <value>
  2066 + <name>up_in_timer</name>
  2067 + <rename>up_in_timer</rename>
  2068 + <default/>
  2069 + <type>Number</type>
  2070 + </value>
  2071 + <value>
  2072 + <name>down_in_mileage</name>
  2073 + <rename>down_in_mileage</rename>
  2074 + <default/>
  2075 + <type>Number</type>
  2076 + </value>
  2077 + <value>
  2078 + <name>down_in_timer</name>
  2079 + <rename>down_in_timer</rename>
  2080 + <default/>
  2081 + <type>Number</type>
  2082 + </value>
  2083 + </lookup>
  2084 + <cluster_schema/>
  2085 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2086 + <xloc>553</xloc>
  2087 + <yloc>1004</yloc>
  2088 + <draw>Y</draw>
  2089 + </GUI>
  2090 + </step>
  2091 +
  2092 + <step>
  2093 + <name>&#x67e5;&#x627e;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;</name>
  2094 + <type>DBLookup</type>
  2095 + <description/>
  2096 + <distribute>Y</distribute>
  2097 + <custom_distribution/>
  2098 + <copies>1</copies>
  2099 + <partitioning>
  2100 + <method>none</method>
  2101 + <schema_name/>
  2102 + </partitioning>
  2103 + <connection>bus_control_variable</connection>
  2104 + <cache>N</cache>
  2105 + <cache_load_all>N</cache_load_all>
  2106 + <cache_size>0</cache_size>
  2107 + <lookup>
  2108 + <schema/>
  2109 + <table>bsth_c_ls_stationroute</table>
  2110 + <orderby/>
  2111 + <fail_on_multiple>N</fail_on_multiple>
  2112 + <eat_row_on_failure>N</eat_row_on_failure>
  2113 + <key>
  2114 + <name>xlid</name>
  2115 + <field>line</field>
  2116 + <condition>&#x3d;</condition>
  2117 + <name2/>
  2118 + </key>
  2119 + <key>
  2120 + <name>version</name>
  2121 + <field>versions</field>
  2122 + <condition>&#x3d;</condition>
  2123 + <name2/>
  2124 + </key>
  2125 + <key>
  2126 + <name>sxx</name>
  2127 + <field>directions</field>
  2128 + <condition>&#x3d;</condition>
  2129 + <name2/>
  2130 + </key>
  2131 + <key>
  2132 + <name>endZdtype</name>
  2133 + <field>station_mark</field>
  2134 + <condition>&#x3d;</condition>
  2135 + <name2/>
  2136 + </key>
  2137 + <key>
  2138 + <name>destory</name>
  2139 + <field>destroy</field>
  2140 + <condition>&#x3d;</condition>
  2141 + <name2/>
  2142 + </key>
  2143 + <value>
  2144 + <name>station_name</name>
  2145 + <rename>zdzname</rename>
  2146 + <default/>
  2147 + <type>String</type>
  2148 + </value>
  2149 + <value>
  2150 + <name>station</name>
  2151 + <rename>zdzid</rename>
  2152 + <default/>
  2153 + <type>Integer</type>
  2154 + </value>
  2155 + <value>
  2156 + <name>station_code</name>
  2157 + <rename>zdzcode</rename>
  2158 + <default/>
  2159 + <type>String</type>
  2160 + </value>
  2161 + </lookup>
  2162 + <cluster_schema/>
  2163 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2164 + <xloc>280</xloc>
  2165 + <yloc>404</yloc>
  2166 + <draw>Y</draw>
  2167 + </GUI>
  2168 + </step>
  2169 +
  2170 + <step>
  2171 + <name>&#x67e5;&#x627e;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>
  2172 + <type>DBLookup</type>
  2173 + <description/>
  2174 + <distribute>Y</distribute>
  2175 + <custom_distribution/>
  2176 + <copies>1</copies>
  2177 + <partitioning>
  2178 + <method>none</method>
  2179 + <schema_name/>
  2180 + </partitioning>
  2181 + <connection>bus_control_variable</connection>
  2182 + <cache>N</cache>
  2183 + <cache_load_all>N</cache_load_all>
  2184 + <cache_size>0</cache_size>
  2185 + <lookup>
  2186 + <schema/>
  2187 + <table>bsth_c_ls_stationroute</table>
  2188 + <orderby/>
  2189 + <fail_on_multiple>N</fail_on_multiple>
  2190 + <eat_row_on_failure>N</eat_row_on_failure>
  2191 + <key>
  2192 + <name>xlid</name>
  2193 + <field>line</field>
  2194 + <condition>&#x3d;</condition>
  2195 + <name2/>
  2196 + </key>
  2197 + <key>
  2198 + <name>version</name>
  2199 + <field>versions</field>
  2200 + <condition>&#x3d;</condition>
  2201 + <name2/>
  2202 + </key>
  2203 + <key>
  2204 + <name>qdzname</name>
  2205 + <field>station_name</field>
  2206 + <condition>LIKE</condition>
  2207 + <name2/>
  2208 + </key>
  2209 + <key>
  2210 + <name>sendZdtype</name>
  2211 + <field>station_mark</field>
  2212 + <condition>&#x3d;</condition>
  2213 + <name2/>
  2214 + </key>
  2215 + <key>
  2216 + <name>destory</name>
  2217 + <field>destroy</field>
  2218 + <condition>&#x3d;</condition>
  2219 + <name2/>
  2220 + </key>
  2221 + <value>
  2222 + <name>station</name>
  2223 + <rename>qdzid</rename>
  2224 + <default/>
  2225 + <type>Integer</type>
  2226 + </value>
  2227 + <value>
  2228 + <name>directions</name>
  2229 + <rename>sxx</rename>
  2230 + <default/>
  2231 + <type>Integer</type>
  2232 + </value>
  2233 + <value>
  2234 + <name>station_code</name>
  2235 + <rename>qdzcode</rename>
  2236 + <default/>
  2237 + <type>String</type>
  2238 + </value>
  2239 + <value>
  2240 + <name>station_name</name>
  2241 + <rename>qdzname_</rename>
  2242 + <default/>
  2243 + <type>String</type>
  2244 + </value>
  2245 + </lookup>
  2246 + <cluster_schema/>
  2247 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2248 + <xloc>430</xloc>
  2249 + <yloc>403</yloc>
  2250 + <draw>Y</draw>
  2251 + </GUI>
  2252 + </step>
  2253 +
  2254 + <step>
  2255 + <name>&#x67e5;&#x627e;&#x8def;&#x724c;&#x5173;&#x8054;</name>
  2256 + <type>DBLookup</type>
  2257 + <description/>
  2258 + <distribute>Y</distribute>
  2259 + <custom_distribution/>
  2260 + <copies>1</copies>
  2261 + <partitioning>
  2262 + <method>none</method>
  2263 + <schema_name/>
  2264 + </partitioning>
  2265 + <connection>bus_control_variable</connection>
  2266 + <cache>N</cache>
  2267 + <cache_load_all>N</cache_load_all>
  2268 + <cache_size>0</cache_size>
  2269 + <lookup>
  2270 + <schema/>
  2271 + <table>bsth_c_s_gbi</table>
  2272 + <orderby/>
  2273 + <fail_on_multiple>N</fail_on_multiple>
  2274 + <eat_row_on_failure>N</eat_row_on_failure>
  2275 + <key>
  2276 + <name>xlid</name>
  2277 + <field>xl</field>
  2278 + <condition>&#x3d;</condition>
  2279 + <name2/>
  2280 + </key>
  2281 + <key>
  2282 + <name>lp</name>
  2283 + <field>lp_name</field>
  2284 + <condition>&#x3d;</condition>
  2285 + <name2/>
  2286 + </key>
  2287 + <key>
  2288 + <name>iscanceled</name>
  2289 + <field>is_cancel</field>
  2290 + <condition>&#x3d;</condition>
  2291 + <name2/>
  2292 + </key>
  2293 + <value>
  2294 + <name>id</name>
  2295 + <rename>lpid</rename>
  2296 + <default/>
  2297 + <type>Integer</type>
  2298 + </value>
  2299 + </lookup>
  2300 + <cluster_schema/>
  2301 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2302 + <xloc>1013</xloc>
  2303 + <yloc>221</yloc>
  2304 + <draw>Y</draw>
  2305 + </GUI>
  2306 + </step>
  2307 +
  2308 + <step>
  2309 + <name>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x7ebf;&#x8def;&#x65b9;&#x5411;</name>
  2310 + <type>DBLookup</type>
  2311 + <description/>
  2312 + <distribute>Y</distribute>
  2313 + <custom_distribution/>
  2314 + <copies>1</copies>
  2315 + <partitioning>
  2316 + <method>none</method>
  2317 + <schema_name/>
  2318 + </partitioning>
  2319 + <connection>bus_control_variable</connection>
  2320 + <cache>N</cache>
  2321 + <cache_load_all>N</cache_load_all>
  2322 + <cache_size>0</cache_size>
  2323 + <lookup>
  2324 + <schema/>
  2325 + <table>bsth_c_ls_stationroute</table>
  2326 + <orderby/>
  2327 + <fail_on_multiple>N</fail_on_multiple>
  2328 + <eat_row_on_failure>N</eat_row_on_failure>
  2329 + <key>
  2330 + <name>xlid</name>
  2331 + <field>line</field>
  2332 + <condition>&#x3d;</condition>
  2333 + <name2/>
  2334 + </key>
  2335 + <key>
  2336 + <name>version</name>
  2337 + <field>versions</field>
  2338 + <condition>&#x3d;</condition>
  2339 + <name2/>
  2340 + </key>
  2341 + <key>
  2342 + <name>startZdtype_calcu</name>
  2343 + <field>station_mark</field>
  2344 + <condition>&#x3d;</condition>
  2345 + <name2/>
  2346 + </key>
  2347 + <key>
  2348 + <name>qdzname_calcu</name>
  2349 + <field>station_name</field>
  2350 + <condition>LIKE</condition>
  2351 + <name2/>
  2352 + </key>
  2353 + <key>
  2354 + <name>destory</name>
  2355 + <field>destroy</field>
  2356 + <condition>&#x3d;</condition>
  2357 + <name2/>
  2358 + </key>
  2359 + <value>
  2360 + <name>directions</name>
  2361 + <rename>sxx</rename>
  2362 + <default/>
  2363 + <type>String</type>
  2364 + </value>
  2365 + </lookup>
  2366 + <cluster_schema/>
  2367 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2368 + <xloc>548</xloc>
  2369 + <yloc>610</yloc>
  2370 + <draw>Y</draw>
  2371 + </GUI>
  2372 + </step>
  2373 +
  2374 + <step>
  2375 + <name>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x7ec8;&#x70b9;&#x7ad9;&#xff0c;&#x5e76;&#x4f5c;&#x4e3a;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x7684;&#x8d77;&#x70b9;&#x7ad9;</name>
  2376 + <type>DBLookup</type>
  2377 + <description/>
  2378 + <distribute>Y</distribute>
  2379 + <custom_distribution/>
  2380 + <copies>1</copies>
  2381 + <partitioning>
  2382 + <method>none</method>
  2383 + <schema_name/>
  2384 + </partitioning>
  2385 + <connection>bus_control_variable</connection>
  2386 + <cache>N</cache>
  2387 + <cache_load_all>Y</cache_load_all>
  2388 + <cache_size>0</cache_size>
  2389 + <lookup>
  2390 + <schema/>
  2391 + <table>bsth_c_ls_stationroute</table>
  2392 + <orderby/>
  2393 + <fail_on_multiple>N</fail_on_multiple>
  2394 + <eat_row_on_failure>N</eat_row_on_failure>
  2395 + <key>
  2396 + <name>xlid</name>
  2397 + <field>line</field>
  2398 + <condition>&#x3d;</condition>
  2399 + <name2/>
  2400 + </key>
  2401 + <key>
  2402 + <name>version</name>
  2403 + <field>versions</field>
  2404 + <condition>&#x3d;</condition>
  2405 + <name2/>
  2406 + </key>
  2407 + <key>
  2408 + <name>endZdtype_calcu</name>
  2409 + <field>station_mark</field>
  2410 + <condition>&#x3d;</condition>
  2411 + <name2/>
  2412 + </key>
  2413 + <key>
  2414 + <name>sxx</name>
  2415 + <field>directions</field>
  2416 + <condition>&#x3d;</condition>
  2417 + <name2/>
  2418 + </key>
  2419 + <key>
  2420 + <name>destory</name>
  2421 + <field>destroy</field>
  2422 + <condition>&#x3d;</condition>
  2423 + <name2/>
  2424 + </key>
  2425 + <value>
  2426 + <name>station_name</name>
  2427 + <rename>zdzname_calcu</rename>
  2428 + <default/>
  2429 + <type>Integer</type>
  2430 + </value>
  2431 + </lookup>
  2432 + <cluster_schema/>
  2433 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2434 + <xloc>550</xloc>
  2435 + <yloc>701</yloc>
  2436 + <draw>Y</draw>
  2437 + </GUI>
  2438 + </step>
  2439 +
  2440 + <step>
  2441 + <name>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>
  2442 + <type>DBLookup</type>
  2443 + <description/>
  2444 + <distribute>Y</distribute>
  2445 + <custom_distribution/>
  2446 + <copies>1</copies>
  2447 + <partitioning>
  2448 + <method>none</method>
  2449 + <schema_name/>
  2450 + </partitioning>
  2451 + <connection>bus_control_variable</connection>
  2452 + <cache>N</cache>
  2453 + <cache_load_all>N</cache_load_all>
  2454 + <cache_size>0</cache_size>
  2455 + <lookup>
  2456 + <schema/>
  2457 + <table>bsth_c_ls_stationroute</table>
  2458 + <orderby/>
  2459 + <fail_on_multiple>N</fail_on_multiple>
  2460 + <eat_row_on_failure>N</eat_row_on_failure>
  2461 + <key>
  2462 + <name>xlid</name>
  2463 + <field>line</field>
  2464 + <condition>&#x3d;</condition>
  2465 + <name2/>
  2466 + </key>
  2467 + <key>
  2468 + <name>version</name>
  2469 + <field>versions</field>
  2470 + <condition>&#x3d;</condition>
  2471 + <name2/>
  2472 + </key>
  2473 + <key>
  2474 + <name>zdzname_calcu</name>
  2475 + <field>station_name</field>
  2476 + <condition>&#x3d;</condition>
  2477 + <name2/>
  2478 + </key>
  2479 + <key>
  2480 + <name>startZdtype_calcu</name>
  2481 + <field>station_mark</field>
  2482 + <condition>&#x3d;</condition>
  2483 + <name2/>
  2484 + </key>
  2485 + <key>
  2486 + <name>destory</name>
  2487 + <field>destroy</field>
  2488 + <condition>&#x3d;</condition>
  2489 + <name2/>
  2490 + </key>
  2491 + <value>
  2492 + <name>directions</name>
  2493 + <rename>sxx2</rename>
  2494 + <default/>
  2495 + <type>Integer</type>
  2496 + </value>
  2497 + <value>
  2498 + <name>station</name>
  2499 + <rename>qdzid</rename>
  2500 + <default/>
  2501 + <type>Integer</type>
  2502 + </value>
  2503 + <value>
  2504 + <name>station_code</name>
  2505 + <rename>qdzcode</rename>
  2506 + <default/>
  2507 + <type>String</type>
  2508 + </value>
  2509 + <value>
  2510 + <name>station_name</name>
  2511 + <rename>qname</rename>
  2512 + <default/>
  2513 + <type>String</type>
  2514 + </value>
  2515 + </lookup>
  2516 + <cluster_schema/>
  2517 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2518 + <xloc>551</xloc>
  2519 + <yloc>782</yloc>
  2520 + <draw>Y</draw>
  2521 + </GUI>
  2522 + </step>
  2523 +
  2524 + <step>
  2525 + <name>&#x6b63;&#x5e38;&#x73ed;&#x6b21;_&#x5904;&#x7406;&#x6570;&#x636e;</name>
  2526 + <type>ScriptValueMod</type>
  2527 + <description/>
  2528 + <distribute>Y</distribute>
  2529 + <custom_distribution/>
  2530 + <copies>1</copies>
  2531 + <partitioning>
  2532 + <method>none</method>
  2533 + <schema_name/>
  2534 + </partitioning>
  2535 + <compatible>N</compatible>
  2536 + <optimizationLevel>9</optimizationLevel>
  2537 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  2538 + <jsScript_name>Script 1</jsScript_name>
  2539 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;&#x2f;&#x2f; &#x6dfb;&#x52a0;&#x7ad9;&#x70b9;&#x6807;&#x8bc6;&#xa;var sendZdtype &#x3d; &#x27;B&#x27;&#x3b;&#xa;var endZdtype &#x3d; &#x27;E&#x27;&#x3b;&#xa;&#xa;var destory &#x3d; 0&#x3b; &#x2f;&#x2f; &#x672a;&#x64a4;&#x9500;flag</jsScript_script>
  2540 + </jsScript> </jsScripts> <fields> <field> <name>sendZdtype</name>
  2541 + <rename>sendZdtype</rename>
  2542 + <type>String</type>
  2543 + <length>-1</length>
  2544 + <precision>-1</precision>
  2545 + <replace>N</replace>
  2546 + </field> <field> <name>endZdtype</name>
  2547 + <rename>endZdtype</rename>
  2548 + <type>String</type>
  2549 + <length>-1</length>
  2550 + <precision>-1</precision>
  2551 + <replace>N</replace>
  2552 + </field> <field> <name>destory</name>
  2553 + <rename>destory</rename>
  2554 + <type>Integer</type>
  2555 + <length>-1</length>
  2556 + <precision>-1</precision>
  2557 + <replace>N</replace>
  2558 + </field> </fields> <cluster_schema/>
  2559 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2560 + <xloc>588</xloc>
  2561 + <yloc>403</yloc>
  2562 + <draw>Y</draw>
  2563 + </GUI>
  2564 + </step>
  2565 +
  2566 + <step>
  2567 + <name>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</name>
  2568 + <type>Dummy</type>
  2569 + <description/>
  2570 + <distribute>Y</distribute>
  2571 + <custom_distribution/>
  2572 + <copies>1</copies>
  2573 + <partitioning>
  2574 + <method>none</method>
  2575 + <schema_name/>
  2576 + </partitioning>
  2577 + <cluster_schema/>
  2578 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2579 + <xloc>725</xloc>
  2580 + <yloc>404</yloc>
  2581 + <draw>Y</draw>
  2582 + </GUI>
  2583 + </step>
  2584 +
  2585 + <step>
  2586 + <name>&#x6dfb;&#x52a0;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;</name>
  2587 + <type>GroupBy</type>
  2588 + <description/>
  2589 + <distribute>Y</distribute>
  2590 + <custom_distribution/>
  2591 + <copies>1</copies>
  2592 + <partitioning>
  2593 + <method>none</method>
  2594 + <schema_name/>
  2595 + </partitioning>
  2596 + <all_rows>Y</all_rows>
  2597 + <ignore_aggregate>N</ignore_aggregate>
  2598 + <field_ignore/>
  2599 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  2600 + <prefix>grp</prefix>
  2601 + <add_linenr>Y</add_linenr>
  2602 + <linenr_fieldname>fcno</linenr_fieldname>
  2603 + <give_back_row>N</give_back_row>
  2604 + <group>
  2605 + <field>
  2606 + <name>lp</name>
  2607 + </field>
  2608 + </group>
  2609 + <fields>
  2610 + </fields>
  2611 + <cluster_schema/>
  2612 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2613 + <xloc>442</xloc>
  2614 + <yloc>44</yloc>
  2615 + <draw>Y</draw>
  2616 + </GUI>
  2617 + </step>
  2618 +
  2619 + <step>
  2620 + <name>&#x6dfb;&#x52a0;&#x5bf9;&#x5e94;&#x73ed;&#x6b21;&#x6570;</name>
  2621 + <type>GroupBy</type>
  2622 + <description/>
  2623 + <distribute>Y</distribute>
  2624 + <custom_distribution/>
  2625 + <copies>1</copies>
  2626 + <partitioning>
  2627 + <method>none</method>
  2628 + <schema_name/>
  2629 + </partitioning>
  2630 + <all_rows>Y</all_rows>
  2631 + <ignore_aggregate>N</ignore_aggregate>
  2632 + <field_ignore/>
  2633 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  2634 + <prefix>grp</prefix>
  2635 + <add_linenr>Y</add_linenr>
  2636 + <linenr_fieldname>bcs</linenr_fieldname>
  2637 + <give_back_row>N</give_back_row>
  2638 + <group>
  2639 + </group>
  2640 + <fields>
  2641 + </fields>
  2642 + <cluster_schema/>
  2643 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2644 + <xloc>553</xloc>
  2645 + <yloc>44</yloc>
  2646 + <draw>Y</draw>
  2647 + </GUI>
  2648 + </step>
  2649 +
  2650 + <step>
  2651 + <name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</name>
  2652 + <type>Normaliser</type>
  2653 + <description/>
  2654 + <distribute>Y</distribute>
  2655 + <custom_distribution/>
  2656 + <copies>1</copies>
  2657 + <partitioning>
  2658 + <method>none</method>
  2659 + <schema_name/>
  2660 + </partitioning>
  2661 + <typefield>&#x7ad9;&#x70b9;&#x540d;&#x79f0;</typefield>
  2662 + <fields> </fields> <cluster_schema/>
  2663 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2664 + <xloc>248</xloc>
  2665 + <yloc>44</yloc>
  2666 + <draw>Y</draw>
  2667 + </GUI>
  2668 + </step>
  2669 +
  2670 + <step>
  2671 + <name>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178;</name>
  2672 + <type>ValueMapper</type>
  2673 + <description/>
  2674 + <distribute>Y</distribute>
  2675 + <custom_distribution/>
  2676 + <copies>1</copies>
  2677 + <partitioning>
  2678 + <method>none</method>
  2679 + <schema_name/>
  2680 + </partitioning>
  2681 + <field_to_use>bctype</field_to_use>
  2682 + <target_field>bctype_code</target_field>
  2683 + <non_match_default>&#x672a;&#x77e5;&#x7c7b;&#x578b;</non_match_default>
  2684 + <fields>
  2685 + <field>
  2686 + <source_value>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</source_value>
  2687 + <target_value>normal</target_value>
  2688 + </field>
  2689 + <field>
  2690 + <source_value>&#x51fa;&#x573a;</source_value>
  2691 + <target_value>out</target_value>
  2692 + </field>
  2693 + <field>
  2694 + <source_value>&#x8fdb;&#x573a;</source_value>
  2695 + <target_value>in</target_value>
  2696 + </field>
  2697 + <field>
  2698 + <source_value>&#x52a0;&#x6cb9;</source_value>
  2699 + <target_value>oil</target_value>
  2700 + </field>
  2701 + <field>
  2702 + <source_value>&#x4e34;&#x52a0;</source_value>
  2703 + <target_value>temp</target_value>
  2704 + </field>
  2705 + <field>
  2706 + <source_value>&#x533a;&#x95f4;</source_value>
  2707 + <target_value>region</target_value>
  2708 + </field>
  2709 + <field>
  2710 + <source_value>&#x653e;&#x7a7a;</source_value>
  2711 + <target_value>venting</target_value>
  2712 + </field>
  2713 + <field>
  2714 + <source_value>&#x653e;&#x5927;&#x7ad9;</source_value>
  2715 + <target_value>major</target_value>
  2716 + </field>
  2717 + </fields>
  2718 + <cluster_schema/>
  2719 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2720 + <xloc>149</xloc>
  2721 + <yloc>491</yloc>
  2722 + <draw>Y</draw>
  2723 + </GUI>
  2724 + </step>
  2725 +
  2726 + <step>
  2727 + <name>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 2</name>
  2728 + <type>ValueMapper</type>
  2729 + <description/>
  2730 + <distribute>Y</distribute>
  2731 + <custom_distribution/>
  2732 + <copies>1</copies>
  2733 + <partitioning>
  2734 + <method>none</method>
  2735 + <schema_name/>
  2736 + </partitioning>
  2737 + <field_to_use>bctype</field_to_use>
  2738 + <target_field>bctype_code</target_field>
  2739 + <non_match_default>&#x672a;&#x77e5;&#x7c7b;&#x578b;</non_match_default>
  2740 + <fields>
  2741 + <field>
  2742 + <source_value>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</source_value>
  2743 + <target_value>normal</target_value>
  2744 + </field>
  2745 + <field>
  2746 + <source_value>&#x51fa;&#x573a;</source_value>
  2747 + <target_value>out</target_value>
  2748 + </field>
  2749 + <field>
  2750 + <source_value>&#x8fdb;&#x573a;</source_value>
  2751 + <target_value>in</target_value>
  2752 + </field>
  2753 + <field>
  2754 + <source_value>&#x52a0;&#x6cb9;</source_value>
  2755 + <target_value>oil</target_value>
  2756 + </field>
  2757 + <field>
  2758 + <source_value>&#x4e34;&#x52a0;</source_value>
  2759 + <target_value>temp</target_value>
  2760 + </field>
  2761 + <field>
  2762 + <source_value>&#x533a;&#x95f4;</source_value>
  2763 + <target_value>region</target_value>
  2764 + </field>
  2765 + <field>
  2766 + <source_value>&#x653e;&#x7a7a;</source_value>
  2767 + <target_value>venting</target_value>
  2768 + </field>
  2769 + <field>
  2770 + <source_value>&#x653e;&#x5927;&#x7ad9;</source_value>
  2771 + <target_value>major</target_value>
  2772 + </field>
  2773 + </fields>
  2774 + <cluster_schema/>
  2775 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2776 + <xloc>333</xloc>
  2777 + <yloc>681</yloc>
  2778 + <draw>Y</draw>
  2779 + </GUI>
  2780 + </step>
  2781 +
  2782 + <step>
  2783 + <name>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 3</name>
  2784 + <type>ValueMapper</type>
  2785 + <description/>
  2786 + <distribute>Y</distribute>
  2787 + <custom_distribution/>
  2788 + <copies>1</copies>
  2789 + <partitioning>
  2790 + <method>none</method>
  2791 + <schema_name/>
  2792 + </partitioning>
  2793 + <field_to_use>bctype</field_to_use>
  2794 + <target_field>bctype_code</target_field>
  2795 + <non_match_default>&#x672a;&#x77e5;&#x7c7b;&#x578b;</non_match_default>
  2796 + <fields>
  2797 + <field>
  2798 + <source_value>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</source_value>
  2799 + <target_value>normal</target_value>
  2800 + </field>
  2801 + <field>
  2802 + <source_value>&#x51fa;&#x573a;</source_value>
  2803 + <target_value>out</target_value>
  2804 + </field>
  2805 + <field>
  2806 + <source_value>&#x8fdb;&#x573a;</source_value>
  2807 + <target_value>in</target_value>
  2808 + </field>
  2809 + <field>
  2810 + <source_value>&#x52a0;&#x6cb9;</source_value>
  2811 + <target_value>oil</target_value>
  2812 + </field>
  2813 + <field>
  2814 + <source_value>&#x4e34;&#x52a0;</source_value>
  2815 + <target_value>temp</target_value>
  2816 + </field>
  2817 + <field>
  2818 + <source_value>&#x533a;&#x95f4;</source_value>
  2819 + <target_value>region</target_value>
  2820 + </field>
  2821 + <field>
  2822 + <source_value>&#x653e;&#x7a7a;</source_value>
  2823 + <target_value>venting</target_value>
  2824 + </field>
  2825 + <field>
  2826 + <source_value>&#x653e;&#x5927;&#x7ad9;</source_value>
  2827 + <target_value>major</target_value>
  2828 + </field>
  2829 + </fields>
  2830 + <cluster_schema/>
  2831 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2832 + <xloc>551</xloc>
  2833 + <yloc>928</yloc>
  2834 + <draw>Y</draw>
  2835 + </GUI>
  2836 + </step>
  2837 +
  2838 + <step>
  2839 + <name>&#x7ad9;&#x70b9;&#x8def;&#x7531;&#x7248;&#x672c;&#x7c7b;&#x578b;</name>
  2840 + <type>SelectValues</type>
  2841 + <description/>
  2842 + <distribute>N</distribute>
  2843 + <custom_distribution/>
  2844 + <copies>1</copies>
  2845 + <partitioning>
  2846 + <method>none</method>
  2847 + <schema_name/>
  2848 + </partitioning>
  2849 + <fields> <select_unspecified>Y</select_unspecified>
  2850 + <meta> <name>zdlyversion_</name>
  2851 + <rename>version</rename>
  2852 + <type>Integer</type>
  2853 + <length>-2</length>
  2854 + <precision>-2</precision>
  2855 + <conversion_mask/>
  2856 + <date_format_lenient>false</date_format_lenient>
  2857 + <date_format_locale/>
  2858 + <date_format_timezone/>
  2859 + <lenient_string_to_number>false</lenient_string_to_number>
  2860 + <encoding/>
  2861 + <decimal_symbol/>
  2862 + <grouping_symbol/>
  2863 + <currency_symbol/>
  2864 + <storage_type/>
  2865 + </meta> </fields> <cluster_schema/>
  2866 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2867 + <xloc>1016</xloc>
  2868 + <yloc>305</yloc>
  2869 + <draw>Y</draw>
  2870 + </GUI>
  2871 + </step>
  2872 +
  2873 + <step>
  2874 + <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63;</name>
  2875 + <type>SelectValues</type>
  2876 + <description/>
  2877 + <distribute>Y</distribute>
  2878 + <custom_distribution/>
  2879 + <copies>1</copies>
  2880 + <partitioning>
  2881 + <method>none</method>
  2882 + <schema_name/>
  2883 + </partitioning>
  2884 + <fields> <select_unspecified>N</select_unspecified>
  2885 + <meta> <name>jhlc</name>
  2886 + <rename>jhlc</rename>
  2887 + <type>Number</type>
  2888 + <length>-2</length>
  2889 + <precision>-2</precision>
  2890 + <conversion_mask/>
  2891 + <date_format_lenient>false</date_format_lenient>
  2892 + <date_format_locale/>
  2893 + <date_format_timezone/>
  2894 + <lenient_string_to_number>false</lenient_string_to_number>
  2895 + <encoding/>
  2896 + <decimal_symbol/>
  2897 + <grouping_symbol/>
  2898 + <currency_symbol/>
  2899 + <storage_type/>
  2900 + </meta> <meta> <name>bcsj</name>
  2901 + <rename>bcsj</rename>
  2902 + <type>Integer</type>
  2903 + <length>-2</length>
  2904 + <precision>-2</precision>
  2905 + <conversion_mask/>
  2906 + <date_format_lenient>false</date_format_lenient>
  2907 + <date_format_locale/>
  2908 + <date_format_timezone/>
  2909 + <lenient_string_to_number>false</lenient_string_to_number>
  2910 + <encoding/>
  2911 + <decimal_symbol/>
  2912 + <grouping_symbol/>
  2913 + <currency_symbol/>
  2914 + <storage_type/>
  2915 + </meta> </fields> <cluster_schema/>
  2916 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2917 + <xloc>146</xloc>
  2918 + <yloc>768</yloc>
  2919 + <draw>Y</draw>
  2920 + </GUI>
  2921 + </step>
  2922 +
  2923 + <step>
  2924 + <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 2</name>
  2925 + <type>SelectValues</type>
  2926 + <description/>
  2927 + <distribute>Y</distribute>
  2928 + <custom_distribution/>
  2929 + <copies>1</copies>
  2930 + <partitioning>
  2931 + <method>none</method>
  2932 + <schema_name/>
  2933 + </partitioning>
  2934 + <fields> <select_unspecified>N</select_unspecified>
  2935 + <meta> <name>out_mileage</name>
  2936 + <rename>out_mileage</rename>
  2937 + <type>Number</type>
  2938 + <length>-2</length>
  2939 + <precision>-2</precision>
  2940 + <conversion_mask/>
  2941 + <date_format_lenient>false</date_format_lenient>
  2942 + <date_format_locale/>
  2943 + <date_format_timezone/>
  2944 + <lenient_string_to_number>false</lenient_string_to_number>
  2945 + <encoding/>
  2946 + <decimal_symbol/>
  2947 + <grouping_symbol/>
  2948 + <currency_symbol/>
  2949 + <storage_type/>
  2950 + </meta> <meta> <name>out_time</name>
  2951 + <rename>out_time</rename>
  2952 + <type>Integer</type>
  2953 + <length>-2</length>
  2954 + <precision>-2</precision>
  2955 + <conversion_mask/>
  2956 + <date_format_lenient>false</date_format_lenient>
  2957 + <date_format_locale/>
  2958 + <date_format_timezone/>
  2959 + <lenient_string_to_number>false</lenient_string_to_number>
  2960 + <encoding/>
  2961 + <decimal_symbol/>
  2962 + <grouping_symbol/>
  2963 + <currency_symbol/>
  2964 + <storage_type/>
  2965 + </meta> <meta> <name>sxx</name>
  2966 + <rename>sxx</rename>
  2967 + <type>Integer</type>
  2968 + <length>-2</length>
  2969 + <precision>-2</precision>
  2970 + <conversion_mask/>
  2971 + <date_format_lenient>false</date_format_lenient>
  2972 + <date_format_locale/>
  2973 + <date_format_timezone/>
  2974 + <lenient_string_to_number>false</lenient_string_to_number>
  2975 + <encoding/>
  2976 + <decimal_symbol/>
  2977 + <grouping_symbol/>
  2978 + <currency_symbol/>
  2979 + <storage_type/>
  2980 + </meta> </fields> <cluster_schema/>
  2981 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2982 + <xloc>338</xloc>
  2983 + <yloc>1008</yloc>
  2984 + <draw>Y</draw>
  2985 + </GUI>
  2986 + </step>
  2987 +
  2988 + <step>
  2989 + <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 3</name>
  2990 + <type>SelectValues</type>
  2991 + <description/>
  2992 + <distribute>Y</distribute>
  2993 + <custom_distribution/>
  2994 + <copies>1</copies>
  2995 + <partitioning>
  2996 + <method>none</method>
  2997 + <schema_name/>
  2998 + </partitioning>
  2999 + <fields> <select_unspecified>N</select_unspecified>
  3000 + <meta> <name>parade_mileage</name>
  3001 + <rename>parade_mileage</rename>
  3002 + <type>Number</type>
  3003 + <length>-2</length>
  3004 + <precision>-2</precision>
  3005 + <conversion_mask/>
  3006 + <date_format_lenient>false</date_format_lenient>
  3007 + <date_format_locale/>
  3008 + <date_format_timezone/>
  3009 + <lenient_string_to_number>false</lenient_string_to_number>
  3010 + <encoding/>
  3011 + <decimal_symbol/>
  3012 + <grouping_symbol/>
  3013 + <currency_symbol/>
  3014 + <storage_type/>
  3015 + </meta> <meta> <name>parade_time</name>
  3016 + <rename>parade_time</rename>
  3017 + <type>Integer</type>
  3018 + <length>-2</length>
  3019 + <precision>-2</precision>
  3020 + <conversion_mask/>
  3021 + <date_format_lenient>false</date_format_lenient>
  3022 + <date_format_locale/>
  3023 + <date_format_timezone/>
  3024 + <lenient_string_to_number>false</lenient_string_to_number>
  3025 + <encoding/>
  3026 + <decimal_symbol/>
  3027 + <grouping_symbol/>
  3028 + <currency_symbol/>
  3029 + <storage_type/>
  3030 + </meta> <meta> <name>sxx2</name>
  3031 + <rename>sxx2</rename>
  3032 + <type>Integer</type>
  3033 + <length>-2</length>
  3034 + <precision>-2</precision>
  3035 + <conversion_mask/>
  3036 + <date_format_lenient>false</date_format_lenient>
  3037 + <date_format_locale/>
  3038 + <date_format_timezone/>
  3039 + <lenient_string_to_number>false</lenient_string_to_number>
  3040 + <encoding/>
  3041 + <decimal_symbol/>
  3042 + <grouping_symbol/>
  3043 + <currency_symbol/>
  3044 + <storage_type/>
  3045 + </meta> </fields> <cluster_schema/>
  3046 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  3047 + <xloc>847</xloc>
  3048 + <yloc>1003</yloc>
  3049 + <draw>Y</draw>
  3050 + </GUI>
  3051 + </step>
  3052 +
  3053 + <step>
  3054 + <name>&#x8ba1;&#x7b97;&#x73ed;&#x6b21;&#x7c7b;&#x578b;</name>
  3055 + <type>ValueMapper</type>
  3056 + <description/>
  3057 + <distribute>Y</distribute>
  3058 + <custom_distribution/>
  3059 + <copies>1</copies>
  3060 + <partitioning>
  3061 + <method>none</method>
  3062 + <schema_name/>
  3063 + </partitioning>
  3064 + <field_to_use>qdzname</field_to_use>
  3065 + <target_field>bctype</target_field>
  3066 + <non_match_default>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</non_match_default>
  3067 + <fields>
  3068 + <field>
  3069 + <source_value>&#x51fa;&#x573a;</source_value>
  3070 + <target_value>&#x51fa;&#x573a;</target_value>
  3071 + </field>
  3072 + <field>
  3073 + <source_value>&#x8fdb;&#x573a;</source_value>
  3074 + <target_value>&#x8fdb;&#x573a;</target_value>
  3075 + </field>
  3076 + </fields>
  3077 + <cluster_schema/>
  3078 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  3079 + <xloc>1014</xloc>
  3080 + <yloc>401</yloc>
  3081 + <draw>Y</draw>
  3082 + </GUI>
  3083 + </step>
  3084 +
  3085 + <step>
  3086 + <name>&#x8bb0;&#x5f55;&#x5173;&#x8054; &#x28;&#x7b1b;&#x5361;&#x5c14;&#x8f93;&#x51fa;&#x29;</name>
  3087 + <type>JoinRows</type>
  3088 + <description/>
  3089 + <distribute>Y</distribute>
  3090 + <custom_distribution/>
  3091 + <copies>1</copies>
  3092 + <partitioning>
  3093 + <method>none</method>
  3094 + <schema_name/>
  3095 + </partitioning>
  3096 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  3097 + <prefix>out</prefix>
  3098 + <cache_size>500</cache_size>
  3099 + <main/>
  3100 + <compare>
  3101 +<condition>
  3102 + <negated>N</negated>
  3103 + <leftvalue/>
  3104 + <function>&#x3d;</function>
  3105 + <rightvalue/>
  3106 + </condition>
  3107 + </compare>
  3108 + <cluster_schema/>
  3109 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  3110 + <xloc>310</xloc>
  3111 + <yloc>133</yloc>
  3112 + <draw>Y</draw>
  3113 + </GUI>
  3114 + </step>
  3115 +
  3116 + <step>
  3117 + <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;&#xff08;&#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x4e3a;&#x7a7a;&#xff09;</name>
  3118 + <type>FilterRows</type>
  3119 + <description/>
  3120 + <distribute>Y</distribute>
  3121 + <custom_distribution/>
  3122 + <copies>1</copies>
  3123 + <partitioning>
  3124 + <method>none</method>
  3125 + <schema_name/>
  3126 + </partitioning>
  3127 +<send_true_to/>
  3128 +<send_false_to/>
  3129 + <compare>
  3130 +<condition>
  3131 + <negated>N</negated>
  3132 + <leftvalue>sendtime_calcu</leftvalue>
  3133 + <function>IS NOT NULL</function>
  3134 + <rightvalue/>
  3135 + </condition>
  3136 + </compare>
  3137 + <cluster_schema/>
  3138 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  3139 + <xloc>768</xloc>
  3140 + <yloc>44</yloc>
  3141 + <draw>Y</draw>
  3142 + </GUI>
  3143 + </step>
  3144 +
  3145 + <step>
  3146 + <name>&#x8fdb;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x8d77;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</name>
  3147 + <type>ScriptValueMod</type>
  3148 + <description/>
  3149 + <distribute>Y</distribute>
  3150 + <custom_distribution/>
  3151 + <copies>1</copies>
  3152 + <partitioning>
  3153 + <method>none</method>
  3154 + <schema_name/>
  3155 + </partitioning>
  3156 + <compatible>N</compatible>
  3157 + <optimizationLevel>9</optimizationLevel>
  3158 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  3159 + <jsScript_name>Script 1</jsScript_name>
  3160 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;&#x2f;&#x2f; &#x6dfb;&#x52a0;&#x7ad9;&#x70b9;&#x6807;&#x8bc6;&#xa;var cc_groups &#x3d; qdzgroups.split&#x28;&#x22;,&#x22;&#x29;&#x3b; &#x2f;&#x2f; &#x6240;&#x6709;&#x73ed;&#x6b21;&#x8d77;&#x70b9;&#x7ad9;&#x6570;&#x7ec4;&#xa;var qdzname_calcu &#x3d; cc_groups&#x5b;gno - 2&#x5d;&#x3b; &#x2f;&#x2f; &#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x7684;&#x8d77;&#x70b9;&#x7ad9;&#x662f;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x7ec8;&#x70b9;&#x7ad9;&#xff0c;&#x8fd9;&#x91cc;&#x53ea;&#x6709;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x8d77;&#x70b9;&#x7ad9;&#xff0c;&#x8fd8;&#x9700;&#x8981;&#x8ba1;&#x7b97;&#xa;var startZdtype_calcu &#x3d; &#x27;B&#x27;&#x3b;&#xa;var endZdtype_calcu &#x3d; &#x27;E&#x27;&#x3b;&#xa;&#xa;var destory &#x3d; 0&#x3b; &#x2f;&#x2f; &#x672a;&#x64a4;&#x9500;flag</jsScript_script>
  3161 + </jsScript> </jsScripts> <fields> <field> <name>qdzname_calcu</name>
  3162 + <rename>qdzname_calcu</rename>
  3163 + <type>String</type>
  3164 + <length>-1</length>
  3165 + <precision>-1</precision>
  3166 + <replace>N</replace>
  3167 + </field> <field> <name>startZdtype_calcu</name>
  3168 + <rename>startZdtype_calcu</rename>
  3169 + <type>String</type>
  3170 + <length>-1</length>
  3171 + <precision>-1</precision>
  3172 + <replace>N</replace>
  3173 + </field> <field> <name>endZdtype_calcu</name>
  3174 + <rename>endZdtype_calcu</rename>
  3175 + <type>String</type>
  3176 + <length>-1</length>
  3177 + <precision>-1</precision>
  3178 + <replace>N</replace>
  3179 + </field> <field> <name>destory</name>
  3180 + <rename>destory</rename>
  3181 + <type>Integer</type>
  3182 + <length>-1</length>
  3183 + <precision>-1</precision>
  3184 + <replace>N</replace>
  3185 + </field> </fields> <cluster_schema/>
  3186 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  3187 + <xloc>754</xloc>
  3188 + <yloc>610</yloc>
  3189 + <draw>Y</draw>
  3190 + </GUI>
  3191 + </step>
  3192 +
  3193 + <step>
  3194 + <name>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</name>
  3195 + <type>Dummy</type>
  3196 + <description/>
  3197 + <distribute>Y</distribute>
  3198 + <custom_distribution/>
  3199 + <copies>1</copies>
  3200 + <partitioning>
  3201 + <method>none</method>
  3202 + <schema_name/>
  3203 + </partitioning>
  3204 + <cluster_schema/>
  3205 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  3206 + <xloc>997</xloc>
  3207 + <yloc>606</yloc>
  3208 + <draw>Y</draw>
  3209 + </GUI>
  3210 + </step>
  3211 +
  3212 + <step_error_handling>
  3213 + <error>
  3214 + <source_step>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail</source_step>
  3215 + <target_step>Excel&#x8f93;&#x51fa;</target_step>
  3216 + <is_enabled>Y</is_enabled>
  3217 + <nr_valuename>c1</nr_valuename>
  3218 + <descriptions_valuename>c2</descriptions_valuename>
  3219 + <fields_valuename>c3</fields_valuename>
  3220 + <codes_valuename>c4</codes_valuename>
  3221 + <max_errors/>
  3222 + <max_pct_errors/>
  3223 + <min_pct_rows/>
  3224 + </error>
  3225 + <error>
  3226 + <source_step>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 2</source_step>
  3227 + <target_step>Excel&#x8f93;&#x51fa; 2</target_step>
  3228 + <is_enabled>Y</is_enabled>
  3229 + <nr_valuename/>
  3230 + <descriptions_valuename/>
  3231 + <fields_valuename/>
  3232 + <codes_valuename/>
  3233 + <max_errors/>
  3234 + <max_pct_errors/>
  3235 + <min_pct_rows/>
  3236 + </error>
  3237 + <error>
  3238 + <source_step>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 3</source_step>
  3239 + <target_step>Excel&#x8f93;&#x51fa; 3</target_step>
  3240 + <is_enabled>Y</is_enabled>
  3241 + <nr_valuename/>
  3242 + <descriptions_valuename/>
  3243 + <fields_valuename/>
  3244 + <codes_valuename/>
  3245 + <max_errors/>
  3246 + <max_pct_errors/>
  3247 + <min_pct_rows/>
  3248 + </error>
  3249 + </step_error_handling>
  3250 + <slave-step-copy-partition-distribution>
  3251 +</slave-step-copy-partition-distribution>
  3252 + <slave_transformation>N</slave_transformation>
  3253 +
  3254 +</transformation>
... ...
src/main/resources/static/pages/base/timesmodel/js/v2/core/InternalScheduleObj.js
... ... @@ -934,11 +934,14 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) {
934 934 // 处理中间
935 935 iQInternelCount = aEndBcIndex[1] - aStartBcIndex[1] - 1;
936 936 for (i = 1; i <= iQInternelCount; i++) {
937   - oLp = _internalLpArray[iQIndex + i];
938 937  
939   - if (!oLp.getBc(iQIndex + i, iBcIndex)) {
940   - _fnGenerateBcAndSetBc(i, iQIndex + i, iBcIndex);
  938 + for (j = 0; j < _internalLpArray.length; j++) {
  939 + oLp = _internalLpArray[j];
  940 + if (!oLp.getBc(iQIndex + i, iBcIndex)) {
  941 + _fnGenerateBcAndSetBc(j, iQIndex + i, iBcIndex);
  942 + }
941 943 }
  944 +
942 945 }
943 946  
944 947 // 处理尾部
... ...
src/main/resources/static/pages/base/timesmodel/js/v2/main_v2.js
... ... @@ -202,6 +202,7 @@ var Main_v2 = function() {
202 202 "zdzid": oTempBc._$_zdzid, // 终点站id
203 203  
204 204 "isUp": oTempBc._$_isUp, // 是否上行
  205 + "isFb": false, // 是否分班
205 206  
206 207 "bcType": oTempBc._$_bcType, // 班次类型
207 208 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
... ... @@ -230,6 +231,7 @@ var Main_v2 = function() {
230 231 "zdzid": oTempBc._$_zdzid, // 终点站id
231 232  
232 233 "isUp": oTempBc._$_isUp, // 是否上行
  234 + "isFb": false, // 是否分班
233 235  
234 236 "bcType": oTempBc._$_bcType, // 班次类型
235 237 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
... ... @@ -263,12 +265,15 @@ var Main_v2 = function() {
263 265 "zdzid": oTempBc._$_zdzid, // 终点站id
264 266  
265 267 "isUp": oTempBc._$_isUp, // 是否上行
  268 + "isFb": false, // 是否分班
266 269  
267 270 "bcType": oTempBc._$_bcType, // 班次类型
268 271 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
269 272  
270   - "groupNo": -2, // 第几圈
271   - "groupBcNo": -3 // 圈里第几个班次
  273 + "groupNo": oInternalLp.fnGetBcChainInfo(0)["e_b"] == 0 ?
  274 + oInternalLp.fnGetBcChainInfo(0)["e_q"] :
  275 + oInternalLp.fnGetBcChainInfo(0)["e_q"] + 1, // 第几圈
  276 + "groupBcNo": oInternalLp.fnGetBcChainInfo(0)["e_b"] == 0 ? 1 : 0 // 圈里第几个班次
272 277  
273 278 });
274 279  
... ... @@ -288,6 +293,7 @@ var Main_v2 = function() {
288 293 "zdzid": oTempBc._$_zdzid, // 终点站id
289 294  
290 295 "isUp": oTempBc._$_isUp, // 是否上行
  296 + "isFb": false, // 是否分班
291 297  
292 298 "bcType": oTempBc._$_bcType, // 班次类型
293 299 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
... ... @@ -320,6 +326,7 @@ var Main_v2 = function() {
320 326 "zdzid": oTempBc._$_zdzid, // 终点站id
321 327  
322 328 "isUp": oTempBc._$_isUp, // 是否上行
  329 + "isFb": false, // 是否分班
323 330  
324 331 "bcType": oTempBc._$_bcType, // 班次类型
325 332 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
... ... @@ -348,6 +355,7 @@ var Main_v2 = function() {
348 355 "zdzid": oTempBc._$_zdzid, // 终点站id
349 356  
350 357 "isUp": oTempBc._$_isUp, // 是否上行
  358 + "isFb": false, // 是否分班
351 359  
352 360 "bcType": oTempBc._$_bcType, // 班次类型
353 361 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
... ... @@ -380,6 +388,7 @@ var Main_v2 = function() {
380 388 "zdzid": oTempBc._$_zdzid, // 终点站id
381 389  
382 390 "isUp": oTempBc._$_isUp, // 是否上行
  391 + "isFb": true, // 是否分班
383 392  
384 393 "bcType": oTempBc._$_bcType, // 班次类型
385 394 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
... ... @@ -414,6 +423,7 @@ var Main_v2 = function() {
414 423 "zdzid": oTempBc._$_zdzid, // 终点站id
415 424  
416 425 "isUp": oTempBc._$_isUp, // 是否上行
  426 + "isFb": true, // 是否分班
417 427  
418 428 "bcType": oTempBc._$_bcType, // 班次类型
419 429 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
... ... @@ -438,6 +448,7 @@ var Main_v2 = function() {
438 448 "zdzid": oTempBc._$_zdzid, // 终点站id
439 449  
440 450 "isUp": oTempBc._$_isUp, // 是否上行
  451 + "isFb": true, // 是否分班
441 452  
442 453 "bcType": oTempBc._$_bcType, // 班次类型
443 454 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
... ... @@ -476,12 +487,15 @@ var Main_v2 = function() {
476 487 "zdzid": oTempBc._$_zdzid, // 终点站id
477 488  
478 489 "isUp": oTempBc._$_isUp, // 是否上行
  490 + "isFb": false, // 是否分班
479 491  
480 492 "bcType": oTempBc._$_bcType, // 班次类型
481 493 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
482 494  
483   - "groupNo": -2, // 第几圈
484   - "groupBcNo": -3 // 圈里第几个班次
  495 + "groupNo": oInternalLp.fnGetBcChainInfo(1)["e_b"] == 0 ?
  496 + oInternalLp.fnGetBcChainInfo(1)["e_q"] :
  497 + oInternalLp.fnGetBcChainInfo(1)["e_q"] + 1, // 第几圈
  498 + "groupBcNo": oInternalLp.fnGetBcChainInfo(1)["e_b"] == 0 ? 1 : 0 // 圈里第几个班次
485 499  
486 500 });
487 501  
... ... @@ -501,6 +515,7 @@ var Main_v2 = function() {
501 515 "zdzid": oTempBc._$_zdzid, // 终点站id
502 516  
503 517 "isUp": oTempBc._$_isUp, // 是否上行
  518 + "isFb": false, // 是否分班
504 519  
505 520 "bcType": oTempBc._$_bcType, // 班次类型
506 521 "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/form.html
... ... @@ -103,6 +103,28 @@
103 103 <form ng-submit="ctrl.submit()" class="form-horizontal" novalidate name="myForm">
104 104 <div class="form-body">
105 105 <div class="form-group has-success has-feedback">
  106 + <label class="col-md-2 control-label">ExcelSheet格式类型*:</label>
  107 + <div class="col-md-4">
  108 + <sa-Select5 name="timetabletype"
  109 + model="ctrl.ttInfoDetailManageForForm"
  110 + cmaps="{'excelFormatType': 'code'}"
  111 + dcname="excelFormatType"
  112 + icname="code"
  113 + dsparams="{{ {type: 'dic', param: 'timetabletype' } | json }}"
  114 + iterobjname="item"
  115 + iterobjexp="item.name"
  116 + searchph="格式类型..."
  117 + searchexp="this.name"
  118 + required >
  119 + </sa-Select5>
  120 + </div>
  121 + <!-- 隐藏快,显示验证信息 -->
  122 + <div class="alert alert-danger well-sm" ng-show="myForm.timetabletype.$error.required">
  123 + 格式类型必须选择
  124 + </div>
  125 + </div>
  126 +
  127 + <div class="form-group has-success has-feedback">
106 128 <label class="col-md-2 control-label">站点路由版本类型*:</label>
107 129 <div class="col-md-4">
108 130 <sa-Select5 name="zdlytype"
... ... @@ -173,7 +195,8 @@
173 195 'sheetname': ctrl.ttInfoDetailManageForForm.sheetname,
174 196 'lineid' : ctrl.ttInfoDetailManageForForm.xlid,
175 197 'linename' : ctrl.ttInfoDetailManageForForm.xlname,
176   - 'lineversion' : ctrl.ttInfoDetailManageForForm.lineversion
  198 + 'lineversion' : ctrl.ttInfoDetailManageForForm.lineversion,
  199 + 'excelFormatType': ctrl.ttInfoDetailManageForForm.excelFormatType
177 200 } | json}}"/>
178 201 </div>
179 202 <!-- 隐藏块,显示验证信息 -->
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/module.js
... ... @@ -89,7 +89,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
89 89 sheetname: undefined, // sheet名字
90 90 sheetvaliddesc: undefined, // sheet验证描述返回
91 91 lineinfo: undefined, // 线路标准id
92   - lineinfovaliddesc: undefined // 线路标准验证描述返回
  92 + lineinfovaliddesc: undefined, // 线路标准验证描述返回
  93 + excelFormatType: "normal" // 格式类型
93 94 };
94 95 self.sheetnames = [
95 96 //{name: '工作表1'}, {name: '工作表2'} // sheet名字列表
... ...