Commit dd2b768b4695cde573892f508dacb0754f4379b0

Authored by 娄高锋
2 parents 4215f195 a5b0babd

Merge branch 'minhang' of 192.168.168.201:panzhaov5/bsth_control into minhang

Showing 35 changed files with 2472 additions and 1784 deletions

Too many changes to show.

To preserve performance only 35 of 52 files are displayed.

src/main/java/com/bsth/data/ThreadMonotor.java 0 → 100644
  1 +package com.bsth.data;
  2 +
  3 +import com.bsth.data.gpsdata.arrival.GpsRealAnalyse;
  4 +import com.bsth.data.msg_queue.DirectivePushQueue;
  5 +import com.bsth.data.msg_queue.WebSocketPushQueue;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
  8 +import org.springframework.stereotype.Component;
  9 +
  10 +/**
  11 + * Created by panzhao on 2017/5/11.
  12 + */
  13 +@Component
  14 +public class ThreadMonotor extends Thread{
  15 +
  16 + Logger log = LoggerFactory.getLogger(this.getClass());
  17 +
  18 + @Override
  19 + public void run() {
  20 +
  21 + //线调GPS分析线程
  22 + if(GpsRealAnalyse.isBlock()){
  23 + log.warn("GpsRealAnalyse isBlock true !!!!");
  24 + GpsRealAnalyse.shutdown();
  25 + }
  26 +
  27 + //webSocket 消息推送队列
  28 + if(WebSocketPushQueue.isIdle()){
  29 + log.warn("WebSocketPushQueue isIdle true !!!!");
  30 + WebSocketPushQueue.start();
  31 + }
  32 +
  33 + //系统自动发送的网关指令 推送队列
  34 + if(DirectivePushQueue.isIdle()){
  35 + log.warn("DirectivePushQueue isIdle true !!!!");
  36 + DirectivePushQueue.start();
  37 + }
  38 + }
  39 +}
