Commit e331185a3a9e9df7c1ea7461261fdac4fa1a3942

Authored by 徐烜
2 parents 1dafaf64 6ef6d97e

Merge branch 'PSM-7'

Showing 52 changed files with 5315 additions and 4873 deletions
@@ -219,6 +219,12 @@ @@ -219,6 +219,12 @@
219 <artifactId>jaxrpc-api</artifactId> 219 <artifactId>jaxrpc-api</artifactId>
220 <version>1.1</version> 220 <version>1.1</version>
221 </dependency> 221 </dependency>
  222 +
  223 + <dependency>
  224 + <groupId>org.springframework.boot</groupId>
  225 + <artifactId>spring-boot-devtools</artifactId>
  226 + <optional>true</optional>
  227 + </dependency>
222 </dependencies> 228 </dependencies>
223 229
224 <dependencyManagement> 230 <dependencyManagement>
@@ -248,7 +254,6 @@ @@ -248,7 +254,6 @@
248 <artifactId>maven-war-plugin</artifactId> 254 <artifactId>maven-war-plugin</artifactId>
249 <version>2.2</version><!--$NO-MVN-MAN-VER$ --> 255 <version>2.2</version><!--$NO-MVN-MAN-VER$ -->
250 <configuration> 256 <configuration>
251 - <version>3.1</version>  
252 <failOnMissingWebXml>false</failOnMissingWebXml> 257 <failOnMissingWebXml>false</failOnMissingWebXml>
253 </configuration> 258 </configuration>
254 </plugin> 259 </plugin>
@@ -257,6 +262,12 @@ @@ -257,6 +262,12 @@
257 <artifactId>spring-boot-maven-plugin</artifactId> 262 <artifactId>spring-boot-maven-plugin</artifactId>
258 </plugin> 263 </plugin>
259 </plugins> 264 </plugins>
  265 + <resources>
  266 + <resource>
  267 + <directory>src/main/resources</directory>
  268 + <filtering>false</filtering>
  269 + </resource>
  270 + </resources>
260 </build> 271 </build>
261 <repositories> 272 <repositories>
262 <repository> 273 <repository>
src/main/java/com/bsth/controller/realcontrol/BasicDataController.java
@@ -21,6 +21,11 @@ public class BasicDataController { @@ -21,6 +21,11 @@ public class BasicDataController {
21 return BasicData.deviceId2NbbmMap.values(); 21 return BasicData.deviceId2NbbmMap.values();
22 } 22 }
23 23
  24 + @RequestMapping("/nbbm2deviceId")
  25 + public Map<String, String> nbbm2deviceId(Map<String, Object> map){
  26 + return BasicData.deviceId2NbbmMap.inverse();
  27 + }
  28 +
24 @RequestMapping("/lineCode2Name") 29 @RequestMapping("/lineCode2Name")
25 public Map<String, String> findLineCodeMap(){ 30 public Map<String, String> findLineCodeMap(){
26 return BasicData.lineCode2NameMap; 31 return BasicData.lineCode2NameMap;
src/main/java/com/bsth/controller/schedule/TTInfoDetailController.java
@@ -116,6 +116,7 @@ public class TTInfoDetailController extends BaseController&lt;TTInfoDetail, Long&gt; { @@ -116,6 +116,7 @@ public class TTInfoDetailController extends BaseController&lt;TTInfoDetail, Long&gt; {
116 if (sheet.getRows() == 0 || sheet.getColumns() == 0) { // 工作区是否为空 116 if (sheet.getRows() == 0 || sheet.getColumns() == 0) { // 工作区是否为空
117 rtn.put("status", ResponseCode.ERROR); 117 rtn.put("status", ResponseCode.ERROR);
118 rtn.put("msg", String.format("%s 工作区没有数据!", sheetname)); 118 rtn.put("msg", String.format("%s 工作区没有数据!", sheetname));
  119 + return rtn;
119 } else { 120 } else {
120 if (sheet.getRows() <= 1 || sheet.getColumns() <= 1) { 121 if (sheet.getRows() <= 1 || sheet.getColumns() <= 1) {
121 rtn.put("status", ResponseCode.ERROR); 122 rtn.put("status", ResponseCode.ERROR);
@@ -147,11 +148,11 @@ public class TTInfoDetailController extends BaseController&lt;TTInfoDetail, Long&gt; { @@ -147,11 +148,11 @@ public class TTInfoDetailController extends BaseController&lt;TTInfoDetail, Long&gt; {
147 List<StationRoute> stationRouteList = (List<StationRoute>) stationRouteService.list(p1); 148 List<StationRoute> stationRouteList = (List<StationRoute>) stationRouteService.list(p1);
148 if (CollectionUtils.isEmpty(stationRouteList)) { 149 if (CollectionUtils.isEmpty(stationRouteList)) {
149 rtn.put("status", ResponseCode.ERROR); 150 rtn.put("status", ResponseCode.ERROR);
150 - rtn.put("msg", String.format("第1行,第%d列数据在%s站点路由中不是起点站", i + 1, linename)); 151 + rtn.put("msg", String.format("第1行,第%d列数据%s在%s站点路由中不是起点站", i + 1, cell_con.trim(), linename));
151 return rtn; 152 return rtn;
152 } else if (stationRouteList.size() > 1) { 153 } else if (stationRouteList.size() > 1) {
153 rtn.put("status", ResponseCode.ERROR); 154 rtn.put("status", ResponseCode.ERROR);
154 - rtn.put("msg", String.format("第1行,第%d列数据在%s站点路由中上下行都是起点站", i + 1, linename)); 155 + rtn.put("msg", String.format("第1行,第%d列数据%s在%s站点路由中上下行都是起点站", i + 1, cell_con.trim(), linename));
155 return rtn; 156 return rtn;
156 } 157 }
157 } 158 }
@@ -363,6 +364,7 @@ public class TTInfoDetailController extends BaseController&lt;TTInfoDetail, Long&gt; { @@ -363,6 +364,7 @@ public class TTInfoDetailController extends BaseController&lt;TTInfoDetail, Long&gt; {
363 364
364 ttInfoDetailService.fileDataImport( 365 ttInfoDetailService.fileDataImport(
365 new File(filename + "_temp.xls"), 366 new File(filename + "_temp.xls"),
  367 + (String) form.get("sheetname"),
366 (String) form.get("xlname"), 368 (String) form.get("xlname"),
367 (String) form.get("ttname"), 369 (String) form.get("ttname"),
368 tccname 370 tccname
src/main/java/com/bsth/data/BasicData.java
@@ -140,7 +140,7 @@ public class BasicData implements CommandLineRunner{ @@ -140,7 +140,7 @@ public class BasicData implements CommandLineRunner{
140 //车辆和线路映射信息 140 //车辆和线路映射信息
141 loadNbbm2LineInfo(); 141 loadNbbm2LineInfo();
142 //站点路由信息 142 //站点路由信息
143 - loadStationRouteInfo(); 143 + loadStationRouteInfo();
144 //人员信息 144 //人员信息
145 loadPersonnelInfo(); 145 loadPersonnelInfo();
146 logger.info("加载基础数据成功!," ); 146 logger.info("加载基础数据成功!," );
src/main/java/com/bsth/data/arrival/ArrivalData_GPS.java
@@ -51,7 +51,7 @@ public class ArrivalData_GPS implements CommandLineRunner{ @@ -51,7 +51,7 @@ public class ArrivalData_GPS implements CommandLineRunner{
51 @Override 51 @Override
52 public void run(String... arg0) throws Exception { 52 public void run(String... arg0) throws Exception {
53 logger.info("ArrivalData_GPS,30,10"); 53 logger.info("ArrivalData_GPS,30,10");
54 - //Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 40, 20, TimeUnit.SECONDS); 54 + //Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 40, 10, TimeUnit.SECONDS);
55 } 55 }
56 56
57 @Component 57 @Component
src/main/java/com/bsth/data/directive/GatewayHttpUtils.java
@@ -52,7 +52,7 @@ public class GatewayHttpUtils { @@ -52,7 +52,7 @@ public class GatewayHttpUtils {
52 post.setEntity(new StringEntity(jsonStr, "utf-8")); 52 post.setEntity(new StringEntity(jsonStr, "utf-8"));
53 53
54 CloseableHttpResponse response = httpClient.execute(post); 54 CloseableHttpResponse response = httpClient.execute(post);
55 - 55 +
56 JSONObject json = JSONObject.parseObject(EntityUtils.toString(response.getEntity())); 56 JSONObject json = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
57 if(null != json && json.getInteger("errCode") == 0) 57 if(null != json && json.getInteger("errCode") == 0)
58 code = 0; 58 code = 0;
src/main/java/com/bsth/data/forecast/SampleTimeDataLoader.java
1 package com.bsth.data.forecast; 1 package com.bsth.data.forecast;
2 2
3 -import java.text.SimpleDateFormat;  
4 import java.util.ArrayList; 3 import java.util.ArrayList;
5 import java.util.Collections; 4 import java.util.Collections;
6 import java.util.Comparator; 5 import java.util.Comparator;
@@ -9,6 +8,8 @@ import java.util.Iterator; @@ -9,6 +8,8 @@ import java.util.Iterator;
9 import java.util.List; 8 import java.util.List;
10 import java.util.Set; 9 import java.util.Set;
11 10
  11 +import org.joda.time.format.DateTimeFormat;
  12 +import org.joda.time.format.DateTimeFormatter;
12 import org.slf4j.Logger; 13 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory; 14 import org.slf4j.LoggerFactory;
14 import org.springframework.beans.factory.annotation.Autowired; 15 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,14 +40,14 @@ public class SampleTimeDataLoader extends Thread { @@ -39,14 +40,14 @@ public class SampleTimeDataLoader extends Thread {
39 // 当天日期 40 // 当天日期
40 String rq; 41 String rq;
41 42
42 - SimpleDateFormat sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm"); 43 + private static DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm")
  44 + ,fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
43 45
44 Logger logger = LoggerFactory.getLogger(this.getClass()); 46 Logger logger = LoggerFactory.getLogger(this.getClass());
45 47
46 @Override 48 @Override
47 public void run() { 49 public void run() {
48 - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");  
49 - rq = sdfyyyyMMdd.format(new Date()); 50 + rq = fmtyyyyMMdd.print(new Date().getTime());
50 51
51 Iterator<Sample> iterator = sampleRepository.findAll().iterator(); 52 Iterator<Sample> iterator = sampleRepository.findAll().iterator();
52 ArrayListMultimap<String, Sample> sampleMap = ArrayListMultimap.create(); 53 ArrayListMultimap<String, Sample> sampleMap = ArrayListMultimap.create();
@@ -103,8 +104,9 @@ public class SampleTimeDataLoader extends Thread { @@ -103,8 +104,9 @@ public class SampleTimeDataLoader extends Thread {
103 TimeRange tg; 104 TimeRange tg;
104 for (Sample s : list) { 105 for (Sample s : list) {
105 tg = new TimeRange(); 106 tg = new TimeRange();
106 - tg.startTime = sdfyyyyMMddHHmm.parse(rq + s.getsDate()).getTime();  
107 - tg.endTime = sdfyyyyMMddHHmm.parse(rq + s.geteDate()).getTime(); 107 +
  108 + tg.startTime = fmtyyyyMMddHHmm.parseMillis(rq + s.getsDate());
  109 + tg.endTime = fmtyyyyMMddHHmm.parseMillis(rq + s.geteDate());
108 tg.runTime = s.getRunTime(); 110 tg.runTime = s.getRunTime();
109 simple.ranges.add(tg); 111 simple.ranges.add(tg);
110 } 112 }
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
@@ -34,7 +34,7 @@ import com.google.common.collect.TreeMultimap; @@ -34,7 +34,7 @@ import com.google.common.collect.TreeMultimap;
34 34
35 /** 35 /**
36 * 36 *
37 - * @ClassName: GpsRealEntityBuffer 37 + * @ClassName: GpsRealData
38 * @Description: TODO(实时GPS数据集合) 38 * @Description: TODO(实时GPS数据集合)
39 * @author PanZhao 39 * @author PanZhao
40 * @date 2016年8月12日 下午2:04:41 40 * @date 2016年8月12日 下午2:04:41
@@ -73,7 +73,7 @@ public class GpsRealData implements CommandLineRunner{ @@ -73,7 +73,7 @@ public class GpsRealData implements CommandLineRunner{
73 @Override 73 @Override
74 public void run(String... arg0) throws Exception { 74 public void run(String... arg0) throws Exception {
75 logger.info("gpsDataLoader,20,6"); 75 logger.info("gpsDataLoader,20,6");
76 - Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 6, TimeUnit.SECONDS); 76 + //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 6, TimeUnit.SECONDS);
77 } 77 }
78 78
79 public GpsEntity add(GpsEntity gps) { 79 public GpsEntity add(GpsEntity gps) {
src/main/java/com/bsth/data/match/Arrival2Schedule.java
1 package com.bsth.data.match; 1 package com.bsth.data.match;
2 2
3 -import java.text.SimpleDateFormat;  
4 import java.util.ArrayList; 3 import java.util.ArrayList;
5 import java.util.Collections; 4 import java.util.Collections;
6 import java.util.List; 5 import java.util.List;
7 import java.util.Set; 6 import java.util.Set;
8 7
  8 +import org.joda.time.format.DateTimeFormat;
  9 +import org.joda.time.format.DateTimeFormatter;
9 import org.slf4j.Logger; 10 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory; 11 import org.slf4j.LoggerFactory;
11 import org.springframework.beans.BeansException; 12 import org.springframework.beans.BeansException;
@@ -24,7 +25,6 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo; @@ -24,7 +25,6 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo;
24 import com.bsth.service.directive.DirectiveService; 25 import com.bsth.service.directive.DirectiveService;
25 import com.bsth.websocket.handler.SendUtils; 26 import com.bsth.websocket.handler.SendUtils;
26 import com.google.common.collect.ArrayListMultimap; 27 import com.google.common.collect.ArrayListMultimap;
27 -import com.google.common.collect.ListMultimap;  
28 28
29 /** 29 /**
30 * 30 *
@@ -74,8 +74,9 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -74,8 +74,9 @@ public class Arrival2Schedule implements ApplicationContextAware {
74 private ScheduleComparator.FCSJ schComparator = new ScheduleComparator.FCSJ(); 74 private ScheduleComparator.FCSJ schComparator = new ScheduleComparator.FCSJ();
75 private ArrivalComparator arrComparator = new ArrivalComparator(); 75 private ArrivalComparator arrComparator = new ArrivalComparator();
76 private MatchResultComparator mrComparator = new MatchResultComparator(); 76 private MatchResultComparator mrComparator = new MatchResultComparator();
77 - private SimpleDateFormat sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");  
78 - 77 +
  78 + private static DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  79 +
79 @Override 80 @Override
80 public void run() { 81 public void run() {
81 //班次列表 82 //班次列表
@@ -389,8 +390,9 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -389,8 +390,9 @@ public class Arrival2Schedule implements ApplicationContextAware {
389 //上行发车,和到达时间比较一下。起点一般不会立即发出 390 //上行发车,和到达时间比较一下。起点一般不会立即发出
390 if(mr.sch.getXlDir().equals("0") 391 if(mr.sch.getXlDir().equals("0")
391 && null != mr.sch.getQdzArrDateSJ()){ 392 && null != mr.sch.getQdzArrDateSJ()){
392 -  
393 - long dt = sdfyyyyMMddHHmm.parse(mr.sch.getRealExecDate() + mr.sch.getQdzArrDateSJ()).getTime(); 393 +
  394 +
  395 + long dt = fmtyyyyMMddHHmm.parseMillis(mr.sch.getRealExecDate() + mr.sch.getQdzArrDateSJ());
394 396
395 //停站时间少于 计划的3分之1,标记为漂移信号 397 //停站时间少于 计划的3分之1,标记为漂移信号
396 if((mr.ts - dt < (mr.sch.getDfsjT() - dt) / 3)){ 398 if((mr.ts - dt < (mr.sch.getDfsjT() - dt) / 3)){
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
1 -package com.bsth.data.schedule;  
2 -  
3 -import java.text.ParseException;  
4 -import java.text.SimpleDateFormat;  
5 -import java.util.ArrayList;  
6 -import java.util.Collection;  
7 -import java.util.Collections;  
8 -import java.util.Date;  
9 -import java.util.HashMap;  
10 -import java.util.HashSet;  
11 -import java.util.Iterator;  
12 -import java.util.LinkedList;  
13 -import java.util.List;  
14 -import java.util.Map;  
15 -import java.util.Set;  
16 -import java.util.concurrent.TimeUnit;  
17 -  
18 -import org.slf4j.Logger;  
19 -import org.slf4j.LoggerFactory;  
20 -import org.springframework.beans.factory.annotation.Autowired;  
21 -import org.springframework.boot.CommandLineRunner;  
22 -import org.springframework.stereotype.Component;  
23 -  
24 -import com.alibaba.fastjson.JSON;  
25 -import com.alibaba.fastjson.JSONArray;  
26 -import com.bsth.Application;  
27 -import com.bsth.data.LineConfigData;  
28 -import com.bsth.data.directive.FirstScheduleCheckThread;  
29 -import com.bsth.data.gpsdata.GpsRealData;  
30 -import com.bsth.data.schedule.thread.ScheduleLateThread;  
31 -import com.bsth.data.schedule.thread.SchedulePstThread;  
32 -import com.bsth.data.schedule.thread.ScheduleRefreshThread;  
33 -import com.bsth.entity.realcontrol.LineConfig;  
34 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
35 -import com.bsth.entity.schedule.SchedulePlanInfo;  
36 -import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;  
37 -import com.bsth.service.schedule.SchedulePlanInfoService;  
38 -import com.bsth.util.BatchSaveUtils;  
39 -import com.bsth.util.DateUtils;  
40 -import com.bsth.websocket.handler.SendUtils;  
41 -import com.google.common.collect.ArrayListMultimap;  
42 -import com.google.common.collect.TreeMultimap;  
43 -  
44 -/**  
45 - *  
46 - * @ClassName: DayOfSchedule  
47 - * @Description: TODO(当日实际排班)  
48 - * @author PanZhao  
49 - * @date 2016年8月15日 上午10:16:12  
50 - *  
51 - */  
52 -@Component  
53 -public class DayOfSchedule implements CommandLineRunner {  
54 -  
55 - Logger logger = LoggerFactory.getLogger(this.getClass());  
56 -  
57 - // 按车辆分组的班次数据  
58 - private static ArrayListMultimap<String, ScheduleRealInfo> nbbmScheduleMap;  
59 -  
60 - // 班次主键映射  
61 - private static Map<Long, ScheduleRealInfo> id2SchedulMap;  
62 -  
63 - // 车辆和排班起终点站对照(包括进出的停车场,区间起终点)  
64 - private static TreeMultimap<String, String> nbbm2SEStationMap;  
65 -  
66 - //车辆 ——> 当前执行班次  
67 - private static Map<String, ScheduleRealInfo> carExecutePlanMap;  
68 -  
69 - // 持久化缓冲区  
70 - public static LinkedList<ScheduleRealInfo> pstBuffer;  
71 -  
72 - // 排序器  
73 - private static ScheduleComparator.FCSJ schFCSJComparator;  
74 -  
75 - @Autowired  
76 - LineConfigData lineConfigData;  
77 -  
78 - @Autowired  
79 - ScheduleRealInfoRepository schRepository;  
80 -  
81 - @Autowired  
82 - SchedulePlanInfoService schPlanService;  
83 -  
84 - @Autowired  
85 - SchAttrCalculator schAttrCalculator;  
86 -  
87 - @Autowired  
88 - SendUtils sendUtils;  
89 -  
90 - @Autowired  
91 - GpsRealData gpsRealData;  
92 -  
93 - /** 线路当前使用的排班的日期 */  
94 - public static Map<String, String> currSchDateMap;  
95 -  
96 - static {  
97 - nbbmScheduleMap = ArrayListMultimap.create();  
98 - id2SchedulMap = new HashMap<>();  
99 - pstBuffer = new LinkedList<>();  
100 - schFCSJComparator = new ScheduleComparator.FCSJ();  
101 - currSchDateMap = new HashMap<>();  
102 - nbbm2SEStationMap = TreeMultimap.create();  
103 - carExecutePlanMap = new HashMap<>();  
104 - }  
105 -  
106 - @Autowired  
107 - ScheduleRefreshThread scheduleRefreshThread;  
108 -  
109 - @Autowired  
110 - SchedulePstThread schedulePstThread;  
111 -  
112 - @Autowired  
113 - FirstScheduleCheckThread firstScheduleCheckThread;  
114 -  
115 - @Autowired  
116 - ScheduleLateThread scheduleLateThread;  
117 -  
118 - @Override  
119 - public void run(String... arg0) throws Exception {  
120 - //翻班线程  
121 - Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 20, 240, TimeUnit.SECONDS);  
122 - //入库  
123 - //Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS);  
124 - //首班出场指令补发器  
125 - //Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 10, 120, TimeUnit.SECONDS);  
126 - //班次误点扫描  
127 - //Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS);  
128 - }  
129 -  
130 - public Map<String, String> getCurrSchDate() {  
131 - return currSchDateMap;  
132 - }  
133 -  
134 - /**  
135 - *  
136 - * @Title: calcSchDateB  
137 - * @Description: TODO(计算线路当前应该使用的排班日期)  
138 - */  
139 - public String calcSchDate(String lineCode) {  
140 - LineConfig conf = lineConfigData.get(lineCode);  
141 - long ct = System.currentTimeMillis();  
142 -  
143 - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");  
144 - String schDate = sdfyyyyMMdd.format(new Date(ct));  
145 - // 小于当天起始运营时间,则取前一天的排班  
146 - if (ct < conf.getCurrStartTime())  
147 - schDate = DateUtils.subtractDay(schDate, 1);  
148 -  
149 - return schDate;  
150 - }  
151 -  
152 - /**  
153 - * @Title: reloadSch  
154 - * @Title: reloadSch  
155 - * @Description: TODO(重新载入排班)  
156 - * @param @param  
157 - * lineCode 线路编码  
158 - * @param @param  
159 - * schDate 班次日期 yyyy-MM-dd  
160 - * @param @param  
161 - * forcePlan 强制从计划调度重新抓取  
162 - */  
163 - public int reloadSch(String lineCode, String schDate, boolean forcePlan) {  
164 - try {  
165 - List<ScheduleRealInfo> list;  
166 -  
167 - if (forcePlan)  
168 - removeRealSch(lineCode, schDate);  
169 - else  
170 - clearRAMData(lineCode);  
171 -  
172 - if (existRealSch(lineCode, schDate))  
173 - list = loadRealSch(lineCode, schDate);// 从实际排班表加载  
174 - else {  
175 - list = loadPlanSch(lineCode, schDate);// 从计划排班表加载  
176 - // 写入数据库  
177 - batchSave(list);  
178 - }  
179 -  
180 - //更新线路和班次日期对照  
181 - currSchDateMap.put(lineCode, schDate);  
182 - //添加到缓存  
183 - putAll(list);  
184 -  
185 - Set<String> cars = searchAllCars(list);  
186 - //计算“起点站应到”时间  
187 - for(String nbbm : cars)  
188 - schAttrCalculator.calcQdzTimePlan(nbbmScheduleMap.get(nbbm));  
189 -  
190 - //是否是出站即出场  
191 - LineConfig conf = lineConfigData.get(lineCode);  
192 - if(conf.getOutConfig() == 2){  
193 - for(String nbbm : cars)  
194 - schAttrCalculator.connectOutSchedule(nbbmScheduleMap.get(nbbm));  
195 - }  
196 -  
197 - // 页面 翻班通知  
198 - sendUtils.shiftSchedule(lineCode);  
199 - } catch (Exception e) {  
200 - logger.error("", e);  
201 - return -1;  
202 - }  
203 -  
204 - return 0;  
205 - }  
206 -  
207 - /**  
208 - *  
209 - * @Title: searchAllCars  
210 - * @Description: TODO(搜索班次集合中的车辆)  
211 - */  
212 - private Set<String> searchAllCars(List<ScheduleRealInfo> list) {  
213 - Set<String> cars = new HashSet<>();  
214 - for(ScheduleRealInfo sch : list)  
215 - cars.add(sch.getClZbh());  
216 -  
217 - return cars;  
218 - }  
219 -  
220 - private void putAll(List<ScheduleRealInfo> list) {  
221 - for (ScheduleRealInfo sch : list)  
222 - put(sch);  
223 - }  
224 -  
225 - /**  
226 - * @Title: removeRealSch  
227 - * @Description: TODO(清除实际排班,包括数据库和内存数据)  
228 - * @param @param  
229 - * lineCode 线路编码  
230 - * @param @param  
231 - * schDate 班次日期 yyyy-MM-dd  
232 - */  
233 - public void removeRealSch(String lineCode, String schDate) throws Exception {  
234 - try {  
235 - // 清理数据库数据  
236 - schRepository.deleteByLineCodeAndDate(lineCode + "", schDate);  
237 -  
238 - // 清理内存数据  
239 - clearRAMData(lineCode + "");  
240 - } catch (Exception e) {  
241 - logger.error("removeRealSch error, " + lineCode + " -" + schDate, e);  
242 - throw e;  
243 - }  
244 - }  
245 -  
246 - /**  
247 - *  
248 - * @Title: clearRAMData  
249 - * @Description: TODO(清理内存数据)  
250 - */  
251 - public void clearRAMData(String lineCode) {  
252 - int count = 0;  
253 - List<ScheduleRealInfo> remList = new ArrayList<>();  
254 - Collection<ScheduleRealInfo> schs = nbbmScheduleMap.values();  
255 - for (ScheduleRealInfo sch : schs) {  
256 - if (sch.getXlBm().equals(lineCode))  
257 - remList.add(sch);  
258 - }  
259 -  
260 - for(ScheduleRealInfo sch : remList){  
261 - if(null != sch){  
262 - nbbmScheduleMap.remove(sch.getClZbh(), sch);  
263 - id2SchedulMap.remove(sch.getId());  
264 - count ++;  
265 - }  
266 - }  
267 -  
268 - logger.info(lineCode + "排班清理 " + count);  
269 - }  
270 -  
271 - /**  
272 - * @Title: existRealSch  
273 - * @Description: TODO(实际排班是否已存在)  
274 - */  
275 - public boolean existRealSch(String lineCode, String schDate) {  
276 - int count = schRepository.countByLineCodeAndDate(lineCode, schDate);  
277 - return count > 0;  
278 - }  
279 -  
280 - /**  
281 - * @Title: loadRealSch  
282 - * @Description: TODO(从实际排班表加载数据)  
283 - */  
284 - public List<ScheduleRealInfo> loadRealSch(String lineCode, String schDate) {  
285 - return schRepository.findByLineCodeAndDate(lineCode, schDate);  
286 - }  
287 -  
288 - /**  
289 - * @Title: loadPlanSch  
290 - * @Description: TODO(从计划排班表加载数据)  
291 - */  
292 - public List<ScheduleRealInfo> loadPlanSch(String lineCode, String schDate) {  
293 - logger.info("从计划排班表恢复排班,lineCode: " + lineCode + ", schDate: " + schDate);  
294 - List<ScheduleRealInfo> realList = new ArrayList<>();  
295 -  
296 - try {  
297 - Map<String, Object> data = new HashMap<>();  
298 - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd")  
299 - ,sdfHHmm = new SimpleDateFormat("HH:mm");  
300 -  
301 - data.put("scheduleDate_eq", sdfyyyyMMdd.parse(schDate));  
302 - data.put("xlBm_eq", lineCode);  
303 -  
304 - // 查询计划排班  
305 - List<SchedulePlanInfo> planItr = cleanSchPlanItr(schPlanService.list(data).iterator());  
306 -  
307 - // 转换为实际排班  
308 - realList = JSONArray.parseArray(JSON.toJSONString(planItr), ScheduleRealInfo.class);  
309 -  
310 - for (ScheduleRealInfo sch : realList) {  
311 - sch.setScheduleDateStr(sdfyyyyMMdd.format(sch.getScheduleDate()));  
312 - sch.setRealExecDate(sch.getScheduleDateStr());  
313 - // 计划终点时间  
314 - if (sch.getBcsj() != null) {  
315 - try{  
316 - sch.setZdsjT(sdfHHmm.parse(sch.getFcsj()).getTime() + (sch.getBcsj() * 60 * 1000));  
317 - sch.setZdsj(sdfHHmm.format(sch.getZdsjT()));  
318 - sch.setLate(false);  
319 - }catch(ParseException pe){  
320 - logger.error("loadPlanSch... 计算终点时间失败...");  
321 - }  
322 - }  
323 - //计划里程为0,直接清空  
324 - if(sch.getJhlc() != null && sch.getJhlc() == 0)  
325 - sch.setJhlc(null);  
326 - }  
327 - } catch (Exception e) {  
328 - logger.error("", e);  
329 - }  
330 - return realList;  
331 - }  
332 -  
333 - /**  
334 - * @Title: batchSave  
335 - * @Description: TODO(批量入库)  
336 - */  
337 - private void batchSave(List<ScheduleRealInfo> list) {  
338 - // 查询数据库最大ID  
339 - Long id = schRepository.getMaxId();  
340 - if (null == id)  
341 - id = 0L;  
342 - id++;  
343 -  
344 - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");  
345 - for (ScheduleRealInfo item : list) {  
346 - item.setSpId(item.getId());// 保留原始的计划ID  
347 - item.setId(id++);// 设置ID  
348 - item.setScheduleDateStr(sdfyyyyMMdd.format(item.getScheduleDate()));  
349 - }  
350 -  
351 - // 入库  
352 - new BatchSaveUtils<ScheduleRealInfo>().saveList(list, ScheduleRealInfo.class);  
353 - }  
354 -  
355 - private List<SchedulePlanInfo> cleanSchPlanItr(Iterator<SchedulePlanInfo> itrab) {  
356 - List<SchedulePlanInfo> list = new ArrayList<>();  
357 -  
358 - SchedulePlanInfo sp;  
359 - while (itrab.hasNext()) {  
360 - sp = itrab.next();  
361 - sp.setSchedulePlan(null);  
362 - list.add(sp);  
363 - }  
364 - return list;  
365 - }  
366 -  
367 - /**  
368 - *  
369 - * @Title: findByLineCode  
370 - * @Description: TODO(lineCode 获取班次)  
371 - */  
372 - public List<ScheduleRealInfo> findByLineCode(String lineCode) {  
373 - List<ScheduleRealInfo> rs = new ArrayList<>();  
374 -  
375 - Collection<ScheduleRealInfo> schs = nbbmScheduleMap.values();  
376 - for (ScheduleRealInfo sch : schs) {  
377 - if (sch.getXlBm().equals(lineCode))  
378 - rs.add(sch);  
379 - }  
380 - return rs;  
381 - }  
382 -  
383 - /**  
384 - *  
385 - * @Title: findCarByLineCode  
386 - * @Description: TODO(线路下运营的车辆)  
387 - */  
388 - public Set<String> findCarByLineCode(String lineCode){  
389 - Set<String> rs = new HashSet<>();  
390 -  
391 - Collection<ScheduleRealInfo> schs = nbbmScheduleMap.values();  
392 - for (ScheduleRealInfo sch : schs) {  
393 - if (sch.getXlBm().equals(lineCode))  
394 - rs.add(sch.getClZbh());  
395 - }  
396 -  
397 - return rs;  
398 - }  
399 -  
400 - public List<ScheduleRealInfo> findByNbbm(String nbbm) {  
401 - return nbbmScheduleMap.get(nbbm);  
402 - }  
403 -  
404 - /**  
405 - *  
406 - * @Title: findByLineAndUpDown  
407 - * @Description: TODO(lineCode 和走向获取班次)  
408 - */  
409 - public List<ScheduleRealInfo> findByLineAndUpDown(String lineCode, Integer upDown) {  
410 - List<ScheduleRealInfo> list = findByLineCode(lineCode), rs = new ArrayList<>();  
411 -  
412 - for (ScheduleRealInfo sch : list) {  
413 - if (sch.getXlDir().equals(upDown + ""))  
414 - rs.add(sch);  
415 - }  
416 - return rs;  
417 - }  
418 -  
419 - public ScheduleRealInfo get(long id) {  
420 - return id2SchedulMap.get(id);  
421 - }  
422 -  
423 - public Set<String> getSEStationList(String nbbm) {  
424 - return nbbm2SEStationMap.get(nbbm);  
425 - }  
426 -  
427 - /**  
428 - *  
429 - * @Title: next  
430 - * @Description: TODO(下一个班次)  
431 - */  
432 - public ScheduleRealInfo next(ScheduleRealInfo sch) {  
433 -  
434 - List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());  
435 -  
436 - boolean flag = false;  
437 - ScheduleRealInfo next = null;  
438 - for(ScheduleRealInfo temp : list){  
439 - if(temp.getId() == sch.getId()){  
440 - flag = true;  
441 - continue;  
442 - }  
443 - //忽略烂班  
444 - if(temp.isDestroy())  
445 - continue;  
446 -  
447 - if(flag){  
448 - next = temp;  
449 - break;  
450 - }  
451 - }  
452 - return next;  
453 - }  
454 -  
455 - public void put(ScheduleRealInfo sch) {  
456 - schAttrCalculator  
457 - .calcRealDate(sch)  
458 - .calcAllTimeByFcsj(sch);  
459 -  
460 - String nbbm = sch.getClZbh();  
461 - nbbmScheduleMap.put(nbbm, sch);  
462 - nbbm2SEStationMap.put(nbbm, sch.getQdzCode());  
463 - nbbm2SEStationMap.put(nbbm, sch.getZdzCode());  
464 -  
465 - //主键索引  
466 - id2SchedulMap.put(sch.getId(), sch);  
467 - }  
468 -  
469 - public void delete(ScheduleRealInfo sch) {  
470 - //ScheduleRealInfo sch = id2SchedulMap.get(id);  
471 - if(!sch.isSflj())  
472 - return;  
473 -  
474 - nbbmScheduleMap.remove(sch.getClZbh(), sch);  
475 - id2SchedulMap.remove(sch.getId());  
476 - //return sch;  
477 - }  
478 -  
479 - public void calcQdzTimePlan(String nbbm){  
480 - schAttrCalculator.calcQdzTimePlan(nbbmScheduleMap.get(nbbm));  
481 - }  
482 -  
483 - public List<ScheduleRealInfo> updateQdzTimePlan(String nbbm){  
484 - return schAttrCalculator.updateQdzTimePlan(nbbmScheduleMap.get(nbbm));  
485 - }  
486 -  
487 - /**  
488 - *  
489 - * @Title: nextAll  
490 - * @Description: TODO(之后的所有班次)  
491 - */  
492 - public List<ScheduleRealInfo> nextAll(ScheduleRealInfo sch) {  
493 - List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());  
494 - // 排序  
495 - Collections.sort(list, schFCSJComparator);  
496 -  
497 - List<ScheduleRealInfo> rs = new ArrayList<>();  
498 - ScheduleRealInfo temp;  
499 - for (int i = 0; i < list.size() - 1; i++) {  
500 - temp = list.get(i);  
501 - if(temp.getFcsjT() > sch.getFcsjT())  
502 - rs.add(temp);  
503 -  
504 - }  
505 - return rs;  
506 - }  
507 -  
508 - /**  
509 - *  
510 - * @Title: doneSum  
511 - * @Description: TODO(已完成班次总数)  
512 - */  
513 - public int doneSum(String clZbh) {  
514 - List<ScheduleRealInfo> list = nbbmScheduleMap.get(clZbh);  
515 - int rs = 0;  
516 -  
517 - for(ScheduleRealInfo sch : list){  
518 - if(sch.getStatus() == 2 && !sch.isDestroy())  
519 - rs ++;  
520 - }  
521 - return rs;  
522 - }  
523 -  
524 - /**  
525 - *  
526 - * @Title: prveNotExecNum  
527 - * @Description: TODO(班次之前未执行班次数量)  
528 - */  
529 - public int prveNotExecNum(ScheduleRealInfo sch){  
530 - int n = 0;  
531 - List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());  
532 - for(ScheduleRealInfo s : list){  
533 - if(s.getFcsjActual() == null && !s.isDestroy())  
534 - n ++;  
535 -  
536 - if(s.getId().equals(sch.getId()))  
537 - break;  
538 - }  
539 - return n;  
540 - }  
541 -  
542 - /**  
543 - *  
544 - * @Title: validEndTime  
545 - * @Description: TODO(是否是有效的到达时间)  
546 - */  
547 - public boolean validEndTime(ScheduleRealInfo sch, Long ts) {  
548 - if(sch.getFcsjActualTime() != null && sch.getFcsjActualTime() > ts)  
549 - return false;  
550 -  
551 - return validTime(sch, ts);  
552 - }  
553 -  
554 - /**  
555 - *  
556 - * @Title: validStartTime  
557 - * @Description: TODO(是否是合适的发车时间)  
558 - */  
559 - public boolean validStartTime(ScheduleRealInfo sch, Long ts) {  
560 - if(sch.getZdsjActualTime() != null && sch.getZdsjActualTime() < ts)  
561 - return false;  
562 -  
563 - return validTime(sch, ts);  
564 - }  
565 -  
566 - public boolean validTime(ScheduleRealInfo sch, Long ts){  
567 - List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());  
568 - int ci = list.indexOf(sch);  
569 - ScheduleRealInfo prve, next;  
570 - if(ci > 0){  
571 - //之前班次实际时间不能大于该时间  
572 - for(int i = ci - 1; i >= 0; i --){  
573 - prve = list.get(i);  
574 - if(prve.getZdsjActualTime() != null && prve.getZdsjActualTime() > ts )  
575 - return false;  
576 -  
577 - if(prve.getFcsjActualTime() != null && prve.getFcsjActualTime() > ts)  
578 - return false;  
579 - }  
580 - }  
581 -  
582 - if(ci < list.size() - 1){  
583 - //之后班次实际时间不能小于该时间  
584 - for(int i = ci + 1; i < list.size(); i ++){  
585 - next = list.get(i);  
586 - if(next.getFcsjActualTime() != null && next.getFcsjActualTime() < ts)  
587 - return false;  
588 -  
589 - if(next.getZdsjActualTime() != null && next.getZdsjActualTime() < ts)  
590 - return false;  
591 - }  
592 - }  
593 - return true;  
594 - }  
595 -  
596 - public void save(ScheduleRealInfo sch){  
597 - //schRepository.save(sch);  
598 - //pstBuffer.add(sch);  
599 - }  
600 -  
601 -  
602 - /**  
603 - *  
604 - * @Title: nextByBcType  
605 - * @Description: TODO(获取下一个指定班次类型的班次)  
606 - */  
607 - public ScheduleRealInfo nextByBcType(String nbbm, String bcType){  
608 - List<ScheduleRealInfo> list = findByBcType(nbbm, bcType);  
609 -  
610 - Collections.sort(list, schFCSJComparator);  
611 - ScheduleRealInfo sch = null;  
612 - for(ScheduleRealInfo temp : list){  
613 - if(temp.getFcsjActual() == null)  
614 - sch = temp;  
615 - }  
616 -  
617 - return sch;  
618 - }  
619 -  
620 - public List<ScheduleRealInfo> findByBcType(String nbbm, String bcType){  
621 - List<ScheduleRealInfo> all = nbbmScheduleMap.get(nbbm)  
622 - ,outList = new ArrayList<>();  
623 -  
624 - for(ScheduleRealInfo sch : all){  
625 - if(sch.getBcType().equals(bcType))  
626 - outList.add(sch);  
627 - }  
628 - return outList;  
629 - }  
630 -  
631 - public Set<String> allCar(){  
632 - return nbbmScheduleMap.keySet();  
633 - }  
634 -  
635 - public Collection<ScheduleRealInfo> findAll(){  
636 - return nbbmScheduleMap.values();  
637 - }  
638 -  
639 - public void addExecPlan(ScheduleRealInfo sch){  
640 - carExecutePlanMap.put(sch.getClZbh(), sch);  
641 - }  
642 -  
643 - public void removeExecPlan(String clzbh){  
644 - carExecutePlanMap.remove(clzbh);  
645 - }  
646 -  
647 - public Map<String, ScheduleRealInfo> execPlamMap(){  
648 - return carExecutePlanMap;  
649 - }  
650 -  
651 - /**  
652 - * @Title: changeCar  
653 - * @Description: TODO(班次换车) 返回有更新的班次  
654 - * @param @param sch  
655 - * @param @param newClZbh 新的车辆自编号  
656 - */  
657 - public List<ScheduleRealInfo> changeCar(ScheduleRealInfo sch , String newClZbh){  
658 - List<ScheduleRealInfo> ups = new ArrayList<>();  
659 - String oldClzbh = sch.getClZbh();  
660 - if(oldClzbh.equals(newClZbh))  
661 - return ups;  
662 -  
663 -  
664 - //变更相关映射信息  
665 - nbbmScheduleMap.remove(sch.getClZbh(), sch);  
666 -  
667 - sch.setClZbh(newClZbh);  
668 - nbbmScheduleMap.put(newClZbh, sch);  
669 - nbbm2SEStationMap.put(newClZbh, sch.getQdzCode());  
670 - nbbm2SEStationMap.put(newClZbh, sch.getZdzCode());  
671 -  
672 - //重新计算班次应到时间  
673 - ups.addAll(updateQdzTimePlan(oldClzbh));  
674 - ups.addAll(updateQdzTimePlan(newClZbh));  
675 - return ups;  
676 - }  
677 -  
678 - /**  
679 - *  
680 - * @Title: linkToSchPlan  
681 - * @Description: TODO(车辆关联到班次)  
682 - */  
683 -/* public void linkToSchPlan(String nbbm) {  
684 - //当前GPS状态  
685 - GpsEntity gps = gpsRealData.get(BasicData.deviceId2NbbmMap.inverse().get(nbbm));  
686 - if(null == gps)  
687 - return;  
688 -  
689 - //班次集合  
690 - List<ScheduleRealInfo> schArr = nbbmScheduleMap.get(nbbm);  
691 -  
692 - for(ScheduleRealInfo sch : schArr){  
693 - if(sch.getStatus() == 2)  
694 - continue;  
695 - if(sch.isDestroy())  
696 - continue;  
697 - if(!sch.getXlBm().equals(gps.getLineId())  
698 - || Integer.parseInt(sch.getXlDir()) != gps.getUpDown().intValue())  
699 - continue;  
700 -  
701 - addExecPlan(sch);  
702 - break;  
703 - }  
704 - }*/  
705 -} 1 +package com.bsth.data.schedule;
  2 +
  3 +import java.text.SimpleDateFormat;
  4 +import java.util.ArrayList;
  5 +import java.util.Collection;
  6 +import java.util.Collections;
  7 +import java.util.HashMap;
  8 +import java.util.HashSet;
  9 +import java.util.Iterator;
  10 +import java.util.LinkedList;
  11 +import java.util.List;
  12 +import java.util.Map;
  13 +import java.util.Set;
  14 +import java.util.concurrent.TimeUnit;
  15 +
  16 +import org.joda.time.format.DateTimeFormat;
  17 +import org.joda.time.format.DateTimeFormatter;
  18 +import org.slf4j.Logger;
  19 +import org.slf4j.LoggerFactory;
  20 +import org.springframework.beans.factory.annotation.Autowired;
  21 +import org.springframework.boot.CommandLineRunner;
  22 +import org.springframework.stereotype.Component;
  23 +
  24 +import com.alibaba.fastjson.JSON;
  25 +import com.alibaba.fastjson.JSONArray;
  26 +import com.bsth.Application;
  27 +import com.bsth.data.LineConfigData;
  28 +import com.bsth.data.directive.FirstScheduleCheckThread;
  29 +import com.bsth.data.gpsdata.GpsRealData;
  30 +import com.bsth.data.schedule.thread.ScheduleLateThread;
  31 +import com.bsth.data.schedule.thread.SchedulePstThread;
  32 +import com.bsth.data.schedule.thread.ScheduleRefreshThread;
  33 +import com.bsth.entity.realcontrol.LineConfig;
  34 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  35 +import com.bsth.entity.schedule.SchedulePlanInfo;
  36 +import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
  37 +import com.bsth.service.schedule.SchedulePlanInfoService;
  38 +import com.bsth.util.BatchSaveUtils;
  39 +import com.bsth.util.DateUtils;
  40 +import com.bsth.websocket.handler.SendUtils;
  41 +import com.google.common.collect.ArrayListMultimap;
  42 +import com.google.common.collect.TreeMultimap;
  43 +
  44 +/**
  45 + *
  46 + * @ClassName: DayOfSchedule
  47 + * @Description: TODO(当日实际排班)
  48 + * @author PanZhao
  49 + * @date 2016年8月15日 上午10:16:12
  50 + *
  51 + */
  52 +@Component
  53 +public class DayOfSchedule implements CommandLineRunner {
  54 +
  55 + Logger logger = LoggerFactory.getLogger(this.getClass());
  56 +
  57 + // 按车辆分组的班次数据
  58 + private static ArrayListMultimap<String, ScheduleRealInfo> nbbmScheduleMap;
  59 +
  60 + // 班次主键映射
  61 + private static Map<Long, ScheduleRealInfo> id2SchedulMap;
  62 +
  63 + // 车辆和排班起终点站对照(包括进出的停车场,区间起终点)
  64 + private static TreeMultimap<String, String> nbbm2SEStationMap;
  65 +
  66 + //车辆 ——> 当前执行班次
  67 + private static Map<String, ScheduleRealInfo> carExecutePlanMap;
  68 +
  69 + // 持久化缓冲区
  70 + public static LinkedList<ScheduleRealInfo> pstBuffer;
  71 +
  72 + // 排序器
  73 + private static ScheduleComparator.FCSJ schFCSJComparator;
  74 +
  75 + @Autowired
  76 + LineConfigData lineConfigData;
  77 +
  78 + @Autowired
  79 + ScheduleRealInfoRepository schRepository;
  80 +
  81 + @Autowired
  82 + SchedulePlanInfoService schPlanService;
  83 +
  84 + @Autowired
  85 + SchAttrCalculator schAttrCalculator;
  86 +
  87 + @Autowired
  88 + SendUtils sendUtils;
  89 +
  90 + @Autowired
  91 + GpsRealData gpsRealData;
  92 +
  93 + /** 线路当前使用的排班的日期 */
  94 + public static Map<String, String> currSchDateMap;
  95 +
  96 + static {
  97 + nbbmScheduleMap = ArrayListMultimap.create();
  98 + id2SchedulMap = new HashMap<>();
  99 + pstBuffer = new LinkedList<>();
  100 + schFCSJComparator = new ScheduleComparator.FCSJ();
  101 + currSchDateMap = new HashMap<>();
  102 + nbbm2SEStationMap = TreeMultimap.create();
  103 + carExecutePlanMap = new HashMap<>();
  104 + }
  105 +
  106 + @Autowired
  107 + ScheduleRefreshThread scheduleRefreshThread;
  108 +
  109 + @Autowired
  110 + SchedulePstThread schedulePstThread;
  111 +
  112 + @Autowired
  113 + FirstScheduleCheckThread firstScheduleCheckThread;
  114 +
  115 + @Autowired
  116 + ScheduleLateThread scheduleLateThread;
  117 +
  118 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd")
  119 + ,fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  120 +
  121 + @Override
  122 + public void run(String... arg0) throws Exception {
  123 + //翻班线程
  124 + Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
  125 + //入库
  126 + Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS);
  127 + //首班出场指令补发器
  128 + Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS);
  129 + //班次误点扫描
  130 + //Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS);
  131 + }
  132 +
  133 + public Map<String, String> getCurrSchDate() {
  134 + return currSchDateMap;
  135 + }
  136 +
  137 + /**
  138 + *
  139 + * @Title: calcSchDateB
  140 + * @Description: TODO(计算线路当前应该使用的排班日期)
  141 + */
  142 + public String calcSchDate(String lineCode) {
  143 + LineConfig conf = lineConfigData.get(lineCode);
  144 + long ct = System.currentTimeMillis();
  145 +
  146 + String schDate = fmtyyyyMMdd.print(ct);
  147 + // 小于当天起始运营时间,则取前一天的排班
  148 + if (ct < conf.getCurrStartTime())
  149 + schDate = DateUtils.subtractDay(schDate, 1);
  150 +
  151 + return schDate;
  152 + }
  153 +
  154 + /**
  155 + * @Title: reloadSch
  156 + * @Title: reloadSch
  157 + * @Description: TODO(重新载入排班)
  158 + * @param @param
  159 + * lineCode 线路编码
  160 + * @param @param
  161 + * schDate 班次日期 yyyy-MM-dd
  162 + * @param @param
  163 + * forcePlan 强制从计划调度重新抓取
  164 + */
  165 + public int reloadSch(String lineCode, String schDate, boolean forcePlan) {
  166 + try {
  167 + List<ScheduleRealInfo> list;
  168 +
  169 + if (forcePlan)
  170 + removeRealSch(lineCode, schDate);
  171 + else
  172 + clearRAMData(lineCode);
  173 +
  174 + if (existRealSch(lineCode, schDate))
  175 + list = loadRealSch(lineCode, schDate);// 从实际排班表加载
  176 + else {
  177 + list = loadPlanSch(lineCode, schDate);// 从计划排班表加载
  178 + // 写入数据库
  179 + batchSave(list);
  180 + }
  181 +
  182 + //更新线路和班次日期对照
  183 + currSchDateMap.put(lineCode, schDate);
  184 + //添加到缓存
  185 + putAll(list);
  186 +
  187 + Set<String> cars = searchAllCars(list);
  188 + //计算“起点站应到”时间
  189 + for(String nbbm : cars)
  190 + schAttrCalculator.calcQdzTimePlan(nbbmScheduleMap.get(nbbm));
  191 +
  192 + //是否是出站即出场
  193 + LineConfig conf = lineConfigData.get(lineCode);
  194 + if(conf.getOutConfig() == 2){
  195 + for(String nbbm : cars)
  196 + schAttrCalculator.connectOutSchedule(nbbmScheduleMap.get(nbbm));
  197 + }
  198 +
  199 + // 页面 翻班通知
  200 + sendUtils.shiftSchedule(lineCode);
  201 + } catch (Exception e) {
  202 + logger.error("", e);
  203 + return -1;
  204 + }
  205 +
  206 + return 0;
  207 + }
  208 +
  209 + /**
  210 + *
  211 + * @Title: searchAllCars
  212 + * @Description: TODO(搜索班次集合中的车辆)
  213 + */
  214 + private Set<String> searchAllCars(List<ScheduleRealInfo> list) {
  215 + Set<String> cars = new HashSet<>();
  216 + for(ScheduleRealInfo sch : list)
  217 + cars.add(sch.getClZbh());
  218 +
  219 + return cars;
  220 + }
  221 +
  222 + private void putAll(List<ScheduleRealInfo> list) {
  223 + for (ScheduleRealInfo sch : list)
  224 + put(sch);
  225 + }
  226 +
  227 + /**
  228 + * @Title: removeRealSch
  229 + * @Description: TODO(清除实际排班,包括数据库和内存数据)
  230 + * @param @param
  231 + * lineCode 线路编码
  232 + * @param @param
  233 + * schDate 班次日期 yyyy-MM-dd
  234 + */
  235 + public void removeRealSch(String lineCode, String schDate) throws Exception {
  236 + try {
  237 + // 清理数据库数据
  238 + schRepository.deleteByLineCodeAndDate(lineCode + "", schDate);
  239 +
  240 + // 清理内存数据
  241 + clearRAMData(lineCode + "");
  242 + } catch (Exception e) {
  243 + logger.error("removeRealSch error, " + lineCode + " -" + schDate, e);
  244 + throw e;
  245 + }
  246 + }
  247 +
  248 + /**
  249 + *
  250 + * @Title: clearRAMData
  251 + * @Description: TODO(清理内存数据)
  252 + */
  253 + public void clearRAMData(String lineCode) {
  254 + int count = 0;
  255 + List<ScheduleRealInfo> remList = new ArrayList<>();
  256 + Collection<ScheduleRealInfo> schs = nbbmScheduleMap.values();
  257 + for (ScheduleRealInfo sch : schs) {
  258 + if (sch.getXlBm().equals(lineCode))
  259 + remList.add(sch);
  260 + }
  261 +
  262 + for(ScheduleRealInfo sch : remList){
  263 + if(null != sch){
  264 + nbbmScheduleMap.remove(sch.getClZbh(), sch);
  265 + id2SchedulMap.remove(sch.getId());
  266 + count ++;
  267 + }
  268 + }
  269 +
  270 + logger.info(lineCode + "排班清理 " + count);
  271 + }
  272 +
  273 + /**
  274 + * @Title: existRealSch
  275 + * @Description: TODO(实际排班是否已存在)
  276 + */
  277 + public boolean existRealSch(String lineCode, String schDate) {
  278 + int count = schRepository.countByLineCodeAndDate(lineCode, schDate);
  279 + return count > 0;
  280 + }
  281 +
  282 + /**
  283 + * @Title: loadRealSch
  284 + * @Description: TODO(从实际排班表加载数据)
  285 + */
  286 + public List<ScheduleRealInfo> loadRealSch(String lineCode, String schDate) {
  287 + return schRepository.findByLineCodeAndDate(lineCode, schDate);
  288 + }
  289 +
  290 + /**
  291 + * @Title: loadPlanSch
  292 + * @Description: TODO(从计划排班表加载数据)
  293 + */
  294 + public List<ScheduleRealInfo> loadPlanSch(String lineCode, String schDate) {
  295 + logger.info("从计划排班表恢复排班,lineCode: " + lineCode + ", schDate: " + schDate);
  296 + List<ScheduleRealInfo> realList = new ArrayList<>();
  297 +
  298 + try {
  299 + Map<String, Object> data = new HashMap<>();
  300 +
  301 + data.put("scheduleDate_eq", fmtyyyyMMdd.parseDateTime(schDate).toDate());
  302 + data.put("xlBm_eq", lineCode);
  303 +
  304 + // 查询计划排班
  305 + List<SchedulePlanInfo> planItr = cleanSchPlanItr(schPlanService.list(data).iterator());
  306 +
  307 + // 转换为实际排班
  308 + realList = JSONArray.parseArray(JSON.toJSONString(planItr), ScheduleRealInfo.class);
  309 +
  310 + for (ScheduleRealInfo sch : realList) {
  311 + sch.setScheduleDateStr(fmtyyyyMMdd.print(sch.getScheduleDate().getTime()));
  312 + sch.setRealExecDate(sch.getScheduleDateStr());
  313 + // 计划终点时间
  314 + if (sch.getBcsj() != null) {
  315 + sch.setZdsj(fmtHHmm.print(fmtHHmm.parseMillis(sch.getFcsj()) + (sch.getBcsj() * 60 * 1000)));
  316 + sch.setLate(false);
  317 + }
  318 + //计划里程为0,设置NULL
  319 + if(sch.getJhlc() != null && sch.getJhlc() == 0)
  320 + sch.setJhlc(null);
  321 + }
  322 + } catch (Exception e) {
  323 + logger.error("", e);
  324 + }
  325 + return realList;
  326 + }
  327 +
  328 + /**
  329 + * @Title: batchSave
  330 + * @Description: TODO(批量入库)
  331 + */
  332 + private void batchSave(List<ScheduleRealInfo> list) {
  333 + // 查询数据库最大ID
  334 + Long id = schRepository.getMaxId();
  335 + if (null == id)
  336 + id = 0L;
  337 + id++;
  338 +
  339 + SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
  340 + for (ScheduleRealInfo item : list) {
  341 + item.setSpId(item.getId());// 保留原始的计划ID
  342 + item.setId(id++);// 设置ID
  343 + item.setScheduleDateStr(sdfyyyyMMdd.format(item.getScheduleDate()));
  344 + }
  345 +
  346 + // 入库
  347 + new BatchSaveUtils<ScheduleRealInfo>().saveList(list, ScheduleRealInfo.class);
  348 + }
  349 +
  350 + private List<SchedulePlanInfo> cleanSchPlanItr(Iterator<SchedulePlanInfo> itrab) {
  351 + List<SchedulePlanInfo> list = new ArrayList<>();
  352 +
  353 + SchedulePlanInfo sp;
  354 + while (itrab.hasNext()) {
  355 + sp = itrab.next();
  356 + sp.setSchedulePlan(null);
  357 + list.add(sp);
  358 + }
  359 + return list;
  360 + }
  361 +
  362 + /**
  363 + *
  364 + * @Title: findByLineCode
  365 + * @Description: TODO(lineCode 获取班次)
  366 + */
  367 + public List<ScheduleRealInfo> findByLineCode(String lineCode) {
  368 + List<ScheduleRealInfo> rs = new ArrayList<>();
  369 +
  370 + Collection<ScheduleRealInfo> schs = nbbmScheduleMap.values();
  371 + for (ScheduleRealInfo sch : schs) {
  372 + if (sch.getXlBm().equals(lineCode))
  373 + rs.add(sch);
  374 + }
  375 + return rs;
  376 + }
  377 +
  378 + /**
  379 + *
  380 + * @Title: findCarByLineCode
  381 + * @Description: TODO(线路下运营的车辆)
  382 + */
  383 + public Set<String> findCarByLineCode(String lineCode){
  384 + Set<String> rs = new HashSet<>();
  385 +
  386 + Collection<ScheduleRealInfo> schs = nbbmScheduleMap.values();
  387 + for (ScheduleRealInfo sch : schs) {
  388 + if (sch.getXlBm().equals(lineCode))
  389 + rs.add(sch.getClZbh());
  390 + }
  391 +
  392 + return rs;
  393 + }
  394 +
  395 + public List<ScheduleRealInfo> findByNbbm(String nbbm) {
  396 + return nbbmScheduleMap.get(nbbm);
  397 + }
  398 +
  399 + /**
  400 + *
  401 + * @Title: findByLineAndUpDown
  402 + * @Description: TODO(lineCode 和走向获取班次)
  403 + */
  404 + public List<ScheduleRealInfo> findByLineAndUpDown(String lineCode, Integer upDown) {
  405 + List<ScheduleRealInfo> list = findByLineCode(lineCode), rs = new ArrayList<>();
  406 +
  407 + for (ScheduleRealInfo sch : list) {
  408 + if (sch.getXlDir().equals(upDown + ""))
  409 + rs.add(sch);
  410 + }
  411 + return rs;
  412 + }
  413 +
  414 + public ScheduleRealInfo get(long id) {
  415 + return id2SchedulMap.get(id);
  416 + }
  417 +
  418 + public Set<String> getSEStationList(String nbbm) {
  419 + return nbbm2SEStationMap.get(nbbm);
  420 + }
  421 +
  422 + /**
  423 + *
  424 + * @Title: next
  425 + * @Description: TODO(下一个班次)
  426 + */
  427 + public ScheduleRealInfo next(ScheduleRealInfo sch) {
  428 +
  429 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  430 +
  431 + boolean flag = false;
  432 + ScheduleRealInfo next = null;
  433 + for(ScheduleRealInfo temp : list){
  434 + if(temp.getId() == sch.getId()){
  435 + flag = true;
  436 + continue;
  437 + }
  438 + //忽略烂班
  439 + if(temp.isDestroy())
  440 + continue;
  441 +
  442 + if(flag){
  443 + next = temp;
  444 + break;
  445 + }
  446 + }
  447 + return next;
  448 + }
  449 +
  450 + public void put(ScheduleRealInfo sch) {
  451 +
  452 + schAttrCalculator
  453 + .calcRealDate(sch)
  454 + .calcAllTimeByFcsj(sch);
  455 +
  456 + String nbbm = sch.getClZbh();
  457 + nbbmScheduleMap.put(nbbm, sch);
  458 + nbbm2SEStationMap.put(nbbm, sch.getQdzCode());
  459 + nbbm2SEStationMap.put(nbbm, sch.getZdzCode());
  460 +
  461 + //主键索引
  462 + id2SchedulMap.put(sch.getId(), sch);
  463 + }
  464 +
  465 + public void delete(ScheduleRealInfo sch) {
  466 + //ScheduleRealInfo sch = id2SchedulMap.get(id);
  467 + if(!sch.isSflj())
  468 + return;
  469 +
  470 + nbbmScheduleMap.remove(sch.getClZbh(), sch);
  471 + id2SchedulMap.remove(sch.getId());
  472 + //return sch;
  473 + }
  474 +
  475 +// public void calcQdzTimePlan(String nbbm){
  476 +// schAttrCalculator.calcQdzTimePlan(nbbmScheduleMap.get(nbbm));
  477 +// }
  478 +
  479 + public List<ScheduleRealInfo> updateQdzTimePlan(String nbbm){
  480 + return schAttrCalculator.updateQdzTimePlan(nbbmScheduleMap.get(nbbm));
  481 + }
  482 +
  483 + /**
  484 + *
  485 + * @Title: nextAll
  486 + * @Description: TODO(之后的所有班次)
  487 + */
  488 +/* public List<ScheduleRealInfo> nextAll(ScheduleRealInfo sch) {
  489 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  490 + // 排序
  491 + Collections.sort(list, schFCSJComparator);
  492 +
  493 + List<ScheduleRealInfo> rs = new ArrayList<>();
  494 + ScheduleRealInfo temp;
  495 + for (int i = 0; i < list.size() - 1; i++) {
  496 + temp = list.get(i);
  497 + if(temp.getFcsjT() > sch.getFcsjT())
  498 + rs.add(temp);
  499 +
  500 + }
  501 + return rs;
  502 + }*/
  503 +
  504 + /**
  505 + *
  506 + * @Title: doneSum
  507 + * @Description: TODO(已完成班次总数)
  508 + */
  509 + public int doneSum(String clZbh) {
  510 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(clZbh);
  511 + int rs = 0;
  512 +
  513 + for(ScheduleRealInfo sch : list){
  514 + if(sch.getStatus() == 2 && !sch.isDestroy())
  515 + rs ++;
  516 + }
  517 + return rs;
  518 + }
  519 +
  520 + /**
  521 + *
  522 + * @Title: prveNotExecNum
  523 + * @Description: TODO(班次之前未执行班次数量)
  524 + */
  525 + public int prveNotExecNum(ScheduleRealInfo sch){
  526 + int n = 0;
  527 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  528 + for(ScheduleRealInfo s : list){
  529 + if(s.getFcsjActual() == null && !s.isDestroy())
  530 + n ++;
  531 +
  532 + if(s.getId().equals(sch.getId()))
  533 + break;
  534 + }
  535 + return n;
  536 + }
  537 +
  538 + /**
  539 + *
  540 + * @Title: validEndTime
  541 + * @Description: TODO(是否是有效的到达时间)
  542 + */
  543 + public boolean validEndTime(ScheduleRealInfo sch, Long ts) {
  544 + if(sch.getFcsjActualTime() != null && sch.getFcsjActualTime() > ts)
  545 + return false;
  546 +
  547 + return validTime(sch, ts);
  548 + }
  549 +
  550 + /**
  551 + *
  552 + * @Title: validStartTime
  553 + * @Description: TODO(是否是合适的发车时间)
  554 + */
  555 + public boolean validStartTime(ScheduleRealInfo sch, Long ts) {
  556 + if(sch.getZdsjActualTime() != null && sch.getZdsjActualTime() < ts)
  557 + return false;
  558 +
  559 + return validTime(sch, ts);
  560 + }
  561 +
  562 + public boolean validTime(ScheduleRealInfo sch, Long ts){
  563 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  564 + int ci = list.indexOf(sch);
  565 + ScheduleRealInfo prve, next;
  566 + if(ci > 0){
  567 + //之前班次实际时间不能大于该时间
  568 + for(int i = ci - 1; i >= 0; i --){
  569 + prve = list.get(i);
  570 + if(prve.getZdsjActualTime() != null && prve.getZdsjActualTime() > ts )
  571 + return false;
  572 +
  573 + if(prve.getFcsjActualTime() != null && prve.getFcsjActualTime() > ts)
  574 + return false;
  575 + }
  576 + }
  577 +
  578 + if(ci < list.size() - 1){
  579 + //之后班次实际时间不能小于该时间
  580 + for(int i = ci + 1; i < list.size(); i ++){
  581 + next = list.get(i);
  582 + if(next.getFcsjActualTime() != null && next.getFcsjActualTime() < ts)
  583 + return false;
  584 +
  585 + if(next.getZdsjActualTime() != null && next.getZdsjActualTime() < ts)
  586 + return false;
  587 + }
  588 + }
  589 + return true;
  590 + }
  591 +
  592 + public void save(ScheduleRealInfo sch){
  593 + //schRepository.save(sch);
  594 + pstBuffer.add(sch);
  595 + }
  596 +
  597 +
  598 + /**
  599 + *
  600 + * @Title: nextByBcType
  601 + * @Description: TODO(获取下一个指定班次类型的班次)
  602 + */
  603 + public ScheduleRealInfo nextByBcType(String nbbm, String bcType){
  604 + List<ScheduleRealInfo> list = findByBcType(nbbm, bcType);
  605 +
  606 + Collections.sort(list, schFCSJComparator);
  607 + ScheduleRealInfo sch = null;
  608 + for(ScheduleRealInfo temp : list){
  609 + if(temp.getFcsjActual() == null)
  610 + sch = temp;
  611 + }
  612 +
  613 + return sch;
  614 + }
  615 +
  616 + public List<ScheduleRealInfo> findByBcType(String nbbm, String bcType){
  617 + List<ScheduleRealInfo> all = nbbmScheduleMap.get(nbbm)
  618 + ,outList = new ArrayList<>();
  619 +
  620 + for(ScheduleRealInfo sch : all){
  621 + if(sch.getBcType().equals(bcType))
  622 + outList.add(sch);
  623 + }
  624 + return outList;
  625 + }
  626 +
  627 + public Set<String> allCar(){
  628 + return nbbmScheduleMap.keySet();
  629 + }
  630 +
  631 + public Collection<ScheduleRealInfo> findAll(){
  632 + return nbbmScheduleMap.values();
  633 + }
  634 +
  635 + public void addExecPlan(ScheduleRealInfo sch){
  636 + carExecutePlanMap.put(sch.getClZbh(), sch);
  637 + }
  638 +
  639 + public void removeExecPlan(String clzbh){
  640 + carExecutePlanMap.remove(clzbh);
  641 + }
  642 +
  643 + public Map<String, ScheduleRealInfo> execPlamMap(){
  644 + return carExecutePlanMap;
  645 + }
  646 +
  647 + /**
  648 + * @Title: changeCar
  649 + * @Description: TODO(班次换车) 返回有更新的班次
  650 + * @param @param sch
  651 + * @param @param newClZbh 新的车辆自编号
  652 + */
  653 + public List<ScheduleRealInfo> changeCar(ScheduleRealInfo sch , String newClZbh){
  654 + List<ScheduleRealInfo> ups = new ArrayList<>();
  655 + String oldClzbh = sch.getClZbh();
  656 + if(oldClzbh.equals(newClZbh))
  657 + return ups;
  658 +
  659 +
  660 + //变更相关映射信息
  661 + nbbmScheduleMap.remove(sch.getClZbh(), sch);
  662 +
  663 + sch.setClZbh(newClZbh);
  664 + nbbmScheduleMap.put(newClZbh, sch);
  665 + nbbm2SEStationMap.put(newClZbh, sch.getQdzCode());
  666 + nbbm2SEStationMap.put(newClZbh, sch.getZdzCode());
  667 +
  668 + //重新计算班次应到时间
  669 + ups.addAll(updateQdzTimePlan(oldClzbh));
  670 + ups.addAll(updateQdzTimePlan(newClZbh));
  671 + return ups;
  672 + }
  673 +
  674 + /**
  675 + *
  676 + * @Title: linkToSchPlan
  677 + * @Description: TODO(车辆关联到班次)
  678 + */
  679 +/* public void linkToSchPlan(String nbbm) {
  680 + //当前GPS状态
  681 + GpsEntity gps = gpsRealData.get(BasicData.deviceId2NbbmMap.inverse().get(nbbm));
  682 + if(null == gps)
  683 + return;
  684 +
  685 + //班次集合
  686 + List<ScheduleRealInfo> schArr = nbbmScheduleMap.get(nbbm);
  687 +
  688 + for(ScheduleRealInfo sch : schArr){
  689 + if(sch.getStatus() == 2)
  690 + continue;
  691 + if(sch.isDestroy())
  692 + continue;
  693 + if(!sch.getXlBm().equals(gps.getLineId())
  694 + || Integer.parseInt(sch.getXlDir()) != gps.getUpDown().intValue())
  695 + continue;
  696 +
  697 + addExecPlan(sch);
  698 + break;
  699 + }
  700 + }*/
  701 +}
src/main/java/com/bsth/data/schedule/SchAttrCalculator.java
1 package com.bsth.data.schedule; 1 package com.bsth.data.schedule;
2 2
3 import java.text.ParseException; 3 import java.text.ParseException;
4 -import java.text.SimpleDateFormat;  
5 import java.util.ArrayList; 4 import java.util.ArrayList;
6 import java.util.Collections; 5 import java.util.Collections;
7 -import java.util.Date;  
8 import java.util.List; 6 import java.util.List;
9 7
  8 +import org.joda.time.format.DateTimeFormat;
  9 +import org.joda.time.format.DateTimeFormatter;
10 import org.slf4j.Logger; 10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory; 11 import org.slf4j.LoggerFactory;
12 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +34,10 @@ public class SchAttrCalculator { @@ -34,6 +34,10 @@ public class SchAttrCalculator {
34 34
35 Logger logger = LoggerFactory.getLogger(this.getClass()); 35 Logger logger = LoggerFactory.getLogger(this.getClass());
36 36
  37 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd")
  38 + ,fmtHHmm = DateTimeFormat.forPattern("HH:mm")
  39 + ,fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  40 +
37 /** 41 /**
38 * @Title: calcRealDate 42 * @Title: calcRealDate
39 * @Description: TODO(计算班次的真实执行日期) 43 * @Description: TODO(计算班次的真实执行日期)
@@ -45,22 +49,12 @@ public class SchAttrCalculator { @@ -45,22 +49,12 @@ public class SchAttrCalculator {
45 if (null == sch.getFcsjT()) 49 if (null == sch.getFcsjT())
46 calcFcsjTime(sch); 50 calcFcsjTime(sch);
47 51
48 - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");  
49 - /*  
50 - * 早于线路开始运营时间的,加一天  
51 - * 如该线路 2点开始运营,2016-08-23的班次,则 2016-08-23 0:25 的班次应该调整成 2016-08-24 0:25  
52 -  
53 -  
54 - ,sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");  
55 - long st = sdfyyyyMMddHHmm.parse(sch.getScheduleDateStr() + conf.getStartOpt()).getTime();  
56 - if (st > sch.getFcsjT())  
57 - sch.setFcsjAll(sch.getFcsjT() + DAY_TIME);*/  
58 52
59 if(sch.getFcsj().compareTo(conf.getStartOpt()) < 0){ 53 if(sch.getFcsj().compareTo(conf.getStartOpt()) < 0){
60 sch.setFcsjAll(sch.getFcsjT() + DAY_TIME); 54 sch.setFcsjAll(sch.getFcsjT() + DAY_TIME);
61 } 55 }
62 56
63 - sch.setRealExecDate(sdfyyyyMMdd.format(new Date(sch.getFcsjT()))); 57 + sch.setRealExecDate(fmtyyyyMMdd.print(sch.getFcsjT()));
64 } catch (Exception e) { 58 } catch (Exception e) {
65 logger.error("", e); 59 logger.error("", e);
66 } 60 }
@@ -77,12 +71,10 @@ public class SchAttrCalculator { @@ -77,12 +71,10 @@ public class SchAttrCalculator {
77 // 生成时间戳 71 // 生成时间戳
78 calcTimestamp(sch); 72 calcTimestamp(sch);
79 73
80 - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");  
81 // 计划终点时间 74 // 计划终点时间
82 if (sch.getBcsj() != null) { 75 if (sch.getBcsj() != null) {
83 - Date zdDate = new Date(sch.getDfsjT() + (sch.getBcsj() * 60 * 1000));  
84 - sch.setZdsjT(zdDate.getTime());  
85 - sch.setZdsj(sdfHHmm.format(zdDate)); 76 + sch.setZdsjT(sch.getDfsjT() + (sch.getBcsj() * 60 * 1000));
  77 + sch.setZdsj(fmtHHmm.print(sch.getZdsjT()));
86 } 78 }
87 } catch (ParseException e) { 79 } catch (ParseException e) {
88 logger.error("", e); 80 logger.error("", e);
@@ -178,8 +170,7 @@ public class SchAttrCalculator { @@ -178,8 +170,7 @@ public class SchAttrCalculator {
178 } 170 }
179 171
180 public SchAttrCalculator calcFcsjTime(ScheduleRealInfo sch) throws ParseException { 172 public SchAttrCalculator calcFcsjTime(ScheduleRealInfo sch) throws ParseException {
181 - SimpleDateFormat sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");  
182 - sch.setFcsjT(sdfyyyyMMddHHmm.parse(sch.getRealExecDate() + sch.getFcsj()).getTime()); 173 + sch.setFcsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsj()));
183 return this; 174 return this;
184 } 175 }
185 176
src/main/java/com/bsth/data/schedule/thread/ScheduleRefreshThread.java
@@ -18,7 +18,7 @@ import com.bsth.entity.realcontrol.LineConfig; @@ -18,7 +18,7 @@ import com.bsth.entity.realcontrol.LineConfig;
18 18
19 /** 19 /**
20 * 20 *
21 - * @ClassName: refreshScheduleThread 21 + * @ClassName: ScheduleRefreshThread
22 * @Description: TODO(班次刷新线程,用于在营运开始时间切换到当日排班) 22 * @Description: TODO(班次刷新线程,用于在营运开始时间切换到当日排班)
23 * @author PanZhao 23 * @author PanZhao
24 * @date 2016年8月17日 下午1:23:34 24 * @date 2016年8月17日 下午1:23:34
@@ -72,6 +72,7 @@ public class ScheduleRefreshThread extends Thread{ @@ -72,6 +72,7 @@ public class ScheduleRefreshThread extends Thread{
72 logger.info(lineCode + "翻班完成, " + currSchDate + " -班次数量:" + dayOfSchedule.findByLineCode(lineCode).size()); 72 logger.info(lineCode + "翻班完成, " + currSchDate + " -班次数量:" + dayOfSchedule.findByLineCode(lineCode).size());
73 } 73 }
74 } 74 }
  75 +
75 } catch (Exception e) { 76 } catch (Exception e) {
76 logger.error("", e); 77 logger.error("", e);
77 } 78 }
src/main/java/com/bsth/entity/directive/DC0_A3.java
1 package com.bsth.entity.directive; 1 package com.bsth.entity.directive;
2 2
3 -import javax.persistence.Embeddable;  
4 -import javax.persistence.Entity;  
5 -import javax.persistence.GeneratedValue;  
6 -import javax.persistence.Id;  
7 -import javax.persistence.Table;  
8 -import javax.persistence.Transient; 3 +import javax.persistence.*;
9 4
10 /** 5 /**
11 * 6 *
@@ -41,6 +36,7 @@ public class DC0_A3 extends Directive{ @@ -41,6 +36,7 @@ public class DC0_A3 extends Directive{
41 /** 定时定距上报模式 */ 36 /** 定时定距上报模式 */
42 private short reportMode; 37 private short reportMode;
43 /** 定时上报时间间隔 */ 38 /** 定时上报时间间隔 */
  39 + @Column(name = "_interval")
44 private int interval; 40 private int interval;
45 /** 定距上报距离间隔 */ 41 /** 定距上报距离间隔 */
46 private String distance; 42 private String distance;
src/main/java/com/bsth/entity/directive/DC0_A4.java
1 package com.bsth.entity.directive; 1 package com.bsth.entity.directive;
2 2
3 -import javax.persistence.Embeddable;  
4 -import javax.persistence.Entity;  
5 -import javax.persistence.GeneratedValue;  
6 -import javax.persistence.Id;  
7 -import javax.persistence.Table;  
8 -import javax.persistence.Transient; 3 +import javax.persistence.*;
9 4
10 /** 5 /**
11 * 6 *
@@ -41,6 +36,7 @@ public class DC0_A4 extends Directive{ @@ -41,6 +36,7 @@ public class DC0_A4 extends Directive{
41 /** 定时定距上报模式 */ 36 /** 定时定距上报模式 */
42 private short reportMode; 37 private short reportMode;
43 /** 定时上报时间间隔 */ 38 /** 定时上报时间间隔 */
  39 + @Column(name = "_interval")
44 private int interval; 40 private int interval;
45 /** 定距上报距离间隔 */ 41 /** 定距上报距离间隔 */
46 private String distance; 42 private String distance;
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
@@ -6,9 +6,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore; @@ -6,9 +6,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
6 import javax.persistence.*; 6 import javax.persistence.*;
7 7
8 import org.apache.commons.lang3.StringUtils; 8 import org.apache.commons.lang3.StringUtils;
  9 +import org.joda.time.format.DateTimeFormat;
  10 +import org.joda.time.format.DateTimeFormatter;
9 11
10 -import java.text.ParseException;  
11 -import java.text.SimpleDateFormat;  
12 import java.util.Date; 12 import java.util.Date;
13 import java.util.HashSet; 13 import java.util.HashSet;
14 import java.util.Set; 14 import java.util.Set;
@@ -507,31 +507,28 @@ public class ScheduleRealInfo { @@ -507,31 +507,28 @@ public class ScheduleRealInfo {
507 public void setDfsjT(Long dfsjT) { 507 public void setDfsjT(Long dfsjT) {
508 this.dfsjT = dfsjT; 508 this.dfsjT = dfsjT;
509 } 509 }
510 - 510 +
  511 +
  512 + @Transient
  513 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  514 + @Transient
  515 + private static DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  516 +
511 public void setDfsjAll(Long dfsjT) { 517 public void setDfsjAll(Long dfsjT) {
512 this.dfsjT = dfsjT; 518 this.dfsjT = dfsjT;
513 - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");  
514 - this.dfsj = sdfHHmm.format(new Date(this.dfsjT)); 519 + this.dfsj = fmtHHmm.print(this.dfsjT);
515 } 520 }
516 521
517 public void setDfsjAll(String dfsj) { 522 public void setDfsjAll(String dfsj) {
518 -  
519 - try {  
520 - SimpleDateFormat sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");  
521 - this.dfsjT = sdfyyyyMMddHHmm.parse(this.realExecDate + dfsj).getTime();  
522 - this.dfsj = dfsj;  
523 - } catch (ParseException e) {  
524 - e.printStackTrace();  
525 - } 523 + this.dfsjT = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + dfsj);
  524 + this.dfsj = dfsj;
526 } 525 }
527 526
528 public void calcEndTime(){ 527 public void calcEndTime(){
529 //计划终点时间 528 //计划终点时间
530 - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");  
531 if(this.getBcsj() != null){ 529 if(this.getBcsj() != null){
532 - Date zdDate = new Date(this.getDfsjT() + (this.getBcsj() * 60 * 1000));  
533 - this.setZdsjT(zdDate.getTime());  
534 - this.setZdsj(sdfHHmm.format(zdDate)); 530 + this.setZdsjT(this.getDfsjT() + (this.getBcsj() * 60 * 1000));
  531 + this.setZdsj(fmtHHmm.print(this.zdsjT));
535 } 532 }
536 } 533 }
537 534
@@ -583,13 +580,8 @@ public class ScheduleRealInfo { @@ -583,13 +580,8 @@ public class ScheduleRealInfo {
583 * @throws 580 * @throws
584 */ 581 */
585 public void setFcsjAll(String fcsj){ 582 public void setFcsjAll(String fcsj){
586 - try {  
587 - SimpleDateFormat sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");  
588 - this.fcsjT = sdfyyyyMMddHHmm.parse(this.realExecDate + fcsj).getTime();  
589 - this.fcsj = fcsj;  
590 - } catch (ParseException e) {  
591 - e.printStackTrace();  
592 - } 583 + this.fcsjT = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + fcsj);
  584 + this.fcsj = fcsj;
593 } 585 }
594 586
595 /** 587 /**
@@ -600,8 +592,7 @@ public class ScheduleRealInfo { @@ -600,8 +592,7 @@ public class ScheduleRealInfo {
600 */ 592 */
601 public void setFcsjAll(Long fcsjT){ 593 public void setFcsjAll(Long fcsjT){
602 this.fcsjT = fcsjT; 594 this.fcsjT = fcsjT;
603 - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");  
604 - this.fcsj = sdfHHmm.format(new Date(fcsjT)); 595 + this.fcsj = fmtHHmm.print(fcsjT);
605 } 596 }
606 597
607 /** 598 /**
@@ -611,15 +602,9 @@ public class ScheduleRealInfo { @@ -611,15 +602,9 @@ public class ScheduleRealInfo {
611 * @throws 602 * @throws
612 */ 603 */
613 public void setFcsjActualAll(String fcsjActual){ 604 public void setFcsjActualAll(String fcsjActual){
614 - try {  
615 - SimpleDateFormat sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");  
616 - this.fcsjActualTime = sdfyyyyMMddHHmm.parse(this.realExecDate + fcsjActual).getTime();  
617 - this.fcsjActual = fcsjActual;  
618 -  
619 - calcStatus();  
620 - } catch (ParseException e) {  
621 - e.printStackTrace();  
622 - } 605 + this.fcsjActualTime = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + fcsjActual);
  606 + this.fcsjActual = fcsjActual;
  607 + calcStatus();
623 } 608 }
624 609
625 /** 610 /**
@@ -630,9 +615,8 @@ public class ScheduleRealInfo { @@ -630,9 +615,8 @@ public class ScheduleRealInfo {
630 */ 615 */
631 public void setFcsjActualAll(Long t){ 616 public void setFcsjActualAll(Long t){
632 this.fcsjActualTime = t; 617 this.fcsjActualTime = t;
633 - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");  
634 - this.fcsjActual = sdfHHmm.format(new Date(t));  
635 - 618 + this.fcsjActual = fmtHHmm.print(t);
  619 +
636 //更新班次状态 620 //更新班次状态
637 calcStatus(); 621 calcStatus();
638 } 622 }
@@ -645,12 +629,10 @@ public class ScheduleRealInfo { @@ -645,12 +629,10 @@ public class ScheduleRealInfo {
645 */ 629 */
646 public void setZdsjActualAll(Long t){ 630 public void setZdsjActualAll(Long t){
647 this.zdsjActualTime = t; 631 this.zdsjActualTime = t;
648 - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");  
649 - this.zdsjActual = sdfHHmm.format(new Date(t)); 632 + this.zdsjActual = fmtHHmm.print(t);
650 633
651 //更新班次状态 634 //更新班次状态
652 calcStatus(); 635 calcStatus();
653 - //this.synchroZdsj();  
654 } 636 }
655 637
656 /** 638 /**
@@ -660,15 +642,10 @@ public class ScheduleRealInfo { @@ -660,15 +642,10 @@ public class ScheduleRealInfo {
660 * @throws 642 * @throws
661 */ 643 */
662 public void setZdsjActualAll(String zdsjActual){ 644 public void setZdsjActualAll(String zdsjActual){
663 - try {  
664 - SimpleDateFormat sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");  
665 - this.zdsjActualTime = sdfyyyyMMddHHmm.parse(this.realExecDate + zdsjActual).getTime();  
666 - this.zdsjActual = zdsjActual;  
667 -  
668 - calcStatus();  
669 - } catch (ParseException e) {  
670 - e.printStackTrace();  
671 - } 645 + this.zdsjActualTime = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + zdsjActual);
  646 + this.zdsjActual = zdsjActual;
  647 +
  648 + calcStatus();
672 } 649 }
673 650
674 public Long getSpId() { 651 public Long getSpId() {
@@ -713,17 +690,17 @@ public class ScheduleRealInfo { @@ -713,17 +690,17 @@ public class ScheduleRealInfo {
713 return this.status == -1; 690 return this.status == -1;
714 } 691 }
715 692
716 - public boolean isNotDestroy(){ 693 +/* public boolean isNotDestroy(){
717 return this.status != -1; 694 return this.status != -1;
718 - } 695 + }*/
719 696
720 public Set<ChildTaskPlan> getcTasks() { 697 public Set<ChildTaskPlan> getcTasks() {
721 return cTasks; 698 return cTasks;
722 } 699 }
723 700
724 - public void setcTasks(Set<ChildTaskPlan> cTasks) { 701 +/* public void setcTasks(Set<ChildTaskPlan> cTasks) {
725 this.cTasks = cTasks; 702 this.cTasks = cTasks;
726 - } 703 + }*/
727 704
728 public String getScheduleDateStr() { 705 public String getScheduleDateStr() {
729 return scheduleDateStr; 706 return scheduleDateStr;
src/main/java/com/bsth/entity/schedule/SchedulePlan.java
@@ -38,6 +38,15 @@ public class SchedulePlan { @@ -38,6 +38,15 @@ public class SchedulePlan {
38 @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) 38 @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
39 private ScheduleRule1 scheduleRule1; 39 private ScheduleRule1 scheduleRule1;
40 40
  41 + // TODO: 新字段,测试完后删除旧的字段
  42 +
  43 + /** 使用的时刻表名字列表(用逗号连接) */
  44 + private String ttInfoNames;
  45 + /** 使用的时刻表id列表(用逗号连接) */
  46 + private String ttInfoId;
  47 + /** 使用的规则1列表(用逗号连接) */
  48 + private String rule1Ids;
  49 +
41 /** 排班计划的开始时间 */ 50 /** 排班计划的开始时间 */
42 @Column(nullable = false) 51 @Column(nullable = false)
43 private Date scheduleFromTime; 52 private Date scheduleFromTime;
@@ -150,4 +159,28 @@ public class SchedulePlan { @@ -150,4 +159,28 @@ public class SchedulePlan {
150 public void setUpdateDate(Date updateDate) { 159 public void setUpdateDate(Date updateDate) {
151 this.updateDate = updateDate; 160 this.updateDate = updateDate;
152 } 161 }
  162 +
  163 + public String getTtInfoNames() {
  164 + return ttInfoNames;
  165 + }
  166 +
  167 + public void setTtInfoNames(String ttInfoNames) {
  168 + this.ttInfoNames = ttInfoNames;
  169 + }
  170 +
  171 + public String getTtInfoId() {
  172 + return ttInfoId;
  173 + }
  174 +
  175 + public void setTtInfoId(String ttInfoId) {
  176 + this.ttInfoId = ttInfoId;
  177 + }
  178 +
  179 + public String getRule1Ids() {
  180 + return rule1Ids;
  181 + }
  182 +
  183 + public void setRule1Ids(String rule1Ids) {
  184 + this.rule1Ids = rule1Ids;
  185 + }
153 } 186 }
src/main/java/com/bsth/entity/schedule/SchedulePlanInfo.java
@@ -121,6 +121,13 @@ public class SchedulePlanInfo { @@ -121,6 +121,13 @@ public class SchedulePlanInfo {
121 @Column(nullable = false) 121 @Column(nullable = false)
122 private String bcType; 122 private String bcType;
123 123
  124 + // 重要的新增字段
  125 + /** 关联的时刻表id */
  126 + private Long ttInfo;
  127 + /** 关联的时刻表名字 */
  128 + private String ttInfoName;
  129 +
  130 +
124 /** 创建人 */ 131 /** 创建人 */
125 @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) 132 @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
126 private SysUser createBy; 133 private SysUser createBy;
@@ -555,4 +562,20 @@ public class SchedulePlanInfo { @@ -555,4 +562,20 @@ public class SchedulePlanInfo {
555 public void setSchedulePlan(SchedulePlan schedulePlan) { 562 public void setSchedulePlan(SchedulePlan schedulePlan) {
556 this.schedulePlan = schedulePlan; 563 this.schedulePlan = schedulePlan;
557 } 564 }
  565 +
  566 + public Long getTtInfo() {
  567 + return ttInfo;
  568 + }
  569 +
  570 + public void setTtInfo(Long ttInfo) {
  571 + this.ttInfo = ttInfo;
  572 + }
  573 +
  574 + public String getTtInfoName() {
  575 + return ttInfoName;
  576 + }
  577 +
  578 + public void setTtInfoName(String ttInfoName) {
  579 + this.ttInfoName = ttInfoName;
  580 + }
558 } 581 }
src/main/java/com/bsth/entity/search/PredicatesBuilder.java
1 package com.bsth.entity.search; 1 package com.bsth.entity.search;
2 2
  3 +import org.joda.time.DateTime;
  4 +
3 import javax.persistence.criteria.CriteriaBuilder; 5 import javax.persistence.criteria.CriteriaBuilder;
4 import javax.persistence.criteria.Path; 6 import javax.persistence.criteria.Path;
5 import javax.persistence.criteria.Predicate; 7 import javax.persistence.criteria.Predicate;
@@ -27,7 +29,26 @@ public class PredicatesBuilder { @@ -27,7 +29,26 @@ public class PredicatesBuilder {
27 } 29 }
28 30
29 public static Predicate eq(CriteriaBuilder cb,Path<?> expression, Object object){ 31 public static Predicate eq(CriteriaBuilder cb,Path<?> expression, Object object){
30 - return cb.equal(expression, object); 32 + Class<?> leftType = expression.getJavaType();
  33 + Class<?> rightType = object.getClass();
  34 +
  35 + if (Number.class.isAssignableFrom(leftType) &&
  36 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number == Number/String
  37 + return cb.equal(expression, object);
  38 + } else if (String.class.isAssignableFrom(leftType) &&
  39 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String == String/Number
  40 + return cb.equal(expression, object);
  41 + } else if (Date.class.isAssignableFrom(leftType) &&
  42 + Date.class.isAssignableFrom(rightType)) { // Date == Date
  43 + return cb.equal(expression, object);
  44 + } else if (Date.class.isAssignableFrom(leftType) &&
  45 + String.class.isAssignableFrom(rightType)) { // Date == String
  46 + DateTime dateTime = new DateTime(object);
  47 + return cb.equal(expression, dateTime.toDate());
  48 + } else {
  49 + throw new RuntimeException("eq 不支持类型组合:" + expression.getJavaType() + "==" + object.getClass());
  50 + }
  51 +
31 } 52 }
32 53
33 public static Predicate ne(CriteriaBuilder cb,Path<?> expression, Object object){ 54 public static Predicate ne(CriteriaBuilder cb,Path<?> expression, Object object){
@@ -47,15 +68,19 @@ public class PredicatesBuilder { @@ -47,15 +68,19 @@ public class PredicatesBuilder {
47 Class<?> leftType = expression.getJavaType(); 68 Class<?> leftType = expression.getJavaType();
48 Class<?> rightType = object.getClass(); 69 Class<?> rightType = object.getClass();
49 70
50 - if (leftType.isAssignableFrom(Number.class) &&  
51 - rightType.isAssignableFrom(Number.class)) { // 判定是否是Number类型的子类 71 + if (Number.class.isAssignableFrom(leftType) &&
  72 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number >= Number/String
52 return cb.ge((Path<Number>) expression, (Number) object); 73 return cb.ge((Path<Number>) expression, (Number) object);
53 - } else if (leftType.isAssignableFrom(String.class) &&  
54 - rightType.isAssignableFrom(String.class)) { // 判定是否是String类型的子类 74 + } else if (String.class.isAssignableFrom(leftType) &&
  75 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String >= String/Number
55 return cb.greaterThanOrEqualTo((Path<String>) expression, (String) object); 76 return cb.greaterThanOrEqualTo((Path<String>) expression, (String) object);
56 - } else if (leftType.isAssignableFrom(Date.class) &&  
57 - rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类 77 + } else if (Date.class.isAssignableFrom(leftType) &&
  78 + Date.class.isAssignableFrom(rightType)) { // Date >= Date
58 return cb.greaterThanOrEqualTo((Path<Date>) expression, (Date) object); 79 return cb.greaterThanOrEqualTo((Path<Date>) expression, (Date) object);
  80 + } else if (Date.class.isAssignableFrom(leftType) &&
  81 + String.class.isAssignableFrom(rightType)) { // Date >= String
  82 + DateTime dateTime = new DateTime(object);
  83 + return cb.greaterThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
59 } else { 84 } else {
60 throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass()); 85 throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
61 } 86 }
@@ -74,17 +99,22 @@ public class PredicatesBuilder { @@ -74,17 +99,22 @@ public class PredicatesBuilder {
74 Class<?> leftType = expression.getJavaType(); 99 Class<?> leftType = expression.getJavaType();
75 Class<?> rightType = object.getClass(); 100 Class<?> rightType = object.getClass();
76 101
77 - if (leftType.isAssignableFrom(Number.class) &&  
78 - rightType.isAssignableFrom(Number.class)) { // 判定是否是Number类型的子类 102 +
  103 + if (Number.class.isAssignableFrom(leftType) &&
  104 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number <= Number/String
79 return cb.le((Path<Number>) expression, (Number) object); 105 return cb.le((Path<Number>) expression, (Number) object);
80 - } else if (leftType.isAssignableFrom(String.class) &&  
81 - rightType.isAssignableFrom(String.class)) { // 判定是否是String类型的子类 106 + } else if (String.class.isAssignableFrom(leftType) &&
  107 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String <= String/Number
82 return cb.lessThanOrEqualTo((Path<String>) expression, (String) object); 108 return cb.lessThanOrEqualTo((Path<String>) expression, (String) object);
83 - } else if (leftType.isAssignableFrom(Date.class) &&  
84 - rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类 109 + } else if (Date.class.isAssignableFrom(leftType) &&
  110 + Date.class.isAssignableFrom(rightType)) { // Date <= Date
85 return cb.lessThanOrEqualTo((Path<Date>) expression, (Date) object); 111 return cb.lessThanOrEqualTo((Path<Date>) expression, (Date) object);
  112 + } else if (Date.class.isAssignableFrom(leftType) &&
  113 + String.class.isAssignableFrom(rightType)) { // Date <= String
  114 + DateTime dateTime = new DateTime(object);
  115 + return cb.lessThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
86 } else { 116 } else {
87 - throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass()); 117 + throw new RuntimeException("le 不支持类型组合:" + expression.getJavaType() + "<=" + object.getClass());
88 } 118 }
89 } 119 }
90 120
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
1 package com.bsth.service.directive; 1 package com.bsth.service.directive;
2 2
3 -import java.text.SimpleDateFormat;  
4 import java.util.ArrayList; 3 import java.util.ArrayList;
5 import java.util.Collection; 4 import java.util.Collection;
6 import java.util.Collections; 5 import java.util.Collections;
@@ -11,6 +10,8 @@ import java.util.List; @@ -11,6 +10,8 @@ import java.util.List;
11 import java.util.Map; 10 import java.util.Map;
12 11
13 import org.apache.commons.lang3.StringUtils; 12 import org.apache.commons.lang3.StringUtils;
  13 +import org.joda.time.format.DateTimeFormat;
  14 +import org.joda.time.format.DateTimeFormatter;
14 import org.slf4j.Logger; 15 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory; 16 import org.slf4j.LoggerFactory;
16 import org.springframework.beans.factory.annotation.Autowired; 17 import org.springframework.beans.factory.annotation.Autowired;
@@ -73,7 +74,10 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -73,7 +74,10 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
73 @Autowired 74 @Autowired
74 DayOfSchedule dayOfSchedule; 75 DayOfSchedule dayOfSchedule;
75 76
76 - static Long schDiff = 1000 * 60 * 60L; 77 + //static Long schDiff = 1000 * 60 * 60L;
  78 +
  79 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm")
  80 + ,fmtHHmm_CN = DateTimeFormat.forPattern("HH点mm分");
77 81
78 @Override 82 @Override
79 public int send60Phrase(String nbbm, String text, String sender) { 83 public int send60Phrase(String nbbm, String text, String sender) {
@@ -111,10 +115,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -111,10 +115,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
111 logger.warn("烂班不允许发送调度指令...."); 115 logger.warn("烂班不允许发送调度指令....");
112 return -1; 116 return -1;
113 } 117 }
114 - //多线程下发指令时,SimpleDateFormat必须方法内初始化  
115 - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH点mm分");  
116 -  
117 - String text = "已完成" + finish + "个班次,下一发车时间" + sdfHHmm.format(new Date(sch.getDfsjT())) + ",由" 118 + String text = "已完成" + finish + "个班次,下一发车时间" + fmtHHmm_CN.print(sch.getDfsjT()) + ",由"
118 + sch.getQdzName() + "发往" + sch.getZdzName(); 119 + sch.getQdzName() + "发往" + sch.getZdzName();
119 120
120 //下发0x02指令 调度指令(闹钟有效) 121 //下发0x02指令 调度指令(闹钟有效)
@@ -168,7 +169,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -168,7 +169,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
168 @Override 169 @Override
169 public void sendD60ToPage(ScheduleRealInfo sch) { 170 public void sendD60ToPage(ScheduleRealInfo sch) {
170 Map<String, Object> map = new HashMap<>(); 171 Map<String, Object> map = new HashMap<>();
171 - map.put("fn", sch); 172 + map.put("fn", "directive");
172 map.put("t", sch); 173 map.put("t", sch);
173 174
174 ObjectMapper mapper = new ObjectMapper(); 175 ObjectMapper mapper = new ObjectMapper();
@@ -402,11 +403,10 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -402,11 +403,10 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
402 403
403 List<Directive> rs = list.subList(s, e); 404 List<Directive> rs = list.subList(s, e);
404 405
405 - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");  
406 // 时间格式化,车辆自编号转换 406 // 时间格式化,车辆自编号转换
407 for (Directive d : rs) { 407 for (Directive d : rs) {
408 if (d.getTimeHHmm() == null) 408 if (d.getTimeHHmm() == null)
409 - d.setTimeHHmm(sdfHHmm.format(new Date(d.getTimestamp()))); 409 + d.setTimeHHmm(fmtHHmm.print(d.getTimestamp()));
410 if (d.getNbbm() == null) 410 if (d.getNbbm() == null)
411 d.setNbbm(BasicData.deviceId2NbbmMap.get(d.getDeviceId())); 411 d.setNbbm(BasicData.deviceId2NbbmMap.get(d.getDeviceId()));
412 } 412 }
@@ -455,10 +455,10 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -455,10 +455,10 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
455 if (e > count) 455 if (e > count)
456 e = count; 456 e = count;
457 457
458 - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm"); 458 + //SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");
459 List<D80> rs = d80s.subList(s, e); 459 List<D80> rs = d80s.subList(s, e);
460 for(D80 d80 : rs){ 460 for(D80 d80 : rs){
461 - d80.setTimeStr(sdfHHmm.format(new Date(d80.getTimestamp()))); 461 + d80.setTimeStr(fmtHHmm.print(d80.getTimestamp()));
462 } 462 }
463 463
464 Map<String, Object> rsMap = new HashMap<>(); 464 Map<String, Object> rsMap = new HashMap<>();
src/main/java/com/bsth/service/schedule/TTInfoDetailService.java
@@ -136,7 +136,7 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; { @@ -136,7 +136,7 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; {
136 String ttinfoname, 136 String ttinfoname,
137 String tccname) throws Exception; 137 String tccname) throws Exception;
138 138
139 - void fileDataImport(File file, String xlmc, String ttinfoname, String tccname) throws Exception; 139 + void fileDataImport(File file, String sheetname, String xlmc, String ttinfoname, String tccname) throws Exception;
140 140
141 141
142 } 142 }
src/main/java/com/bsth/service/schedule/TTInfoDetailServiceImpl.java
@@ -114,6 +114,7 @@ public class TTInfoDetailServiceImpl extends BaseServiceImpl&lt;TTInfoDetail, Long&gt; @@ -114,6 +114,7 @@ public class TTInfoDetailServiceImpl extends BaseServiceImpl&lt;TTInfoDetail, Long&gt;
114 return editInfo; 114 return editInfo;
115 } 115 }
116 116
  117 + @Override
117 /** 118 /**
118 * 上传并导入数据,和DataImportExportService的同名方法有差别。 119 * 上传并导入数据,和DataImportExportService的同名方法有差别。
119 * @param datafile form上传文件 120 * @param datafile form上传文件
@@ -128,12 +129,12 @@ public class TTInfoDetailServiceImpl extends BaseServiceImpl&lt;TTInfoDetail, Long&gt; @@ -128,12 +129,12 @@ public class TTInfoDetailServiceImpl extends BaseServiceImpl&lt;TTInfoDetail, Long&gt;
128 String tccname) throws Exception { 129 String tccname) throws Exception {
129 // 上传数据文件 130 // 上传数据文件
130 File uploadFile = dataImportExportService.uploadFile(datafile); 131 File uploadFile = dataImportExportService.uploadFile(datafile);
131 - fileDataImport(uploadFile, xlmc, ttinfoname, tccname); 132 + fileDataImport(uploadFile, "工作表1", xlmc, ttinfoname, tccname);
132 133
133 } 134 }
134 135
135 @Override 136 @Override
136 - public void fileDataImport(File uploadFile, String xlmc, String ttinfoname, String tccname) throws Exception { 137 + public void fileDataImport(File uploadFile, String sheetname, String xlmc, String ttinfoname, String tccname) throws Exception {
137 // 1、上传数据文件 138 // 1、上传数据文件
138 System.out.println("线路名称:" + xlmc); 139 System.out.println("线路名称:" + xlmc);
139 System.out.println("时刻表名称:" + ttinfoname); 140 System.out.println("时刻表名称:" + ttinfoname);
@@ -162,6 +163,7 @@ public class TTInfoDetailServiceImpl extends BaseServiceImpl&lt;TTInfoDetail, Long&gt; @@ -162,6 +163,7 @@ public class TTInfoDetailServiceImpl extends BaseServiceImpl&lt;TTInfoDetail, Long&gt;
162 // 2.3、设定命名参数,用于指定数据文件,注意每个ktr必须都有以下指定的命名参数 163 // 2.3、设定命名参数,用于指定数据文件,注意每个ktr必须都有以下指定的命名参数
163 trans.setParameterValue("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件 164 trans.setParameterValue("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件
164 trans.setParameterValue("filepath", uploadFile.getAbsolutePath()); // 指定导入数据文件的位置 165 trans.setParameterValue("filepath", uploadFile.getAbsolutePath()); // 指定导入数据文件的位置
  166 + trans.setParameterValue("sheetname", sheetname); // sheet工作区的名字
165 trans.setParameterValue("erroroutputdir", dataToolsProperties.getTransErrordir()); // ktr转换错误输出目录 167 trans.setParameterValue("erroroutputdir", dataToolsProperties.getTransErrordir()); // ktr转换错误输出目录
166 trans.setParameterValue("xlname", xlmc); // 线路名称 168 trans.setParameterValue("xlname", xlmc); // 线路名称
167 trans.setParameterValue("ttinfoname", ttinfoname); // 时刻表名称 169 trans.setParameterValue("ttinfoname", ttinfoname); // 时刻表名称
src/main/java/com/bsth/websocket/handler/RealControlSocketHandler.java
@@ -105,7 +105,7 @@ public class RealControlSocketHandler implements WebSocketHandler { @@ -105,7 +105,7 @@ public class RealControlSocketHandler implements WebSocketHandler {
105 * 给所有在线用户发送消息 105 * 给所有在线用户发送消息
106 * 106 *
107 * @param message 107 * @param message
108 - */ 108 +
109 public synchronized void sendMessageToUsers(TextMessage message) { 109 public synchronized void sendMessageToUsers(TextMessage message) {
110 for (WebSocketSession user : users) { 110 for (WebSocketSession user : users) {
111 try { 111 try {
@@ -116,14 +116,14 @@ public class RealControlSocketHandler implements WebSocketHandler { @@ -116,14 +116,14 @@ public class RealControlSocketHandler implements WebSocketHandler {
116 e.printStackTrace(); 116 e.printStackTrace();
117 } 117 }
118 } 118 }
119 - } 119 + }*/
120 120
121 /** 121 /**
122 * 给某些用户发送消息 122 * 给某些用户发送消息
123 * 123 *
124 * @param userId 124 * @param userId
125 * @param message 125 * @param message
126 - */ 126 +
127 public synchronized void sendMessageToUser(Set<String> uids, String msg) { 127 public synchronized void sendMessageToUser(Set<String> uids, String msg) {
128 TextMessage message = new TextMessage(msg.getBytes()); 128 TextMessage message = new TextMessage(msg.getBytes());
129 for (WebSocketSession user : users) { 129 for (WebSocketSession user : users) {
@@ -137,13 +137,10 @@ public class RealControlSocketHandler implements WebSocketHandler { @@ -137,13 +137,10 @@ public class RealControlSocketHandler implements WebSocketHandler {
137 } 137 }
138 } 138 }
139 } 139 }
140 - } 140 + }*/
141 141
142 /** 142 /**
143 * 根据线路推送消息 143 * 根据线路推送消息
144 - *  
145 - * @param userId  
146 - * @param message  
147 */ 144 */
148 public synchronized void sendMessageToLine(String lineCode, String msg) { 145 public synchronized void sendMessageToLine(String lineCode, String msg) {
149 146
src/main/resources/application-dev.properties
@@ -6,9 +6,9 @@ spring.jpa.hibernate.ddl-auto= update @@ -6,9 +6,9 @@ spring.jpa.hibernate.ddl-auto= update
6 spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy 6 spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy
7 #DATABASE 7 #DATABASE
8 spring.jpa.database= MYSQL 8 spring.jpa.database= MYSQL
9 -spring.jpa.show-sql= true 9 +spring.jpa.show-sql= false
10 spring.datasource.driver-class-name= com.mysql.jdbc.Driver 10 spring.datasource.driver-class-name= com.mysql.jdbc.Driver
11 -spring.datasource.url= jdbc:mysql://192.168.168.201:3306/mh_control 11 +spring.datasource.url= jdbc:mysql://192.168.168.201:3306/qp_control?useUnicode=true&characterEncoding=utf-8&useSSL=false
12 spring.datasource.username= root 12 spring.datasource.username= root
13 spring.datasource.password= 123456 13 spring.datasource.password= 123456
14 #DATASOURCE 14 #DATASOURCE
src/main/resources/application-prod.properties
@@ -8,7 +8,7 @@ spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy @@ -8,7 +8,7 @@ spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy
8 spring.jpa.database= MYSQL 8 spring.jpa.database= MYSQL
9 spring.jpa.show-sql= true 9 spring.jpa.show-sql= true
10 spring.datasource.driver-class-name= com.mysql.jdbc.Driver 10 spring.datasource.driver-class-name= com.mysql.jdbc.Driver
11 -spring.datasource.url= jdbc:mysql://192.168.40.100:3306/qp_control 11 +spring.datasource.url= jdbc:mysql://192.168.40.100:3306/qp_control?useUnicode=true&characterEncoding=utf-8&useSSL=false
12 spring.datasource.username= root 12 spring.datasource.username= root
13 spring.datasource.password= root@JSP2jsp 13 spring.datasource.password= root@JSP2jsp
14 #DATASOURCE 14 #DATASOURCE
src/main/resources/datatools/ktrs/ttinfodetailDataInput.ktr
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<transformation>  
3 - <info>  
4 - <name>ttinfodetailDataInput</name>  
5 - <description>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</description>  
6 - <extended_description>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;</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>79</xloc>  
101 - <yloc>206</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 - </notepads>  
120 - <connection>  
121 - <name>bus_control_variable</name>  
122 - <server>&#x24;&#x7b;v_db_ip&#x7d;</server>  
123 - <type>MYSQL</type>  
124 - <access>Native</access>  
125 - <database>&#x24;&#x7b;v_db_dname&#x7d;</database>  
126 - <port>3306</port>  
127 - <username>&#x24;&#x7b;v_db_uname&#x7d;</username>  
128 - <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>  
129 - <servername/>  
130 - <data_tablespace/>  
131 - <index_tablespace/>  
132 - <attributes>  
133 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
134 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
135 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
136 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
137 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
138 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
139 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
140 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
141 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
142 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
143 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
144 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
145 - </attributes>  
146 - </connection>  
147 - <connection>  
148 - <name>bus_control_&#x516c;&#x53f8;_201</name>  
149 - <server>localhost</server>  
150 - <type>MYSQL</type>  
151 - <access>Native</access>  
152 - <database>control</database>  
153 - <port>3306</port>  
154 - <username>root</username>  
155 - <password>Encrypted </password>  
156 - <servername/>  
157 - <data_tablespace/>  
158 - <index_tablespace/>  
159 - <attributes>  
160 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
161 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
162 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
163 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
164 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
165 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
166 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
167 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
168 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
169 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
170 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
171 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
172 - </attributes>  
173 - </connection>  
174 - <connection>  
175 - <name>bus_control_&#x672c;&#x673a;</name>  
176 - <server>localhost</server>  
177 - <type>MYSQL</type>  
178 - <access>Native</access>  
179 - <database>control</database>  
180 - <port>3306</port>  
181 - <username>root</username>  
182 - <password>Encrypted </password>  
183 - <servername/>  
184 - <data_tablespace/>  
185 - <index_tablespace/>  
186 - <attributes>  
187 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
188 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
189 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
190 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
191 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
192 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
193 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
194 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
195 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
196 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
197 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
198 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
199 - </attributes>  
200 - </connection>  
201 - <connection>  
202 - <name>xlab_mysql_youle</name>  
203 - <server>101.231.124.8</server>  
204 - <type>MYSQL</type>  
205 - <access>Native</access>  
206 - <database>xlab_youle</database>  
207 - <port>45687</port>  
208 - <username>xlab-youle</username>  
209 - <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>  
210 - <servername/>  
211 - <data_tablespace/>  
212 - <index_tablespace/>  
213 - <attributes>  
214 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
215 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
216 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
217 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
218 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
219 - <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>  
220 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
221 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
222 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
223 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
224 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
225 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
226 - </attributes>  
227 - </connection>  
228 - <connection>  
229 - <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>  
230 - <server>localhost</server>  
231 - <type>MYSQL</type>  
232 - <access>Native</access>  
233 - <database>xlab_youle</database>  
234 - <port>3306</port>  
235 - <username>root</username>  
236 - <password>Encrypted </password>  
237 - <servername/>  
238 - <data_tablespace/>  
239 - <index_tablespace/>  
240 - <attributes>  
241 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
242 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
243 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
244 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
245 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
246 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
247 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
248 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
249 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
250 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
251 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
252 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
253 - </attributes>  
254 - </connection>  
255 - <connection>  
256 - <name>xlab_youle</name>  
257 - <server/>  
258 - <type>MYSQL</type>  
259 - <access>JNDI</access>  
260 - <database>xlab_youle</database>  
261 - <port>1521</port>  
262 - <username/>  
263 - <password>Encrypted </password>  
264 - <servername/>  
265 - <data_tablespace/>  
266 - <index_tablespace/>  
267 - <attributes>  
268 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
269 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
270 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
271 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
272 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
273 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
274 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
275 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
276 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
277 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
278 - </attributes>  
279 - </connection>  
280 - <order>  
281 - <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>  
282 - <hop> <from>&#x6dfb;&#x52a0;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;&#xff08;&#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x4e3a;&#x7a7a;&#xff09;</to><enabled>Y</enabled> </hop>  
283 - <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;&#xff08;&#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x4e3a;&#x7a7a;&#xff09;</from><to>&#x6dfb;&#x52a0;&#x5bf9;&#x5e94;&#x73ed;&#x6b21;&#x6570;</to><enabled>Y</enabled> </hop>  
284 - <hop> <from>&#x6dfb;&#x52a0;&#x5bf9;&#x5e94;&#x73ed;&#x6b21;&#x6570;</from><to>&#x5904;&#x7406;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>  
285 - <hop> <from>&#x5904;&#x7406;&#x6570;&#x636e;</from><to>&#x5206;&#x7ec4;&#x5404;&#x4e2a;&#x8def;&#x724c;&#x7684;&#x7ad9;</to><enabled>Y</enabled> </hop>  
286 - <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>  
287 - <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>  
288 - <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178;</from><to>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178;</to><enabled>Y</enabled> </hop>  
289 - <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 2</from><to>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 2</to><enabled>Y</enabled> </hop>  
290 - <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 3</from><to>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 3</to><enabled>Y</enabled> </hop>  
291 - <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>  
292 - <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>  
293 - <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>  
294 - <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>  
295 - <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>  
296 - <hop> <from>&#x67e5;&#x627e;&#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>  
297 - <hop> <from>&#x67e5;&#x627e;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;</from><to>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178;</to><enabled>Y</enabled> </hop>  
298 - <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>  
299 - <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>  
300 - <hop> <from>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</from><to>&#x6b63;&#x5e38;&#x73ed;&#x6b21;_&#x5904;&#x7406;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>  
301 - <hop> <from>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178;</from><to>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x4e0a;&#x4e0b;&#x884c;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</to><enabled>Y</enabled> </hop>  
302 - <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>  
303 - <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>  
304 - <hop> <from>&#x67e5;&#x627e;&#x8def;&#x724c;&#x5173;&#x8054;</from><to>&#x8ba1;&#x7b97;&#x73ed;&#x6b21;&#x7c7b;&#x578b;</to><enabled>Y</enabled> </hop>  
305 - <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>  
306 - <hop> <from>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</from><to>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;1</to><enabled>Y</enabled> </hop>  
307 - <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>  
308 - <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>  
309 - <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>  
310 - <hop> <from>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</from><to>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;2</to><enabled>Y</enabled> </hop>  
311 - <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>  
312 - <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>  
313 - <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>  
314 - <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6dfb;&#x52a0;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;</to><enabled>Y</enabled> </hop>  
315 - <hop> <from>&#x5206;&#x7ec4;&#x5404;&#x4e2a;&#x8def;&#x724c;&#x7684;&#x7ad9;</from><to>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x5173;&#x8054;</to><enabled>Y</enabled> </hop>  
316 - <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>  
317 - <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>  
318 - <hop> <from>&#x8bb0;&#x5f55;&#x5173;&#x8054; &#x28;&#x7b1b;&#x5361;&#x5c14;&#x8f93;&#x51fa;&#x29;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>  
319 - <hop> <from>&#x7c7b;&#x578b;&#x4fee;&#x6b63;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail</to><enabled>Y</enabled> </hop>  
320 - <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>  
321 - <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>  
322 - <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>  
323 - <hop> <from>&#x5339;&#x914d;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 2</to><enabled>Y</enabled> </hop>  
324 - <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>  
325 - <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>  
326 - <hop> <from>&#x5339;&#x914d;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 3</to><enabled>Y</enabled> </hop>  
327 - <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>  
328 - </order>  
329 - <step>  
330 - <name>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178;</name>  
331 - <type>ValueMapper</type>  
332 - <description/>  
333 - <distribute>Y</distribute>  
334 - <custom_distribution/>  
335 - <copies>1</copies>  
336 - <partitioning>  
337 - <method>none</method>  
338 - <schema_name/>  
339 - </partitioning>  
340 - <field_to_use>sxx</field_to_use>  
341 - <target_field>sxx_desc</target_field>  
342 - <non_match_default/>  
343 - <fields>  
344 - <field>  
345 - <source_value>0</source_value>  
346 - <target_value>&#x4e0a;&#x884c;</target_value>  
347 - </field>  
348 - <field>  
349 - <source_value>1</source_value>  
350 - <target_value>&#x4e0b;&#x884c;</target_value>  
351 - </field>  
352 - </fields>  
353 - <cluster_schema/>  
354 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
355 - <xloc>147</xloc>  
356 - <yloc>403</yloc>  
357 - <draw>Y</draw>  
358 - </GUI>  
359 - </step>  
360 -  
361 - <step>  
362 - <name>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 2</name>  
363 - <type>ValueMapper</type>  
364 - <description/>  
365 - <distribute>Y</distribute>  
366 - <custom_distribution/>  
367 - <copies>1</copies>  
368 - <partitioning>  
369 - <method>none</method>  
370 - <schema_name/>  
371 - </partitioning>  
372 - <field_to_use>sxx</field_to_use>  
373 - <target_field>sxx_desc</target_field>  
374 - <non_match_default/>  
375 - <fields>  
376 - <field>  
377 - <source_value>0</source_value>  
378 - <target_value>&#x4e0a;&#x884c;</target_value>  
379 - </field>  
380 - <field>  
381 - <source_value>1</source_value>  
382 - <target_value>&#x4e0b;&#x884c;</target_value>  
383 - </field>  
384 - </fields>  
385 - <cluster_schema/>  
386 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
387 - <xloc>331</xloc>  
388 - <yloc>598</yloc>  
389 - <draw>Y</draw>  
390 - </GUI>  
391 - </step>  
392 -  
393 - <step>  
394 - <name>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 3</name>  
395 - <type>ValueMapper</type>  
396 - <description/>  
397 - <distribute>Y</distribute>  
398 - <custom_distribution/>  
399 - <copies>1</copies>  
400 - <partitioning>  
401 - <method>none</method>  
402 - <schema_name/>  
403 - </partitioning>  
404 - <field_to_use>sxx</field_to_use>  
405 - <target_field>sxx_desc</target_field>  
406 - <non_match_default/>  
407 - <fields>  
408 - <field>  
409 - <source_value>0</source_value>  
410 - <target_value>&#x4e0a;&#x884c;</target_value>  
411 - </field>  
412 - <field>  
413 - <source_value>1</source_value>  
414 - <target_value>&#x4e0b;&#x884c;</target_value>  
415 - </field>  
416 - </fields>  
417 - <cluster_schema/>  
418 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
419 - <xloc>553</xloc>  
420 - <yloc>859</yloc>  
421 - <draw>Y</draw>  
422 - </GUI>  
423 - </step>  
424 -  
425 - <step>  
426 - <name>&#x51fa;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x7ec8;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</name>  
427 - <type>ScriptValueMod</type>  
428 - <description/>  
429 - <distribute>Y</distribute>  
430 - <custom_distribution/>  
431 - <copies>1</copies>  
432 - <partitioning>  
433 - <method>none</method>  
434 - <schema_name/>  
435 - </partitioning>  
436 - <compatible>N</compatible>  
437 - <optimizationLevel>9</optimizationLevel>  
438 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
439 - <jsScript_name>Script 1</jsScript_name>  
440 - <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;E&#x27;&#x3b;</jsScript_script>  
441 - </jsScript> </jsScripts> <fields> <field> <name>zdzname</name>  
442 - <rename>zdzname</rename>  
443 - <type>String</type>  
444 - <length>-1</length>  
445 - <precision>-1</precision>  
446 - <replace>N</replace>  
447 - </field> <field> <name>endZdtype</name>  
448 - <rename>endZdtype</rename>  
449 - <type>String</type>  
450 - <length>-1</length>  
451 - <precision>-1</precision>  
452 - <replace>N</replace>  
453 - </field> </fields> <cluster_schema/>  
454 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
455 - <xloc>575</xloc>  
456 - <yloc>502</yloc>  
457 - <draw>Y</draw>  
458 - </GUI>  
459 - </step>  
460 -  
461 - <step>  
462 - <name>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</name>  
463 - <type>Dummy</type>  
464 - <description/>  
465 - <distribute>Y</distribute>  
466 - <custom_distribution/>  
467 - <copies>1</copies>  
468 - <partitioning>  
469 - <method>none</method>  
470 - <schema_name/>  
471 - </partitioning>  
472 - <cluster_schema/>  
473 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
474 - <xloc>869</xloc>  
475 - <yloc>504</yloc>  
476 - <draw>Y</draw>  
477 - </GUI>  
478 - </step>  
479 -  
480 - <step>  
481 - <name>&#x5206;&#x7ec4;&#x5404;&#x4e2a;&#x8def;&#x724c;&#x7684;&#x7ad9;</name>  
482 - <type>GroupBy</type>  
483 - <description/>  
484 - <distribute>Y</distribute>  
485 - <custom_distribution/>  
486 - <copies>1</copies>  
487 - <partitioning>  
488 - <method>none</method>  
489 - <schema_name/>  
490 - </partitioning>  
491 - <all_rows>Y</all_rows>  
492 - <ignore_aggregate>N</ignore_aggregate>  
493 - <field_ignore/>  
494 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
495 - <prefix>grp</prefix>  
496 - <add_linenr>Y</add_linenr>  
497 - <linenr_fieldname>gno</linenr_fieldname>  
498 - <give_back_row>N</give_back_row>  
499 - <group>  
500 - <field>  
501 - <name>lp</name>  
502 - </field>  
503 - </group>  
504 - <fields>  
505 - <field>  
506 - <aggregate>qdzgroups</aggregate>  
507 - <subject>qdzname</subject>  
508 - <type>CONCAT_STRING</type>  
509 - <valuefield>,</valuefield>  
510 - </field>  
511 - </fields>  
512 - <cluster_schema/>  
513 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
514 - <xloc>892</xloc>  
515 - <yloc>44</yloc>  
516 - <draw>Y</draw>  
517 - </GUI>  
518 - </step>  
519 -  
520 - <step>  
521 - <name>&#x5339;&#x914d;&#x4e0a;&#x4e0b;&#x884c;&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>  
522 - <type>ScriptValueMod</type>  
523 - <description/>  
524 - <distribute>Y</distribute>  
525 - <custom_distribution/>  
526 - <copies>1</copies>  
527 - <partitioning>  
528 - <method>none</method>  
529 - <schema_name/>  
530 - </partitioning>  
531 - <compatible>N</compatible>  
532 - <optimizationLevel>9</optimizationLevel>  
533 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
534 - <jsScript_name>Script 1</jsScript_name>  
535 - <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;if &#x28;sxx &#x3d;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x4e0a;&#x884c;&#xa; jhlc &#x3d; up_mileage&#x3b;&#xa; bcsj &#x3d; up_travel_time&#x3b;&#xa;&#x7d; else &#x7b; &#x2f;&#x2f; sxx &#x3d;&#x3d; 1 &#x4e0b;&#x884c;&#xa; jhlc &#x3d; down_mileage&#x3b;&#xa; bcsj &#x3d; down_travel_time&#x3b;&#xa;&#x7d;</jsScript_script>  
536 - </jsScript> </jsScripts> <fields> <field> <name>jhlc</name>  
537 - <rename>jhlc</rename>  
538 - <type>String</type>  
539 - <length>-1</length>  
540 - <precision>-1</precision>  
541 - <replace>N</replace>  
542 - </field> <field> <name>bcsj</name>  
543 - <rename>bcsj</rename>  
544 - <type>String</type>  
545 - <length>-1</length>  
546 - <precision>-1</precision>  
547 - <replace>N</replace>  
548 - </field> </fields> <cluster_schema/>  
549 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
550 - <xloc>148</xloc>  
551 - <yloc>674</yloc>  
552 - <draw>Y</draw>  
553 - </GUI>  
554 - </step>  
555 -  
556 - <step>  
557 - <name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</name>  
558 - <type>DataGrid</type>  
559 - <description/>  
560 - <distribute>Y</distribute>  
561 - <custom_distribution/>  
562 - <copies>1</copies>  
563 - <partitioning>  
564 - <method>none</method>  
565 - <schema_name/>  
566 - </partitioning>  
567 - <fields>  
568 - </fields>  
569 - <data>  
570 - <line> </line>  
571 - </data>  
572 - <cluster_schema/>  
573 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
574 - <xloc>110</xloc>  
575 - <yloc>133</yloc>  
576 - <draw>Y</draw>  
577 - </GUI>  
578 - </step>  
579 -  
580 - <step>  
581 - <name>&#x5904;&#x7406;&#x6570;&#x636e;</name>  
582 - <type>ScriptValueMod</type>  
583 - <description/>  
584 - <distribute>Y</distribute>  
585 - <custom_distribution/>  
586 - <copies>1</copies>  
587 - <partitioning>  
588 - <method>none</method>  
589 - <schema_name/>  
590 - </partitioning>  
591 - <compatible>N</compatible>  
592 - <optimizationLevel>9</optimizationLevel>  
593 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
594 - <jsScript_name>Script 1</jsScript_name>  
595 - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;&#x2f;&#x2f; &#x4f7f;&#x7528;&#x6b63;&#x5219;&#x8868;&#x8fbe;&#x5f0f;&#x53bb;&#x9664;&#x7ad9;&#x70b9;&#x540d;&#x79f0;&#x4e2d;&#x7684;&#x6570;&#x5b57;&#xa;qdzname &#x3d; qdzname.replace&#x28;&#x2f;&#x5c;d&#x2b;&#x2f;g,&#x27;&#x27;&#x29;&#x3b;&#xa;&#xa;&#x2f;&#x2f; sendtime&#x5904;&#x7406;&#xa;var sendtime_calcu&#x3b;&#xa;if &#x28;sendtime.length &#x21;&#x3d; 5&#x29; &#xa; sendtime_calcu &#x3d; sendtime.substr&#x28;0, 2&#x29; &#x2b; &#x22;&#x3a;&#x22; &#x2b; sendtime.substr&#x28;2, 2&#x29;&#x3b;&#xa;else &#xa; sendtime_calcu &#x3d; sendtime&#x3b;&#xa;&#xa;&#x2f;&#x2f; &#x8bbe;&#x7f6e;&#x5206;&#x73ed;&#xa;var isfb &#x3d; 0&#x3b;&#xa;&#xa;&#x2f;&#x2f; &#x8bbe;&#x7f6e;isCanceled&#xa;var iscanceled &#x3d; 0&#x3b;</jsScript_script>  
596 - </jsScript> </jsScripts> <fields> <field> <name>qdzname</name>  
597 - <rename>qdzname</rename>  
598 - <type>String</type>  
599 - <length>-1</length>  
600 - <precision>-1</precision>  
601 - <replace>Y</replace>  
602 - </field> <field> <name>isfb</name>  
603 - <rename>isfb</rename>  
604 - <type>Integer</type>  
605 - <length>-1</length>  
606 - <precision>-1</precision>  
607 - <replace>N</replace>  
608 - </field> <field> <name>iscanceled</name>  
609 - <rename>iscanceled</rename>  
610 - <type>Integer</type>  
611 - <length>-1</length>  
612 - <precision>-1</precision>  
613 - <replace>N</replace>  
614 - </field> <field> <name>sendtime_calcu</name>  
615 - <rename>sendtime_calcu</rename>  
616 - <type>String</type>  
617 - <length>-1</length>  
618 - <precision>-1</precision>  
619 - <replace>N</replace>  
620 - </field> </fields> <cluster_schema/>  
621 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
622 - <xloc>788</xloc>  
623 - <yloc>44</yloc>  
624 - <draw>Y</draw>  
625 - </GUI>  
626 - </step>  
627 -  
628 - <step>  
629 - <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>  
630 - <type>SelectValues</type>  
631 - <description/>  
632 - <distribute>Y</distribute>  
633 - <custom_distribution/>  
634 - <copies>1</copies>  
635 - <partitioning>  
636 - <method>none</method>  
637 - <schema_name/>  
638 - </partitioning>  
639 - <fields> <field> <name>&#x8def;&#x724c;</name>  
640 - <rename>lp</rename>  
641 - <length>-2</length>  
642 - <precision>-2</precision>  
643 - </field> <field> <name>&#x7ad9;&#x70b9;&#x540d;&#x79f0;</name>  
644 - <rename>qdzname</rename>  
645 - <length>-2</length>  
646 - <precision>-2</precision>  
647 - </field> <field> <name>&#x53d1;&#x8f66;&#x65f6;&#x95f4;</name>  
648 - <rename>sendtime</rename>  
649 - <length>-2</length>  
650 - <precision>-2</precision>  
651 - </field> <select_unspecified>Y</select_unspecified>  
652 - </fields> <cluster_schema/>  
653 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
654 - <xloc>444</xloc>  
655 - <yloc>131</yloc>  
656 - <draw>Y</draw>  
657 - </GUI>  
658 - </step>  
659 -  
660 - <step>  
661 - <name>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;1</name>  
662 - <type>FilterRows</type>  
663 - <description/>  
664 - <distribute>Y</distribute>  
665 - <custom_distribution/>  
666 - <copies>1</copies>  
667 - <partitioning>  
668 - <method>none</method>  
669 - <schema_name/>  
670 - </partitioning>  
671 -<send_true_to>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</send_true_to>  
672 -<send_false_to>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;2</send_false_to>  
673 - <compare>  
674 -<condition>  
675 - <negated>N</negated>  
676 - <leftvalue>bctype</leftvalue>  
677 - <function>&#x3d;</function>  
678 - <rightvalue/>  
679 - <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>  
680 - </compare>  
681 - <cluster_schema/>  
682 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
683 - <xloc>860</xloc>  
684 - <yloc>401</yloc>  
685 - <draw>Y</draw>  
686 - </GUI>  
687 - </step>  
688 -  
689 - <step>  
690 - <name>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;2</name>  
691 - <type>FilterRows</type>  
692 - <description/>  
693 - <distribute>Y</distribute>  
694 - <custom_distribution/>  
695 - <copies>1</copies>  
696 - <partitioning>  
697 - <method>none</method>  
698 - <schema_name/>  
699 - </partitioning>  
700 -<send_true_to>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</send_true_to>  
701 -<send_false_to>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</send_false_to>  
702 - <compare>  
703 -<condition>  
704 - <negated>N</negated>  
705 - <leftvalue>bctype</leftvalue>  
706 - <function>&#x3d;</function>  
707 - <rightvalue/>  
708 - <value><name>constant</name><type>String</type><text>&#x51fa;&#x573a;</text><length>-1</length><precision>-1</precision><isnull>N</isnull><mask/></value> </condition>  
709 - </compare>  
710 - <cluster_schema/>  
711 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
712 - <xloc>995</xloc>  
713 - <yloc>503</yloc>  
714 - <draw>Y</draw>  
715 - </GUI>  
716 - </step>  
717 -  
718 - <step>  
719 - <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail</name>  
720 - <type>InsertUpdate</type>  
721 - <description/>  
722 - <distribute>Y</distribute>  
723 - <custom_distribution/>  
724 - <copies>1</copies>  
725 - <partitioning>  
726 - <method>none</method>  
727 - <schema_name/>  
728 - </partitioning>  
729 - <connection>bus_control_variable</connection>  
730 - <commit>100</commit>  
731 - <update_bypassed>N</update_bypassed>  
732 - <lookup>  
733 - <schema/>  
734 - <table>bsth_c_s_ttinfo_detail</table>  
735 - <key>  
736 - <name>xlid</name>  
737 - <field>xl</field>  
738 - <condition>&#x3d;</condition>  
739 - <name2/>  
740 - </key>  
741 - <key>  
742 - <name>ttid</name>  
743 - <field>ttinfo</field>  
744 - <condition>&#x3d;</condition>  
745 - <name2/>  
746 - </key>  
747 - <key>  
748 - <name>lpid</name>  
749 - <field>lp</field>  
750 - <condition>&#x3d;</condition>  
751 - <name2/>  
752 - </key>  
753 - <key>  
754 - <name>fcno</name>  
755 - <field>fcno</field>  
756 - <condition>&#x3d;</condition>  
757 - <name2/>  
758 - </key>  
759 - <key>  
760 - <name>bcs</name>  
761 - <field>bcs</field>  
762 - <condition>&#x3d;</condition>  
763 - <name2/>  
764 - </key>  
765 - <value>  
766 - <name>lp</name>  
767 - <rename>lpid</rename>  
768 - <update>Y</update>  
769 - </value>  
770 - <value>  
771 - <name>bc_type</name>  
772 - <rename>bctype_code</rename>  
773 - <update>Y</update>  
774 - </value>  
775 - <value>  
776 - <name>bcs</name>  
777 - <rename>bcs</rename>  
778 - <update>Y</update>  
779 - </value>  
780 - <value>  
781 - <name>bcsj</name>  
782 - <rename>bcsj</rename>  
783 - <update>Y</update>  
784 - </value>  
785 - <value>  
786 - <name>fcno</name>  
787 - <rename>fcno</rename>  
788 - <update>Y</update>  
789 - </value>  
790 - <value>  
791 - <name>jhlc</name>  
792 - <rename>jhlc</rename>  
793 - <update>Y</update>  
794 - </value>  
795 - <value>  
796 - <name>fcsj</name>  
797 - <rename>sendtime_calcu</rename>  
798 - <update>Y</update>  
799 - </value>  
800 - <value>  
801 - <name>ttinfo</name>  
802 - <rename>ttid</rename>  
803 - <update>Y</update>  
804 - </value>  
805 - <value>  
806 - <name>xl</name>  
807 - <rename>xlid</rename>  
808 - <update>Y</update>  
809 - </value>  
810 - <value>  
811 - <name>qdz</name>  
812 - <rename>qdzid</rename>  
813 - <update>Y</update>  
814 - </value>  
815 - <value>  
816 - <name>zdz</name>  
817 - <rename>zdzid</rename>  
818 - <update>Y</update>  
819 - </value>  
820 - <value>  
821 - <name>xl_dir</name>  
822 - <rename>sxx</rename>  
823 - <update>Y</update>  
824 - </value>  
825 - <value>  
826 - <name>isfb</name>  
827 - <rename>isfb</rename>  
828 - <update>Y</update>  
829 - </value>  
830 - </lookup>  
831 - <cluster_schema/>  
832 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
833 - <xloc>143</xloc>  
834 - <yloc>860</yloc>  
835 - <draw>Y</draw>  
836 - </GUI>  
837 - </step>  
838 -  
839 - <step>  
840 - <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 2</name>  
841 - <type>InsertUpdate</type>  
842 - <description/>  
843 - <distribute>Y</distribute>  
844 - <custom_distribution/>  
845 - <copies>1</copies>  
846 - <partitioning>  
847 - <method>none</method>  
848 - <schema_name/>  
849 - </partitioning>  
850 - <connection>bus_control_variable</connection>  
851 - <commit>100</commit>  
852 - <update_bypassed>N</update_bypassed>  
853 - <lookup>  
854 - <schema/>  
855 - <table>bsth_c_s_ttinfo_detail</table>  
856 - <key>  
857 - <name>xlid</name>  
858 - <field>xl</field>  
859 - <condition>&#x3d;</condition>  
860 - <name2/>  
861 - </key>  
862 - <key>  
863 - <name>ttid</name>  
864 - <field>ttinfo</field>  
865 - <condition>&#x3d;</condition>  
866 - <name2/>  
867 - </key>  
868 - <key>  
869 - <name>lpid</name>  
870 - <field>lp</field>  
871 - <condition>&#x3d;</condition>  
872 - <name2/>  
873 - </key>  
874 - <key>  
875 - <name>fcno</name>  
876 - <field>fcno</field>  
877 - <condition>&#x3d;</condition>  
878 - <name2/>  
879 - </key>  
880 - <key>  
881 - <name>bcs</name>  
882 - <field>bcs</field>  
883 - <condition>&#x3d;</condition>  
884 - <name2/>  
885 - </key>  
886 - <value>  
887 - <name>tcc</name>  
888 - <rename>qdzid</rename>  
889 - <update>Y</update>  
890 - </value>  
891 - <value>  
892 - <name>zdz</name>  
893 - <rename>zdzid</rename>  
894 - <update>Y</update>  
895 - </value>  
896 - <value>  
897 - <name>xl</name>  
898 - <rename>xlid</rename>  
899 - <update>Y</update>  
900 - </value>  
901 - <value>  
902 - <name>ttinfo</name>  
903 - <rename>ttid</rename>  
904 - <update>Y</update>  
905 - </value>  
906 - <value>  
907 - <name>xl_dir</name>  
908 - <rename>sxx</rename>  
909 - <update>Y</update>  
910 - </value>  
911 - <value>  
912 - <name>lp</name>  
913 - <rename>lpid</rename>  
914 - <update>Y</update>  
915 - </value>  
916 - <value>  
917 - <name>jhlc</name>  
918 - <rename>out_mileage</rename>  
919 - <update>Y</update>  
920 - </value>  
921 - <value>  
922 - <name>fcsj</name>  
923 - <rename>sendtime_calcu</rename>  
924 - <update>Y</update>  
925 - </value>  
926 - <value>  
927 - <name>bcsj</name>  
928 - <rename>out_time</rename>  
929 - <update>Y</update>  
930 - </value>  
931 - <value>  
932 - <name>bcs</name>  
933 - <rename>bcs</rename>  
934 - <update>Y</update>  
935 - </value>  
936 - <value>  
937 - <name>fcno</name>  
938 - <rename>fcno</rename>  
939 - <update>Y</update>  
940 - </value>  
941 - <value>  
942 - <name>bc_type</name>  
943 - <rename>bctype_code</rename>  
944 - <update>Y</update>  
945 - </value>  
946 - <value>  
947 - <name>isfb</name>  
948 - <rename>isfb</rename>  
949 - <update>Y</update>  
950 - </value>  
951 - </lookup>  
952 - <cluster_schema/>  
953 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
954 - <xloc>342</xloc>  
955 - <yloc>1031</yloc>  
956 - <draw>Y</draw>  
957 - </GUI>  
958 - </step>  
959 -  
960 - <step>  
961 - <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 3</name>  
962 - <type>InsertUpdate</type>  
963 - <description/>  
964 - <distribute>Y</distribute>  
965 - <custom_distribution/>  
966 - <copies>1</copies>  
967 - <partitioning>  
968 - <method>none</method>  
969 - <schema_name/>  
970 - </partitioning>  
971 - <connection>bus_control_variable</connection>  
972 - <commit>100</commit>  
973 - <update_bypassed>N</update_bypassed>  
974 - <lookup>  
975 - <schema/>  
976 - <table>bsth_c_s_ttinfo_detail</table>  
977 - <key>  
978 - <name>xlid</name>  
979 - <field>xl</field>  
980 - <condition>&#x3d;</condition>  
981 - <name2/>  
982 - </key>  
983 - <key>  
984 - <name>ttid</name>  
985 - <field>ttinfo</field>  
986 - <condition>&#x3d;</condition>  
987 - <name2/>  
988 - </key>  
989 - <key>  
990 - <name>lpid</name>  
991 - <field>lp</field>  
992 - <condition>&#x3d;</condition>  
993 - <name2/>  
994 - </key>  
995 - <key>  
996 - <name>fcno</name>  
997 - <field>fcno</field>  
998 - <condition>&#x3d;</condition>  
999 - <name2/>  
1000 - </key>  
1001 - <key>  
1002 - <name>bcs</name>  
1003 - <field>bcs</field>  
1004 - <condition>&#x3d;</condition>  
1005 - <name2/>  
1006 - </key>  
1007 - <value>  
1008 - <name>fcno</name>  
1009 - <rename>fcno</rename>  
1010 - <update>Y</update>  
1011 - </value>  
1012 - <value>  
1013 - <name>bcs</name>  
1014 - <rename>bcs</rename>  
1015 - <update>Y</update>  
1016 - </value>  
1017 - <value>  
1018 - <name>xl</name>  
1019 - <rename>xlid</rename>  
1020 - <update>Y</update>  
1021 - </value>  
1022 - <value>  
1023 - <name>ttinfo</name>  
1024 - <rename>ttid</rename>  
1025 - <update>Y</update>  
1026 - </value>  
1027 - <value>  
1028 - <name>lp</name>  
1029 - <rename>lpid</rename>  
1030 - <update>Y</update>  
1031 - </value>  
1032 - <value>  
1033 - <name>bc_type</name>  
1034 - <rename>bctype_code</rename>  
1035 - <update>Y</update>  
1036 - </value>  
1037 - <value>  
1038 - <name>bcsj</name>  
1039 - <rename>parade_time</rename>  
1040 - <update>Y</update>  
1041 - </value>  
1042 - <value>  
1043 - <name>jhlc</name>  
1044 - <rename>parade_mileage</rename>  
1045 - <update>Y</update>  
1046 - </value>  
1047 - <value>  
1048 - <name>fcsj</name>  
1049 - <rename>sendtime_calcu</rename>  
1050 - <update>Y</update>  
1051 - </value>  
1052 - <value>  
1053 - <name>xl_dir</name>  
1054 - <rename>sxx2</rename>  
1055 - <update>Y</update>  
1056 - </value>  
1057 - <value>  
1058 - <name>qdz</name>  
1059 - <rename>qdzid</rename>  
1060 - <update>Y</update>  
1061 - </value>  
1062 - <value>  
1063 - <name>tcc</name>  
1064 - <rename>zdzid</rename>  
1065 - <update>Y</update>  
1066 - </value>  
1067 - <value>  
1068 - <name>isfb</name>  
1069 - <rename>isfb</rename>  
1070 - <update>Y</update>  
1071 - </value>  
1072 - </lookup>  
1073 - <cluster_schema/>  
1074 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1075 - <xloc>875</xloc>  
1076 - <yloc>887</yloc>  
1077 - <draw>Y</draw>  
1078 - </GUI>  
1079 - </step>  
1080 -  
1081 - <step>  
1082 - <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</name>  
1083 - <type>ExcelInput</type>  
1084 - <description/>  
1085 - <distribute>Y</distribute>  
1086 - <custom_distribution/>  
1087 - <copies>1</copies>  
1088 - <partitioning>  
1089 - <method>none</method>  
1090 - <schema_name/>  
1091 - </partitioning>  
1092 - <header>Y</header>  
1093 - <noempty>Y</noempty>  
1094 - <stoponempty>N</stoponempty>  
1095 - <filefield/>  
1096 - <sheetfield/>  
1097 - <sheetrownumfield/>  
1098 - <rownumfield/>  
1099 - <sheetfield/>  
1100 - <filefield/>  
1101 - <limit>0</limit>  
1102 - <encoding/>  
1103 - <add_to_result_filenames>Y</add_to_result_filenames>  
1104 - <accept_filenames>N</accept_filenames>  
1105 - <accept_field/>  
1106 - <accept_stepname/>  
1107 - <file>  
1108 - <name/>  
1109 - <filemask/>  
1110 - <exclude_filemask/>  
1111 - <file_required>N</file_required>  
1112 - <include_subfolders>N</include_subfolders>  
1113 - </file>  
1114 - <fields>  
1115 - </fields>  
1116 - <sheets>  
1117 - <sheet>  
1118 - <name>&#x5de5;&#x4f5c;&#x8868;1</name>  
1119 - <startrow>0</startrow>  
1120 - <startcol>0</startcol>  
1121 - </sheet>  
1122 - </sheets>  
1123 - <strict_types>N</strict_types>  
1124 - <error_ignored>N</error_ignored>  
1125 - <error_line_skipped>N</error_line_skipped>  
1126 - <bad_line_files_destination_directory/>  
1127 - <bad_line_files_extension>warning</bad_line_files_extension>  
1128 - <error_line_files_destination_directory/>  
1129 - <error_line_files_extension>error</error_line_files_extension>  
1130 - <line_number_files_destination_directory/>  
1131 - <line_number_files_extension>line</line_number_files_extension>  
1132 - <shortFileFieldName/>  
1133 - <pathFieldName/>  
1134 - <hiddenFieldName/>  
1135 - <lastModificationTimeFieldName/>  
1136 - <uriNameFieldName/>  
1137 - <rootUriNameFieldName/>  
1138 - <extensionFieldName/>  
1139 - <sizeFieldName/>  
1140 - <spreadsheet_type>JXL</spreadsheet_type>  
1141 - <cluster_schema/>  
1142 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1143 - <xloc>112</xloc>  
1144 - <yloc>44</yloc>  
1145 - <draw>Y</draw>  
1146 - </GUI>  
1147 - </step>  
1148 -  
1149 - <step>  
1150 - <name>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;1</name>  
1151 - <type>DBLookup</type>  
1152 - <description/>  
1153 - <distribute>Y</distribute>  
1154 - <custom_distribution/>  
1155 - <copies>1</copies>  
1156 - <partitioning>  
1157 - <method>none</method>  
1158 - <schema_name/>  
1159 - </partitioning>  
1160 - <connection>bus_control_variable</connection>  
1161 - <cache>N</cache>  
1162 - <cache_load_all>N</cache_load_all>  
1163 - <cache_size>0</cache_size>  
1164 - <lookup>  
1165 - <schema/>  
1166 - <table>bsth_c_car_park</table>  
1167 - <orderby/>  
1168 - <fail_on_multiple>N</fail_on_multiple>  
1169 - <eat_row_on_failure>N</eat_row_on_failure>  
1170 - <key>  
1171 - <name>tccname_</name>  
1172 - <field>park_name</field>  
1173 - <condition>&#x3d;</condition>  
1174 - <name2/>  
1175 - </key>  
1176 - <value>  
1177 - <name>id</name>  
1178 - <rename>qdzid</rename>  
1179 - <default/>  
1180 - <type>Integer</type>  
1181 - </value>  
1182 - </lookup>  
1183 - <cluster_schema/>  
1184 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1185 - <xloc>755</xloc>  
1186 - <yloc>504</yloc>  
1187 - <draw>Y</draw>  
1188 - </GUI>  
1189 - </step>  
1190 -  
1191 - <step>  
1192 - <name>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;2</name>  
1193 - <type>DBLookup</type>  
1194 - <description/>  
1195 - <distribute>Y</distribute>  
1196 - <custom_distribution/>  
1197 - <copies>1</copies>  
1198 - <partitioning>  
1199 - <method>none</method>  
1200 - <schema_name/>  
1201 - </partitioning>  
1202 - <connection>bus_control_variable</connection>  
1203 - <cache>N</cache>  
1204 - <cache_load_all>N</cache_load_all>  
1205 - <cache_size>0</cache_size>  
1206 - <lookup>  
1207 - <schema/>  
1208 - <table>bsth_c_car_park</table>  
1209 - <orderby/>  
1210 - <fail_on_multiple>N</fail_on_multiple>  
1211 - <eat_row_on_failure>N</eat_row_on_failure>  
1212 - <key>  
1213 - <name>tccname_</name>  
1214 - <field>park_name</field>  
1215 - <condition>&#x3d;</condition>  
1216 - <name2/>  
1217 - </key>  
1218 - <value>  
1219 - <name>id</name>  
1220 - <rename>zdzid</rename>  
1221 - <default/>  
1222 - <type>Integer</type>  
1223 - </value>  
1224 - </lookup>  
1225 - <cluster_schema/>  
1226 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1227 - <xloc>887</xloc>  
1228 - <yloc>608</yloc>  
1229 - <draw>Y</draw>  
1230 - </GUI>  
1231 - </step>  
1232 -  
1233 - <step>  
1234 - <name>&#x67e5;&#x627e;&#x51fa;&#x573a;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>  
1235 - <type>DBLookup</type>  
1236 - <description/>  
1237 - <distribute>Y</distribute>  
1238 - <custom_distribution/>  
1239 - <copies>1</copies>  
1240 - <partitioning>  
1241 - <method>none</method>  
1242 - <schema_name/>  
1243 - </partitioning>  
1244 - <connection>bus_control_variable</connection>  
1245 - <cache>N</cache>  
1246 - <cache_load_all>N</cache_load_all>  
1247 - <cache_size>0</cache_size>  
1248 - <lookup>  
1249 - <schema/>  
1250 - <table>bsth_c_stationroute</table>  
1251 - <orderby/>  
1252 - <fail_on_multiple>N</fail_on_multiple>  
1253 - <eat_row_on_failure>N</eat_row_on_failure>  
1254 - <key>  
1255 - <name>xlid</name>  
1256 - <field>line</field>  
1257 - <condition>&#x3d;</condition>  
1258 - <name2/>  
1259 - </key>  
1260 - <key>  
1261 - <name>zdzname</name>  
1262 - <field>station_name</field>  
1263 - <condition>&#x3d;</condition>  
1264 - <name2/>  
1265 - </key>  
1266 - <key>  
1267 - <name>endZdtype</name>  
1268 - <field>station_mark</field>  
1269 - <condition>&#x3d;</condition>  
1270 - <name2/>  
1271 - </key>  
1272 - <value>  
1273 - <name>station</name>  
1274 - <rename>zdzid</rename>  
1275 - <default/>  
1276 - <type>Integer</type>  
1277 - </value>  
1278 - <value>  
1279 - <name>directions</name>  
1280 - <rename>sxx</rename>  
1281 - <default/>  
1282 - <type>Integer</type>  
1283 - </value>  
1284 - </lookup>  
1285 - <cluster_schema/>  
1286 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1287 - <xloc>329</xloc>  
1288 - <yloc>505</yloc>  
1289 - <draw>Y</draw>  
1290 - </GUI>  
1291 - </step>  
1292 -  
1293 - <step>  
1294 - <name>&#x67e5;&#x627e;&#x65f6;&#x523b;&#x8868;&#x57fa;&#x7840;&#x4fe1;&#x606f;&#x5173;&#x8054;</name>  
1295 - <type>DBLookup</type>  
1296 - <description/>  
1297 - <distribute>Y</distribute>  
1298 - <custom_distribution/>  
1299 - <copies>1</copies>  
1300 - <partitioning>  
1301 - <method>none</method>  
1302 - <schema_name/>  
1303 - </partitioning>  
1304 - <connection>bus_control_variable</connection>  
1305 - <cache>N</cache>  
1306 - <cache_load_all>N</cache_load_all>  
1307 - <cache_size>0</cache_size>  
1308 - <lookup>  
1309 - <schema/>  
1310 - <table>bsth_c_s_ttinfo</table>  
1311 - <orderby/>  
1312 - <fail_on_multiple>N</fail_on_multiple>  
1313 - <eat_row_on_failure>N</eat_row_on_failure>  
1314 - <key>  
1315 - <name>xlid</name>  
1316 - <field>xl</field>  
1317 - <condition>&#x3d;</condition>  
1318 - <name2/>  
1319 - </key>  
1320 - <key>  
1321 - <name>ttinfoname_</name>  
1322 - <field>name</field>  
1323 - <condition>&#x3d;</condition>  
1324 - <name2/>  
1325 - </key>  
1326 - <key>  
1327 - <name>iscanceled</name>  
1328 - <field>is_cancel</field>  
1329 - <condition>&#x3d;</condition>  
1330 - <name2/>  
1331 - </key>  
1332 - <value>  
1333 - <name>id</name>  
1334 - <rename>ttid</rename>  
1335 - <default/>  
1336 - <type>Integer</type>  
1337 - </value>  
1338 - </lookup>  
1339 - <cluster_schema/>  
1340 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1341 - <xloc>1011</xloc>  
1342 - <yloc>134</yloc>  
1343 - <draw>Y</draw>  
1344 - </GUI>  
1345 - </step>  
1346 -  
1347 - <step>  
1348 - <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x4e0a;&#x4e0b;&#x884c;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>  
1349 - <type>DBLookup</type>  
1350 - <description/>  
1351 - <distribute>Y</distribute>  
1352 - <custom_distribution/>  
1353 - <copies>1</copies>  
1354 - <partitioning>  
1355 - <method>none</method>  
1356 - <schema_name/>  
1357 - </partitioning>  
1358 - <connection>bus_control_variable</connection>  
1359 - <cache>N</cache>  
1360 - <cache_load_all>N</cache_load_all>  
1361 - <cache_size>0</cache_size>  
1362 - <lookup>  
1363 - <schema/>  
1364 - <table>bsth_c_line_information</table>  
1365 - <orderby/>  
1366 - <fail_on_multiple>N</fail_on_multiple>  
1367 - <eat_row_on_failure>N</eat_row_on_failure>  
1368 - <key>  
1369 - <name>xlid</name>  
1370 - <field>line</field>  
1371 - <condition>&#x3d;</condition>  
1372 - <name2/>  
1373 - </key>  
1374 - <value>  
1375 - <name>up_mileage</name>  
1376 - <rename>up_mileage</rename>  
1377 - <default/>  
1378 - <type>Number</type>  
1379 - </value>  
1380 - <value>  
1381 - <name>down_mileage</name>  
1382 - <rename>down_mileage</rename>  
1383 - <default/>  
1384 - <type>Number</type>  
1385 - </value>  
1386 - <value>  
1387 - <name>up_travel_time</name>  
1388 - <rename>up_travel_time</rename>  
1389 - <default/>  
1390 - <type>Number</type>  
1391 - </value>  
1392 - <value>  
1393 - <name>down_travel_time</name>  
1394 - <rename>down_travel_time</rename>  
1395 - <default/>  
1396 - <type>Number</type>  
1397 - </value>  
1398 - </lookup>  
1399 - <cluster_schema/>  
1400 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1401 - <xloc>149</xloc>  
1402 - <yloc>581</yloc>  
1403 - <draw>Y</draw>  
1404 - </GUI>  
1405 - </step>  
1406 -  
1407 - <step>  
1408 - <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x5173;&#x8054;</name>  
1409 - <type>DBLookup</type>  
1410 - <description/>  
1411 - <distribute>Y</distribute>  
1412 - <custom_distribution/>  
1413 - <copies>1</copies>  
1414 - <partitioning>  
1415 - <method>none</method>  
1416 - <schema_name/>  
1417 - </partitioning>  
1418 - <connection>bus_control_variable</connection>  
1419 - <cache>N</cache>  
1420 - <cache_load_all>N</cache_load_all>  
1421 - <cache_size>0</cache_size>  
1422 - <lookup>  
1423 - <schema/>  
1424 - <table>bsth_c_line</table>  
1425 - <orderby/>  
1426 - <fail_on_multiple>N</fail_on_multiple>  
1427 - <eat_row_on_failure>N</eat_row_on_failure>  
1428 - <key>  
1429 - <name>xlname_</name>  
1430 - <field>name</field>  
1431 - <condition>&#x3d;</condition>  
1432 - <name2/>  
1433 - </key>  
1434 - <value>  
1435 - <name>id</name>  
1436 - <rename>xlid</rename>  
1437 - <default/>  
1438 - <type>Integer</type>  
1439 - </value>  
1440 - </lookup>  
1441 - <cluster_schema/>  
1442 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1443 - <xloc>1007</xloc>  
1444 - <yloc>43</yloc>  
1445 - <draw>Y</draw>  
1446 - </GUI>  
1447 - </step>  
1448 -  
1449 - <step>  
1450 - <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x51fa;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>  
1451 - <type>DBLookup</type>  
1452 - <description/>  
1453 - <distribute>Y</distribute>  
1454 - <custom_distribution/>  
1455 - <copies>1</copies>  
1456 - <partitioning>  
1457 - <method>none</method>  
1458 - <schema_name/>  
1459 - </partitioning>  
1460 - <connection>bus_control_variable</connection>  
1461 - <cache>N</cache>  
1462 - <cache_load_all>N</cache_load_all>  
1463 - <cache_size>0</cache_size>  
1464 - <lookup>  
1465 - <schema/>  
1466 - <table>bsth_c_line_information</table>  
1467 - <orderby/>  
1468 - <fail_on_multiple>N</fail_on_multiple>  
1469 - <eat_row_on_failure>N</eat_row_on_failure>  
1470 - <key>  
1471 - <name>xlid</name>  
1472 - <field>line</field>  
1473 - <condition>&#x3d;</condition>  
1474 - <name2/>  
1475 - </key>  
1476 - <value>  
1477 - <name>up_out_timer</name>  
1478 - <rename>up_out_timer</rename>  
1479 - <default/>  
1480 - <type>Number</type>  
1481 - </value>  
1482 - <value>  
1483 - <name>up_out_mileage</name>  
1484 - <rename>up_out_mileage</rename>  
1485 - <default/>  
1486 - <type>Number</type>  
1487 - </value>  
1488 - <value>  
1489 - <name>down_out_timer</name>  
1490 - <rename>down_out_timer</rename>  
1491 - <default/>  
1492 - <type>Number</type>  
1493 - </value>  
1494 - <value>  
1495 - <name>down_out_mileage</name>  
1496 - <rename>down_out_mileage</rename>  
1497 - <default/>  
1498 - <type>Number</type>  
1499 - </value>  
1500 - </lookup>  
1501 - <cluster_schema/>  
1502 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1503 - <xloc>335</xloc>  
1504 - <yloc>763</yloc>  
1505 - <draw>Y</draw>  
1506 - </GUI>  
1507 - </step>  
1508 -  
1509 - <step>  
1510 - <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x8fdb;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>  
1511 - <type>DBLookup</type>  
1512 - <description/>  
1513 - <distribute>Y</distribute>  
1514 - <custom_distribution/>  
1515 - <copies>1</copies>  
1516 - <partitioning>  
1517 - <method>none</method>  
1518 - <schema_name/>  
1519 - </partitioning>  
1520 - <connection>bus_control_variable</connection>  
1521 - <cache>N</cache>  
1522 - <cache_load_all>N</cache_load_all>  
1523 - <cache_size>0</cache_size>  
1524 - <lookup>  
1525 - <schema/>  
1526 - <table>bsth_c_line_information</table>  
1527 - <orderby/>  
1528 - <fail_on_multiple>N</fail_on_multiple>  
1529 - <eat_row_on_failure>N</eat_row_on_failure>  
1530 - <key>  
1531 - <name>xlid</name>  
1532 - <field>line</field>  
1533 - <condition>&#x3d;</condition>  
1534 - <name2/>  
1535 - </key>  
1536 - <value>  
1537 - <name>up_in_mileage</name>  
1538 - <rename>up_in_mileage</rename>  
1539 - <default/>  
1540 - <type>Number</type>  
1541 - </value>  
1542 - <value>  
1543 - <name>up_in_timer</name>  
1544 - <rename>up_in_timer</rename>  
1545 - <default/>  
1546 - <type>Number</type>  
1547 - </value>  
1548 - <value>  
1549 - <name>down_in_mileage</name>  
1550 - <rename>down_in_mileage</rename>  
1551 - <default/>  
1552 - <type>Number</type>  
1553 - </value>  
1554 - <value>  
1555 - <name>down_in_timer</name>  
1556 - <rename>down_in_timer</rename>  
1557 - <default/>  
1558 - <type>Number</type>  
1559 - </value>  
1560 - </lookup>  
1561 - <cluster_schema/>  
1562 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1563 - <xloc>553</xloc>  
1564 - <yloc>1004</yloc>  
1565 - <draw>Y</draw>  
1566 - </GUI>  
1567 - </step>  
1568 -  
1569 - <step>  
1570 - <name>&#x67e5;&#x627e;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;</name>  
1571 - <type>DBLookup</type>  
1572 - <description/>  
1573 - <distribute>Y</distribute>  
1574 - <custom_distribution/>  
1575 - <copies>1</copies>  
1576 - <partitioning>  
1577 - <method>none</method>  
1578 - <schema_name/>  
1579 - </partitioning>  
1580 - <connection>bus_control_variable</connection>  
1581 - <cache>N</cache>  
1582 - <cache_load_all>N</cache_load_all>  
1583 - <cache_size>0</cache_size>  
1584 - <lookup>  
1585 - <schema/>  
1586 - <table>bsth_c_stationroute</table>  
1587 - <orderby/>  
1588 - <fail_on_multiple>N</fail_on_multiple>  
1589 - <eat_row_on_failure>N</eat_row_on_failure>  
1590 - <key>  
1591 - <name>xlid</name>  
1592 - <field>line</field>  
1593 - <condition>&#x3d;</condition>  
1594 - <name2/>  
1595 - </key>  
1596 - <key>  
1597 - <name>sxx</name>  
1598 - <field>directions</field>  
1599 - <condition>&#x3d;</condition>  
1600 - <name2/>  
1601 - </key>  
1602 - <key>  
1603 - <name>endZdtype</name>  
1604 - <field>station_mark</field>  
1605 - <condition>&#x3d;</condition>  
1606 - <name2/>  
1607 - </key>  
1608 - <value>  
1609 - <name>station_name</name>  
1610 - <rename>zdzname</rename>  
1611 - <default/>  
1612 - <type>String</type>  
1613 - </value>  
1614 - <value>  
1615 - <name>station</name>  
1616 - <rename>zdzid</rename>  
1617 - <default/>  
1618 - <type>Integer</type>  
1619 - </value>  
1620 - </lookup>  
1621 - <cluster_schema/>  
1622 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1623 - <xloc>280</xloc>  
1624 - <yloc>404</yloc>  
1625 - <draw>Y</draw>  
1626 - </GUI>  
1627 - </step>  
1628 -  
1629 - <step>  
1630 - <name>&#x67e5;&#x627e;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>  
1631 - <type>DBLookup</type>  
1632 - <description/>  
1633 - <distribute>Y</distribute>  
1634 - <custom_distribution/>  
1635 - <copies>1</copies>  
1636 - <partitioning>  
1637 - <method>none</method>  
1638 - <schema_name/>  
1639 - </partitioning>  
1640 - <connection>bus_control_variable</connection>  
1641 - <cache>N</cache>  
1642 - <cache_load_all>N</cache_load_all>  
1643 - <cache_size>0</cache_size>  
1644 - <lookup>  
1645 - <schema/>  
1646 - <table>bsth_c_stationroute</table>  
1647 - <orderby/>  
1648 - <fail_on_multiple>N</fail_on_multiple>  
1649 - <eat_row_on_failure>N</eat_row_on_failure>  
1650 - <key>  
1651 - <name>xlid</name>  
1652 - <field>line</field>  
1653 - <condition>&#x3d;</condition>  
1654 - <name2/>  
1655 - </key>  
1656 - <key>  
1657 - <name>qdzname</name>  
1658 - <field>station_name</field>  
1659 - <condition>&#x3d;</condition>  
1660 - <name2/>  
1661 - </key>  
1662 - <key>  
1663 - <name>sendZdtype</name>  
1664 - <field>station_mark</field>  
1665 - <condition>&#x3d;</condition>  
1666 - <name2/>  
1667 - </key>  
1668 - <value>  
1669 - <name>station</name>  
1670 - <rename>qdzid</rename>  
1671 - <default/>  
1672 - <type>Integer</type>  
1673 - </value>  
1674 - <value>  
1675 - <name>directions</name>  
1676 - <rename>sxx</rename>  
1677 - <default/>  
1678 - <type>Integer</type>  
1679 - </value>  
1680 - </lookup>  
1681 - <cluster_schema/>  
1682 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1683 - <xloc>430</xloc>  
1684 - <yloc>403</yloc>  
1685 - <draw>Y</draw>  
1686 - </GUI>  
1687 - </step>  
1688 -  
1689 - <step>  
1690 - <name>&#x67e5;&#x627e;&#x8def;&#x724c;&#x5173;&#x8054;</name>  
1691 - <type>DBLookup</type>  
1692 - <description/>  
1693 - <distribute>Y</distribute>  
1694 - <custom_distribution/>  
1695 - <copies>1</copies>  
1696 - <partitioning>  
1697 - <method>none</method>  
1698 - <schema_name/>  
1699 - </partitioning>  
1700 - <connection>bus_control_variable</connection>  
1701 - <cache>N</cache>  
1702 - <cache_load_all>N</cache_load_all>  
1703 - <cache_size>0</cache_size>  
1704 - <lookup>  
1705 - <schema/>  
1706 - <table>bsth_c_s_gbi</table>  
1707 - <orderby/>  
1708 - <fail_on_multiple>N</fail_on_multiple>  
1709 - <eat_row_on_failure>N</eat_row_on_failure>  
1710 - <key>  
1711 - <name>xlid</name>  
1712 - <field>xl</field>  
1713 - <condition>&#x3d;</condition>  
1714 - <name2/>  
1715 - </key>  
1716 - <key>  
1717 - <name>lp</name>  
1718 - <field>lp_name</field>  
1719 - <condition>&#x3d;</condition>  
1720 - <name2/>  
1721 - </key>  
1722 - <value>  
1723 - <name>id</name>  
1724 - <rename>lpid</rename>  
1725 - <default/>  
1726 - <type>Integer</type>  
1727 - </value>  
1728 - </lookup>  
1729 - <cluster_schema/>  
1730 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1731 - <xloc>1013</xloc>  
1732 - <yloc>265</yloc>  
1733 - <draw>Y</draw>  
1734 - </GUI>  
1735 - </step>  
1736 -  
1737 - <step>  
1738 - <name>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x7ebf;&#x8def;&#x65b9;&#x5411;</name>  
1739 - <type>DBLookup</type>  
1740 - <description/>  
1741 - <distribute>Y</distribute>  
1742 - <custom_distribution/>  
1743 - <copies>1</copies>  
1744 - <partitioning>  
1745 - <method>none</method>  
1746 - <schema_name/>  
1747 - </partitioning>  
1748 - <connection>bus_control_variable</connection>  
1749 - <cache>N</cache>  
1750 - <cache_load_all>N</cache_load_all>  
1751 - <cache_size>0</cache_size>  
1752 - <lookup>  
1753 - <schema/>  
1754 - <table>bsth_c_stationroute</table>  
1755 - <orderby/>  
1756 - <fail_on_multiple>N</fail_on_multiple>  
1757 - <eat_row_on_failure>N</eat_row_on_failure>  
1758 - <key>  
1759 - <name>xlid</name>  
1760 - <field>line</field>  
1761 - <condition>&#x3d;</condition>  
1762 - <name2/>  
1763 - </key>  
1764 - <key>  
1765 - <name>startZdtype_calcu</name>  
1766 - <field>station_mark</field>  
1767 - <condition>&#x3d;</condition>  
1768 - <name2/>  
1769 - </key>  
1770 - <key>  
1771 - <name>qdzname_calcu</name>  
1772 - <field>station_name</field>  
1773 - <condition>&#x3d;</condition>  
1774 - <name2/>  
1775 - </key>  
1776 - <value>  
1777 - <name>directions</name>  
1778 - <rename>sxx</rename>  
1779 - <default/>  
1780 - <type>String</type>  
1781 - </value>  
1782 - </lookup>  
1783 - <cluster_schema/>  
1784 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1785 - <xloc>548</xloc>  
1786 - <yloc>610</yloc>  
1787 - <draw>Y</draw>  
1788 - </GUI>  
1789 - </step>  
1790 -  
1791 - <step>  
1792 - <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>  
1793 - <type>DBLookup</type>  
1794 - <description/>  
1795 - <distribute>Y</distribute>  
1796 - <custom_distribution/>  
1797 - <copies>1</copies>  
1798 - <partitioning>  
1799 - <method>none</method>  
1800 - <schema_name/>  
1801 - </partitioning>  
1802 - <connection>bus_control_variable</connection>  
1803 - <cache>N</cache>  
1804 - <cache_load_all>N</cache_load_all>  
1805 - <cache_size>0</cache_size>  
1806 - <lookup>  
1807 - <schema/>  
1808 - <table>bsth_c_stationroute</table>  
1809 - <orderby/>  
1810 - <fail_on_multiple>N</fail_on_multiple>  
1811 - <eat_row_on_failure>N</eat_row_on_failure>  
1812 - <key>  
1813 - <name>xlid</name>  
1814 - <field>line</field>  
1815 - <condition>&#x3d;</condition>  
1816 - <name2/>  
1817 - </key>  
1818 - <key>  
1819 - <name>endZdtype_calcu</name>  
1820 - <field>station_mark</field>  
1821 - <condition>&#x3d;</condition>  
1822 - <name2/>  
1823 - </key>  
1824 - <key>  
1825 - <name>sxx</name>  
1826 - <field>directions</field>  
1827 - <condition>&#x3d;</condition>  
1828 - <name2/>  
1829 - </key>  
1830 - <value>  
1831 - <name>station_name</name>  
1832 - <rename>zdzname_calcu</rename>  
1833 - <default/>  
1834 - <type>Integer</type>  
1835 - </value>  
1836 - </lookup>  
1837 - <cluster_schema/>  
1838 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1839 - <xloc>550</xloc>  
1840 - <yloc>701</yloc>  
1841 - <draw>Y</draw>  
1842 - </GUI>  
1843 - </step>  
1844 -  
1845 - <step>  
1846 - <name>&#x6b63;&#x5e38;&#x73ed;&#x6b21;_&#x5904;&#x7406;&#x6570;&#x636e;</name>  
1847 - <type>ScriptValueMod</type>  
1848 - <description/>  
1849 - <distribute>Y</distribute>  
1850 - <custom_distribution/>  
1851 - <copies>1</copies>  
1852 - <partitioning>  
1853 - <method>none</method>  
1854 - <schema_name/>  
1855 - </partitioning>  
1856 - <compatible>N</compatible>  
1857 - <optimizationLevel>9</optimizationLevel>  
1858 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
1859 - <jsScript_name>Script 1</jsScript_name>  
1860 - <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;</jsScript_script>  
1861 - </jsScript> </jsScripts> <fields> <field> <name>sendZdtype</name>  
1862 - <rename>sendZdtype</rename>  
1863 - <type>String</type>  
1864 - <length>-1</length>  
1865 - <precision>-1</precision>  
1866 - <replace>N</replace>  
1867 - </field> <field> <name>endZdtype</name>  
1868 - <rename>endZdtype</rename>  
1869 - <type>String</type>  
1870 - <length>-1</length>  
1871 - <precision>-1</precision>  
1872 - <replace>N</replace>  
1873 - </field> </fields> <cluster_schema/>  
1874 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1875 - <xloc>588</xloc>  
1876 - <yloc>403</yloc>  
1877 - <draw>Y</draw>  
1878 - </GUI>  
1879 - </step>  
1880 -  
1881 - <step>  
1882 - <name>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</name>  
1883 - <type>Dummy</type>  
1884 - <description/>  
1885 - <distribute>Y</distribute>  
1886 - <custom_distribution/>  
1887 - <copies>1</copies>  
1888 - <partitioning>  
1889 - <method>none</method>  
1890 - <schema_name/>  
1891 - </partitioning>  
1892 - <cluster_schema/>  
1893 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1894 - <xloc>725</xloc>  
1895 - <yloc>404</yloc>  
1896 - <draw>Y</draw>  
1897 - </GUI>  
1898 - </step>  
1899 -  
1900 - <step>  
1901 - <name>&#x6dfb;&#x52a0;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;</name>  
1902 - <type>GroupBy</type>  
1903 - <description/>  
1904 - <distribute>Y</distribute>  
1905 - <custom_distribution/>  
1906 - <copies>1</copies>  
1907 - <partitioning>  
1908 - <method>none</method>  
1909 - <schema_name/>  
1910 - </partitioning>  
1911 - <all_rows>Y</all_rows>  
1912 - <ignore_aggregate>N</ignore_aggregate>  
1913 - <field_ignore/>  
1914 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
1915 - <prefix>grp</prefix>  
1916 - <add_linenr>Y</add_linenr>  
1917 - <linenr_fieldname>fcno</linenr_fieldname>  
1918 - <give_back_row>N</give_back_row>  
1919 - <group>  
1920 - <field>  
1921 - <name>lp</name>  
1922 - </field>  
1923 - </group>  
1924 - <fields>  
1925 - </fields>  
1926 - <cluster_schema/>  
1927 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1928 - <xloc>442</xloc>  
1929 - <yloc>44</yloc>  
1930 - <draw>Y</draw>  
1931 - </GUI>  
1932 - </step>  
1933 -  
1934 - <step>  
1935 - <name>&#x6dfb;&#x52a0;&#x5bf9;&#x5e94;&#x73ed;&#x6b21;&#x6570;</name>  
1936 - <type>GroupBy</type>  
1937 - <description/>  
1938 - <distribute>Y</distribute>  
1939 - <custom_distribution/>  
1940 - <copies>1</copies>  
1941 - <partitioning>  
1942 - <method>none</method>  
1943 - <schema_name/>  
1944 - </partitioning>  
1945 - <all_rows>Y</all_rows>  
1946 - <ignore_aggregate>N</ignore_aggregate>  
1947 - <field_ignore/>  
1948 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
1949 - <prefix>grp</prefix>  
1950 - <add_linenr>Y</add_linenr>  
1951 - <linenr_fieldname>bcs</linenr_fieldname>  
1952 - <give_back_row>N</give_back_row>  
1953 - <group>  
1954 - </group>  
1955 - <fields>  
1956 - </fields>  
1957 - <cluster_schema/>  
1958 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1959 - <xloc>692</xloc>  
1960 - <yloc>44</yloc>  
1961 - <draw>Y</draw>  
1962 - </GUI>  
1963 - </step>  
1964 -  
1965 - <step>  
1966 - <name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</name>  
1967 - <type>Normaliser</type>  
1968 - <description/>  
1969 - <distribute>Y</distribute>  
1970 - <custom_distribution/>  
1971 - <copies>1</copies>  
1972 - <partitioning>  
1973 - <method>none</method>  
1974 - <schema_name/>  
1975 - </partitioning>  
1976 - <typefield>&#x7ad9;&#x70b9;&#x540d;&#x79f0;</typefield>  
1977 - <fields> </fields> <cluster_schema/>  
1978 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1979 - <xloc>248</xloc>  
1980 - <yloc>44</yloc>  
1981 - <draw>Y</draw>  
1982 - </GUI>  
1983 - </step>  
1984 -  
1985 - <step>  
1986 - <name>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178;</name>  
1987 - <type>ValueMapper</type>  
1988 - <description/>  
1989 - <distribute>Y</distribute>  
1990 - <custom_distribution/>  
1991 - <copies>1</copies>  
1992 - <partitioning>  
1993 - <method>none</method>  
1994 - <schema_name/>  
1995 - </partitioning>  
1996 - <field_to_use>bctype</field_to_use>  
1997 - <target_field>bctype_code</target_field>  
1998 - <non_match_default>&#x672a;&#x77e5;&#x7c7b;&#x578b;</non_match_default>  
1999 - <fields>  
2000 - <field>  
2001 - <source_value>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</source_value>  
2002 - <target_value>normal</target_value>  
2003 - </field>  
2004 - <field>  
2005 - <source_value>&#x51fa;&#x573a;</source_value>  
2006 - <target_value>out</target_value>  
2007 - </field>  
2008 - <field>  
2009 - <source_value>&#x8fdb;&#x573a;</source_value>  
2010 - <target_value>in</target_value>  
2011 - </field>  
2012 - <field>  
2013 - <source_value>&#x52a0;&#x6cb9;</source_value>  
2014 - <target_value>oil</target_value>  
2015 - </field>  
2016 - <field>  
2017 - <source_value>&#x4e34;&#x52a0;</source_value>  
2018 - <target_value>temp</target_value>  
2019 - </field>  
2020 - <field>  
2021 - <source_value>&#x533a;&#x95f4;</source_value>  
2022 - <target_value>region</target_value>  
2023 - </field>  
2024 - <field>  
2025 - <source_value>&#x653e;&#x7a7a;</source_value>  
2026 - <target_value>venting</target_value>  
2027 - </field>  
2028 - <field>  
2029 - <source_value>&#x653e;&#x5927;&#x7ad9;</source_value>  
2030 - <target_value>major</target_value>  
2031 - </field>  
2032 - </fields>  
2033 - <cluster_schema/>  
2034 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2035 - <xloc>149</xloc>  
2036 - <yloc>491</yloc>  
2037 - <draw>Y</draw>  
2038 - </GUI>  
2039 - </step>  
2040 -  
2041 - <step>  
2042 - <name>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 2</name>  
2043 - <type>ValueMapper</type>  
2044 - <description/>  
2045 - <distribute>Y</distribute>  
2046 - <custom_distribution/>  
2047 - <copies>1</copies>  
2048 - <partitioning>  
2049 - <method>none</method>  
2050 - <schema_name/>  
2051 - </partitioning>  
2052 - <field_to_use>bctype</field_to_use>  
2053 - <target_field>bctype_code</target_field>  
2054 - <non_match_default>&#x672a;&#x77e5;&#x7c7b;&#x578b;</non_match_default>  
2055 - <fields>  
2056 - <field>  
2057 - <source_value>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</source_value>  
2058 - <target_value>normal</target_value>  
2059 - </field>  
2060 - <field>  
2061 - <source_value>&#x51fa;&#x573a;</source_value>  
2062 - <target_value>out</target_value>  
2063 - </field>  
2064 - <field>  
2065 - <source_value>&#x8fdb;&#x573a;</source_value>  
2066 - <target_value>in</target_value>  
2067 - </field>  
2068 - <field>  
2069 - <source_value>&#x52a0;&#x6cb9;</source_value>  
2070 - <target_value>oil</target_value>  
2071 - </field>  
2072 - <field>  
2073 - <source_value>&#x4e34;&#x52a0;</source_value>  
2074 - <target_value>temp</target_value>  
2075 - </field>  
2076 - <field>  
2077 - <source_value>&#x533a;&#x95f4;</source_value>  
2078 - <target_value>region</target_value>  
2079 - </field>  
2080 - <field>  
2081 - <source_value>&#x653e;&#x7a7a;</source_value>  
2082 - <target_value>venting</target_value>  
2083 - </field>  
2084 - <field>  
2085 - <source_value>&#x653e;&#x5927;&#x7ad9;</source_value>  
2086 - <target_value>major</target_value>  
2087 - </field>  
2088 - </fields>  
2089 - <cluster_schema/>  
2090 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2091 - <xloc>333</xloc>  
2092 - <yloc>681</yloc>  
2093 - <draw>Y</draw>  
2094 - </GUI>  
2095 - </step>  
2096 -  
2097 - <step>  
2098 - <name>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 3</name>  
2099 - <type>ValueMapper</type>  
2100 - <description/>  
2101 - <distribute>Y</distribute>  
2102 - <custom_distribution/>  
2103 - <copies>1</copies>  
2104 - <partitioning>  
2105 - <method>none</method>  
2106 - <schema_name/>  
2107 - </partitioning>  
2108 - <field_to_use>bctype</field_to_use>  
2109 - <target_field>bctype_code</target_field>  
2110 - <non_match_default>&#x672a;&#x77e5;&#x7c7b;&#x578b;</non_match_default>  
2111 - <fields>  
2112 - <field>  
2113 - <source_value>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</source_value>  
2114 - <target_value>normal</target_value>  
2115 - </field>  
2116 - <field>  
2117 - <source_value>&#x51fa;&#x573a;</source_value>  
2118 - <target_value>out</target_value>  
2119 - </field>  
2120 - <field>  
2121 - <source_value>&#x8fdb;&#x573a;</source_value>  
2122 - <target_value>in</target_value>  
2123 - </field>  
2124 - <field>  
2125 - <source_value>&#x52a0;&#x6cb9;</source_value>  
2126 - <target_value>oil</target_value>  
2127 - </field>  
2128 - <field>  
2129 - <source_value>&#x4e34;&#x52a0;</source_value>  
2130 - <target_value>temp</target_value>  
2131 - </field>  
2132 - <field>  
2133 - <source_value>&#x533a;&#x95f4;</source_value>  
2134 - <target_value>region</target_value>  
2135 - </field>  
2136 - <field>  
2137 - <source_value>&#x653e;&#x7a7a;</source_value>  
2138 - <target_value>venting</target_value>  
2139 - </field>  
2140 - <field>  
2141 - <source_value>&#x653e;&#x5927;&#x7ad9;</source_value>  
2142 - <target_value>major</target_value>  
2143 - </field>  
2144 - </fields>  
2145 - <cluster_schema/>  
2146 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2147 - <xloc>551</xloc>  
2148 - <yloc>928</yloc>  
2149 - <draw>Y</draw>  
2150 - </GUI>  
2151 - </step>  
2152 -  
2153 - <step>  
2154 - <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63;</name>  
2155 - <type>SelectValues</type>  
2156 - <description/>  
2157 - <distribute>Y</distribute>  
2158 - <custom_distribution/>  
2159 - <copies>1</copies>  
2160 - <partitioning>  
2161 - <method>none</method>  
2162 - <schema_name/>  
2163 - </partitioning>  
2164 - <fields> <select_unspecified>N</select_unspecified>  
2165 - <meta> <name>jhlc</name>  
2166 - <rename>jhlc</rename>  
2167 - <type>Number</type>  
2168 - <length>-2</length>  
2169 - <precision>-2</precision>  
2170 - <conversion_mask/>  
2171 - <date_format_lenient>false</date_format_lenient>  
2172 - <date_format_locale/>  
2173 - <date_format_timezone/>  
2174 - <lenient_string_to_number>false</lenient_string_to_number>  
2175 - <encoding/>  
2176 - <decimal_symbol/>  
2177 - <grouping_symbol/>  
2178 - <currency_symbol/>  
2179 - <storage_type/>  
2180 - </meta> <meta> <name>bcsj</name>  
2181 - <rename>bcsj</rename>  
2182 - <type>Integer</type>  
2183 - <length>-2</length>  
2184 - <precision>-2</precision>  
2185 - <conversion_mask/>  
2186 - <date_format_lenient>false</date_format_lenient>  
2187 - <date_format_locale/>  
2188 - <date_format_timezone/>  
2189 - <lenient_string_to_number>false</lenient_string_to_number>  
2190 - <encoding/>  
2191 - <decimal_symbol/>  
2192 - <grouping_symbol/>  
2193 - <currency_symbol/>  
2194 - <storage_type/>  
2195 - </meta> </fields> <cluster_schema/>  
2196 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2197 - <xloc>146</xloc>  
2198 - <yloc>768</yloc>  
2199 - <draw>Y</draw>  
2200 - </GUI>  
2201 - </step>  
2202 -  
2203 - <step>  
2204 - <name>&#x8ba1;&#x7b97;&#x73ed;&#x6b21;&#x7c7b;&#x578b;</name>  
2205 - <type>ValueMapper</type>  
2206 - <description/>  
2207 - <distribute>Y</distribute>  
2208 - <custom_distribution/>  
2209 - <copies>1</copies>  
2210 - <partitioning>  
2211 - <method>none</method>  
2212 - <schema_name/>  
2213 - </partitioning>  
2214 - <field_to_use>qdzname</field_to_use>  
2215 - <target_field>bctype</target_field>  
2216 - <non_match_default>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</non_match_default>  
2217 - <fields>  
2218 - <field>  
2219 - <source_value>&#x51fa;&#x573a;</source_value>  
2220 - <target_value>&#x51fa;&#x573a;</target_value>  
2221 - </field>  
2222 - <field>  
2223 - <source_value>&#x8fdb;&#x573a;</source_value>  
2224 - <target_value>&#x8fdb;&#x573a;</target_value>  
2225 - </field>  
2226 - </fields>  
2227 - <cluster_schema/>  
2228 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2229 - <xloc>1014</xloc>  
2230 - <yloc>401</yloc>  
2231 - <draw>Y</draw>  
2232 - </GUI>  
2233 - </step>  
2234 -  
2235 - <step>  
2236 - <name>&#x8bb0;&#x5f55;&#x5173;&#x8054; &#x28;&#x7b1b;&#x5361;&#x5c14;&#x8f93;&#x51fa;&#x29;</name>  
2237 - <type>JoinRows</type>  
2238 - <description/>  
2239 - <distribute>Y</distribute>  
2240 - <custom_distribution/>  
2241 - <copies>1</copies>  
2242 - <partitioning>  
2243 - <method>none</method>  
2244 - <schema_name/>  
2245 - </partitioning>  
2246 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
2247 - <prefix>out</prefix>  
2248 - <cache_size>500</cache_size>  
2249 - <main/>  
2250 - <compare>  
2251 -<condition>  
2252 - <negated>N</negated>  
2253 - <leftvalue/>  
2254 - <function>&#x3d;</function>  
2255 - <rightvalue/>  
2256 - </condition>  
2257 - </compare>  
2258 - <cluster_schema/>  
2259 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2260 - <xloc>310</xloc>  
2261 - <yloc>133</yloc>  
2262 - <draw>Y</draw>  
2263 - </GUI>  
2264 - </step>  
2265 -  
2266 - <step>  
2267 - <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;&#xff08;&#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x4e3a;&#x7a7a;&#xff09;</name>  
2268 - <type>FilterRows</type>  
2269 - <description/>  
2270 - <distribute>Y</distribute>  
2271 - <custom_distribution/>  
2272 - <copies>1</copies>  
2273 - <partitioning>  
2274 - <method>none</method>  
2275 - <schema_name/>  
2276 - </partitioning>  
2277 -<send_true_to/>  
2278 -<send_false_to/>  
2279 - <compare>  
2280 -<condition>  
2281 - <negated>N</negated>  
2282 - <leftvalue>sendtime</leftvalue>  
2283 - <function>IS NOT NULL</function>  
2284 - <rightvalue/>  
2285 - </condition>  
2286 - </compare>  
2287 - <cluster_schema/>  
2288 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2289 - <xloc>571</xloc>  
2290 - <yloc>44</yloc>  
2291 - <draw>Y</draw>  
2292 - </GUI>  
2293 - </step>  
2294 -  
2295 - <step>  
2296 - <name>&#x8fdb;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x8d77;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</name>  
2297 - <type>ScriptValueMod</type>  
2298 - <description/>  
2299 - <distribute>Y</distribute>  
2300 - <custom_distribution/>  
2301 - <copies>1</copies>  
2302 - <partitioning>  
2303 - <method>none</method>  
2304 - <schema_name/>  
2305 - </partitioning>  
2306 - <compatible>N</compatible>  
2307 - <optimizationLevel>9</optimizationLevel>  
2308 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
2309 - <jsScript_name>Script 1</jsScript_name>  
2310 - <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;</jsScript_script>  
2311 - </jsScript> </jsScripts> <fields> <field> <name>qdzname_calcu</name>  
2312 - <rename>qdzname_calcu</rename>  
2313 - <type>String</type>  
2314 - <length>-1</length>  
2315 - <precision>-1</precision>  
2316 - <replace>N</replace>  
2317 - </field> <field> <name>startZdtype_calcu</name>  
2318 - <rename>startZdtype_calcu</rename>  
2319 - <type>String</type>  
2320 - <length>-1</length>  
2321 - <precision>-1</precision>  
2322 - <replace>N</replace>  
2323 - </field> <field> <name>endZdtype_calcu</name>  
2324 - <rename>endZdtype_calcu</rename>  
2325 - <type>String</type>  
2326 - <length>-1</length>  
2327 - <precision>-1</precision>  
2328 - <replace>N</replace>  
2329 - </field> </fields> <cluster_schema/>  
2330 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2331 - <xloc>754</xloc>  
2332 - <yloc>610</yloc>  
2333 - <draw>Y</draw>  
2334 - </GUI>  
2335 - </step>  
2336 -  
2337 - <step>  
2338 - <name>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</name>  
2339 - <type>Dummy</type>  
2340 - <description/>  
2341 - <distribute>Y</distribute>  
2342 - <custom_distribution/>  
2343 - <copies>1</copies>  
2344 - <partitioning>  
2345 - <method>none</method>  
2346 - <schema_name/>  
2347 - </partitioning>  
2348 - <cluster_schema/>  
2349 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2350 - <xloc>997</xloc>  
2351 - <yloc>606</yloc>  
2352 - <draw>Y</draw>  
2353 - </GUI>  
2354 - </step>  
2355 -  
2356 - <step>  
2357 - <name>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>  
2358 - <type>DBLookup</type>  
2359 - <description/>  
2360 - <distribute>Y</distribute>  
2361 - <custom_distribution/>  
2362 - <copies>1</copies>  
2363 - <partitioning>  
2364 - <method>none</method>  
2365 - <schema_name/>  
2366 - </partitioning>  
2367 - <connection>bus_control_variable</connection>  
2368 - <cache>N</cache>  
2369 - <cache_load_all>N</cache_load_all>  
2370 - <cache_size>0</cache_size>  
2371 - <lookup>  
2372 - <schema/>  
2373 - <table>bsth_c_stationroute</table>  
2374 - <orderby/>  
2375 - <fail_on_multiple>N</fail_on_multiple>  
2376 - <eat_row_on_failure>N</eat_row_on_failure>  
2377 - <key>  
2378 - <name>xlid</name>  
2379 - <field>line</field>  
2380 - <condition>&#x3d;</condition>  
2381 - <name2/>  
2382 - </key>  
2383 - <key>  
2384 - <name>zdzname_calcu</name>  
2385 - <field>station_name</field>  
2386 - <condition>&#x3d;</condition>  
2387 - <name2/>  
2388 - </key>  
2389 - <key>  
2390 - <name>startZdtype_calcu</name>  
2391 - <field>station_mark</field>  
2392 - <condition>&#x3d;</condition>  
2393 - <name2/>  
2394 - </key>  
2395 - <value>  
2396 - <name>directions</name>  
2397 - <rename>sxx2</rename>  
2398 - <default/>  
2399 - <type>Integer</type>  
2400 - </value>  
2401 - <value>  
2402 - <name>station</name>  
2403 - <rename>qdzid</rename>  
2404 - <default/>  
2405 - <type>Integer</type>  
2406 - </value>  
2407 - </lookup>  
2408 - <cluster_schema/>  
2409 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2410 - <xloc>551</xloc>  
2411 - <yloc>782</yloc>  
2412 - <draw>Y</draw>  
2413 - </GUI>  
2414 - </step>  
2415 -  
2416 - <step>  
2417 - <name>&#x5339;&#x914d;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>  
2418 - <type>ScriptValueMod</type>  
2419 - <description/>  
2420 - <distribute>Y</distribute>  
2421 - <custom_distribution/>  
2422 - <copies>1</copies>  
2423 - <partitioning>  
2424 - <method>none</method>  
2425 - <schema_name/>  
2426 - </partitioning>  
2427 - <compatible>N</compatible>  
2428 - <optimizationLevel>9</optimizationLevel>  
2429 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
2430 - <jsScript_name>Script 1</jsScript_name>  
2431 - <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>  
2432 - </jsScript> </jsScripts> <fields> <field> <name>out_mileage</name>  
2433 - <rename>out_mileage</rename>  
2434 - <type>String</type>  
2435 - <length>-1</length>  
2436 - <precision>-1</precision>  
2437 - <replace>N</replace>  
2438 - </field> <field> <name>out_time</name>  
2439 - <rename>out_time</rename>  
2440 - <type>String</type>  
2441 - <length>-1</length>  
2442 - <precision>-1</precision>  
2443 - <replace>N</replace>  
2444 - </field> </fields> <cluster_schema/>  
2445 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2446 - <xloc>336</xloc>  
2447 - <yloc>862</yloc>  
2448 - <draw>Y</draw>  
2449 - </GUI>  
2450 - </step>  
2451 -  
2452 - <step>  
2453 - <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 2</name>  
2454 - <type>SelectValues</type>  
2455 - <description/>  
2456 - <distribute>Y</distribute>  
2457 - <custom_distribution/>  
2458 - <copies>1</copies>  
2459 - <partitioning>  
2460 - <method>none</method>  
2461 - <schema_name/>  
2462 - </partitioning>  
2463 - <fields> <select_unspecified>N</select_unspecified>  
2464 - <meta> <name>out_mileage</name>  
2465 - <rename>out_mileage</rename>  
2466 - <type>Number</type>  
2467 - <length>-2</length>  
2468 - <precision>-2</precision>  
2469 - <conversion_mask/>  
2470 - <date_format_lenient>false</date_format_lenient>  
2471 - <date_format_locale/>  
2472 - <date_format_timezone/>  
2473 - <lenient_string_to_number>false</lenient_string_to_number>  
2474 - <encoding/>  
2475 - <decimal_symbol/>  
2476 - <grouping_symbol/>  
2477 - <currency_symbol/>  
2478 - <storage_type/>  
2479 - </meta> <meta> <name>out_time</name>  
2480 - <rename>out_time</rename>  
2481 - <type>Integer</type>  
2482 - <length>-2</length>  
2483 - <precision>-2</precision>  
2484 - <conversion_mask/>  
2485 - <date_format_lenient>false</date_format_lenient>  
2486 - <date_format_locale/>  
2487 - <date_format_timezone/>  
2488 - <lenient_string_to_number>false</lenient_string_to_number>  
2489 - <encoding/>  
2490 - <decimal_symbol/>  
2491 - <grouping_symbol/>  
2492 - <currency_symbol/>  
2493 - <storage_type/>  
2494 - </meta> </fields> <cluster_schema/>  
2495 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2496 - <xloc>338</xloc>  
2497 - <yloc>949</yloc>  
2498 - <draw>Y</draw>  
2499 - </GUI>  
2500 - </step>  
2501 -  
2502 - <step>  
2503 - <name>&#x5339;&#x914d;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>  
2504 - <type>ScriptValueMod</type>  
2505 - <description/>  
2506 - <distribute>Y</distribute>  
2507 - <custom_distribution/>  
2508 - <copies>1</copies>  
2509 - <partitioning>  
2510 - <method>none</method>  
2511 - <schema_name/>  
2512 - </partitioning>  
2513 - <compatible>N</compatible>  
2514 - <optimizationLevel>9</optimizationLevel>  
2515 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
2516 - <jsScript_name>Script 1</jsScript_name>  
2517 - <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>  
2518 - </jsScript> </jsScripts> <fields> <field> <name>parade_mileage</name>  
2519 - <rename>parade_mileage</rename>  
2520 - <type>String</type>  
2521 - <length>-1</length>  
2522 - <precision>-1</precision>  
2523 - <replace>N</replace>  
2524 - </field> <field> <name>parade_time</name>  
2525 - <rename>parade_time</rename>  
2526 - <type>String</type>  
2527 - <length>-1</length>  
2528 - <precision>-1</precision>  
2529 - <replace>N</replace>  
2530 - </field> </fields> <cluster_schema/>  
2531 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2532 - <xloc>726</xloc>  
2533 - <yloc>1005</yloc>  
2534 - <draw>Y</draw>  
2535 - </GUI>  
2536 - </step>  
2537 -  
2538 - <step>  
2539 - <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 3</name>  
2540 - <type>SelectValues</type>  
2541 - <description/>  
2542 - <distribute>Y</distribute>  
2543 - <custom_distribution/>  
2544 - <copies>1</copies>  
2545 - <partitioning>  
2546 - <method>none</method>  
2547 - <schema_name/>  
2548 - </partitioning>  
2549 - <fields> <select_unspecified>N</select_unspecified>  
2550 - <meta> <name>parade_mileage</name>  
2551 - <rename>parade_mileage</rename>  
2552 - <type>Number</type>  
2553 - <length>-2</length>  
2554 - <precision>-2</precision>  
2555 - <conversion_mask/>  
2556 - <date_format_lenient>false</date_format_lenient>  
2557 - <date_format_locale/>  
2558 - <date_format_timezone/>  
2559 - <lenient_string_to_number>false</lenient_string_to_number>  
2560 - <encoding/>  
2561 - <decimal_symbol/>  
2562 - <grouping_symbol/>  
2563 - <currency_symbol/>  
2564 - <storage_type/>  
2565 - </meta> <meta> <name>parade_time</name>  
2566 - <rename>parade_time</rename>  
2567 - <type>Integer</type>  
2568 - <length>-2</length>  
2569 - <precision>-2</precision>  
2570 - <conversion_mask/>  
2571 - <date_format_lenient>false</date_format_lenient>  
2572 - <date_format_locale/>  
2573 - <date_format_timezone/>  
2574 - <lenient_string_to_number>false</lenient_string_to_number>  
2575 - <encoding/>  
2576 - <decimal_symbol/>  
2577 - <grouping_symbol/>  
2578 - <currency_symbol/>  
2579 - <storage_type/>  
2580 - </meta> </fields> <cluster_schema/>  
2581 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
2582 - <xloc>875</xloc>  
2583 - <yloc>1001</yloc>  
2584 - <draw>Y</draw>  
2585 - </GUI>  
2586 - </step>  
2587 -  
2588 - <step_error_handling>  
2589 - </step_error_handling>  
2590 - <slave-step-copy-partition-distribution>  
2591 -</slave-step-copy-partition-distribution>  
2592 - <slave_transformation>N</slave_transformation>  
2593 -  
2594 -</transformation>  
2595 \ No newline at end of file 1 \ No newline at end of file
  2 +<?xml version="1.0" encoding="UTF-8"?>
  3 +<transformation>
  4 + <info>
  5 + <name>ttinfodetailDataInput</name>
  6 + <description>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</description>
  7 + <extended_description>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;</extended_description>
  8 + <trans_version/>
  9 + <trans_type>Normal</trans_type>
  10 + <trans_status>0</trans_status>
  11 + <directory>&#x2f;</directory>
  12 + <parameters>
  13 + </parameters>
  14 + <log>
  15 +<trans-log-table><connection/>
  16 +<schema/>
  17 +<table/>
  18 +<size_limit_lines/>
  19 +<interval/>
  20 +<timeout_days/>
  21 +<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>
  22 +<perf-log-table><connection/>
  23 +<schema/>
  24 +<table/>
  25 +<interval/>
  26 +<timeout_days/>
  27 +<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>
  28 +<channel-log-table><connection/>
  29 +<schema/>
  30 +<table/>
  31 +<timeout_days/>
  32 +<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>
  33 +<step-log-table><connection/>
  34 +<schema/>
  35 +<table/>
  36 +<timeout_days/>
  37 +<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>
  38 +<metrics-log-table><connection/>
  39 +<schema/>
  40 +<table/>
  41 +<timeout_days/>
  42 +<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>
  43 + </log>
  44 + <maxdate>
  45 + <connection/>
  46 + <table/>
  47 + <field/>
  48 + <offset>0.0</offset>
  49 + <maxdiff>0.0</maxdiff>
  50 + </maxdate>
  51 + <size_rowset>10000</size_rowset>
  52 + <sleep_time_empty>50</sleep_time_empty>
  53 + <sleep_time_full>50</sleep_time_full>
  54 + <unique_connections>N</unique_connections>
  55 + <feedback_shown>Y</feedback_shown>
  56 + <feedback_size>50000</feedback_size>
  57 + <using_thread_priorities>Y</using_thread_priorities>
  58 + <shared_objects_file/>
  59 + <capture_step_performance>N</capture_step_performance>
  60 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  61 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  62 + <dependencies>
  63 + </dependencies>
  64 + <partitionschemas>
  65 + </partitionschemas>
  66 + <slaveservers>
  67 + </slaveservers>
  68 + <clusterschemas>
  69 + </clusterschemas>
  70 + <created_user>-</created_user>
  71 + <created_date>2016&#x2f;06&#x2f;30 12&#x3a;21&#x3a;57.536</created_date>
  72 + <modified_user>-</modified_user>
  73 + <modified_date>2016&#x2f;06&#x2f;30 12&#x3a;21&#x3a;57.536</modified_date>
  74 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  75 + <is_key_private>N</is_key_private>
  76 + </info>
  77 + <notepads>
  78 + <notepad>
  79 + <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>
  80 + <xloc>606</xloc>
  81 + <yloc>129</yloc>
  82 + <width>332</width>
  83 + <heigth>186</heigth>
  84 + <fontname>YaHei Consolas Hybrid</fontname>
  85 + <fontsize>12</fontsize>
  86 + <fontbold>N</fontbold>
  87 + <fontitalic>N</fontitalic>
  88 + <fontcolorred>0</fontcolorred>
  89 + <fontcolorgreen>0</fontcolorgreen>
  90 + <fontcolorblue>0</fontcolorblue>
  91 + <backgroundcolorred>255</backgroundcolorred>
  92 + <backgroundcolorgreen>205</backgroundcolorgreen>
  93 + <backgroundcolorblue>112</backgroundcolorblue>
  94 + <bordercolorred>100</bordercolorred>
  95 + <bordercolorgreen>100</bordercolorgreen>
  96 + <bordercolorblue>100</bordercolorblue>
  97 + <drawshadow>Y</drawshadow>
  98 + </notepad>
  99 + <notepad>
  100 + <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>
  101 + <xloc>79</xloc>
  102 + <yloc>206</yloc>
  103 + <width>346</width>
  104 + <heigth>74</heigth>
  105 + <fontname>YaHei Consolas Hybrid</fontname>
  106 + <fontsize>12</fontsize>
  107 + <fontbold>N</fontbold>
  108 + <fontitalic>N</fontitalic>
  109 + <fontcolorred>0</fontcolorred>
  110 + <fontcolorgreen>0</fontcolorgreen>
  111 + <fontcolorblue>0</fontcolorblue>
  112 + <backgroundcolorred>255</backgroundcolorred>
  113 + <backgroundcolorgreen>205</backgroundcolorgreen>
  114 + <backgroundcolorblue>112</backgroundcolorblue>
  115 + <bordercolorred>100</bordercolorred>
  116 + <bordercolorgreen>100</bordercolorgreen>
  117 + <bordercolorblue>100</bordercolorblue>
  118 + <drawshadow>Y</drawshadow>
  119 + </notepad>
  120 + </notepads>
  121 + <connection>
  122 + <name>bus_control_variable</name>
  123 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  124 + <type>MYSQL</type>
  125 + <access>Native</access>
  126 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  127 + <port>3306</port>
  128 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  129 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  130 + <servername/>
  131 + <data_tablespace/>
  132 + <index_tablespace/>
  133 + <attributes>
  134 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  135 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  136 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  137 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  138 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  139 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  140 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  141 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  142 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  143 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  144 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  145 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  146 + </attributes>
  147 + </connection>
  148 + <connection>
  149 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  150 + <server>localhost</server>
  151 + <type>MYSQL</type>
  152 + <access>Native</access>
  153 + <database>control</database>
  154 + <port>3306</port>
  155 + <username>root</username>
  156 + <password>Encrypted </password>
  157 + <servername/>
  158 + <data_tablespace/>
  159 + <index_tablespace/>
  160 + <attributes>
  161 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  162 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  163 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  164 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  165 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  166 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  167 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  168 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  169 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  170 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  171 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  172 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  173 + </attributes>
  174 + </connection>
  175 + <connection>
  176 + <name>bus_control_&#x672c;&#x673a;</name>
  177 + <server>localhost</server>
  178 + <type>MYSQL</type>
  179 + <access>Native</access>
  180 + <database>control</database>
  181 + <port>3306</port>
  182 + <username>root</username>
  183 + <password>Encrypted </password>
  184 + <servername/>
  185 + <data_tablespace/>
  186 + <index_tablespace/>
  187 + <attributes>
  188 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  189 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  190 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  191 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  192 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  193 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  194 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  195 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  196 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  197 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  198 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  199 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  200 + </attributes>
  201 + </connection>
  202 + <connection>
  203 + <name>xlab_mysql_youle</name>
  204 + <server>101.231.124.8</server>
  205 + <type>MYSQL</type>
  206 + <access>Native</access>
  207 + <database>xlab_youle</database>
  208 + <port>45687</port>
  209 + <username>xlab-youle</username>
  210 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  211 + <servername/>
  212 + <data_tablespace/>
  213 + <index_tablespace/>
  214 + <attributes>
  215 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  216 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  217 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  218 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  219 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  220 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  221 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  222 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  223 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  224 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  225 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  226 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  227 + </attributes>
  228 + </connection>
  229 + <connection>
  230 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  231 + <server>localhost</server>
  232 + <type>MYSQL</type>
  233 + <access>Native</access>
  234 + <database>xlab_youle</database>
  235 + <port>3306</port>
  236 + <username>root</username>
  237 + <password>Encrypted </password>
  238 + <servername/>
  239 + <data_tablespace/>
  240 + <index_tablespace/>
  241 + <attributes>
  242 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  243 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  244 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  245 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  246 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  247 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  248 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  249 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  250 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  251 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  252 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  253 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  254 + </attributes>
  255 + </connection>
  256 + <connection>
  257 + <name>xlab_youle</name>
  258 + <server/>
  259 + <type>MYSQL</type>
  260 + <access>JNDI</access>
  261 + <database>xlab_youle</database>
  262 + <port>1521</port>
  263 + <username/>
  264 + <password>Encrypted </password>
  265 + <servername/>
  266 + <data_tablespace/>
  267 + <index_tablespace/>
  268 + <attributes>
  269 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  270 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  271 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  272 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  273 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  274 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  275 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  276 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  277 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  278 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  279 + </attributes>
  280 + </connection>
  281 + <order>
  282 + <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>
  283 + <hop> <from>&#x6dfb;&#x52a0;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;&#xff08;&#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x4e3a;&#x7a7a;&#xff09;</to><enabled>Y</enabled> </hop>
  284 + <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;&#xff08;&#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x4e3a;&#x7a7a;&#xff09;</from><to>&#x6dfb;&#x52a0;&#x5bf9;&#x5e94;&#x73ed;&#x6b21;&#x6570;</to><enabled>Y</enabled> </hop>
  285 + <hop> <from>&#x6dfb;&#x52a0;&#x5bf9;&#x5e94;&#x73ed;&#x6b21;&#x6570;</from><to>&#x5904;&#x7406;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  286 + <hop> <from>&#x5904;&#x7406;&#x6570;&#x636e;</from><to>&#x5206;&#x7ec4;&#x5404;&#x4e2a;&#x8def;&#x724c;&#x7684;&#x7ad9;</to><enabled>Y</enabled> </hop>
  287 + <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>
  288 + <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>
  289 + <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178;</from><to>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178;</to><enabled>Y</enabled> </hop>
  290 + <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 2</from><to>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 2</to><enabled>Y</enabled> </hop>
  291 + <hop> <from>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 3</from><to>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 3</to><enabled>Y</enabled> </hop>
  292 + <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>
  293 + <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>
  294 + <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>
  295 + <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>
  296 + <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>
  297 + <hop> <from>&#x67e5;&#x627e;&#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>
  298 + <hop> <from>&#x67e5;&#x627e;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;</from><to>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178;</to><enabled>Y</enabled> </hop>
  299 + <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>
  300 + <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>
  301 + <hop> <from>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</from><to>&#x6b63;&#x5e38;&#x73ed;&#x6b21;_&#x5904;&#x7406;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  302 + <hop> <from>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178;</from><to>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x4e0a;&#x4e0b;&#x884c;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</to><enabled>Y</enabled> </hop>
  303 + <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>
  304 + <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>
  305 + <hop> <from>&#x67e5;&#x627e;&#x8def;&#x724c;&#x5173;&#x8054;</from><to>&#x8ba1;&#x7b97;&#x73ed;&#x6b21;&#x7c7b;&#x578b;</to><enabled>Y</enabled> </hop>
  306 + <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>
  307 + <hop> <from>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</from><to>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;1</to><enabled>Y</enabled> </hop>
  308 + <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>
  309 + <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>
  310 + <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>
  311 + <hop> <from>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</from><to>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;2</to><enabled>Y</enabled> </hop>
  312 + <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>
  313 + <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>
  314 + <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>
  315 + <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6dfb;&#x52a0;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;</to><enabled>Y</enabled> </hop>
  316 + <hop> <from>&#x5206;&#x7ec4;&#x5404;&#x4e2a;&#x8def;&#x724c;&#x7684;&#x7ad9;</from><to>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x5173;&#x8054;</to><enabled>Y</enabled> </hop>
  317 + <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>
  318 + <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>
  319 + <hop> <from>&#x8bb0;&#x5f55;&#x5173;&#x8054; &#x28;&#x7b1b;&#x5361;&#x5c14;&#x8f93;&#x51fa;&#x29;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  320 + <hop> <from>&#x7c7b;&#x578b;&#x4fee;&#x6b63;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail</to><enabled>Y</enabled> </hop>
  321 + <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>
  322 + <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>
  323 + <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>
  324 + <hop> <from>&#x5339;&#x914d;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 2</to><enabled>Y</enabled> </hop>
  325 + <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>
  326 + <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>
  327 + <hop> <from>&#x5339;&#x914d;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</from><to>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 3</to><enabled>Y</enabled> </hop>
  328 + <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>
  329 + </order>
  330 + <step>
  331 + <name>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178;</name>
  332 + <type>ValueMapper</type>
  333 + <description/>
  334 + <distribute>Y</distribute>
  335 + <custom_distribution/>
  336 + <copies>1</copies>
  337 + <partitioning>
  338 + <method>none</method>
  339 + <schema_name/>
  340 + </partitioning>
  341 + <field_to_use>sxx</field_to_use>
  342 + <target_field>sxx_desc</target_field>
  343 + <non_match_default/>
  344 + <fields>
  345 + <field>
  346 + <source_value>0</source_value>
  347 + <target_value>&#x4e0a;&#x884c;</target_value>
  348 + </field>
  349 + <field>
  350 + <source_value>1</source_value>
  351 + <target_value>&#x4e0b;&#x884c;</target_value>
  352 + </field>
  353 + </fields>
  354 + <cluster_schema/>
  355 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  356 + <xloc>147</xloc>
  357 + <yloc>403</yloc>
  358 + <draw>Y</draw>
  359 + </GUI>
  360 + </step>
  361 +
  362 + <step>
  363 + <name>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 2</name>
  364 + <type>ValueMapper</type>
  365 + <description/>
  366 + <distribute>Y</distribute>
  367 + <custom_distribution/>
  368 + <copies>1</copies>
  369 + <partitioning>
  370 + <method>none</method>
  371 + <schema_name/>
  372 + </partitioning>
  373 + <field_to_use>sxx</field_to_use>
  374 + <target_field>sxx_desc</target_field>
  375 + <non_match_default/>
  376 + <fields>
  377 + <field>
  378 + <source_value>0</source_value>
  379 + <target_value>&#x4e0a;&#x884c;</target_value>
  380 + </field>
  381 + <field>
  382 + <source_value>1</source_value>
  383 + <target_value>&#x4e0b;&#x884c;</target_value>
  384 + </field>
  385 + </fields>
  386 + <cluster_schema/>
  387 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  388 + <xloc>331</xloc>
  389 + <yloc>598</yloc>
  390 + <draw>Y</draw>
  391 + </GUI>
  392 + </step>
  393 +
  394 + <step>
  395 + <name>&#x4e0a;&#x4e0b;&#x884c;&#x5b57;&#x5178; 3</name>
  396 + <type>ValueMapper</type>
  397 + <description/>
  398 + <distribute>Y</distribute>
  399 + <custom_distribution/>
  400 + <copies>1</copies>
  401 + <partitioning>
  402 + <method>none</method>
  403 + <schema_name/>
  404 + </partitioning>
  405 + <field_to_use>sxx</field_to_use>
  406 + <target_field>sxx_desc</target_field>
  407 + <non_match_default/>
  408 + <fields>
  409 + <field>
  410 + <source_value>0</source_value>
  411 + <target_value>&#x4e0a;&#x884c;</target_value>
  412 + </field>
  413 + <field>
  414 + <source_value>1</source_value>
  415 + <target_value>&#x4e0b;&#x884c;</target_value>
  416 + </field>
  417 + </fields>
  418 + <cluster_schema/>
  419 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  420 + <xloc>553</xloc>
  421 + <yloc>859</yloc>
  422 + <draw>Y</draw>
  423 + </GUI>
  424 + </step>
  425 +
  426 + <step>
  427 + <name>&#x51fa;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x7ec8;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</name>
  428 + <type>ScriptValueMod</type>
  429 + <description/>
  430 + <distribute>Y</distribute>
  431 + <custom_distribution/>
  432 + <copies>1</copies>
  433 + <partitioning>
  434 + <method>none</method>
  435 + <schema_name/>
  436 + </partitioning>
  437 + <compatible>N</compatible>
  438 + <optimizationLevel>9</optimizationLevel>
  439 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  440 + <jsScript_name>Script 1</jsScript_name>
  441 + <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;E&#x27;&#x3b;</jsScript_script>
  442 + </jsScript> </jsScripts> <fields> <field> <name>zdzname</name>
  443 + <rename>zdzname</rename>
  444 + <type>String</type>
  445 + <length>-1</length>
  446 + <precision>-1</precision>
  447 + <replace>N</replace>
  448 + </field> <field> <name>endZdtype</name>
  449 + <rename>endZdtype</rename>
  450 + <type>String</type>
  451 + <length>-1</length>
  452 + <precision>-1</precision>
  453 + <replace>N</replace>
  454 + </field> </fields> <cluster_schema/>
  455 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  456 + <xloc>575</xloc>
  457 + <yloc>502</yloc>
  458 + <draw>Y</draw>
  459 + </GUI>
  460 + </step>
  461 +
  462 + <step>
  463 + <name>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</name>
  464 + <type>Dummy</type>
  465 + <description/>
  466 + <distribute>Y</distribute>
  467 + <custom_distribution/>
  468 + <copies>1</copies>
  469 + <partitioning>
  470 + <method>none</method>
  471 + <schema_name/>
  472 + </partitioning>
  473 + <cluster_schema/>
  474 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  475 + <xloc>869</xloc>
  476 + <yloc>504</yloc>
  477 + <draw>Y</draw>
  478 + </GUI>
  479 + </step>
  480 +
  481 + <step>
  482 + <name>&#x5206;&#x7ec4;&#x5404;&#x4e2a;&#x8def;&#x724c;&#x7684;&#x7ad9;</name>
  483 + <type>GroupBy</type>
  484 + <description/>
  485 + <distribute>Y</distribute>
  486 + <custom_distribution/>
  487 + <copies>1</copies>
  488 + <partitioning>
  489 + <method>none</method>
  490 + <schema_name/>
  491 + </partitioning>
  492 + <all_rows>Y</all_rows>
  493 + <ignore_aggregate>N</ignore_aggregate>
  494 + <field_ignore/>
  495 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  496 + <prefix>grp</prefix>
  497 + <add_linenr>Y</add_linenr>
  498 + <linenr_fieldname>gno</linenr_fieldname>
  499 + <give_back_row>N</give_back_row>
  500 + <group>
  501 + <field>
  502 + <name>lp</name>
  503 + </field>
  504 + </group>
  505 + <fields>
  506 + <field>
  507 + <aggregate>qdzgroups</aggregate>
  508 + <subject>qdzname</subject>
  509 + <type>CONCAT_STRING</type>
  510 + <valuefield>,</valuefield>
  511 + </field>
  512 + </fields>
  513 + <cluster_schema/>
  514 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  515 + <xloc>892</xloc>
  516 + <yloc>44</yloc>
  517 + <draw>Y</draw>
  518 + </GUI>
  519 + </step>
  520 +
  521 + <step>
  522 + <name>&#x5339;&#x914d;&#x4e0a;&#x4e0b;&#x884c;&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  523 + <type>ScriptValueMod</type>
  524 + <description/>
  525 + <distribute>Y</distribute>
  526 + <custom_distribution/>
  527 + <copies>1</copies>
  528 + <partitioning>
  529 + <method>none</method>
  530 + <schema_name/>
  531 + </partitioning>
  532 + <compatible>N</compatible>
  533 + <optimizationLevel>9</optimizationLevel>
  534 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  535 + <jsScript_name>Script 1</jsScript_name>
  536 + <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;if &#x28;sxx &#x3d;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x4e0a;&#x884c;&#xa; jhlc &#x3d; up_mileage&#x3b;&#xa; bcsj &#x3d; up_travel_time&#x3b;&#xa;&#x7d; else &#x7b; &#x2f;&#x2f; sxx &#x3d;&#x3d; 1 &#x4e0b;&#x884c;&#xa; jhlc &#x3d; down_mileage&#x3b;&#xa; bcsj &#x3d; down_travel_time&#x3b;&#xa;&#x7d;</jsScript_script>
  537 + </jsScript> </jsScripts> <fields> <field> <name>jhlc</name>
  538 + <rename>jhlc</rename>
  539 + <type>String</type>
  540 + <length>-1</length>
  541 + <precision>-1</precision>
  542 + <replace>N</replace>
  543 + </field> <field> <name>bcsj</name>
  544 + <rename>bcsj</rename>
  545 + <type>String</type>
  546 + <length>-1</length>
  547 + <precision>-1</precision>
  548 + <replace>N</replace>
  549 + </field> </fields> <cluster_schema/>
  550 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  551 + <xloc>148</xloc>
  552 + <yloc>674</yloc>
  553 + <draw>Y</draw>
  554 + </GUI>
  555 + </step>
  556 +
  557 + <step>
  558 + <name>&#x5339;&#x914d;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  559 + <type>ScriptValueMod</type>
  560 + <description/>
  561 + <distribute>Y</distribute>
  562 + <custom_distribution/>
  563 + <copies>1</copies>
  564 + <partitioning>
  565 + <method>none</method>
  566 + <schema_name/>
  567 + </partitioning>
  568 + <compatible>N</compatible>
  569 + <optimizationLevel>9</optimizationLevel>
  570 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  571 + <jsScript_name>Script 1</jsScript_name>
  572 + <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>
  573 + </jsScript> </jsScripts> <fields> <field> <name>out_mileage</name>
  574 + <rename>out_mileage</rename>
  575 + <type>String</type>
  576 + <length>-1</length>
  577 + <precision>-1</precision>
  578 + <replace>N</replace>
  579 + </field> <field> <name>out_time</name>
  580 + <rename>out_time</rename>
  581 + <type>String</type>
  582 + <length>-1</length>
  583 + <precision>-1</precision>
  584 + <replace>N</replace>
  585 + </field> </fields> <cluster_schema/>
  586 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  587 + <xloc>336</xloc>
  588 + <yloc>862</yloc>
  589 + <draw>Y</draw>
  590 + </GUI>
  591 + </step>
  592 +
  593 + <step>
  594 + <name>&#x5339;&#x914d;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  595 + <type>ScriptValueMod</type>
  596 + <description/>
  597 + <distribute>Y</distribute>
  598 + <custom_distribution/>
  599 + <copies>1</copies>
  600 + <partitioning>
  601 + <method>none</method>
  602 + <schema_name/>
  603 + </partitioning>
  604 + <compatible>N</compatible>
  605 + <optimizationLevel>9</optimizationLevel>
  606 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  607 + <jsScript_name>Script 1</jsScript_name>
  608 + <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>
  609 + </jsScript> </jsScripts> <fields> <field> <name>parade_mileage</name>
  610 + <rename>parade_mileage</rename>
  611 + <type>String</type>
  612 + <length>-1</length>
  613 + <precision>-1</precision>
  614 + <replace>N</replace>
  615 + </field> <field> <name>parade_time</name>
  616 + <rename>parade_time</rename>
  617 + <type>String</type>
  618 + <length>-1</length>
  619 + <precision>-1</precision>
  620 + <replace>N</replace>
  621 + </field> </fields> <cluster_schema/>
  622 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  623 + <xloc>726</xloc>
  624 + <yloc>1005</yloc>
  625 + <draw>Y</draw>
  626 + </GUI>
  627 + </step>
  628 +
  629 + <step>
  630 + <name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</name>
  631 + <type>DataGrid</type>
  632 + <description/>
  633 + <distribute>Y</distribute>
  634 + <custom_distribution/>
  635 + <copies>1</copies>
  636 + <partitioning>
  637 + <method>none</method>
  638 + <schema_name/>
  639 + </partitioning>
  640 + <fields>
  641 + </fields>
  642 + <data>
  643 + <line> </line>
  644 + </data>
  645 + <cluster_schema/>
  646 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  647 + <xloc>110</xloc>
  648 + <yloc>133</yloc>
  649 + <draw>Y</draw>
  650 + </GUI>
  651 + </step>
  652 +
  653 + <step>
  654 + <name>&#x5904;&#x7406;&#x6570;&#x636e;</name>
  655 + <type>ScriptValueMod</type>
  656 + <description/>
  657 + <distribute>Y</distribute>
  658 + <custom_distribution/>
  659 + <copies>1</copies>
  660 + <partitioning>
  661 + <method>none</method>
  662 + <schema_name/>
  663 + </partitioning>
  664 + <compatible>N</compatible>
  665 + <optimizationLevel>9</optimizationLevel>
  666 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  667 + <jsScript_name>Script 1</jsScript_name>
  668 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;&#x2f;&#x2f; &#x4f7f;&#x7528;&#x6b63;&#x5219;&#x8868;&#x8fbe;&#x5f0f;&#x53bb;&#x9664;&#x7ad9;&#x70b9;&#x540d;&#x79f0;&#x4e2d;&#x7684;&#x6570;&#x5b57;&#xa;qdzname &#x3d; qdzname.replace&#x28;&#x2f;&#x5c;d&#x2b;&#x2f;g,&#x27;&#x27;&#x29;&#x3b;&#xa;&#xa;&#x2f;&#x2f; sendtime&#x5904;&#x7406;&#xa;var sendtime_calcu&#x3b;&#xa;if &#x28;sendtime.length &#x21;&#x3d; 5&#x29; &#xa; sendtime_calcu &#x3d; sendtime.substr&#x28;0, 2&#x29; &#x2b; &#x22;&#x3a;&#x22; &#x2b; sendtime.substr&#x28;2, 2&#x29;&#x3b;&#xa;else &#xa; sendtime_calcu &#x3d; sendtime&#x3b;&#xa;&#xa;&#x2f;&#x2f; &#x8bbe;&#x7f6e;&#x5206;&#x73ed;&#xa;var isfb &#x3d; 0&#x3b;&#xa;&#xa;&#x2f;&#x2f; &#x8bbe;&#x7f6e;isCanceled&#xa;var iscanceled &#x3d; 0&#x3b;</jsScript_script>
  669 + </jsScript> </jsScripts> <fields> <field> <name>qdzname</name>
  670 + <rename>qdzname</rename>
  671 + <type>String</type>
  672 + <length>-1</length>
  673 + <precision>-1</precision>
  674 + <replace>Y</replace>
  675 + </field> <field> <name>isfb</name>
  676 + <rename>isfb</rename>
  677 + <type>Integer</type>
  678 + <length>-1</length>
  679 + <precision>-1</precision>
  680 + <replace>N</replace>
  681 + </field> <field> <name>iscanceled</name>
  682 + <rename>iscanceled</rename>
  683 + <type>Integer</type>
  684 + <length>-1</length>
  685 + <precision>-1</precision>
  686 + <replace>N</replace>
  687 + </field> <field> <name>sendtime_calcu</name>
  688 + <rename>sendtime_calcu</rename>
  689 + <type>String</type>
  690 + <length>-1</length>
  691 + <precision>-1</precision>
  692 + <replace>N</replace>
  693 + </field> </fields> <cluster_schema/>
  694 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  695 + <xloc>788</xloc>
  696 + <yloc>44</yloc>
  697 + <draw>Y</draw>
  698 + </GUI>
  699 + </step>
  700 +
  701 + <step>
  702 + <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
  703 + <type>SelectValues</type>
  704 + <description/>
  705 + <distribute>Y</distribute>
  706 + <custom_distribution/>
  707 + <copies>1</copies>
  708 + <partitioning>
  709 + <method>none</method>
  710 + <schema_name/>
  711 + </partitioning>
  712 + <fields> <field> <name>&#x8def;&#x724c;</name>
  713 + <rename>lp</rename>
  714 + <length>-2</length>
  715 + <precision>-2</precision>
  716 + </field> <field> <name>&#x7ad9;&#x70b9;&#x540d;&#x79f0;</name>
  717 + <rename>qdzname</rename>
  718 + <length>-2</length>
  719 + <precision>-2</precision>
  720 + </field> <field> <name>&#x53d1;&#x8f66;&#x65f6;&#x95f4;</name>
  721 + <rename>sendtime</rename>
  722 + <length>-2</length>
  723 + <precision>-2</precision>
  724 + </field> <select_unspecified>Y</select_unspecified>
  725 + </fields> <cluster_schema/>
  726 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  727 + <xloc>444</xloc>
  728 + <yloc>131</yloc>
  729 + <draw>Y</draw>
  730 + </GUI>
  731 + </step>
  732 +
  733 + <step>
  734 + <name>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;1</name>
  735 + <type>FilterRows</type>
  736 + <description/>
  737 + <distribute>Y</distribute>
  738 + <custom_distribution/>
  739 + <copies>1</copies>
  740 + <partitioning>
  741 + <method>none</method>
  742 + <schema_name/>
  743 + </partitioning>
  744 +<send_true_to>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</send_true_to>
  745 +<send_false_to>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;2</send_false_to>
  746 + <compare>
  747 +<condition>
  748 + <negated>N</negated>
  749 + <leftvalue>bctype</leftvalue>
  750 + <function>&#x3d;</function>
  751 + <rightvalue/>
  752 + <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>
  753 + </compare>
  754 + <cluster_schema/>
  755 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  756 + <xloc>860</xloc>
  757 + <yloc>401</yloc>
  758 + <draw>Y</draw>
  759 + </GUI>
  760 + </step>
  761 +
  762 + <step>
  763 + <name>&#x6309;&#x7167;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x8fc7;&#x6ee4;&#x6570;&#x636e;2</name>
  764 + <type>FilterRows</type>
  765 + <description/>
  766 + <distribute>Y</distribute>
  767 + <custom_distribution/>
  768 + <copies>1</copies>
  769 + <partitioning>
  770 + <method>none</method>
  771 + <schema_name/>
  772 + </partitioning>
  773 +<send_true_to>&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</send_true_to>
  774 +<send_false_to>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</send_false_to>
  775 + <compare>
  776 +<condition>
  777 + <negated>N</negated>
  778 + <leftvalue>bctype</leftvalue>
  779 + <function>&#x3d;</function>
  780 + <rightvalue/>
  781 + <value><name>constant</name><type>String</type><text>&#x51fa;&#x573a;</text><length>-1</length><precision>-1</precision><isnull>N</isnull><mask/></value> </condition>
  782 + </compare>
  783 + <cluster_schema/>
  784 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  785 + <xloc>995</xloc>
  786 + <yloc>503</yloc>
  787 + <draw>Y</draw>
  788 + </GUI>
  789 + </step>
  790 +
  791 + <step>
  792 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail</name>
  793 + <type>InsertUpdate</type>
  794 + <description/>
  795 + <distribute>Y</distribute>
  796 + <custom_distribution/>
  797 + <copies>1</copies>
  798 + <partitioning>
  799 + <method>none</method>
  800 + <schema_name/>
  801 + </partitioning>
  802 + <connection>bus_control_variable</connection>
  803 + <commit>100</commit>
  804 + <update_bypassed>N</update_bypassed>
  805 + <lookup>
  806 + <schema/>
  807 + <table>bsth_c_s_ttinfo_detail</table>
  808 + <key>
  809 + <name>xlid</name>
  810 + <field>xl</field>
  811 + <condition>&#x3d;</condition>
  812 + <name2/>
  813 + </key>
  814 + <key>
  815 + <name>ttid</name>
  816 + <field>ttinfo</field>
  817 + <condition>&#x3d;</condition>
  818 + <name2/>
  819 + </key>
  820 + <key>
  821 + <name>lpid</name>
  822 + <field>lp</field>
  823 + <condition>&#x3d;</condition>
  824 + <name2/>
  825 + </key>
  826 + <key>
  827 + <name>fcno</name>
  828 + <field>fcno</field>
  829 + <condition>&#x3d;</condition>
  830 + <name2/>
  831 + </key>
  832 + <key>
  833 + <name>bcs</name>
  834 + <field>bcs</field>
  835 + <condition>&#x3d;</condition>
  836 + <name2/>
  837 + </key>
  838 + <value>
  839 + <name>lp</name>
  840 + <rename>lpid</rename>
  841 + <update>Y</update>
  842 + </value>
  843 + <value>
  844 + <name>bc_type</name>
  845 + <rename>bctype_code</rename>
  846 + <update>Y</update>
  847 + </value>
  848 + <value>
  849 + <name>bcs</name>
  850 + <rename>bcs</rename>
  851 + <update>Y</update>
  852 + </value>
  853 + <value>
  854 + <name>bcsj</name>
  855 + <rename>bcsj</rename>
  856 + <update>Y</update>
  857 + </value>
  858 + <value>
  859 + <name>fcno</name>
  860 + <rename>fcno</rename>
  861 + <update>Y</update>
  862 + </value>
  863 + <value>
  864 + <name>jhlc</name>
  865 + <rename>jhlc</rename>
  866 + <update>Y</update>
  867 + </value>
  868 + <value>
  869 + <name>fcsj</name>
  870 + <rename>sendtime_calcu</rename>
  871 + <update>Y</update>
  872 + </value>
  873 + <value>
  874 + <name>ttinfo</name>
  875 + <rename>ttid</rename>
  876 + <update>Y</update>
  877 + </value>
  878 + <value>
  879 + <name>xl</name>
  880 + <rename>xlid</rename>
  881 + <update>Y</update>
  882 + </value>
  883 + <value>
  884 + <name>qdz</name>
  885 + <rename>qdzid</rename>
  886 + <update>Y</update>
  887 + </value>
  888 + <value>
  889 + <name>zdz</name>
  890 + <rename>zdzid</rename>
  891 + <update>Y</update>
  892 + </value>
  893 + <value>
  894 + <name>xl_dir</name>
  895 + <rename>sxx</rename>
  896 + <update>Y</update>
  897 + </value>
  898 + <value>
  899 + <name>isfb</name>
  900 + <rename>isfb</rename>
  901 + <update>Y</update>
  902 + </value>
  903 + </lookup>
  904 + <cluster_schema/>
  905 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  906 + <xloc>143</xloc>
  907 + <yloc>860</yloc>
  908 + <draw>Y</draw>
  909 + </GUI>
  910 + </step>
  911 +
  912 + <step>
  913 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 2</name>
  914 + <type>InsertUpdate</type>
  915 + <description/>
  916 + <distribute>Y</distribute>
  917 + <custom_distribution/>
  918 + <copies>1</copies>
  919 + <partitioning>
  920 + <method>none</method>
  921 + <schema_name/>
  922 + </partitioning>
  923 + <connection>bus_control_variable</connection>
  924 + <commit>100</commit>
  925 + <update_bypassed>N</update_bypassed>
  926 + <lookup>
  927 + <schema/>
  928 + <table>bsth_c_s_ttinfo_detail</table>
  929 + <key>
  930 + <name>xlid</name>
  931 + <field>xl</field>
  932 + <condition>&#x3d;</condition>
  933 + <name2/>
  934 + </key>
  935 + <key>
  936 + <name>ttid</name>
  937 + <field>ttinfo</field>
  938 + <condition>&#x3d;</condition>
  939 + <name2/>
  940 + </key>
  941 + <key>
  942 + <name>lpid</name>
  943 + <field>lp</field>
  944 + <condition>&#x3d;</condition>
  945 + <name2/>
  946 + </key>
  947 + <key>
  948 + <name>fcno</name>
  949 + <field>fcno</field>
  950 + <condition>&#x3d;</condition>
  951 + <name2/>
  952 + </key>
  953 + <key>
  954 + <name>bcs</name>
  955 + <field>bcs</field>
  956 + <condition>&#x3d;</condition>
  957 + <name2/>
  958 + </key>
  959 + <value>
  960 + <name>tcc</name>
  961 + <rename>qdzid</rename>
  962 + <update>Y</update>
  963 + </value>
  964 + <value>
  965 + <name>zdz</name>
  966 + <rename>zdzid</rename>
  967 + <update>Y</update>
  968 + </value>
  969 + <value>
  970 + <name>xl</name>
  971 + <rename>xlid</rename>
  972 + <update>Y</update>
  973 + </value>
  974 + <value>
  975 + <name>ttinfo</name>
  976 + <rename>ttid</rename>
  977 + <update>Y</update>
  978 + </value>
  979 + <value>
  980 + <name>xl_dir</name>
  981 + <rename>sxx</rename>
  982 + <update>Y</update>
  983 + </value>
  984 + <value>
  985 + <name>lp</name>
  986 + <rename>lpid</rename>
  987 + <update>Y</update>
  988 + </value>
  989 + <value>
  990 + <name>jhlc</name>
  991 + <rename>out_mileage</rename>
  992 + <update>Y</update>
  993 + </value>
  994 + <value>
  995 + <name>fcsj</name>
  996 + <rename>sendtime_calcu</rename>
  997 + <update>Y</update>
  998 + </value>
  999 + <value>
  1000 + <name>bcsj</name>
  1001 + <rename>out_time</rename>
  1002 + <update>Y</update>
  1003 + </value>
  1004 + <value>
  1005 + <name>bcs</name>
  1006 + <rename>bcs</rename>
  1007 + <update>Y</update>
  1008 + </value>
  1009 + <value>
  1010 + <name>fcno</name>
  1011 + <rename>fcno</rename>
  1012 + <update>Y</update>
  1013 + </value>
  1014 + <value>
  1015 + <name>bc_type</name>
  1016 + <rename>bctype_code</rename>
  1017 + <update>Y</update>
  1018 + </value>
  1019 + <value>
  1020 + <name>isfb</name>
  1021 + <rename>isfb</rename>
  1022 + <update>Y</update>
  1023 + </value>
  1024 + </lookup>
  1025 + <cluster_schema/>
  1026 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1027 + <xloc>342</xloc>
  1028 + <yloc>1031</yloc>
  1029 + <draw>Y</draw>
  1030 + </GUI>
  1031 + </step>
  1032 +
  1033 + <step>
  1034 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ttinfo_detail 3</name>
  1035 + <type>InsertUpdate</type>
  1036 + <description/>
  1037 + <distribute>Y</distribute>
  1038 + <custom_distribution/>
  1039 + <copies>1</copies>
  1040 + <partitioning>
  1041 + <method>none</method>
  1042 + <schema_name/>
  1043 + </partitioning>
  1044 + <connection>bus_control_variable</connection>
  1045 + <commit>100</commit>
  1046 + <update_bypassed>N</update_bypassed>
  1047 + <lookup>
  1048 + <schema/>
  1049 + <table>bsth_c_s_ttinfo_detail</table>
  1050 + <key>
  1051 + <name>xlid</name>
  1052 + <field>xl</field>
  1053 + <condition>&#x3d;</condition>
  1054 + <name2/>
  1055 + </key>
  1056 + <key>
  1057 + <name>ttid</name>
  1058 + <field>ttinfo</field>
  1059 + <condition>&#x3d;</condition>
  1060 + <name2/>
  1061 + </key>
  1062 + <key>
  1063 + <name>lpid</name>
  1064 + <field>lp</field>
  1065 + <condition>&#x3d;</condition>
  1066 + <name2/>
  1067 + </key>
  1068 + <key>
  1069 + <name>fcno</name>
  1070 + <field>fcno</field>
  1071 + <condition>&#x3d;</condition>
  1072 + <name2/>
  1073 + </key>
  1074 + <key>
  1075 + <name>bcs</name>
  1076 + <field>bcs</field>
  1077 + <condition>&#x3d;</condition>
  1078 + <name2/>
  1079 + </key>
  1080 + <value>
  1081 + <name>fcno</name>
  1082 + <rename>fcno</rename>
  1083 + <update>Y</update>
  1084 + </value>
  1085 + <value>
  1086 + <name>bcs</name>
  1087 + <rename>bcs</rename>
  1088 + <update>Y</update>
  1089 + </value>
  1090 + <value>
  1091 + <name>xl</name>
  1092 + <rename>xlid</rename>
  1093 + <update>Y</update>
  1094 + </value>
  1095 + <value>
  1096 + <name>ttinfo</name>
  1097 + <rename>ttid</rename>
  1098 + <update>Y</update>
  1099 + </value>
  1100 + <value>
  1101 + <name>lp</name>
  1102 + <rename>lpid</rename>
  1103 + <update>Y</update>
  1104 + </value>
  1105 + <value>
  1106 + <name>bc_type</name>
  1107 + <rename>bctype_code</rename>
  1108 + <update>Y</update>
  1109 + </value>
  1110 + <value>
  1111 + <name>bcsj</name>
  1112 + <rename>parade_time</rename>
  1113 + <update>Y</update>
  1114 + </value>
  1115 + <value>
  1116 + <name>jhlc</name>
  1117 + <rename>parade_mileage</rename>
  1118 + <update>Y</update>
  1119 + </value>
  1120 + <value>
  1121 + <name>fcsj</name>
  1122 + <rename>sendtime_calcu</rename>
  1123 + <update>Y</update>
  1124 + </value>
  1125 + <value>
  1126 + <name>xl_dir</name>
  1127 + <rename>sxx2</rename>
  1128 + <update>Y</update>
  1129 + </value>
  1130 + <value>
  1131 + <name>qdz</name>
  1132 + <rename>qdzid</rename>
  1133 + <update>Y</update>
  1134 + </value>
  1135 + <value>
  1136 + <name>tcc</name>
  1137 + <rename>zdzid</rename>
  1138 + <update>Y</update>
  1139 + </value>
  1140 + <value>
  1141 + <name>isfb</name>
  1142 + <rename>isfb</rename>
  1143 + <update>Y</update>
  1144 + </value>
  1145 + </lookup>
  1146 + <cluster_schema/>
  1147 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1148 + <xloc>875</xloc>
  1149 + <yloc>887</yloc>
  1150 + <draw>Y</draw>
  1151 + </GUI>
  1152 + </step>
  1153 +
  1154 + <step>
  1155 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</name>
  1156 + <type>ExcelInput</type>
  1157 + <description/>
  1158 + <distribute>Y</distribute>
  1159 + <custom_distribution/>
  1160 + <copies>1</copies>
  1161 + <partitioning>
  1162 + <method>none</method>
  1163 + <schema_name/>
  1164 + </partitioning>
  1165 + <header>Y</header>
  1166 + <noempty>Y</noempty>
  1167 + <stoponempty>N</stoponempty>
  1168 + <filefield/>
  1169 + <sheetfield/>
  1170 + <sheetrownumfield/>
  1171 + <rownumfield/>
  1172 + <sheetfield/>
  1173 + <filefield/>
  1174 + <limit>0</limit>
  1175 + <encoding/>
  1176 + <add_to_result_filenames>Y</add_to_result_filenames>
  1177 + <accept_filenames>N</accept_filenames>
  1178 + <accept_field/>
  1179 + <accept_stepname/>
  1180 + <file>
  1181 + <name/>
  1182 + <filemask/>
  1183 + <exclude_filemask/>
  1184 + <file_required>N</file_required>
  1185 + <include_subfolders>N</include_subfolders>
  1186 + </file>
  1187 + <fields>
  1188 + </fields>
  1189 + <sheets>
  1190 + <sheet>
  1191 + <name/>
  1192 + <startrow>0</startrow>
  1193 + <startcol>0</startcol>
  1194 + </sheet>
  1195 + </sheets>
  1196 + <strict_types>N</strict_types>
  1197 + <error_ignored>N</error_ignored>
  1198 + <error_line_skipped>N</error_line_skipped>
  1199 + <bad_line_files_destination_directory/>
  1200 + <bad_line_files_extension>warning</bad_line_files_extension>
  1201 + <error_line_files_destination_directory/>
  1202 + <error_line_files_extension>error</error_line_files_extension>
  1203 + <line_number_files_destination_directory/>
  1204 + <line_number_files_extension>line</line_number_files_extension>
  1205 + <shortFileFieldName/>
  1206 + <pathFieldName/>
  1207 + <hiddenFieldName/>
  1208 + <lastModificationTimeFieldName/>
  1209 + <uriNameFieldName/>
  1210 + <rootUriNameFieldName/>
  1211 + <extensionFieldName/>
  1212 + <sizeFieldName/>
  1213 + <spreadsheet_type>JXL</spreadsheet_type>
  1214 + <cluster_schema/>
  1215 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1216 + <xloc>112</xloc>
  1217 + <yloc>44</yloc>
  1218 + <draw>Y</draw>
  1219 + </GUI>
  1220 + </step>
  1221 +
  1222 + <step>
  1223 + <name>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;1</name>
  1224 + <type>DBLookup</type>
  1225 + <description/>
  1226 + <distribute>Y</distribute>
  1227 + <custom_distribution/>
  1228 + <copies>1</copies>
  1229 + <partitioning>
  1230 + <method>none</method>
  1231 + <schema_name/>
  1232 + </partitioning>
  1233 + <connection>bus_control_variable</connection>
  1234 + <cache>N</cache>
  1235 + <cache_load_all>N</cache_load_all>
  1236 + <cache_size>0</cache_size>
  1237 + <lookup>
  1238 + <schema/>
  1239 + <table>bsth_c_car_park</table>
  1240 + <orderby/>
  1241 + <fail_on_multiple>N</fail_on_multiple>
  1242 + <eat_row_on_failure>N</eat_row_on_failure>
  1243 + <key>
  1244 + <name>tccname_</name>
  1245 + <field>park_name</field>
  1246 + <condition>&#x3d;</condition>
  1247 + <name2/>
  1248 + </key>
  1249 + <value>
  1250 + <name>id</name>
  1251 + <rename>qdzid</rename>
  1252 + <default/>
  1253 + <type>Integer</type>
  1254 + </value>
  1255 + </lookup>
  1256 + <cluster_schema/>
  1257 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1258 + <xloc>755</xloc>
  1259 + <yloc>504</yloc>
  1260 + <draw>Y</draw>
  1261 + </GUI>
  1262 + </step>
  1263 +
  1264 + <step>
  1265 + <name>&#x67e5;&#x627e;&#x505c;&#x8f66;&#x573a;2</name>
  1266 + <type>DBLookup</type>
  1267 + <description/>
  1268 + <distribute>Y</distribute>
  1269 + <custom_distribution/>
  1270 + <copies>1</copies>
  1271 + <partitioning>
  1272 + <method>none</method>
  1273 + <schema_name/>
  1274 + </partitioning>
  1275 + <connection>bus_control_variable</connection>
  1276 + <cache>N</cache>
  1277 + <cache_load_all>N</cache_load_all>
  1278 + <cache_size>0</cache_size>
  1279 + <lookup>
  1280 + <schema/>
  1281 + <table>bsth_c_car_park</table>
  1282 + <orderby/>
  1283 + <fail_on_multiple>N</fail_on_multiple>
  1284 + <eat_row_on_failure>N</eat_row_on_failure>
  1285 + <key>
  1286 + <name>tccname_</name>
  1287 + <field>park_name</field>
  1288 + <condition>&#x3d;</condition>
  1289 + <name2/>
  1290 + </key>
  1291 + <value>
  1292 + <name>id</name>
  1293 + <rename>zdzid</rename>
  1294 + <default/>
  1295 + <type>Integer</type>
  1296 + </value>
  1297 + </lookup>
  1298 + <cluster_schema/>
  1299 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1300 + <xloc>887</xloc>
  1301 + <yloc>608</yloc>
  1302 + <draw>Y</draw>
  1303 + </GUI>
  1304 + </step>
  1305 +
  1306 + <step>
  1307 + <name>&#x67e5;&#x627e;&#x51fa;&#x573a;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>
  1308 + <type>DBLookup</type>
  1309 + <description/>
  1310 + <distribute>Y</distribute>
  1311 + <custom_distribution/>
  1312 + <copies>1</copies>
  1313 + <partitioning>
  1314 + <method>none</method>
  1315 + <schema_name/>
  1316 + </partitioning>
  1317 + <connection>bus_control_variable</connection>
  1318 + <cache>N</cache>
  1319 + <cache_load_all>N</cache_load_all>
  1320 + <cache_size>0</cache_size>
  1321 + <lookup>
  1322 + <schema/>
  1323 + <table>bsth_c_stationroute</table>
  1324 + <orderby/>
  1325 + <fail_on_multiple>N</fail_on_multiple>
  1326 + <eat_row_on_failure>N</eat_row_on_failure>
  1327 + <key>
  1328 + <name>xlid</name>
  1329 + <field>line</field>
  1330 + <condition>&#x3d;</condition>
  1331 + <name2/>
  1332 + </key>
  1333 + <key>
  1334 + <name>zdzname</name>
  1335 + <field>station_name</field>
  1336 + <condition>&#x3d;</condition>
  1337 + <name2/>
  1338 + </key>
  1339 + <key>
  1340 + <name>endZdtype</name>
  1341 + <field>station_mark</field>
  1342 + <condition>&#x3d;</condition>
  1343 + <name2/>
  1344 + </key>
  1345 + <value>
  1346 + <name>station</name>
  1347 + <rename>zdzid</rename>
  1348 + <default/>
  1349 + <type>Integer</type>
  1350 + </value>
  1351 + <value>
  1352 + <name>directions</name>
  1353 + <rename>sxx</rename>
  1354 + <default/>
  1355 + <type>Integer</type>
  1356 + </value>
  1357 + </lookup>
  1358 + <cluster_schema/>
  1359 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1360 + <xloc>329</xloc>
  1361 + <yloc>505</yloc>
  1362 + <draw>Y</draw>
  1363 + </GUI>
  1364 + </step>
  1365 +
  1366 + <step>
  1367 + <name>&#x67e5;&#x627e;&#x65f6;&#x523b;&#x8868;&#x57fa;&#x7840;&#x4fe1;&#x606f;&#x5173;&#x8054;</name>
  1368 + <type>DBLookup</type>
  1369 + <description/>
  1370 + <distribute>Y</distribute>
  1371 + <custom_distribution/>
  1372 + <copies>1</copies>
  1373 + <partitioning>
  1374 + <method>none</method>
  1375 + <schema_name/>
  1376 + </partitioning>
  1377 + <connection>bus_control_variable</connection>
  1378 + <cache>N</cache>
  1379 + <cache_load_all>N</cache_load_all>
  1380 + <cache_size>0</cache_size>
  1381 + <lookup>
  1382 + <schema/>
  1383 + <table>bsth_c_s_ttinfo</table>
  1384 + <orderby/>
  1385 + <fail_on_multiple>N</fail_on_multiple>
  1386 + <eat_row_on_failure>N</eat_row_on_failure>
  1387 + <key>
  1388 + <name>xlid</name>
  1389 + <field>xl</field>
  1390 + <condition>&#x3d;</condition>
  1391 + <name2/>
  1392 + </key>
  1393 + <key>
  1394 + <name>ttinfoname_</name>
  1395 + <field>name</field>
  1396 + <condition>&#x3d;</condition>
  1397 + <name2/>
  1398 + </key>
  1399 + <key>
  1400 + <name>iscanceled</name>
  1401 + <field>is_cancel</field>
  1402 + <condition>&#x3d;</condition>
  1403 + <name2/>
  1404 + </key>
  1405 + <value>
  1406 + <name>id</name>
  1407 + <rename>ttid</rename>
  1408 + <default/>
  1409 + <type>Integer</type>
  1410 + </value>
  1411 + </lookup>
  1412 + <cluster_schema/>
  1413 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1414 + <xloc>1011</xloc>
  1415 + <yloc>134</yloc>
  1416 + <draw>Y</draw>
  1417 + </GUI>
  1418 + </step>
  1419 +
  1420 + <step>
  1421 + <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x4e0a;&#x4e0b;&#x884c;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  1422 + <type>DBLookup</type>
  1423 + <description/>
  1424 + <distribute>Y</distribute>
  1425 + <custom_distribution/>
  1426 + <copies>1</copies>
  1427 + <partitioning>
  1428 + <method>none</method>
  1429 + <schema_name/>
  1430 + </partitioning>
  1431 + <connection>bus_control_variable</connection>
  1432 + <cache>N</cache>
  1433 + <cache_load_all>N</cache_load_all>
  1434 + <cache_size>0</cache_size>
  1435 + <lookup>
  1436 + <schema/>
  1437 + <table>bsth_c_line_information</table>
  1438 + <orderby/>
  1439 + <fail_on_multiple>N</fail_on_multiple>
  1440 + <eat_row_on_failure>N</eat_row_on_failure>
  1441 + <key>
  1442 + <name>xlid</name>
  1443 + <field>line</field>
  1444 + <condition>&#x3d;</condition>
  1445 + <name2/>
  1446 + </key>
  1447 + <value>
  1448 + <name>up_mileage</name>
  1449 + <rename>up_mileage</rename>
  1450 + <default/>
  1451 + <type>Number</type>
  1452 + </value>
  1453 + <value>
  1454 + <name>down_mileage</name>
  1455 + <rename>down_mileage</rename>
  1456 + <default/>
  1457 + <type>Number</type>
  1458 + </value>
  1459 + <value>
  1460 + <name>up_travel_time</name>
  1461 + <rename>up_travel_time</rename>
  1462 + <default/>
  1463 + <type>Number</type>
  1464 + </value>
  1465 + <value>
  1466 + <name>down_travel_time</name>
  1467 + <rename>down_travel_time</rename>
  1468 + <default/>
  1469 + <type>Number</type>
  1470 + </value>
  1471 + </lookup>
  1472 + <cluster_schema/>
  1473 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1474 + <xloc>149</xloc>
  1475 + <yloc>581</yloc>
  1476 + <draw>Y</draw>
  1477 + </GUI>
  1478 + </step>
  1479 +
  1480 + <step>
  1481 + <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x5173;&#x8054;</name>
  1482 + <type>DBLookup</type>
  1483 + <description/>
  1484 + <distribute>Y</distribute>
  1485 + <custom_distribution/>
  1486 + <copies>1</copies>
  1487 + <partitioning>
  1488 + <method>none</method>
  1489 + <schema_name/>
  1490 + </partitioning>
  1491 + <connection>bus_control_variable</connection>
  1492 + <cache>N</cache>
  1493 + <cache_load_all>N</cache_load_all>
  1494 + <cache_size>0</cache_size>
  1495 + <lookup>
  1496 + <schema/>
  1497 + <table>bsth_c_line</table>
  1498 + <orderby/>
  1499 + <fail_on_multiple>N</fail_on_multiple>
  1500 + <eat_row_on_failure>N</eat_row_on_failure>
  1501 + <key>
  1502 + <name>xlname_</name>
  1503 + <field>name</field>
  1504 + <condition>&#x3d;</condition>
  1505 + <name2/>
  1506 + </key>
  1507 + <value>
  1508 + <name>id</name>
  1509 + <rename>xlid</rename>
  1510 + <default/>
  1511 + <type>Integer</type>
  1512 + </value>
  1513 + </lookup>
  1514 + <cluster_schema/>
  1515 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1516 + <xloc>1007</xloc>
  1517 + <yloc>43</yloc>
  1518 + <draw>Y</draw>
  1519 + </GUI>
  1520 + </step>
  1521 +
  1522 + <step>
  1523 + <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x51fa;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  1524 + <type>DBLookup</type>
  1525 + <description/>
  1526 + <distribute>Y</distribute>
  1527 + <custom_distribution/>
  1528 + <copies>1</copies>
  1529 + <partitioning>
  1530 + <method>none</method>
  1531 + <schema_name/>
  1532 + </partitioning>
  1533 + <connection>bus_control_variable</connection>
  1534 + <cache>N</cache>
  1535 + <cache_load_all>N</cache_load_all>
  1536 + <cache_size>0</cache_size>
  1537 + <lookup>
  1538 + <schema/>
  1539 + <table>bsth_c_line_information</table>
  1540 + <orderby/>
  1541 + <fail_on_multiple>N</fail_on_multiple>
  1542 + <eat_row_on_failure>N</eat_row_on_failure>
  1543 + <key>
  1544 + <name>xlid</name>
  1545 + <field>line</field>
  1546 + <condition>&#x3d;</condition>
  1547 + <name2/>
  1548 + </key>
  1549 + <value>
  1550 + <name>up_out_timer</name>
  1551 + <rename>up_out_timer</rename>
  1552 + <default/>
  1553 + <type>Number</type>
  1554 + </value>
  1555 + <value>
  1556 + <name>up_out_mileage</name>
  1557 + <rename>up_out_mileage</rename>
  1558 + <default/>
  1559 + <type>Number</type>
  1560 + </value>
  1561 + <value>
  1562 + <name>down_out_timer</name>
  1563 + <rename>down_out_timer</rename>
  1564 + <default/>
  1565 + <type>Number</type>
  1566 + </value>
  1567 + <value>
  1568 + <name>down_out_mileage</name>
  1569 + <rename>down_out_mileage</rename>
  1570 + <default/>
  1571 + <type>Number</type>
  1572 + </value>
  1573 + </lookup>
  1574 + <cluster_schema/>
  1575 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1576 + <xloc>335</xloc>
  1577 + <yloc>763</yloc>
  1578 + <draw>Y</draw>
  1579 + </GUI>
  1580 + </step>
  1581 +
  1582 + <step>
  1583 + <name>&#x67e5;&#x627e;&#x7ebf;&#x8def;&#x8fdb;&#x573a;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  1584 + <type>DBLookup</type>
  1585 + <description/>
  1586 + <distribute>Y</distribute>
  1587 + <custom_distribution/>
  1588 + <copies>1</copies>
  1589 + <partitioning>
  1590 + <method>none</method>
  1591 + <schema_name/>
  1592 + </partitioning>
  1593 + <connection>bus_control_variable</connection>
  1594 + <cache>N</cache>
  1595 + <cache_load_all>N</cache_load_all>
  1596 + <cache_size>0</cache_size>
  1597 + <lookup>
  1598 + <schema/>
  1599 + <table>bsth_c_line_information</table>
  1600 + <orderby/>
  1601 + <fail_on_multiple>N</fail_on_multiple>
  1602 + <eat_row_on_failure>N</eat_row_on_failure>
  1603 + <key>
  1604 + <name>xlid</name>
  1605 + <field>line</field>
  1606 + <condition>&#x3d;</condition>
  1607 + <name2/>
  1608 + </key>
  1609 + <value>
  1610 + <name>up_in_mileage</name>
  1611 + <rename>up_in_mileage</rename>
  1612 + <default/>
  1613 + <type>Number</type>
  1614 + </value>
  1615 + <value>
  1616 + <name>up_in_timer</name>
  1617 + <rename>up_in_timer</rename>
  1618 + <default/>
  1619 + <type>Number</type>
  1620 + </value>
  1621 + <value>
  1622 + <name>down_in_mileage</name>
  1623 + <rename>down_in_mileage</rename>
  1624 + <default/>
  1625 + <type>Number</type>
  1626 + </value>
  1627 + <value>
  1628 + <name>down_in_timer</name>
  1629 + <rename>down_in_timer</rename>
  1630 + <default/>
  1631 + <type>Number</type>
  1632 + </value>
  1633 + </lookup>
  1634 + <cluster_schema/>
  1635 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1636 + <xloc>553</xloc>
  1637 + <yloc>1004</yloc>
  1638 + <draw>Y</draw>
  1639 + </GUI>
  1640 + </step>
  1641 +
  1642 + <step>
  1643 + <name>&#x67e5;&#x627e;&#x7ec8;&#x70b9;&#x7ad9;&#x5173;&#x8054;</name>
  1644 + <type>DBLookup</type>
  1645 + <description/>
  1646 + <distribute>Y</distribute>
  1647 + <custom_distribution/>
  1648 + <copies>1</copies>
  1649 + <partitioning>
  1650 + <method>none</method>
  1651 + <schema_name/>
  1652 + </partitioning>
  1653 + <connection>bus_control_variable</connection>
  1654 + <cache>N</cache>
  1655 + <cache_load_all>N</cache_load_all>
  1656 + <cache_size>0</cache_size>
  1657 + <lookup>
  1658 + <schema/>
  1659 + <table>bsth_c_stationroute</table>
  1660 + <orderby/>
  1661 + <fail_on_multiple>N</fail_on_multiple>
  1662 + <eat_row_on_failure>N</eat_row_on_failure>
  1663 + <key>
  1664 + <name>xlid</name>
  1665 + <field>line</field>
  1666 + <condition>&#x3d;</condition>
  1667 + <name2/>
  1668 + </key>
  1669 + <key>
  1670 + <name>sxx</name>
  1671 + <field>directions</field>
  1672 + <condition>&#x3d;</condition>
  1673 + <name2/>
  1674 + </key>
  1675 + <key>
  1676 + <name>endZdtype</name>
  1677 + <field>station_mark</field>
  1678 + <condition>&#x3d;</condition>
  1679 + <name2/>
  1680 + </key>
  1681 + <value>
  1682 + <name>station_name</name>
  1683 + <rename>zdzname</rename>
  1684 + <default/>
  1685 + <type>String</type>
  1686 + </value>
  1687 + <value>
  1688 + <name>station</name>
  1689 + <rename>zdzid</rename>
  1690 + <default/>
  1691 + <type>Integer</type>
  1692 + </value>
  1693 + </lookup>
  1694 + <cluster_schema/>
  1695 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1696 + <xloc>280</xloc>
  1697 + <yloc>404</yloc>
  1698 + <draw>Y</draw>
  1699 + </GUI>
  1700 + </step>
  1701 +
  1702 + <step>
  1703 + <name>&#x67e5;&#x627e;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x5e76;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>
  1704 + <type>DBLookup</type>
  1705 + <description/>
  1706 + <distribute>Y</distribute>
  1707 + <custom_distribution/>
  1708 + <copies>1</copies>
  1709 + <partitioning>
  1710 + <method>none</method>
  1711 + <schema_name/>
  1712 + </partitioning>
  1713 + <connection>bus_control_variable</connection>
  1714 + <cache>N</cache>
  1715 + <cache_load_all>N</cache_load_all>
  1716 + <cache_size>0</cache_size>
  1717 + <lookup>
  1718 + <schema/>
  1719 + <table>bsth_c_stationroute</table>
  1720 + <orderby/>
  1721 + <fail_on_multiple>N</fail_on_multiple>
  1722 + <eat_row_on_failure>N</eat_row_on_failure>
  1723 + <key>
  1724 + <name>xlid</name>
  1725 + <field>line</field>
  1726 + <condition>&#x3d;</condition>
  1727 + <name2/>
  1728 + </key>
  1729 + <key>
  1730 + <name>qdzname</name>
  1731 + <field>station_name</field>
  1732 + <condition>&#x3d;</condition>
  1733 + <name2/>
  1734 + </key>
  1735 + <key>
  1736 + <name>sendZdtype</name>
  1737 + <field>station_mark</field>
  1738 + <condition>&#x3d;</condition>
  1739 + <name2/>
  1740 + </key>
  1741 + <value>
  1742 + <name>station</name>
  1743 + <rename>qdzid</rename>
  1744 + <default/>
  1745 + <type>Integer</type>
  1746 + </value>
  1747 + <value>
  1748 + <name>directions</name>
  1749 + <rename>sxx</rename>
  1750 + <default/>
  1751 + <type>Integer</type>
  1752 + </value>
  1753 + </lookup>
  1754 + <cluster_schema/>
  1755 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1756 + <xloc>430</xloc>
  1757 + <yloc>403</yloc>
  1758 + <draw>Y</draw>
  1759 + </GUI>
  1760 + </step>
  1761 +
  1762 + <step>
  1763 + <name>&#x67e5;&#x627e;&#x8def;&#x724c;&#x5173;&#x8054;</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_s_gbi</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>xl</field>
  1786 + <condition>&#x3d;</condition>
  1787 + <name2/>
  1788 + </key>
  1789 + <key>
  1790 + <name>lp</name>
  1791 + <field>lp_name</field>
  1792 + <condition>&#x3d;</condition>
  1793 + <name2/>
  1794 + </key>
  1795 + <value>
  1796 + <name>id</name>
  1797 + <rename>lpid</rename>
  1798 + <default/>
  1799 + <type>Integer</type>
  1800 + </value>
  1801 + </lookup>
  1802 + <cluster_schema/>
  1803 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1804 + <xloc>1013</xloc>
  1805 + <yloc>265</yloc>
  1806 + <draw>Y</draw>
  1807 + </GUI>
  1808 + </step>
  1809 +
  1810 + <step>
  1811 + <name>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x4e0a;&#x4e00;&#x4e2a;&#x73ed;&#x6b21;&#x7684;&#x7ebf;&#x8def;&#x65b9;&#x5411;</name>
  1812 + <type>DBLookup</type>
  1813 + <description/>
  1814 + <distribute>Y</distribute>
  1815 + <custom_distribution/>
  1816 + <copies>1</copies>
  1817 + <partitioning>
  1818 + <method>none</method>
  1819 + <schema_name/>
  1820 + </partitioning>
  1821 + <connection>bus_control_variable</connection>
  1822 + <cache>N</cache>
  1823 + <cache_load_all>N</cache_load_all>
  1824 + <cache_size>0</cache_size>
  1825 + <lookup>
  1826 + <schema/>
  1827 + <table>bsth_c_stationroute</table>
  1828 + <orderby/>
  1829 + <fail_on_multiple>N</fail_on_multiple>
  1830 + <eat_row_on_failure>N</eat_row_on_failure>
  1831 + <key>
  1832 + <name>xlid</name>
  1833 + <field>line</field>
  1834 + <condition>&#x3d;</condition>
  1835 + <name2/>
  1836 + </key>
  1837 + <key>
  1838 + <name>startZdtype_calcu</name>
  1839 + <field>station_mark</field>
  1840 + <condition>&#x3d;</condition>
  1841 + <name2/>
  1842 + </key>
  1843 + <key>
  1844 + <name>qdzname_calcu</name>
  1845 + <field>station_name</field>
  1846 + <condition>&#x3d;</condition>
  1847 + <name2/>
  1848 + </key>
  1849 + <value>
  1850 + <name>directions</name>
  1851 + <rename>sxx</rename>
  1852 + <default/>
  1853 + <type>String</type>
  1854 + </value>
  1855 + </lookup>
  1856 + <cluster_schema/>
  1857 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1858 + <xloc>548</xloc>
  1859 + <yloc>610</yloc>
  1860 + <draw>Y</draw>
  1861 + </GUI>
  1862 + </step>
  1863 +
  1864 + <step>
  1865 + <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>
  1866 + <type>DBLookup</type>
  1867 + <description/>
  1868 + <distribute>Y</distribute>
  1869 + <custom_distribution/>
  1870 + <copies>1</copies>
  1871 + <partitioning>
  1872 + <method>none</method>
  1873 + <schema_name/>
  1874 + </partitioning>
  1875 + <connection>bus_control_variable</connection>
  1876 + <cache>N</cache>
  1877 + <cache_load_all>N</cache_load_all>
  1878 + <cache_size>0</cache_size>
  1879 + <lookup>
  1880 + <schema/>
  1881 + <table>bsth_c_stationroute</table>
  1882 + <orderby/>
  1883 + <fail_on_multiple>N</fail_on_multiple>
  1884 + <eat_row_on_failure>N</eat_row_on_failure>
  1885 + <key>
  1886 + <name>xlid</name>
  1887 + <field>line</field>
  1888 + <condition>&#x3d;</condition>
  1889 + <name2/>
  1890 + </key>
  1891 + <key>
  1892 + <name>endZdtype_calcu</name>
  1893 + <field>station_mark</field>
  1894 + <condition>&#x3d;</condition>
  1895 + <name2/>
  1896 + </key>
  1897 + <key>
  1898 + <name>sxx</name>
  1899 + <field>directions</field>
  1900 + <condition>&#x3d;</condition>
  1901 + <name2/>
  1902 + </key>
  1903 + <value>
  1904 + <name>station_name</name>
  1905 + <rename>zdzname_calcu</rename>
  1906 + <default/>
  1907 + <type>Integer</type>
  1908 + </value>
  1909 + </lookup>
  1910 + <cluster_schema/>
  1911 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1912 + <xloc>550</xloc>
  1913 + <yloc>701</yloc>
  1914 + <draw>Y</draw>
  1915 + </GUI>
  1916 + </step>
  1917 +
  1918 + <step>
  1919 + <name>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>
  1920 + <type>DBLookup</type>
  1921 + <description/>
  1922 + <distribute>Y</distribute>
  1923 + <custom_distribution/>
  1924 + <copies>1</copies>
  1925 + <partitioning>
  1926 + <method>none</method>
  1927 + <schema_name/>
  1928 + </partitioning>
  1929 + <connection>bus_control_variable</connection>
  1930 + <cache>N</cache>
  1931 + <cache_load_all>N</cache_load_all>
  1932 + <cache_size>0</cache_size>
  1933 + <lookup>
  1934 + <schema/>
  1935 + <table>bsth_c_stationroute</table>
  1936 + <orderby/>
  1937 + <fail_on_multiple>N</fail_on_multiple>
  1938 + <eat_row_on_failure>N</eat_row_on_failure>
  1939 + <key>
  1940 + <name>xlid</name>
  1941 + <field>line</field>
  1942 + <condition>&#x3d;</condition>
  1943 + <name2/>
  1944 + </key>
  1945 + <key>
  1946 + <name>zdzname_calcu</name>
  1947 + <field>station_name</field>
  1948 + <condition>&#x3d;</condition>
  1949 + <name2/>
  1950 + </key>
  1951 + <key>
  1952 + <name>startZdtype_calcu</name>
  1953 + <field>station_mark</field>
  1954 + <condition>&#x3d;</condition>
  1955 + <name2/>
  1956 + </key>
  1957 + <value>
  1958 + <name>directions</name>
  1959 + <rename>sxx2</rename>
  1960 + <default/>
  1961 + <type>Integer</type>
  1962 + </value>
  1963 + <value>
  1964 + <name>station</name>
  1965 + <rename>qdzid</rename>
  1966 + <default/>
  1967 + <type>Integer</type>
  1968 + </value>
  1969 + </lookup>
  1970 + <cluster_schema/>
  1971 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1972 + <xloc>551</xloc>
  1973 + <yloc>782</yloc>
  1974 + <draw>Y</draw>
  1975 + </GUI>
  1976 + </step>
  1977 +
  1978 + <step>
  1979 + <name>&#x6b63;&#x5e38;&#x73ed;&#x6b21;_&#x5904;&#x7406;&#x6570;&#x636e;</name>
  1980 + <type>ScriptValueMod</type>
  1981 + <description/>
  1982 + <distribute>Y</distribute>
  1983 + <custom_distribution/>
  1984 + <copies>1</copies>
  1985 + <partitioning>
  1986 + <method>none</method>
  1987 + <schema_name/>
  1988 + </partitioning>
  1989 + <compatible>N</compatible>
  1990 + <optimizationLevel>9</optimizationLevel>
  1991 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  1992 + <jsScript_name>Script 1</jsScript_name>
  1993 + <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;</jsScript_script>
  1994 + </jsScript> </jsScripts> <fields> <field> <name>sendZdtype</name>
  1995 + <rename>sendZdtype</rename>
  1996 + <type>String</type>
  1997 + <length>-1</length>
  1998 + <precision>-1</precision>
  1999 + <replace>N</replace>
  2000 + </field> <field> <name>endZdtype</name>
  2001 + <rename>endZdtype</rename>
  2002 + <type>String</type>
  2003 + <length>-1</length>
  2004 + <precision>-1</precision>
  2005 + <replace>N</replace>
  2006 + </field> </fields> <cluster_schema/>
  2007 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2008 + <xloc>588</xloc>
  2009 + <yloc>403</yloc>
  2010 + <draw>Y</draw>
  2011 + </GUI>
  2012 + </step>
  2013 +
  2014 + <step>
  2015 + <name>&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6570;&#x636e;</name>
  2016 + <type>Dummy</type>
  2017 + <description/>
  2018 + <distribute>Y</distribute>
  2019 + <custom_distribution/>
  2020 + <copies>1</copies>
  2021 + <partitioning>
  2022 + <method>none</method>
  2023 + <schema_name/>
  2024 + </partitioning>
  2025 + <cluster_schema/>
  2026 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2027 + <xloc>725</xloc>
  2028 + <yloc>404</yloc>
  2029 + <draw>Y</draw>
  2030 + </GUI>
  2031 + </step>
  2032 +
  2033 + <step>
  2034 + <name>&#x6dfb;&#x52a0;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;</name>
  2035 + <type>GroupBy</type>
  2036 + <description/>
  2037 + <distribute>Y</distribute>
  2038 + <custom_distribution/>
  2039 + <copies>1</copies>
  2040 + <partitioning>
  2041 + <method>none</method>
  2042 + <schema_name/>
  2043 + </partitioning>
  2044 + <all_rows>Y</all_rows>
  2045 + <ignore_aggregate>N</ignore_aggregate>
  2046 + <field_ignore/>
  2047 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  2048 + <prefix>grp</prefix>
  2049 + <add_linenr>Y</add_linenr>
  2050 + <linenr_fieldname>fcno</linenr_fieldname>
  2051 + <give_back_row>N</give_back_row>
  2052 + <group>
  2053 + <field>
  2054 + <name>lp</name>
  2055 + </field>
  2056 + </group>
  2057 + <fields>
  2058 + </fields>
  2059 + <cluster_schema/>
  2060 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2061 + <xloc>442</xloc>
  2062 + <yloc>44</yloc>
  2063 + <draw>Y</draw>
  2064 + </GUI>
  2065 + </step>
  2066 +
  2067 + <step>
  2068 + <name>&#x6dfb;&#x52a0;&#x5bf9;&#x5e94;&#x73ed;&#x6b21;&#x6570;</name>
  2069 + <type>GroupBy</type>
  2070 + <description/>
  2071 + <distribute>Y</distribute>
  2072 + <custom_distribution/>
  2073 + <copies>1</copies>
  2074 + <partitioning>
  2075 + <method>none</method>
  2076 + <schema_name/>
  2077 + </partitioning>
  2078 + <all_rows>Y</all_rows>
  2079 + <ignore_aggregate>N</ignore_aggregate>
  2080 + <field_ignore/>
  2081 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  2082 + <prefix>grp</prefix>
  2083 + <add_linenr>Y</add_linenr>
  2084 + <linenr_fieldname>bcs</linenr_fieldname>
  2085 + <give_back_row>N</give_back_row>
  2086 + <group>
  2087 + </group>
  2088 + <fields>
  2089 + </fields>
  2090 + <cluster_schema/>
  2091 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2092 + <xloc>692</xloc>
  2093 + <yloc>44</yloc>
  2094 + <draw>Y</draw>
  2095 + </GUI>
  2096 + </step>
  2097 +
  2098 + <step>
  2099 + <name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</name>
  2100 + <type>Normaliser</type>
  2101 + <description/>
  2102 + <distribute>Y</distribute>
  2103 + <custom_distribution/>
  2104 + <copies>1</copies>
  2105 + <partitioning>
  2106 + <method>none</method>
  2107 + <schema_name/>
  2108 + </partitioning>
  2109 + <typefield>&#x7ad9;&#x70b9;&#x540d;&#x79f0;</typefield>
  2110 + <fields> </fields> <cluster_schema/>
  2111 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2112 + <xloc>248</xloc>
  2113 + <yloc>44</yloc>
  2114 + <draw>Y</draw>
  2115 + </GUI>
  2116 + </step>
  2117 +
  2118 + <step>
  2119 + <name>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178;</name>
  2120 + <type>ValueMapper</type>
  2121 + <description/>
  2122 + <distribute>Y</distribute>
  2123 + <custom_distribution/>
  2124 + <copies>1</copies>
  2125 + <partitioning>
  2126 + <method>none</method>
  2127 + <schema_name/>
  2128 + </partitioning>
  2129 + <field_to_use>bctype</field_to_use>
  2130 + <target_field>bctype_code</target_field>
  2131 + <non_match_default>&#x672a;&#x77e5;&#x7c7b;&#x578b;</non_match_default>
  2132 + <fields>
  2133 + <field>
  2134 + <source_value>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</source_value>
  2135 + <target_value>normal</target_value>
  2136 + </field>
  2137 + <field>
  2138 + <source_value>&#x51fa;&#x573a;</source_value>
  2139 + <target_value>out</target_value>
  2140 + </field>
  2141 + <field>
  2142 + <source_value>&#x8fdb;&#x573a;</source_value>
  2143 + <target_value>in</target_value>
  2144 + </field>
  2145 + <field>
  2146 + <source_value>&#x52a0;&#x6cb9;</source_value>
  2147 + <target_value>oil</target_value>
  2148 + </field>
  2149 + <field>
  2150 + <source_value>&#x4e34;&#x52a0;</source_value>
  2151 + <target_value>temp</target_value>
  2152 + </field>
  2153 + <field>
  2154 + <source_value>&#x533a;&#x95f4;</source_value>
  2155 + <target_value>region</target_value>
  2156 + </field>
  2157 + <field>
  2158 + <source_value>&#x653e;&#x7a7a;</source_value>
  2159 + <target_value>venting</target_value>
  2160 + </field>
  2161 + <field>
  2162 + <source_value>&#x653e;&#x5927;&#x7ad9;</source_value>
  2163 + <target_value>major</target_value>
  2164 + </field>
  2165 + </fields>
  2166 + <cluster_schema/>
  2167 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2168 + <xloc>149</xloc>
  2169 + <yloc>491</yloc>
  2170 + <draw>Y</draw>
  2171 + </GUI>
  2172 + </step>
  2173 +
  2174 + <step>
  2175 + <name>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 2</name>
  2176 + <type>ValueMapper</type>
  2177 + <description/>
  2178 + <distribute>Y</distribute>
  2179 + <custom_distribution/>
  2180 + <copies>1</copies>
  2181 + <partitioning>
  2182 + <method>none</method>
  2183 + <schema_name/>
  2184 + </partitioning>
  2185 + <field_to_use>bctype</field_to_use>
  2186 + <target_field>bctype_code</target_field>
  2187 + <non_match_default>&#x672a;&#x77e5;&#x7c7b;&#x578b;</non_match_default>
  2188 + <fields>
  2189 + <field>
  2190 + <source_value>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</source_value>
  2191 + <target_value>normal</target_value>
  2192 + </field>
  2193 + <field>
  2194 + <source_value>&#x51fa;&#x573a;</source_value>
  2195 + <target_value>out</target_value>
  2196 + </field>
  2197 + <field>
  2198 + <source_value>&#x8fdb;&#x573a;</source_value>
  2199 + <target_value>in</target_value>
  2200 + </field>
  2201 + <field>
  2202 + <source_value>&#x52a0;&#x6cb9;</source_value>
  2203 + <target_value>oil</target_value>
  2204 + </field>
  2205 + <field>
  2206 + <source_value>&#x4e34;&#x52a0;</source_value>
  2207 + <target_value>temp</target_value>
  2208 + </field>
  2209 + <field>
  2210 + <source_value>&#x533a;&#x95f4;</source_value>
  2211 + <target_value>region</target_value>
  2212 + </field>
  2213 + <field>
  2214 + <source_value>&#x653e;&#x7a7a;</source_value>
  2215 + <target_value>venting</target_value>
  2216 + </field>
  2217 + <field>
  2218 + <source_value>&#x653e;&#x5927;&#x7ad9;</source_value>
  2219 + <target_value>major</target_value>
  2220 + </field>
  2221 + </fields>
  2222 + <cluster_schema/>
  2223 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2224 + <xloc>333</xloc>
  2225 + <yloc>681</yloc>
  2226 + <draw>Y</draw>
  2227 + </GUI>
  2228 + </step>
  2229 +
  2230 + <step>
  2231 + <name>&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5b57;&#x5178; 3</name>
  2232 + <type>ValueMapper</type>
  2233 + <description/>
  2234 + <distribute>Y</distribute>
  2235 + <custom_distribution/>
  2236 + <copies>1</copies>
  2237 + <partitioning>
  2238 + <method>none</method>
  2239 + <schema_name/>
  2240 + </partitioning>
  2241 + <field_to_use>bctype</field_to_use>
  2242 + <target_field>bctype_code</target_field>
  2243 + <non_match_default>&#x672a;&#x77e5;&#x7c7b;&#x578b;</non_match_default>
  2244 + <fields>
  2245 + <field>
  2246 + <source_value>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</source_value>
  2247 + <target_value>normal</target_value>
  2248 + </field>
  2249 + <field>
  2250 + <source_value>&#x51fa;&#x573a;</source_value>
  2251 + <target_value>out</target_value>
  2252 + </field>
  2253 + <field>
  2254 + <source_value>&#x8fdb;&#x573a;</source_value>
  2255 + <target_value>in</target_value>
  2256 + </field>
  2257 + <field>
  2258 + <source_value>&#x52a0;&#x6cb9;</source_value>
  2259 + <target_value>oil</target_value>
  2260 + </field>
  2261 + <field>
  2262 + <source_value>&#x4e34;&#x52a0;</source_value>
  2263 + <target_value>temp</target_value>
  2264 + </field>
  2265 + <field>
  2266 + <source_value>&#x533a;&#x95f4;</source_value>
  2267 + <target_value>region</target_value>
  2268 + </field>
  2269 + <field>
  2270 + <source_value>&#x653e;&#x7a7a;</source_value>
  2271 + <target_value>venting</target_value>
  2272 + </field>
  2273 + <field>
  2274 + <source_value>&#x653e;&#x5927;&#x7ad9;</source_value>
  2275 + <target_value>major</target_value>
  2276 + </field>
  2277 + </fields>
  2278 + <cluster_schema/>
  2279 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2280 + <xloc>551</xloc>
  2281 + <yloc>928</yloc>
  2282 + <draw>Y</draw>
  2283 + </GUI>
  2284 + </step>
  2285 +
  2286 + <step>
  2287 + <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63;</name>
  2288 + <type>SelectValues</type>
  2289 + <description/>
  2290 + <distribute>Y</distribute>
  2291 + <custom_distribution/>
  2292 + <copies>1</copies>
  2293 + <partitioning>
  2294 + <method>none</method>
  2295 + <schema_name/>
  2296 + </partitioning>
  2297 + <fields> <select_unspecified>N</select_unspecified>
  2298 + <meta> <name>jhlc</name>
  2299 + <rename>jhlc</rename>
  2300 + <type>Number</type>
  2301 + <length>-2</length>
  2302 + <precision>-2</precision>
  2303 + <conversion_mask/>
  2304 + <date_format_lenient>false</date_format_lenient>
  2305 + <date_format_locale/>
  2306 + <date_format_timezone/>
  2307 + <lenient_string_to_number>false</lenient_string_to_number>
  2308 + <encoding/>
  2309 + <decimal_symbol/>
  2310 + <grouping_symbol/>
  2311 + <currency_symbol/>
  2312 + <storage_type/>
  2313 + </meta> <meta> <name>bcsj</name>
  2314 + <rename>bcsj</rename>
  2315 + <type>Integer</type>
  2316 + <length>-2</length>
  2317 + <precision>-2</precision>
  2318 + <conversion_mask/>
  2319 + <date_format_lenient>false</date_format_lenient>
  2320 + <date_format_locale/>
  2321 + <date_format_timezone/>
  2322 + <lenient_string_to_number>false</lenient_string_to_number>
  2323 + <encoding/>
  2324 + <decimal_symbol/>
  2325 + <grouping_symbol/>
  2326 + <currency_symbol/>
  2327 + <storage_type/>
  2328 + </meta> </fields> <cluster_schema/>
  2329 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2330 + <xloc>146</xloc>
  2331 + <yloc>768</yloc>
  2332 + <draw>Y</draw>
  2333 + </GUI>
  2334 + </step>
  2335 +
  2336 + <step>
  2337 + <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 2</name>
  2338 + <type>SelectValues</type>
  2339 + <description/>
  2340 + <distribute>Y</distribute>
  2341 + <custom_distribution/>
  2342 + <copies>1</copies>
  2343 + <partitioning>
  2344 + <method>none</method>
  2345 + <schema_name/>
  2346 + </partitioning>
  2347 + <fields> <select_unspecified>N</select_unspecified>
  2348 + <meta> <name>out_mileage</name>
  2349 + <rename>out_mileage</rename>
  2350 + <type>Number</type>
  2351 + <length>-2</length>
  2352 + <precision>-2</precision>
  2353 + <conversion_mask/>
  2354 + <date_format_lenient>false</date_format_lenient>
  2355 + <date_format_locale/>
  2356 + <date_format_timezone/>
  2357 + <lenient_string_to_number>false</lenient_string_to_number>
  2358 + <encoding/>
  2359 + <decimal_symbol/>
  2360 + <grouping_symbol/>
  2361 + <currency_symbol/>
  2362 + <storage_type/>
  2363 + </meta> <meta> <name>out_time</name>
  2364 + <rename>out_time</rename>
  2365 + <type>Integer</type>
  2366 + <length>-2</length>
  2367 + <precision>-2</precision>
  2368 + <conversion_mask/>
  2369 + <date_format_lenient>false</date_format_lenient>
  2370 + <date_format_locale/>
  2371 + <date_format_timezone/>
  2372 + <lenient_string_to_number>false</lenient_string_to_number>
  2373 + <encoding/>
  2374 + <decimal_symbol/>
  2375 + <grouping_symbol/>
  2376 + <currency_symbol/>
  2377 + <storage_type/>
  2378 + </meta> </fields> <cluster_schema/>
  2379 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2380 + <xloc>338</xloc>
  2381 + <yloc>949</yloc>
  2382 + <draw>Y</draw>
  2383 + </GUI>
  2384 + </step>
  2385 +
  2386 + <step>
  2387 + <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 3</name>
  2388 + <type>SelectValues</type>
  2389 + <description/>
  2390 + <distribute>Y</distribute>
  2391 + <custom_distribution/>
  2392 + <copies>1</copies>
  2393 + <partitioning>
  2394 + <method>none</method>
  2395 + <schema_name/>
  2396 + </partitioning>
  2397 + <fields> <select_unspecified>N</select_unspecified>
  2398 + <meta> <name>parade_mileage</name>
  2399 + <rename>parade_mileage</rename>
  2400 + <type>Number</type>
  2401 + <length>-2</length>
  2402 + <precision>-2</precision>
  2403 + <conversion_mask/>
  2404 + <date_format_lenient>false</date_format_lenient>
  2405 + <date_format_locale/>
  2406 + <date_format_timezone/>
  2407 + <lenient_string_to_number>false</lenient_string_to_number>
  2408 + <encoding/>
  2409 + <decimal_symbol/>
  2410 + <grouping_symbol/>
  2411 + <currency_symbol/>
  2412 + <storage_type/>
  2413 + </meta> <meta> <name>parade_time</name>
  2414 + <rename>parade_time</rename>
  2415 + <type>Integer</type>
  2416 + <length>-2</length>
  2417 + <precision>-2</precision>
  2418 + <conversion_mask/>
  2419 + <date_format_lenient>false</date_format_lenient>
  2420 + <date_format_locale/>
  2421 + <date_format_timezone/>
  2422 + <lenient_string_to_number>false</lenient_string_to_number>
  2423 + <encoding/>
  2424 + <decimal_symbol/>
  2425 + <grouping_symbol/>
  2426 + <currency_symbol/>
  2427 + <storage_type/>
  2428 + </meta> </fields> <cluster_schema/>
  2429 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2430 + <xloc>875</xloc>
  2431 + <yloc>1001</yloc>
  2432 + <draw>Y</draw>
  2433 + </GUI>
  2434 + </step>
  2435 +
  2436 + <step>
  2437 + <name>&#x8ba1;&#x7b97;&#x73ed;&#x6b21;&#x7c7b;&#x578b;</name>
  2438 + <type>ValueMapper</type>
  2439 + <description/>
  2440 + <distribute>Y</distribute>
  2441 + <custom_distribution/>
  2442 + <copies>1</copies>
  2443 + <partitioning>
  2444 + <method>none</method>
  2445 + <schema_name/>
  2446 + </partitioning>
  2447 + <field_to_use>qdzname</field_to_use>
  2448 + <target_field>bctype</target_field>
  2449 + <non_match_default>&#x6b63;&#x5e38;&#x73ed;&#x6b21;</non_match_default>
  2450 + <fields>
  2451 + <field>
  2452 + <source_value>&#x51fa;&#x573a;</source_value>
  2453 + <target_value>&#x51fa;&#x573a;</target_value>
  2454 + </field>
  2455 + <field>
  2456 + <source_value>&#x8fdb;&#x573a;</source_value>
  2457 + <target_value>&#x8fdb;&#x573a;</target_value>
  2458 + </field>
  2459 + </fields>
  2460 + <cluster_schema/>
  2461 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2462 + <xloc>1014</xloc>
  2463 + <yloc>401</yloc>
  2464 + <draw>Y</draw>
  2465 + </GUI>
  2466 + </step>
  2467 +
  2468 + <step>
  2469 + <name>&#x8bb0;&#x5f55;&#x5173;&#x8054; &#x28;&#x7b1b;&#x5361;&#x5c14;&#x8f93;&#x51fa;&#x29;</name>
  2470 + <type>JoinRows</type>
  2471 + <description/>
  2472 + <distribute>Y</distribute>
  2473 + <custom_distribution/>
  2474 + <copies>1</copies>
  2475 + <partitioning>
  2476 + <method>none</method>
  2477 + <schema_name/>
  2478 + </partitioning>
  2479 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  2480 + <prefix>out</prefix>
  2481 + <cache_size>500</cache_size>
  2482 + <main/>
  2483 + <compare>
  2484 +<condition>
  2485 + <negated>N</negated>
  2486 + <leftvalue/>
  2487 + <function>&#x3d;</function>
  2488 + <rightvalue/>
  2489 + </condition>
  2490 + </compare>
  2491 + <cluster_schema/>
  2492 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2493 + <xloc>310</xloc>
  2494 + <yloc>133</yloc>
  2495 + <draw>Y</draw>
  2496 + </GUI>
  2497 + </step>
  2498 +
  2499 + <step>
  2500 + <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;&#xff08;&#x53d1;&#x8f66;&#x65f6;&#x95f4;&#x4e3a;&#x7a7a;&#xff09;</name>
  2501 + <type>FilterRows</type>
  2502 + <description/>
  2503 + <distribute>Y</distribute>
  2504 + <custom_distribution/>
  2505 + <copies>1</copies>
  2506 + <partitioning>
  2507 + <method>none</method>
  2508 + <schema_name/>
  2509 + </partitioning>
  2510 +<send_true_to/>
  2511 +<send_false_to/>
  2512 + <compare>
  2513 +<condition>
  2514 + <negated>N</negated>
  2515 + <leftvalue>sendtime</leftvalue>
  2516 + <function>IS NOT NULL</function>
  2517 + <rightvalue/>
  2518 + </condition>
  2519 + </compare>
  2520 + <cluster_schema/>
  2521 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2522 + <xloc>571</xloc>
  2523 + <yloc>44</yloc>
  2524 + <draw>Y</draw>
  2525 + </GUI>
  2526 + </step>
  2527 +
  2528 + <step>
  2529 + <name>&#x8fdb;&#x573a;&#x73ed;&#x6b21;_&#x786e;&#x5b9a;&#x8d77;&#x70b9;&#x7ad9;&#x540d;&#x5b57;</name>
  2530 + <type>ScriptValueMod</type>
  2531 + <description/>
  2532 + <distribute>Y</distribute>
  2533 + <custom_distribution/>
  2534 + <copies>1</copies>
  2535 + <partitioning>
  2536 + <method>none</method>
  2537 + <schema_name/>
  2538 + </partitioning>
  2539 + <compatible>N</compatible>
  2540 + <optimizationLevel>9</optimizationLevel>
  2541 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  2542 + <jsScript_name>Script 1</jsScript_name>
  2543 + <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;</jsScript_script>
  2544 + </jsScript> </jsScripts> <fields> <field> <name>qdzname_calcu</name>
  2545 + <rename>qdzname_calcu</rename>
  2546 + <type>String</type>
  2547 + <length>-1</length>
  2548 + <precision>-1</precision>
  2549 + <replace>N</replace>
  2550 + </field> <field> <name>startZdtype_calcu</name>
  2551 + <rename>startZdtype_calcu</rename>
  2552 + <type>String</type>
  2553 + <length>-1</length>
  2554 + <precision>-1</precision>
  2555 + <replace>N</replace>
  2556 + </field> <field> <name>endZdtype_calcu</name>
  2557 + <rename>endZdtype_calcu</rename>
  2558 + <type>String</type>
  2559 + <length>-1</length>
  2560 + <precision>-1</precision>
  2561 + <replace>N</replace>
  2562 + </field> </fields> <cluster_schema/>
  2563 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2564 + <xloc>754</xloc>
  2565 + <yloc>610</yloc>
  2566 + <draw>Y</draw>
  2567 + </GUI>
  2568 + </step>
  2569 +
  2570 + <step>
  2571 + <name>&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x6570;&#x636e;</name>
  2572 + <type>Dummy</type>
  2573 + <description/>
  2574 + <distribute>Y</distribute>
  2575 + <custom_distribution/>
  2576 + <copies>1</copies>
  2577 + <partitioning>
  2578 + <method>none</method>
  2579 + <schema_name/>
  2580 + </partitioning>
  2581 + <cluster_schema/>
  2582 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2583 + <xloc>997</xloc>
  2584 + <yloc>606</yloc>
  2585 + <draw>Y</draw>
  2586 + </GUI>
  2587 + </step>
  2588 +
  2589 + <step_error_handling>
  2590 + </step_error_handling>
  2591 + <slave-step-copy-partition-distribution>
  2592 +</slave-step-copy-partition-distribution>
  2593 + <slave_transformation>N</slave_transformation>
  2594 +
  2595 +</transformation>
src/main/resources/datatools/ktrs/ttinfodetailMetaData.ktr
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<transformation>  
3 - <info>  
4 - <name>ttinfodetailMetaData</name>  
5 - <description/>  
6 - <extended_description/>  
7 - <trans_version/>  
8 - <trans_type>Normal</trans_type>  
9 - <trans_status>0</trans_status>  
10 - <directory>&#x2f;</directory>  
11 - <parameters>  
12 - <parameter>  
13 - <name>erroroutputdir</name>  
14 - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project&#x2f;bsth_control_u_d_files&#x2f;erroroutput</default_value>  
15 - <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>  
16 - </parameter>  
17 - <parameter>  
18 - <name>excelfieldnames</name>  
19 - <default_value>&#x8def;&#x724c;,&#x51fa;&#x573a;,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;1,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;1,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;2,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;2,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;3,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;3,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;4,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;4,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;5,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;5,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;6,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;6,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;7,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;7,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;8,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;8,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;9,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;9,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;10,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;10,&#x8fdb;&#x573a;</default_value>  
20 - <description>&#x65f6;&#x523b;&#x8868;excel&#x8f93;&#x5165;&#x5b57;&#x6bb5;&#x540d;&#xff0c;&#x4ee5;&#x9017;&#x53f7;&#x8fde;&#x63a5;</description>  
21 - </parameter>  
22 - <parameter>  
23 - <name>filepath</name>  
24 - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project&#x2f;bsth_control_etl&#x2f;&#x95f5;&#x884c;&#x516c;&#x4ea4;&#x2f;&#x95f5;&#x884c;26&#x8def;&#x65f6;&#x523b;&#x8868;160630&#x65f6;&#x523b;&#x8868;.xls</default_value>  
25 - <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>  
26 - </parameter>  
27 - <parameter>  
28 - <name>injectktrfile</name>  
29 - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataInput.ktr</default_value>  
30 - <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>  
31 - </parameter>  
32 - <parameter>  
33 - <name>normalizefieldnames</name>  
34 - <default_value>&#x51fa;&#x573a;,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;1,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;1,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;2,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;2,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;3,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;3,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;4,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;4,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;5,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;5,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;6,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;6,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;7,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;7,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;8,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;8,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;9,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;9,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;10,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;10,&#x8fdb;&#x573a;</default_value>  
35 - <description>&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;&#x5b57;&#x6bb5;&#x540d;&#xff0c;&#x4ee5;&#x9017;&#x53f7;&#x8fde;&#x63a5;</description>  
36 - </parameter>  
37 - <parameter>  
38 - <name>tccname</name>  
39 - <default_value>&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;&#x505c;&#x8f66;&#x573a;</default_value>  
40 - <description>&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</description>  
41 - </parameter>  
42 - <parameter>  
43 - <name>ttinfoname</name>  
44 - <default_value>&#x8868;2</default_value>  
45 - <description>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;</description>  
46 - </parameter>  
47 - <parameter>  
48 - <name>xlname</name>  
49 - <default_value>&#x95f5;&#x884c;26&#x8def;</default_value>  
50 - <description>&#x7ebf;&#x8def;&#x540d;&#x79f0;</description>  
51 - </parameter>  
52 - </parameters>  
53 - <log>  
54 -<trans-log-table><connection/>  
55 -<schema/>  
56 -<table/>  
57 -<size_limit_lines/>  
58 -<interval/>  
59 -<timeout_days/>  
60 -<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>  
61 -<perf-log-table><connection/>  
62 -<schema/>  
63 -<table/>  
64 -<interval/>  
65 -<timeout_days/>  
66 -<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>  
67 -<channel-log-table><connection/>  
68 -<schema/>  
69 -<table/>  
70 -<timeout_days/>  
71 -<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>  
72 -<step-log-table><connection/>  
73 -<schema/>  
74 -<table/>  
75 -<timeout_days/>  
76 -<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>  
77 -<metrics-log-table><connection/>  
78 -<schema/>  
79 -<table/>  
80 -<timeout_days/>  
81 -<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>  
82 - </log>  
83 - <maxdate>  
84 - <connection/>  
85 - <table/>  
86 - <field/>  
87 - <offset>0.0</offset>  
88 - <maxdiff>0.0</maxdiff>  
89 - </maxdate>  
90 - <size_rowset>10000</size_rowset>  
91 - <sleep_time_empty>50</sleep_time_empty>  
92 - <sleep_time_full>50</sleep_time_full>  
93 - <unique_connections>N</unique_connections>  
94 - <feedback_shown>Y</feedback_shown>  
95 - <feedback_size>50000</feedback_size>  
96 - <using_thread_priorities>Y</using_thread_priorities>  
97 - <shared_objects_file/>  
98 - <capture_step_performance>N</capture_step_performance>  
99 - <step_performance_capturing_delay>1000</step_performance_capturing_delay>  
100 - <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>  
101 - <dependencies>  
102 - </dependencies>  
103 - <partitionschemas>  
104 - </partitionschemas>  
105 - <slaveservers>  
106 - </slaveservers>  
107 - <clusterschemas>  
108 - </clusterschemas>  
109 - <created_user>-</created_user>  
110 - <created_date>2016&#x2f;07&#x2f;01 09&#x3a;55&#x3a;32.649</created_date>  
111 - <modified_user>-</modified_user>  
112 - <modified_date>2016&#x2f;07&#x2f;01 09&#x3a;55&#x3a;32.649</modified_date>  
113 - <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>  
114 - <is_key_private>N</is_key_private>  
115 - </info>  
116 - <notepads>  
117 - </notepads>  
118 - <connection>  
119 - <name>bus_control_variable</name>  
120 - <server>&#x24;&#x7b;v_db_ip&#x7d;</server>  
121 - <type>MYSQL</type>  
122 - <access>Native</access>  
123 - <database>&#x24;&#x7b;v_db_dname&#x7d;</database>  
124 - <port>3306</port>  
125 - <username>&#x24;&#x7b;v_db_uname&#x7d;</username>  
126 - <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>  
127 - <servername/>  
128 - <data_tablespace/>  
129 - <index_tablespace/>  
130 - <attributes>  
131 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
132 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
133 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
134 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
135 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
136 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
137 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
138 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
139 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
140 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
141 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
142 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
143 - </attributes>  
144 - </connection>  
145 - <connection>  
146 - <name>bus_control_&#x516c;&#x53f8;_201</name>  
147 - <server>localhost</server>  
148 - <type>MYSQL</type>  
149 - <access>Native</access>  
150 - <database>control</database>  
151 - <port>3306</port>  
152 - <username>root</username>  
153 - <password>Encrypted </password>  
154 - <servername/>  
155 - <data_tablespace/>  
156 - <index_tablespace/>  
157 - <attributes>  
158 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
159 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
160 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
161 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
162 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
163 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
164 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
165 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
166 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
167 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
168 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
169 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
170 - </attributes>  
171 - </connection>  
172 - <connection>  
173 - <name>bus_control_&#x672c;&#x673a;</name>  
174 - <server>localhost</server>  
175 - <type>MYSQL</type>  
176 - <access>Native</access>  
177 - <database>control</database>  
178 - <port>3306</port>  
179 - <username>root</username>  
180 - <password>Encrypted </password>  
181 - <servername/>  
182 - <data_tablespace/>  
183 - <index_tablespace/>  
184 - <attributes>  
185 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
186 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
187 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
188 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
189 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
190 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
191 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
192 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
193 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
194 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
195 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
196 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
197 - </attributes>  
198 - </connection>  
199 - <connection>  
200 - <name>xlab_mysql_youle</name>  
201 - <server>101.231.124.8</server>  
202 - <type>MYSQL</type>  
203 - <access>Native</access>  
204 - <database>xlab_youle</database>  
205 - <port>45687</port>  
206 - <username>xlab-youle</username>  
207 - <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>  
208 - <servername/>  
209 - <data_tablespace/>  
210 - <index_tablespace/>  
211 - <attributes>  
212 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
213 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
214 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
215 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
216 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
217 - <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>  
218 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
219 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
220 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
221 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
222 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
223 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
224 - </attributes>  
225 - </connection>  
226 - <connection>  
227 - <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>  
228 - <server>localhost</server>  
229 - <type>MYSQL</type>  
230 - <access>Native</access>  
231 - <database>xlab_youle</database>  
232 - <port>3306</port>  
233 - <username>root</username>  
234 - <password>Encrypted </password>  
235 - <servername/>  
236 - <data_tablespace/>  
237 - <index_tablespace/>  
238 - <attributes>  
239 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
240 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
241 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
242 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
243 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
244 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
245 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
246 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
247 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
248 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
249 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
250 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
251 - </attributes>  
252 - </connection>  
253 - <connection>  
254 - <name>xlab_youle</name>  
255 - <server/>  
256 - <type>MYSQL</type>  
257 - <access>JNDI</access>  
258 - <database>xlab_youle</database>  
259 - <port>1521</port>  
260 - <username/>  
261 - <password>Encrypted </password>  
262 - <servername/>  
263 - <data_tablespace/>  
264 - <index_tablespace/>  
265 - <attributes>  
266 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
267 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
268 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
269 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
270 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
271 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
272 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
273 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
274 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
275 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
276 - </attributes>  
277 - </connection>  
278 - <order>  
279 - <hop> <from>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
280 - <hop> <from>&#x83b7;&#x53d6;excel&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</from><to>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</to><enabled>Y</enabled> </hop>  
281 - <hop> <from>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</from><to>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>  
282 - <hop> <from>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
283 - <hop> <from>&#x83b7;&#x53d6;normalize&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</from><to>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</to><enabled>Y</enabled> </hop>  
284 - <hop> <from>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</from><to>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>  
285 - <hop> <from>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
286 - <hop> <from>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>  
287 - <hop> <from>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</to><enabled>Y</enabled> </hop>  
288 - <hop> <from>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</from><to>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>  
289 - <hop> <from>&#x83b7;&#x53d6;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>  
290 - <hop> <from>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </to><enabled>Y</enabled> </hop>  
291 - <hop> <from>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </from><to>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>  
292 - <hop> <from>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>  
293 - <hop> <from>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</to><enabled>Y</enabled> </hop>  
294 - <hop> <from>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</from><to>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>  
295 - <hop> <from>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>  
296 - <hop> <from>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>  
297 - <hop> <from>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>  
298 - <hop> <from>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
299 - </order>  
300 - <step>  
301 - <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>  
302 - <type>MetaInject</type>  
303 - <description/>  
304 - <distribute>Y</distribute>  
305 - <custom_distribution/>  
306 - <copies>1</copies>  
307 - <partitioning>  
308 - <method>none</method>  
309 - <schema_name/>  
310 - </partitioning>  
311 - <specification_method>filename</specification_method>  
312 - <trans_object_id/>  
313 - <trans_name/>  
314 - <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>  
315 - <directory_path/>  
316 - <source_step/>  
317 - <source_output_fields> </source_output_fields> <target_file/>  
318 - <no_execution>N</no_execution>  
319 - <stream_source_step/>  
320 - <stream_target_step/>  
321 - <mappings> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
322 - <target_attribute_key>FORMAT</target_attribute_key>  
323 - <target_detail>Y</target_detail>  
324 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
325 - <source_field>format</source_field>  
326 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
327 - <target_attribute_key>REPEAT</target_attribute_key>  
328 - <target_detail>Y</target_detail>  
329 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
330 - <source_field>repeat</source_field>  
331 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
332 - <target_attribute_key>TRIM_TYPE</target_attribute_key>  
333 - <target_detail>Y</target_detail>  
334 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
335 - <source_field>trim_type</source_field>  
336 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
337 - <target_attribute_key>FILENAME</target_attribute_key>  
338 - <target_detail>Y</target_detail>  
339 - <source_step>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</source_step>  
340 - <source_field>filepath_</source_field>  
341 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
342 - <target_attribute_key>PRECISION</target_attribute_key>  
343 - <target_detail>Y</target_detail>  
344 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
345 - <source_field>precision</source_field>  
346 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
347 - <target_attribute_key>TYPE</target_attribute_key>  
348 - <target_detail>Y</target_detail>  
349 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
350 - <source_field>type</source_field>  
351 - </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>  
352 - <target_attribute_key>DATA_VALUE</target_attribute_key>  
353 - <target_detail>Y</target_detail>  
354 - <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>  
355 - <source_field>col_value</source_field>  
356 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
357 - <target_attribute_key>LENGTH</target_attribute_key>  
358 - <target_detail>Y</target_detail>  
359 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
360 - <source_field>length</source_field>  
361 - </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>  
362 - <target_attribute_key>TYPE</target_attribute_key>  
363 - <target_detail>Y</target_detail>  
364 - <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>  
365 - <source_field>col_type</source_field>  
366 - </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>  
367 - <target_attribute_key>NAME</target_attribute_key>  
368 - <target_detail>Y</target_detail>  
369 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>  
370 - <source_field>fieldName</source_field>  
371 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
372 - <target_attribute_key>NAME</target_attribute_key>  
373 - <target_detail>Y</target_detail>  
374 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
375 - <source_field>fieldname</source_field>  
376 - </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>  
377 - <target_attribute_key>NAME</target_attribute_key>  
378 - <target_detail>Y</target_detail>  
379 - <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>  
380 - <source_field>nfieldname</source_field>  
381 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
382 - <target_attribute_key>LENGTH</target_attribute_key>  
383 - <target_detail>Y</target_detail>  
384 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
385 - <source_field>length</source_field>  
386 - </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>  
387 - <target_attribute_key>NAME</target_attribute_key>  
388 - <target_detail>Y</target_detail>  
389 - <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>  
390 - <source_field>col_name</source_field>  
391 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
392 - <target_attribute_key>TYPE</target_attribute_key>  
393 - <target_detail>Y</target_detail>  
394 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
395 - <source_field>fieldtype</source_field>  
396 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
397 - <target_attribute_key>NAME</target_attribute_key>  
398 - <target_detail>Y</target_detail>  
399 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
400 - <source_field>fieldName</source_field>  
401 - </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>  
402 - <target_attribute_key>VALUE</target_attribute_key>  
403 - <target_detail>Y</target_detail>  
404 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>  
405 - <source_field>fieldName</source_field>  
406 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
407 - <target_attribute_key>TRIM_TYPE</target_attribute_key>  
408 - <target_detail>Y</target_detail>  
409 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
410 - <source_field>trim_type</source_field>  
411 - </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>  
412 - <target_attribute_key>NORMALISED</target_attribute_key>  
413 - <target_detail>Y</target_detail>  
414 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>  
415 - <source_field>value</source_field>  
416 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
417 - <target_attribute_key>REPEAT</target_attribute_key>  
418 - <target_detail>Y</target_detail>  
419 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
420 - <source_field>repeat</source_field>  
421 - </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>  
422 - <target_attribute_key>NORMALISED</target_attribute_key>  
423 - <target_detail>Y</target_detail>  
424 - <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>  
425 - <source_field>valuefield</source_field>  
426 - </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>  
427 - <target_attribute_key>VALUE</target_attribute_key>  
428 - <target_detail>Y</target_detail>  
429 - <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>  
430 - <source_field>nfieldname</source_field>  
431 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
432 - <target_attribute_key>FORMAT</target_attribute_key>  
433 - <target_detail>Y</target_detail>  
434 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
435 - <source_field>format</source_field>  
436 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
437 - <target_attribute_key>PRECISION</target_attribute_key>  
438 - <target_detail>Y</target_detail>  
439 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
440 - <source_field>precision</source_field>  
441 - </mapping> </mappings> <cluster_schema/>  
442 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
443 - <xloc>695</xloc>  
444 - <yloc>177</yloc>  
445 - <draw>Y</draw>  
446 - </GUI>  
447 - </step>  
448 -  
449 - <step>  
450 - <name>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>  
451 - <type>SelectValues</type>  
452 - <description/>  
453 - <distribute>Y</distribute>  
454 - <custom_distribution/>  
455 - <copies>1</copies>  
456 - <partitioning>  
457 - <method>none</method>  
458 - <schema_name/>  
459 - </partitioning>  
460 - <fields> <field> <name>col_name</name>  
461 - <rename/>  
462 - <length>-2</length>  
463 - <precision>-2</precision>  
464 - </field> <field> <name>col_type</name>  
465 - <rename/>  
466 - <length>-2</length>  
467 - <precision>-2</precision>  
468 - </field> <field> <name>col_value</name>  
469 - <rename/>  
470 - <length>-2</length>  
471 - <precision>-2</precision>  
472 - </field> <select_unspecified>N</select_unspecified>  
473 - </fields> <cluster_schema/>  
474 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
475 - <xloc>490</xloc>  
476 - <yloc>429</yloc>  
477 - <draw>Y</draw>  
478 - </GUI>  
479 - </step>  
480 -  
481 - <step>  
482 - <name>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</name>  
483 - <type>Dummy</type>  
484 - <description/>  
485 - <distribute>Y</distribute>  
486 - <custom_distribution/>  
487 - <copies>1</copies>  
488 - <partitioning>  
489 - <method>none</method>  
490 - <schema_name/>  
491 - </partitioning>  
492 - <cluster_schema/>  
493 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
494 - <xloc>702</xloc>  
495 - <yloc>383</yloc>  
496 - <draw>Y</draw>  
497 - </GUI>  
498 - </step>  
499 -  
500 - <step>  
501 - <name>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</name>  
502 - <type>Constant</type>  
503 - <description/>  
504 - <distribute>Y</distribute>  
505 - <custom_distribution/>  
506 - <copies>1</copies>  
507 - <partitioning>  
508 - <method>none</method>  
509 - <schema_name/>  
510 - </partitioning>  
511 - <fields>  
512 - <field>  
513 - <name>fieldtype</name>  
514 - <type>String</type>  
515 - <format/>  
516 - <currency/>  
517 - <decimal/>  
518 - <group/>  
519 - <nullif>String</nullif>  
520 - <length>-1</length>  
521 - <precision>-1</precision>  
522 - <set_empty_string>N</set_empty_string>  
523 - </field>  
524 - <field>  
525 - <name>length</name>  
526 - <type>String</type>  
527 - <format/>  
528 - <currency/>  
529 - <decimal/>  
530 - <group/>  
531 - <nullif>-1</nullif>  
532 - <length>-1</length>  
533 - <precision>-1</precision>  
534 - <set_empty_string>N</set_empty_string>  
535 - </field>  
536 - <field>  
537 - <name>precision</name>  
538 - <type>String</type>  
539 - <format/>  
540 - <currency/>  
541 - <decimal/>  
542 - <group/>  
543 - <nullif>-1</nullif>  
544 - <length>-1</length>  
545 - <precision>-1</precision>  
546 - <set_empty_string>N</set_empty_string>  
547 - </field>  
548 - <field>  
549 - <name>trim_type</name>  
550 - <type>String</type>  
551 - <format/>  
552 - <currency/>  
553 - <decimal/>  
554 - <group/>  
555 - <nullif>none</nullif>  
556 - <length>-1</length>  
557 - <precision>-1</precision>  
558 - <set_empty_string>N</set_empty_string>  
559 - </field>  
560 - <field>  
561 - <name>repeat</name>  
562 - <type>String</type>  
563 - <format/>  
564 - <currency/>  
565 - <decimal/>  
566 - <group/>  
567 - <nullif>N</nullif>  
568 - <length>-1</length>  
569 - <precision>-1</precision>  
570 - <set_empty_string>N</set_empty_string>  
571 - </field>  
572 - <field>  
573 - <name>format</name>  
574 - <type>String</type>  
575 - <format/>  
576 - <currency/>  
577 - <decimal/>  
578 - <group/>  
579 - <nullif>&#x23;</nullif>  
580 - <length>-1</length>  
581 - <precision>-1</precision>  
582 - <set_empty_string>N</set_empty_string>  
583 - </field>  
584 - </fields>  
585 - <cluster_schema/>  
586 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
587 - <xloc>441</xloc>  
588 - <yloc>172</yloc>  
589 - <draw>Y</draw>  
590 - </GUI>  
591 - </step>  
592 -  
593 - <step>  
594 - <name>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</name>  
595 - <type>Constant</type>  
596 - <description/>  
597 - <distribute>Y</distribute>  
598 - <custom_distribution/>  
599 - <copies>1</copies>  
600 - <partitioning>  
601 - <method>none</method>  
602 - <schema_name/>  
603 - </partitioning>  
604 - <fields>  
605 - <field>  
606 - <name>valuefield</name>  
607 - <type>String</type>  
608 - <format/>  
609 - <currency/>  
610 - <decimal/>  
611 - <group/>  
612 - <nullif>&#x53d1;&#x8f66;&#x65f6;&#x95f4;</nullif>  
613 - <length>-1</length>  
614 - <precision>-1</precision>  
615 - <set_empty_string>N</set_empty_string>  
616 - </field>  
617 - </fields>  
618 - <cluster_schema/>  
619 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
620 - <xloc>447</xloc>  
621 - <yloc>257</yloc>  
622 - <draw>Y</draw>  
623 - </GUI>  
624 - </step>  
625 -  
626 - <step>  
627 - <name>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</name>  
628 - <type>Constant</type>  
629 - <description/>  
630 - <distribute>Y</distribute>  
631 - <custom_distribution/>  
632 - <copies>1</copies>  
633 - <partitioning>  
634 - <method>none</method>  
635 - <schema_name/>  
636 - </partitioning>  
637 - <fields>  
638 - <field>  
639 - <name>col_name</name>  
640 - <type>String</type>  
641 - <format/>  
642 - <currency/>  
643 - <decimal/>  
644 - <group/>  
645 - <nullif>tccname_</nullif>  
646 - <length>-1</length>  
647 - <precision>-1</precision>  
648 - <set_empty_string>N</set_empty_string>  
649 - </field>  
650 - <field>  
651 - <name>col_type</name>  
652 - <type>String</type>  
653 - <format/>  
654 - <currency/>  
655 - <decimal/>  
656 - <group/>  
657 - <nullif>String</nullif>  
658 - <length>-1</length>  
659 - <precision>-1</precision>  
660 - <set_empty_string>N</set_empty_string>  
661 - </field>  
662 - <field>  
663 - <name>col_value</name>  
664 - <type>String</type>  
665 - <format/>  
666 - <currency/>  
667 - <decimal/>  
668 - <group/>  
669 - <nullif>replace</nullif>  
670 - <length>-1</length>  
671 - <precision>-1</precision>  
672 - <set_empty_string>N</set_empty_string>  
673 - </field>  
674 - </fields>  
675 - <cluster_schema/>  
676 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
677 - <xloc>208</xloc>  
678 - <yloc>428</yloc>  
679 - <draw>Y</draw>  
680 - </GUI>  
681 - </step>  
682 -  
683 - <step>  
684 - <name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</name>  
685 - <type>Constant</type>  
686 - <description/>  
687 - <distribute>Y</distribute>  
688 - <custom_distribution/>  
689 - <copies>1</copies>  
690 - <partitioning>  
691 - <method>none</method>  
692 - <schema_name/>  
693 - </partitioning>  
694 - <fields>  
695 - <field>  
696 - <name>col_name</name>  
697 - <type>String</type>  
698 - <format/>  
699 - <currency/>  
700 - <decimal/>  
701 - <group/>  
702 - <nullif>ttinfoname_</nullif>  
703 - <length>-1</length>  
704 - <precision>-1</precision>  
705 - <set_empty_string>N</set_empty_string>  
706 - </field>  
707 - <field>  
708 - <name>col_type</name>  
709 - <type>String</type>  
710 - <format/>  
711 - <currency/>  
712 - <decimal/>  
713 - <group/>  
714 - <nullif>String</nullif>  
715 - <length>-1</length>  
716 - <precision>-1</precision>  
717 - <set_empty_string>N</set_empty_string>  
718 - </field>  
719 - <field>  
720 - <name>col_value</name>  
721 - <type>String</type>  
722 - <format/>  
723 - <currency/>  
724 - <decimal/>  
725 - <group/>  
726 - <nullif>replace</nullif>  
727 - <length>-1</length>  
728 - <precision>-1</precision>  
729 - <set_empty_string>N</set_empty_string>  
730 - </field>  
731 - </fields>  
732 - <cluster_schema/>  
733 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
734 - <xloc>216</xloc>  
735 - <yloc>508</yloc>  
736 - <draw>Y</draw>  
737 - </GUI>  
738 - </step>  
739 -  
740 - <step>  
741 - <name>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</name>  
742 - <type>Constant</type>  
743 - <description/>  
744 - <distribute>Y</distribute>  
745 - <custom_distribution/>  
746 - <copies>1</copies>  
747 - <partitioning>  
748 - <method>none</method>  
749 - <schema_name/>  
750 - </partitioning>  
751 - <fields>  
752 - <field>  
753 - <name>col_name</name>  
754 - <type>String</type>  
755 - <format/>  
756 - <currency/>  
757 - <decimal/>  
758 - <group/>  
759 - <nullif>xlname_</nullif>  
760 - <length>-1</length>  
761 - <precision>-1</precision>  
762 - <set_empty_string>N</set_empty_string>  
763 - </field>  
764 - <field>  
765 - <name>col_type</name>  
766 - <type>String</type>  
767 - <format/>  
768 - <currency/>  
769 - <decimal/>  
770 - <group/>  
771 - <nullif>String</nullif>  
772 - <length>-1</length>  
773 - <precision>-1</precision>  
774 - <set_empty_string>N</set_empty_string>  
775 - </field>  
776 - <field>  
777 - <name>col_value</name>  
778 - <type>String</type>  
779 - <format/>  
780 - <currency/>  
781 - <decimal/>  
782 - <group/>  
783 - <nullif>replace</nullif>  
784 - <length>-1</length>  
785 - <precision>-1</precision>  
786 - <set_empty_string>N</set_empty_string>  
787 - </field>  
788 - </fields>  
789 - <cluster_schema/>  
790 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
791 - <xloc>202</xloc>  
792 - <yloc>351</yloc>  
793 - <draw>Y</draw>  
794 - </GUI>  
795 - </step>  
796 -  
797 - <step>  
798 - <name>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>  
799 - <type>SelectValues</type>  
800 - <description/>  
801 - <distribute>Y</distribute>  
802 - <custom_distribution/>  
803 - <copies>1</copies>  
804 - <partitioning>  
805 - <method>none</method>  
806 - <schema_name/>  
807 - </partitioning>  
808 - <fields> <field> <name>col_name</name>  
809 - <rename/>  
810 - <length>-2</length>  
811 - <precision>-2</precision>  
812 - </field> <field> <name>col_type</name>  
813 - <rename/>  
814 - <length>-2</length>  
815 - <precision>-2</precision>  
816 - </field> <field> <name>col_value</name>  
817 - <rename/>  
818 - <length>-2</length>  
819 - <precision>-2</precision>  
820 - </field> <select_unspecified>N</select_unspecified>  
821 - </fields> <cluster_schema/>  
822 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
823 - <xloc>496</xloc>  
824 - <yloc>508</yloc>  
825 - <draw>Y</draw>  
826 - </GUI>  
827 - </step>  
828 -  
829 - <step>  
830 - <name>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </name>  
831 - <type>SetValueField</type>  
832 - <description/>  
833 - <distribute>Y</distribute>  
834 - <custom_distribution/>  
835 - <copies>1</copies>  
836 - <partitioning>  
837 - <method>none</method>  
838 - <schema_name/>  
839 - </partitioning>  
840 - <fields>  
841 - <field>  
842 - <name>col_value</name>  
843 - <replaceby>tccname_</replaceby>  
844 - </field>  
845 - </fields>  
846 - <cluster_schema/>  
847 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
848 - <xloc>345</xloc>  
849 - <yloc>430</yloc>  
850 - <draw>Y</draw>  
851 - </GUI>  
852 - </step>  
853 -  
854 - <step>  
855 - <name>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</name>  
856 - <type>SetValueField</type>  
857 - <description/>  
858 - <distribute>Y</distribute>  
859 - <custom_distribution/>  
860 - <copies>1</copies>  
861 - <partitioning>  
862 - <method>none</method>  
863 - <schema_name/>  
864 - </partitioning>  
865 - <fields>  
866 - <field>  
867 - <name>col_value</name>  
868 - <replaceby>ttinfoname_</replaceby>  
869 - </field>  
870 - </fields>  
871 - <cluster_schema/>  
872 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
873 - <xloc>354</xloc>  
874 - <yloc>509</yloc>  
875 - <draw>Y</draw>  
876 - </GUI>  
877 - </step>  
878 -  
879 - <step>  
880 - <name>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</name>  
881 - <type>SetValueField</type>  
882 - <description/>  
883 - <distribute>Y</distribute>  
884 - <custom_distribution/>  
885 - <copies>1</copies>  
886 - <partitioning>  
887 - <method>none</method>  
888 - <schema_name/>  
889 - </partitioning>  
890 - <fields>  
891 - <field>  
892 - <name>col_value</name>  
893 - <replaceby>xlname_</replaceby>  
894 - </field>  
895 - </fields>  
896 - <cluster_schema/>  
897 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
898 - <xloc>340</xloc>  
899 - <yloc>352</yloc>  
900 - <draw>Y</draw>  
901 - </GUI>  
902 - </step>  
903 -  
904 - <step>  
905 - <name>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>  
906 - <type>SelectValues</type>  
907 - <description/>  
908 - <distribute>Y</distribute>  
909 - <custom_distribution/>  
910 - <copies>1</copies>  
911 - <partitioning>  
912 - <method>none</method>  
913 - <schema_name/>  
914 - </partitioning>  
915 - <fields> <field> <name>col_name</name>  
916 - <rename/>  
917 - <length>-2</length>  
918 - <precision>-2</precision>  
919 - </field> <field> <name>col_type</name>  
920 - <rename/>  
921 - <length>-2</length>  
922 - <precision>-2</precision>  
923 - </field> <field> <name>col_value</name>  
924 - <rename/>  
925 - <length>-2</length>  
926 - <precision>-2</precision>  
927 - </field> <select_unspecified>N</select_unspecified>  
928 - </fields> <cluster_schema/>  
929 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
930 - <xloc>487</xloc>  
931 - <yloc>353</yloc>  
932 - <draw>Y</draw>  
933 - </GUI>  
934 - </step>  
935 -  
936 - <step>  
937 - <name>&#x83b7;&#x53d6;excel&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</name>  
938 - <type>GetVariable</type>  
939 - <description/>  
940 - <distribute>Y</distribute>  
941 - <custom_distribution/>  
942 - <copies>1</copies>  
943 - <partitioning>  
944 - <method>none</method>  
945 - <schema_name/>  
946 - </partitioning>  
947 - <fields>  
948 - <field>  
949 - <name>fieldnames</name>  
950 - <variable>&#x24;&#x7b;excelfieldnames&#x7d;</variable>  
951 - <type>String</type>  
952 - <format/>  
953 - <currency/>  
954 - <decimal/>  
955 - <group/>  
956 - <length>-1</length>  
957 - <precision>-1</precision>  
958 - <trim_type>none</trim_type>  
959 - </field>  
960 - </fields>  
961 - <cluster_schema/>  
962 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
963 - <xloc>71</xloc>  
964 - <yloc>163</yloc>  
965 - <draw>Y</draw>  
966 - </GUI>  
967 - </step>  
968 -  
969 - <step>  
970 - <name>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</name>  
971 - <type>GetVariable</type>  
972 - <description/>  
973 - <distribute>Y</distribute>  
974 - <custom_distribution/>  
975 - <copies>1</copies>  
976 - <partitioning>  
977 - <method>none</method>  
978 - <schema_name/>  
979 - </partitioning>  
980 - <fields>  
981 - <field>  
982 - <name>filepath_</name>  
983 - <variable>&#x24;&#x7b;filepath&#x7d;</variable>  
984 - <type>String</type>  
985 - <format/>  
986 - <currency/>  
987 - <decimal/>  
988 - <group/>  
989 - <length>-1</length>  
990 - <precision>-1</precision>  
991 - <trim_type>none</trim_type>  
992 - </field>  
993 - <field>  
994 - <name>erroroutputdir_</name>  
995 - <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>  
996 - <type>String</type>  
997 - <format/>  
998 - <currency/>  
999 - <decimal/>  
1000 - <group/>  
1001 - <length>-1</length>  
1002 - <precision>-1</precision>  
1003 - <trim_type>none</trim_type>  
1004 - </field>  
1005 - </fields>  
1006 - <cluster_schema/>  
1007 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1008 - <xloc>73</xloc>  
1009 - <yloc>62</yloc>  
1010 - <draw>Y</draw>  
1011 - </GUI>  
1012 - </step>  
1013 -  
1014 - <step>  
1015 - <name>&#x83b7;&#x53d6;normalize&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</name>  
1016 - <type>GetVariable</type>  
1017 - <description/>  
1018 - <distribute>Y</distribute>  
1019 - <custom_distribution/>  
1020 - <copies>1</copies>  
1021 - <partitioning>  
1022 - <method>none</method>  
1023 - <schema_name/>  
1024 - </partitioning>  
1025 - <fields>  
1026 - <field>  
1027 - <name>normalizefieldnames_</name>  
1028 - <variable>&#x24;&#x7b;normalizefieldnames&#x7d;</variable>  
1029 - <type>String</type>  
1030 - <format/>  
1031 - <currency/>  
1032 - <decimal/>  
1033 - <group/>  
1034 - <length>-1</length>  
1035 - <precision>-1</precision>  
1036 - <trim_type>none</trim_type>  
1037 - </field>  
1038 - </fields>  
1039 - <cluster_schema/>  
1040 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1041 - <xloc>80</xloc>  
1042 - <yloc>261</yloc>  
1043 - <draw>Y</draw>  
1044 - </GUI>  
1045 - </step>  
1046 -  
1047 - <step>  
1048 - <name>&#x83b7;&#x53d6;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;</name>  
1049 - <type>GetVariable</type>  
1050 - <description/>  
1051 - <distribute>Y</distribute>  
1052 - <custom_distribution/>  
1053 - <copies>1</copies>  
1054 - <partitioning>  
1055 - <method>none</method>  
1056 - <schema_name/>  
1057 - </partitioning>  
1058 - <fields>  
1059 - <field>  
1060 - <name>tccname_</name>  
1061 - <variable>&#x24;&#x7b;tccname&#x7d;</variable>  
1062 - <type>String</type>  
1063 - <format/>  
1064 - <currency/>  
1065 - <decimal/>  
1066 - <group/>  
1067 - <length>-1</length>  
1068 - <precision>-1</precision>  
1069 - <trim_type>none</trim_type>  
1070 - </field>  
1071 - </fields>  
1072 - <cluster_schema/>  
1073 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1074 - <xloc>80</xloc>  
1075 - <yloc>430</yloc>  
1076 - <draw>Y</draw>  
1077 - </GUI>  
1078 - </step>  
1079 -  
1080 - <step>  
1081 - <name>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;&#x540d;&#x79f0;</name>  
1082 - <type>GetVariable</type>  
1083 - <description/>  
1084 - <distribute>Y</distribute>  
1085 - <custom_distribution/>  
1086 - <copies>1</copies>  
1087 - <partitioning>  
1088 - <method>none</method>  
1089 - <schema_name/>  
1090 - </partitioning>  
1091 - <fields>  
1092 - <field>  
1093 - <name>ttinfoname_</name>  
1094 - <variable>&#x24;&#x7b;ttinfoname&#x7d;</variable>  
1095 - <type>String</type>  
1096 - <format/>  
1097 - <currency/>  
1098 - <decimal/>  
1099 - <group/>  
1100 - <length>-1</length>  
1101 - <precision>-1</precision>  
1102 - <trim_type>none</trim_type>  
1103 - </field>  
1104 - </fields>  
1105 - <cluster_schema/>  
1106 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1107 - <xloc>82</xloc>  
1108 - <yloc>508</yloc>  
1109 - <draw>Y</draw>  
1110 - </GUI>  
1111 - </step>  
1112 -  
1113 - <step>  
1114 - <name>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x540d;&#x79f0;</name>  
1115 - <type>GetVariable</type>  
1116 - <description/>  
1117 - <distribute>Y</distribute>  
1118 - <custom_distribution/>  
1119 - <copies>1</copies>  
1120 - <partitioning>  
1121 - <method>none</method>  
1122 - <schema_name/>  
1123 - </partitioning>  
1124 - <fields>  
1125 - <field>  
1126 - <name>xlname_</name>  
1127 - <variable>&#x24;&#x7b;xlname&#x7d;</variable>  
1128 - <type>String</type>  
1129 - <format/>  
1130 - <currency/>  
1131 - <decimal/>  
1132 - <group/>  
1133 - <length>-1</length>  
1134 - <precision>-1</precision>  
1135 - <trim_type>none</trim_type>  
1136 - </field>  
1137 - </fields>  
1138 - <cluster_schema/>  
1139 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1140 - <xloc>78</xloc>  
1141 - <yloc>351</yloc>  
1142 - <draw>Y</draw>  
1143 - </GUI>  
1144 - </step>  
1145 -  
1146 - <step>  
1147 - <name>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</name>  
1148 - <type>SplitFieldToRows3</type>  
1149 - <description/>  
1150 - <distribute>Y</distribute>  
1151 - <custom_distribution/>  
1152 - <copies>1</copies>  
1153 - <partitioning>  
1154 - <method>none</method>  
1155 - <schema_name/>  
1156 - </partitioning>  
1157 - <splitfield>fieldnames</splitfield>  
1158 - <delimiter>,</delimiter>  
1159 - <newfield>fieldname</newfield>  
1160 - <rownum>N</rownum>  
1161 - <rownum_field/>  
1162 - <resetrownumber>Y</resetrownumber>  
1163 - <delimiter_is_regex>N</delimiter_is_regex>  
1164 - <cluster_schema/>  
1165 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1166 - <xloc>261</xloc>  
1167 - <yloc>163</yloc>  
1168 - <draw>Y</draw>  
1169 - </GUI>  
1170 - </step>  
1171 -  
1172 - <step>  
1173 - <name>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</name>  
1174 - <type>SplitFieldToRows3</type>  
1175 - <description/>  
1176 - <distribute>Y</distribute>  
1177 - <custom_distribution/>  
1178 - <copies>1</copies>  
1179 - <partitioning>  
1180 - <method>none</method>  
1181 - <schema_name/>  
1182 - </partitioning>  
1183 - <splitfield>normalizefieldnames_</splitfield>  
1184 - <delimiter>,</delimiter>  
1185 - <newfield>nfieldname</newfield>  
1186 - <rownum>N</rownum>  
1187 - <rownum_field/>  
1188 - <resetrownumber>Y</resetrownumber>  
1189 - <delimiter_is_regex>N</delimiter_is_regex>  
1190 - <cluster_schema/>  
1191 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1192 - <xloc>263</xloc>  
1193 - <yloc>257</yloc>  
1194 - <draw>Y</draw>  
1195 - </GUI>  
1196 - </step>  
1197 -  
1198 - <step_error_handling>  
1199 - </step_error_handling>  
1200 - <slave-step-copy-partition-distribution>  
1201 -</slave-step-copy-partition-distribution>  
1202 - <slave_transformation>N</slave_transformation>  
1203 -  
1204 -</transformation> 1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>ttinfodetailMetaData</name>
  5 + <description/>
  6 + <extended_description/>
  7 + <trans_version/>
  8 + <trans_type>Normal</trans_type>
  9 + <trans_status>0</trans_status>
  10 + <directory>&#x2f;</directory>
  11 + <parameters>
  12 + <parameter>
  13 + <name>erroroutputdir</name>
  14 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;erroroutput</default_value>
  15 + <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>excelfieldnames</name>
  19 + <default_value>&#x8def;&#x724c;,&#x51fa;&#x573a;,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;1,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;1,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;2,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;2,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;3,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;3,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;4,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;4,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;5,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;5,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;6,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;6,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;7,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;7,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;8,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;8,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;9,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;9,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;10,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;10,&#x8fdb;&#x573a;</default_value>
  20 + <description>&#x65f6;&#x523b;&#x8868;excel&#x8f93;&#x5165;&#x5b57;&#x6bb5;&#x540d;&#xff0c;&#x4ee5;&#x9017;&#x53f7;&#x8fde;&#x63a5;</description>
  21 + </parameter>
  22 + <parameter>
  23 + <name>filepath</name>
  24 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control_etl&#x2f;&#x95f5;&#x884c;&#x516c;&#x4ea4;&#x2f;&#x95f5;&#x884c;26&#x8def;&#x65f6;&#x523b;&#x8868;160630&#x65f6;&#x523b;&#x8868;.xls</default_value>
  25 + <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>
  26 + </parameter>
  27 + <parameter>
  28 + <name>injectktrfile</name>
  29 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataInput.ktr</default_value>
  30 + <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>
  31 + </parameter>
  32 + <parameter>
  33 + <name>normalizefieldnames</name>
  34 + <default_value>&#x51fa;&#x573a;,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;1,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;1,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;2,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;2,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;3,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;3,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;4,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;4,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;5,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;5,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;6,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;6,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;7,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;7,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;8,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;8,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;9,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;9,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;10,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;10,&#x8fdb;&#x573a;</default_value>
  35 + <description>&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;&#x5b57;&#x6bb5;&#x540d;&#xff0c;&#x4ee5;&#x9017;&#x53f7;&#x8fde;&#x63a5;</description>
  36 + </parameter>
  37 + <parameter>
  38 + <name>sheetname</name>
  39 + <default_value>&#x5de5;&#x4f5c;&#x8868;1</default_value>
  40 + <description/>
  41 + </parameter>
  42 + <parameter>
  43 + <name>tccname</name>
  44 + <default_value>&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;&#x505c;&#x8f66;&#x573a;</default_value>
  45 + <description>&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</description>
  46 + </parameter>
  47 + <parameter>
  48 + <name>ttinfoname</name>
  49 + <default_value>&#x8868;2</default_value>
  50 + <description>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;</description>
  51 + </parameter>
  52 + <parameter>
  53 + <name>xlname</name>
  54 + <default_value>&#x95f5;&#x884c;26&#x8def;</default_value>
  55 + <description>&#x7ebf;&#x8def;&#x540d;&#x79f0;</description>
  56 + </parameter>
  57 + </parameters>
  58 + <log>
  59 +<trans-log-table><connection/>
  60 +<schema/>
  61 +<table/>
  62 +<size_limit_lines/>
  63 +<interval/>
  64 +<timeout_days/>
  65 +<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>
  66 +<perf-log-table><connection/>
  67 +<schema/>
  68 +<table/>
  69 +<interval/>
  70 +<timeout_days/>
  71 +<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>
  72 +<channel-log-table><connection/>
  73 +<schema/>
  74 +<table/>
  75 +<timeout_days/>
  76 +<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>
  77 +<step-log-table><connection/>
  78 +<schema/>
  79 +<table/>
  80 +<timeout_days/>
  81 +<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>
  82 +<metrics-log-table><connection/>
  83 +<schema/>
  84 +<table/>
  85 +<timeout_days/>
  86 +<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>
  87 + </log>
  88 + <maxdate>
  89 + <connection/>
  90 + <table/>
  91 + <field/>
  92 + <offset>0.0</offset>
  93 + <maxdiff>0.0</maxdiff>
  94 + </maxdate>
  95 + <size_rowset>10000</size_rowset>
  96 + <sleep_time_empty>50</sleep_time_empty>
  97 + <sleep_time_full>50</sleep_time_full>
  98 + <unique_connections>N</unique_connections>
  99 + <feedback_shown>Y</feedback_shown>
  100 + <feedback_size>50000</feedback_size>
  101 + <using_thread_priorities>Y</using_thread_priorities>
  102 + <shared_objects_file/>
  103 + <capture_step_performance>N</capture_step_performance>
  104 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  105 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  106 + <dependencies>
  107 + </dependencies>
  108 + <partitionschemas>
  109 + </partitionschemas>
  110 + <slaveservers>
  111 + </slaveservers>
  112 + <clusterschemas>
  113 + </clusterschemas>
  114 + <created_user>-</created_user>
  115 + <created_date>2016&#x2f;07&#x2f;01 09&#x3a;55&#x3a;32.649</created_date>
  116 + <modified_user>-</modified_user>
  117 + <modified_date>2016&#x2f;07&#x2f;01 09&#x3a;55&#x3a;32.649</modified_date>
  118 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  119 + <is_key_private>N</is_key_private>
  120 + </info>
  121 + <notepads>
  122 + </notepads>
  123 + <connection>
  124 + <name>bus_control_variable</name>
  125 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  126 + <type>MYSQL</type>
  127 + <access>Native</access>
  128 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  129 + <port>3306</port>
  130 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  131 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  132 + <servername/>
  133 + <data_tablespace/>
  134 + <index_tablespace/>
  135 + <attributes>
  136 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  137 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  138 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  139 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  140 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  141 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  142 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  143 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  144 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  145 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  146 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  147 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  148 + </attributes>
  149 + </connection>
  150 + <connection>
  151 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  152 + <server>localhost</server>
  153 + <type>MYSQL</type>
  154 + <access>Native</access>
  155 + <database>control</database>
  156 + <port>3306</port>
  157 + <username>root</username>
  158 + <password>Encrypted </password>
  159 + <servername/>
  160 + <data_tablespace/>
  161 + <index_tablespace/>
  162 + <attributes>
  163 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  164 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  165 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  166 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  167 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  168 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  169 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  170 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  171 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  172 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  173 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  174 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  175 + </attributes>
  176 + </connection>
  177 + <connection>
  178 + <name>bus_control_&#x672c;&#x673a;</name>
  179 + <server>localhost</server>
  180 + <type>MYSQL</type>
  181 + <access>Native</access>
  182 + <database>control</database>
  183 + <port>3306</port>
  184 + <username>root</username>
  185 + <password>Encrypted </password>
  186 + <servername/>
  187 + <data_tablespace/>
  188 + <index_tablespace/>
  189 + <attributes>
  190 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  191 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  192 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  193 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  194 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  195 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  196 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  197 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  198 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  199 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  200 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  201 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  202 + </attributes>
  203 + </connection>
  204 + <connection>
  205 + <name>xlab_mysql_youle</name>
  206 + <server>101.231.124.8</server>
  207 + <type>MYSQL</type>
  208 + <access>Native</access>
  209 + <database>xlab_youle</database>
  210 + <port>45687</port>
  211 + <username>xlab-youle</username>
  212 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  213 + <servername/>
  214 + <data_tablespace/>
  215 + <index_tablespace/>
  216 + <attributes>
  217 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  218 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  219 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  220 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  221 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  222 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  223 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  224 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  225 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  226 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  227 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  228 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  229 + </attributes>
  230 + </connection>
  231 + <connection>
  232 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  233 + <server>localhost</server>
  234 + <type>MYSQL</type>
  235 + <access>Native</access>
  236 + <database>xlab_youle</database>
  237 + <port>3306</port>
  238 + <username>root</username>
  239 + <password>Encrypted </password>
  240 + <servername/>
  241 + <data_tablespace/>
  242 + <index_tablespace/>
  243 + <attributes>
  244 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  245 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  246 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  247 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  248 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  249 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  250 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  251 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  252 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  253 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  254 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  255 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  256 + </attributes>
  257 + </connection>
  258 + <connection>
  259 + <name>xlab_youle</name>
  260 + <server/>
  261 + <type>MYSQL</type>
  262 + <access>JNDI</access>
  263 + <database>xlab_youle</database>
  264 + <port>1521</port>
  265 + <username/>
  266 + <password>Encrypted </password>
  267 + <servername/>
  268 + <data_tablespace/>
  269 + <index_tablespace/>
  270 + <attributes>
  271 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  272 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  273 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  274 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  275 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  276 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  277 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  278 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  279 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  280 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  281 + </attributes>
  282 + </connection>
  283 + <order>
  284 + <hop> <from>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  285 + <hop> <from>&#x83b7;&#x53d6;excel&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</from><to>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</to><enabled>Y</enabled> </hop>
  286 + <hop> <from>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</from><to>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  287 + <hop> <from>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  288 + <hop> <from>&#x83b7;&#x53d6;normalize&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</from><to>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</to><enabled>Y</enabled> </hop>
  289 + <hop> <from>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</from><to>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  290 + <hop> <from>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  291 + <hop> <from>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>
  292 + <hop> <from>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</to><enabled>Y</enabled> </hop>
  293 + <hop> <from>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</from><to>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  294 + <hop> <from>&#x83b7;&#x53d6;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>
  295 + <hop> <from>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </to><enabled>Y</enabled> </hop>
  296 + <hop> <from>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </from><to>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  297 + <hop> <from>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>
  298 + <hop> <from>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</to><enabled>Y</enabled> </hop>
  299 + <hop> <from>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</from><to>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  300 + <hop> <from>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>
  301 + <hop> <from>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>
  302 + <hop> <from>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>
  303 + <hop> <from>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  304 + </order>
  305 + <step>
  306 + <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>
  307 + <type>MetaInject</type>
  308 + <description/>
  309 + <distribute>Y</distribute>
  310 + <custom_distribution/>
  311 + <copies>1</copies>
  312 + <partitioning>
  313 + <method>none</method>
  314 + <schema_name/>
  315 + </partitioning>
  316 + <specification_method>filename</specification_method>
  317 + <trans_object_id/>
  318 + <trans_name/>
  319 + <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>
  320 + <directory_path/>
  321 + <source_step/>
  322 + <source_output_fields> </source_output_fields> <target_file/>
  323 + <no_execution>N</no_execution>
  324 + <stream_source_step/>
  325 + <stream_target_step/>
  326 + <mappings> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  327 + <target_attribute_key>FORMAT</target_attribute_key>
  328 + <target_detail>Y</target_detail>
  329 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  330 + <source_field>format</source_field>
  331 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  332 + <target_attribute_key>REPEAT</target_attribute_key>
  333 + <target_detail>Y</target_detail>
  334 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  335 + <source_field>repeat</source_field>
  336 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  337 + <target_attribute_key>TRIM_TYPE</target_attribute_key>
  338 + <target_detail>Y</target_detail>
  339 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  340 + <source_field>trim_type</source_field>
  341 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  342 + <target_attribute_key>FILENAME</target_attribute_key>
  343 + <target_detail>Y</target_detail>
  344 + <source_step>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</source_step>
  345 + <source_field>filepath_</source_field>
  346 + </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
  347 + <target_attribute_key>NAME</target_attribute_key>
  348 + <target_detail>Y</target_detail>
  349 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
  350 + <source_field>fieldName</source_field>
  351 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  352 + <target_attribute_key>NAME</target_attribute_key>
  353 + <target_detail>Y</target_detail>
  354 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  355 + <source_field>fieldname</source_field>
  356 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  357 + <target_attribute_key>SHEET_NAME</target_attribute_key>
  358 + <target_detail>Y</target_detail>
  359 + <source_step>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</source_step>
  360 + <source_field>sheetname_</source_field>
  361 + </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>
  362 + <target_attribute_key>NAME</target_attribute_key>
  363 + <target_detail>Y</target_detail>
  364 + <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>
  365 + <source_field>col_name</source_field>
  366 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  367 + <target_attribute_key>NAME</target_attribute_key>
  368 + <target_detail>Y</target_detail>
  369 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  370 + <source_field>fieldName</source_field>
  371 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  372 + <target_attribute_key>TRIM_TYPE</target_attribute_key>
  373 + <target_detail>Y</target_detail>
  374 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  375 + <source_field>trim_type</source_field>
  376 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  377 + <target_attribute_key>REPEAT</target_attribute_key>
  378 + <target_detail>Y</target_detail>
  379 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  380 + <source_field>repeat</source_field>
  381 + </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
  382 + <target_attribute_key>NORMALISED</target_attribute_key>
  383 + <target_detail>Y</target_detail>
  384 + <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
  385 + <source_field>valuefield</source_field>
  386 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  387 + <target_attribute_key>FORMAT</target_attribute_key>
  388 + <target_detail>Y</target_detail>
  389 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  390 + <source_field>format</source_field>
  391 + </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
  392 + <target_attribute_key>VALUE</target_attribute_key>
  393 + <target_detail>Y</target_detail>
  394 + <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
  395 + <source_field>nfieldname</source_field>
  396 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  397 + <target_attribute_key>PRECISION</target_attribute_key>
  398 + <target_detail>Y</target_detail>
  399 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  400 + <source_field>precision</source_field>
  401 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  402 + <target_attribute_key>TYPE</target_attribute_key>
  403 + <target_detail>Y</target_detail>
  404 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  405 + <source_field>type</source_field>
  406 + </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>
  407 + <target_attribute_key>DATA_VALUE</target_attribute_key>
  408 + <target_detail>Y</target_detail>
  409 + <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>
  410 + <source_field>col_value</source_field>
  411 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  412 + <target_attribute_key>LENGTH</target_attribute_key>
  413 + <target_detail>Y</target_detail>
  414 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  415 + <source_field>length</source_field>
  416 + </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>
  417 + <target_attribute_key>TYPE</target_attribute_key>
  418 + <target_detail>Y</target_detail>
  419 + <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>
  420 + <source_field>col_type</source_field>
  421 + </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
  422 + <target_attribute_key>NAME</target_attribute_key>
  423 + <target_detail>Y</target_detail>
  424 + <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
  425 + <source_field>nfieldname</source_field>
  426 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  427 + <target_attribute_key>LENGTH</target_attribute_key>
  428 + <target_detail>Y</target_detail>
  429 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  430 + <source_field>length</source_field>
  431 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  432 + <target_attribute_key>TYPE</target_attribute_key>
  433 + <target_detail>Y</target_detail>
  434 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  435 + <source_field>fieldtype</source_field>
  436 + </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
  437 + <target_attribute_key>VALUE</target_attribute_key>
  438 + <target_detail>Y</target_detail>
  439 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
  440 + <source_field>fieldName</source_field>
  441 + </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
  442 + <target_attribute_key>NORMALISED</target_attribute_key>
  443 + <target_detail>Y</target_detail>
  444 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
  445 + <source_field>value</source_field>
  446 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  447 + <target_attribute_key>PRECISION</target_attribute_key>
  448 + <target_detail>Y</target_detail>
  449 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  450 + <source_field>precision</source_field>
  451 + </mapping> </mappings> <cluster_schema/>
  452 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  453 + <xloc>695</xloc>
  454 + <yloc>177</yloc>
  455 + <draw>Y</draw>
  456 + </GUI>
  457 + </step>
  458 +
  459 + <step>
  460 + <name>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>
  461 + <type>SelectValues</type>
  462 + <description/>
  463 + <distribute>Y</distribute>
  464 + <custom_distribution/>
  465 + <copies>1</copies>
  466 + <partitioning>
  467 + <method>none</method>
  468 + <schema_name/>
  469 + </partitioning>
  470 + <fields> <field> <name>col_name</name>
  471 + <rename/>
  472 + <length>-2</length>
  473 + <precision>-2</precision>
  474 + </field> <field> <name>col_type</name>
  475 + <rename/>
  476 + <length>-2</length>
  477 + <precision>-2</precision>
  478 + </field> <field> <name>col_value</name>
  479 + <rename/>
  480 + <length>-2</length>
  481 + <precision>-2</precision>
  482 + </field> <select_unspecified>N</select_unspecified>
  483 + </fields> <cluster_schema/>
  484 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  485 + <xloc>490</xloc>
  486 + <yloc>429</yloc>
  487 + <draw>Y</draw>
  488 + </GUI>
  489 + </step>
  490 +
  491 + <step>
  492 + <name>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</name>
  493 + <type>Dummy</type>
  494 + <description/>
  495 + <distribute>Y</distribute>
  496 + <custom_distribution/>
  497 + <copies>1</copies>
  498 + <partitioning>
  499 + <method>none</method>
  500 + <schema_name/>
  501 + </partitioning>
  502 + <cluster_schema/>
  503 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  504 + <xloc>702</xloc>
  505 + <yloc>383</yloc>
  506 + <draw>Y</draw>
  507 + </GUI>
  508 + </step>
  509 +
  510 + <step>
  511 + <name>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</name>
  512 + <type>Constant</type>
  513 + <description/>
  514 + <distribute>Y</distribute>
  515 + <custom_distribution/>
  516 + <copies>1</copies>
  517 + <partitioning>
  518 + <method>none</method>
  519 + <schema_name/>
  520 + </partitioning>
  521 + <fields>
  522 + <field>
  523 + <name>fieldtype</name>
  524 + <type>String</type>
  525 + <format/>
  526 + <currency/>
  527 + <decimal/>
  528 + <group/>
  529 + <nullif>String</nullif>
  530 + <length>-1</length>
  531 + <precision>-1</precision>
  532 + <set_empty_string>N</set_empty_string>
  533 + </field>
  534 + <field>
  535 + <name>length</name>
  536 + <type>String</type>
  537 + <format/>
  538 + <currency/>
  539 + <decimal/>
  540 + <group/>
  541 + <nullif>-1</nullif>
  542 + <length>-1</length>
  543 + <precision>-1</precision>
  544 + <set_empty_string>N</set_empty_string>
  545 + </field>
  546 + <field>
  547 + <name>precision</name>
  548 + <type>String</type>
  549 + <format/>
  550 + <currency/>
  551 + <decimal/>
  552 + <group/>
  553 + <nullif>-1</nullif>
  554 + <length>-1</length>
  555 + <precision>-1</precision>
  556 + <set_empty_string>N</set_empty_string>
  557 + </field>
  558 + <field>
  559 + <name>trim_type</name>
  560 + <type>String</type>
  561 + <format/>
  562 + <currency/>
  563 + <decimal/>
  564 + <group/>
  565 + <nullif>none</nullif>
  566 + <length>-1</length>
  567 + <precision>-1</precision>
  568 + <set_empty_string>N</set_empty_string>
  569 + </field>
  570 + <field>
  571 + <name>repeat</name>
  572 + <type>String</type>
  573 + <format/>
  574 + <currency/>
  575 + <decimal/>
  576 + <group/>
  577 + <nullif>N</nullif>
  578 + <length>-1</length>
  579 + <precision>-1</precision>
  580 + <set_empty_string>N</set_empty_string>
  581 + </field>
  582 + <field>
  583 + <name>format</name>
  584 + <type>String</type>
  585 + <format/>
  586 + <currency/>
  587 + <decimal/>
  588 + <group/>
  589 + <nullif>&#x23;</nullif>
  590 + <length>-1</length>
  591 + <precision>-1</precision>
  592 + <set_empty_string>N</set_empty_string>
  593 + </field>
  594 + </fields>
  595 + <cluster_schema/>
  596 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  597 + <xloc>441</xloc>
  598 + <yloc>172</yloc>
  599 + <draw>Y</draw>
  600 + </GUI>
  601 + </step>
  602 +
  603 + <step>
  604 + <name>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</name>
  605 + <type>Constant</type>
  606 + <description/>
  607 + <distribute>Y</distribute>
  608 + <custom_distribution/>
  609 + <copies>1</copies>
  610 + <partitioning>
  611 + <method>none</method>
  612 + <schema_name/>
  613 + </partitioning>
  614 + <fields>
  615 + <field>
  616 + <name>valuefield</name>
  617 + <type>String</type>
  618 + <format/>
  619 + <currency/>
  620 + <decimal/>
  621 + <group/>
  622 + <nullif>&#x53d1;&#x8f66;&#x65f6;&#x95f4;</nullif>
  623 + <length>-1</length>
  624 + <precision>-1</precision>
  625 + <set_empty_string>N</set_empty_string>
  626 + </field>
  627 + </fields>
  628 + <cluster_schema/>
  629 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  630 + <xloc>447</xloc>
  631 + <yloc>257</yloc>
  632 + <draw>Y</draw>
  633 + </GUI>
  634 + </step>
  635 +
  636 + <step>
  637 + <name>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</name>
  638 + <type>Constant</type>
  639 + <description/>
  640 + <distribute>Y</distribute>
  641 + <custom_distribution/>
  642 + <copies>1</copies>
  643 + <partitioning>
  644 + <method>none</method>
  645 + <schema_name/>
  646 + </partitioning>
  647 + <fields>
  648 + <field>
  649 + <name>col_name</name>
  650 + <type>String</type>
  651 + <format/>
  652 + <currency/>
  653 + <decimal/>
  654 + <group/>
  655 + <nullif>tccname_</nullif>
  656 + <length>-1</length>
  657 + <precision>-1</precision>
  658 + <set_empty_string>N</set_empty_string>
  659 + </field>
  660 + <field>
  661 + <name>col_type</name>
  662 + <type>String</type>
  663 + <format/>
  664 + <currency/>
  665 + <decimal/>
  666 + <group/>
  667 + <nullif>String</nullif>
  668 + <length>-1</length>
  669 + <precision>-1</precision>
  670 + <set_empty_string>N</set_empty_string>
  671 + </field>
  672 + <field>
  673 + <name>col_value</name>
  674 + <type>String</type>
  675 + <format/>
  676 + <currency/>
  677 + <decimal/>
  678 + <group/>
  679 + <nullif>replace</nullif>
  680 + <length>-1</length>
  681 + <precision>-1</precision>
  682 + <set_empty_string>N</set_empty_string>
  683 + </field>
  684 + </fields>
  685 + <cluster_schema/>
  686 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  687 + <xloc>208</xloc>
  688 + <yloc>428</yloc>
  689 + <draw>Y</draw>
  690 + </GUI>
  691 + </step>
  692 +
  693 + <step>
  694 + <name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</name>
  695 + <type>Constant</type>
  696 + <description/>
  697 + <distribute>Y</distribute>
  698 + <custom_distribution/>
  699 + <copies>1</copies>
  700 + <partitioning>
  701 + <method>none</method>
  702 + <schema_name/>
  703 + </partitioning>
  704 + <fields>
  705 + <field>
  706 + <name>col_name</name>
  707 + <type>String</type>
  708 + <format/>
  709 + <currency/>
  710 + <decimal/>
  711 + <group/>
  712 + <nullif>ttinfoname_</nullif>
  713 + <length>-1</length>
  714 + <precision>-1</precision>
  715 + <set_empty_string>N</set_empty_string>
  716 + </field>
  717 + <field>
  718 + <name>col_type</name>
  719 + <type>String</type>
  720 + <format/>
  721 + <currency/>
  722 + <decimal/>
  723 + <group/>
  724 + <nullif>String</nullif>
  725 + <length>-1</length>
  726 + <precision>-1</precision>
  727 + <set_empty_string>N</set_empty_string>
  728 + </field>
  729 + <field>
  730 + <name>col_value</name>
  731 + <type>String</type>
  732 + <format/>
  733 + <currency/>
  734 + <decimal/>
  735 + <group/>
  736 + <nullif>replace</nullif>
  737 + <length>-1</length>
  738 + <precision>-1</precision>
  739 + <set_empty_string>N</set_empty_string>
  740 + </field>
  741 + </fields>
  742 + <cluster_schema/>
  743 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  744 + <xloc>216</xloc>
  745 + <yloc>508</yloc>
  746 + <draw>Y</draw>
  747 + </GUI>
  748 + </step>
  749 +
  750 + <step>
  751 + <name>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</name>
  752 + <type>Constant</type>
  753 + <description/>
  754 + <distribute>Y</distribute>
  755 + <custom_distribution/>
  756 + <copies>1</copies>
  757 + <partitioning>
  758 + <method>none</method>
  759 + <schema_name/>
  760 + </partitioning>
  761 + <fields>
  762 + <field>
  763 + <name>col_name</name>
  764 + <type>String</type>
  765 + <format/>
  766 + <currency/>
  767 + <decimal/>
  768 + <group/>
  769 + <nullif>xlname_</nullif>
  770 + <length>-1</length>
  771 + <precision>-1</precision>
  772 + <set_empty_string>N</set_empty_string>
  773 + </field>
  774 + <field>
  775 + <name>col_type</name>
  776 + <type>String</type>
  777 + <format/>
  778 + <currency/>
  779 + <decimal/>
  780 + <group/>
  781 + <nullif>String</nullif>
  782 + <length>-1</length>
  783 + <precision>-1</precision>
  784 + <set_empty_string>N</set_empty_string>
  785 + </field>
  786 + <field>
  787 + <name>col_value</name>
  788 + <type>String</type>
  789 + <format/>
  790 + <currency/>
  791 + <decimal/>
  792 + <group/>
  793 + <nullif>replace</nullif>
  794 + <length>-1</length>
  795 + <precision>-1</precision>
  796 + <set_empty_string>N</set_empty_string>
  797 + </field>
  798 + </fields>
  799 + <cluster_schema/>
  800 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  801 + <xloc>202</xloc>
  802 + <yloc>351</yloc>
  803 + <draw>Y</draw>
  804 + </GUI>
  805 + </step>
  806 +
  807 + <step>
  808 + <name>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>
  809 + <type>SelectValues</type>
  810 + <description/>
  811 + <distribute>Y</distribute>
  812 + <custom_distribution/>
  813 + <copies>1</copies>
  814 + <partitioning>
  815 + <method>none</method>
  816 + <schema_name/>
  817 + </partitioning>
  818 + <fields> <field> <name>col_name</name>
  819 + <rename/>
  820 + <length>-2</length>
  821 + <precision>-2</precision>
  822 + </field> <field> <name>col_type</name>
  823 + <rename/>
  824 + <length>-2</length>
  825 + <precision>-2</precision>
  826 + </field> <field> <name>col_value</name>
  827 + <rename/>
  828 + <length>-2</length>
  829 + <precision>-2</precision>
  830 + </field> <select_unspecified>N</select_unspecified>
  831 + </fields> <cluster_schema/>
  832 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  833 + <xloc>496</xloc>
  834 + <yloc>508</yloc>
  835 + <draw>Y</draw>
  836 + </GUI>
  837 + </step>
  838 +
  839 + <step>
  840 + <name>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </name>
  841 + <type>SetValueField</type>
  842 + <description/>
  843 + <distribute>Y</distribute>
  844 + <custom_distribution/>
  845 + <copies>1</copies>
  846 + <partitioning>
  847 + <method>none</method>
  848 + <schema_name/>
  849 + </partitioning>
  850 + <fields>
  851 + <field>
  852 + <name>col_value</name>
  853 + <replaceby>tccname_</replaceby>
  854 + </field>
  855 + </fields>
  856 + <cluster_schema/>
  857 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  858 + <xloc>345</xloc>
  859 + <yloc>430</yloc>
  860 + <draw>Y</draw>
  861 + </GUI>
  862 + </step>
  863 +
  864 + <step>
  865 + <name>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</name>
  866 + <type>SetValueField</type>
  867 + <description/>
  868 + <distribute>Y</distribute>
  869 + <custom_distribution/>
  870 + <copies>1</copies>
  871 + <partitioning>
  872 + <method>none</method>
  873 + <schema_name/>
  874 + </partitioning>
  875 + <fields>
  876 + <field>
  877 + <name>col_value</name>
  878 + <replaceby>ttinfoname_</replaceby>
  879 + </field>
  880 + </fields>
  881 + <cluster_schema/>
  882 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  883 + <xloc>354</xloc>
  884 + <yloc>509</yloc>
  885 + <draw>Y</draw>
  886 + </GUI>
  887 + </step>
  888 +
  889 + <step>
  890 + <name>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</name>
  891 + <type>SetValueField</type>
  892 + <description/>
  893 + <distribute>Y</distribute>
  894 + <custom_distribution/>
  895 + <copies>1</copies>
  896 + <partitioning>
  897 + <method>none</method>
  898 + <schema_name/>
  899 + </partitioning>
  900 + <fields>
  901 + <field>
  902 + <name>col_value</name>
  903 + <replaceby>xlname_</replaceby>
  904 + </field>
  905 + </fields>
  906 + <cluster_schema/>
  907 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  908 + <xloc>340</xloc>
  909 + <yloc>352</yloc>
  910 + <draw>Y</draw>
  911 + </GUI>
  912 + </step>
  913 +
  914 + <step>
  915 + <name>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>
  916 + <type>SelectValues</type>
  917 + <description/>
  918 + <distribute>Y</distribute>
  919 + <custom_distribution/>
  920 + <copies>1</copies>
  921 + <partitioning>
  922 + <method>none</method>
  923 + <schema_name/>
  924 + </partitioning>
  925 + <fields> <field> <name>col_name</name>
  926 + <rename/>
  927 + <length>-2</length>
  928 + <precision>-2</precision>
  929 + </field> <field> <name>col_type</name>
  930 + <rename/>
  931 + <length>-2</length>
  932 + <precision>-2</precision>
  933 + </field> <field> <name>col_value</name>
  934 + <rename/>
  935 + <length>-2</length>
  936 + <precision>-2</precision>
  937 + </field> <select_unspecified>N</select_unspecified>
  938 + </fields> <cluster_schema/>
  939 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  940 + <xloc>487</xloc>
  941 + <yloc>353</yloc>
  942 + <draw>Y</draw>
  943 + </GUI>
  944 + </step>
  945 +
  946 + <step>
  947 + <name>&#x83b7;&#x53d6;excel&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</name>
  948 + <type>GetVariable</type>
  949 + <description/>
  950 + <distribute>Y</distribute>
  951 + <custom_distribution/>
  952 + <copies>1</copies>
  953 + <partitioning>
  954 + <method>none</method>
  955 + <schema_name/>
  956 + </partitioning>
  957 + <fields>
  958 + <field>
  959 + <name>fieldnames</name>
  960 + <variable>&#x24;&#x7b;excelfieldnames&#x7d;</variable>
  961 + <type>String</type>
  962 + <format/>
  963 + <currency/>
  964 + <decimal/>
  965 + <group/>
  966 + <length>-1</length>
  967 + <precision>-1</precision>
  968 + <trim_type>none</trim_type>
  969 + </field>
  970 + </fields>
  971 + <cluster_schema/>
  972 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  973 + <xloc>71</xloc>
  974 + <yloc>163</yloc>
  975 + <draw>Y</draw>
  976 + </GUI>
  977 + </step>
  978 +
  979 + <step>
  980 + <name>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</name>
  981 + <type>GetVariable</type>
  982 + <description/>
  983 + <distribute>Y</distribute>
  984 + <custom_distribution/>
  985 + <copies>1</copies>
  986 + <partitioning>
  987 + <method>none</method>
  988 + <schema_name/>
  989 + </partitioning>
  990 + <fields>
  991 + <field>
  992 + <name>filepath_</name>
  993 + <variable>&#x24;&#x7b;filepath&#x7d;</variable>
  994 + <type>String</type>
  995 + <format/>
  996 + <currency/>
  997 + <decimal/>
  998 + <group/>
  999 + <length>-1</length>
  1000 + <precision>-1</precision>
  1001 + <trim_type>none</trim_type>
  1002 + </field>
  1003 + <field>
  1004 + <name>erroroutputdir_</name>
  1005 + <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>
  1006 + <type>String</type>
  1007 + <format/>
  1008 + <currency/>
  1009 + <decimal/>
  1010 + <group/>
  1011 + <length>-1</length>
  1012 + <precision>-1</precision>
  1013 + <trim_type>none</trim_type>
  1014 + </field>
  1015 + <field>
  1016 + <name>sheetname_</name>
  1017 + <variable>&#x24;&#x7b;sheetname&#x7d;</variable>
  1018 + <type>String</type>
  1019 + <format/>
  1020 + <currency/>
  1021 + <decimal/>
  1022 + <group/>
  1023 + <length>-1</length>
  1024 + <precision>-1</precision>
  1025 + <trim_type>none</trim_type>
  1026 + </field>
  1027 + </fields>
  1028 + <cluster_schema/>
  1029 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1030 + <xloc>120</xloc>
  1031 + <yloc>62</yloc>
  1032 + <draw>Y</draw>
  1033 + </GUI>
  1034 + </step>
  1035 +
  1036 + <step>
  1037 + <name>&#x83b7;&#x53d6;normalize&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</name>
  1038 + <type>GetVariable</type>
  1039 + <description/>
  1040 + <distribute>Y</distribute>
  1041 + <custom_distribution/>
  1042 + <copies>1</copies>
  1043 + <partitioning>
  1044 + <method>none</method>
  1045 + <schema_name/>
  1046 + </partitioning>
  1047 + <fields>
  1048 + <field>
  1049 + <name>normalizefieldnames_</name>
  1050 + <variable>&#x24;&#x7b;normalizefieldnames&#x7d;</variable>
  1051 + <type>String</type>
  1052 + <format/>
  1053 + <currency/>
  1054 + <decimal/>
  1055 + <group/>
  1056 + <length>-1</length>
  1057 + <precision>-1</precision>
  1058 + <trim_type>none</trim_type>
  1059 + </field>
  1060 + </fields>
  1061 + <cluster_schema/>
  1062 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1063 + <xloc>80</xloc>
  1064 + <yloc>261</yloc>
  1065 + <draw>Y</draw>
  1066 + </GUI>
  1067 + </step>
  1068 +
  1069 + <step>
  1070 + <name>&#x83b7;&#x53d6;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;</name>
  1071 + <type>GetVariable</type>
  1072 + <description/>
  1073 + <distribute>Y</distribute>
  1074 + <custom_distribution/>
  1075 + <copies>1</copies>
  1076 + <partitioning>
  1077 + <method>none</method>
  1078 + <schema_name/>
  1079 + </partitioning>
  1080 + <fields>
  1081 + <field>
  1082 + <name>tccname_</name>
  1083 + <variable>&#x24;&#x7b;tccname&#x7d;</variable>
  1084 + <type>String</type>
  1085 + <format/>
  1086 + <currency/>
  1087 + <decimal/>
  1088 + <group/>
  1089 + <length>-1</length>
  1090 + <precision>-1</precision>
  1091 + <trim_type>none</trim_type>
  1092 + </field>
  1093 + </fields>
  1094 + <cluster_schema/>
  1095 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1096 + <xloc>80</xloc>
  1097 + <yloc>430</yloc>
  1098 + <draw>Y</draw>
  1099 + </GUI>
  1100 + </step>
  1101 +
  1102 + <step>
  1103 + <name>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;&#x540d;&#x79f0;</name>
  1104 + <type>GetVariable</type>
  1105 + <description/>
  1106 + <distribute>Y</distribute>
  1107 + <custom_distribution/>
  1108 + <copies>1</copies>
  1109 + <partitioning>
  1110 + <method>none</method>
  1111 + <schema_name/>
  1112 + </partitioning>
  1113 + <fields>
  1114 + <field>
  1115 + <name>ttinfoname_</name>
  1116 + <variable>&#x24;&#x7b;ttinfoname&#x7d;</variable>
  1117 + <type>String</type>
  1118 + <format/>
  1119 + <currency/>
  1120 + <decimal/>
  1121 + <group/>
  1122 + <length>-1</length>
  1123 + <precision>-1</precision>
  1124 + <trim_type>none</trim_type>
  1125 + </field>
  1126 + </fields>
  1127 + <cluster_schema/>
  1128 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1129 + <xloc>82</xloc>
  1130 + <yloc>508</yloc>
  1131 + <draw>Y</draw>
  1132 + </GUI>
  1133 + </step>
  1134 +
  1135 + <step>
  1136 + <name>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x540d;&#x79f0;</name>
  1137 + <type>GetVariable</type>
  1138 + <description/>
  1139 + <distribute>Y</distribute>
  1140 + <custom_distribution/>
  1141 + <copies>1</copies>
  1142 + <partitioning>
  1143 + <method>none</method>
  1144 + <schema_name/>
  1145 + </partitioning>
  1146 + <fields>
  1147 + <field>
  1148 + <name>xlname_</name>
  1149 + <variable>&#x24;&#x7b;xlname&#x7d;</variable>
  1150 + <type>String</type>
  1151 + <format/>
  1152 + <currency/>
  1153 + <decimal/>
  1154 + <group/>
  1155 + <length>-1</length>
  1156 + <precision>-1</precision>
  1157 + <trim_type>none</trim_type>
  1158 + </field>
  1159 + </fields>
  1160 + <cluster_schema/>
  1161 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1162 + <xloc>78</xloc>
  1163 + <yloc>351</yloc>
  1164 + <draw>Y</draw>
  1165 + </GUI>
  1166 + </step>
  1167 +
  1168 + <step>
  1169 + <name>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</name>
  1170 + <type>SplitFieldToRows3</type>
  1171 + <description/>
  1172 + <distribute>Y</distribute>
  1173 + <custom_distribution/>
  1174 + <copies>1</copies>
  1175 + <partitioning>
  1176 + <method>none</method>
  1177 + <schema_name/>
  1178 + </partitioning>
  1179 + <splitfield>fieldnames</splitfield>
  1180 + <delimiter>,</delimiter>
  1181 + <newfield>fieldname</newfield>
  1182 + <rownum>N</rownum>
  1183 + <rownum_field/>
  1184 + <resetrownumber>Y</resetrownumber>
  1185 + <delimiter_is_regex>N</delimiter_is_regex>
  1186 + <cluster_schema/>
  1187 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1188 + <xloc>261</xloc>
  1189 + <yloc>163</yloc>
  1190 + <draw>Y</draw>
  1191 + </GUI>
  1192 + </step>
  1193 +
  1194 + <step>
  1195 + <name>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</name>
  1196 + <type>SplitFieldToRows3</type>
  1197 + <description/>
  1198 + <distribute>Y</distribute>
  1199 + <custom_distribution/>
  1200 + <copies>1</copies>
  1201 + <partitioning>
  1202 + <method>none</method>
  1203 + <schema_name/>
  1204 + </partitioning>
  1205 + <splitfield>normalizefieldnames_</splitfield>
  1206 + <delimiter>,</delimiter>
  1207 + <newfield>nfieldname</newfield>
  1208 + <rownum>N</rownum>
  1209 + <rownum_field/>
  1210 + <resetrownumber>Y</resetrownumber>
  1211 + <delimiter_is_regex>N</delimiter_is_regex>
  1212 + <cluster_schema/>
  1213 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1214 + <xloc>263</xloc>
  1215 + <yloc>257</yloc>
  1216 + <draw>Y</draw>
  1217 + </GUI>
  1218 + </step>
  1219 +
  1220 + <step_error_handling>
  1221 + </step_error_handling>
  1222 + <slave-step-copy-partition-distribution>
  1223 +</slave-step-copy-partition-distribution>
  1224 + <slave_transformation>N</slave_transformation>
  1225 +
  1226 +</transformation>
src/main/resources/ms-jdbc.properties
1 #ms.mysql.driver= com.mysql.jdbc.Driver 1 #ms.mysql.driver= com.mysql.jdbc.Driver
2 -#ms.mysql.url= jdbc:mysql://192.168.40.82:3306/ms?useUnicode=true&characterEncoding=utf-8 2 +#ms.mysql.url= jdbc:mysql://192.168.40.82:3306/ms?useUnicode=true&characterEncoding=utf-8&useSSL=false
3 #ms.mysql.username= root 3 #ms.mysql.username= root
4 #ms.mysql.password= 123456 4 #ms.mysql.password= 123456
5 5
6 ms.mysql.driver= com.mysql.jdbc.Driver 6 ms.mysql.driver= com.mysql.jdbc.Driver
7 -ms.mysql.url= jdbc:mysql://192.168.168.201:3306/ms?useUnicode=true&characterEncoding=utf-8 7 +ms.mysql.url= jdbc:mysql://192.168.168.201:3306/ms?useUnicode=true&characterEncoding=utf-8&useSSL=false
8 ms.mysql.username= root 8 ms.mysql.username= root
9 ms.mysql.password= 123456 9 ms.mysql.password= 123456
src/main/resources/static/pages/scheduleApp/module/common/main.js
@@ -63,27 +63,60 @@ ScheduleApp.factory(&#39;requestNotificationChannel&#39;, [&#39;$rootScope&#39;, function($rootS @@ -63,27 +63,60 @@ ScheduleApp.factory(&#39;requestNotificationChannel&#39;, [&#39;$rootScope&#39;, function($rootS
63 }]); 63 }]);
64 64
65 // http 拦截器 65 // http 拦截器
66 -ScheduleApp.factory('myInterceptor', ['requestNotificationChannel', function(requestNotificationChannel) {  
67 - return {  
68 - request: function(config) {  
69 - requestNotificationChannel.requestStarted();  
70 - return config;  
71 - },  
72 - requestError: function(rejection) {  
73 - requestNotificationChannel.requestEnded();  
74 - return rejection;  
75 - },  
76 - response: function(response) {  
77 - requestNotificationChannel.requestEnded();  
78 - return response;  
79 - },  
80 - responseError: function(rejection) {  
81 - requestNotificationChannel.requestEnded();  
82 - return rejection;  
83 - }  
84 - }; 66 +ScheduleApp.factory(
  67 + 'myInterceptor',
  68 + [
  69 + 'requestNotificationChannel',
  70 + '$q',
  71 + function(requestNotificationChannel, $q) {
  72 + return {
  73 + request: function(config) {
  74 + requestNotificationChannel.requestStarted();
  75 + return config;
  76 + },
  77 + requestError: function(rejection) {
  78 + requestNotificationChannel.requestEnded();
  79 + alert("服务端无响应");
  80 + return rejection;
  81 + },
  82 + response: function(response) {
  83 + requestNotificationChannel.requestEnded();
85 84
86 -}]); 85 + return response;
  86 + },
  87 + responseError: function(rejection) {
  88 + requestNotificationChannel.requestEnded();
  89 +
  90 + // 处理错误,springboot会包装返回的错误数据
  91 + // 如:{"timestamp":1478674739246,"status":500,"error":"Internal Server Error","exception":"java.lang.ClassCastException","message":"java.lang.String cannot be cast to java.lang.Long","path":"/tidc/importfile"}
  92 +
  93 + var status = rejection.status;
  94 + var path = rejection.data.path;
  95 + var message = rejection.data.message;
  96 + var output = [];
  97 + output.push("状态编码:" + status);
  98 + output.push("访问路径:" + path);
  99 + output.push("错误消息:" + message);
  100 + if (status) {
  101 + if (status == 500) {
  102 + alert("服务端错误:" + "\n" + output.join("\n"));
  103 + } else if (status == 407) {
  104 + alert("请重新登录:" + "\n" + output.join("\n"));
  105 + } else if (status == -1) {
  106 + alert("貌似服务端连接不上");
  107 + } else {
  108 + alert("其他错误:" + "\n" + output.join("\n"));
  109 + }
  110 + } else {
  111 + alert("我擦,后台返回连个状态码都没返回,见鬼了!");
  112 + }
  113 +
  114 + return $q.reject(rejection);
  115 + }
  116 + };
  117 + }
  118 + ]
  119 +);
87 120
88 ScheduleApp.config(['$httpProvider', function($httpProvider) { 121 ScheduleApp.config(['$httpProvider', function($httpProvider) {
89 $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; 122 $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice.js
@@ -416,7 +416,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanManageService_g&#39;, [&#39;$resource @@ -416,7 +416,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanManageService_g&#39;, [&#39;$resource
416 return { 416 return {
417 rest : $resource( 417 rest : $resource(
418 '/spc/:id', 418 '/spc/:id',
419 - {order: 'createDate', direction: 'DESC', id: '@id_route'}, 419 + {order: 'xl.id,createDate', direction: 'DESC,DESC', id: '@id_route'},
420 { 420 {
421 list: { 421 list: {
422 method: 'GET', 422 method: 'GET',
@@ -452,7 +452,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanInfoManageService_g&#39;, [&#39;$reso @@ -452,7 +452,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanInfoManageService_g&#39;, [&#39;$reso
452 return { 452 return {
453 rest : $resource( 453 rest : $resource(
454 '/spic/:id', 454 '/spic/:id',
455 - {order: 'scheduleDate,lp,fcno', direction: 'ASC', id: '@id_route'}, 455 + {order: 'scheduleDate,lp,fcno', direction: 'ASC,ASC,ASC', id: '@id_route'},
456 { 456 {
457 list: { 457 list: {
458 method: 'GET', 458 method: 'GET',
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/index_info.html
@@ -34,35 +34,35 @@ @@ -34,35 +34,35 @@
34 <span ng-bind="etime | date: 'yyyy-MM-dd ' + '排班明细列表'"></span> 34 <span ng-bind="etime | date: 'yyyy-MM-dd ' + '排班明细列表'"></span>
35 </span> 35 </span>
36 </div> 36 </div>
37 - <div class="actions">  
38 - <a href="javascirpt:" class="btn btn-circle blue" >  
39 - <i class="fa fa-plus"></i>  
40 - 添加  
41 - </a> 37 + <!--<div class="actions">-->
  38 + <!--<a href="javascirpt:" class="btn btn-circle blue" >-->
  39 + <!--<i class="fa fa-plus"></i>-->
  40 + <!--添加-->
  41 + <!--</a>-->
42 42
43 - <div class="btn-group">  
44 - <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">  
45 - <i class="fa fa-share"></i>  
46 - <span>数据工具</span>  
47 - <i class="fa fa-angle-down"></i>  
48 - </a>  
49 - <ul class="dropdown-menu pull-right">  
50 - <li>  
51 - <a href="javascript:" class="tool-action">  
52 - <i class="fa fa-file-excel-o"></i>  
53 - 导出excel  
54 - </a>  
55 - </li>  
56 - <li class="divider"></li>  
57 - <li>  
58 - <a href="javascript:" class="tool-action">  
59 - <i class="fa fa-refresh"></i>  
60 - 刷行数据  
61 - </a>  
62 - </li>  
63 - </ul>  
64 - </div>  
65 - </div> 43 + <!--<div class="btn-group">-->
  44 + <!--<a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">-->
  45 + <!--<i class="fa fa-share"></i>-->
  46 + <!--<span>数据工具</span>-->
  47 + <!--<i class="fa fa-angle-down"></i>-->
  48 + <!--</a>-->
  49 + <!--<ul class="dropdown-menu pull-right">-->
  50 + <!--<li>-->
  51 + <!--<a href="javascript:" class="tool-action">-->
  52 + <!--<i class="fa fa-file-excel-o"></i>-->
  53 + <!--导出excel-->
  54 + <!--</a>-->
  55 + <!--</li>-->
  56 + <!--<li class="divider"></li>-->
  57 + <!--<li>-->
  58 + <!--<a href="javascript:" class="tool-action">-->
  59 + <!--<i class="fa fa-refresh"></i>-->
  60 + <!--刷行数据-->
  61 + <!--</a>-->
  62 + <!--</li>-->
  63 + <!--</ul>-->
  64 + <!--</div>-->
  65 + <!--</div>-->
66 </div> 66 </div>
67 67
68 <div class="portlet-body"> 68 <div class="portlet-body">
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/list.html
@@ -4,13 +4,13 @@ @@ -4,13 +4,13 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 5%;">序号</th>  
8 - <th style="width: 15%;">线路</th>  
9 - <th style="width: 20%;">时刻表</th>  
10 - <th>排班开始时间</th>  
11 - <th>排班结束时间</th>  
12 - <th>修改时间</th>  
13 - <th style="width: 21%">操作</th> 7 + <th style="width: 50px;">序号</th>
  8 + <th style="width: 150px;">线路</th>
  9 + <th style="width: 100%;">关联时刻表</th>
  10 + <th style="width: 150px;">排班开始日期</th>
  11 + <th style="width: 150px;">排班结束日期</th>
  12 + <th style="width: 180px;">排班操作时间</th>
  13 + <th style="width: 180px;">操作</th>
14 </tr> 14 </tr>
15 <tr role="row" class="filter"> 15 <tr role="row" class="filter">
16 <td></td> 16 <td></td>
@@ -25,9 +25,37 @@ @@ -25,9 +25,37 @@
25 datatype="xl"> 25 datatype="xl">
26 </sa-Select3> 26 </sa-Select3>
27 </td> 27 </td>
28 - <td></td>  
29 - <td></td>  
30 - <td></td> 28 + <td>
  29 + <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().name_like" placeholder="输入时刻表名称..."/>
  30 + </td>
  31 + <td>
  32 + <div class="input-group">
  33 + <input type="text" class="form-control input-sm"
  34 + name="scheduleFromTime" placeholder="选择日期..."
  35 + uib-datepicker-popup="yyyy-MM-dd"
  36 + is-open="ctrl.scheduleFromTime"
  37 + ng-model="ctrl.searchCondition()['scheduleFromTime_ge']" readonly/>
  38 + <span class="input-group-btn">
  39 + <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.scheduleFromTime_open()">
  40 + <i class="glyphicon glyphicon-calendar"></i>
  41 + </button>
  42 + </span>
  43 + </div>
  44 + </td>
  45 + <td>
  46 + <div class="input-group">
  47 + <input type="text" class="form-control input-sm"
  48 + name="scheduleToTime" placeholder="选择日期..."
  49 + uib-datepicker-popup="yyyy-MM-dd"
  50 + is-open="ctrl.scheduleToTime"
  51 + ng-model="ctrl.searchCondition()['scheduleToTime_le']" readonly/>
  52 + <span class="input-group-btn">
  53 + <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.scheduleToTime_open()">
  54 + <i class="glyphicon glyphicon-calendar"></i>
  55 + </button>
  56 + </span>
  57 + </div>
  58 + </td>
31 <td></td> 59 <td></td>
32 <td> 60 <td>
33 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" 61 <button class="btn btn-sm green btn-outline filter-submit margin-bottom"
@@ -65,9 +93,9 @@ @@ -65,9 +93,9 @@
65 <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>--> 93 <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>-->
66 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>--> 94 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>-->
67 <a ui-sref="schedulePlanInfoManage({spid : info.id, xlname : info.xl.name, ttname : info.ttInfo.name, stime : info.scheduleFromTime, etime : info.scheduleToTime})" 95 <a ui-sref="schedulePlanInfoManage({spid : info.id, xlname : info.xl.name, ttname : info.ttInfo.name, stime : info.scheduleFromTime, etime : info.scheduleToTime})"
68 - class="btn default blue-stripe btn-sm"> 排班明细 </a> 96 + class="btn btn-info btn-sm"> 明细 </a>
69 <a ng-click="ctrl.deletePlan(info.id)" 97 <a ng-click="ctrl.deletePlan(info.id)"
70 - class="btn default blue-stripe btn-sm"> 删除 </a> 98 + class="btn btn-danger btn-sm"> 删除 </a>
71 </td> 99 </td>
72 </tr> 100 </tr>
73 </tbody> 101 </tbody>
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/list_info.html
@@ -4,28 +4,37 @@ @@ -4,28 +4,37 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 40pt;">序号</th>  
8 - <th>线路</th>  
9 - <th style="width: 80pt;">日期</th>  
10 - <th>路牌</th>  
11 - <th>车辆</th>  
12 - <th>备注</th>  
13 - <th>报道时间</th>  
14 - <th>出场时间</th>  
15 - <th>驾驶员</th>  
16 - <th>工号</th>  
17 - <th>售票员</th>  
18 - <th>工号</th>  
19 - <th>班次类型</th>  
20 - <th>发车时间</th> 7 + <th style="width: 50px;">序号</th>
  8 + <th style="width: 100px;">线路</th>
  9 + <th style="width: 150px;">日期</th>
  10 + <th style="width: 60px;">路牌</th>
  11 + <th style="width: 150px;">车辆</th>
  12 + <th style="width: 150px;">驾驶员(工号)</th>
  13 + <th style="width: 150px;">售票员(工号)</th>
  14 + <th style="width: 80px;">班次类型</th>
  15 + <th style="width: 80px;">发车时间</th>
  16 + <th style="width: 100%">时刻表</th>
21 17
22 <!-- TODO:还有其他的 --> 18 <!-- TODO:还有其他的 -->
23 19
24 - <th style="width: 115pt;">操作</th>  
25 </tr> 20 </tr>
26 <tr role="row" class="filter"> 21 <tr role="row" class="filter">
27 <td></td> 22 <td></td>
28 <td></td> 23 <td></td>
  24 + <td>
  25 + <div class="input-group">
  26 + <input type="text" class="form-control input-sm"
  27 + name="scheduleDate" placeholder="选择日期..."
  28 + uib-datepicker-popup="yyyy-MM-dd"
  29 + is-open="ctrl.scheduleDate"
  30 + ng-model="ctrl.searchCondition()['scheduleDate_eq']" readonly/>
  31 + <span class="input-group-btn">
  32 + <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.scheduleDate_open()">
  33 + <i class="glyphicon glyphicon-calendar"></i>
  34 + </button>
  35 + </span>
  36 + </div>
  37 + </td>
29 <td></td> 38 <td></td>
30 <td></td> 39 <td></td>
31 <td></td> 40 <td></td>
@@ -33,21 +42,6 @@ @@ -33,21 +42,6 @@
33 <td></td> 42 <td></td>
34 <td></td> 43 <td></td>
35 <td></td> 44 <td></td>
36 - <td></td>  
37 - <td></td>  
38 - <td></td>  
39 - <td></td>  
40 - <td></td>  
41 -  
42 - <td>  
43 - <button class="btn btn-sm green btn-outline filter-submit margin-bottom"  
44 - ng-click="ctrl.pageChanaged()">  
45 - <i class="fa fa-search"></i> 搜索</button>  
46 -  
47 - <button class="btn btn-sm red btn-outline filter-cancel"  
48 - ng-click="ctrl.resetSearchCondition()">  
49 - <i class="fa fa-times"></i> 重置</button>  
50 - </td>  
51 45
52 </tr> 46 </tr>
53 </thead> 47 </thead>
@@ -69,24 +63,12 @@ @@ -69,24 +63,12 @@
69 <td> 63 <td>
70 <span ng-bind="info.clZbh"></span> 64 <span ng-bind="info.clZbh"></span>
71 </td> 65 </td>
72 - <td></td>  
73 <td> 66 <td>
74 - <span ng-bind="info.bdTime"></span>  
75 - </td>  
76 - <td>  
77 - <span ng-bind="info.ccTime"></span>  
78 - </td>  
79 - <td>  
80 - <span ng-bind="info.jName"></span>  
81 - </td>  
82 - <td>  
83 - <span ng-bind="info.jGh"></span>  
84 - </td>  
85 - <td>  
86 - <span ng-bind="info.sName"></span> 67 + <span>{{info.jName ? info.jName + '(' + info.jGh + ')' : ''}}</span>
  68 +
87 </td> 69 </td>
88 <td> 70 <td>
89 - <span ng-bind="info.sGh"></span> 71 + <span>{{info.sGh ? info.sName + '(' + info.sGh + ')' : ''}}</span>
90 </td> 72 </td>
91 <td> 73 <td>
92 <span ng-bind="info.bcType | dict:'ScheduleType':'未知' "></span> 74 <span ng-bind="info.bcType | dict:'ScheduleType':'未知' "></span>
@@ -94,13 +76,10 @@ @@ -94,13 +76,10 @@
94 <td> 76 <td>
95 <span ng-bind="info.fcsj"></span> 77 <span ng-bind="info.fcsj"></span>
96 </td> 78 </td>
97 -  
98 <td> 79 <td>
99 - <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>-->  
100 - <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>-->  
101 - <a ui-sref="#" class="btn default blue-stripe btn-sm"> 详细 </a>  
102 - <a ui-sref="#" class="btn default blue-stripe btn-sm"> 修改 </a> 80 + <abbr title="info.ttInfoName">{{info.ttInfoName}}</abbr>
103 </td> 81 </td>
  82 +
104 </tr> 83 </tr>
105 </tbody> 84 </tbody>
106 85
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/schedulePlanInfoManage.js
@@ -75,6 +75,12 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanInfoManageListCtrl&#39;, [&#39;Sch @@ -75,6 +75,12 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanInfoManageListCtrl&#39;, [&#39;Sch
75 infos: [] 75 infos: []
76 }; 76 };
77 77
  78 + // 日期 日期控件开关
  79 + self.scheduleDate = false;
  80 + self.scheduleDate_open = function() {
  81 + self.scheduleDate = true;
  82 + };
  83 +
78 var spid = $scope.spid; 84 var spid = $scope.spid;
79 85
80 // 初始创建的时候,获取一次列表数据 86 // 初始创建的时候,获取一次列表数据
@@ -118,6 +124,18 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanInfoManageListCtrl&#39;, [&#39;Sch @@ -118,6 +124,18 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanInfoManageListCtrl&#39;, [&#39;Sch
118 return schedulePlanInfoManageService.resetSearchCondition(); 124 return schedulePlanInfoManageService.resetSearchCondition();
119 }; 125 };
120 126
  127 + $scope.$watch(
  128 + function() {
  129 + return self.searchCondition()['scheduleDate_eq'];
  130 + },
  131 + function(newValue, oldValue) {
  132 + if (newValue == undefined && oldValue == undefined) {
  133 +
  134 + } else {
  135 + self.pageChanaged();
  136 + }
  137 + });
  138 +
121 }]); 139 }]);
122 140
123 141
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/schedulePlanManage.js
@@ -78,6 +78,16 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanManageListCtrl&#39;, [&#39;Schedul @@ -78,6 +78,16 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanManageListCtrl&#39;, [&#39;Schedul
78 infos: [] 78 infos: []
79 }; 79 };
80 80
  81 + // 日期 日期控件开关
  82 + self.scheduleFromTime = false;
  83 + self.scheduleFromTime_open = function() {
  84 + self.scheduleFromTime = true;
  85 + };
  86 + self.scheduleToTime = false;
  87 + self.scheduleToTime_open = function() {
  88 + self.scheduleToTime = true;
  89 + };
  90 +
81 // 初始创建的时候,获取一次列表数据 91 // 初始创建的时候,获取一次列表数据
82 schedulePlanManageService.getPage().then( 92 schedulePlanManageService.getPage().then(
83 function(result) { 93 function(result) {
src/main/resources/static/pages/scheduleApp/module/core/ttInfoDetailManage/form.html
@@ -89,7 +89,7 @@ @@ -89,7 +89,7 @@
89 ng-disabled="!item.isUploading"> 89 ng-disabled="!item.isUploading">
90 <span class="glyphicon glyphicon-ban-circle"></span> 取消 90 <span class="glyphicon glyphicon-ban-circle"></span> 取消
91 </button> 91 </button>
92 - <button type="button" class="btn btn-danger btn-xs" ng-click="item.remove()"> 92 + <button type="button" class="btn btn-danger btn-xs" ng-click="ctrl.removeItem(item)">
93 <span class="glyphicon glyphicon-trash"></span> 删除 93 <span class="glyphicon glyphicon-trash"></span> 删除
94 </button> 94 </button>
95 </td> 95 </td>
src/main/resources/static/pages/scheduleApp/module/core/ttInfoDetailManage/main.js
@@ -61,6 +61,11 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -61,6 +61,11 @@ angular.module(&#39;ScheduleApp&#39;).controller(
61 self.clearInputFile = function() { 61 self.clearInputFile = function() {
62 angular.element("input[type='file']").val(null); 62 angular.element("input[type='file']").val(null);
63 }; 63 };
  64 + self.removeItem = function(item) {
  65 + item.remove();
  66 + self.ttInfoDetailManageForForm.sheetname = undefined;
  67 + self.sheetnames = [];
  68 + };
64 69
65 // 上传文件组件 70 // 上传文件组件
66 self.uploader = new FileUploader({ 71 self.uploader = new FileUploader({
@@ -79,6 +84,8 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -79,6 +84,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
79 console.log(self.uploader.queue.length); 84 console.log(self.uploader.queue.length);
80 if (self.uploader.queue.length > 1) 85 if (self.uploader.queue.length > 1)
81 self.uploader.removeFromQueue(0); 86 self.uploader.removeFromQueue(0);
  87 + self.ttInfoDetailManageForForm.sheetname = undefined;
  88 + self.sheetnames = [];
82 }; 89 };
83 self.uploader.onSuccessItem = function(fileItem, response, status, headers) 90 self.uploader.onSuccessItem = function(fileItem, response, status, headers)
84 { 91 {
@@ -109,7 +116,7 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -109,7 +116,7 @@ angular.module(&#39;ScheduleApp&#39;).controller(
109 116
110 // TODO:edit操作暂时使用旧版本的js文件 117 // TODO:edit操作暂时使用旧版本的js文件
111 118
112 - // {"timestamp":1478674739246,"status":500,"error":"Internal Server Error","exception":"java.lang.ClassCastException","message":"java.lang.String cannot be cast to java.lang.Long","path":"/tidc/importfile"} 119 +
113 } 120 }
114 ] 121 ]
115 ); 122 );
116 \ No newline at end of file 123 \ No newline at end of file
src/main/resources/static/real_control_v2/css/line_schedule.css
@@ -190,6 +190,10 @@ @@ -190,6 +190,10 @@
190 font-weight: 600; 190 font-weight: 600;
191 } 191 }
192 192
  193 +.schedule-body .ct_table dl._search_hide{
  194 + display: none !important;
  195 +}
  196 +
193 .context-menu-list.schedule-ct-menu { 197 .context-menu-list.schedule-ct-menu {
194 /*font-size: 13px;*/ 198 /*font-size: 13px;*/
195 font-family: 微软雅黑; 199 font-family: 微软雅黑;
@@ -333,6 +337,12 @@ dd.tl-zzzx { @@ -333,6 +337,12 @@ dd.tl-zzzx {
333 width: 100%; 337 width: 100%;
334 } 338 }
335 339
  340 +.ct-form-modal span.uk-form-help-inline,
  341 +.ct-form-modal p.uk-form-help-block{
  342 + color: #888888;
  343 + font-size: 13px;
  344 +}
  345 +
336 346
337 /** 批量待发调整 */ 347 /** 批量待发调整 */
338 348
@@ -721,8 +731,29 @@ input.i-cbox[type=checkbox]{ @@ -721,8 +731,29 @@ input.i-cbox[type=checkbox]{
721 transition: all .3s ease; 731 transition: all .3s ease;
722 } 732 }
723 733
724 -.search_sch_panel .uk-form input.active[type=text]{  
725 - width: 130px; 734 +.search_sch_panel .uk-form div.uk-form-icon.active input[type=text]{
  735 + width: 145px;
  736 +}
  737 +
  738 +.search_sch_panel .uk-form div.uk-form-icon i.cancel{
  739 + position: absolute;
  740 + right: 8px;
  741 + font-size: 13px;
  742 + color: #c3b9ba;
  743 + cursor: pointer;
  744 + display: none;
  745 + padding: 0;
  746 + pointer-events: auto;
  747 + width: 18px;
  748 + text-indent: 0;
  749 +}
  750 +
  751 +/*.search_sch_panel .uk-form div.uk-form-icon i.cancel:before{*/
  752 +
  753 +/*}*/
  754 +
  755 +.search_sch_panel .uk-form div.uk-form-icon.active i.cancel{
  756 + display: block;
726 } 757 }
727 758
728 .search_sch_panel .uk-form input[type=text]::-webkit-input-placeholder{ 759 .search_sch_panel .uk-form input[type=text]::-webkit-input-placeholder{
src/main/resources/static/real_control_v2/css/sch_autocomp_result.css
@@ -15,8 +15,9 @@ @@ -15,8 +15,9 @@
15 15
16 .sch-search-results small { 16 .sch-search-results small {
17 /*display: block;*/ 17 /*display: block;*/
18 - color: #9b9797;  
19 - margin-left: 9px; 18 + /*color: #9b9797;
  19 + margin-left: 9px;*/
  20 + color: #009dd8;
20 } 21 }
21 22
22 .sch-search-results small.search-result-desc { 23 .sch-search-results small.search-result-desc {
@@ -25,6 +26,7 @@ @@ -25,6 +26,7 @@
25 display: block; 26 display: block;
26 text-overflow: ellipsis; 27 text-overflow: ellipsis;
27 margin-left: 0; 28 margin-left: 0;
  29 + color: #9b9797;
28 } 30 }
29 31
30 32
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
@@ -7,16 +7,17 @@ @@ -7,16 +7,17 @@
7 {{else}} 7 {{else}}
8 下行/{{line.endStationName}} 8 下行/{{line.endStationName}}
9 {{/if}} 9 {{/if}}
10 - <!-- <div class="search_sch_panel">  
11 - <form class="uk-form"> 10 + <div class="search_sch_panel">
  11 + <form class="uk-form" onsubmit="javascript:return false;">
12 <div class="uk-autocomplete sch-search-autocom"> 12 <div class="uk-autocomplete sch-search-autocom">
13 <div class="uk-form-icon"> 13 <div class="uk-form-icon">
14 <i class="uk-icon-search"></i> 14 <i class="uk-icon-search"></i>
15 <input type="text" placeholder="search"> 15 <input type="text" placeholder="search">
  16 + <i class="cancel uk-icon-times-circle" data-uk-tooltip="{pos:'right'}" title="取消过滤"></i>
16 </div> 17 </div>
17 </div> 18 </div>
18 </form> 19 </form>
19 - </div> --> 20 + </div>
20 </h3> 21 </h3>
21 <div class="schedule-body"> 22 <div class="schedule-body">
22 <div class="ct_table_wrap"> 23 <div class="ct_table_wrap">
src/main/resources/static/real_control_v2/fragments/line_schedule/sys_mailbox.html
@@ -16,9 +16,9 @@ @@ -16,9 +16,9 @@
16 <div class="uk-width-medium-1-1 sys-note-42" id="{{domId}}"> 16 <div class="uk-width-medium-1-1 sys-note-42" id="{{domId}}">
17 <div class="uk-panel uk-panel-box uk-panel-box-secondary"> 17 <div class="uk-panel uk-panel-box uk-panel-box-secondary">
18 <h5 class="title"> 18 <h5 class="title">
19 - {{t.fcsjActual}} {{t.clZbh}} 已由 {{t.qdzName}} 发出 19 + {{t.fcsjActual}} {{t.clZbh}} 已由 {{t.qdzName}} 发出,执行班次 {{t.dfsj}}
20 </h5> 20 </h5>
21 - <code>{{dataStr}}</code> 21 + <code>{{t.fcsjActual}}</code>
22 <div class="uk-button-group"> 22 <div class="uk-button-group">
23 <a class="uk-button uk-button-mini uk-button-primary" >确定</a> 23 <a class="uk-button uk-button-mini uk-button-primary" >确定</a>
24 </div> 24 </div>
@@ -36,7 +36,7 @@ @@ -36,7 +36,7 @@
36 已完成当日所有班次。 36 已完成当日所有班次。
37 {{/if}} 37 {{/if}}
38 </h5> 38 </h5>
39 - <code>{{dataStr}}</code> 39 + <code>{{t.zdsjActual}}</code>
40 <div class="uk-button-group"> 40 <div class="uk-button-group">
41 <a class="uk-button uk-button-mini uk-button-primary" >确定</a> 41 <a class="uk-button uk-button-mini uk-button-primary" >确定</a>
42 </div> 42 </div>
src/main/resources/static/real_control_v2/fragments/north/nav/tts_config.html 0 → 100644
  1 +<div class="uk-modal ct-form-modal" id="tts-config-modal">
  2 + <div class="uk-modal-dialog" style="width: 530px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>TTS 语音设置</h2></div>
  6 +
  7 + <p style="border-bottom: 1px solid #efefef;color: grey;padding-bottom: 9px;">
  8 + <small>
  9 + <i class="uk-icon-question-circle"> </i>
  10 + 设置项将会保存在本地客户端,清理缓存和更换电脑会重置.</small>
  11 + </p>
  12 + <form class="uk-form uk-form-horizontal">
  13 + <div class="uk-grid">
  14 + <div class="uk-width-2-3 uk-container-center">
  15 + <div class="uk-form-row">
  16 + <label class="uk-form-label">启用TTS</label>
  17 + <div class="uk-form-controls">
  18 + <select name="enable">
  19 + <option value="1">启用</option>
  20 + <option value="0">禁用</option>
  21 + </select>
  22 + </div>
  23 + </div>
  24 + </div>
  25 + </div>
  26 + <div class="uk-grid">
  27 + <div class="uk-width-2-3 uk-container-center">
  28 + <div class="uk-form-row">
  29 + <label class="uk-form-label">发音速度</label>
  30 + <div class="uk-form-controls">
  31 + <input name="rate" max=10 data-fv-lessthan-inclusive="false" style="width: calc(100% - 80px);" />
  32 + <span class="uk-form-help-inline">1 ~ 10</span>
  33 + </div>
  34 + </div>
  35 + </div>
  36 + </div>
  37 +
  38 + <div class="uk-grid">
  39 + <div class="uk-width-2-3 uk-container-center">
  40 + <div class="uk-form-row">
  41 + <label class="uk-form-label">播放队列</label>
  42 + <div class="uk-form-controls">
  43 + <select name="queueModel">
  44 + <option value="1">总是最新</option>
  45 + <option value="-1">按顺序完整播报</option>
  46 + </select>
  47 + <p class="uk-form-help-block"></p>
  48 + </div>
  49 + </div>
  50 + </div>
  51 + </div>
  52 +
  53 + <div class="uk-grid">
  54 + <div class="uk-width-1-1" style="margin-top: 25px;">
  55 + <div class="uk-panel uk-panel-box" style="font-size: 12px;color: grey;">
  56 + 我能吞下玻璃而不伤身体&nbsp;
  57 + <button class="uk-button uk-button-success uk-button-mini" type="button" id="tts-audition-btn">
  58 + <i class="uk-icon-volume-down"> </i> 试听</button>
  59 + </div>
  60 + </div>
  61 + </div>
  62 +
  63 + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
  64 + <button type="button" class="uk-button uk-modal-close">取消</button>
  65 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  66 + </div>
  67 + </form>
  68 + </div>
  69 +
  70 + <script>
  71 + (function() {
  72 + var modal = '#tts-config-modal';
  73 + var f = $('form', modal);
  74 +
  75 + $(modal).on('init', function(e, data) {
  76 + var config=gb_tts.defaultConfig();
  77 + for(var name in config)
  78 + $('[name='+name+']', f).val(config[name]).trigger('change');
  79 +
  80 + });
  81 +
  82 + $('select[name=queueModel]', f).on('change', function(){
  83 + var val=$(this).val()
  84 + ,$help=$(this).next('.uk-form-help-block');
  85 +
  86 + if(val == 1)
  87 + $help.text('有新的语音,强制中断未结束的语音');
  88 + else
  89 + $help.text('按照队列顺序依次完整播报');
  90 + });
  91 +
  92 + $('#tts-audition-btn', f).on('click', function(){
  93 + var msg='我能吞下玻璃而不伤身体'
  94 + ,rate=$('[name=rate]',f).val();
  95 + gb_tts.audition(msg, rate);
  96 + });
  97 +
  98 + f.formValidation(gb_form_validation_opts);
  99 + f.on('success.form.fv', function(e) {
  100 + e.preventDefault();
  101 + var data = $(this).serializeJSON();
  102 + gb_tts.writeConfig(data);
  103 + UIkit.modal(modal).hide();
  104 + notify_succ('TTS配置修改成功!');
  105 + });
  106 +
  107 + })();
  108 + </script>
  109 +</div>
src/main/resources/static/real_control_v2/js/data/data_basic.js
@@ -2,11 +2,12 @@ @@ -2,11 +2,12 @@
2 2
3 var gb_data_basic = (function() { 3 var gb_data_basic = (function() {
4 4
5 - var stationRoutes,lineCode2NameAll,lineInformations;  
6 - var ep = EventProxy.create("stationRoutes", "lineCode2Name", "lineInformations", function(routes, code2Name, informations) { 5 + var stationRoutes,lineCode2NameAll,lineInformations, nbbm2deviceMap;
  6 + var ep = EventProxy.create("stationRoutes", "lineCode2Name", "lineInformations", "nbbm2deviceId", function(routes, code2Name, informations, nbbm2device) {
7 stationRoutes = routes; 7 stationRoutes = routes;
8 lineCode2NameAll = code2Name; 8 lineCode2NameAll = code2Name;
9 lineInformations = informations; 9 lineInformations = informations;
  10 + nbbm2deviceMap = nbbm2device;
10 gb_main_ep.emitLater('data-basic'); 11 gb_main_ep.emitLater('data-basic');
11 }); 12 });
12 13
@@ -46,6 +47,11 @@ var gb_data_basic = (function() { @@ -46,6 +47,11 @@ var gb_data_basic = (function() {
46 ep.emit('lineCode2Name', rs); 47 ep.emit('lineCode2Name', rs);
47 }); 48 });
48 49
  50 + //nbbm to device id
  51 + $.get('/basic/nbbm2deviceId', function(rs){
  52 + ep.emit('nbbm2deviceId', rs);
  53 + });
  54 +
49 function findLineByCodes(codeArr){ 55 function findLineByCodes(codeArr){
50 var rs=[]; 56 var rs=[];
51 $.each(codeArr, function(){ 57 $.each(codeArr, function(){
@@ -73,6 +79,7 @@ var gb_data_basic = (function() { @@ -73,6 +79,7 @@ var gb_data_basic = (function() {
73 activeLines: activeLines, 79 activeLines: activeLines,
74 line_idx: line_idx, 80 line_idx: line_idx,
75 codeToLine: codeToLine, 81 codeToLine: codeToLine,
  82 + nbbm2deviceMap: function(){return nbbm2deviceMap;},
76 getLineInformation: getLineInformation, 83 getLineInformation: getLineInformation,
77 stationRoutes: function(lineCode){return stationRoutes[lineCode]}, 84 stationRoutes: function(lineCode){return stationRoutes[lineCode]},
78 findLineByCodes: findLineByCodes, 85 findLineByCodes: findLineByCodes,
src/main/resources/static/real_control_v2/js/data/data_gps.js
@@ -76,11 +76,16 @@ var gb_data_gps = (function() { @@ -76,11 +76,16 @@ var gb_data_gps = (function() {
76 return realData[deviceId]; 76 return realData[deviceId];
77 } 77 }
78 78
  79 + var findGpsByNbbm = function(nbbm){
  80 + return realData[gb_data_basic.nbbm2deviceMap()[nbbm]];
  81 + }
  82 +
79 return { 83 return {
80 fixedTimeRefresh: fixedTimeRefresh, 84 fixedTimeRefresh: fixedTimeRefresh,
81 registerCallback: registerCallback, 85 registerCallback: registerCallback,
82 allGps: realData, 86 allGps: realData,
83 gpsByLineCode: gpsByLineCode, 87 gpsByLineCode: gpsByLineCode,
84 - findOne: findOne 88 + findOne: findOne,
  89 + findGpsByNbbm: findGpsByNbbm
85 }; 90 };
86 })(); 91 })();
src/main/resources/static/real_control_v2/js/data/data_schedule.js deleted 100644 → 0
1 -/* 实际排班数据管理模块 */  
2 -  
3 -var gb_data_sch = (function(){  
4 -  
5 -})();  
src/main/resources/static/real_control_v2/js/data/json/north_toolbar.json
@@ -12,5 +12,10 @@ @@ -12,5 +12,10 @@
12 }] 12 }]
13 }, { 13 }, {
14 "id": 3, 14 "id": 3,
15 - "text": "系统设置" 15 + "text": "系统设置",
  16 + "children": [{
  17 + "id": 3.1,
  18 + "text": "TTS",
  19 + "event": "tts_config"
  20 + }]
16 }] 21 }]
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
@@ -5,7 +5,8 @@ var gb_schedule_table = (function() { @@ -5,7 +5,8 @@ var gb_schedule_table = (function() {
5 var temps; 5 var temps;
6 //线路分组的班次数据 6 //线路分组的班次数据
7 var line2Schedule = {}; 7 var line2Schedule = {};
8 - 8 + //车辆应发未发车辆数
  9 + var car_yfwf_map = {};
9 var schedule_sort = function(s1, s2) { 10 var schedule_sort = function(s1, s2) {
10 return s1.dfsjT - s2.dfsjT; 11 return s1.dfsjT - s2.dfsjT;
11 } 12 }
@@ -64,7 +65,7 @@ var gb_schedule_table = (function() { @@ -64,7 +65,7 @@ var gb_schedule_table = (function() {
64 //dbclick event 65 //dbclick event
65 gb_schedule_table_dbclick.init(); 66 gb_schedule_table_dbclick.init();
66 67
67 - cb&&cb(); 68 + cb && cb();
68 }); 69 });
69 } 70 }
70 71
@@ -97,44 +98,44 @@ var gb_schedule_table = (function() { @@ -97,44 +98,44 @@ var gb_schedule_table = (function() {
97 } 98 }
98 99
99 //新增一个班次,附带更新的班次 100 //新增一个班次,附带更新的班次
100 - var insertSchedule=function(sch, upArr){  
101 - line2Schedule[sch.xlBm][sch.id]=sch;  
102 - //update  
103 - if(isArray(upArr)){  
104 - $.each(upArr, function(){  
105 - line2Schedule[this.xlBm][this.id]=this;  
106 - });  
107 - }  
108 -  
109 - //重新渲染表格  
110 - var data=gb_common.get_vals(line2Schedule[sch.xlBm]).sort(schedule_sort)  
111 - ,dirData = gb_common.groupBy(data, 'xlDir')  
112 - ,tabCont=$('li.line_schedule[data-id='+sch.xlBm+']');  
113 -  
114 - for (var upDown in dirData) {  
115 - htmlStr = temps['line-schedule-table-temp']({  
116 - dir: upDown,  
117 - line: gb_data_basic.codeToLine[sch.xlBm],  
118 - list: dirData[upDown]  
119 - });  
120 - $('.schedule-wrap .card-panel:eq(' + upDown + ')', tabCont).html(htmlStr);  
121 - }  
122 - calc_yfwf_num(sch.xlBm);  
123 - //定位到新添加的班次  
124 - scroToDl(sch); 101 + var insertSchedule = function(sch, upArr) {
  102 + line2Schedule[sch.xlBm][sch.id] = sch;
  103 + //update
  104 + if (isArray(upArr)) {
  105 + $.each(upArr, function() {
  106 + line2Schedule[this.xlBm][this.id] = this;
  107 + });
  108 + }
  109 +
  110 + //重新渲染表格
  111 + var data = gb_common.get_vals(line2Schedule[sch.xlBm]).sort(schedule_sort),
  112 + dirData = gb_common.groupBy(data, 'xlDir'),
  113 + tabCont = $('li.line_schedule[data-id=' + sch.xlBm + ']');
  114 +
  115 + for (var upDown in dirData) {
  116 + htmlStr = temps['line-schedule-table-temp']({
  117 + dir: upDown,
  118 + line: gb_data_basic.codeToLine[sch.xlBm],
  119 + list: dirData[upDown]
  120 + });
  121 + $('.schedule-wrap .card-panel:eq(' + upDown + ')', tabCont).html(htmlStr);
  122 + }
  123 + calc_yfwf_num(sch.xlBm);
  124 + //定位到新添加的班次
  125 + scroToDl(sch);
125 } 126 }
126 127
127 //删除一个班次 128 //删除一个班次
128 - var deheteSchedule = function(sch){  
129 - sch = line2Schedule[sch.xlBm][sch.id];  
130 - if(sch){  
131 - var dl = $('li.line_schedule[data-id=' + sch.xlBm + '] .ct_table_body dl[data-id=' + sch.id + ']')  
132 - ,dls=dl.parent().find('dl');  
133 - delete line2Schedule[sch.xlBm][sch.id];  
134 - dl.remove();  
135 - reset_seq_no(dls);  
136 - calc_yfwf_num(sch.xlBm);  
137 - } 129 + var deheteSchedule = function(sch) {
  130 + sch = line2Schedule[sch.xlBm][sch.id];
  131 + if (sch) {
  132 + var dl = $('li.line_schedule[data-id=' + sch.xlBm + '] .ct_table_body dl[data-id=' + sch.id + ']'),
  133 + dls = dl.parent().find('dl');
  134 + delete line2Schedule[sch.xlBm][sch.id];
  135 + dl.remove();
  136 + reset_seq_no(dls);
  137 + calc_yfwf_num(sch.xlBm);
  138 + }
138 } 139 }
139 140
140 //更新班次 141 //更新班次
@@ -150,7 +151,7 @@ var gb_schedule_table = (function() { @@ -150,7 +151,7 @@ var gb_schedule_table = (function() {
150 151
151 //update dom 152 //update dom
152 var updateDom = function(sch) { 153 var updateDom = function(sch) {
153 - if(!sch) return; 154 + if (!sch) return;
154 var dl = $('li.line_schedule[data-id=' + sch.xlBm + '] .ct_table_body dl[data-id=' + sch.id + ']'); 155 var dl = $('li.line_schedule[data-id=' + sch.xlBm + '] .ct_table_body dl[data-id=' + sch.id + ']');
155 var dds = $('dd', dl); 156 var dds = $('dd', dl);
156 $(dds[1]).find('a').text(sch.lpName); 157 $(dds[1]).find('a').text(sch.lpName);
@@ -169,17 +170,17 @@ var gb_schedule_table = (function() { @@ -169,17 +170,17 @@ var gb_schedule_table = (function() {
169 calc_sch_real_shift(sch); 170 calc_sch_real_shift(sch);
170 var sfsjDd = temps['line-schedule-sfsj-temp'](sch); 171 var sfsjDd = temps['line-schedule-sfsj-temp'](sch);
171 $(dds[7]).replaceWith(sfsjDd); 172 $(dds[7]).replaceWith(sfsjDd);
172 - if(sch.remarks)  
173 - $(dds[8]).html('<span title="'+sch.remarks+'" data-uk-tooltip="{pos:\'top-left\'}">'+sch.remarks+'</span>'); 173 + if (sch.remarks)
  174 + $(dds[8]).html('<span title="' + sch.remarks + '" data-uk-tooltip="{pos:\'top-left\'}">' + sch.remarks + '</span>');
174 else 175 else
175 - $(dds[8]).html(''); 176 + $(dds[8]).html('');
176 } 177 }
177 178
178 //拖拽选中... 179 //拖拽选中...
179 var seq_nos = '.line-schedule-table .ct_table_body>dl>dd.seq_no'; 180 var seq_nos = '.line-schedule-table .ct_table_body>dl>dd.seq_no';
180 var drag_strat; 181 var drag_strat;
181 $(document).on('mousedown', seq_nos, function(e) { 182 $(document).on('mousedown', seq_nos, function(e) {
182 - if(e.button != 0) return; 183 + if (e.button != 0) return;
183 var dl = $(this).parent(); 184 var dl = $(this).parent();
184 if (dl.hasClass('drag-active')) 185 if (dl.hasClass('drag-active'))
185 dl.removeClass('drag-active'); 186 dl.removeClass('drag-active');
@@ -196,14 +197,14 @@ var gb_schedule_table = (function() { @@ -196,14 +197,14 @@ var gb_schedule_table = (function() {
196 197
197 reset_drag_active_all(this); 198 reset_drag_active_all(this);
198 //向上选中 199 //向上选中
199 - if(e <= drag_strat){  
200 - for (var i = drag_strat; i > e-2; i--)  
201 - $(dls[i]).addClass('drag-active'); 200 + if (e <= drag_strat) {
  201 + for (var i = drag_strat; i > e - 2; i--)
  202 + $(dls[i]).addClass('drag-active');
202 } 203 }
203 //向下选中 204 //向下选中
204 - else{  
205 - for (var j = drag_strat; j < e; j++)  
206 - $(dls[j]).addClass('drag-active'); 205 + else {
  206 + for (var j = drag_strat; j < e; j++)
  207 + $(dls[j]).addClass('drag-active');
207 } 208 }
208 } 209 }
209 }).on('click', seq_nos, function() { 210 }).on('click', seq_nos, function() {
@@ -220,22 +221,22 @@ var gb_schedule_table = (function() { @@ -220,22 +221,22 @@ var gb_schedule_table = (function() {
220 schArr = gb_common.get_vals(line2Schedule[lineCode]).filter(function(item) { 221 schArr = gb_common.get_vals(line2Schedule[lineCode]).filter(function(item) {
221 return item.clZbh == sch.clZbh; 222 return item.clZbh == sch.clZbh;
222 }).sort(schedule_sort), 223 }).sort(schedule_sort),
223 - nextSch,tempDL; 224 + nextSch, tempDL;
224 $.each(schArr, function(i) { 225 $.each(schArr, function(i) {
225 - tempDL=$('dl[data-id=' + this.id + ']', contWrap); 226 + tempDL = $('dl[data-id=' + this.id + ']', contWrap);
226 tempDL.addClass('relevance-active'); 227 tempDL.addClass('relevance-active');
227 - if (i < schArr.length - 1 && this.id == id){  
228 - nextSch = schArr[i + 1];  
229 - tempDL.addClass('intimity'); 228 + if (i < schArr.length - 1 && this.id == id) {
  229 + nextSch = schArr[i + 1];
  230 + tempDL.addClass('intimity');
230 } 231 }
231 }); 232 });
232 233
233 - if(nextSch){  
234 - $('dl[data-id=' + nextSch.id + ']', contWrap).addClass('intimity');  
235 - if (nextSch.xlDir == sch.xlDir)  
236 - return;  
237 - //滚动到下一个班次  
238 - scroToDl(nextSch); 234 + if (nextSch) {
  235 + $('dl[data-id=' + nextSch.id + ']', contWrap).addClass('intimity');
  236 + if (nextSch.xlDir == sch.xlDir)
  237 + return;
  238 + //滚动到下一个班次
  239 + scroToDl(nextSch);
239 } 240 }
240 }); 241 });
241 242
@@ -282,25 +283,33 @@ var gb_schedule_table = (function() { @@ -282,25 +283,33 @@ var gb_schedule_table = (function() {
282 $(dd).parents('.uk-grid.schedule-wrap').find('.relevance-active').removeClass('relevance-active intimity'); 283 $(dd).parents('.uk-grid.schedule-wrap').find('.relevance-active').removeClass('relevance-active intimity');
283 } 284 }
284 285
285 - //计算应发未发数量  
286 - var calc_yfwf_num = function(lineCode){  
287 286
288 - var schArr=gb_common.get_vals(line2Schedule[lineCode]).sort(schedule_sort)  
289 - ,yfwf_num=0  
290 - ,t = new Date().valueOf(); 287 + //计算应发未发数量 car_yfwf_map
  288 + var calc_yfwf_num = function(lineCode) {
291 289
292 - $.each(schArr, function(){  
293 - if(this.fcsjT > t)  
294 - return false; 290 + var schArr = gb_common.get_vals(line2Schedule[lineCode]).sort(schedule_sort),
  291 + yfwf_num = 0,
  292 + t = new Date().valueOf();
295 293
296 - if(this.fcsjActual == null && this.fcsjActualTime == null && this.status != -1)  
297 - yfwf_num ++;  
298 - }); 294 + var carYfwfMap={}, nbbm;
  295 + $.each(schArr, function() {
  296 + if (this.fcsjT > t)
  297 + return false;
  298 +
  299 + if (this.fcsjActual == null && this.fcsjActualTime == null && this.status != -1){
  300 + yfwf_num++;
  301 + nbbm=this.clZbh;
  302 + if(carYfwfMap[nbbm])
  303 + carYfwfMap[nbbm]++;
  304 + else
  305 + carYfwfMap[nbbm]=1;
  306 + }
  307 + });
  308 + car_yfwf_map[lineCode]=carYfwfMap;
299 309
300 - $('#badge_yfwf_num_'+lineCode).text(yfwf_num); 310 + $('#badge_yfwf_num_' + lineCode).text(yfwf_num);
301 } 311 }
302 312
303 -  
304 return { 313 return {
305 show: show, 314 show: show,
306 findScheduleByLine: findScheduleByLine, 315 findScheduleByLine: findScheduleByLine,
@@ -308,6 +317,7 @@ var gb_schedule_table = (function() { @@ -308,6 +317,7 @@ var gb_schedule_table = (function() {
308 deheteSchedule: deheteSchedule, 317 deheteSchedule: deheteSchedule,
309 insertSchedule: insertSchedule, 318 insertSchedule: insertSchedule,
310 schedule_sort: schedule_sort, 319 schedule_sort: schedule_sort,
311 - calc_yfwf_num: calc_yfwf_num 320 + calc_yfwf_num: calc_yfwf_num,
  321 + car_yfwf_map: function(lineCode){return car_yfwf_map[lineCode];}
312 }; 322 };
313 })(); 323 })();
src/main/resources/static/real_control_v2/js/line_schedule/search.js
@@ -8,7 +8,7 @@ var gb_sch_search = (function() { @@ -8,7 +8,7 @@ var gb_sch_search = (function() {
8 ' <li data-value="{{ $item.value }}">' + 8 ' <li data-value="{{ $item.value }}">' +
9 ' <a>' + 9 ' <a>' +
10 ' {{ $item.value }}' + 10 ' {{ $item.value }}' +
11 - ' <small >执行班次 07:00</small>' + 11 + ' <small >{{$item.exec}}</small>' +
12 ' <small class="search-result-desc">{{{ $item.desc }}}</small>' + 12 ' <small class="search-result-desc">{{{ $item.desc }}}</small>' +
13 ' </a>' + 13 ' </a>' +
14 ' </li>' + 14 ' </li>' +
@@ -20,7 +20,7 @@ var gb_sch_search = (function() { @@ -20,7 +20,7 @@ var gb_sch_search = (function() {
20 _input, schArr, lineCode, group_cars; 20 _input, schArr, lineCode, group_cars;
21 $(document) 21 $(document)
22 .on('focus', ips, function() { 22 .on('focus', ips, function() {
23 - $(this).addClass('active'); 23 + $(this).parent().addClass('active');
24 lineCode = $(this).parents('li.line_schedule').data('id'); 24 lineCode = $(this).parents('li.line_schedule').data('id');
25 schArr = gb_common.get_vals(gb_schedule_table.findScheduleByLine(lineCode)); 25 schArr = gb_common.get_vals(gb_schedule_table.findScheduleByLine(lineCode));
26 26
@@ -28,10 +28,15 @@ var gb_sch_search = (function() { @@ -28,10 +28,15 @@ var gb_sch_search = (function() {
28 _input = $(this); 28 _input = $(this);
29 }) 29 })
30 .on('blur', ips, function() { 30 .on('blur', ips, function() {
31 - if ($(this).val() == '')  
32 - $(this).removeClass('active'); 31 + if ($(this).val() == ''){
  32 + reset_all();
  33 + }
33 }); 34 });
34 35
  36 + $(document).on('click', '.search_sch_panel i.cancel', function(){
  37 + reset_all();
  38 + });
  39 +
35 var elements = '.search_sch_panel .sch-search-autocom'; 40 var elements = '.search_sch_panel .sch-search-autocom';
36 var init = function() { 41 var init = function() {
37 $(elements).each(function() { 42 $(elements).each(function() {
@@ -43,32 +48,67 @@ var gb_sch_search = (function() { @@ -43,32 +48,67 @@ var gb_sch_search = (function() {
43 var constructor = function(e) { 48 var constructor = function(e) {
44 UIkit.autocomplete(e, { 49 UIkit.autocomplete(e, {
45 minLength: 1, 50 minLength: 1,
46 - delay: 50, 51 + delay: 10,
47 source: autocomplete_source 52 source: autocomplete_source
48 }).on('selectitem.uk.autocomplete', selectitem); 53 }).on('selectitem.uk.autocomplete', selectitem);
49 } 54 }
50 55
51 var autocomplete_source = function(release) { 56 var autocomplete_source = function(release) {
52 var rs = [], 57 var rs = [],
53 - v = _input.val().toUpperCase(); 58 + v = _input.val().toUpperCase(),
  59 + gps, yfwf_map = gb_schedule_table.car_yfwf_map(lineCode);
  60 +
54 for (var car in group_cars) { 61 for (var car in group_cars) {
55 - if (car.indexOf(v) != -1) 62 + if (car.indexOf(v) != -1) {
  63 + //车辆对应的gps
  64 + gps = gb_data_gps.findGpsByNbbm(car)
56 rs.push({ 65 rs.push({
57 value: car, 66 value: car,
58 - desc: '应发未发:0,已完成 8 个班次' 67 + desc: '应发未发:' + (yfwf_map[car] == null ? 0 : yfwf_map[car]),
  68 + exec: execSch(gps)
59 }); 69 });
  70 + }
60 } 71 }
61 72
62 - console.log(rs);  
63 release && release(rs); 73 release && release(rs);
64 } 74 }
65 75
66 - var selectitem = function(event, data, acobject){  
67 - var cont='li.line_schedule[data-id='+lineCode+']'  
68 - ,tbodys=$('.line-schedule-table .ct_table_body', cont); 76 + var reset_all = function() {
  77 + var cont = 'li.line_schedule[data-id=' + lineCode + ']';
  78 + //uikit 会记住上一次搜索值,触发keyup以清空该值
  79 + $('.sch-search-autocom input', cont).val('').trigger('keyup').parent().removeClass('active');
  80 + $('.line-schedule-table .ct_table_body dl._search_hide', cont).removeClass('_search_hide');
  81 + }
  82 +
  83 + function execSch(gps) {
  84 + if (gps && gps.schId) {
  85 + var sch = gb_schedule_table.findScheduleByLine(gps.lineId)[gps.schId];
  86 + if (sch)
  87 + return '(执行' + (sch.xlDir == 0 ? '上行' : '下行') + sch.dfsj + ')';
  88 + }
  89 + return '';
  90 + }
  91 +
  92 + var selectitem = function(event, data, acobject) {
  93 + var cont = 'li.line_schedule[data-id=' + lineCode + ']',
  94 + tbodys = $('.line-schedule-table .ct_table_body', cont);
  95 +
  96 + $('.sch-search-autocom input', cont).val(data.value).parent().addClass('active');
  97 +
  98 + $.each(tbodys, function() {
  99 + filterScheduleByNbbm(this, data.value);
  100 + });
  101 + }
69 102
70 - $('.sch-search-autocom input', cont).val(data.value).addClass('active');  
71 - console.log(tbodys); 103 + var filterScheduleByNbbm = function(tbody, car) {
  104 + var dls = $('dl', tbody),
  105 + dds;
  106 + dls.removeClass('_search_hide');
  107 + $.each(dls, function() {
  108 + dds = $('dd', this);
  109 + if (car != $(dds[2]).data('nbbm'))
  110 + $(this).addClass('_search_hide');
  111 + });
72 } 112 }
73 113
74 return { 114 return {
src/main/resources/static/real_control_v2/js/main.js
@@ -37,7 +37,7 @@ var gb_main_ep = new EventProxy(), @@ -37,7 +37,7 @@ var gb_main_ep = new EventProxy(),
37 eq.once('render-sch-table', function() { 37 eq.once('render-sch-table', function() {
38 gb_schedule_table.show(function(){ 38 gb_schedule_table.show(function(){
39 //搜索框 39 //搜索框
40 - //gb_sch_search.init(); 40 + gb_sch_search.init();
41 }); 41 });
42 42
43 //嵌入地图页面 43 //嵌入地图页面
src/main/resources/static/real_control_v2/js/north/toolbar.js
@@ -46,6 +46,9 @@ var gb_northToolbar = (function() { @@ -46,6 +46,9 @@ var gb_northToolbar = (function() {
46 }, 46 },
47 directive_history: function(){ 47 directive_history: function(){
48 open_modal('/real_control_v2/fragments/north/nav/directive_history.html', {}, modal_opts); 48 open_modal('/real_control_v2/fragments/north/nav/directive_history.html', {}, modal_opts);
  49 + },
  50 + tts_config: function(){
  51 + open_modal('/real_control_v2/fragments/north/nav/tts_config.html', {}, modal_opts);
49 } 52 }
50 } 53 }
51 })(); 54 })();
src/main/resources/static/real_control_v2/js/utils/tts.js 0 → 100644
  1 +var gb_tts = (function() {
  2 +
  3 + var storage = window.localStorage;
  4 + var defaultConfig = {
  5 + //发音速度 1 ~ 10
  6 + rate: 1.2,
  7 + //播放队列 1:覆盖式(总是播放最新) -1:完整的按顺序播报
  8 + queueModel: 1,
  9 + enable: 1
  10 + };
  11 +
  12 + var readLocal = function() {
  13 + //从本地客户端读取配置信息
  14 + var cofig = storage.getItem('tts_cofig');
  15 + if (cofig) {
  16 + cofig = JSON.parse(cofig);
  17 + defaultConfig = cofig;
  18 + }
  19 + }
  20 +
  21 + var writeConfig = function(newConfig) {
  22 + storage.setItem('tts_cofig', JSON.stringify(newConfig));
  23 + defaultConfig = newConfig;
  24 + }
  25 +
  26 + var synth = window.speechSynthesis;
  27 + readLocal();
  28 +
  29 + var speak = function(t, lineCode) {
  30 + if (defaultConfig.enable != 1)
  31 + return;
  32 + if (defaultConfig.queueModel == 1)
  33 + synth.cancel();
  34 +
  35 + t = gb_data_basic.codeToLine[lineCode].name + t;
  36 + //延迟100毫秒,防止中断旧语音时 将新的语音也中断
  37 + setTimeout(function() {
  38 + var msg = new SpeechSynthesisUtterance(t);
  39 + msg.rate = defaultConfig.rate;
  40 + synth.speak(msg);
  41 + }, 100);
  42 + }
  43 +
  44 + var audition = function(t, rate) {
  45 + var msg = new SpeechSynthesisUtterance(t);
  46 + msg.rate = rate;
  47 + synth.speak(msg);
  48 + }
  49 +
  50 + return {
  51 + readLocal: readLocal,
  52 + writeConfig: writeConfig,
  53 + defaultConfig: function() {
  54 + return defaultConfig
  55 + },
  56 + speak: speak,
  57 + audition: audition
  58 + };
  59 +})();
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
@@ -44,7 +44,11 @@ var gb_sch_websocket = (function() { @@ -44,7 +44,11 @@ var gb_sch_websocket = (function() {
44 msg.dateStr = moment(msg.timestamp).format('HH:mm'); 44 msg.dateStr = moment(msg.timestamp).format('HH:mm');
45 msg.text = gb_common.reqCode80[msg.data.requestCode]; 45 msg.text = gb_common.reqCode80[msg.data.requestCode];
46 46
47 - findMailBox(msg.data.lineId).prepend(temps['sys-note-80-temp'](msg)); 47 + var $item=$(temps['sys-note-80-temp'](msg));
  48 + findMailBox(msg.data.lineId).prepend($item);
  49 + //tts
  50 + var ttsMsg=$item.find('.uk-panel-title').text();
  51 + gb_tts.speak(ttsMsg, msg.data.lineId);
48 } 52 }
49 53
50 var waitRemoves = []; 54 var waitRemoves = [];
@@ -53,12 +57,16 @@ var gb_sch_websocket = (function() { @@ -53,12 +57,16 @@ var gb_sch_websocket = (function() {
53 gb_schedule_table.updateSchedule(msg.t); 57 gb_schedule_table.updateSchedule(msg.t);
54 msg.domId = 'fache_' + msg.t.id + '_' + parseInt(Math.random() * 10000); 58 msg.domId = 'fache_' + msg.t.id + '_' + parseInt(Math.random() * 10000);
55 59
56 - findMailBox(msg.t.xlBm).prepend(temps['sys-note-42-temp'](msg)); 60 + var $item=$(temps['sys-note-42-temp'](msg));
  61 + findMailBox(msg.t.xlBm).prepend($item);
57 waitRemoves.push({ 62 waitRemoves.push({
58 t: currentSecond(), 63 t: currentSecond(),
59 dom: msg.domId 64 dom: msg.domId
60 }); 65 });
61 66
  67 + //tts
  68 + var ttsMsg=$item.find('.title').text();
  69 + gb_tts.speak(ttsMsg, msg.t.xlBm);
62 gb_schedule_table.calc_yfwf_num(msg.t.xlBm); 70 gb_schedule_table.calc_yfwf_num(msg.t.xlBm);
63 } 71 }
64 72
@@ -67,11 +75,15 @@ var gb_sch_websocket = (function() { @@ -67,11 +75,15 @@ var gb_sch_websocket = (function() {
67 gb_schedule_table.updateSchedule(msg.t); 75 gb_schedule_table.updateSchedule(msg.t);
68 msg.domId = 'zhongDian_' + msg.t.id + '_' + parseInt(Math.random() * 10000); 76 msg.domId = 'zhongDian_' + msg.t.id + '_' + parseInt(Math.random() * 10000);
69 77
70 - findMailBox(msg.t.xlBm).prepend(temps['sys-note-42_1-temp'](msg)); 78 + var $item=$(temps['sys-note-42_1-temp'](msg));
  79 + findMailBox(msg.t.xlBm).prepend($item);
71 waitRemoves.push({ 80 waitRemoves.push({
72 t: currentSecond(), 81 t: currentSecond(),
73 dom: msg.domId 82 dom: msg.domId
74 }); 83 });
  84 + //tts
  85 + var ttsMsg=$item.find('.title').text();
  86 + gb_tts.speak(ttsMsg, msg.t.xlBm);
75 } 87 }
76 88
77 //服务器通知刷新班次 89 //服务器通知刷新班次
src/main/resources/static/real_control_v2/main.html
@@ -126,6 +126,8 @@ @@ -126,6 +126,8 @@
126 <!-- websocket --> 126 <!-- websocket -->
127 <script src="/assets/js/sockjs.min.js"></script> 127 <script src="/assets/js/sockjs.min.js"></script>
128 <script src="/real_control_v2/js/websocket/sch_websocket.js"></script> 128 <script src="/real_control_v2/js/websocket/sch_websocket.js"></script>
  129 + <!-- tts -->
  130 + <script src="/real_control_v2/js/utils/tts.js"></script>
129 </body> 131 </body>
130 132
131 </html> 133 </html>