src/main/java/com/bsth/data/directive/DayOfDirectives.java
@@ -57,10 +57,11 @@ public class DayOfDirectives { @@ -57,10 +57,11 @@ public class DayOfDirectives {
57 pstDirectives = new LinkedList<>(); 57 pstDirectives = new LinkedList<>();
58 } 58 }
59 59
60 - public void put60(D60 d60) { 60 + public void put60(D60 d60, boolean pst) {
61 d60Map.put(d60.getMsgId(), d60); 61 d60Map.put(d60.getMsgId(), d60);
62 //等待持久化 62 //等待持久化
63 - pstDirectives.add(d60); 63 + if(pst)
  64 + pstDirectives.add(d60);
64 } 65 }
65 66
66 public void put64(D64 d64) { 67 public void put64(D64 d64) {
src/main/java/com/bsth/data/directive/GatewayHttpUtils.java
@@ -41,8 +41,8 @@ public class GatewayHttpUtils { @@ -41,8 +41,8 @@ public class GatewayHttpUtils {
41 41
42 //超时时间 42 //超时时间
43 RequestConfig requestConfig = RequestConfig.custom() 43 RequestConfig requestConfig = RequestConfig.custom()
44 - .setConnectTimeout(3000).setConnectionRequestTimeout(1000)  
45 - .setSocketTimeout(3000).build(); 44 + .setConnectTimeout(1500).setConnectionRequestTimeout(1000)
  45 + .setSocketTimeout(1500).build();
46 46
47 HttpPost post = new HttpPost(url); 47 HttpPost post = new HttpPost(url);
48 48
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
@@ -4,7 +4,6 @@ import com.bsth.data.BasicData; @@ -4,7 +4,6 @@ import com.bsth.data.BasicData;
4 import com.bsth.data.forecast.ForecastRealServer; 4 import com.bsth.data.forecast.ForecastRealServer;
5 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread; 5 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread;
6 import com.bsth.data.gpsdata.thread.OfflineMonitorThread; 6 import com.bsth.data.gpsdata.thread.OfflineMonitorThread;
7 -import com.bsth.data.gpsdata.thread.ThreadPollMonitor;  
8 import com.bsth.data.schedule.DayOfSchedule; 7 import com.bsth.data.schedule.DayOfSchedule;
9 import com.bsth.entity.realcontrol.ScheduleRealInfo; 8 import com.bsth.entity.realcontrol.ScheduleRealInfo;
10 import com.google.common.collect.TreeMultimap; 9 import com.google.common.collect.TreeMultimap;
@@ -47,9 +46,6 @@ public class GpsRealData implements CommandLineRunner { @@ -47,9 +46,6 @@ public class GpsRealData implements CommandLineRunner {
47 @Autowired 46 @Autowired
48 ForecastRealServer forecastRealServer; 47 ForecastRealServer forecastRealServer;
49 48
50 - @Autowired  
51 - ThreadPollMonitor threadPollMonitor;  
52 -  
53 /** 49 /**
54 * 构造函数 50 * 构造函数
55 */ 51 */
@@ -60,15 +56,11 @@ public class GpsRealData implements CommandLineRunner { @@ -60,15 +56,11 @@ public class GpsRealData implements CommandLineRunner {
60 56
61 @Override 57 @Override
62 public void run(String... arg0) throws Exception { 58 public void run(String... arg0) throws Exception {
63 - logger.info("gpsDataLoader,20,3"); 59 + logger.info("gpsDataLoader,30,2");
64 //http形式获取GPS数据 60 //http形式获取GPS数据
65 - //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 2, TimeUnit.SECONDS); 61 + //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);
66 //定时扫描掉离线 62 //定时扫描掉离线
67 //Application.mainServices.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS); 63 //Application.mainServices.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);
68 -  
69 - //扫描GPS线程池状态  
70 - //Application.mainServices.scheduleWithFixedDelay(threadPollMonitor, 60, 20, TimeUnit.SECONDS);  
71 -  
72 } 64 }
73 65
74 66
@@ -89,19 +81,29 @@ public class GpsRealData implements CommandLineRunner { @@ -89,19 +81,29 @@ public class GpsRealData implements CommandLineRunner {
89 gps.setExpectStopTime(forecastRealServer.expectStopTime(gps.getNbbm())); 81 gps.setExpectStopTime(forecastRealServer.expectStopTime(gps.getNbbm()));
90 } 82 }
91 } 83 }
92 - } catch (Exception e) {  
93 - logger.error("", e);  
94 - }  
95 84
96 - //刷新对照  
97 - gpsMap.put(device, gps);  
98 - if (StringUtils.isNotBlank(gps.getLineId())) {  
99 - //站点名称  
100 - gps.setStationName(getStationName(gps));  
101 - lineCode2Devices.put(gps.getLineId(), device); 85 + //刷新对照
  86 + gpsMap.put(device, gps);
  87 + if (StringUtils.isNotBlank(gps.getLineId())) {
  88 + //站点名称
  89 + gps.setStationName(getStationName(gps));
  90 + lineCode2Devices.put(gps.getLineId(), device);
  91 +
  92 + if(old != null && !gps.getLineId().equals(old.getLineId()))
  93 + lineCode2Devices.remove(old.getLineId(), device);
  94 + }
102 95
103 - if(old != null && !gps.getLineId().equals(old.getLineId()))  
104 - lineCode2Devices.remove(old.getLineId(), device); 96 + //车辆换设备了
  97 + String nbbm = gps.getNbbm();
  98 + if(old != null && StringUtils.isNotEmpty(nbbm) && !nbbm.equals(old.getNbbm())){
  99 + List<GpsEntity> list = findByNbbm(nbbm);
  100 + for(GpsEntity g : list){
  101 + if(!g.getDeviceId().equals(device))
  102 + gpsMap.remove(g.getDeviceId());
  103 + }
  104 + }
  105 + } catch (Exception e) {
  106 + logger.error("", e);
105 } 107 }
106 } 108 }
107 109
@@ -116,6 +118,16 @@ public class GpsRealData implements CommandLineRunner { @@ -116,6 +118,16 @@ public class GpsRealData implements CommandLineRunner {
116 return gpsMap.get(deviceId); 118 return gpsMap.get(deviceId);
117 } 119 }
118 120
  121 + public List<GpsEntity> findByNbbm(String nbbm){
  122 + Collection<GpsEntity> arr = gpsMap.values();
  123 + List<GpsEntity> rs = new ArrayList<>();
  124 + for(GpsEntity g : arr){
  125 + if(nbbm.equals(g.getNbbm()))
  126 + rs.add(g);
  127 + }
  128 + return rs;
  129 + }
  130 +
119 /** 131 /**
120 * @Title: get @Description: TODO(线路编码获取GPS集合) @throws 132 * @Title: get @Description: TODO(线路编码获取GPS集合) @throws
121 */ 133 */
src/main/java/com/bsth/data/gpsdata/arrival/GpsRealAnalyse.java
@@ -11,10 +11,7 @@ import org.slf4j.LoggerFactory; @@ -11,10 +11,7 @@ import org.slf4j.LoggerFactory;
11 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.stereotype.Component; 12 import org.springframework.stereotype.Component;
13 13
14 -import java.util.Collections;  
15 -import java.util.Comparator;  
16 -import java.util.List;  
17 -import java.util.Set; 14 +import java.util.*;
18 import java.util.concurrent.CountDownLatch; 15 import java.util.concurrent.CountDownLatch;
19 import java.util.concurrent.ExecutorService; 16 import java.util.concurrent.ExecutorService;
20 import java.util.concurrent.Executors; 17 import java.util.concurrent.Executors;
@@ -44,15 +41,18 @@ public class GpsRealAnalyse { @@ -44,15 +41,18 @@ public class GpsRealAnalyse {
44 @Autowired 41 @Autowired
45 GpsRealData gpsRealData; 42 GpsRealData gpsRealData;
46 43
47 - static ExecutorService threadPool = Executors.newFixedThreadPool(100); 44 + static ExecutorService threadPool = Executors.newFixedThreadPool(20);
48 45
49 public static long st; 46 public static long st;
50 public static CountDownLatch count; 47 public static CountDownLatch count;
51 48
  49 + public static boolean isBlock() {
  50 + return System.currentTimeMillis() - st > 1000 * 20;
  51 + }
  52 +
52 public void analyse(List<GpsEntity> list) { 53 public void analyse(List<GpsEntity> list) {
53 try { 54 try {
54 st = System.currentTimeMillis(); 55 st = System.currentTimeMillis();
55 - //如果正在恢复数据  
56 if (GpsDataRecovery.run) 56 if (GpsDataRecovery.run)
57 return; 57 return;
58 58
@@ -63,6 +63,7 @@ public class GpsRealAnalyse { @@ -63,6 +63,7 @@ public class GpsRealAnalyse {
63 } 63 }
64 64
65 Set<String> ks = multimap.keySet(); 65 Set<String> ks = multimap.keySet();
  66 +
66 logger.info("analyse gps size: " + list.size() + ", ks: " + ks.size()); 67 logger.info("analyse gps size: " + list.size() + ", ks: " + ks.size());
67 count = new CountDownLatch(ks.size()); 68 count = new CountDownLatch(ks.size());
68 69
@@ -125,7 +126,7 @@ public class GpsRealAnalyse { @@ -125,7 +126,7 @@ public class GpsRealAnalyse {
125 abnormalStateHandle.handle(gps, prevs); 126 abnormalStateHandle.handle(gps, prevs);
126 127
127 if (!task) 128 if (!task)
128 - return; //无任务的,到这里就结束 129 + continue; //无任务的,到这里就结束
129 130
130 //反向处理 131 //反向处理
131 reverseSignalHandle.handle(gps, prevs); 132 reverseSignalHandle.handle(gps, prevs);
src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java
@@ -6,12 +6,12 @@ import com.bsth.data.gpsdata.arrival.SignalHandle; @@ -6,12 +6,12 @@ import com.bsth.data.gpsdata.arrival.SignalHandle;
6 import com.bsth.data.gpsdata.arrival.utils.CircleQueue; 6 import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
7 import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState; 7 import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState;
8 import com.bsth.data.gpsdata.arrival.utils.SignalSchPlanMatcher; 8 import com.bsth.data.gpsdata.arrival.utils.SignalSchPlanMatcher;
  9 +import com.bsth.data.msg_queue.DirectivePushQueue;
9 import com.bsth.data.schedule.DayOfSchedule; 10 import com.bsth.data.schedule.DayOfSchedule;
10 import com.bsth.data.schedule.ScheduleComparator; 11 import com.bsth.data.schedule.ScheduleComparator;
11 import com.bsth.data.schedule.late_adjust.LateAdjustHandle; 12 import com.bsth.data.schedule.late_adjust.LateAdjustHandle;
12 import com.bsth.entity.realcontrol.LineConfig; 13 import com.bsth.entity.realcontrol.LineConfig;
13 import com.bsth.entity.realcontrol.ScheduleRealInfo; 14 import com.bsth.entity.realcontrol.ScheduleRealInfo;
14 -import com.bsth.service.directive.DirectiveService;  
15 import com.bsth.websocket.handler.SendUtils; 15 import com.bsth.websocket.handler.SendUtils;
16 import org.apache.commons.lang3.StringUtils; 16 import org.apache.commons.lang3.StringUtils;
17 import org.slf4j.Logger; 17 import org.slf4j.Logger;
@@ -41,9 +41,6 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -41,9 +41,6 @@ public class InOutStationSignalHandle extends SignalHandle{
41 SendUtils sendUtils; 41 SendUtils sendUtils;
42 42
43 @Autowired 43 @Autowired
44 - DirectiveService directiveService;  
45 -  
46 - @Autowired  
47 ScheduleSignalState scheduleSignalState; 44 ScheduleSignalState scheduleSignalState;
48 45
49 @Autowired 46 @Autowired
@@ -151,7 +148,8 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -151,7 +148,8 @@ public class InOutStationSignalHandle extends SignalHandle{
151 148
152 if(sch.getBcType().equals("out")){ 149 if(sch.getBcType().equals("out")){
153 //出场时,切换成营运状态 150 //出场时,切换成营运状态
154 - directiveService.send60Operation(sch.getClZbh(), 0, Integer.parseInt(sch.getXlDir()), null, "出场@系统"); 151 + DirectivePushQueue.put6003(sch.getClZbh(), 0, Integer.parseInt(sch.getXlDir()), null, "出场@系统");
  152 + //directiveService.send60Operation(sch.getClZbh(), 0, Integer.parseInt(sch.getXlDir()), null, "出场@系统");
155 } 153 }
156 //出站既出场 154 //出站既出场
157 outStationAndOutPark(sch); 155 outStationAndOutPark(sch);
@@ -208,7 +206,8 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -208,7 +206,8 @@ public class InOutStationSignalHandle extends SignalHandle{
208 206
209 if(schPrev.getBcType().equals("out")){ 207 if(schPrev.getBcType().equals("out")){
210 //出场时,切换成营运状态 208 //出场时,切换成营运状态
211 - directiveService.send60Operation(schPrev.getClZbh(), 0, Integer.parseInt(schPrev.getXlDir()), null, "出场@系统"); 209 + DirectivePushQueue.put6003(schPrev.getClZbh(), 0, Integer.parseInt(schPrev.getXlDir()), null, "出场@系统");
  210 + //directiveService.send60Operation(schPrev.getClZbh(), 0, Integer.parseInt(schPrev.getXlDir()), null, "出场@系统");
212 } 211 }
213 } 212 }
214 } 213 }
@@ -276,15 +275,19 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -276,15 +275,19 @@ public class InOutStationSignalHandle extends SignalHandle{
276 //将gps转换为下一个班次走向的站内信号 275 //将gps转换为下一个班次走向的站内信号
277 transformUpdown(gps, next); 276 transformUpdown(gps, next);
278 //下发调度指令 277 //下发调度指令
279 - directiveService.send60Dispatch(next, doneSum, "到站@系统"); 278 + DirectivePushQueue.put6002(next, doneSum, "到站@系统");
  279 + //directiveService.send60Dispatch(next, doneSum, "到站@系统");
280 280
281 //套跑 -下发线路切换指令 281 //套跑 -下发线路切换指令
282 - if(!next.getXlBm().equals(sch.getXlBm()))  
283 - directiveService.lineChange(next.getClZbh(), next.getXlBm(), "套跑@系统"); 282 + if(!next.getXlBm().equals(sch.getXlBm())){
  283 + DirectivePushQueue.put64(next.getClZbh(), next.getXlBm(), "套跑@系统");
  284 + //directiveService.lineChange(next.getClZbh(), next.getXlBm(), "套跑@系统");
  285 + }
284 } 286 }
285 else if(sch.getBcType().equals("in")){ 287 else if(sch.getBcType().equals("in")){
286 //终班进场,切换成非营运状态 288 //终班进场,切换成非营运状态
287 - directiveService.send60Operation(sch.getClZbh(), 1, Integer.parseInt(sch.getXlDir()), null, "进场@系统"); 289 + DirectivePushQueue.put6003(sch.getClZbh(), 1, Integer.parseInt(sch.getXlDir()), null, "进场@系统");
  290 + //directiveService.send60Operation(sch.getClZbh(), 1, Integer.parseInt(sch.getXlDir()), null, "进场@系统");
288 } 291 }
289 } 292 }
290 else { 293 else {
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
@@ -164,7 +164,7 @@ public class GpsDataRecovery implements ApplicationContextAware { @@ -164,7 +164,7 @@ public class GpsDataRecovery implements ApplicationContextAware {
164 //abnormalStateHandle.handle(gps, prevs); 164 //abnormalStateHandle.handle(gps, prevs);
165 165
166 if(!task) 166 if(!task)
167 - return; //无任务的,到这里就结束 167 + continue; //无任务的,到这里就结束
168 168
169 //反向处理 169 //反向处理
170 reverseSignalHandle.handle(gps, prevs); 170 reverseSignalHandle.handle(gps, prevs);
src/main/java/com/bsth/data/gpsdata/thread/ThreadPollMonitor.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.thread;  
2 -  
3 -import com.bsth.data.gpsdata.arrival.GpsRealAnalyse;  
4 -import org.springframework.stereotype.Component;  
5 -  
6 -/**  
7 - * 线程池监听  
8 - * Created by panzhao on 2017/5/10.  
9 - */  
10 -@Component  
11 -public class ThreadPollMonitor extends Thread{  
12 -  
13 - @Override  
14 - public void run() {  
15 - long t = System.currentTimeMillis();  
16 -  
17 - if(t - GpsRealAnalyse.st > 3000 * 10){  
18 - GpsRealAnalyse.shutdown();  
19 - }  
20 - }  
21 -}  
src/main/java/com/bsth/data/msg_queue/DirectivePushQueue.java 0 → 100644
  1 +package com.bsth.data.msg_queue;
  2 +
  3 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  4 +import com.bsth.service.directive.DirectiveService;
  5 +import org.slf4j.Logger;
  6 +import org.slf4j.LoggerFactory;
  7 +import org.springframework.beans.BeansException;
  8 +import org.springframework.boot.CommandLineRunner;
  9 +import org.springframework.context.ApplicationContext;
  10 +import org.springframework.context.ApplicationContextAware;
  11 +import org.springframework.stereotype.Component;
  12 +
  13 +import java.util.LinkedList;
  14 +
  15 +/**
  16 + * 到网关的指令推送队列 (系统发送的队列, 用户手动发送的不走这里)
  17 + * Created by panzhao on 2017/5/11.
  18 + */
  19 +@Component
  20 +public class DirectivePushQueue implements CommandLineRunner, ApplicationContextAware {
  21 +
  22 + static LinkedList<QueueData_Directive> linkedList;
  23 + static DataPushThread thread;
  24 + static DirectiveService directiveService;
  25 + static long t;
  26 + static final int IDLE_TIME = 1000 * 30;
  27 +
  28 + static {
  29 + linkedList = new LinkedList<>();
  30 + }
  31 +
  32 + public static void put6002(ScheduleRealInfo sch, int finish, String sender){
  33 + QueueData_Directive qd6002 = new QueueData_Directive();
  34 + qd6002.setSch(sch);
  35 + qd6002.setFinish(finish);
  36 + qd6002.setSender(sender);
  37 + qd6002.setCode("60_02");
  38 +
  39 + linkedList.add(qd6002);
  40 + }
  41 +
  42 + public static void put6003(String nbbm, int state, int upDown, ScheduleRealInfo sch, String sender){
  43 + QueueData_Directive qd6003 = new QueueData_Directive();
  44 + qd6003.setNbbm(nbbm);
  45 + qd6003.setState(state);
  46 + qd6003.setUpDown(upDown);
  47 + qd6003.setSch(sch);
  48 + qd6003.setSender(sender);
  49 +
  50 + qd6003.setCode("60_03");
  51 +
  52 + linkedList.add(qd6003);
  53 + }
  54 +
  55 + public static void put64(String nbbm, String lineCode, String sender){
  56 + QueueData_Directive qd64 = new QueueData_Directive();
  57 + qd64.setNbbm(nbbm);
  58 + qd64.setLineCode(lineCode);
  59 + qd64.setSender(sender);
  60 +
  61 + qd64.setCode("64");
  62 +
  63 + linkedList.add(qd64);
  64 + }
  65 +
  66 + public static boolean isIdle(){
  67 + return System.currentTimeMillis() - t > IDLE_TIME;
  68 + }
  69 +
  70 + public static void start(){
  71 + if(thread != null){
  72 + thread.interrupt();
  73 + }
  74 + thread = new DataPushThread();
  75 + thread.start();
  76 + }
  77 +
  78 + @Override
  79 + public void run(String... strings) throws Exception {
  80 + start();
  81 + }
  82 +
  83 + @Override
  84 + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  85 + directiveService = applicationContext.getBean(DirectiveService.class);
  86 + }
  87 +
  88 + public static class DataPushThread extends Thread {
  89 +
  90 + Logger log = LoggerFactory.getLogger(this.getClass());
  91 +
  92 + @Override
  93 + public void run() {
  94 + boolean sleepFlag = false;
  95 + QueueData_Directive qd;
  96 + String code;
  97 + while (true) {
  98 + try {
  99 + qd = linkedList.pollFirst();
  100 + if (qd != null) {
  101 + sleepFlag = false;
  102 + code = qd.getCode();
  103 +
  104 + if(code.equals("60_02")){
  105 + directiveService.send60Dispatch(qd.getSch(), qd.getFinish(), qd.getSender());
  106 + log.info("directive 60_02 sch id: " + qd.getSch().getId());
  107 + }
  108 + else if(code.equals("60_03")){
  109 + directiveService.send60Operation(qd.getNbbm(), qd.getState(), qd.getUpDown(), null, qd.getSender());
  110 + log.info("directive 60_03 nbbm: " + qd.getNbbm());
  111 + }
  112 + else if(code.equals("64")){
  113 + directiveService.lineChange(qd.getNbbm(), qd.getLineCode(), qd.getSender());
  114 + log.info("directive 64 nbbm: " + qd.getNbbm() + " lineCode: " + qd.getLineCode());
  115 + }
  116 +
  117 + } else{
  118 + Thread.sleep(500);
  119 + if(!sleepFlag){
  120 + log.info("sleep...");
  121 + sleepFlag = true;
  122 + }
  123 + }
  124 + t = System.currentTimeMillis();
  125 + }
  126 + catch(InterruptedException e){
  127 + break;
  128 + }
  129 + catch (Exception e) {
  130 + log.error("", e);
  131 + }
  132 +
  133 + }
  134 + }
  135 + }
  136 +}
src/main/java/com/bsth/data/msg_queue/QueueData.java 0 → 100644
  1 +package com.bsth.data.msg_queue;
  2 +
  3 +import org.springframework.web.socket.TextMessage;
  4 +import org.springframework.web.socket.WebSocketSession;
  5 +
  6 +/**
  7 + * Created by panzhao on 2017/5/11.
  8 + */
  9 +public class QueueData {
  10 +
  11 + private TextMessage message;
  12 +
  13 + private WebSocketSession session;
  14 +
  15 +
  16 + public WebSocketSession getSession() {
  17 + return session;
  18 + }
  19 +
  20 + public void setSession(WebSocketSession session) {
  21 + this.session = session;
  22 + }
  23 +
  24 + public TextMessage getMessage() {
  25 + return message;
  26 + }
  27 +
  28 + public void setMessage(TextMessage message) {
  29 + this.message = message;
  30 + }
  31 +}
src/main/java/com/bsth/data/msg_queue/QueueData_Directive.java 0 → 100644
  1 +package com.bsth.data.msg_queue;
  2 +
  3 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  4 +
  5 +/**
  6 + * Created by panzhao on 2017/5/11.
  7 + */
  8 +public class QueueData_Directive {
  9 +
  10 + /**
  11 + * 指令类型
  12 + * 60_02
  13 + * 60_03
  14 + * 64
  15 + */
  16 + private String code;
  17 +
  18 + /** 60调度指令内容 60_02*/
  19 + private ScheduleRealInfo sch;
  20 + private int finish;
  21 +
  22 + /** 60 营运指令 60_03*/
  23 + private String nbbm;
  24 + private int state;
  25 + private int upDown;
  26 +
  27 + /** 64指令内容 */
  28 + private String lineCode;
  29 +
  30 + private String sender;
  31 +
  32 +
  33 + public ScheduleRealInfo getSch() {
  34 + return sch;
  35 + }
  36 +
  37 + public void setSch(ScheduleRealInfo sch) {
  38 + this.sch = sch;
  39 + }
  40 +
  41 + public int getFinish() {
  42 + return finish;
  43 + }
  44 +
  45 + public void setFinish(int finish) {
  46 + this.finish = finish;
  47 + }
  48 +
  49 + public String getSender() {
  50 + return sender;
  51 + }
  52 +
  53 + public void setSender(String sender) {
  54 + this.sender = sender;
  55 + }
  56 +
  57 + public String getNbbm() {
  58 + return nbbm;
  59 + }
  60 +
  61 + public void setNbbm(String nbbm) {
  62 + this.nbbm = nbbm;
  63 + }
  64 +
  65 + public int getState() {
  66 + return state;
  67 + }
  68 +
  69 + public void setState(int state) {
  70 + this.state = state;
  71 + }
  72 +
  73 + public int getUpDown() {
  74 + return upDown;
  75 + }
  76 +
  77 + public void setUpDown(int upDown) {
  78 + this.upDown = upDown;
  79 + }
  80 +
  81 + public String getCode() {
  82 + return code;
  83 + }
  84 +
  85 + public void setCode(String code) {
  86 + this.code = code;
  87 + }
  88 +
  89 + public String getLineCode() {
  90 + return lineCode;
  91 + }
  92 +
  93 + public void setLineCode(String lineCode) {
  94 + this.lineCode = lineCode;
  95 + }
  96 +}
src/main/java/com/bsth/data/msg_queue/WebSocketPushQueue.java 0 → 100644
  1 +package com.bsth.data.msg_queue;
  2 +
  3 +import com.bsth.common.Constants;
  4 +import org.slf4j.Logger;
  5 +import org.slf4j.LoggerFactory;
  6 +import org.springframework.boot.CommandLineRunner;
  7 +import org.springframework.stereotype.Component;
  8 +import org.springframework.web.socket.TextMessage;
  9 +import org.springframework.web.socket.WebSocketSession;
  10 +
  11 +import java.util.LinkedList;
  12 +
  13 +/**
  14 + * 线调web socket 推送队列
  15 + * Created by panzhao on 2017/5/11.
  16 + */
  17 +@Component
  18 +public class WebSocketPushQueue implements CommandLineRunner {
  19 +
  20 + static LinkedList<QueueData> linkedList;
  21 + static DataPushThread thread;
  22 + static Logger log = LoggerFactory.getLogger(WebSocketPushQueue.class);
  23 + static long t;
  24 + static final int IDLE_TIME = 1000 * 30;
  25 +
  26 + static {
  27 + linkedList = new LinkedList();
  28 + }
  29 +
  30 + public static boolean isIdle() {
  31 + return System.currentTimeMillis() - t > IDLE_TIME;
  32 + }
  33 +
  34 + public static void put(WebSocketSession session, TextMessage msg) {
  35 + QueueData qd = new QueueData();
  36 + qd.setMessage(msg);
  37 + qd.setSession(session);
  38 +
  39 + log.info("put、[" + session.getAttributes().get(Constants.SESSION_USERNAME) + "] 、" + msg.getPayload());
  40 + linkedList.add(qd);
  41 + }
  42 +
  43 + public static void start() {
  44 + if (thread != null) {
  45 + thread.interrupt();
  46 + }
  47 + thread = new DataPushThread();
  48 + thread.start();
  49 + }
  50 +
  51 + @Override
  52 + public void run(String... strings) throws Exception {
  53 + start();
  54 + }
  55 +
  56 + public static class DataPushThread extends Thread {
  57 +
  58 + Logger log = LoggerFactory.getLogger(this.getClass());
  59 +
  60 + @Override
  61 + public void run() {
  62 + QueueData qd;
  63 + WebSocketSession session;
  64 +
  65 + boolean sleepFlag = false;
  66 + while (true) {
  67 + try {
  68 + qd = linkedList.pollFirst();
  69 + if (qd != null) {
  70 + sleepFlag = false;
  71 + session = qd.getSession();
  72 + if (session.isOpen()) {
  73 + log.info("push start、[" + session.getAttributes().get(Constants.SESSION_USERNAME) + "] 、" + qd.getMessage().getPayload());
  74 + session.sendMessage(qd.getMessage());
  75 + log.info("push end..");
  76 + }
  77 + } else {
  78 + Thread.sleep(500);
  79 + if (!sleepFlag) {
  80 + log.info("sleep...");
  81 + sleepFlag = true;
  82 + }
  83 + }
  84 + t = System.currentTimeMillis();
  85 + } catch (InterruptedException e) {
  86 + break;
  87 + } catch (Exception e) {
  88 + log.error("", e);
  89 + }
  90 + }
  91 + }
  92 + }
  93 +}
src/main/java/com/bsth/data/pilot80/PilotReport.java
@@ -4,6 +4,7 @@ import com.bsth.data.BasicData; @@ -4,6 +4,7 @@ import com.bsth.data.BasicData;
4 import com.bsth.data.LineConfigData; 4 import com.bsth.data.LineConfigData;
5 import com.bsth.data.gpsdata.GpsEntity; 5 import com.bsth.data.gpsdata.GpsEntity;
6 import com.bsth.data.gpsdata.GpsRealData; 6 import com.bsth.data.gpsdata.GpsRealData;
  7 +import com.bsth.data.msg_queue.DirectivePushQueue;
7 import com.bsth.data.schedule.DayOfSchedule; 8 import com.bsth.data.schedule.DayOfSchedule;
8 import com.bsth.entity.Line; 9 import com.bsth.entity.Line;
9 import com.bsth.entity.directive.D80; 10 import com.bsth.entity.directive.D80;
@@ -82,9 +83,11 @@ public class PilotReport { @@ -82,9 +83,11 @@ public class PilotReport {
82 outSch = dayOfSchedule.next(outSch); 83 outSch = dayOfSchedule.next(outSch);
83 84
84 //下发调度指令 85 //下发调度指令
85 - directiveService.send60Dispatch(outSch, dayOfSchedule.doneSum(nbbm), "请出@系统"); 86 + DirectivePushQueue.put6002(outSch, dayOfSchedule.doneSum(nbbm), "请出@系统");
  87 + //directiveService.send60Dispatch(outSch, dayOfSchedule.doneSum(nbbm), "请出@系统");
86 //下发线路切换指令 88 //下发线路切换指令
87 - directiveService.lineChange(outSch.getClZbh(), outSch.getXlBm(), "请出@系统"); 89 + DirectivePushQueue.put64(outSch.getClZbh(), outSch.getXlBm(), "请出@系统");
  90 + //directiveService.lineChange(outSch.getClZbh(), outSch.getXlBm(), "请出@系统");
88 }else 91 }else
89 d80.setRemarks("没有出场计划"); 92 d80.setRemarks("没有出场计划");
90 93
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
@@ -7,6 +7,7 @@ import com.bsth.common.Constants; @@ -7,6 +7,7 @@ import com.bsth.common.Constants;
7 import com.bsth.common.ResponseCode; 7 import com.bsth.common.ResponseCode;
8 import com.bsth.data.BasicData; 8 import com.bsth.data.BasicData;
9 import com.bsth.data.LineConfigData; 9 import com.bsth.data.LineConfigData;
  10 +import com.bsth.data.ThreadMonotor;
10 import com.bsth.data.directive.DirectivesPstThread; 11 import com.bsth.data.directive.DirectivesPstThread;
11 import com.bsth.data.gpsdata.GpsRealData; 12 import com.bsth.data.gpsdata.GpsRealData;
12 import com.bsth.data.gpsdata.recovery.GpsDataRecovery; 13 import com.bsth.data.gpsdata.recovery.GpsDataRecovery;
@@ -139,6 +140,9 @@ public class DayOfSchedule implements CommandLineRunner { @@ -139,6 +140,9 @@ public class DayOfSchedule implements CommandLineRunner {
139 @Autowired 140 @Autowired
140 CalcOilThread calcOilThread; 141 CalcOilThread calcOilThread;
141 142
  143 + @Autowired
  144 + ThreadMonotor threadMonotor;
  145 +
142 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm"); 146 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm");
143 147
144 @Override 148 @Override
@@ -165,6 +169,9 @@ public class DayOfSchedule implements CommandLineRunner { @@ -165,6 +169,9 @@ public class DayOfSchedule implements CommandLineRunner {
165 169
166 //指令持久化线程 170 //指令持久化线程
167 Application.mainServices.scheduleWithFixedDelay(directivesPstThread, 180, 180, TimeUnit.SECONDS); 171 Application.mainServices.scheduleWithFixedDelay(directivesPstThread, 180, 180, TimeUnit.SECONDS);
  172 +
  173 + //监听
  174 + Application.mainServices.scheduleWithFixedDelay(threadMonotor, 120, 60, TimeUnit.SECONDS);
168 } 175 }
169 176
170 //数据恢复 177 //数据恢复
src/main/java/com/bsth/entity/oil/Ylb.java
@@ -49,7 +49,9 @@ public class Ylb { @@ -49,7 +49,9 @@ public class Ylb {
49 private int sjbc; 49 private int sjbc;
50 private String edituser; 50 private String edituser;
51 private Date edittime; 51 private Date edittime;
  52 + private Date updatetime;
52 private Date createtime; 53 private Date createtime;
  54 +
53 private int nylx; 55 private int nylx;
54 //进场顺序(根据最先出场和最后进场来关联车辆的存油量) 56 //进场顺序(根据最先出场和最后进场来关联车辆的存油量)
55 private int jcsx; 57 private int jcsx;
@@ -321,6 +323,12 @@ public class Ylb { @@ -321,6 +323,12 @@ public class Ylb {
321 } 323 }
322 324
323 325
324 - 326 + public Date getUpdatetime() {
  327 + return updatetime;
  328 + }
  329 +
  330 + public void setUpdatetime(Date updatetime) {
  331 + this.updatetime = updatetime;
  332 + }
325 333
326 } 334 }
src/main/java/com/bsth/entity/schedule/temp/SchedulePlanRuleResult.java
@@ -27,20 +27,22 @@ public class SchedulePlanRuleResult { @@ -27,20 +27,22 @@ public class SchedulePlanRuleResult {
27 27
28 /** 排班规则id */ 28 /** 排班规则id */
29 private String ruleId; 29 private String ruleId;
30 - /** 启用日期 */ 30 + /** 启用日期(用于md5计算) */
31 private Date qyrq; 31 private Date qyrq;
32 /** 车辆配置id */ 32 /** 车辆配置id */
33 private String ccId; 33 private String ccId;
34 /** 车辆自编号 */ 34 /** 车辆自编号 */
35 private String ccZbh; 35 private String ccZbh;
36 36
37 - /** 路牌id列表字符串 */ 37 + /** 路牌id列表字符串(用于md5计算) */
38 @Column(length = 1000) 38 @Column(length = 1000)
39 private String gids; 39 private String gids;
40 /** 路牌名字列表字符串 */ 40 /** 路牌名字列表字符串 */
41 private String gnames; 41 private String gnames;
42 /** 翻到哪个路牌索引 */ 42 /** 翻到哪个路牌索引 */
43 private String gidindex; 43 private String gidindex;
  44 + /** 原始的起始路牌索引(用于md5计算) */
  45 + private String origingidindex;
44 /** 人员配置id列表字符串 */ 46 /** 人员配置id列表字符串 */
45 @Column(length = 1000) 47 @Column(length = 1000)
46 private String ecids; 48 private String ecids;
@@ -81,8 +83,8 @@ public class SchedulePlanRuleResult { @@ -81,8 +83,8 @@ public class SchedulePlanRuleResult {
81 "(xl_id,xl_name,rule_id,cc_id,cc_zbh," + 83 "(xl_id,xl_name,rule_id,cc_id,cc_zbh," +
82 "gids,gnames,gidindex,ecids,ecdbbms,ecindex," + 84 "gids,gnames,gidindex,ecids,ecdbbms,ecindex," +
83 "ttinfo_id,ttinfo_name,schedule_date," + 85 "ttinfo_id,ttinfo_name,schedule_date," +
84 - "sysuser_id,sysuser_name,create_date, qyrq) " +  
85 - "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 86 + "sysuser_id,sysuser_name,create_date, qyrq, origingidindex) " +
  87 + "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
86 88
87 return sql; 89 return sql;
88 } 90 }
@@ -106,7 +108,7 @@ public class SchedulePlanRuleResult { @@ -106,7 +108,7 @@ public class SchedulePlanRuleResult {
106 ps.setString(16, this.getSysuserName()); 108 ps.setString(16, this.getSysuserName());
107 ps.setTimestamp(17, new java.sql.Timestamp(this.getCreateDate().getTime())); 109 ps.setTimestamp(17, new java.sql.Timestamp(this.getCreateDate().getTime()));
108 ps.setDate(18, new java.sql.Date(this.getQyrq().getTime())); 110 ps.setDate(18, new java.sql.Date(this.getQyrq().getTime()));
109 - 111 + ps.setString(19, this.getOrigingidindex());
110 112
111 } 113 }
112 114
@@ -261,4 +263,12 @@ public class SchedulePlanRuleResult { @@ -261,4 +263,12 @@ public class SchedulePlanRuleResult {
261 public void setQyrq(Date qyrq) { 263 public void setQyrq(Date qyrq) {
262 this.qyrq = qyrq; 264 this.qyrq = qyrq;
263 } 265 }
  266 +
  267 + public String getOrigingidindex() {
  268 + return origingidindex;
  269 + }
  270 +
  271 + public void setOrigingidindex(String origingidindex) {
  272 + this.origingidindex = origingidindex;
  273 + }
264 } 274 }
src/main/java/com/bsth/repository/StationRouteRepository.java
@@ -113,8 +113,8 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int @@ -113,8 +113,8 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int
113 /*@Query(value = "SELECT s.b_jwpoints,s.station_name FROM (" + 113 /*@Query(value = "SELECT s.b_jwpoints,s.station_name FROM (" +
114 "SELECT b.station FROM bsth_c_stationroute b where b.line =?1 and b.directions = ?2 and b.destroy=0) r " + 114 "SELECT b.station FROM bsth_c_stationroute b where b.line =?1 and b.directions = ?2 and b.destroy=0) r " +
115 "LEFT JOIN bsth_c_station s on r.station = s.id", nativeQuery=true)*/ 115 "LEFT JOIN bsth_c_station s on r.station = s.id", nativeQuery=true)*/
116 - @Query(value = "SELECT s.b_jwpoints,s.station_name,r.station_route_code FROM (" +  
117 - "SELECT b.station,b.station_route_code FROM bsth_c_stationroute b where b.line =?1 and b.directions = ?2 and b.destroy=0) r " + 116 + @Query(value = "SELECT s.b_jwpoints,r.station_name,r.station_route_code FROM (" +
  117 + "SELECT b.station,b.station_route_code,b.station_name FROM bsth_c_stationroute b where b.line =?1 and b.directions = ?2 and b.destroy=0) r " +
118 "LEFT JOIN bsth_c_station s on r.station = s.id order by r.station_route_code asc", nativeQuery=true) 118 "LEFT JOIN bsth_c_station s on r.station = s.id order by r.station_route_code asc", nativeQuery=true)
119 List<Object[]> getSelectStationRouteCenterPoints(Integer lineId,Integer direction); 119 List<Object[]> getSelectStationRouteCenterPoints(Integer lineId,Integer direction);
120 120
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
@@ -85,12 +85,15 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -85,12 +85,15 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
85 if(null != sender) 85 if(null != sender)
86 d60.setSender(sender); 86 d60.setSender(sender);
87 d60.setHttpCode(code); 87 d60.setHttpCode(code);
88 - // 添加到缓存  
89 - dayOfDirectives.put60(d60);  
90 88
91 - if (code != 0) { 89 + if (code == 0) {
  90 + // 添加到缓存
  91 + dayOfDirectives.put60(d60, true);
  92 + }
  93 + else{
92 d60.setErrorText("网关通讯失败, code: " + code); 94 d60.setErrorText("网关通讯失败, code: " + code);
93 d60Repository.save(d60); 95 d60Repository.save(d60);
  96 + dayOfDirectives.put60(d60, false);
94 } 97 }
95 return code; 98 return code;
96 } 99 }
@@ -139,12 +142,13 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -139,12 +142,13 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
139 if (code == 0) { 142 if (code == 0) {
140 sch.setDirectiveState(60); 143 sch.setDirectiveState(60);
141 // 添加到缓存,延迟入库 144 // 添加到缓存,延迟入库
142 - dayOfDirectives.put60(d60); 145 + dayOfDirectives.put60(d60, true);
143 // 通知页面 146 // 通知页面
144 sendD60ToPage(sch); 147 sendD60ToPage(sch);
145 } 148 }
146 else{ 149 else{
147 d60.setErrorText("网关通讯失败, code: " + code); 150 d60.setErrorText("网关通讯失败, code: " + code);
  151 + dayOfDirectives.put60(d60, false);
148 d60Repository.save(d60); 152 d60Repository.save(d60);
149 } 153 }
150 return code; 154 return code;
@@ -196,11 +200,15 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -196,11 +200,15 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
196 d60.setHttpCode(code); 200 d60.setHttpCode(code);
197 if (null != sch) 201 if (null != sch)
198 d60.setSch(sch); 202 d60.setSch(sch);
199 - dayOfDirectives.put60(d60);  
200 203
201 - if (code != 0) { 204 +
  205 + if (code == 0) {
  206 + dayOfDirectives.put60(d60, true);
  207 + }
  208 + else{
202 d60.setErrorText("网关通讯失败, code: " + code); 209 d60.setErrorText("网关通讯失败, code: " + code);
203 d60Repository.save(d60); 210 d60Repository.save(d60);
  211 + dayOfDirectives.put60(d60, false);
204 } 212 }
205 return code; 213 return code;
206 } 214 }
src/main/java/com/bsth/service/impl/StationServiceImpl.java
@@ -248,13 +248,13 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem @@ -248,13 +248,13 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem
248 for(int i = 0;i <stationsArray.size();i++) { 248 for(int i = 0;i <stationsArray.size();i++) {
249 // 站点名称 249 // 站点名称
250 String stationName = stationsArray.getJSONObject(i).equals("") ? "" : stationsArray.getJSONObject(i).get("name").toString(); 250 String stationName = stationsArray.getJSONObject(i).equals("") ? "" : stationsArray.getJSONObject(i).get("name").toString();
251 - Double distance = stationsArray.getJSONObject(i).get("distance").equals("") ? 0 : Double.parseDouble(stationsArray.getJSONObject(i).get("distance").toString()); 251 + Double distance = stationsArray.getJSONObject(i).get("distance").equals("") ? 0.0d : Double.parseDouble(stationsArray.getJSONObject(i).get("distance").toString());
252 // 转成公里 252 // 转成公里
253 distance = distance/1000; 253 distance = distance/1000;
254 BigDecimal d = new BigDecimal(distance); 254 BigDecimal d = new BigDecimal(distance);
255 distance = d.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 255 distance = d.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
256 sectionDistance= distance + sectionDistance; 256 sectionDistance= distance + sectionDistance;
257 - Double duration = stationsArray.getJSONObject(i).get("duration").equals("") ? 0 : Double.parseDouble(stationsArray.getJSONObject(i).get("duration").toString()); 257 + Double duration = stationsArray.getJSONObject(i).get("duration").equals("") ? 0.0d : Double.parseDouble(stationsArray.getJSONObject(i).get("duration").toString());
258 // 转成分钟 258 // 转成分钟
259 duration = duration/60; 259 duration = duration/60;
260 BigDecimal t = new BigDecimal(duration); 260 BigDecimal t = new BigDecimal(duration);
@@ -792,9 +792,9 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem @@ -792,9 +792,9 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem
792 Station station = repository.findOne(stationId); 792 Station station = repository.findOne(stationId);
793 StationRoute arg0 = new StationRoute(); 793 StationRoute arg0 = new StationRoute();
794 // 距离 794 // 距离
795 - Double distances = map.get("distances").equals("") ? null : Double.parseDouble(map.get("distances").toString()); 795 + Double distances = map.get("distances").equals("") ? 0.0d : Double.parseDouble(map.get("distances").toString());
796 // 时间 796 // 时间
797 - Double toTime = map.get("toTime").equals("") ? null : Double.parseDouble(map.get("toTime").toString()); 797 + Double toTime = map.get("toTime").equals("") ? 0.0d : Double.parseDouble(map.get("toTime").toString());
798 // 站点路由名称 798 // 站点路由名称
799 String stationName = map.get("stationName").equals("") ? "" : map.get("stationName").toString(); 799 String stationName = map.get("stationName").equals("") ? "" : map.get("stationName").toString();
800 // 线路ID 800 // 线路ID
@@ -952,8 +952,8 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem @@ -952,8 +952,8 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem
952 stationRouteCode = stationRouteCode == null ? 100 : stationRouteCode; 952 stationRouteCode = stationRouteCode == null ? 100 : stationRouteCode;
953 Integer LineId = map.get("stationRouteLine").equals("") ? null : Integer.parseInt(map.get("stationRouteLine").toString()); 953 Integer LineId = map.get("stationRouteLine").equals("") ? null : Integer.parseInt(map.get("stationRouteLine").toString());
954 String stationMark = map.get("stationMark").equals("") ? null : map.get("stationMark").toString(); 954 String stationMark = map.get("stationMark").equals("") ? null : map.get("stationMark").toString();
955 - Double distances = map.get("distances").equals("") ? null : Double.parseDouble(map.get("distances").toString());  
956 - Double toTime = map.get("toTime").equals("") ? null : Double.parseDouble(map.get("toTime").toString()); 955 + Double distances = map.get("distances").equals("") ? 0.0d : Double.parseDouble(map.get("distances").toString());
  956 + Double toTime = map.get("toTime").equals("") ? 0.0d : Double.parseDouble(map.get("toTime").toString());
957 Integer directions = map.get("directions").equals("") ? null : Integer.parseInt(map.get("directions").toString()); 957 Integer directions = map.get("directions").equals("") ? null : Integer.parseInt(map.get("directions").toString());
958 Station station = repository.findOne(stationId); 958 Station station = repository.findOne(stationId);
959 Line line = lineRepository.findOne(LineId); 959 Line line = lineRepository.findOne(LineId);
src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
@@ -79,6 +79,8 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -79,6 +79,8 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
79 public String obtainDsq() throws Exception{ 79 public String obtainDsq() throws Exception{
80 String result = "failure"; 80 String result = "failure";
81 try { 81 try {
  82 + List<Ylb> addList = new ArrayList<Ylb>();
  83 + String type = "";
82 List<Cars> carsList=carsRepository.findCars(); 84 List<Cars> carsList=carsRepository.findCars();
83 Map<String, Boolean> carsMap=new HashMap<String, Boolean>(); 85 Map<String, Boolean> carsMap=new HashMap<String, Boolean>();
84 for (int i = 0; i < carsList.size(); i++) { 86 for (int i = 0; i < carsList.size(); i++) {
@@ -126,6 +128,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -126,6 +128,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
126 &&t1.getXlbm().equals(map.get("xlBm").toString())) 128 &&t1.getXlbm().equals(map.get("xlBm").toString()))
127 { 129 {
128 t=t1; 130 t=t1;
  131 + type="update";
129 } 132 }
130 } 133 }
131 134
@@ -182,13 +185,22 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -182,13 +185,22 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
182 t.setRq(sdf.parse(rq)); 185 t.setRq(sdf.parse(rq));
183 t.setCreatetime(dNow); 186 t.setCreatetime(dNow);
184 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){ 187 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){
185 - repository.save(t); 188 + if(type.equals("update")){
  189 + repository.save(t);
  190 + }else{
  191 + addList.add(t);
  192 + }
  193 +
186 } 194 }
187 195
188 196
189 } 197 }
190 - result = "success"; 198 +
191 } 199 }
  200 + if(addList.size()>0){
  201 + new BatchSaveUtils<Ylb>().saveList(addList, Ylb.class);
  202 + }
  203 + result = "success";
192 }catch (Exception e) { 204 }catch (Exception e) {
193 // TODO Auto-generated catch block 205 // TODO Auto-generated catch block
194 throw e; 206 throw e;
@@ -334,11 +346,13 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -334,11 +346,13 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
334 t.setFgsdm(map.get("bCompany") == null ? "" : map.get("bCompany").toString()); 346 t.setFgsdm(map.get("bCompany") == null ? "" : map.get("bCompany").toString());
335 t.setJhsj(map.get("fcsj")==null?"":map.get("fcsj").toString()); 347 t.setJhsj(map.get("fcsj")==null?"":map.get("fcsj").toString());
336 t.setRq(sdf.parse(rq)); 348 t.setRq(sdf.parse(rq));
337 - t.setCreatetime(date); 349 +
338 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){ 350 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){
339 if(type.equals("add")){ 351 if(type.equals("add")){
  352 + t.setCreatetime(date);
340 addList.add(t); 353 addList.add(t);
341 }else{ 354 }else{
  355 + t.setUpdatetime(date);
342 updateList.add(t); 356 updateList.add(t);
343 ins += t.getId().toString()+","; 357 ins += t.getId().toString()+",";
344 } 358 }
@@ -438,6 +452,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -438,6 +452,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
438 map.put("xlbm_like", ylb.getXlbm()); 452 map.put("xlbm_like", ylb.getXlbm());
439 // Iterator<Ylb> iterator2 = repository 453 // Iterator<Ylb> iterator2 = repository
440 // .findAll(new CustomerSpecs<Ylb>(map), new Sort(Direction.ASC, "jcsx")).iterator(); 454 // .findAll(new CustomerSpecs<Ylb>(map), new Sort(Direction.ASC, "jcsx")).iterator();
  455 + double czyl=0.0;
441 for (int j = 0; j < iterator2.size(); j++) { 456 for (int j = 0; j < iterator2.size(); j++) {
442 Ylb t = iterator2.get(j); 457 Ylb t = iterator2.get(j);
443 if(t.getNbbm().equals(ylb.getNbbm())){ 458 if(t.getNbbm().equals(ylb.getNbbm())){
@@ -445,6 +460,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -445,6 +460,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
445 // 进场等于出场的操作 既 最后进场存油量等于第一次的出场存油量 460 // 进场等于出场的操作 既 最后进场存油量等于第一次的出场存油量
446 // Double yl = t.getCzyl(); 461 // Double yl = t.getCzyl();
447 // Double jcyl = t.getCzyl(); 462 // Double jcyl = t.getCzyl();
  463 + czyl = t.getCzyl();
448 zyl =jzl; 464 zyl =jzl;
449 Double yh=0.0; 465 Double yh=0.0;
450 if(zlc>0){ 466 if(zlc>0){
@@ -476,10 +492,18 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -476,10 +492,18 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
476 } 492 }
477 nextJzyl =Arith.sub( Arith.add(Arith.sub(t.getJzl(),t.getSh()),nextJzyl),yh); 493 nextJzyl =Arith.sub( Arith.add(Arith.sub(t.getJzl(),t.getSh()),nextJzyl),yh);
478 if(zlc>0){ 494 if(zlc>0){
479 - long l=Math.round(nextJzyl);  
480 - double ylxs=l*100/100;  
481 -// nextJzyl = Arith.add(nextJzyl,Arith.sub(nextJzyl,ylxs)); 495 + long l=0l;
  496 + double ylxs=0.0;
  497 + if(j==iterator2.size()-1){
  498 + ylxs=czyl;
  499 + }else{
  500 + l=Math.round(nextJzyl);
  501 + ylxs=l*100/100;
  502 +
  503 + }
482 yh=Arith.add(yh, Arith.sub(ylxs,nextJzyl)); 504 yh=Arith.add(yh, Arith.sub(ylxs,nextJzyl));
  505 +// nextJzyl = Arith.add(nextJzyl,Arith.sub(nextJzyl,ylxs));
  506 +
483 t.setYh(yh); 507 t.setYh(yh);
484 t.setJzyl(ylxs); 508 t.setJzyl(ylxs);
485 nextJzyl=ylxs; 509 nextJzyl=ylxs;
@@ -704,7 +728,6 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -704,7 +728,6 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
704 } 728 }
705 // List<Ylb> ylListBe=repository.obtainYlbefore(rq, gsbm, "", xlbm, nbbm); 729 // List<Ylb> ylListBe=repository.obtainYlbefore(rq, gsbm, "", xlbm, nbbm);
706 List<Ylb> ylListBe=repository.listMaxRqJcsx(rq, gsbm, fgsbm, xlbm, nbbm); 730 List<Ylb> ylListBe=repository.listMaxRqJcsx(rq, gsbm, fgsbm, xlbm, nbbm);
707 - List<Cyl> cylList=cylRepository.obtainCyl(nbbm, gsbm);  
708 List<Ylb> ylbList=repository.obtainYl(rq,gsbm,fgsbm,xlbm,nbbm,"nbbm"); 731 List<Ylb> ylbList=repository.obtainYl(rq,gsbm,fgsbm,xlbm,nbbm,"nbbm");
709 List<Ylxxb> ylxxbList=ylxxbRepository.obtainYlxx(rq,0,gsbm); 732 List<Ylxxb> ylxxbList=ylxxbRepository.obtainYlxx(rq,0,gsbm);
710 for (int i = 0; i < ylxxbList.size(); i++) { 733 for (int i = 0; i < ylxxbList.size(); i++) {
@@ -719,7 +742,6 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -719,7 +742,6 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
719 } 742 }
720 743
721 if(fage){ 744 if(fage){
722 - Cyl cyl=null;  
723 Ylb t=new Ylb(); 745 Ylb t=new Ylb();
724 t.setNbbm(y1.getNbbm()); 746 t.setNbbm(y1.getNbbm());
725 t.setRq(y1.getYyrq()); 747 t.setRq(y1.getYyrq());
@@ -749,23 +771,13 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -749,23 +771,13 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
749 } 771 }
750 } 772 }
751 if(status){ 773 if(status){
752 - for (int j = 0; j < cylList.size(); j++) {  
753 - Cyl c=cylList.get(j);  
754 - if(c.getNbbm().equals(y1.getNbbm())){  
755 - t.setCzyl(c.getCyl());  
756 - cyl=c;  
757 - status=false;  
758 - break;  
759 - }  
760 - }  
761 - }  
762 - if(status){  
763 t.setCzyl(0.0); 774 t.setCzyl(0.0);
764 } 775 }
765 // double jzyl=Arith.add(t.getJzl(), t.getCzyl()); 776 // double jzyl=Arith.add(t.getJzl(), t.getCzyl());
766 t.setJzyl(Arith.add(t.getJzl(), t.getCzyl())); 777 t.setJzyl(Arith.add(t.getJzl(), t.getCzyl()));
767 t.setYh(0.0); 778 t.setYh(0.0);
768 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){ 779 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){
  780 + t.setCreatetime(new Date());
769 repository.save(t); 781 repository.save(t);
770 /*if(null!=cyl){ 782 /*if(null!=cyl){
771 cyl.setCyl(Arith.add(t.getJzl(), t.getCzyl())); 783 cyl.setCyl(Arith.add(t.getJzl(), t.getCzyl()));
@@ -1141,6 +1153,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -1141,6 +1153,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1141 Double zyl = 0.0; 1153 Double zyl = 0.0;
1142 Double nextJzyl = 0.0; 1154 Double nextJzyl = 0.0;
1143 // 车的,进,出油量及耗油 1155 // 车的,进,出油量及耗油
  1156 + double czyl=0.0;
1144 for (int i = 0; i < iterator2.size(); i++) { 1157 for (int i = 0; i < iterator2.size(); i++) {
1145 Ylb t = iterator2.get(i); 1158 Ylb t = iterator2.get(i);
1146 if (t.getJcsx() == 1) { 1159 if (t.getJcsx() == 1) {
@@ -1148,6 +1161,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -1148,6 +1161,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1148 t.setSh(sh); 1161 t.setSh(sh);
1149 t.setShyy(shyy); 1162 t.setShyy(shyy);
1150 } 1163 }
  1164 + czyl=t.getCzyl();
1151 // Double jcyl = t.getCzyl(); 1165 // Double jcyl = t.getCzyl();
1152 zyl = jzl; 1166 zyl = jzl;
1153 Double yh = 0.0; 1167 Double yh = 0.0;
@@ -1179,8 +1193,14 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -1179,8 +1193,14 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1179 } 1193 }
1180 nextJzyl = Arith.sub(Arith.add(t.getJzl(), nextJzyl), Arith.add(yh, t.getSh())); 1194 nextJzyl = Arith.sub(Arith.add(t.getJzl(), nextJzyl), Arith.add(yh, t.getSh()));
1181 if(zlc>0){ 1195 if(zlc>0){
1182 - long l=Math.round(nextJzyl);  
1183 - double ylxs=l*100/100; 1196 + long l=0l;
  1197 + double ylxs=0.0;
  1198 + if(i==iterator2.size()){
  1199 + ylxs=czyl;
  1200 + }else{
  1201 + l=Math.round(nextJzyl);
  1202 + ylxs=l*100/100;
  1203 + }
1184 // nextJzyl = Arith.add(nextJzyl,Arith.sub(nextJzyl,ylxs)); 1204 // nextJzyl = Arith.add(nextJzyl,Arith.sub(nextJzyl,ylxs));
1185 yh=Arith.add(yh, Arith.sub(ylxs,nextJzyl)); 1205 yh=Arith.add(yh, Arith.sub(ylxs,nextJzyl));
1186 t.setYh(yh); 1206 t.setYh(yh);
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -10,6 +10,7 @@ import com.bsth.controller.realcontrol.dto.DfsjChange; @@ -10,6 +10,7 @@ import com.bsth.controller.realcontrol.dto.DfsjChange;
10 import com.bsth.controller.realcontrol.dto.LpData; 10 import com.bsth.controller.realcontrol.dto.LpData;
11 import com.bsth.data.BasicData; 11 import com.bsth.data.BasicData;
12 import com.bsth.data.LineConfigData; 12 import com.bsth.data.LineConfigData;
  13 +import com.bsth.data.msg_queue.DirectivePushQueue;
13 import com.bsth.data.schedule.DayOfSchedule; 14 import com.bsth.data.schedule.DayOfSchedule;
14 import com.bsth.data.schedule.SchAttrCalculator; 15 import com.bsth.data.schedule.SchAttrCalculator;
15 import com.bsth.data.schedule.SchModifyLog; 16 import com.bsth.data.schedule.SchModifyLog;
@@ -1280,9 +1281,14 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1280,9 +1281,14 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1280 ts.add(next); 1281 ts.add(next);
1281 } 1282 }
1282 1283
1283 - if(!next.getXlBm().equals(sch.getXlBm())){  
1284 - directiveService.lineChange(next.getClZbh(), next.getXlBm(), "套跑@系统");  
1285 - } 1284 + try{
  1285 + //车辆下一个要执行的班次
  1286 + ScheduleRealInfo carNext = dayOfSchedule.next(sch);
  1287 + if(carNext != null && !carNext.getXlBm().equals(sch.getXlBm())){
  1288 + DirectivePushQueue.put64(carNext.getClZbh(), carNext.getXlBm(), "套跑@系统");
  1289 + //directiveService.lineChange(carNext.getClZbh(), carNext.getXlBm(), "套跑@系统");
  1290 + }
  1291 + }catch (Exception e){logger.error("", e);}
1286 1292
1287 //重新计算车辆执行班次 1293 //重新计算车辆执行班次
1288 dayOfSchedule.reCalcExecPlan(sch.getClZbh()); 1294 dayOfSchedule.reCalcExecPlan(sch.getClZbh());
@@ -1806,11 +1812,14 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1806,11 +1812,14 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1806 List<ScheduleRealInfo> list = null; 1812 List<ScheduleRealInfo> list = null;
1807 list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line); 1813 list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line);
1808 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm"); 1814 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
1809 - String sqlMinYysj="select start_opt from bsth_c_line_config where line = '"+BasicData.lineId2CodeMap.inverse().get(line) +"'"; 1815 + String sqlMinYysj="select start_opt from bsth_c_line_config where "
  1816 + + " id = ("
  1817 + + "select max(id) from bsth_c_line_config where line ='"+BasicData.lineId2CodeMap.inverse().get(line) +"'"
  1818 + + ")";
1810 String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class); 1819 String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class);
1811 - String[] minSjs = minfcsj.split(":");  
1812 - Long minSj=Long.parseLong(minSjs[0])*60+Long.parseLong(minSjs[1]);  
1813 - 1820 + String[] minSjs = minfcsj.split(":");
  1821 + Long minSj=Long.parseLong(minSjs[0])*60+Long.parseLong(minSjs[1]);
  1822 +
1814 for (int i = 0; i < list.size(); i++) { 1823 for (int i = 0; i < list.size(); i++) {
1815 ScheduleRealInfo s=list.get(i); 1824 ScheduleRealInfo s=list.get(i);
1816 String[] fcsj= s.getFcsj().split(":"); 1825 String[] fcsj= s.getFcsj().split(":");
src/main/java/com/bsth/service/report/impl/CulateMileageServiceImpl.java
@@ -151,8 +151,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -151,8 +151,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
151 int lbbc=0; 151 int lbbc=0;
152 for (int i = 0; i < lists.size(); i++) { 152 for (int i = 0; i < lists.size(); i++) {
153 ScheduleRealInfo scheduleRealInfo=lists.get(i); 153 ScheduleRealInfo scheduleRealInfo=lists.get(i);
154 - if (!(scheduleRealInfo.getBcType().equals("in")  
155 - || scheduleRealInfo.getBcType().equals("out"))) { 154 + if (!isInOut(scheduleRealInfo)) {
156 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks(); 155 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
157 if(childTaskPlans.isEmpty()){ 156 if(childTaskPlans.isEmpty()){
158 if(scheduleRealInfo.getStatus() == -1){ 157 if(scheduleRealInfo.getStatus() == -1){
@@ -187,8 +186,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -187,8 +186,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
187 List<Map<String, Object>> list=new ArrayList<Map<String,Object>>(); 186 List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
188 for (int i = 0; i < lists.size(); i++) { 187 for (int i = 0; i < lists.size(); i++) {
189 ScheduleRealInfo scheduleRealInfo=lists.get(i); 188 ScheduleRealInfo scheduleRealInfo=lists.get(i);
190 - if (!(scheduleRealInfo.getBcType().equals("in")  
191 - || scheduleRealInfo.getBcType().equals("out"))) { 189 + if (!isInOut(scheduleRealInfo)) {
192 // Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks(); 190 // Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
193 // if(childTaskPlans.isEmpty()){ 191 // if(childTaskPlans.isEmpty()){
194 if(scheduleRealInfo.isSflj()){ 192 if(scheduleRealInfo.isSflj()){
@@ -221,8 +219,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -221,8 +219,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
221 double ljgl=0; 219 double ljgl=0;
222 for (int i = 0; i < lists.size(); i++) { 220 for (int i = 0; i < lists.size(); i++) {
223 ScheduleRealInfo scheduleRealInfo=lists.get(i); 221 ScheduleRealInfo scheduleRealInfo=lists.get(i);
224 - if (!(scheduleRealInfo.getBcType().equals("in")  
225 - || scheduleRealInfo.getBcType().equals("out"))) { 222 + if (!isInOut(scheduleRealInfo)) {
226 if(!scheduleRealInfo.isDestroy()){ 223 if(!scheduleRealInfo.isDestroy()){
227 if(scheduleRealInfo.isSflj()){ 224 if(scheduleRealInfo.isSflj()){
228 ljgl=Arith.add(ljgl,scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc()); 225 ljgl=Arith.add(ljgl,scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());
@@ -250,8 +247,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -250,8 +247,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
250 int ljbc=0; 247 int ljbc=0;
251 for (int i = 0; i < lists.size(); i++) { 248 for (int i = 0; i < lists.size(); i++) {
252 ScheduleRealInfo scheduleRealInfo=lists.get(i); 249 ScheduleRealInfo scheduleRealInfo=lists.get(i);
253 - if (!(scheduleRealInfo.getBcType().equals("in")  
254 - || scheduleRealInfo.getBcType().equals("out"))) { 250 + if (!isInOut(scheduleRealInfo)) {
255 if(scheduleRealInfo.isSflj()){ 251 if(scheduleRealInfo.isSflj()){
256 if(item.equals("zgf") || item.equals("wgf")){ 252 if(item.equals("zgf") || item.equals("wgf")){
257 String time=""; 253 String time="";
@@ -292,8 +288,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -292,8 +288,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
292 double jhgl=0; 288 double jhgl=0;
293 for (int i = 0; i < lists.size(); i++) { 289 for (int i = 0; i < lists.size(); i++) {
294 ScheduleRealInfo scheduleRealInfo=lists.get(i); 290 ScheduleRealInfo scheduleRealInfo=lists.get(i);
295 - if (!(scheduleRealInfo.getBcType().equals("in")  
296 - || scheduleRealInfo.getBcType().equals("out"))) { 291 + if (!isInOut(scheduleRealInfo)) {
297 if(!scheduleRealInfo.isSflj()){ 292 if(!scheduleRealInfo.isSflj()){
298 jhgl=Arith.add(jhgl,scheduleRealInfo.getJhlcOrig()==null?0:scheduleRealInfo.getJhlcOrig()); 293 jhgl=Arith.add(jhgl,scheduleRealInfo.getJhlcOrig()==null?0:scheduleRealInfo.getJhlcOrig());
299 } 294 }
@@ -308,8 +303,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -308,8 +303,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
308 int jhbc=0; 303 int jhbc=0;
309 for (int i = 0; i < lists.size(); i++) { 304 for (int i = 0; i < lists.size(); i++) {
310 ScheduleRealInfo scheduleRealInfo=lists.get(i); 305 ScheduleRealInfo scheduleRealInfo=lists.get(i);
311 - if (!(scheduleRealInfo.getBcType().equals("in")  
312 - || scheduleRealInfo.getBcType().equals("out"))) { 306 + if (!isInOut(scheduleRealInfo)) {
313 if(!scheduleRealInfo.isSflj()){ 307 if(!scheduleRealInfo.isSflj()){
314 String[] fcsjStr = scheduleRealInfo.getFcsj().split(":"); 308 String[] fcsjStr = scheduleRealInfo.getFcsj().split(":");
315 long fcsj= Long.parseLong(fcsjStr[0])*60+Long.parseLong(fcsjStr[1]); 309 long fcsj= Long.parseLong(fcsjStr[0])*60+Long.parseLong(fcsjStr[1]);
@@ -375,8 +369,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -375,8 +369,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
375 int sjbc=0; 369 int sjbc=0;
376 for (int i = 0; i < lists.size(); i++) { 370 for (int i = 0; i < lists.size(); i++) {
377 ScheduleRealInfo scheduleRealInfo=lists.get(i); 371 ScheduleRealInfo scheduleRealInfo=lists.get(i);
378 - if (!(scheduleRealInfo.getBcType().equals("in")  
379 - || scheduleRealInfo.getBcType().equals("out"))) { 372 + if (!isInOut(scheduleRealInfo)) {
380 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks(); 373 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
381 if(!scheduleRealInfo.isSflj()){ 374 if(!scheduleRealInfo.isSflj()){
382 String time=""; 375 String time="";
@@ -491,7 +484,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -491,7 +484,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
491 for (int i = 0; i < lists.size(); i++) { 484 for (int i = 0; i < lists.size(); i++) {
492 ScheduleRealInfo scheduleRealInfo=lists.get(i); 485 ScheduleRealInfo scheduleRealInfo=lists.get(i);
493 if (scheduleRealInfo.getBcType().equals("in") 486 if (scheduleRealInfo.getBcType().equals("in")
494 - || scheduleRealInfo.getBcType().equals("out")) { 487 + || scheduleRealInfo.getBcType().equals("out")||scheduleRealInfo.getBcType().equals("ldks")) {
495 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks(); 488 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
496 if(childTaskPlans.isEmpty()){ 489 if(childTaskPlans.isEmpty()){
497 if(!scheduleRealInfo.isDestroy()) 490 if(!scheduleRealInfo.isDestroy())
@@ -521,7 +514,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -521,7 +514,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
521 ScheduleRealInfo scheduleRealInfo=lists.get(i); 514 ScheduleRealInfo scheduleRealInfo=lists.get(i);
522 if(!scheduleRealInfo.isSflj()){ 515 if(!scheduleRealInfo.isSflj()){
523 if (scheduleRealInfo.getBcType().equals("in") 516 if (scheduleRealInfo.getBcType().equals("in")
524 - || scheduleRealInfo.getBcType().equals("out")) { 517 + || scheduleRealInfo.getBcType().equals("out")|| scheduleRealInfo.getBcType().equals("ldks")) {
525 double jhlcOrig=scheduleRealInfo.getJhlcOrig()==null?0:scheduleRealInfo.getJhlcOrig(); 518 double jhlcOrig=scheduleRealInfo.getJhlcOrig()==null?0:scheduleRealInfo.getJhlcOrig();
526 if(jhlcOrig-scheduleRealInfo.getJhlc()>0){ 519 if(jhlcOrig-scheduleRealInfo.getJhlc()>0){
527 jcclc =Arith.add(jcclc, scheduleRealInfo.getJhlcOrig()==null?0:scheduleRealInfo.getJhlcOrig()); 520 jcclc =Arith.add(jcclc, scheduleRealInfo.getJhlcOrig()==null?0:scheduleRealInfo.getJhlcOrig());
@@ -542,6 +535,9 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -542,6 +535,9 @@ public class CulateMileageServiceImpl implements CulateMileageService{
542 if(s.getBcType().equals("out")){ 535 if(s.getBcType().equals("out")){
543 fage=true; 536 fage=true;
544 } 537 }
  538 + if(s.getBcType().equals("ldks")){
  539 + fage=true;
  540 + }
545 541
546 return fage; 542 return fage;
547 } 543 }
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
@@ -369,8 +369,11 @@ public class ReportServiceImpl implements ReportService{ @@ -369,8 +369,11 @@ public class ReportServiceImpl implements ReportService{
369 DecimalFormat df = new DecimalFormat("#0.00"); 369 DecimalFormat df = new DecimalFormat("#0.00");
370 // TODO Auto-generated method stub 370 // TODO Auto-generated method stub
371 //最早营运时间 区分夜宵线 371 //最早营运时间 区分夜宵线
372 - String sqlMinYysj="select start_opt from bsth_c_line_config where line = '"+BasicData.lineId2CodeMap.inverse().get(line) +"'";  
373 - String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class); 372 + String sqlMinYysj="select start_opt from bsth_c_line_config where "
  373 + + " id = ("
  374 + + "select max(id) from bsth_c_line_config where line ='"+BasicData.lineId2CodeMap.inverse().get(line) +"'"
  375 + + ")";
  376 + String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class);
374 String[] minSjs = minfcsj.split(":"); 377 String[] minSjs = minfcsj.split(":");
375 int minSj=Integer.parseInt(minSjs[0])*60+Integer.parseInt(minSjs[1]); 378 int minSj=Integer.parseInt(minSjs[0])*60+Integer.parseInt(minSjs[1]);
376 //查询时间里程 379 //查询时间里程
@@ -564,8 +567,11 @@ public class ReportServiceImpl implements ReportService{ @@ -564,8 +567,11 @@ public class ReportServiceImpl implements ReportService{
564 List<Map<String, Object>> list =new ArrayList<>(); 567 List<Map<String, Object>> list =new ArrayList<>();
565 // TODO Auto-generated method stub 568 // TODO Auto-generated method stub
566 //最早营运时间 区分夜宵线 569 //最早营运时间 区分夜宵线
567 - String sqlMinYysj="select start_opt from bsth_c_line_config where line = '"+BasicData.lineId2CodeMap.inverse().get(line) +"'";  
568 - String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class); 570 + String sqlMinYysj="select start_opt from bsth_c_line_config where "
  571 + + " id = ("
  572 + + "select max(id) from bsth_c_line_config where line ='"+BasicData.lineId2CodeMap.inverse().get(line) +"'"
  573 + + ")";
  574 + String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class);
569 575
570 //查询全程 576 //查询全程
571 String sqlqc="select t.*,x.station_name as qdz_name from ( " 577 String sqlqc="select t.*,x.station_name as qdz_name from ( "
src/main/java/com/bsth/service/schedule/impl/SchedulePlanServiceImpl.java
@@ -21,6 +21,9 @@ import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input; @@ -21,6 +21,9 @@ import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input;
21 import com.bsth.service.schedule.rules.ttinfo.*; 21 import com.bsth.service.schedule.rules.ttinfo.*;
22 import com.bsth.service.schedule.rules.ttinfo2.CalcuParam; 22 import com.bsth.service.schedule.rules.ttinfo2.CalcuParam;
23 import com.bsth.service.schedule.rules.ttinfo2.Result; 23 import com.bsth.service.schedule.rules.ttinfo2.Result;
  24 +import com.bsth.service.schedule.rules.validate.ValidateParam;
  25 +import com.bsth.service.schedule.rules.validate.ValidateResults_output;
  26 +import org.apache.commons.lang3.StringUtils;
24 import org.joda.time.DateTime; 27 import org.joda.time.DateTime;
25 import org.kie.api.KieBase; 28 import org.kie.api.KieBase;
26 import org.kie.api.runtime.KieSession; 29 import org.kie.api.runtime.KieSession;
@@ -321,6 +324,60 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im @@ -321,6 +324,60 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
321 324
322 } 325 }
323 326
  327 + /**
  328 + * 验证排班结果。
  329 + * @param planResult
  330 + * @param schedulePlan
  331 + */
  332 + public void validPlanResult(PlanResult planResult, SchedulePlan schedulePlan) {
  333 + // 1-1、构造drools规则输入数据,输出数据
  334 + ValidateParam validateParam = new ValidateParam(
  335 + new DateTime(schedulePlan.getScheduleFromTime()),
  336 + new DateTime(schedulePlan.getScheduleToTime())
  337 + );
  338 + // 规则输出数据
  339 + ValidateResults_output result = new ValidateResults_output();
  340 +
  341 + // 1-2、构造drools session->载入数据->启动规则->计算->销毁session
  342 + // 创建session,内部配置的是stateful
  343 + KieSession session = kieBase.newKieSession();
  344 +
  345 + // 设置gloable对象,在drl中通过别名使用
  346 + session.setGlobal("validResult", result);
  347 + session.setGlobal("log", logger); // 设置日志
  348 +
  349 + // 载入数据
  350 + session.insert(validateParam);
  351 + for (SchedulePlanInfo schedulePlanInfo: planResult.getSchedulePlanInfos()) {
  352 + session.insert(schedulePlanInfo);
  353 + }
  354 +
  355 + // 执行rule
  356 + session.fireAllRules();
  357 +
  358 + // 执行完毕销毁,有日志的也要关闭
  359 + session.dispose();
  360 +
  361 +// logger.info("错误总数={}", result.getInfos().size());
  362 +// for (ValidateResults_output.ValidInfo validInfo: result.getInfos()) {
  363 +// logger.info(validInfo.getDesc());
  364 +// }
  365 +
  366 + // 取10条错误
  367 + int size = result.getInfos().size() > 10 ? 10: result.getInfos().size();
  368 + List<String> desclist = new ArrayList<>();
  369 + for (int i = 0; i < size; i++) {
  370 + desclist.add(result.getInfos().get(i).getDesc());
  371 + }
  372 + if (desclist.size() > 0) {
  373 + schedulePlan.setPlanResult(StringUtils.join(desclist, "</br>"));
  374 + } else {
  375 + schedulePlan.setPlanResult("ok");
  376 + }
  377 +
  378 + // TODO:设定错误信息
  379 + }
  380 +
324 @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED) 381 @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
325 public SchedulePlan save(SchedulePlan schedulePlan) { 382 public SchedulePlan save(SchedulePlan schedulePlan) {
326 // pre、如果排班的数据之前已经有了,删除之前的数据 383 // pre、如果排班的数据之前已经有了,删除之前的数据
@@ -341,6 +398,9 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im @@ -341,6 +398,9 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
341 // 3、确定套跑规则 398 // 3、确定套跑规则
342 rerunPlanResult(planResult, schedulePlan); 399 rerunPlanResult(planResult, schedulePlan);
343 400
  401 + // TODO:3-1、验证排班结果
  402 + validPlanResult(planResult, schedulePlan);
  403 +
344 // 4、保存数据(jdbcTemplate 批量插入) 404 // 4、保存数据(jdbcTemplate 批量插入)
345 Date start4 = new Date(); 405 Date start4 = new Date();
346 scheduleRuleService.generateSchedulePlan(schedulePlan, planResult.getSchedulePlanInfos()); 406 scheduleRuleService.generateSchedulePlan(schedulePlan, planResult.getSchedulePlanInfos());
src/main/java/com/bsth/service/schedule/rules/MyDroolsConfiguration.java
@@ -74,6 +74,9 @@ public class MyDroolsConfiguration { @@ -74,6 +74,9 @@ public class MyDroolsConfiguration {
74 kfs.write("src/main/resources/rerun.drl", kieServices.getResources() 74 kfs.write("src/main/resources/rerun.drl", kieServices.getResources()
75 .newInputStreamResource(this.getClass().getResourceAsStream( 75 .newInputStreamResource(this.getClass().getResourceAsStream(
76 "/rules/rerun.drl"), "UTF-8")); 76 "/rules/rerun.drl"), "UTF-8"));
  77 + kfs.write("src/main/resources/validplan.drl", kieServices.getResources()
  78 + .newInputStreamResource(this.getClass().getResourceAsStream(
  79 + "/rules/validplan.drl"), "UTF-8"));
77 // TODO:还有其他drl.... 80 // TODO:还有其他drl....
78 81
79 // 4、创建KieBuilder,使用KieFileSystem构建 82 // 4、创建KieBuilder,使用KieFileSystem构建
src/main/java/com/bsth/service/schedule/rules/ScheduleRuleServiceImpl.java
@@ -119,6 +119,7 @@ public class ScheduleRuleServiceImpl implements ScheduleRuleService { @@ -119,6 +119,7 @@ public class ScheduleRuleServiceImpl implements ScheduleRuleService {
119 obj.setScheduleDate(rs.getDate("schedule_date")); 119 obj.setScheduleDate(rs.getDate("schedule_date"));
120 obj.setGidindex(rs.getString("gidindex")); 120 obj.setGidindex(rs.getString("gidindex"));
121 obj.setEcindex(rs.getString("ecindex")); 121 obj.setEcindex(rs.getString("ecindex"));
  122 + obj.setOrigingidindex(rs.getString("origingidindex"));
122 123
123 // 其他字段没用 124 // 其他字段没用
124 return obj; 125 return obj;
src/main/java/com/bsth/service/schedule/rules/validate/ValidRepeatBcFunction.java 0 → 100644
  1 +package com.bsth.service.schedule.rules.validate;
  2 +
  3 +import com.bsth.entity.schedule.SchedulePlanInfo;
  4 +import org.kie.api.runtime.rule.AccumulateFunction;
  5 +
  6 +import java.io.*;
  7 +import java.text.SimpleDateFormat;
  8 +import java.util.ArrayList;
  9 +import java.util.HashMap;
  10 +import java.util.List;
  11 +import java.util.Map;
  12 +
  13 +/**
  14 + * 计算班次重复错误。
  15 + * 同一个路牌下,相同发车时间的班次数。
  16 + * 注意:使用这个函数时,要一天计算一次,多天计算无意义。
  17 + */
  18 +public class ValidRepeatBcFunction implements AccumulateFunction {
  19 + @Override
  20 + public void writeExternal(ObjectOutput out) throws IOException {
  21 + }
  22 +
  23 + @Override
  24 + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  25 +
  26 + }
  27 +
  28 + protected static class RepeatBcInfo implements Externalizable {
  29 + /** 错误描述 */
  30 + public List<ValidateResults_output.ValidInfo> validInfoList = new ArrayList<>();
  31 + /** 内部计数Map,key:{路牌Id}_{发车时间},value:个数 */
  32 + public Map<String, Integer> lpBcFcsjCount = new HashMap<>();
  33 +
  34 + public RepeatBcInfo() {
  35 + }
  36 +
  37 + @Override
  38 + public void writeExternal(ObjectOutput out) throws IOException {
  39 + out.writeObject(validInfoList);
  40 + }
  41 +
  42 + @Override
  43 + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  44 + validInfoList = (List<ValidateResults_output.ValidInfo>) in.readObject();
  45 + }
  46 + }
  47 +
  48 + @Override
  49 + public Serializable createContext() {
  50 + System.out.println("create");
  51 + return new RepeatBcInfo();
  52 + }
  53 +
  54 + @Override
  55 + public void init(Serializable serializable) throws Exception {
  56 + // TODO:
  57 + System.out.println("init");
  58 + }
  59 +
  60 + @Override
  61 + public void accumulate(Serializable context, Object o) {
  62 + RepeatBcInfo repeatBcInfo = (RepeatBcInfo) context;
  63 + SchedulePlanInfo schedulePlanInfo = (SchedulePlanInfo) o;
  64 +
  65 + String key = schedulePlanInfo.getLp() + "_" + schedulePlanInfo.getFcsj();
  66 + SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日");
  67 + String infoformat = "日期(%s),路牌(%s),班次(%s),重复(%d)次";
  68 + if (repeatBcInfo.lpBcFcsjCount.get(key) == null) {
  69 + repeatBcInfo.lpBcFcsjCount.put(key, 1);
  70 + } else {
  71 + int count = repeatBcInfo.lpBcFcsjCount.get(key) + 1;
  72 + ValidateResults_output.ValidInfo validInfo = new ValidateResults_output.ValidInfo();
  73 + validInfo.setSd(schedulePlanInfo.getScheduleDate());
  74 + validInfo.setDesc(String.format(
  75 + infoformat,
  76 + sf.format(schedulePlanInfo.getScheduleDate()),
  77 + schedulePlanInfo.getLpName(),
  78 + schedulePlanInfo.getFcsj(),
  79 + count));
  80 + repeatBcInfo.validInfoList.add(validInfo);
  81 + repeatBcInfo.lpBcFcsjCount.put(key, count);
  82 + }
  83 + }
  84 +
  85 + @Override
  86 + public boolean supportsReverse() {
  87 + return true;
  88 + }
  89 +
  90 + @Override
  91 + public void reverse(Serializable context, Object o) throws Exception {
  92 + RepeatBcInfo repeatBcInfo = (RepeatBcInfo) context;
  93 + SchedulePlanInfo schedulePlanInfo = (SchedulePlanInfo) o;
  94 +
  95 + String key = schedulePlanInfo.getLp() + "_" + schedulePlanInfo.getFcsj();
  96 + repeatBcInfo.lpBcFcsjCount.remove(key);
  97 +
  98 + if (!repeatBcInfo.validInfoList.isEmpty()) { // 全部清空
  99 + repeatBcInfo.validInfoList.clear();
  100 + }
  101 + }
  102 +
  103 + @Override
  104 + public Class<?> getResultType() {
  105 + return List.class;
  106 + }
  107 +
  108 + @Override
  109 + public Object getResult(Serializable context) throws Exception {
  110 + RepeatBcInfo repeatBcInfo = (RepeatBcInfo) context;
  111 + return repeatBcInfo.validInfoList;
  112 + }
  113 +}
src/main/java/com/bsth/service/schedule/rules/validate/ValidateParam.java
@@ -16,7 +16,9 @@ public class ValidateParam { @@ -16,7 +16,9 @@ public class ValidateParam {
16 /** 间隔天数 */ 16 /** 间隔天数 */
17 private Integer days; 17 private Integer days;
18 18
19 - public ValidateParam() { 19 + public ValidateParam(DateTime f, DateTime t) {
  20 + this.fromDate = f;
  21 + this.toDate = t;
20 Period period = new Period(fromDate, toDate, PeriodType.days()); 22 Period period = new Period(fromDate, toDate, PeriodType.days());
21 days = period.getDays() + 1; 23 days = period.getDays() + 1;
22 } 24 }
src/main/java/com/bsth/service/schedule/rules/validate/ValidateResults_output.java
@@ -10,7 +10,7 @@ import java.util.List; @@ -10,7 +10,7 @@ import java.util.List;
10 public class ValidateResults_output { 10 public class ValidateResults_output {
11 private List<ValidInfo> infos = new ArrayList<>(); 11 private List<ValidInfo> infos = new ArrayList<>();
12 12
13 - static class ValidInfo { 13 + public static class ValidInfo {
14 /** 日期 */ 14 /** 日期 */
15 private Date sd; 15 private Date sd;
16 /** 描述 */ 16 /** 描述 */
src/main/java/com/bsth/websocket/handler/RealControlSocketHandler.java
1 package com.bsth.websocket.handler; 1 package com.bsth.websocket.handler;
2 2
3 import com.alibaba.fastjson.JSONObject; 3 import com.alibaba.fastjson.JSONObject;
4 -import com.bsth.common.Constants;  
5 import com.bsth.data.BasicData; 4 import com.bsth.data.BasicData;
  5 +import com.bsth.data.msg_queue.WebSocketPushQueue;
6 import com.google.common.base.Splitter; 6 import com.google.common.base.Splitter;
7 import org.slf4j.Logger; 7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory; 8 import org.slf4j.LoggerFactory;
@@ -103,7 +103,8 @@ public class RealControlSocketHandler implements WebSocketHandler { @@ -103,7 +103,8 @@ public class RealControlSocketHandler implements WebSocketHandler {
103 return; 103 return;
104 104
105 for(WebSocketSession user : list){ 105 for(WebSocketSession user : list){
106 - try { 106 + WebSocketPushQueue.put(user, message);
  107 + /*try {
107 if (user.isOpen()) { 108 if (user.isOpen()) {
108 user.sendMessage(message); 109 user.sendMessage(message);
109 } 110 }
@@ -114,7 +115,7 @@ public class RealControlSocketHandler implements WebSocketHandler { @@ -114,7 +115,7 @@ public class RealControlSocketHandler implements WebSocketHandler {
114 catch(Exception e2){} 115 catch(Exception e2){}
115 logger.error("sendMessageToLine error ...."+msg); 116 logger.error("sendMessageToLine error ...."+msg);
116 logger.error("sendMessageToLine error ....", e); 117 logger.error("sendMessageToLine error ....", e);
117 - } 118 + }*/
118 } 119 }
119 } 120 }
120 121
src/main/resources/application-dev.properties
@@ -10,7 +10,7 @@ spring.jpa.show-sql= true @@ -10,7 +10,7 @@ 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://127.0.0.1/control?useUnicode=true&characterEncoding=utf-8&useSSL=false 11 spring.datasource.url= jdbc:mysql://127.0.0.1/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
12 spring.datasource.username= root 12 spring.datasource.username= root
13 -spring.datasource.password= root 13 +spring.datasource.password=
14 14
15 #DATASOURCE 15 #DATASOURCE
16 spring.datasource.max-active=100 16 spring.datasource.max-active=100
src/main/resources/datatools/ktrs/scheduleRuleDataInput.ktr
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<transformation>  
3 - <info>  
4 - <name>&#x6392;&#x73ed;&#x89c4;&#x5219;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</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;bsth_project&#x2f;bsth_control_etl&#x2f;&#x5bfc;&#x5165;&#x5bfc;&#x51fa;1</default_value>  
15 - <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>  
16 - </parameter>  
17 - <parameter>  
18 - <name>filepath</name>  
19 - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control_etl&#x2f;&#x5bfc;&#x5165;&#x5bfc;&#x51fa;1&#x2f;&#x6392;&#x7248;&#x89c4;&#x5219;&#x4fe1;&#x606f;.xls</default_value>  
20 - <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>  
21 - </parameter>  
22 - </parameters>  
23 - <log>  
24 -<trans-log-table><connection/>  
25 -<schema/>  
26 -<table/>  
27 -<size_limit_lines/>  
28 -<interval/>  
29 -<timeout_days/>  
30 -<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>  
31 -<perf-log-table><connection/>  
32 -<schema/>  
33 -<table/>  
34 -<interval/>  
35 -<timeout_days/>  
36 -<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>  
37 -<channel-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>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>  
42 -<step-log-table><connection/>  
43 -<schema/>  
44 -<table/>  
45 -<timeout_days/>  
46 -<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>  
47 -<metrics-log-table><connection/>  
48 -<schema/>  
49 -<table/>  
50 -<timeout_days/>  
51 -<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>  
52 - </log>  
53 - <maxdate>  
54 - <connection/>  
55 - <table/>  
56 - <field/>  
57 - <offset>0.0</offset>  
58 - <maxdiff>0.0</maxdiff>  
59 - </maxdate>  
60 - <size_rowset>10000</size_rowset>  
61 - <sleep_time_empty>50</sleep_time_empty>  
62 - <sleep_time_full>50</sleep_time_full>  
63 - <unique_connections>N</unique_connections>  
64 - <feedback_shown>Y</feedback_shown>  
65 - <feedback_size>50000</feedback_size>  
66 - <using_thread_priorities>Y</using_thread_priorities>  
67 - <shared_objects_file/>  
68 - <capture_step_performance>N</capture_step_performance>  
69 - <step_performance_capturing_delay>1000</step_performance_capturing_delay>  
70 - <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>  
71 - <dependencies>  
72 - </dependencies>  
73 - <partitionschemas>  
74 - </partitionschemas>  
75 - <slaveservers>  
76 - </slaveservers>  
77 - <clusterschemas>  
78 - </clusterschemas>  
79 - <created_user>-</created_user>  
80 - <created_date>2017&#x2f;01&#x2f;09 10&#x3a;10&#x3a;36.915</created_date>  
81 - <modified_user>-</modified_user>  
82 - <modified_date>2017&#x2f;01&#x2f;09 10&#x3a;10&#x3a;36.915</modified_date>  
83 - <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>  
84 - <is_key_private>N</is_key_private>  
85 - </info>  
86 - <notepads>  
87 - </notepads>  
88 - <connection>  
89 - <name>192.168.168.1_jwgl_dw</name>  
90 - <server>192.168.168.1</server>  
91 - <type>ORACLE</type>  
92 - <access>Native</access>  
93 - <database>orcl</database>  
94 - <port>1521</port>  
95 - <username>jwgl_dw</username>  
96 - <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>  
97 - <servername/>  
98 - <data_tablespace/>  
99 - <index_tablespace/>  
100 - <attributes>  
101 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
102 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
103 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
104 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
105 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
106 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
107 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
108 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
109 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
110 - </attributes>  
111 - </connection>  
112 - <connection>  
113 - <name>bus_control_variable</name>  
114 - <server>&#x24;&#x7b;v_db_ip&#x7d;</server>  
115 - <type>MYSQL</type>  
116 - <access>Native</access>  
117 - <database>&#x24;&#x7b;v_db_dname&#x7d;</database>  
118 - <port>3306</port>  
119 - <username>&#x24;&#x7b;v_db_uname&#x7d;</username>  
120 - <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>  
121 - <servername/>  
122 - <data_tablespace/>  
123 - <index_tablespace/>  
124 - <attributes>  
125 - <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>  
126 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
127 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
128 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
129 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
130 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
131 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
132 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
133 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
134 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
135 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
136 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
137 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
138 - </attributes>  
139 - </connection>  
140 - <connection>  
141 - <name>bus_control_&#x516c;&#x53f8;_201</name>  
142 - <server>localhost</server>  
143 - <type>MYSQL</type>  
144 - <access>Native</access>  
145 - <database>control</database>  
146 - <port>3306</port>  
147 - <username>root</username>  
148 - <password>Encrypted </password>  
149 - <servername/>  
150 - <data_tablespace/>  
151 - <index_tablespace/>  
152 - <attributes>  
153 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
154 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
155 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
156 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
157 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
158 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
159 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
160 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
161 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
162 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
163 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
164 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
165 - </attributes>  
166 - </connection>  
167 - <connection>  
168 - <name>bus_control_&#x672c;&#x673a;</name>  
169 - <server>localhost</server>  
170 - <type>MYSQL</type>  
171 - <access>Native</access>  
172 - <database>control</database>  
173 - <port>3306</port>  
174 - <username>root</username>  
175 - <password>Encrypted </password>  
176 - <servername/>  
177 - <data_tablespace/>  
178 - <index_tablespace/>  
179 - <attributes>  
180 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
181 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
182 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
183 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
184 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
185 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
186 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
187 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
188 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
189 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
190 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
191 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
192 - </attributes>  
193 - </connection>  
194 - <connection>  
195 - <name>xlab_mysql_youle</name>  
196 - <server>101.231.124.8</server>  
197 - <type>MYSQL</type>  
198 - <access>Native</access>  
199 - <database>xlab_youle</database>  
200 - <port>45687</port>  
201 - <username>xlab-youle</username>  
202 - <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>  
203 - <servername/>  
204 - <data_tablespace/>  
205 - <index_tablespace/>  
206 - <attributes>  
207 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
208 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
209 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
210 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
211 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
212 - <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>  
213 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
214 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
215 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
216 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
217 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
218 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
219 - </attributes>  
220 - </connection>  
221 - <connection>  
222 - <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>  
223 - <server>localhost</server>  
224 - <type>MYSQL</type>  
225 - <access>Native</access>  
226 - <database>xlab_youle</database>  
227 - <port>3306</port>  
228 - <username>root</username>  
229 - <password>Encrypted </password>  
230 - <servername/>  
231 - <data_tablespace/>  
232 - <index_tablespace/>  
233 - <attributes>  
234 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
235 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
236 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
237 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
238 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
239 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
240 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
241 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
242 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
243 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
244 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
245 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
246 - </attributes>  
247 - </connection>  
248 - <connection>  
249 - <name>xlab_youle</name>  
250 - <server/>  
251 - <type>MYSQL</type>  
252 - <access>JNDI</access>  
253 - <database>xlab_youle</database>  
254 - <port>1521</port>  
255 - <username/>  
256 - <password>Encrypted </password>  
257 - <servername/>  
258 - <data_tablespace/>  
259 - <index_tablespace/>  
260 - <attributes>  
261 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
262 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
263 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
264 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
265 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
266 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
267 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
268 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
269 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
270 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
271 - </attributes>  
272 - </connection>  
273 - <order>  
274 - <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>  
275 - <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</to><enabled>Y</enabled> </hop>  
276 - <hop> <from>&#x62c6;&#x5206;&#x8def;&#x724c;&#x8303;&#x56f4;</from><to>&#x8def;&#x724c;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>  
277 - <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x8def;&#x724c;id</to><enabled>Y</enabled> </hop>  
278 - <hop> <from>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x8def;&#x724c;id</from><to>&#x62c6;&#x5206;&#x4eba;&#x5458;&#x8303;&#x56f4;</to><enabled>Y</enabled> </hop>  
279 - <hop> <from>&#x62c6;&#x5206;&#x4eba;&#x5458;&#x8303;&#x56f4;</from><to>&#x62c6;&#x5206;&#x5206;&#x73ed;&#x642d;&#x73ed;&#x7f16;&#x7801;&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>  
280 - <hop> <from>&#x62c6;&#x5206;&#x5206;&#x73ed;&#x642d;&#x73ed;&#x7f16;&#x7801;&#x5b57;&#x6bb5;</from><to>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>  
281 - <hop> <from>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</from><to>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2; 2</to><enabled>Y</enabled> </hop>  
282 - <hop> <from>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</from><to>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>  
283 - <hop> <from>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</from><to>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
284 - <hop> <from>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>  
285 - <hop> <from>&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</from><to>&#x8fc7;&#x6ee4;&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
286 - <hop> <from>&#x8fc7;&#x6ee4;&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x62c6;&#x5206;&#x8def;&#x724c;&#x8303;&#x56f4;</to><enabled>Y</enabled> </hop>  
287 - <hop> <from>&#x8def;&#x724c;id&#x67e5;&#x8be2;</from><to>&#x8fc7;&#x6ee4;&#x8def;&#x724c;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
288 - <hop> <from>&#x8fc7;&#x6ee4;&#x8def;&#x724c;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
289 - <hop> <from>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2; 2</from><to>&#x8fc7;&#x6ee4;&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
290 - <hop> <from>&#x8fc7;&#x6ee4;&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x5408;&#x5e76;&#x5206;&#x73ed;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</to><enabled>Y</enabled> </hop>  
291 - <hop> <from>&#x5408;&#x5e76;&#x5206;&#x73ed;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55; 2</to><enabled>Y</enabled> </hop>  
292 - <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55; 2</from><to>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</to><enabled>Y</enabled> </hop>  
293 - <hop> <from>&#x63d2;&#x5165; &#x2f; &#x66f4;&#x65b0;bsth_c_s_sr1_flat</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa; 2</to><enabled>Y</enabled> </hop>  
294 - <hop> <from>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</from><to>&#x542f;&#x7528;&#x65e5;&#x671f;&#x8f6c;&#x6362;</to><enabled>Y</enabled> </hop>  
295 - <hop> <from>&#x542f;&#x7528;&#x65e5;&#x671f;&#x8f6c;&#x6362;</from><to>&#x63d2;&#x5165; &#x2f; &#x66f4;&#x65b0;bsth_c_s_sr1_flat</to><enabled>Y</enabled> </hop>  
296 - </order>  
297 - <step>  
298 - <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</name>  
299 - <type>DBLookup</type>  
300 - <description/>  
301 - <distribute>Y</distribute>  
302 - <custom_distribution/>  
303 - <copies>1</copies>  
304 - <partitioning>  
305 - <method>none</method>  
306 - <schema_name/>  
307 - </partitioning>  
308 - <connection>bus_control_variable</connection>  
309 - <cache>N</cache>  
310 - <cache_load_all>Y</cache_load_all>  
311 - <cache_size>0</cache_size>  
312 - <lookup>  
313 - <schema/>  
314 - <table>bsth_c_s_ecinfo</table>  
315 - <orderby/>  
316 - <fail_on_multiple>N</fail_on_multiple>  
317 - <eat_row_on_failure>N</eat_row_on_failure>  
318 - <key>  
319 - <name>xlid</name>  
320 - <field>xl</field>  
321 - <condition>&#x3d;</condition>  
322 - <name2/>  
323 - </key>  
324 - <key>  
325 - <name>dbbm1</name>  
326 - <field>dbbm</field>  
327 - <condition>&#x3d;</condition>  
328 - <name2/>  
329 - </key>  
330 - <key>  
331 - <name>isCancel</name>  
332 - <field>is_cancel</field>  
333 - <condition>&#x3d;</condition>  
334 - <name2/>  
335 - </key>  
336 - <value>  
337 - <name>id</name>  
338 - <rename>rycid1</rename>  
339 - <default/>  
340 - <type>Integer</type>  
341 - </value>  
342 - </lookup>  
343 - <cluster_schema/>  
344 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
345 - <xloc>904</xloc>  
346 - <yloc>101</yloc>  
347 - <draw>Y</draw>  
348 - </GUI>  
349 - </step>  
350 -  
351 - <step>  
352 - <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2; 2</name>  
353 - <type>DBLookup</type>  
354 - <description/>  
355 - <distribute>Y</distribute>  
356 - <custom_distribution/>  
357 - <copies>1</copies>  
358 - <partitioning>  
359 - <method>none</method>  
360 - <schema_name/>  
361 - </partitioning>  
362 - <connection>bus_control_variable</connection>  
363 - <cache>N</cache>  
364 - <cache_load_all>Y</cache_load_all>  
365 - <cache_size>0</cache_size>  
366 - <lookup>  
367 - <schema/>  
368 - <table>bsth_c_s_ecinfo</table>  
369 - <orderby/>  
370 - <fail_on_multiple>N</fail_on_multiple>  
371 - <eat_row_on_failure>N</eat_row_on_failure>  
372 - <key>  
373 - <name>xlid</name>  
374 - <field>xl</field>  
375 - <condition>&#x3d;</condition>  
376 - <name2/>  
377 - </key>  
378 - <key>  
379 - <name>dbbm2</name>  
380 - <field>dbbm</field>  
381 - <condition>&#x3d;</condition>  
382 - <name2/>  
383 - </key>  
384 - <key>  
385 - <name>isCancel</name>  
386 - <field>is_cancel</field>  
387 - <condition>&#x3d;</condition>  
388 - <name2/>  
389 - </key>  
390 - <value>  
391 - <name>id</name>  
392 - <rename>rycid2</rename>  
393 - <default/>  
394 - <type>Integer</type>  
395 - </value>  
396 - </lookup>  
397 - <cluster_schema/>  
398 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
399 - <xloc>778</xloc>  
400 - <yloc>103</yloc>  
401 - <draw>Y</draw>  
402 - </GUI>  
403 - </step>  
404 -  
405 - <step>  
406 - <name>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</name>  
407 - <type>GroupBy</type>  
408 - <description/>  
409 - <distribute>Y</distribute>  
410 - <custom_distribution/>  
411 - <copies>1</copies>  
412 - <partitioning>  
413 - <method>none</method>  
414 - <schema_name/>  
415 - </partitioning>  
416 - <all_rows>N</all_rows>  
417 - <ignore_aggregate>N</ignore_aggregate>  
418 - <field_ignore/>  
419 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
420 - <prefix>grp</prefix>  
421 - <add_linenr>N</add_linenr>  
422 - <linenr_fieldname/>  
423 - <give_back_row>N</give_back_row>  
424 - <group>  
425 - <field>  
426 - <name>xlid</name>  
427 - </field>  
428 - <field>  
429 - <name>cid</name>  
430 - </field>  
431 - <field>  
432 - <name>lpnames</name>  
433 - </field>  
434 - <field>  
435 - <name>lpids</name>  
436 - </field>  
437 - <field>  
438 - <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>  
439 - </field>  
440 - <field>  
441 - <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>  
442 - </field>  
443 - <field>  
444 - <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>  
445 - </field>  
446 - <field>  
447 - <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>  
448 - </field>  
449 - <field>  
450 - <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>  
451 - </field>  
452 - <field>  
453 - <name>isCancel</name>  
454 - </field>  
455 - </group>  
456 - <fields>  
457 - <field>  
458 - <aggregate>rycids</aggregate>  
459 - <subject>rycid</subject>  
460 - <type>CONCAT_STRING</type>  
461 - <valuefield>,</valuefield>  
462 - </field>  
463 - <field>  
464 - <aggregate>rybms</aggregate>  
465 - <subject>rybm</subject>  
466 - <type>CONCAT_STRING</type>  
467 - <valuefield>,</valuefield>  
468 - </field>  
469 - </fields>  
470 - <cluster_schema/>  
471 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
472 - <xloc>780</xloc>  
473 - <yloc>291</yloc>  
474 - <draw>Y</draw>  
475 - </GUI>  
476 - </step>  
477 -  
478 - <step>  
479 - <name>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x8def;&#x724c;id</name>  
480 - <type>GroupBy</type>  
481 - <description/>  
482 - <distribute>Y</distribute>  
483 - <custom_distribution/>  
484 - <copies>1</copies>  
485 - <partitioning>  
486 - <method>none</method>  
487 - <schema_name/>  
488 - </partitioning>  
489 - <all_rows>N</all_rows>  
490 - <ignore_aggregate>N</ignore_aggregate>  
491 - <field_ignore/>  
492 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
493 - <prefix>grp</prefix>  
494 - <add_linenr>N</add_linenr>  
495 - <linenr_fieldname/>  
496 - <give_back_row>N</give_back_row>  
497 - <group>  
498 - <field>  
499 - <name>xlid</name>  
500 - </field>  
501 - <field>  
502 - <name>cid</name>  
503 - </field>  
504 - <field>  
505 - <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>  
506 - </field>  
507 - <field>  
508 - <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>  
509 - </field>  
510 - <field>  
511 - <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>  
512 - </field>  
513 - <field>  
514 - <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>  
515 - </field>  
516 - <field>  
517 - <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>  
518 - </field>  
519 - <field>  
520 - <name>isCancel</name>  
521 - </field>  
522 - </group>  
523 - <fields>  
524 - <field>  
525 - <aggregate>lpids</aggregate>  
526 - <subject>lpid</subject>  
527 - <type>CONCAT_STRING</type>  
528 - <valuefield>,</valuefield>  
529 - </field>  
530 - <field>  
531 - <aggregate>lpnames</aggregate>  
532 - <subject>lpname</subject>  
533 - <type>CONCAT_STRING</type>  
534 - <valuefield>,</valuefield>  
535 - </field>  
536 - </fields>  
537 - <cluster_schema/>  
538 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
539 - <xloc>653</xloc>  
540 - <yloc>119</yloc>  
541 - <draw>Y</draw>  
542 - </GUI>  
543 - </step>  
544 -  
545 - <step>  
546 - <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name>  
547 - <type>ExcelInput</type>  
548 - <description/>  
549 - <distribute>Y</distribute>  
550 - <custom_distribution/>  
551 - <copies>1</copies>  
552 - <partitioning>  
553 - <method>none</method>  
554 - <schema_name/>  
555 - </partitioning>  
556 - <header>Y</header>  
557 - <noempty>Y</noempty>  
558 - <stoponempty>N</stoponempty>  
559 - <filefield/>  
560 - <sheetfield/>  
561 - <sheetrownumfield/>  
562 - <rownumfield/>  
563 - <sheetfield/>  
564 - <filefield/>  
565 - <limit>0</limit>  
566 - <encoding/>  
567 - <add_to_result_filenames>Y</add_to_result_filenames>  
568 - <accept_filenames>Y</accept_filenames>  
569 - <accept_field>filepath_</accept_field>  
570 - <accept_stepname>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</accept_stepname>  
571 - <file>  
572 - <name/>  
573 - <filemask/>  
574 - <exclude_filemask/>  
575 - <file_required>N</file_required>  
576 - <include_subfolders>N</include_subfolders>  
577 - </file>  
578 - <fields>  
579 - <field>  
580 - <name>&#x7ebf;&#x8def;</name>  
581 - <type>String</type>  
582 - <length>-1</length>  
583 - <precision>-1</precision>  
584 - <trim_type>none</trim_type>  
585 - <repeat>N</repeat>  
586 - <format/>  
587 - <currency/>  
588 - <decimal/>  
589 - <group/>  
590 - </field>  
591 - <field>  
592 - <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>  
593 - <type>String</type>  
594 - <length>-1</length>  
595 - <precision>-1</precision>  
596 - <trim_type>none</trim_type>  
597 - <repeat>N</repeat>  
598 - <format/>  
599 - <currency/>  
600 - <decimal/>  
601 - <group/>  
602 - </field>  
603 - <field>  
604 - <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>  
605 - <type>String</type>  
606 - <length>-1</length>  
607 - <precision>-1</precision>  
608 - <trim_type>none</trim_type>  
609 - <repeat>N</repeat>  
610 - <format/>  
611 - <currency/>  
612 - <decimal/>  
613 - <group/>  
614 - </field>  
615 - <field>  
616 - <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>  
617 - <type>String</type>  
618 - <length>-1</length>  
619 - <precision>-1</precision>  
620 - <trim_type>none</trim_type>  
621 - <repeat>N</repeat>  
622 - <format>&#x23;</format>  
623 - <currency/>  
624 - <decimal/>  
625 - <group/>  
626 - </field>  
627 - <field>  
628 - <name>&#x8def;&#x724c;&#x8303;&#x56f4;</name>  
629 - <type>String</type>  
630 - <length>-1</length>  
631 - <precision>-1</precision>  
632 - <trim_type>none</trim_type>  
633 - <repeat>N</repeat>  
634 - <format>&#x23;</format>  
635 - <currency/>  
636 - <decimal/>  
637 - <group/>  
638 - </field>  
639 - <field>  
640 - <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>  
641 - <type>String</type>  
642 - <length>-1</length>  
643 - <precision>-1</precision>  
644 - <trim_type>none</trim_type>  
645 - <repeat>N</repeat>  
646 - <format>&#x23;</format>  
647 - <currency/>  
648 - <decimal/>  
649 - <group/>  
650 - </field>  
651 - <field>  
652 - <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>  
653 - <type>String</type>  
654 - <length>-1</length>  
655 - <precision>-1</precision>  
656 - <trim_type>none</trim_type>  
657 - <repeat>N</repeat>  
658 - <format>&#x23;</format>  
659 - <currency/>  
660 - <decimal/>  
661 - <group/>  
662 - </field>  
663 - <field>  
664 - <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>  
665 - <type>String</type>  
666 - <length>-1</length>  
667 - <precision>-1</precision>  
668 - <trim_type>none</trim_type>  
669 - <repeat>N</repeat>  
670 - <format>&#x23;</format>  
671 - <currency/>  
672 - <decimal/>  
673 - <group/>  
674 - </field>  
675 - </fields>  
676 - <sheets>  
677 - <sheet>  
678 - <name>&#x5de5;&#x4f5c;&#x8868;1</name>  
679 - <startrow>0</startrow>  
680 - <startcol>0</startcol>  
681 - </sheet>  
682 - </sheets>  
683 - <strict_types>N</strict_types>  
684 - <error_ignored>N</error_ignored>  
685 - <error_line_skipped>N</error_line_skipped>  
686 - <bad_line_files_destination_directory/>  
687 - <bad_line_files_extension>warning</bad_line_files_extension>  
688 - <error_line_files_destination_directory/>  
689 - <error_line_files_extension>error</error_line_files_extension>  
690 - <line_number_files_destination_directory/>  
691 - <line_number_files_extension>line</line_number_files_extension>  
692 - <shortFileFieldName/>  
693 - <pathFieldName/>  
694 - <hiddenFieldName/>  
695 - <lastModificationTimeFieldName/>  
696 - <uriNameFieldName/>  
697 - <rootUriNameFieldName/>  
698 - <extensionFieldName/>  
699 - <sizeFieldName/>  
700 - <spreadsheet_type>JXL</spreadsheet_type>  
701 - <cluster_schema/>  
702 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
703 - <xloc>208</xloc>  
704 - <yloc>21</yloc>  
705 - <draw>Y</draw>  
706 - </GUI>  
707 - </step>  
708 -  
709 - <step>  
710 - <name>&#x5408;&#x5e76;&#x5206;&#x73ed;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</name>  
711 - <type>ScriptValueMod</type>  
712 - <description/>  
713 - <distribute>Y</distribute>  
714 - <custom_distribution/>  
715 - <copies>1</copies>  
716 - <partitioning>  
717 - <method>none</method>  
718 - <schema_name/>  
719 - </partitioning>  
720 - <compatible>N</compatible>  
721 - <optimizationLevel>9</optimizationLevel>  
722 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
723 - <jsScript_name>Script 1</jsScript_name>  
724 - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var rycid&#x3b;&#xa;var rybm&#x3b;&#xa;&#xa;if &#x28;rycid2 &#x3d;&#x3d; null&#x29; &#x7b;&#xa; rycid &#x3d; rycid1&#x3b;&#xa; rybm &#x3d; dbbm1&#x3b;&#xa;&#x7d; else &#x7b;&#xa; rycid &#x3d; rycid1 &#x2b; &#x22;-&#x22; &#x2b; rycid2&#x3b;&#xa; rybm &#x3d; dbbm1 &#x2b; &#x22;-&#x22; &#x2b; dbbm2&#x3b;&#xa;&#x7d;</jsScript_script>  
725 - </jsScript> </jsScripts> <fields> <field> <name>rycid</name>  
726 - <rename>rycid</rename>  
727 - <type>String</type>  
728 - <length>-1</length>  
729 - <precision>-1</precision>  
730 - <replace>N</replace>  
731 - </field> <field> <name>rybm</name>  
732 - <rename>rybm</rename>  
733 - <type>String</type>  
734 - <length>-1</length>  
735 - <precision>-1</precision>  
736 - <replace>N</replace>  
737 - </field> </fields> <cluster_schema/>  
738 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
739 - <xloc>917</xloc>  
740 - <yloc>201</yloc>  
741 - <draw>Y</draw>  
742 - </GUI>  
743 - </step>  
744 -  
745 - <step>  
746 - <name>&#x542f;&#x7528;&#x65e5;&#x671f;&#x8f6c;&#x6362;</name>  
747 - <type>SelectValues</type>  
748 - <description/>  
749 - <distribute>Y</distribute>  
750 - <custom_distribution/>  
751 - <copies>1</copies>  
752 - <partitioning>  
753 - <method>none</method>  
754 - <schema_name/>  
755 - </partitioning>  
756 - <fields> <select_unspecified>N</select_unspecified>  
757 - <meta> <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>  
758 - <rename>&#x542f;&#x7528;&#x65e5;&#x671f;</rename>  
759 - <type>Timestamp</type>  
760 - <length>-2</length>  
761 - <precision>-2</precision>  
762 - <conversion_mask>yyyy-MM-dd</conversion_mask>  
763 - <date_format_lenient>false</date_format_lenient>  
764 - <date_format_locale/>  
765 - <date_format_timezone/>  
766 - <lenient_string_to_number>false</lenient_string_to_number>  
767 - <encoding/>  
768 - <decimal_symbol/>  
769 - <grouping_symbol/>  
770 - <currency_symbol/>  
771 - <storage_type/>  
772 - </meta> </fields> <cluster_schema/>  
773 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
774 - <xloc>777</xloc>  
775 - <yloc>368</yloc>  
776 - <draw>Y</draw>  
777 - </GUI>  
778 - </step>  
779 -  
780 - <step>  
781 - <name>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</name>  
782 - <type>Constant</type>  
783 - <description/>  
784 - <distribute>Y</distribute>  
785 - <custom_distribution/>  
786 - <copies>1</copies>  
787 - <partitioning>  
788 - <method>none</method>  
789 - <schema_name/>  
790 - </partitioning>  
791 - <fields>  
792 - <field>  
793 - <name>isCancel</name>  
794 - <type>Integer</type>  
795 - <format/>  
796 - <currency/>  
797 - <decimal/>  
798 - <group/>  
799 - <nullif>0</nullif>  
800 - <length>-1</length>  
801 - <precision>-1</precision>  
802 - <set_empty_string>N</set_empty_string>  
803 - </field>  
804 - </fields>  
805 - <cluster_schema/>  
806 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
807 - <xloc>361</xloc>  
808 - <yloc>22</yloc>  
809 - <draw>Y</draw>  
810 - </GUI>  
811 - </step>  
812 -  
813 - <step>  
814 - <name>&#x62c6;&#x5206;&#x4eba;&#x5458;&#x8303;&#x56f4;</name>  
815 - <type>SplitFieldToRows3</type>  
816 - <description/>  
817 - <distribute>Y</distribute>  
818 - <custom_distribution/>  
819 - <copies>1</copies>  
820 - <partitioning>  
821 - <method>none</method>  
822 - <schema_name/>  
823 - </partitioning>  
824 - <splitfield>&#x4eba;&#x5458;&#x8303;&#x56f4;</splitfield>  
825 - <delimiter>,</delimiter>  
826 - <newfield>dbbm</newfield>  
827 - <rownum>N</rownum>  
828 - <rownum_field/>  
829 - <resetrownumber>Y</resetrownumber>  
830 - <delimiter_is_regex>N</delimiter_is_regex>  
831 - <cluster_schema/>  
832 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
833 - <xloc>777</xloc>  
834 - <yloc>22</yloc>  
835 - <draw>Y</draw>  
836 - </GUI>  
837 - </step>  
838 -  
839 - <step>  
840 - <name>&#x62c6;&#x5206;&#x5206;&#x73ed;&#x642d;&#x73ed;&#x7f16;&#x7801;&#x5b57;&#x6bb5;</name>  
841 - <type>FieldSplitter</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 - <splitfield>dbbm</splitfield>  
851 - <delimiter>-</delimiter>  
852 - <enclosure/>  
853 - <fields> <field> <name>dbbm1</name>  
854 - <id/>  
855 - <idrem>N</idrem>  
856 - <type>String</type>  
857 - <format/>  
858 - <group/>  
859 - <decimal/>  
860 - <currency/>  
861 - <length>-1</length>  
862 - <precision>-1</precision>  
863 - <nullif/>  
864 - <ifnull/>  
865 - <trimtype>none</trimtype>  
866 - </field> <field> <name>dbbm2</name>  
867 - <id/>  
868 - <idrem>N</idrem>  
869 - <type>String</type>  
870 - <format/>  
871 - <group/>  
872 - <decimal/>  
873 - <currency/>  
874 - <length>-1</length>  
875 - <precision>-1</precision>  
876 - <nullif/>  
877 - <ifnull/>  
878 - <trimtype>none</trimtype>  
879 - </field> </fields> <cluster_schema/>  
880 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
881 - <xloc>901</xloc>  
882 - <yloc>22</yloc>  
883 - <draw>Y</draw>  
884 - </GUI>  
885 - </step>  
886 -  
887 - <step>  
888 - <name>&#x62c6;&#x5206;&#x8def;&#x724c;&#x8303;&#x56f4;</name>  
889 - <type>SplitFieldToRows3</type>  
890 - <description/>  
891 - <distribute>Y</distribute>  
892 - <custom_distribution/>  
893 - <copies>1</copies>  
894 - <partitioning>  
895 - <method>none</method>  
896 - <schema_name/>  
897 - </partitioning>  
898 - <splitfield>&#x8def;&#x724c;&#x8303;&#x56f4;</splitfield>  
899 - <delimiter>,</delimiter>  
900 - <newfield>lpname</newfield>  
901 - <rownum>N</rownum>  
902 - <rownum_field/>  
903 - <resetrownumber>Y</resetrownumber>  
904 - <delimiter_is_regex>N</delimiter_is_regex>  
905 - <cluster_schema/>  
906 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
907 - <xloc>364</xloc>  
908 - <yloc>259</yloc>  
909 - <draw>Y</draw>  
910 - </GUI>  
911 - </step>  
912 -  
913 - <step>  
914 - <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>  
915 - <type>SortRows</type>  
916 - <description/>  
917 - <distribute>Y</distribute>  
918 - <custom_distribution/>  
919 - <copies>1</copies>  
920 - <partitioning>  
921 - <method>none</method>  
922 - <schema_name/>  
923 - </partitioning>  
924 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
925 - <prefix>out</prefix>  
926 - <sort_size>1000000</sort_size>  
927 - <free_memory/>  
928 - <compress>N</compress>  
929 - <compress_variable/>  
930 - <unique_rows>N</unique_rows>  
931 - <fields>  
932 - <field>  
933 - <name>xlid</name>  
934 - <ascending>Y</ascending>  
935 - <case_sensitive>N</case_sensitive>  
936 - <presorted>N</presorted>  
937 - </field>  
938 - <field>  
939 - <name>cid</name>  
940 - <ascending>Y</ascending>  
941 - <case_sensitive>N</case_sensitive>  
942 - <presorted>N</presorted>  
943 - </field>  
944 - <field>  
945 - <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>  
946 - <ascending>Y</ascending>  
947 - <case_sensitive>N</case_sensitive>  
948 - <presorted>N</presorted>  
949 - </field>  
950 - <field>  
951 - <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>  
952 - <ascending>Y</ascending>  
953 - <case_sensitive>N</case_sensitive>  
954 - <presorted>N</presorted>  
955 - </field>  
956 - <field>  
957 - <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>  
958 - <ascending>Y</ascending>  
959 - <case_sensitive>N</case_sensitive>  
960 - <presorted>N</presorted>  
961 - </field>  
962 - <field>  
963 - <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>  
964 - <ascending>Y</ascending>  
965 - <case_sensitive>N</case_sensitive>  
966 - <presorted>N</presorted>  
967 - </field>  
968 - <field>  
969 - <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>  
970 - <ascending>Y</ascending>  
971 - <case_sensitive>N</case_sensitive>  
972 - <presorted>N</presorted>  
973 - </field>  
974 - <field>  
975 - <name>isCancel</name>  
976 - <ascending>Y</ascending>  
977 - <case_sensitive>N</case_sensitive>  
978 - <presorted>N</presorted>  
979 - </field>  
980 - </fields>  
981 - <cluster_schema/>  
982 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
983 - <xloc>516</xloc>  
984 - <yloc>119</yloc>  
985 - <draw>Y</draw>  
986 - </GUI>  
987 - </step>  
988 -  
989 - <step>  
990 - <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55; 2</name>  
991 - <type>SortRows</type>  
992 - <description/>  
993 - <distribute>Y</distribute>  
994 - <custom_distribution/>  
995 - <copies>1</copies>  
996 - <partitioning>  
997 - <method>none</method>  
998 - <schema_name/>  
999 - </partitioning>  
1000 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
1001 - <prefix>out</prefix>  
1002 - <sort_size>1000000</sort_size>  
1003 - <free_memory/>  
1004 - <compress>N</compress>  
1005 - <compress_variable/>  
1006 - <unique_rows>N</unique_rows>  
1007 - <fields>  
1008 - <field>  
1009 - <name>xlid</name>  
1010 - <ascending>Y</ascending>  
1011 - <case_sensitive>N</case_sensitive>  
1012 - <presorted>N</presorted>  
1013 - </field>  
1014 - <field>  
1015 - <name>cid</name>  
1016 - <ascending>Y</ascending>  
1017 - <case_sensitive>N</case_sensitive>  
1018 - <presorted>N</presorted>  
1019 - </field>  
1020 - <field>  
1021 - <name>lpnames</name>  
1022 - <ascending>Y</ascending>  
1023 - <case_sensitive>N</case_sensitive>  
1024 - <presorted>N</presorted>  
1025 - </field>  
1026 - <field>  
1027 - <name>lpids</name>  
1028 - <ascending>Y</ascending>  
1029 - <case_sensitive>N</case_sensitive>  
1030 - <presorted>N</presorted>  
1031 - </field>  
1032 - <field>  
1033 - <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>  
1034 - <ascending>Y</ascending>  
1035 - <case_sensitive>N</case_sensitive>  
1036 - <presorted>N</presorted>  
1037 - </field>  
1038 - <field>  
1039 - <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>  
1040 - <ascending>Y</ascending>  
1041 - <case_sensitive>N</case_sensitive>  
1042 - <presorted>N</presorted>  
1043 - </field>  
1044 - <field>  
1045 - <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>  
1046 - <ascending>Y</ascending>  
1047 - <case_sensitive>N</case_sensitive>  
1048 - <presorted>N</presorted>  
1049 - </field>  
1050 - <field>  
1051 - <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>  
1052 - <ascending>Y</ascending>  
1053 - <case_sensitive>N</case_sensitive>  
1054 - <presorted>N</presorted>  
1055 - </field>  
1056 - <field>  
1057 - <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>  
1058 - <ascending>Y</ascending>  
1059 - <case_sensitive>N</case_sensitive>  
1060 - <presorted>N</presorted>  
1061 - </field>  
1062 - <field>  
1063 - <name>isCancel</name>  
1064 - <ascending>Y</ascending>  
1065 - <case_sensitive>N</case_sensitive>  
1066 - <presorted>N</presorted>  
1067 - </field>  
1068 - </fields>  
1069 - <cluster_schema/>  
1070 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1071 - <xloc>919</xloc>  
1072 - <yloc>289</yloc>  
1073 - <draw>Y</draw>  
1074 - </GUI>  
1075 - </step>  
1076 -  
1077 - <step>  
1078 - <name>&#x63d2;&#x5165; &#x2f; &#x66f4;&#x65b0;bsth_c_s_sr1_flat</name>  
1079 - <type>InsertUpdate</type>  
1080 - <description/>  
1081 - <distribute>Y</distribute>  
1082 - <custom_distribution/>  
1083 - <copies>1</copies>  
1084 - <partitioning>  
1085 - <method>none</method>  
1086 - <schema_name/>  
1087 - </partitioning>  
1088 - <connection>bus_control_variable</connection>  
1089 - <commit>100</commit>  
1090 - <update_bypassed>N</update_bypassed>  
1091 - <lookup>  
1092 - <schema/>  
1093 - <table>bsth_c_s_sr1_flat</table>  
1094 - <key>  
1095 - <name>xlid</name>  
1096 - <field>xl</field>  
1097 - <condition>&#x3d;</condition>  
1098 - <name2/>  
1099 - </key>  
1100 - <key>  
1101 - <name>cid</name>  
1102 - <field>car_config_info</field>  
1103 - <condition>&#x3d;</condition>  
1104 - <name2/>  
1105 - </key>  
1106 - <value>  
1107 - <name>xl</name>  
1108 - <rename>xlid</rename>  
1109 - <update>Y</update>  
1110 - </value>  
1111 - <value>  
1112 - <name>car_config_info</name>  
1113 - <rename>cid</rename>  
1114 - <update>Y</update>  
1115 - </value>  
1116 - <value>  
1117 - <name>lp_names</name>  
1118 - <rename>lpnames</rename>  
1119 - <update>Y</update>  
1120 - </value>  
1121 - <value>  
1122 - <name>lp_ids</name>  
1123 - <rename>lpids</rename>  
1124 - <update>Y</update>  
1125 - </value>  
1126 - <value>  
1127 - <name>lp_start</name>  
1128 - <rename>&#x8d77;&#x59cb;&#x8def;&#x724c;</rename>  
1129 - <update>Y</update>  
1130 - </value>  
1131 - <value>  
1132 - <name>ry_start</name>  
1133 - <rename>&#x8d77;&#x59cb;&#x4eba;&#x5458;</rename>  
1134 - <update>Y</update>  
1135 - </value>  
1136 - <value>  
1137 - <name>ry_dbbms</name>  
1138 - <rename>rybms</rename>  
1139 - <update>Y</update>  
1140 - </value>  
1141 - <value>  
1142 - <name>qyrq</name>  
1143 - <rename>&#x542f;&#x7528;&#x65e5;&#x671f;</rename>  
1144 - <update>Y</update>  
1145 - </value>  
1146 - <value>  
1147 - <name>ry_config_ids</name>  
1148 - <rename>rycids</rename>  
1149 - <update>Y</update>  
1150 - </value>  
1151 - <value>  
1152 - <name>fbgs</name>  
1153 - <rename>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</rename>  
1154 - <update>Y</update>  
1155 - </value>  
1156 - </lookup>  
1157 - <cluster_schema/>  
1158 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1159 - <xloc>532</xloc>  
1160 - <yloc>297</yloc>  
1161 - <draw>Y</draw>  
1162 - </GUI>  
1163 - </step>  
1164 -  
1165 - <step>  
1166 - <name>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</name>  
1167 - <type>DBLookup</type>  
1168 - <description/>  
1169 - <distribute>Y</distribute>  
1170 - <custom_distribution/>  
1171 - <copies>1</copies>  
1172 - <partitioning>  
1173 - <method>none</method>  
1174 - <schema_name/>  
1175 - </partitioning>  
1176 - <connection>bus_control_variable</connection>  
1177 - <cache>N</cache>  
1178 - <cache_load_all>Y</cache_load_all>  
1179 - <cache_size>0</cache_size>  
1180 - <lookup>  
1181 - <schema/>  
1182 - <table>bsth_c_line</table>  
1183 - <orderby/>  
1184 - <fail_on_multiple>N</fail_on_multiple>  
1185 - <eat_row_on_failure>N</eat_row_on_failure>  
1186 - <key>  
1187 - <name>&#x7ebf;&#x8def;</name>  
1188 - <field>name</field>  
1189 - <condition>&#x3d;</condition>  
1190 - <name2/>  
1191 - </key>  
1192 - <key>  
1193 - <name>isCancel</name>  
1194 - <field>destroy</field>  
1195 - <condition>&#x3d;</condition>  
1196 - <name2/>  
1197 - </key>  
1198 - <value>  
1199 - <name>id</name>  
1200 - <rename>xlid</rename>  
1201 - <default/>  
1202 - <type>Integer</type>  
1203 - </value>  
1204 - </lookup>  
1205 - <cluster_schema/>  
1206 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1207 - <xloc>359</xloc>  
1208 - <yloc>110</yloc>  
1209 - <draw>Y</draw>  
1210 - </GUI>  
1211 - </step>  
1212 -  
1213 - <step>  
1214 - <name>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</name>  
1215 - <type>GetVariable</type>  
1216 - <description/>  
1217 - <distribute>Y</distribute>  
1218 - <custom_distribution/>  
1219 - <copies>1</copies>  
1220 - <partitioning>  
1221 - <method>none</method>  
1222 - <schema_name/>  
1223 - </partitioning>  
1224 - <fields>  
1225 - <field>  
1226 - <name>filepath_</name>  
1227 - <variable>&#x24;&#x7b;filepath&#x7d;</variable>  
1228 - <type>String</type>  
1229 - <format/>  
1230 - <currency/>  
1231 - <decimal/>  
1232 - <group/>  
1233 - <length>-1</length>  
1234 - <precision>-1</precision>  
1235 - <trim_type>none</trim_type>  
1236 - </field>  
1237 - <field>  
1238 - <name>erroroutputdir_</name>  
1239 - <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>  
1240 - <type>String</type>  
1241 - <format/>  
1242 - <currency/>  
1243 - <decimal/>  
1244 - <group/>  
1245 - <length>-1</length>  
1246 - <precision>-1</precision>  
1247 - <trim_type>none</trim_type>  
1248 - </field>  
1249 - </fields>  
1250 - <cluster_schema/>  
1251 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1252 - <xloc>53</xloc>  
1253 - <yloc>23</yloc>  
1254 - <draw>Y</draw>  
1255 - </GUI>  
1256 - </step>  
1257 -  
1258 - <step>  
1259 - <name>&#x8def;&#x724c;id&#x67e5;&#x8be2;</name>  
1260 - <type>DBLookup</type>  
1261 - <description/>  
1262 - <distribute>Y</distribute>  
1263 - <custom_distribution/>  
1264 - <copies>1</copies>  
1265 - <partitioning>  
1266 - <method>none</method>  
1267 - <schema_name/>  
1268 - </partitioning>  
1269 - <connection>bus_control_variable</connection>  
1270 - <cache>N</cache>  
1271 - <cache_load_all>Y</cache_load_all>  
1272 - <cache_size>0</cache_size>  
1273 - <lookup>  
1274 - <schema/>  
1275 - <table>bsth_c_s_gbi</table>  
1276 - <orderby/>  
1277 - <fail_on_multiple>N</fail_on_multiple>  
1278 - <eat_row_on_failure>N</eat_row_on_failure>  
1279 - <key>  
1280 - <name>xlid</name>  
1281 - <field>xl</field>  
1282 - <condition>&#x3d;</condition>  
1283 - <name2/>  
1284 - </key>  
1285 - <key>  
1286 - <name>lpname</name>  
1287 - <field>lp_name</field>  
1288 - <condition>&#x3d;</condition>  
1289 - <name2/>  
1290 - </key>  
1291 - <key>  
1292 - <name>isCancel</name>  
1293 - <field>is_cancel</field>  
1294 - <condition>&#x3d;</condition>  
1295 - <name2/>  
1296 - </key>  
1297 - <value>  
1298 - <name>id</name>  
1299 - <rename>lpid</rename>  
1300 - <default/>  
1301 - <type>Integer</type>  
1302 - </value>  
1303 - </lookup>  
1304 - <cluster_schema/>  
1305 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1306 - <xloc>516</xloc>  
1307 - <yloc>21</yloc>  
1308 - <draw>Y</draw>  
1309 - </GUI>  
1310 - </step>  
1311 -  
1312 - <step>  
1313 - <name>&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</name>  
1314 - <type>DBJoin</type>  
1315 - <description/>  
1316 - <distribute>Y</distribute>  
1317 - <custom_distribution/>  
1318 - <copies>1</copies>  
1319 - <partitioning>  
1320 - <method>none</method>  
1321 - <schema_name/>  
1322 - </partitioning>  
1323 - <connection>bus_control_variable</connection>  
1324 - <rowlimit>1</rowlimit>  
1325 - <sql>select t1.id as cid from bsth_c_s_ccinfo t1 left join bsth_c_cars t2 on t1.cl &#x3d; t2.id&#xa;where t1.xl &#x3d; &#x3f; and t2.inside_code &#x3d; &#x3f; and t1.is_cancel &#x3d; &#x3f;</sql>  
1326 - <outer_join>Y</outer_join>  
1327 - <replace_vars>N</replace_vars>  
1328 - <parameter>  
1329 - <field>  
1330 - <name>xlid</name>  
1331 - <type>Integer</type>  
1332 - </field>  
1333 - <field>  
1334 - <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>  
1335 - <type>String</type>  
1336 - </field>  
1337 - <field>  
1338 - <name>isCancel</name>  
1339 - <type>Integer</type>  
1340 - </field>  
1341 - </parameter>  
1342 - <cluster_schema/>  
1343 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1344 - <xloc>360</xloc>  
1345 - <yloc>184</yloc>  
1346 - <draw>Y</draw>  
1347 - </GUI>  
1348 - </step>  
1349 -  
1350 - <step>  
1351 - <name>&#x8fc7;&#x6ee4;&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>  
1352 - <type>FilterRows</type>  
1353 - <description/>  
1354 - <distribute>Y</distribute>  
1355 - <custom_distribution/>  
1356 - <copies>1</copies>  
1357 - <partitioning>  
1358 - <method>none</method>  
1359 - <schema_name/>  
1360 - </partitioning>  
1361 -<send_true_to/>  
1362 -<send_false_to/>  
1363 - <compare>  
1364 -<condition>  
1365 - <negated>N</negated>  
1366 - <conditions>  
1367 - <condition>  
1368 - <negated>N</negated>  
1369 - <leftvalue>rycid1</leftvalue>  
1370 - <function>IS NOT NULL</function>  
1371 - <rightvalue/>  
1372 - </condition>  
1373 - <condition>  
1374 - <negated>N</negated>  
1375 - <operator>OR</operator>  
1376 - <leftvalue>rycid2</leftvalue>  
1377 - <function>IS NOT NULL</function>  
1378 - <rightvalue/>  
1379 - </condition>  
1380 - </conditions>  
1381 - </condition>  
1382 - </compare>  
1383 - <cluster_schema/>  
1384 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1385 - <xloc>776</xloc>  
1386 - <yloc>204</yloc>  
1387 - <draw>Y</draw>  
1388 - </GUI>  
1389 - </step>  
1390 -  
1391 - <step>  
1392 - <name>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>  
1393 - <type>FilterRows</type>  
1394 - <description/>  
1395 - <distribute>Y</distribute>  
1396 - <custom_distribution/>  
1397 - <copies>1</copies>  
1398 - <partitioning>  
1399 - <method>none</method>  
1400 - <schema_name/>  
1401 - </partitioning>  
1402 -<send_true_to>&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</send_true_to>  
1403 -<send_false_to/>  
1404 - <compare>  
1405 -<condition>  
1406 - <negated>N</negated>  
1407 - <leftvalue>xlid</leftvalue>  
1408 - <function>IS NOT NULL</function>  
1409 - <rightvalue/>  
1410 - </condition>  
1411 - </compare>  
1412 - <cluster_schema/>  
1413 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1414 - <xloc>203</xloc>  
1415 - <yloc>110</yloc>  
1416 - <draw>Y</draw>  
1417 - </GUI>  
1418 - </step>  
1419 -  
1420 - <step>  
1421 - <name>&#x8fc7;&#x6ee4;&#x8def;&#x724c;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>  
1422 - <type>FilterRows</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 -<send_true_to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</send_true_to>  
1432 -<send_false_to/>  
1433 - <compare>  
1434 -<condition>  
1435 - <negated>N</negated>  
1436 - <leftvalue>lpid</leftvalue>  
1437 - <function>IS NOT NULL</function>  
1438 - <rightvalue/>  
1439 - </condition>  
1440 - </compare>  
1441 - <cluster_schema/>  
1442 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1443 - <xloc>653</xloc>  
1444 - <yloc>23</yloc>  
1445 - <draw>Y</draw>  
1446 - </GUI>  
1447 - </step>  
1448 -  
1449 - <step>  
1450 - <name>&#x8fc7;&#x6ee4;&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>  
1451 - <type>FilterRows</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 -<send_true_to>&#x62c6;&#x5206;&#x8def;&#x724c;&#x8303;&#x56f4;</send_true_to>  
1461 -<send_false_to/>  
1462 - <compare>  
1463 -<condition>  
1464 - <negated>N</negated>  
1465 - <leftvalue>cid</leftvalue>  
1466 - <function>IS NOT NULL</function>  
1467 - <rightvalue/>  
1468 - </condition>  
1469 - </compare>  
1470 - <cluster_schema/>  
1471 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1472 - <xloc>208</xloc>  
1473 - <yloc>182</yloc>  
1474 - <draw>Y</draw>  
1475 - </GUI>  
1476 - </step>  
1477 -  
1478 - <step>  
1479 - <name>&#x9519;&#x8bef;&#x8f93;&#x51fa; 2</name>  
1480 - <type>ExcelOutput</type>  
1481 - <description/>  
1482 - <distribute>Y</distribute>  
1483 - <custom_distribution/>  
1484 - <copies>1</copies>  
1485 - <partitioning>  
1486 - <method>none</method>  
1487 - <schema_name/>  
1488 - </partitioning>  
1489 - <header>Y</header>  
1490 - <footer>N</footer>  
1491 - <encoding>UTF-8</encoding>  
1492 - <append>N</append>  
1493 - <add_to_result_filenames>Y</add_to_result_filenames>  
1494 - <file>  
1495 - <name>&#x24;&#x7b;erroroutputdir&#x7d;&#x2f;&#x6392;&#x7248;&#x89c4;&#x5219;&#x4fe1;&#x606f;&#x5bfc;&#x5165;_&#x9519;&#x8bef;</name>  
1496 - <extention>xls</extention>  
1497 - <do_not_open_newfile_init>N</do_not_open_newfile_init>  
1498 - <create_parent_folder>N</create_parent_folder>  
1499 - <split>N</split>  
1500 - <add_date>N</add_date>  
1501 - <add_time>N</add_time>  
1502 - <SpecifyFormat>N</SpecifyFormat>  
1503 - <date_time_format/>  
1504 - <sheetname>Sheet1</sheetname>  
1505 - <autosizecolums>N</autosizecolums>  
1506 - <nullisblank>N</nullisblank>  
1507 - <protect_sheet>N</protect_sheet>  
1508 - <password>Encrypted </password>  
1509 - <splitevery>0</splitevery>  
1510 - <usetempfiles>N</usetempfiles>  
1511 - <tempdirectory/>  
1512 - </file>  
1513 - <template>  
1514 - <enabled>N</enabled>  
1515 - <append>N</append>  
1516 - <filename>template.xls</filename>  
1517 - </template>  
1518 - <fields>  
1519 - <field>  
1520 - <name>xlid</name>  
1521 - <type>Integer</type>  
1522 - <format/>  
1523 - </field>  
1524 - <field>  
1525 - <name>cid</name>  
1526 - <type>Integer</type>  
1527 - <format/>  
1528 - </field>  
1529 - <field>  
1530 - <name>&#x8def;&#x724c;&#x8303;&#x56f4;</name>  
1531 - <type>String</type>  
1532 - <format/>  
1533 - </field>  
1534 - <field>  
1535 - <name>lpids</name>  
1536 - <type>String</type>  
1537 - <format/>  
1538 - </field>  
1539 - <field>  
1540 - <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>  
1541 - <type>String</type>  
1542 - <format/>  
1543 - </field>  
1544 - <field>  
1545 - <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>  
1546 - <type>String</type>  
1547 - <format/>  
1548 - </field>  
1549 - <field>  
1550 - <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>  
1551 - <type>String</type>  
1552 - <format/>  
1553 - </field>  
1554 - <field>  
1555 - <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>  
1556 - <type>Timestamp</type>  
1557 - <format/>  
1558 - </field>  
1559 - <field>  
1560 - <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>  
1561 - <type>String</type>  
1562 - <format/>  
1563 - </field>  
1564 - <field>  
1565 - <name>isCancel</name>  
1566 - <type>Integer</type>  
1567 - <format/>  
1568 - </field>  
1569 - <field>  
1570 - <name>rycids</name>  
1571 - <type>String</type>  
1572 - <format/>  
1573 - </field>  
1574 - <field>  
1575 - <name>error_count</name>  
1576 - <type>Integer</type>  
1577 - <format/>  
1578 - </field>  
1579 - <field>  
1580 - <name>error_desc</name>  
1581 - <type>String</type>  
1582 - <format/>  
1583 - </field>  
1584 - <field>  
1585 - <name>error_column1</name>  
1586 - <type>String</type>  
1587 - <format/>  
1588 - </field>  
1589 - <field>  
1590 - <name>error_column2</name>  
1591 - <type>String</type>  
1592 - <format/>  
1593 - </field>  
1594 - </fields>  
1595 - <custom>  
1596 - <header_font_name>arial</header_font_name>  
1597 - <header_font_size>10</header_font_size>  
1598 - <header_font_bold>N</header_font_bold>  
1599 - <header_font_italic>N</header_font_italic>  
1600 - <header_font_underline>no</header_font_underline>  
1601 - <header_font_orientation>horizontal</header_font_orientation>  
1602 - <header_font_color>black</header_font_color>  
1603 - <header_background_color>none</header_background_color>  
1604 - <header_row_height>255</header_row_height>  
1605 - <header_alignment>left</header_alignment>  
1606 - <header_image/>  
1607 - <row_font_name>arial</row_font_name>  
1608 - <row_font_size>10</row_font_size>  
1609 - <row_font_color>black</row_font_color>  
1610 - <row_background_color>none</row_background_color>  
1611 - </custom>  
1612 - <cluster_schema/>  
1613 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1614 - <xloc>534</xloc>  
1615 - <yloc>392</yloc>  
1616 - <draw>Y</draw>  
1617 - </GUI>  
1618 - </step>  
1619 -  
1620 - <step_error_handling>  
1621 - <error>  
1622 - <source_step>&#x63d2;&#x5165; &#x2f; &#x66f4;&#x65b0;bsth_c_s_sr1_flat</source_step>  
1623 - <target_step>&#x9519;&#x8bef;&#x8f93;&#x51fa; 2</target_step>  
1624 - <is_enabled>Y</is_enabled>  
1625 - <nr_valuename>error_count</nr_valuename>  
1626 - <descriptions_valuename>error_desc</descriptions_valuename>  
1627 - <fields_valuename>error_column1</fields_valuename>  
1628 - <codes_valuename>error_column2</codes_valuename>  
1629 - <max_errors/>  
1630 - <max_pct_errors/>  
1631 - <min_pct_rows/>  
1632 - </error>  
1633 - </step_error_handling>  
1634 - <slave-step-copy-partition-distribution>  
1635 -</slave-step-copy-partition-distribution>  
1636 - <slave_transformation>N</slave_transformation>  
1637 -  
1638 -</transformation> 1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>&#x6392;&#x73ed;&#x89c4;&#x5219;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</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;bsth_project&#x2f;bsth_control_etl&#x2f;&#x5bfc;&#x5165;&#x5bfc;&#x51fa;1</default_value>
  15 + <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>filepath</name>
  19 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control_etl&#x2f;&#x5bfc;&#x5165;&#x5bfc;&#x51fa;1&#x2f;&#x6392;&#x7248;&#x89c4;&#x5219;&#x4fe1;&#x606f;.xls</default_value>
  20 + <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>
  21 + </parameter>
  22 + </parameters>
  23 + <log>
  24 +<trans-log-table><connection/>
  25 +<schema/>
  26 +<table/>
  27 +<size_limit_lines/>
  28 +<interval/>
  29 +<timeout_days/>
  30 +<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>
  31 +<perf-log-table><connection/>
  32 +<schema/>
  33 +<table/>
  34 +<interval/>
  35 +<timeout_days/>
  36 +<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>
  37 +<channel-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>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>
  42 +<step-log-table><connection/>
  43 +<schema/>
  44 +<table/>
  45 +<timeout_days/>
  46 +<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>
  47 +<metrics-log-table><connection/>
  48 +<schema/>
  49 +<table/>
  50 +<timeout_days/>
  51 +<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>
  52 + </log>
  53 + <maxdate>
  54 + <connection/>
  55 + <table/>
  56 + <field/>
  57 + <offset>0.0</offset>
  58 + <maxdiff>0.0</maxdiff>
  59 + </maxdate>
  60 + <size_rowset>10000</size_rowset>
  61 + <sleep_time_empty>50</sleep_time_empty>
  62 + <sleep_time_full>50</sleep_time_full>
  63 + <unique_connections>N</unique_connections>
  64 + <feedback_shown>Y</feedback_shown>
  65 + <feedback_size>50000</feedback_size>
  66 + <using_thread_priorities>Y</using_thread_priorities>
  67 + <shared_objects_file/>
  68 + <capture_step_performance>N</capture_step_performance>
  69 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  70 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  71 + <dependencies>
  72 + </dependencies>
  73 + <partitionschemas>
  74 + </partitionschemas>
  75 + <slaveservers>
  76 + </slaveservers>
  77 + <clusterschemas>
  78 + </clusterschemas>
  79 + <created_user>-</created_user>
  80 + <created_date>2017&#x2f;01&#x2f;09 10&#x3a;10&#x3a;36.915</created_date>
  81 + <modified_user>-</modified_user>
  82 + <modified_date>2017&#x2f;01&#x2f;09 10&#x3a;10&#x3a;36.915</modified_date>
  83 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  84 + <is_key_private>N</is_key_private>
  85 + </info>
  86 + <notepads>
  87 + </notepads>
  88 + <connection>
  89 + <name>192.168.168.1_jwgl_dw</name>
  90 + <server>192.168.168.1</server>
  91 + <type>ORACLE</type>
  92 + <access>Native</access>
  93 + <database>orcl</database>
  94 + <port>1521</port>
  95 + <username>jwgl_dw</username>
  96 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  97 + <servername/>
  98 + <data_tablespace/>
  99 + <index_tablespace/>
  100 + <attributes>
  101 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  102 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  103 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  104 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  105 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  106 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  107 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  108 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  109 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  110 + </attributes>
  111 + </connection>
  112 + <connection>
  113 + <name>bus_control_variable</name>
  114 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  115 + <type>MYSQL</type>
  116 + <access>Native</access>
  117 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  118 + <port>3306</port>
  119 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  120 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  121 + <servername/>
  122 + <data_tablespace/>
  123 + <index_tablespace/>
  124 + <attributes>
  125 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  126 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  127 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  128 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  129 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  130 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  131 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  132 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  133 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  134 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  135 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  136 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  137 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  138 + </attributes>
  139 + </connection>
  140 + <connection>
  141 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  142 + <server>localhost</server>
  143 + <type>MYSQL</type>
  144 + <access>Native</access>
  145 + <database>control</database>
  146 + <port>3306</port>
  147 + <username>root</username>
  148 + <password>Encrypted </password>
  149 + <servername/>
  150 + <data_tablespace/>
  151 + <index_tablespace/>
  152 + <attributes>
  153 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  154 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  155 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  156 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  157 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  158 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  159 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  160 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  161 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  162 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  163 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  164 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  165 + </attributes>
  166 + </connection>
  167 + <connection>
  168 + <name>bus_control_&#x672c;&#x673a;</name>
  169 + <server>localhost</server>
  170 + <type>MYSQL</type>
  171 + <access>Native</access>
  172 + <database>control</database>
  173 + <port>3306</port>
  174 + <username>root</username>
  175 + <password>Encrypted </password>
  176 + <servername/>
  177 + <data_tablespace/>
  178 + <index_tablespace/>
  179 + <attributes>
  180 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  181 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  182 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  183 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  184 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  185 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  186 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  187 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  188 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  189 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  190 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  191 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  192 + </attributes>
  193 + </connection>
  194 + <connection>
  195 + <name>xlab_mysql_youle</name>
  196 + <server>101.231.124.8</server>
  197 + <type>MYSQL</type>
  198 + <access>Native</access>
  199 + <database>xlab_youle</database>
  200 + <port>45687</port>
  201 + <username>xlab-youle</username>
  202 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  203 + <servername/>
  204 + <data_tablespace/>
  205 + <index_tablespace/>
  206 + <attributes>
  207 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  208 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  209 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  210 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  211 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  212 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  213 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  214 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  215 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  216 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  217 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  218 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  219 + </attributes>
  220 + </connection>
  221 + <connection>
  222 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  223 + <server>localhost</server>
  224 + <type>MYSQL</type>
  225 + <access>Native</access>
  226 + <database>xlab_youle</database>
  227 + <port>3306</port>
  228 + <username>root</username>
  229 + <password>Encrypted </password>
  230 + <servername/>
  231 + <data_tablespace/>
  232 + <index_tablespace/>
  233 + <attributes>
  234 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  235 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  236 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  237 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  238 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  239 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  240 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  241 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  242 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  243 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  244 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  245 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  246 + </attributes>
  247 + </connection>
  248 + <connection>
  249 + <name>xlab_youle</name>
  250 + <server/>
  251 + <type>MYSQL</type>
  252 + <access>JNDI</access>
  253 + <database>xlab_youle</database>
  254 + <port>1521</port>
  255 + <username/>
  256 + <password>Encrypted </password>
  257 + <servername/>
  258 + <data_tablespace/>
  259 + <index_tablespace/>
  260 + <attributes>
  261 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  262 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  263 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  264 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  265 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  266 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  267 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  268 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  269 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  270 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  271 + </attributes>
  272 + </connection>
  273 + <order>
  274 + <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>
  275 + <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</to><enabled>Y</enabled> </hop>
  276 + <hop> <from>&#x62c6;&#x5206;&#x8def;&#x724c;&#x8303;&#x56f4;</from><to>&#x8def;&#x724c;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  277 + <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x8def;&#x724c;id</to><enabled>Y</enabled> </hop>
  278 + <hop> <from>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x8def;&#x724c;id</from><to>&#x62c6;&#x5206;&#x4eba;&#x5458;&#x8303;&#x56f4;</to><enabled>Y</enabled> </hop>
  279 + <hop> <from>&#x62c6;&#x5206;&#x4eba;&#x5458;&#x8303;&#x56f4;</from><to>&#x62c6;&#x5206;&#x5206;&#x73ed;&#x642d;&#x73ed;&#x7f16;&#x7801;&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  280 + <hop> <from>&#x62c6;&#x5206;&#x5206;&#x73ed;&#x642d;&#x73ed;&#x7f16;&#x7801;&#x5b57;&#x6bb5;</from><to>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  281 + <hop> <from>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</from><to>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2; 2</to><enabled>Y</enabled> </hop>
  282 + <hop> <from>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</from><to>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  283 + <hop> <from>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</from><to>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  284 + <hop> <from>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  285 + <hop> <from>&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</from><to>&#x8fc7;&#x6ee4;&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  286 + <hop> <from>&#x8fc7;&#x6ee4;&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x62c6;&#x5206;&#x8def;&#x724c;&#x8303;&#x56f4;</to><enabled>Y</enabled> </hop>
  287 + <hop> <from>&#x8def;&#x724c;id&#x67e5;&#x8be2;</from><to>&#x8fc7;&#x6ee4;&#x8def;&#x724c;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  288 + <hop> <from>&#x8fc7;&#x6ee4;&#x8def;&#x724c;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  289 + <hop> <from>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2; 2</from><to>&#x8fc7;&#x6ee4;&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  290 + <hop> <from>&#x8fc7;&#x6ee4;&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x5408;&#x5e76;&#x5206;&#x73ed;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</to><enabled>Y</enabled> </hop>
  291 + <hop> <from>&#x5408;&#x5e76;&#x5206;&#x73ed;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55; 2</to><enabled>Y</enabled> </hop>
  292 + <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55; 2</from><to>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</to><enabled>Y</enabled> </hop>
  293 + <hop> <from>&#x63d2;&#x5165; &#x2f; &#x66f4;&#x65b0;bsth_c_s_sr1_flat</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa; 2</to><enabled>Y</enabled> </hop>
  294 + <hop> <from>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</from><to>&#x542f;&#x7528;&#x65e5;&#x671f;&#x8f6c;&#x6362;</to><enabled>Y</enabled> </hop>
  295 + <hop> <from>&#x542f;&#x7528;&#x65e5;&#x671f;&#x8f6c;&#x6362;</from><to>&#x63d2;&#x5165; &#x2f; &#x66f4;&#x65b0;bsth_c_s_sr1_flat</to><enabled>Y</enabled> </hop>
  296 + </order>
  297 + <step>
  298 + <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</name>
  299 + <type>DBLookup</type>
  300 + <description/>
  301 + <distribute>Y</distribute>
  302 + <custom_distribution/>
  303 + <copies>1</copies>
  304 + <partitioning>
  305 + <method>none</method>
  306 + <schema_name/>
  307 + </partitioning>
  308 + <connection>bus_control_variable</connection>
  309 + <cache>N</cache>
  310 + <cache_load_all>Y</cache_load_all>
  311 + <cache_size>0</cache_size>
  312 + <lookup>
  313 + <schema/>
  314 + <table>bsth_c_s_ecinfo</table>
  315 + <orderby/>
  316 + <fail_on_multiple>N</fail_on_multiple>
  317 + <eat_row_on_failure>N</eat_row_on_failure>
  318 + <key>
  319 + <name>xlid</name>
  320 + <field>xl</field>
  321 + <condition>&#x3d;</condition>
  322 + <name2/>
  323 + </key>
  324 + <key>
  325 + <name>dbbm1</name>
  326 + <field>dbbm</field>
  327 + <condition>&#x3d;</condition>
  328 + <name2/>
  329 + </key>
  330 + <key>
  331 + <name>isCancel</name>
  332 + <field>is_cancel</field>
  333 + <condition>&#x3d;</condition>
  334 + <name2/>
  335 + </key>
  336 + <value>
  337 + <name>id</name>
  338 + <rename>rycid1</rename>
  339 + <default/>
  340 + <type>Integer</type>
  341 + </value>
  342 + </lookup>
  343 + <cluster_schema/>
  344 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  345 + <xloc>904</xloc>
  346 + <yloc>101</yloc>
  347 + <draw>Y</draw>
  348 + </GUI>
  349 + </step>
  350 +
  351 + <step>
  352 + <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x67e5;&#x8be2; 2</name>
  353 + <type>DBLookup</type>
  354 + <description/>
  355 + <distribute>Y</distribute>
  356 + <custom_distribution/>
  357 + <copies>1</copies>
  358 + <partitioning>
  359 + <method>none</method>
  360 + <schema_name/>
  361 + </partitioning>
  362 + <connection>bus_control_variable</connection>
  363 + <cache>N</cache>
  364 + <cache_load_all>Y</cache_load_all>
  365 + <cache_size>0</cache_size>
  366 + <lookup>
  367 + <schema/>
  368 + <table>bsth_c_s_ecinfo</table>
  369 + <orderby/>
  370 + <fail_on_multiple>N</fail_on_multiple>
  371 + <eat_row_on_failure>N</eat_row_on_failure>
  372 + <key>
  373 + <name>xlid</name>
  374 + <field>xl</field>
  375 + <condition>&#x3d;</condition>
  376 + <name2/>
  377 + </key>
  378 + <key>
  379 + <name>dbbm2</name>
  380 + <field>dbbm</field>
  381 + <condition>&#x3d;</condition>
  382 + <name2/>
  383 + </key>
  384 + <key>
  385 + <name>isCancel</name>
  386 + <field>is_cancel</field>
  387 + <condition>&#x3d;</condition>
  388 + <name2/>
  389 + </key>
  390 + <value>
  391 + <name>id</name>
  392 + <rename>rycid2</rename>
  393 + <default/>
  394 + <type>Integer</type>
  395 + </value>
  396 + </lookup>
  397 + <cluster_schema/>
  398 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  399 + <xloc>778</xloc>
  400 + <yloc>103</yloc>
  401 + <draw>Y</draw>
  402 + </GUI>
  403 + </step>
  404 +
  405 + <step>
  406 + <name>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</name>
  407 + <type>GroupBy</type>
  408 + <description/>
  409 + <distribute>Y</distribute>
  410 + <custom_distribution/>
  411 + <copies>1</copies>
  412 + <partitioning>
  413 + <method>none</method>
  414 + <schema_name/>
  415 + </partitioning>
  416 + <all_rows>N</all_rows>
  417 + <ignore_aggregate>N</ignore_aggregate>
  418 + <field_ignore/>
  419 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  420 + <prefix>grp</prefix>
  421 + <add_linenr>N</add_linenr>
  422 + <linenr_fieldname/>
  423 + <give_back_row>N</give_back_row>
  424 + <group>
  425 + <field>
  426 + <name>xlid</name>
  427 + </field>
  428 + <field>
  429 + <name>cid</name>
  430 + </field>
  431 + <field>
  432 + <name>lpnames</name>
  433 + </field>
  434 + <field>
  435 + <name>lpids</name>
  436 + </field>
  437 + <field>
  438 + <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>
  439 + </field>
  440 + <field>
  441 + <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>
  442 + </field>
  443 + <field>
  444 + <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>
  445 + </field>
  446 + <field>
  447 + <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  448 + </field>
  449 + <field>
  450 + <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>
  451 + </field>
  452 + <field>
  453 + <name>isCancel</name>
  454 + </field>
  455 + </group>
  456 + <fields>
  457 + <field>
  458 + <aggregate>rycids</aggregate>
  459 + <subject>rycid</subject>
  460 + <type>CONCAT_STRING</type>
  461 + <valuefield>,</valuefield>
  462 + </field>
  463 + <field>
  464 + <aggregate>rybms</aggregate>
  465 + <subject>rybm</subject>
  466 + <type>CONCAT_STRING</type>
  467 + <valuefield>,</valuefield>
  468 + </field>
  469 + </fields>
  470 + <cluster_schema/>
  471 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  472 + <xloc>780</xloc>
  473 + <yloc>291</yloc>
  474 + <draw>Y</draw>
  475 + </GUI>
  476 + </step>
  477 +
  478 + <step>
  479 + <name>&#x5206;&#x7ec4;&#x5408;&#x5e76;&#x8def;&#x724c;id</name>
  480 + <type>GroupBy</type>
  481 + <description/>
  482 + <distribute>Y</distribute>
  483 + <custom_distribution/>
  484 + <copies>1</copies>
  485 + <partitioning>
  486 + <method>none</method>
  487 + <schema_name/>
  488 + </partitioning>
  489 + <all_rows>N</all_rows>
  490 + <ignore_aggregate>N</ignore_aggregate>
  491 + <field_ignore/>
  492 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  493 + <prefix>grp</prefix>
  494 + <add_linenr>N</add_linenr>
  495 + <linenr_fieldname/>
  496 + <give_back_row>N</give_back_row>
  497 + <group>
  498 + <field>
  499 + <name>xlid</name>
  500 + </field>
  501 + <field>
  502 + <name>cid</name>
  503 + </field>
  504 + <field>
  505 + <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>
  506 + </field>
  507 + <field>
  508 + <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>
  509 + </field>
  510 + <field>
  511 + <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>
  512 + </field>
  513 + <field>
  514 + <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  515 + </field>
  516 + <field>
  517 + <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>
  518 + </field>
  519 + <field>
  520 + <name>isCancel</name>
  521 + </field>
  522 + </group>
  523 + <fields>
  524 + <field>
  525 + <aggregate>lpids</aggregate>
  526 + <subject>lpid</subject>
  527 + <type>CONCAT_STRING</type>
  528 + <valuefield>,</valuefield>
  529 + </field>
  530 + <field>
  531 + <aggregate>lpnames</aggregate>
  532 + <subject>lpname</subject>
  533 + <type>CONCAT_STRING</type>
  534 + <valuefield>,</valuefield>
  535 + </field>
  536 + </fields>
  537 + <cluster_schema/>
  538 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  539 + <xloc>653</xloc>
  540 + <yloc>119</yloc>
  541 + <draw>Y</draw>
  542 + </GUI>
  543 + </step>
  544 +
  545 + <step>
  546 + <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name>
  547 + <type>ExcelInput</type>
  548 + <description/>
  549 + <distribute>Y</distribute>
  550 + <custom_distribution/>
  551 + <copies>1</copies>
  552 + <partitioning>
  553 + <method>none</method>
  554 + <schema_name/>
  555 + </partitioning>
  556 + <header>Y</header>
  557 + <noempty>Y</noempty>
  558 + <stoponempty>N</stoponempty>
  559 + <filefield/>
  560 + <sheetfield/>
  561 + <sheetrownumfield/>
  562 + <rownumfield/>
  563 + <sheetfield/>
  564 + <filefield/>
  565 + <limit>0</limit>
  566 + <encoding/>
  567 + <add_to_result_filenames>Y</add_to_result_filenames>
  568 + <accept_filenames>Y</accept_filenames>
  569 + <accept_field>filepath_</accept_field>
  570 + <accept_stepname>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</accept_stepname>
  571 + <file>
  572 + <name/>
  573 + <filemask/>
  574 + <exclude_filemask/>
  575 + <file_required>N</file_required>
  576 + <include_subfolders>N</include_subfolders>
  577 + </file>
  578 + <fields>
  579 + <field>
  580 + <name>&#x7ebf;&#x8def;</name>
  581 + <type>String</type>
  582 + <length>-1</length>
  583 + <precision>-1</precision>
  584 + <trim_type>none</trim_type>
  585 + <repeat>N</repeat>
  586 + <format/>
  587 + <currency/>
  588 + <decimal/>
  589 + <group/>
  590 + </field>
  591 + <field>
  592 + <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
  593 + <type>String</type>
  594 + <length>-1</length>
  595 + <precision>-1</precision>
  596 + <trim_type>none</trim_type>
  597 + <repeat>N</repeat>
  598 + <format/>
  599 + <currency/>
  600 + <decimal/>
  601 + <group/>
  602 + </field>
  603 + <field>
  604 + <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  605 + <type>String</type>
  606 + <length>-1</length>
  607 + <precision>-1</precision>
  608 + <trim_type>none</trim_type>
  609 + <repeat>N</repeat>
  610 + <format/>
  611 + <currency/>
  612 + <decimal/>
  613 + <group/>
  614 + </field>
  615 + <field>
  616 + <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>
  617 + <type>String</type>
  618 + <length>-1</length>
  619 + <precision>-1</precision>
  620 + <trim_type>none</trim_type>
  621 + <repeat>N</repeat>
  622 + <format>&#x23;</format>
  623 + <currency/>
  624 + <decimal/>
  625 + <group/>
  626 + </field>
  627 + <field>
  628 + <name>&#x8def;&#x724c;&#x8303;&#x56f4;</name>
  629 + <type>String</type>
  630 + <length>-1</length>
  631 + <precision>-1</precision>
  632 + <trim_type>none</trim_type>
  633 + <repeat>N</repeat>
  634 + <format>&#x23;</format>
  635 + <currency/>
  636 + <decimal/>
  637 + <group/>
  638 + </field>
  639 + <field>
  640 + <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>
  641 + <type>String</type>
  642 + <length>-1</length>
  643 + <precision>-1</precision>
  644 + <trim_type>none</trim_type>
  645 + <repeat>N</repeat>
  646 + <format>&#x23;</format>
  647 + <currency/>
  648 + <decimal/>
  649 + <group/>
  650 + </field>
  651 + <field>
  652 + <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>
  653 + <type>String</type>
  654 + <length>-1</length>
  655 + <precision>-1</precision>
  656 + <trim_type>none</trim_type>
  657 + <repeat>N</repeat>
  658 + <format>&#x23;</format>
  659 + <currency/>
  660 + <decimal/>
  661 + <group/>
  662 + </field>
  663 + <field>
  664 + <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>
  665 + <type>String</type>
  666 + <length>-1</length>
  667 + <precision>-1</precision>
  668 + <trim_type>none</trim_type>
  669 + <repeat>N</repeat>
  670 + <format>&#x23;</format>
  671 + <currency/>
  672 + <decimal/>
  673 + <group/>
  674 + </field>
  675 + </fields>
  676 + <sheets>
  677 + <sheet>
  678 + <name>&#x5de5;&#x4f5c;&#x8868;1</name>
  679 + <startrow>0</startrow>
  680 + <startcol>0</startcol>
  681 + </sheet>
  682 + </sheets>
  683 + <strict_types>N</strict_types>
  684 + <error_ignored>N</error_ignored>
  685 + <error_line_skipped>N</error_line_skipped>
  686 + <bad_line_files_destination_directory/>
  687 + <bad_line_files_extension>warning</bad_line_files_extension>
  688 + <error_line_files_destination_directory/>
  689 + <error_line_files_extension>error</error_line_files_extension>
  690 + <line_number_files_destination_directory/>
  691 + <line_number_files_extension>line</line_number_files_extension>
  692 + <shortFileFieldName/>
  693 + <pathFieldName/>
  694 + <hiddenFieldName/>
  695 + <lastModificationTimeFieldName/>
  696 + <uriNameFieldName/>
  697 + <rootUriNameFieldName/>
  698 + <extensionFieldName/>
  699 + <sizeFieldName/>
  700 + <spreadsheet_type>JXL</spreadsheet_type>
  701 + <cluster_schema/>
  702 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  703 + <xloc>208</xloc>
  704 + <yloc>21</yloc>
  705 + <draw>Y</draw>
  706 + </GUI>
  707 + </step>
  708 +
  709 + <step>
  710 + <name>&#x5408;&#x5e76;&#x5206;&#x73ed;&#x4eba;&#x5458;&#x914d;&#x7f6e;id</name>
  711 + <type>ScriptValueMod</type>
  712 + <description/>
  713 + <distribute>Y</distribute>
  714 + <custom_distribution/>
  715 + <copies>1</copies>
  716 + <partitioning>
  717 + <method>none</method>
  718 + <schema_name/>
  719 + </partitioning>
  720 + <compatible>N</compatible>
  721 + <optimizationLevel>9</optimizationLevel>
  722 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  723 + <jsScript_name>Script 1</jsScript_name>
  724 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var rycid&#x3b;&#xa;var rybm&#x3b;&#xa;&#xa;if &#x28;rycid2 &#x3d;&#x3d; null&#x29; &#x7b;&#xa; rycid &#x3d; rycid1&#x3b;&#xa; rybm &#x3d; dbbm1&#x3b;&#xa;&#x7d; else &#x7b;&#xa; rycid &#x3d; rycid1 &#x2b; &#x22;-&#x22; &#x2b; rycid2&#x3b;&#xa; rybm &#x3d; dbbm1 &#x2b; &#x22;-&#x22; &#x2b; dbbm2&#x3b;&#xa;&#x7d;</jsScript_script>
  725 + </jsScript> </jsScripts> <fields> <field> <name>rycid</name>
  726 + <rename>rycid</rename>
  727 + <type>String</type>
  728 + <length>-1</length>
  729 + <precision>-1</precision>
  730 + <replace>N</replace>
  731 + </field> <field> <name>rybm</name>
  732 + <rename>rybm</rename>
  733 + <type>String</type>
  734 + <length>-1</length>
  735 + <precision>-1</precision>
  736 + <replace>N</replace>
  737 + </field> </fields> <cluster_schema/>
  738 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  739 + <xloc>917</xloc>
  740 + <yloc>201</yloc>
  741 + <draw>Y</draw>
  742 + </GUI>
  743 + </step>
  744 +
  745 + <step>
  746 + <name>&#x542f;&#x7528;&#x65e5;&#x671f;&#x8f6c;&#x6362;</name>
  747 + <type>SelectValues</type>
  748 + <description/>
  749 + <distribute>Y</distribute>
  750 + <custom_distribution/>
  751 + <copies>1</copies>
  752 + <partitioning>
  753 + <method>none</method>
  754 + <schema_name/>
  755 + </partitioning>
  756 + <fields> <select_unspecified>N</select_unspecified>
  757 + <meta> <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  758 + <rename>&#x542f;&#x7528;&#x65e5;&#x671f;</rename>
  759 + <type>Timestamp</type>
  760 + <length>-2</length>
  761 + <precision>-2</precision>
  762 + <conversion_mask>yyyy-MM-dd</conversion_mask>
  763 + <date_format_lenient>false</date_format_lenient>
  764 + <date_format_locale/>
  765 + <date_format_timezone/>
  766 + <lenient_string_to_number>false</lenient_string_to_number>
  767 + <encoding/>
  768 + <decimal_symbol/>
  769 + <grouping_symbol/>
  770 + <currency_symbol/>
  771 + <storage_type/>
  772 + </meta> </fields> <cluster_schema/>
  773 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  774 + <xloc>777</xloc>
  775 + <yloc>368</yloc>
  776 + <draw>Y</draw>
  777 + </GUI>
  778 + </step>
  779 +
  780 + <step>
  781 + <name>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</name>
  782 + <type>Constant</type>
  783 + <description/>
  784 + <distribute>Y</distribute>
  785 + <custom_distribution/>
  786 + <copies>1</copies>
  787 + <partitioning>
  788 + <method>none</method>
  789 + <schema_name/>
  790 + </partitioning>
  791 + <fields>
  792 + <field>
  793 + <name>isCancel</name>
  794 + <type>Integer</type>
  795 + <format/>
  796 + <currency/>
  797 + <decimal/>
  798 + <group/>
  799 + <nullif>0</nullif>
  800 + <length>-1</length>
  801 + <precision>-1</precision>
  802 + <set_empty_string>N</set_empty_string>
  803 + </field>
  804 + </fields>
  805 + <cluster_schema/>
  806 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  807 + <xloc>361</xloc>
  808 + <yloc>22</yloc>
  809 + <draw>Y</draw>
  810 + </GUI>
  811 + </step>
  812 +
  813 + <step>
  814 + <name>&#x62c6;&#x5206;&#x4eba;&#x5458;&#x8303;&#x56f4;</name>
  815 + <type>SplitFieldToRows3</type>
  816 + <description/>
  817 + <distribute>Y</distribute>
  818 + <custom_distribution/>
  819 + <copies>1</copies>
  820 + <partitioning>
  821 + <method>none</method>
  822 + <schema_name/>
  823 + </partitioning>
  824 + <splitfield>&#x4eba;&#x5458;&#x8303;&#x56f4;</splitfield>
  825 + <delimiter>,</delimiter>
  826 + <newfield>dbbm</newfield>
  827 + <rownum>N</rownum>
  828 + <rownum_field/>
  829 + <resetrownumber>Y</resetrownumber>
  830 + <delimiter_is_regex>N</delimiter_is_regex>
  831 + <cluster_schema/>
  832 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  833 + <xloc>777</xloc>
  834 + <yloc>22</yloc>
  835 + <draw>Y</draw>
  836 + </GUI>
  837 + </step>
  838 +
  839 + <step>
  840 + <name>&#x62c6;&#x5206;&#x5206;&#x73ed;&#x642d;&#x73ed;&#x7f16;&#x7801;&#x5b57;&#x6bb5;</name>
  841 + <type>FieldSplitter</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 + <splitfield>dbbm</splitfield>
  851 + <delimiter>-</delimiter>
  852 + <enclosure/>
  853 + <fields> <field> <name>dbbm1</name>
  854 + <id/>
  855 + <idrem>N</idrem>
  856 + <type>String</type>
  857 + <format/>
  858 + <group/>
  859 + <decimal/>
  860 + <currency/>
  861 + <length>-1</length>
  862 + <precision>-1</precision>
  863 + <nullif/>
  864 + <ifnull/>
  865 + <trimtype>none</trimtype>
  866 + </field> <field> <name>dbbm2</name>
  867 + <id/>
  868 + <idrem>N</idrem>
  869 + <type>String</type>
  870 + <format/>
  871 + <group/>
  872 + <decimal/>
  873 + <currency/>
  874 + <length>-1</length>
  875 + <precision>-1</precision>
  876 + <nullif/>
  877 + <ifnull/>
  878 + <trimtype>none</trimtype>
  879 + </field> </fields> <cluster_schema/>
  880 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  881 + <xloc>901</xloc>
  882 + <yloc>22</yloc>
  883 + <draw>Y</draw>
  884 + </GUI>
  885 + </step>
  886 +
  887 + <step>
  888 + <name>&#x62c6;&#x5206;&#x8def;&#x724c;&#x8303;&#x56f4;</name>
  889 + <type>SplitFieldToRows3</type>
  890 + <description/>
  891 + <distribute>Y</distribute>
  892 + <custom_distribution/>
  893 + <copies>1</copies>
  894 + <partitioning>
  895 + <method>none</method>
  896 + <schema_name/>
  897 + </partitioning>
  898 + <splitfield>&#x8def;&#x724c;&#x8303;&#x56f4;</splitfield>
  899 + <delimiter>,</delimiter>
  900 + <newfield>lpname</newfield>
  901 + <rownum>N</rownum>
  902 + <rownum_field/>
  903 + <resetrownumber>Y</resetrownumber>
  904 + <delimiter_is_regex>N</delimiter_is_regex>
  905 + <cluster_schema/>
  906 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  907 + <xloc>364</xloc>
  908 + <yloc>259</yloc>
  909 + <draw>Y</draw>
  910 + </GUI>
  911 + </step>
  912 +
  913 + <step>
  914 + <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>
  915 + <type>SortRows</type>
  916 + <description/>
  917 + <distribute>Y</distribute>
  918 + <custom_distribution/>
  919 + <copies>1</copies>
  920 + <partitioning>
  921 + <method>none</method>
  922 + <schema_name/>
  923 + </partitioning>
  924 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  925 + <prefix>out</prefix>
  926 + <sort_size>1000000</sort_size>
  927 + <free_memory/>
  928 + <compress>N</compress>
  929 + <compress_variable/>
  930 + <unique_rows>N</unique_rows>
  931 + <fields>
  932 + <field>
  933 + <name>xlid</name>
  934 + <ascending>Y</ascending>
  935 + <case_sensitive>N</case_sensitive>
  936 + <presorted>N</presorted>
  937 + </field>
  938 + <field>
  939 + <name>cid</name>
  940 + <ascending>Y</ascending>
  941 + <case_sensitive>N</case_sensitive>
  942 + <presorted>N</presorted>
  943 + </field>
  944 + <field>
  945 + <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>
  946 + <ascending>Y</ascending>
  947 + <case_sensitive>N</case_sensitive>
  948 + <presorted>N</presorted>
  949 + </field>
  950 + <field>
  951 + <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>
  952 + <ascending>Y</ascending>
  953 + <case_sensitive>N</case_sensitive>
  954 + <presorted>N</presorted>
  955 + </field>
  956 + <field>
  957 + <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>
  958 + <ascending>Y</ascending>
  959 + <case_sensitive>N</case_sensitive>
  960 + <presorted>N</presorted>
  961 + </field>
  962 + <field>
  963 + <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  964 + <ascending>Y</ascending>
  965 + <case_sensitive>N</case_sensitive>
  966 + <presorted>N</presorted>
  967 + </field>
  968 + <field>
  969 + <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>
  970 + <ascending>Y</ascending>
  971 + <case_sensitive>N</case_sensitive>
  972 + <presorted>N</presorted>
  973 + </field>
  974 + <field>
  975 + <name>isCancel</name>
  976 + <ascending>Y</ascending>
  977 + <case_sensitive>N</case_sensitive>
  978 + <presorted>N</presorted>
  979 + </field>
  980 + </fields>
  981 + <cluster_schema/>
  982 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  983 + <xloc>516</xloc>
  984 + <yloc>119</yloc>
  985 + <draw>Y</draw>
  986 + </GUI>
  987 + </step>
  988 +
  989 + <step>
  990 + <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55; 2</name>
  991 + <type>SortRows</type>
  992 + <description/>
  993 + <distribute>Y</distribute>
  994 + <custom_distribution/>
  995 + <copies>1</copies>
  996 + <partitioning>
  997 + <method>none</method>
  998 + <schema_name/>
  999 + </partitioning>
  1000 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  1001 + <prefix>out</prefix>
  1002 + <sort_size>1000000</sort_size>
  1003 + <free_memory/>
  1004 + <compress>N</compress>
  1005 + <compress_variable/>
  1006 + <unique_rows>N</unique_rows>
  1007 + <fields>
  1008 + <field>
  1009 + <name>xlid</name>
  1010 + <ascending>Y</ascending>
  1011 + <case_sensitive>N</case_sensitive>
  1012 + <presorted>N</presorted>
  1013 + </field>
  1014 + <field>
  1015 + <name>cid</name>
  1016 + <ascending>Y</ascending>
  1017 + <case_sensitive>N</case_sensitive>
  1018 + <presorted>N</presorted>
  1019 + </field>
  1020 + <field>
  1021 + <name>lpnames</name>
  1022 + <ascending>Y</ascending>
  1023 + <case_sensitive>N</case_sensitive>
  1024 + <presorted>N</presorted>
  1025 + </field>
  1026 + <field>
  1027 + <name>lpids</name>
  1028 + <ascending>Y</ascending>
  1029 + <case_sensitive>N</case_sensitive>
  1030 + <presorted>N</presorted>
  1031 + </field>
  1032 + <field>
  1033 + <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>
  1034 + <ascending>Y</ascending>
  1035 + <case_sensitive>N</case_sensitive>
  1036 + <presorted>N</presorted>
  1037 + </field>
  1038 + <field>
  1039 + <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>
  1040 + <ascending>Y</ascending>
  1041 + <case_sensitive>N</case_sensitive>
  1042 + <presorted>N</presorted>
  1043 + </field>
  1044 + <field>
  1045 + <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>
  1046 + <ascending>Y</ascending>
  1047 + <case_sensitive>N</case_sensitive>
  1048 + <presorted>N</presorted>
  1049 + </field>
  1050 + <field>
  1051 + <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  1052 + <ascending>Y</ascending>
  1053 + <case_sensitive>N</case_sensitive>
  1054 + <presorted>N</presorted>
  1055 + </field>
  1056 + <field>
  1057 + <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>
  1058 + <ascending>Y</ascending>
  1059 + <case_sensitive>N</case_sensitive>
  1060 + <presorted>N</presorted>
  1061 + </field>
  1062 + <field>
  1063 + <name>isCancel</name>
  1064 + <ascending>Y</ascending>
  1065 + <case_sensitive>N</case_sensitive>
  1066 + <presorted>N</presorted>
  1067 + </field>
  1068 + </fields>
  1069 + <cluster_schema/>
  1070 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1071 + <xloc>919</xloc>
  1072 + <yloc>289</yloc>
  1073 + <draw>Y</draw>
  1074 + </GUI>
  1075 + </step>
  1076 +
  1077 + <step>
  1078 + <name>&#x63d2;&#x5165; &#x2f; &#x66f4;&#x65b0;bsth_c_s_sr1_flat</name>
  1079 + <type>InsertUpdate</type>
  1080 + <description/>
  1081 + <distribute>Y</distribute>
  1082 + <custom_distribution/>
  1083 + <copies>1</copies>
  1084 + <partitioning>
  1085 + <method>none</method>
  1086 + <schema_name/>
  1087 + </partitioning>
  1088 + <connection>bus_control_variable</connection>
  1089 + <commit>100</commit>
  1090 + <update_bypassed>N</update_bypassed>
  1091 + <lookup>
  1092 + <schema/>
  1093 + <table>bsth_c_s_sr1_flat</table>
  1094 + <key>
  1095 + <name>xlid</name>
  1096 + <field>xl</field>
  1097 + <condition>&#x3d;</condition>
  1098 + <name2/>
  1099 + </key>
  1100 + <key>
  1101 + <name>cid</name>
  1102 + <field>car_config_info</field>
  1103 + <condition>&#x3d;</condition>
  1104 + <name2/>
  1105 + </key>
  1106 + <value>
  1107 + <name>xl</name>
  1108 + <rename>xlid</rename>
  1109 + <update>Y</update>
  1110 + </value>
  1111 + <value>
  1112 + <name>car_config_info</name>
  1113 + <rename>cid</rename>
  1114 + <update>Y</update>
  1115 + </value>
  1116 + <value>
  1117 + <name>lp_names</name>
  1118 + <rename>lpnames</rename>
  1119 + <update>Y</update>
  1120 + </value>
  1121 + <value>
  1122 + <name>lp_ids</name>
  1123 + <rename>lpids</rename>
  1124 + <update>Y</update>
  1125 + </value>
  1126 + <value>
  1127 + <name>lp_start</name>
  1128 + <rename>&#x8d77;&#x59cb;&#x8def;&#x724c;</rename>
  1129 + <update>Y</update>
  1130 + </value>
  1131 + <value>
  1132 + <name>ry_start</name>
  1133 + <rename>&#x8d77;&#x59cb;&#x4eba;&#x5458;</rename>
  1134 + <update>Y</update>
  1135 + </value>
  1136 + <value>
  1137 + <name>ry_dbbms</name>
  1138 + <rename>rybms</rename>
  1139 + <update>Y</update>
  1140 + </value>
  1141 + <value>
  1142 + <name>qyrq</name>
  1143 + <rename>&#x542f;&#x7528;&#x65e5;&#x671f;</rename>
  1144 + <update>Y</update>
  1145 + </value>
  1146 + <value>
  1147 + <name>ry_config_ids</name>
  1148 + <rename>rycids</rename>
  1149 + <update>Y</update>
  1150 + </value>
  1151 + <value>
  1152 + <name>fbgs</name>
  1153 + <rename>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</rename>
  1154 + <update>Y</update>
  1155 + </value>
  1156 + </lookup>
  1157 + <cluster_schema/>
  1158 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1159 + <xloc>532</xloc>
  1160 + <yloc>297</yloc>
  1161 + <draw>Y</draw>
  1162 + </GUI>
  1163 + </step>
  1164 +
  1165 + <step>
  1166 + <name>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</name>
  1167 + <type>DBLookup</type>
  1168 + <description/>
  1169 + <distribute>Y</distribute>
  1170 + <custom_distribution/>
  1171 + <copies>1</copies>
  1172 + <partitioning>
  1173 + <method>none</method>
  1174 + <schema_name/>
  1175 + </partitioning>
  1176 + <connection>bus_control_variable</connection>
  1177 + <cache>N</cache>
  1178 + <cache_load_all>Y</cache_load_all>
  1179 + <cache_size>0</cache_size>
  1180 + <lookup>
  1181 + <schema/>
  1182 + <table>bsth_c_line</table>
  1183 + <orderby/>
  1184 + <fail_on_multiple>N</fail_on_multiple>
  1185 + <eat_row_on_failure>N</eat_row_on_failure>
  1186 + <key>
  1187 + <name>&#x7ebf;&#x8def;</name>
  1188 + <field>name</field>
  1189 + <condition>&#x3d;</condition>
  1190 + <name2/>
  1191 + </key>
  1192 + <key>
  1193 + <name>isCancel</name>
  1194 + <field>destroy</field>
  1195 + <condition>&#x3d;</condition>
  1196 + <name2/>
  1197 + </key>
  1198 + <value>
  1199 + <name>id</name>
  1200 + <rename>xlid</rename>
  1201 + <default/>
  1202 + <type>Integer</type>
  1203 + </value>
  1204 + </lookup>
  1205 + <cluster_schema/>
  1206 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1207 + <xloc>359</xloc>
  1208 + <yloc>110</yloc>
  1209 + <draw>Y</draw>
  1210 + </GUI>
  1211 + </step>
  1212 +
  1213 + <step>
  1214 + <name>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</name>
  1215 + <type>GetVariable</type>
  1216 + <description/>
  1217 + <distribute>Y</distribute>
  1218 + <custom_distribution/>
  1219 + <copies>1</copies>
  1220 + <partitioning>
  1221 + <method>none</method>
  1222 + <schema_name/>
  1223 + </partitioning>
  1224 + <fields>
  1225 + <field>
  1226 + <name>filepath_</name>
  1227 + <variable>&#x24;&#x7b;filepath&#x7d;</variable>
  1228 + <type>String</type>
  1229 + <format/>
  1230 + <currency/>
  1231 + <decimal/>
  1232 + <group/>
  1233 + <length>-1</length>
  1234 + <precision>-1</precision>
  1235 + <trim_type>none</trim_type>
  1236 + </field>
  1237 + <field>
  1238 + <name>erroroutputdir_</name>
  1239 + <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>
  1240 + <type>String</type>
  1241 + <format/>
  1242 + <currency/>
  1243 + <decimal/>
  1244 + <group/>
  1245 + <length>-1</length>
  1246 + <precision>-1</precision>
  1247 + <trim_type>none</trim_type>
  1248 + </field>
  1249 + </fields>
  1250 + <cluster_schema/>
  1251 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1252 + <xloc>53</xloc>
  1253 + <yloc>23</yloc>
  1254 + <draw>Y</draw>
  1255 + </GUI>
  1256 + </step>
  1257 +
  1258 + <step>
  1259 + <name>&#x8def;&#x724c;id&#x67e5;&#x8be2;</name>
  1260 + <type>DBLookup</type>
  1261 + <description/>
  1262 + <distribute>Y</distribute>
  1263 + <custom_distribution/>
  1264 + <copies>1</copies>
  1265 + <partitioning>
  1266 + <method>none</method>
  1267 + <schema_name/>
  1268 + </partitioning>
  1269 + <connection>bus_control_variable</connection>
  1270 + <cache>N</cache>
  1271 + <cache_load_all>Y</cache_load_all>
  1272 + <cache_size>0</cache_size>
  1273 + <lookup>
  1274 + <schema/>
  1275 + <table>bsth_c_s_gbi</table>
  1276 + <orderby/>
  1277 + <fail_on_multiple>N</fail_on_multiple>
  1278 + <eat_row_on_failure>N</eat_row_on_failure>
  1279 + <key>
  1280 + <name>xlid</name>
  1281 + <field>xl</field>
  1282 + <condition>&#x3d;</condition>
  1283 + <name2/>
  1284 + </key>
  1285 + <key>
  1286 + <name>lpname</name>
  1287 + <field>lp_name</field>
  1288 + <condition>&#x3d;</condition>
  1289 + <name2/>
  1290 + </key>
  1291 + <key>
  1292 + <name>isCancel</name>
  1293 + <field>is_cancel</field>
  1294 + <condition>&#x3d;</condition>
  1295 + <name2/>
  1296 + </key>
  1297 + <value>
  1298 + <name>id</name>
  1299 + <rename>lpid</rename>
  1300 + <default/>
  1301 + <type>Integer</type>
  1302 + </value>
  1303 + </lookup>
  1304 + <cluster_schema/>
  1305 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1306 + <xloc>516</xloc>
  1307 + <yloc>21</yloc>
  1308 + <draw>Y</draw>
  1309 + </GUI>
  1310 + </step>
  1311 +
  1312 + <step>
  1313 + <name>&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</name>
  1314 + <type>DBJoin</type>
  1315 + <description/>
  1316 + <distribute>Y</distribute>
  1317 + <custom_distribution/>
  1318 + <copies>1</copies>
  1319 + <partitioning>
  1320 + <method>none</method>
  1321 + <schema_name/>
  1322 + </partitioning>
  1323 + <connection>bus_control_variable</connection>
  1324 + <rowlimit>1</rowlimit>
  1325 + <sql>select t1.id as cid from bsth_c_s_ccinfo t1 left join bsth_c_cars t2 on t1.cl &#x3d; t2.id&#xa;where t1.xl &#x3d; &#x3f; and t2.inside_code &#x3d; &#x3f; and t1.is_cancel &#x3d; &#x3f;</sql>
  1326 + <outer_join>Y</outer_join>
  1327 + <replace_vars>N</replace_vars>
  1328 + <parameter>
  1329 + <field>
  1330 + <name>xlid</name>
  1331 + <type>Integer</type>
  1332 + </field>
  1333 + <field>
  1334 + <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
  1335 + <type>String</type>
  1336 + </field>
  1337 + <field>
  1338 + <name>isCancel</name>
  1339 + <type>Integer</type>
  1340 + </field>
  1341 + </parameter>
  1342 + <cluster_schema/>
  1343 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1344 + <xloc>360</xloc>
  1345 + <yloc>184</yloc>
  1346 + <draw>Y</draw>
  1347 + </GUI>
  1348 + </step>
  1349 +
  1350 + <step>
  1351 + <name>&#x8fc7;&#x6ee4;&#x4eba;&#x5458;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>
  1352 + <type>FilterRows</type>
  1353 + <description/>
  1354 + <distribute>Y</distribute>
  1355 + <custom_distribution/>
  1356 + <copies>1</copies>
  1357 + <partitioning>
  1358 + <method>none</method>
  1359 + <schema_name/>
  1360 + </partitioning>
  1361 +<send_true_to/>
  1362 +<send_false_to/>
  1363 + <compare>
  1364 +<condition>
  1365 + <negated>N</negated>
  1366 + <conditions>
  1367 + <condition>
  1368 + <negated>N</negated>
  1369 + <leftvalue>rycid1</leftvalue>
  1370 + <function>IS NOT NULL</function>
  1371 + <rightvalue/>
  1372 + </condition>
  1373 + <condition>
  1374 + <negated>N</negated>
  1375 + <operator>OR</operator>
  1376 + <leftvalue>rycid2</leftvalue>
  1377 + <function>IS NOT NULL</function>
  1378 + <rightvalue/>
  1379 + </condition>
  1380 + </conditions>
  1381 + </condition>
  1382 + </compare>
  1383 + <cluster_schema/>
  1384 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1385 + <xloc>776</xloc>
  1386 + <yloc>204</yloc>
  1387 + <draw>Y</draw>
  1388 + </GUI>
  1389 + </step>
  1390 +
  1391 + <step>
  1392 + <name>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>
  1393 + <type>FilterRows</type>
  1394 + <description/>
  1395 + <distribute>Y</distribute>
  1396 + <custom_distribution/>
  1397 + <copies>1</copies>
  1398 + <partitioning>
  1399 + <method>none</method>
  1400 + <schema_name/>
  1401 + </partitioning>
  1402 +<send_true_to>&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x67e5;&#x8be2;</send_true_to>
  1403 +<send_false_to/>
  1404 + <compare>
  1405 +<condition>
  1406 + <negated>N</negated>
  1407 + <leftvalue>xlid</leftvalue>
  1408 + <function>IS NOT NULL</function>
  1409 + <rightvalue/>
  1410 + </condition>
  1411 + </compare>
  1412 + <cluster_schema/>
  1413 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1414 + <xloc>203</xloc>
  1415 + <yloc>110</yloc>
  1416 + <draw>Y</draw>
  1417 + </GUI>
  1418 + </step>
  1419 +
  1420 + <step>
  1421 + <name>&#x8fc7;&#x6ee4;&#x8def;&#x724c;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>
  1422 + <type>FilterRows</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 +<send_true_to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</send_true_to>
  1432 +<send_false_to/>
  1433 + <compare>
  1434 +<condition>
  1435 + <negated>N</negated>
  1436 + <leftvalue>lpid</leftvalue>
  1437 + <function>IS NOT NULL</function>
  1438 + <rightvalue/>
  1439 + </condition>
  1440 + </compare>
  1441 + <cluster_schema/>
  1442 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1443 + <xloc>653</xloc>
  1444 + <yloc>23</yloc>
  1445 + <draw>Y</draw>
  1446 + </GUI>
  1447 + </step>
  1448 +
  1449 + <step>
  1450 + <name>&#x8fc7;&#x6ee4;&#x8f66;&#x8f86;&#x914d;&#x7f6e;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>
  1451 + <type>FilterRows</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 +<send_true_to>&#x62c6;&#x5206;&#x8def;&#x724c;&#x8303;&#x56f4;</send_true_to>
  1461 +<send_false_to/>
  1462 + <compare>
  1463 +<condition>
  1464 + <negated>N</negated>
  1465 + <leftvalue>cid</leftvalue>
  1466 + <function>IS NOT NULL</function>
  1467 + <rightvalue/>
  1468 + </condition>
  1469 + </compare>
  1470 + <cluster_schema/>
  1471 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1472 + <xloc>208</xloc>
  1473 + <yloc>182</yloc>
  1474 + <draw>Y</draw>
  1475 + </GUI>
  1476 + </step>
  1477 +
  1478 + <step>
  1479 + <name>&#x9519;&#x8bef;&#x8f93;&#x51fa; 2</name>
  1480 + <type>ExcelOutput</type>
  1481 + <description/>
  1482 + <distribute>Y</distribute>
  1483 + <custom_distribution/>
  1484 + <copies>1</copies>
  1485 + <partitioning>
  1486 + <method>none</method>
  1487 + <schema_name/>
  1488 + </partitioning>
  1489 + <header>Y</header>
  1490 + <footer>N</footer>
  1491 + <encoding>UTF-8</encoding>
  1492 + <append>N</append>
  1493 + <add_to_result_filenames>Y</add_to_result_filenames>
  1494 + <file>
  1495 + <name>&#x24;&#x7b;erroroutputdir&#x7d;&#x2f;&#x6392;&#x7248;&#x89c4;&#x5219;&#x4fe1;&#x606f;&#x5bfc;&#x5165;_&#x9519;&#x8bef;</name>
  1496 + <extention>xls</extention>
  1497 + <do_not_open_newfile_init>N</do_not_open_newfile_init>
  1498 + <create_parent_folder>N</create_parent_folder>
  1499 + <split>N</split>
  1500 + <add_date>N</add_date>
  1501 + <add_time>N</add_time>
  1502 + <SpecifyFormat>N</SpecifyFormat>
  1503 + <date_time_format/>
  1504 + <sheetname>Sheet1</sheetname>
  1505 + <autosizecolums>N</autosizecolums>
  1506 + <nullisblank>N</nullisblank>
  1507 + <protect_sheet>N</protect_sheet>
  1508 + <password>Encrypted </password>
  1509 + <splitevery>0</splitevery>
  1510 + <usetempfiles>N</usetempfiles>
  1511 + <tempdirectory/>
  1512 + </file>
  1513 + <template>
  1514 + <enabled>N</enabled>
  1515 + <append>N</append>
  1516 + <filename>template.xls</filename>
  1517 + </template>
  1518 + <fields>
  1519 + <field>
  1520 + <name>xlid</name>
  1521 + <type>Integer</type>
  1522 + <format/>
  1523 + </field>
  1524 + <field>
  1525 + <name>cid</name>
  1526 + <type>Integer</type>
  1527 + <format/>
  1528 + </field>
  1529 + <field>
  1530 + <name>&#x8def;&#x724c;&#x8303;&#x56f4;</name>
  1531 + <type>String</type>
  1532 + <format/>
  1533 + </field>
  1534 + <field>
  1535 + <name>lpids</name>
  1536 + <type>String</type>
  1537 + <format/>
  1538 + </field>
  1539 + <field>
  1540 + <name>&#x8d77;&#x59cb;&#x8def;&#x724c;</name>
  1541 + <type>String</type>
  1542 + <format/>
  1543 + </field>
  1544 + <field>
  1545 + <name>&#x8d77;&#x59cb;&#x4eba;&#x5458;</name>
  1546 + <type>String</type>
  1547 + <format/>
  1548 + </field>
  1549 + <field>
  1550 + <name>&#x4eba;&#x5458;&#x8303;&#x56f4;</name>
  1551 + <type>String</type>
  1552 + <format/>
  1553 + </field>
  1554 + <field>
  1555 + <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  1556 + <type>Timestamp</type>
  1557 + <format/>
  1558 + </field>
  1559 + <field>
  1560 + <name>&#x7ffb;&#x73ed;&#x683c;&#x5f0f;</name>
  1561 + <type>String</type>
  1562 + <format/>
  1563 + </field>
  1564 + <field>
  1565 + <name>isCancel</name>
  1566 + <type>Integer</type>
  1567 + <format/>
  1568 + </field>
  1569 + <field>
  1570 + <name>rycids</name>
  1571 + <type>String</type>
  1572 + <format/>
  1573 + </field>
  1574 + <field>
  1575 + <name>error_count</name>
  1576 + <type>Integer</type>
  1577 + <format/>
  1578 + </field>
  1579 + <field>
  1580 + <name>error_desc</name>
  1581 + <type>String</type>
  1582 + <format/>
  1583 + </field>
  1584 + <field>
  1585 + <name>error_column1</name>
  1586 + <type>String</type>
  1587 + <format/>
  1588 + </field>
  1589 + <field>
  1590 + <name>error_column2</name>
  1591 + <type>String</type>
  1592 + <format/>
  1593 + </field>
  1594 + </fields>
  1595 + <custom>
  1596 + <header_font_name>arial</header_font_name>
  1597 + <header_font_size>10</header_font_size>
  1598 + <header_font_bold>N</header_font_bold>
  1599 + <header_font_italic>N</header_font_italic>
  1600 + <header_font_underline>no</header_font_underline>
  1601 + <header_font_orientation>horizontal</header_font_orientation>
  1602 + <header_font_color>black</header_font_color>
  1603 + <header_background_color>none</header_background_color>
  1604 + <header_row_height>255</header_row_height>
  1605 + <header_alignment>left</header_alignment>
  1606 + <header_image/>
  1607 + <row_font_name>arial</row_font_name>
  1608 + <row_font_size>10</row_font_size>
  1609 + <row_font_color>black</row_font_color>
  1610 + <row_background_color>none</row_background_color>
  1611 + </custom>
  1612 + <cluster_schema/>
  1613 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1614 + <xloc>534</xloc>
  1615 + <yloc>392</yloc>
  1616 + <draw>Y</draw>
  1617 + </GUI>
  1618 + </step>
  1619 +
  1620 + <step_error_handling>
  1621 + <error>
  1622 + <source_step>&#x63d2;&#x5165; &#x2f; &#x66f4;&#x65b0;bsth_c_s_sr1_flat</source_step>
  1623 + <target_step>&#x9519;&#x8bef;&#x8f93;&#x51fa; 2</target_step>
  1624 + <is_enabled>Y</is_enabled>
  1625 + <nr_valuename>error_count</nr_valuename>
  1626 + <descriptions_valuename>error_desc</descriptions_valuename>
  1627 + <fields_valuename>error_column1</fields_valuename>
  1628 + <codes_valuename>error_column2</codes_valuename>
  1629 + <max_errors/>
  1630 + <max_pct_errors/>
  1631 + <min_pct_rows/>
  1632 + </error>
  1633 + </step_error_handling>
  1634 + <slave-step-copy-partition-distribution>
  1635 +</slave-step-copy-partition-distribution>
  1636 + <slave_transformation>N</slave_transformation>
  1637 +
  1638 +</transformation>
src/main/resources/logback.xml
@@ -182,6 +182,48 @@ @@ -182,6 +182,48 @@
182 <appender-ref ref="GPS_COUNT" /> 182 <appender-ref ref="GPS_COUNT" />
183 </logger> 183 </logger>
184 184
  185 + <!-- 消息队列纪录 -->
  186 + <appender name="QUEUE_WEB_SOCKET"
  187 + class="ch.qos.logback.core.rolling.RollingFileAppender">
  188 + <file>${LOG_BASE}/msg_queue/websocket.log</file>
  189 + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  190 + <fileNamePattern>${LOG_BASE}/msg_queue/websocket-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  191 + <timeBasedFileNamingAndTriggeringPolicy
  192 + class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  193 + <maxFileSize>100MB</maxFileSize>
  194 + </timeBasedFileNamingAndTriggeringPolicy>
  195 + </rollingPolicy>
  196 +
  197 + <layout class="ch.qos.logback.classic.PatternLayout">
  198 + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%file:%line] %-5level -%msg%n
  199 + </pattern>
  200 + </layout>
  201 + </appender>
  202 + <logger name="com.bsth.data.msg_queue.WebSocketPushQueue"
  203 + level="INFO" additivity="false">
  204 + <appender-ref ref="QUEUE_WEB_SOCKET" />
  205 + </logger>
  206 + <appender name="QUEUE_DIRECTIVE"
  207 + class="ch.qos.logback.core.rolling.RollingFileAppender">
  208 + <file>${LOG_BASE}/msg_queue/directive.log</file>
  209 + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  210 + <fileNamePattern>${LOG_BASE}/msg_queue/directive-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  211 + <timeBasedFileNamingAndTriggeringPolicy
  212 + class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  213 + <maxFileSize>100MB</maxFileSize>
  214 + </timeBasedFileNamingAndTriggeringPolicy>
  215 + </rollingPolicy>
  216 +
  217 + <layout class="ch.qos.logback.classic.PatternLayout">
  218 + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%file:%line] %-5level -%msg%n
  219 + </pattern>
  220 + </layout>
  221 + </appender>
  222 + <logger name="com.bsth.data.msg_queue.DirectivePushQueue"
  223 + level="INFO" additivity="false">
  224 + <appender-ref ref="QUEUE_DIRECTIVE" />
  225 + </logger>
  226 +
185 <!--<logger name="org.hibernate.SQL" level="TRACE">--> 227 <!--<logger name="org.hibernate.SQL" level="TRACE">-->
186 <!--<appender-ref ref="STDOUT" />--> 228 <!--<appender-ref ref="STDOUT" />-->
187 <!--</logger>--> 229 <!--</logger>-->
src/main/resources/rules/functions.drl
@@ -4,4 +4,5 @@ import accumulate com.bsth.service.schedule.rules.ttinfo2.ErrorBcCountFunction e @@ -4,4 +4,5 @@ import accumulate com.bsth.service.schedule.rules.ttinfo2.ErrorBcCountFunction e
4 import accumulate com.bsth.service.schedule.rules.shiftloop.GidsCountFunction gidscount; 4 import accumulate com.bsth.service.schedule.rules.shiftloop.GidsCountFunction gidscount;
5 import accumulate com.bsth.service.schedule.rules.shiftloop.GidFbTimeFunction gidfbtime; 5 import accumulate com.bsth.service.schedule.rules.shiftloop.GidFbTimeFunction gidfbtime;
6 import accumulate com.bsth.service.schedule.rules.ttinfo.LpInfoResultsFunction lpinforesult; 6 import accumulate com.bsth.service.schedule.rules.ttinfo.LpInfoResultsFunction lpinforesult;
7 -import accumulate com.bsth.service.schedule.rules.ttinfo.MinRuleQyrqFunction minruleqyrq  
8 \ No newline at end of file 7 \ No newline at end of file
  8 +import accumulate com.bsth.service.schedule.rules.ttinfo.MinRuleQyrqFunction minruleqyrq;
  9 +import accumulate com.bsth.service.schedule.rules.validate.ValidRepeatBcFunction vrb;
9 \ No newline at end of file 10 \ No newline at end of file
src/main/resources/rules/shiftloop_fb_2.drl
@@ -88,7 +88,9 @@ rule &quot;calcu_days_1_&quot; @@ -88,7 +88,9 @@ rule &quot;calcu_days_1_&quot;
88 String ruleMd5 = Md5Util.getMd5( 88 String ruleMd5 = Md5Util.getMd5(
89 String.valueOf($qyrq.getMillis()) + 89 String.valueOf($qyrq.getMillis()) +
90 "_" + 90 "_" +
91 - $sri.getSelf().getLpIds() 91 + $sri.getSelf().getLpIds() +
  92 + "_" +
  93 + $sri.getSelf().getLpStart().toString()
92 ); 94 );
93 cdrp.setRuleMd5(ruleMd5); 95 cdrp.setRuleMd5(ruleMd5);
94 // 人员范围个数 96 // 人员范围个数
@@ -136,7 +138,9 @@ rule &quot;calcu_days_2_&quot; @@ -136,7 +138,9 @@ rule &quot;calcu_days_2_&quot;
136 String ruleMd5 = Md5Util.getMd5( 138 String ruleMd5 = Md5Util.getMd5(
137 String.valueOf($qyrq.getMillis()) + 139 String.valueOf($qyrq.getMillis()) +
138 "_" + 140 "_" +
139 - $sri.getSelf().getLpIds() 141 + $sri.getSelf().getLpIds() +
  142 + "_" +
  143 + $sri.getSelf().getLpStart().toString()
140 ); 144 );
141 cdrp.setRuleMd5(ruleMd5); 145 cdrp.setRuleMd5(ruleMd5);
142 // 人员范围个数 146 // 人员范围个数
@@ -187,7 +191,9 @@ rule &quot;Calcu_SchedulePlanRuleResult_wrap&quot; @@ -187,7 +191,9 @@ rule &quot;Calcu_SchedulePlanRuleResult_wrap&quot;
187 String md5 = Md5Util.getMd5( 191 String md5 = Md5Util.getMd5(
188 String.valueOf($sprr.getQyrq().getTime()) + 192 String.valueOf($sprr.getQyrq().getTime()) +
189 "_" + 193 "_" +
190 - $sprr.getGids() 194 + $sprr.getGids() +
  195 + "_" +
  196 + $sprr.getOrigingidindex()
191 ); 197 );
192 198
193 // System.out.println("修改后的md5:" + md5 + "车辆:" + $sprr.getCcZbh()); 199 // System.out.println("修改后的md5:" + md5 + "车辆:" + $sprr.getCcZbh());
@@ -350,7 +356,7 @@ rule &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻 @@ -350,7 +356,7 @@ rule &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻
350 schedulePlanRuleResult.setRuleId($ruleId); 356 schedulePlanRuleResult.setRuleId($ruleId);
351 schedulePlanRuleResult.setCcId($cid); 357 schedulePlanRuleResult.setCcId($cid);
352 schedulePlanRuleResult.setCcZbh($srf.getCarConfigInfo().getCl().getInsideCode()); 358 schedulePlanRuleResult.setCcZbh($srf.getCarConfigInfo().getCl().getInsideCode());
353 - schedulePlanRuleResult.setGids($srf.getLpIds()); 359 + schedulePlanRuleResult.setGids($srf.getLpIds()); // 参与md5计算
354 schedulePlanRuleResult.setGnames($srf.getLpNames()); 360 schedulePlanRuleResult.setGnames($srf.getLpNames());
355 schedulePlanRuleResult.setGidindex(String.valueOf($lpindex)); 361 schedulePlanRuleResult.setGidindex(String.valueOf($lpindex));
356 schedulePlanRuleResult.setEcids($srf.getRyConfigIds()); 362 schedulePlanRuleResult.setEcids($srf.getRyConfigIds());
@@ -359,7 +365,8 @@ rule &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻 @@ -359,7 +365,8 @@ rule &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻
359 schedulePlanRuleResult.setScheduleDate($csd2.toDate()); 365 schedulePlanRuleResult.setScheduleDate($csd2.toDate());
360 schedulePlanRuleResult.setTtinfoId($ttinfoId); 366 schedulePlanRuleResult.setTtinfoId($ttinfoId);
361 schedulePlanRuleResult.setTtinfoName($ttinfoName); 367 schedulePlanRuleResult.setTtinfoName($ttinfoName);
362 - schedulePlanRuleResult.setQyrq($sri.getQyrq().toDate()); 368 + schedulePlanRuleResult.setQyrq($sri.getQyrq().toDate()); // 参与md5计算
  369 + schedulePlanRuleResult.setOrigingidindex(String.valueOf($sri.getSelf().getLpStart())); // 参与md5计算
363 370
364 scheduleResult.getSchedulePlanRuleResults().add(schedulePlanRuleResult); 371 scheduleResult.getSchedulePlanRuleResults().add(schedulePlanRuleResult);
365 372