Commit 2143ef3a4808b660324817e0ec2959039f765e8d

Authored by 潘钊
2 parents c4487d2b 852668bb

Merge branch 'pudong' of http://222.66.0.204:8090/panzhaov5/bsth_control into pudong

Too many changes to show.

To preserve performance only 18 of 23 files are displayed.

src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
@@ -483,6 +483,11 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, @@ -483,6 +483,11 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo,
483 public Map<String, Object> MapById(@RequestParam("id") Long id){ 483 public Map<String, Object> MapById(@RequestParam("id") Long id){
484 return scheduleRealInfoService.MapById(id); 484 return scheduleRealInfoService.MapById(id);
485 } 485 }
  486 +
  487 + @RequestMapping(value="/MapByIdQp",method = RequestMethod.GET)
  488 + public Map<String, Object> MapByIdQp(@RequestParam("id") Long id){
  489 + return scheduleRealInfoService.MapByIdQp(id);
  490 + }
486 491
487 /** 492 /**
488 * @Title: scheduleDaily 493 * @Title: scheduleDaily
src/main/java/com/bsth/controller/schedule/core/TTInfoDetailController.java
@@ -5,9 +5,13 @@ import com.bsth.controller.schedule.BController; @@ -5,9 +5,13 @@ import com.bsth.controller.schedule.BController;
5 import com.bsth.entity.schedule.TTInfoDetail; 5 import com.bsth.entity.schedule.TTInfoDetail;
6 import com.bsth.service.schedule.TTInfoDetailService; 6 import com.bsth.service.schedule.TTInfoDetailService;
7 import com.bsth.service.schedule.datatools.TTInfoDetailForEdit; 7 import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;
  8 +import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData;
  9 +import com.bsth.service.schedule.utils.DataToolsFile;
8 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.web.bind.annotation.*; 11 import org.springframework.web.bind.annotation.*;
10 12
  13 +import javax.servlet.http.HttpServletResponse;
  14 +import java.io.*;
11 import java.util.HashMap; 15 import java.util.HashMap;
12 import java.util.List; 16 import java.util.List;
13 import java.util.Map; 17 import java.util.Map;
@@ -120,4 +124,32 @@ public class TTInfoDetailController extends BController&lt;TTInfoDetail, Long&gt; { @@ -120,4 +124,32 @@ public class TTInfoDetailController extends BController&lt;TTInfoDetail, Long&gt; {
120 public Map<String, Object> skbDetailMxSave(@RequestParam Map<String, Object> entities){ 124 public Map<String, Object> skbDetailMxSave(@RequestParam Map<String, Object> entities){
121 return ttInfoDetailService.skbDetailMxSave(entities); 125 return ttInfoDetailService.skbDetailMxSave(entities);
122 } 126 }
  127 +
  128 +
  129 + @RequestMapping(value = "/exportDTDFile", method = RequestMethod.POST)
  130 + public void exportFile(
  131 + @RequestBody TTinfoDetailDynamicData.DTInfos dtInfos,
  132 + HttpServletResponse response) throws Exception {
  133 + DataToolsFile dataToolsFile = ttInfoDetailService.exportDynamicTTinfo(dtInfos);
  134 + // 流输出导出文件
  135 + response.setHeader("content-type", "application/octet-stream");
  136 + response.setHeader("Content-Disposition", "attachment; filename=" + dataToolsFile.getFile().getName());
  137 + response.setContentType("application/octet-stream");
  138 +
  139 + OutputStream os = response.getOutputStream();
  140 + BufferedOutputStream bos = new BufferedOutputStream(os);
  141 +
  142 + InputStream is = new FileInputStream(dataToolsFile.getFile());
  143 + BufferedInputStream bis = new BufferedInputStream(is);
  144 +
  145 + int length = 0;
  146 + byte[] temp = new byte[1 * 1024 * 10];
  147 + while ((length = bis.read(temp)) != -1) {
  148 + bos.write(temp, 0, length);
  149 + }
  150 + bos.flush();
  151 + bis.close();
  152 + bos.close();
  153 + is.close();
  154 + }
123 } 155 }
src/main/java/com/bsth/data/gpsdata_v2/handlers/overspeed/GpsOverspeed.java
1 -package com.bsth.data.gpsdata_v2.handlers.overspeed;  
2 -  
3 -/**  
4 - * gps 超速信息  
5 - * Created by panzhao on 2018/1/9.  
6 - */  
7 -public class GpsOverspeed {  
8 -  
9 - private String device;  
10 -  
11 - private String nbbm;  
12 -  
13 - private String lineCode;  
14 -  
15 - /**  
16 - * 开始超速时间 HH:mm  
17 - */  
18 - private String sts;  
19 -  
20 - private long st;  
21 -  
22 - /**  
23 - * 结束超速时间 HH:mm  
24 - */  
25 - private String ets;  
26 -  
27 - /**  
28 - * 最新速度值  
29 - */  
30 - private float speed;  
31 -  
32 - /**  
33 - * 0:结束超速, 1:离线  
34 - */  
35 - private int eType;  
36 -  
37 - public String getDevice() {  
38 - return device;  
39 - }  
40 -  
41 - public void setDevice(String device) {  
42 - this.device = device;  
43 - }  
44 -  
45 - public String getNbbm() {  
46 - return nbbm;  
47 - }  
48 -  
49 - public void setNbbm(String nbbm) {  
50 - this.nbbm = nbbm;  
51 - }  
52 -  
53 - public String getLineCode() {  
54 - return lineCode;  
55 - }  
56 -  
57 - public void setLineCode(String lineCode) {  
58 - this.lineCode = lineCode;  
59 - }  
60 -  
61 - public String getSts() {  
62 - return sts;  
63 - }  
64 -  
65 - public void setSts(String sts) {  
66 - this.sts = sts;  
67 - }  
68 -  
69 - public long getSt() {  
70 - return st;  
71 - }  
72 -  
73 - public void setSt(long st) {  
74 - this.st = st;  
75 - }  
76 -  
77 - public String getEts() {  
78 - return ets;  
79 - }  
80 -  
81 - public void setEts(String ets) {  
82 - this.ets = ets;  
83 - }  
84 -  
85 - public float getSpeed() {  
86 - return speed;  
87 - }  
88 -  
89 - public void setSpeed(float speed) {  
90 - this.speed = speed;  
91 - }  
92 -  
93 - public int geteType() {  
94 - return eType;  
95 - }  
96 -  
97 - public void seteType(int eType) {  
98 - this.eType = eType;  
99 - }  
100 -} 1 +package com.bsth.data.gpsdata_v2.handlers.overspeed;
  2 +
  3 +/**
  4 + * gps 超速信息
  5 + * Created by panzhao on 2018/1/9.
  6 + */
  7 +public class GpsOverspeed {
  8 +
  9 + private String device;
  10 +
  11 + private String nbbm;
  12 +
  13 + private String lineCode;
  14 +
  15 + /**
  16 + * 开始超速时间 HH:mm
  17 + */
  18 + private String sts;
  19 +
  20 + private long st;
  21 +
  22 + /**
  23 + * 结束超速时间 HH:mm
  24 + */
  25 + private String ets;
  26 +
  27 + /**
  28 + * 最新速度值
  29 + */
  30 + private float speed;
  31 +
  32 + /**
  33 + * 0:结束超速, 1:离线
  34 + */
  35 + private int eType;
  36 +
  37 + public String getDevice() {
  38 + return device;
  39 + }
  40 +
  41 + public void setDevice(String device) {
  42 + this.device = device;
  43 + }
  44 +
  45 + public String getNbbm() {
  46 + return nbbm;
  47 + }
  48 +
  49 + public void setNbbm(String nbbm) {
  50 + this.nbbm = nbbm;
  51 + }
  52 +
  53 + public String getLineCode() {
  54 + return lineCode;
  55 + }
  56 +
  57 + public void setLineCode(String lineCode) {
  58 + this.lineCode = lineCode;
  59 + }
  60 +
  61 + public String getSts() {
  62 + return sts;
  63 + }
  64 +
  65 + public void setSts(String sts) {
  66 + this.sts = sts;
  67 + }
  68 +
  69 + public long getSt() {
  70 + return st;
  71 + }
  72 +
  73 + public void setSt(long st) {
  74 + this.st = st;
  75 + }
  76 +
  77 + public String getEts() {
  78 + return ets;
  79 + }
  80 +
  81 + public void setEts(String ets) {
  82 + this.ets = ets;
  83 + }
  84 +
  85 + public float getSpeed() {
  86 + return speed;
  87 + }
  88 +
  89 + public void setSpeed(float speed) {
  90 + this.speed = speed;
  91 + }
  92 +
  93 + public int geteType() {
  94 + return eType;
  95 + }
  96 +
  97 + public void seteType(int eType) {
  98 + this.eType = eType;
  99 + }
  100 +}
src/main/java/com/bsth/data/gpsdata_v2/handlers/overspeed/OverspeedProcess.java
1 -package com.bsth.data.gpsdata_v2.handlers.overspeed;  
2 -  
3 -import com.bsth.data.gpsdata_v2.cache.GeoCacheData;  
4 -import com.bsth.data.gpsdata_v2.entity.GpsEntity;  
5 -import com.google.common.collect.ArrayListMultimap;  
6 -import org.joda.time.format.DateTimeFormat;  
7 -import org.joda.time.format.DateTimeFormatter;  
8 -import org.slf4j.Logger;  
9 -import org.slf4j.LoggerFactory;  
10 -import org.springframework.stereotype.Component;  
11 -  
12 -import java.util.*;  
13 -  
14 -/**  
15 - * 超速处理  
16 - * Created by panzhao on 2018/1/9.  
17 - */  
18 -@Component  
19 -public class OverspeedProcess {  
20 -  
21 -  
22 - private static final double DEFAULT_SPEED_LIMIT = 60;  
23 -  
24 - private static final double INVALID_SPEED_LIMIT = 110;  
25 -  
26 - private static final int CONT_SPEED_SIZE = 6;  
27 -  
28 - private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");  
29 -  
30 - private static GpsOverspeedComp comp = new GpsOverspeedComp();  
31 - /**  
32 - * 按线路分组的超速信息  
33 - */  
34 - private static ArrayListMultimap<String, GpsOverspeed> multimap;  
35 -  
36 - /**  
37 - * 设备号 --> 当前超速  
38 - */  
39 - private static Map<String, GpsOverspeed> realOverspeedMap;  
40 -  
41 - /**  
42 - * 设备号 --> 连续超速次数  
43 - */  
44 - private static Map<String, Integer> contSpeedMap;  
45 -  
46 - Logger logger = LoggerFactory.getLogger(this.getClass());  
47 -  
48 - static{  
49 - multimap = ArrayListMultimap.create();  
50 - contSpeedMap = new HashMap();  
51 - realOverspeedMap = new HashMap();  
52 - }  
53 -  
54 - public static void clear(){  
55 - multimap = null;  
56 - multimap = ArrayListMultimap.create();  
57 -  
58 - contSpeedMap = null;  
59 - contSpeedMap = new HashMap();  
60 -  
61 - realOverspeedMap = null;  
62 - realOverspeedMap = new HashMap();  
63 - }  
64 -  
65 - public boolean process(GpsEntity gps){  
66 - if(gps.getSpeed() >= INVALID_SPEED_LIMIT){  
67 - return false;//无效的速度  
68 - }  
69 -  
70 - Double maxSpeed = GeoCacheData.speedLimit(gps.getLineId());  
71 - if(null == maxSpeed)  
72 - maxSpeed = DEFAULT_SPEED_LIMIT;  
73 -  
74 - if(gps.getSpeed() > maxSpeed){  
75 - overspeed(gps, maxSpeed);  
76 - }  
77 - else if(realOverspeedMap.containsKey(gps.getDeviceId())){  
78 - String device = gps.getDeviceId();  
79 - //结束超速  
80 - GpsOverspeed sp = realOverspeedMap.get(device);  
81 - sp.setEts(fmtHHmm.print(gps.getTimestamp()));  
82 -  
83 - realOverspeedMap.remove(device);  
84 - contSpeedMap.put(device, 0);  
85 - }  
86 - return false;  
87 - }  
88 -  
89 - private void overspeed(GpsEntity gps, Double maxSpeed) {  
90 - String device = gps.getDeviceId();  
91 - Integer cont = contSpeedMap.get(device);  
92 -  
93 - if(null == cont)  
94 - cont = 1;  
95 -  
96 - cont++;  
97 -  
98 - if(gps.getSpeed() - maxSpeed > (maxSpeed * 0.1))  
99 - cont++;  
100 -  
101 - if(cont >= CONT_SPEED_SIZE){  
102 - if(realOverspeedMap.containsKey(device)){  
103 - //正在超速,更新速度  
104 - realOverspeedMap.get(device).setSpeed(gps.getSpeed());  
105 - }  
106 - else{  
107 - logger.info("开始超速..." + gps.getNbbm());  
108 - GpsOverspeed sp = new GpsOverspeed();  
109 - sp.setLineCode(gps.getLineId());  
110 - sp.setDevice(device);  
111 - sp.setSpeed(gps.getSpeed());  
112 - sp.setNbbm(gps.getNbbm());  
113 - sp.setSts(fmtHHmm.print(gps.getTimestamp()));  
114 - sp.setSt(gps.getTimestamp());  
115 -  
116 - realOverspeedMap.put(device, sp);  
117 - multimap.put(sp.getLineCode(), sp);  
118 - }  
119 - //标记gps超速  
120 - gps.setAbnormalStatus("overspeed");  
121 - }  
122 -  
123 - contSpeedMap.put(device, cont);  
124 - }  
125 -  
126 - /**  
127 - * 设备掉线  
128 - * @param device  
129 - */  
130 - public void offline(String device){  
131 - if(realOverspeedMap.containsKey(device)){  
132 - //结束超速  
133 - GpsOverspeed sp = realOverspeedMap.get(device);  
134 - sp.setEts(fmtHHmm.print(System.currentTimeMillis()));  
135 - sp.seteType(1);  
136 -  
137 - realOverspeedMap.remove(device);  
138 - contSpeedMap.put(device, 0);  
139 - }  
140 - }  
141 -  
142 -  
143 - public List<GpsOverspeed> findByLines(List<String> lineArray){  
144 - List<GpsOverspeed> rs = new ArrayList<>();  
145 -  
146 - for(String code : lineArray){  
147 - rs.addAll(multimap.get(code));  
148 - }  
149 -  
150 - //按发送时间排序  
151 - Collections.sort(rs, comp);  
152 - if(rs.size() > 50)  
153 - rs = rs.subList(0, 50);  
154 -  
155 - return rs;  
156 - }  
157 -  
158 -  
159 - public static class GpsOverspeedComp implements Comparator<GpsOverspeed>{  
160 -  
161 - @Override  
162 - public int compare(GpsOverspeed o1, GpsOverspeed o2) {  
163 - return (int) (o2.getSt() - o1.getSt());  
164 - }  
165 - }  
166 -} 1 +package com.bsth.data.gpsdata_v2.handlers.overspeed;
  2 +
  3 +import com.bsth.data.gpsdata_v2.cache.GeoCacheData;
  4 +import com.bsth.data.gpsdata_v2.entity.GpsEntity;
  5 +import com.google.common.collect.ArrayListMultimap;
  6 +import org.joda.time.format.DateTimeFormat;
  7 +import org.joda.time.format.DateTimeFormatter;
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
  10 +import org.springframework.stereotype.Component;
  11 +
  12 +import java.util.*;
  13 +
  14 +/**
  15 + * 超速处理
  16 + * Created by panzhao on 2018/1/9.
  17 + */
  18 +@Component
  19 +public class OverspeedProcess {
  20 +
  21 +
  22 + private static final double DEFAULT_SPEED_LIMIT = 60;
  23 +
  24 + private static final double INVALID_SPEED_LIMIT = 110;
  25 +
  26 + private static final int CONT_SPEED_SIZE = 6;
  27 +
  28 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  29 +
  30 + private static GpsOverspeedComp comp = new GpsOverspeedComp();
  31 + /**
  32 + * 按线路分组的超速信息
  33 + */
  34 + private static ArrayListMultimap<String, GpsOverspeed> multimap;
  35 +
  36 + /**
  37 + * 设备号 --> 当前超速
  38 + */
  39 + private static Map<String, GpsOverspeed> realOverspeedMap;
  40 +
  41 + /**
  42 + * 设备号 --> 连续超速次数
  43 + */
  44 + private static Map<String, Integer> contSpeedMap;
  45 +
  46 + Logger logger = LoggerFactory.getLogger(this.getClass());
  47 +
  48 + static{
  49 + multimap = ArrayListMultimap.create();
  50 + contSpeedMap = new HashMap();
  51 + realOverspeedMap = new HashMap();
  52 + }
  53 +
  54 + public static void clear(){
  55 + multimap = null;
  56 + multimap = ArrayListMultimap.create();
  57 +
  58 + contSpeedMap = null;
  59 + contSpeedMap = new HashMap();
  60 +
  61 + realOverspeedMap = null;
  62 + realOverspeedMap = new HashMap();
  63 + }
  64 +
  65 + public boolean process(GpsEntity gps){
  66 + if(gps.getSpeed() >= INVALID_SPEED_LIMIT){
  67 + return false;//无效的速度
  68 + }
  69 +
  70 + Double maxSpeed = GeoCacheData.speedLimit(gps.getLineId());
  71 + if(null == maxSpeed)
  72 + maxSpeed = DEFAULT_SPEED_LIMIT;
  73 +
  74 + if(gps.getSpeed() > maxSpeed){
  75 + overspeed(gps, maxSpeed);
  76 + }
  77 + else if(realOverspeedMap.containsKey(gps.getDeviceId())){
  78 + String device = gps.getDeviceId();
  79 + //结束超速
  80 + GpsOverspeed sp = realOverspeedMap.get(device);
  81 + sp.setEts(fmtHHmm.print(gps.getTimestamp()));
  82 +
  83 + realOverspeedMap.remove(device);
  84 + contSpeedMap.put(device, 0);
  85 + }
  86 + return false;
  87 + }
  88 +
  89 + private void overspeed(GpsEntity gps, Double maxSpeed) {
  90 + String device = gps.getDeviceId();
  91 + Integer cont = contSpeedMap.get(device);
  92 +
  93 + if(null == cont)
  94 + cont = 1;
  95 +
  96 + cont++;
  97 +
  98 + if(gps.getSpeed() - maxSpeed > (maxSpeed * 0.1))
  99 + cont++;
  100 +
  101 + if(cont >= CONT_SPEED_SIZE){
  102 + if(realOverspeedMap.containsKey(device)){
  103 + //正在超速,更新速度
  104 + realOverspeedMap.get(device).setSpeed(gps.getSpeed());
  105 + }
  106 + else{
  107 + logger.info("开始超速..." + gps.getNbbm());
  108 + GpsOverspeed sp = new GpsOverspeed();
  109 + sp.setLineCode(gps.getLineId());
  110 + sp.setDevice(device);
  111 + sp.setSpeed(gps.getSpeed());
  112 + sp.setNbbm(gps.getNbbm());
  113 + sp.setSts(fmtHHmm.print(gps.getTimestamp()));
  114 + sp.setSt(gps.getTimestamp());
  115 +
  116 + realOverspeedMap.put(device, sp);
  117 + multimap.put(sp.getLineCode(), sp);
  118 + }
  119 + //标记gps超速
  120 + gps.setAbnormalStatus("overspeed");
  121 + }
  122 +
  123 + contSpeedMap.put(device, cont);
  124 + }
  125 +
  126 + /**
  127 + * 设备掉线
  128 + * @param device
  129 + */
  130 + public void offline(String device){
  131 + if(realOverspeedMap.containsKey(device)){
  132 + //结束超速
  133 + GpsOverspeed sp = realOverspeedMap.get(device);
  134 + sp.setEts(fmtHHmm.print(System.currentTimeMillis()));
  135 + sp.seteType(1);
  136 +
  137 + realOverspeedMap.remove(device);
  138 + contSpeedMap.put(device, 0);
  139 + }
  140 + }
  141 +
  142 +
  143 + public List<GpsOverspeed> findByLines(List<String> lineArray){
  144 + List<GpsOverspeed> rs = new ArrayList<>();
  145 +
  146 + for(String code : lineArray){
  147 + rs.addAll(multimap.get(code));
  148 + }
  149 +
  150 + //按发送时间排序
  151 + Collections.sort(rs, comp);
  152 + if(rs.size() > 50)
  153 + rs = rs.subList(0, 50);
  154 +
  155 + return rs;
  156 + }
  157 +
  158 +
  159 + public static class GpsOverspeedComp implements Comparator<GpsOverspeed>{
  160 +
  161 + @Override
  162 + public int compare(GpsOverspeed o1, GpsOverspeed o2) {
  163 + return (int) (o2.getSt() - o1.getSt());
  164 + }
  165 + }
  166 +}
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
@@ -144,6 +144,8 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -144,6 +144,8 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
144 Map<String,Object> historySave(ScheduleRealInfo sch); 144 Map<String,Object> historySave(ScheduleRealInfo sch);
145 145
146 Map<String, Object> MapById(Long id) ; 146 Map<String, Object> MapById(Long id) ;
  147 + Map<String, Object> MapByIdQp(Long id) ;
  148 +
147 149
148 Map<String,Object> svgAttr(String jsonStr); 150 Map<String,Object> svgAttr(String jsonStr);
149 151
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -3732,22 +3732,23 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -3732,22 +3732,23 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3732 } 3732 }
3733 3733
3734 //计算里程和班次数,并放入Map里 3734 //计算里程和班次数,并放入Map里
3735 - map = new HashMap<String, Object>(); 3735 + map = findKMBCQp(clZbh, date, line);
3736 map.put("jzl", jzl); 3736 map.put("jzl", jzl);
3737 - map.put("jhlc", format.format(jhlc + jcclc));  
3738 - map.put("yygljh", format.format(jhlc));  
3739 - map.put("ssgl", format.format(remMileage));  
3740 - map.put("ksgl", format.format(ksgl));  
3741 - map.put("yyglsj", format.format(yygl));  
3742 - map.put("jhbc", jhbc);  
3743 - map.put("jcclc", jcclc);  
3744 -  
3745 - map.put("ljgl", format.format(addMileage));  
3746 - map.put("ssbc", cjbc);  
3747 - map.put("ysgl", format.format(yygl));  
3748 - map.put("sjbc", jhbc - cjbc + ljbc);  
3749 - map.put("zgl", format.format(yygl + ksgl + jcclc));  
3750 - map.put("ljbc", ljbc); 3737 +// map.put("jhlc", format.format(jhlc + jcclc));
  3738 +// map.put("yygljh", format.format(jhlc));
  3739 +// map.put("ssgl", format.format(remMileage));
  3740 +// map.put("ksgl", format.format(ksgl));
  3741 +// map.put("yyglsj", format.format(yygl));
  3742 +// map.put("jhbc", jhbc);
  3743 +// map.put("jcclc", jcclc);
  3744 +//
  3745 +// map.put("ljgl", format.format(addMileage));
  3746 +// map.put("ssbc", cjbc);
  3747 +// map.put("ysgl", format.format(yygl));
  3748 +// map.put("sjbc", jhbc - cjbc + ljbc);
  3749 +// map.put("zgl", format.format(yygl + ksgl + jcclc));
  3750 +// map.put("ljbc", ljbc);
  3751 +
3751 String zdp = "", zwdp = "", wdp = ""; 3752 String zdp = "", zwdp = "", wdp = "";
3752 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 3753 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
3753 List<DutyEmployee> listDtuy = dutyEmployeeService.getDutyEmployee(line, date + "00:00", date + "23:59"); 3754 List<DutyEmployee> listDtuy = dutyEmployeeService.getDutyEmployee(line, date + "00:00", date + "23:59");
@@ -4006,6 +4007,141 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4006,6 +4007,141 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4006 map.put("dbdp", dbdp); 4007 map.put("dbdp", dbdp);
4007 return map; 4008 return map;
4008 } 4009 }
  4010 +
  4011 + @Override
  4012 + public Map<String, Object> MapByIdQp(Long id) {
  4013 + // TODO Auto-generated method stub
  4014 + Map<String, Object> map = new HashMap<String, Object>();
  4015 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4016 + ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
  4017 + String xlbm = s.getXlBm();
  4018 + String fcrq = s.getScheduleDateStr();
  4019 +
  4020 + int type=0;
  4021 + Double ccyl = 0.0;
  4022 + Double jcyl = 0.0;
  4023 + Double yh = 0.0;
  4024 + Double jzl = 0.0;
  4025 + Double zlc=0.0;
  4026 +// List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  4027 +// List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  4028 +// if(listYlb.size()>0){
  4029 +// type=0;
  4030 +// for (int i = 0; i < listYlb.size(); i++) {
  4031 +// Ylb y = listYlb.get(i);
  4032 +// if(y.getLp()==null){
  4033 +// ccyl=Arith.add(ccyl, y.getCzyl());
  4034 +// jcyl=Arith.add(jcyl, y.getJzyl());
  4035 +// yh =Arith.add(yh ,y.getYh());
  4036 +// jzl =Arith.add(jzl, y.getJzl());
  4037 +// zlc =Arith.add(zlc, y.getZlc());
  4038 +// }else{
  4039 +// if(y.getLp().equals(s.getLpName())){
  4040 +// ccyl=Arith.add(ccyl, y.getCzyl());
  4041 +// jcyl=Arith.add(jcyl, y.getJzyl());
  4042 +// yh =Arith.add(yh ,y.getYh());
  4043 +// jzl =Arith.add(jzl, y.getJzl());
  4044 +// zlc =Arith.add(zlc, y.getZlc());
  4045 +// }
  4046 +// }
  4047 +//
  4048 +// }
  4049 +// }else{
  4050 +// type=1;
  4051 +// for (int i = 0; i < listDlb.size(); i++) {
  4052 +// Dlb d=listDlb.get(i);
  4053 +// if(d.getLp()==null){
  4054 +// ccyl=Arith.add(ccyl, d.getCzcd());
  4055 +// jcyl=Arith.add(jcyl, d.getJzcd());
  4056 +// yh =Arith.add(yh ,d.getHd());
  4057 +// jzl =Arith.add(jzl, d.getCdl());
  4058 +// zlc =Arith.add(zlc, d.getZlc());
  4059 +// }else{
  4060 +// if(d.getLp().equals(s.getLpName())){
  4061 +// ccyl=Arith.add(ccyl, d.getCzcd());
  4062 +// jcyl=Arith.add(jcyl, d.getJzcd());
  4063 +// yh =Arith.add(yh ,d.getHd());
  4064 +// jzl =Arith.add(jzl, d.getCdl());
  4065 +// zlc =Arith.add(zlc, d.getZlc());
  4066 +// }
  4067 +// }
  4068 +//
  4069 +// }
  4070 +// }
  4071 +
  4072 + List<Ylxxb> listylxxb=ylxxbRepository.queryListYlxxb(s.getClZbh(), fcrq);
  4073 + for (int i = 0; i < listylxxb.size(); i++) {
  4074 + Ylxxb t=listylxxb.get(i);
  4075 + jzl =Arith.add(jzl, t.getJzl());
  4076 + }
  4077 + map.put("jzl", jzl);
  4078 + map.put("yh", yh);
  4079 + map.put("ccyl", ccyl);
  4080 + map.put("jcyl", jcyl);
  4081 + map.put("type", type);
  4082 + map.put("zlc", zlc);
  4083 + map.put("xlName", s.getXlName());
  4084 + map.put("clZbh", s.getClZbh());
  4085 + map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
  4086 + map.put("fcsjActual", s.getFcsjActual());
  4087 + map.put("zdzName", s.getZdzName());
  4088 + map.put("scheduleDate", s.getScheduleDateStr());
  4089 + map.put("lpName", s.getLpName());
  4090 + String zdp = "", zwdp = "", wdp = "";
  4091 + String zdpT = "", zwdpT = "", wdpT = "";
  4092 + String dbdp="";
  4093 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
  4094 + try {
  4095 + Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
  4096 + Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
  4097 + Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
  4098 + for (int i = 0; i < list.size(); i++) {
  4099 + DutyEmployee t = list.get(i);
  4100 + if(dbdp.indexOf(t.getuName()) == -1){
  4101 + if(!(dbdp.length()>0)){
  4102 + dbdp =t.getuName();
  4103 + }else{
  4104 + dbdp +=","+t.getuName();
  4105 + }
  4106 + }
  4107 + Long ts = t.getTs();
  4108 + if (ts > fcsj1 && ts < fcsj2) {
  4109 + if (zdp.indexOf(t.getuName()) == -1) {
  4110 + if (!(zdp.length() > 0)) {
  4111 + zdpT = t.getuName() + "...";
  4112 + }
  4113 + zdp += t.getuName() + ",";
  4114 +
  4115 + }
  4116 + } else if (ts > fcsj2 && ts < fcsj3) {
  4117 + if (zwdp.indexOf(t.getuName()) == -1) {
  4118 + if (!(zwdp.length() > 0)) {
  4119 + zwdpT = t.getuName() + "...";
  4120 + }
  4121 + zwdp += t.getuName() + ",";
  4122 + }
  4123 + } else {
  4124 + if (wdp.indexOf(t.getuName()) == -1) {
  4125 + if (!(wdp.length() > 0)) {
  4126 + wdpT = t.getuName() + "...";
  4127 + }
  4128 + wdp += t.getuName() + ",";
  4129 + }
  4130 + }
  4131 + }
  4132 + } catch (ParseException e) {
  4133 + // TODO Auto-generated catch block
  4134 + e.printStackTrace();
  4135 + }
  4136 + map.put("zdp", zdp);
  4137 + map.put("zwdp", zwdp);
  4138 + map.put("wdp", wdp);
  4139 + map.put("zdpT", zdpT);
  4140 + map.put("zwdpT", zwdpT);
  4141 + map.put("wdpT", wdpT);
  4142 + map.put("dbdp", dbdp);
  4143 + return map;
  4144 + }
4009 4145
4010 @Override 4146 @Override
4011 public List<Map<String, Object>> scheduleDailyQp(String line, String date) { 4147 public List<Map<String, Object>> scheduleDailyQp(String line, String date) {
src/main/java/com/bsth/service/schedule/TTInfoDetailService.java
@@ -2,7 +2,9 @@ package com.bsth.service.schedule; @@ -2,7 +2,9 @@ package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.schedule.TTInfoDetail; 3 import com.bsth.entity.schedule.TTInfoDetail;
4 import com.bsth.service.schedule.datatools.TTInfoDetailForEdit; 4 import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;
  5 +import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData;
5 import com.bsth.service.schedule.exception.ScheduleException; 6 import com.bsth.service.schedule.exception.ScheduleException;
  7 +import com.bsth.service.schedule.utils.DataToolsFile;
6 8
7 import java.util.List; 9 import java.util.List;
8 import java.util.Map; 10 import java.util.Map;
@@ -22,6 +24,14 @@ public interface TTInfoDetailService extends BService&lt;TTInfoDetail, Long&gt; { @@ -22,6 +24,14 @@ public interface TTInfoDetailService extends BService&lt;TTInfoDetail, Long&gt; {
22 TTInfoDetailForEdit.EditInfo getEditInfo(Integer xlid, Long ttid, Long maxfcno) throws ScheduleException; 24 TTInfoDetailForEdit.EditInfo getEditInfo(Integer xlid, Long ttid, Long maxfcno) throws ScheduleException;
23 25
24 /** 26 /**
  27 + * 导出动态时刻表。
  28 + * @param dtInfos
  29 + * @return
  30 + * @throws ScheduleException
  31 + */
  32 + DataToolsFile exportDynamicTTinfo(TTinfoDetailDynamicData.DTInfos dtInfos) throws ScheduleException;
  33 +
  34 + /**
25 * 获取时刻表最大发车顺序号 35 * 获取时刻表最大发车顺序号
26 * @param xlid 线路id 36 * @param xlid 线路id
27 * @param ttinfoid 时刻表id 37 * @param ttinfoid 时刻表id
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
1 package com.bsth.service.schedule.datatools; 1 package com.bsth.service.schedule.datatools;
2 2
  3 +import com.bsth.entity.Station;
  4 +import com.bsth.service.StationService;
3 import com.bsth.service.schedule.exception.ScheduleException; 5 import com.bsth.service.schedule.exception.ScheduleException;
4 import com.bsth.service.schedule.utils.*; 6 import com.bsth.service.schedule.utils.*;
5 import jxl.Sheet; 7 import jxl.Sheet;
@@ -8,7 +10,13 @@ import jxl.write.Label; @@ -8,7 +10,13 @@ import jxl.write.Label;
8 import jxl.write.WritableSheet; 10 import jxl.write.WritableSheet;
9 import jxl.write.WritableWorkbook; 11 import jxl.write.WritableWorkbook;
10 import org.apache.commons.lang3.StringUtils; 12 import org.apache.commons.lang3.StringUtils;
  13 +import org.apache.poi.ss.usermodel.Cell;
11 import org.apache.poi.ss.usermodel.Row; 14 import org.apache.poi.ss.usermodel.Row;
  15 +import org.apache.poi.ss.util.CellRangeAddress;
  16 +import org.apache.poi.ss.util.WorkbookUtil;
  17 +import org.apache.poi.xssf.usermodel.XSSFRow;
  18 +import org.apache.poi.xssf.usermodel.XSSFSheet;
  19 +import org.apache.poi.xssf.usermodel.XSSFWorkbook;
12 import org.joda.time.DateTime; 20 import org.joda.time.DateTime;
13 import org.slf4j.Logger; 21 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory; 22 import org.slf4j.LoggerFactory;
@@ -17,20 +25,27 @@ import org.springframework.beans.factory.annotation.Qualifier; @@ -17,20 +25,27 @@ import org.springframework.beans.factory.annotation.Qualifier;
17 import org.springframework.boot.context.properties.EnableConfigurationProperties; 25 import org.springframework.boot.context.properties.EnableConfigurationProperties;
18 import org.springframework.stereotype.Service; 26 import org.springframework.stereotype.Service;
19 27
  28 +import java.awt.*;
20 import java.io.File; 29 import java.io.File;
  30 +import java.io.FileOutputStream;
21 import java.io.PrintWriter; 31 import java.io.PrintWriter;
22 import java.io.StringWriter; 32 import java.io.StringWriter;
23 import java.util.*; 33 import java.util.*;
  34 +import java.util.List;
24 35
25 /** 36 /**
26 * Created by xu on 17/5/16. 37 * Created by xu on 17/5/16.
27 */ 38 */
28 @EnableConfigurationProperties(DataToolsProperties.class) 39 @EnableConfigurationProperties(DataToolsProperties.class)
29 @Service(value = "ttInfoDetail_dataTool") 40 @Service(value = "ttInfoDetail_dataTool")
30 -public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetailForEdit { 41 +public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetailForEdit, TTinfoDetailDynamicData {
31 /** 日志记录器 */ 42 /** 日志记录器 */
32 private final static Logger LOGGER = LoggerFactory.getLogger(TTInfoDetailDataToolsImpl.class); 43 private final static Logger LOGGER = LoggerFactory.getLogger(TTInfoDetailDataToolsImpl.class);
33 44
  45 + // TODO:之后改了
  46 + @Autowired
  47 + private StationService stationService;
  48 +
34 @Autowired 49 @Autowired
35 @Qualifier(value = "dataToolsServiceImpl") 50 @Qualifier(value = "dataToolsServiceImpl")
36 private DataToolsService dataToolsService; 51 private DataToolsService dataToolsService;
@@ -363,4 +378,141 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -363,4 +378,141 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
363 } 378 }
364 } 379 }
365 380
  381 + @Override
  382 + public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException {
  383 + try {
  384 + // 使用POI,创建xlsx文件
  385 + XSSFWorkbook wb = new XSSFWorkbook();
  386 + XSSFSheet sheet = wb.createSheet(WorkbookUtil.createSafeSheetName("时刻表信息"));
  387 +
  388 + //-------------------------------- 1、路牌班次数据 -------------------------------//
  389 + List<LpObj> lpObjList = dtInfos.getLpObjList();
  390 +
  391 + // 构建第一行数据
  392 + XSSFRow lpHeadRow = sheet.createRow((short) 0);
  393 + if (lpObjList.size() == 0) {
  394 + throw new RuntimeException("没有班次数据!");
  395 + }
  396 + int groupCount = lpObjList.get(0).getGroupCount(); // 获取总圈数
  397 + if (groupCount == 0) {
  398 + throw new RuntimeException("总圈数为0,有问题!");
  399 + }
  400 +
  401 + // 构造表头
  402 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short)0, "路牌", new Color(0x96b9d7));
  403 + Station station1 = stationService.findById(lpObjList.get(0).getStationRouteId1());
  404 + Station station2 = stationService.findById(lpObjList.get(1).getStationRouteId2());
  405 + for (int i = 0; i < groupCount; i++) {
  406 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 1),
  407 + station1.getStationName(), new Color(0x96b9d7));
  408 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 2),
  409 + station2.getStationName(), new Color(0x96b9d7));
  410 + }
  411 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 1),
  412 + "路牌工时", new Color(0x96b9d7));
  413 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 2),
  414 + "营运班次数", new Color(0x96b9d7));
  415 +
  416 + // 构建每个路牌的班次数据
  417 + for (int i = 0; i < lpObjList.size(); i++) {
  418 + LpObj lpObj = lpObjList.get(i);
  419 + XSSFRow lpRow = sheet.createRow((short) (i + 1));
  420 + PoiUtils.createStringXSSFCell(wb, lpRow, (short) 0, lpObj.getLpname());
  421 + for (int j = 0; j < groupCount; j++) {
  422 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 1));
  423 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 2));
  424 + }
  425 + for (BcObj bcObj : lpObj.getBcObjList()) {
  426 + Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 1));
  427 + cell.setCellValue(bcObj.getFcsj());
  428 + }
  429 + // 路牌工时/班次数
  430 + PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 1),
  431 + lpObj.getZgs() / 60);
  432 + // 营运班次数
  433 + PoiUtils.createIntegerXSSFCell(wb, lpRow, (short) (groupCount * 2 + 2),
  434 + lpObj.getZbc());
  435 + }
  436 +
  437 + // 自适应单元格长宽
  438 + sheet.autoSizeColumn(0);
  439 + for (int i = 0; i < groupCount; i++) {
  440 + sheet.autoSizeColumn(i * 2 + 1);
  441 + sheet.autoSizeColumn(i * 2 + 2);
  442 + }
  443 + sheet.autoSizeColumn(groupCount * 2 + 1);
  444 + sheet.autoSizeColumn(groupCount * 2 + 2);
  445 +
  446 + // 锁定行首,列首
  447 + sheet.createFreezePane(1, 1);
  448 +
  449 + //-------------------------------- 2、统计数据 -------------------------------//
  450 + List<StatInfo> statInfos = dtInfos.getStatInfoList();
  451 +
  452 + // 创建总的统计数据格式
  453 + // 第一行 统计数据
  454 + // 第二行 序号,统计项目(8个单元格合并),统计数值
  455 + // 第三行开始数据,一共20行
  456 +
  457 + int startrow = lpObjList.size() + 3;
  458 + for (int i = startrow; i <= startrow + 22; i++) {
  459 + XSSFRow xssfRow = sheet.createRow(i);
  460 + for (int j = 0; j < 10; j++) {
  461 + PoiUtils.createStringXSSFCell(wb, xssfRow, (short) j, "");
  462 +
  463 + }
  464 + }
  465 + // 合并第一行
  466 + sheet.addMergedRegion(new CellRangeAddress(startrow, startrow, 0, 9));
  467 + sheet.getRow(startrow).getCell(0).setCellValue("统计数据");
  468 + // 合并第二行
  469 + sheet.getRow(startrow + 1).getCell(0).setCellValue("序号");
  470 + sheet.getRow(startrow + 1).getCell(1).setCellValue("统计项目");
  471 + sheet.getRow(startrow + 1).getCell(9).setCellValue("统计数值");
  472 + sheet.addMergedRegion(new CellRangeAddress(startrow + 1, startrow + 1, 1, 8));
  473 + // 处理后面具体统计行
  474 + for (int row = startrow + 2; row <= startrow + 2 + statInfos.size(); row++) {
  475 + sheet.addMergedRegion(new CellRangeAddress(row, row, 1, 8));
  476 + }
  477 +
  478 + for (int i = 0; i < statInfos.size(); i++) {
  479 + StatInfo statInfo = statInfos.get(i);
  480 +
  481 + // 1、统计序号
  482 + PoiUtils.setIntegerStyleXSSFCellStyle(wb, sheet.getRow(startrow + 2 + i).getCell(0));
  483 + sheet.getRow(startrow + 2 + i).getCell(0).setCellValue(i);
  484 +
  485 + // 2、统计项目
  486 + sheet.getRow(startrow + 2 + i).getCell(1).setCellValue(statInfo.getStatItem());
  487 +
  488 + // 3、统计数值
  489 + PoiUtils.setDoubleStyleXSSFCellStyle(wb, sheet.getRow(startrow + 2 + i).getCell(9));
  490 + sheet.getRow(startrow + 2 + i).getCell(9).setCellValue(statInfo.getStatValue());
  491 + }
  492 +
  493 + // 最后内存写入文件
  494 + String filepath = dataToolsProperties.getFileoutputDir() +
  495 + File.separator +
  496 + "动态时刻表-" +
  497 + new DateTime().toString("yyyyMMddHHmmss") + ".xlsx";
  498 + FileOutputStream fileOut = new FileOutputStream(filepath);
  499 + wb.write(fileOut);
  500 +
  501 + DataToolsFile dataToolsFile = new DataToolsFile();
  502 + dataToolsFile.setFileType(DataToolsFileType.XLSX);
  503 + dataToolsFile.setFile(new File(filepath));
  504 +
  505 + return dataToolsFile;
  506 +
  507 + } catch (Exception exp) {
  508 + LOGGER.info("//---------------- 动态时刻表输出 failed... ----------------//");
  509 +
  510 + StringWriter sw = new StringWriter();
  511 + exp.printStackTrace(new PrintWriter(sw));
  512 + LOGGER.info(sw.toString());
  513 +
  514 + throw new ScheduleException(exp);
  515 + }
  516 +
  517 + }
366 } 518 }
src/main/java/com/bsth/service/schedule/datatools/TTinfoDetailDynamicData.java 0 → 100644
  1 +package com.bsth.service.schedule.datatools;
  2 +
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsFile;
  5 +import com.fasterxml.jackson.annotation.JsonCreator;
  6 +import com.fasterxml.jackson.annotation.JsonValue;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * 动态时刻表数据。
  12 + */
  13 +public interface TTinfoDetailDynamicData {
  14 +
  15 + //---------------------- 生成时刻表用对象(以下) ---------------------//
  16 + public static enum BcType { // 班次类型枚举
  17 + IN("in"), // 进场
  18 + OUT("out"), // 出场
  19 + BD("bd"), // 早例保
  20 + LC("lc"), // 晚例保
  21 + NORMAL("normal"); // 正常
  22 + private String flag;
  23 +
  24 + @JsonCreator
  25 + private BcType(String flag) {
  26 + this.flag = flag;
  27 + }
  28 +
  29 + @JsonValue
  30 + public String getFlag() {
  31 + return flag;
  32 + }
  33 +
  34 + public void setFlag(String flag) {
  35 + this.flag = flag;
  36 + }
  37 + }
  38 +
  39 + public static class BcObj { // 班次对象
  40 + /** 班次时间 */
  41 + private Integer bcsj;
  42 + /** 停站时间 */
  43 + private Integer ssj;
  44 + /** 吃饭时间 */
  45 + private Integer eatsj;
  46 +
  47 + /** 停车场id */
  48 + private Integer tccid;
  49 + /** 起点站id */
  50 + private Integer qdzid;
  51 + /** 终点站id */
  52 + private Integer zdzid;
  53 +
  54 + /** 是否上行 */
  55 + private Boolean isUp;
  56 +
  57 + /** 班次类型 */
  58 + private BcType bcType;
  59 + /** 发车时刻 */
  60 + private String fcsj;
  61 +
  62 + /** 第几圈(从1开始) */
  63 + private Integer groupNo;
  64 + /** 圈里第几个班次(1或者2) */
  65 + private Integer groupBcNo;
  66 +
  67 + public Integer getBcsj() {
  68 + return bcsj;
  69 + }
  70 +
  71 + public void setBcsj(Integer bcsj) {
  72 + this.bcsj = bcsj;
  73 + }
  74 +
  75 + public Integer getSsj() {
  76 + return ssj;
  77 + }
  78 +
  79 + public void setSsj(Integer ssj) {
  80 + this.ssj = ssj;
  81 + }
  82 +
  83 + public Integer getEatsj() {
  84 + return eatsj;
  85 + }
  86 +
  87 + public void setEatsj(Integer eatsj) {
  88 + this.eatsj = eatsj;
  89 + }
  90 +
  91 + public Integer getTccid() {
  92 + return tccid;
  93 + }
  94 +
  95 + public void setTccid(Integer tccid) {
  96 + this.tccid = tccid;
  97 + }
  98 +
  99 + public Integer getQdzid() {
  100 + return qdzid;
  101 + }
  102 +
  103 + public void setQdzid(Integer qdzid) {
  104 + this.qdzid = qdzid;
  105 + }
  106 +
  107 + public Integer getZdzid() {
  108 + return zdzid;
  109 + }
  110 +
  111 + public void setZdzid(Integer zdzid) {
  112 + this.zdzid = zdzid;
  113 + }
  114 +
  115 + public BcType getBcType() {
  116 + return bcType;
  117 + }
  118 +
  119 + public void setBcType(BcType bcType) {
  120 + this.bcType = bcType;
  121 + }
  122 +
  123 + public String getFcsj() {
  124 + return fcsj;
  125 + }
  126 +
  127 + public void setFcsj(String fcsj) {
  128 + this.fcsj = fcsj;
  129 + }
  130 +
  131 + public Boolean getIsUp() {
  132 + return isUp;
  133 + }
  134 +
  135 + public void setIsUp(Boolean isUp) {
  136 + this.isUp = isUp;
  137 + }
  138 +
  139 + public Integer getGroupNo() {
  140 + return groupNo;
  141 + }
  142 +
  143 + public void setGroupNo(Integer groupNo) {
  144 + this.groupNo = groupNo;
  145 + }
  146 +
  147 + public Integer getGroupBcNo() {
  148 + return groupBcNo;
  149 + }
  150 +
  151 + public void setGroupBcNo(Integer groupBcNo) {
  152 + this.groupBcNo = groupBcNo;
  153 + }
  154 + }
  155 +
  156 + public static class LpObj { // 路牌对象
  157 + /** 路牌名字 */
  158 + private String lpname;
  159 + /** 每圈的第一个班次是否上行 */
  160 + private Boolean isUp;
  161 +
  162 + /** 第一个班次起点站路由id */
  163 + private Integer stationRouteId1;
  164 + /** 第二个班次起点站路由id */
  165 + private Integer stationRouteId2;
  166 +
  167 + /** 班次列表 */
  168 + private List<BcObj> bcObjList;
  169 + /** 总圈数 */
  170 + private Integer groupCount;
  171 +
  172 + /** 总工时 */
  173 + private Double zgs;
  174 + /** 总班次 */
  175 + private Integer zbc;
  176 +
  177 +
  178 + public String getLpname() {
  179 + return lpname;
  180 + }
  181 +
  182 + public void setLpname(String lpname) {
  183 + this.lpname = lpname;
  184 + }
  185 +
  186 + public Boolean getIsUp() {
  187 + return isUp;
  188 + }
  189 +
  190 + public void setIsUp(Boolean isUp) {
  191 + this.isUp = isUp;
  192 + }
  193 +
  194 + public List<BcObj> getBcObjList() {
  195 + return bcObjList;
  196 + }
  197 +
  198 + public void setBcObjList(List<BcObj> bcObjList) {
  199 + this.bcObjList = bcObjList;
  200 + }
  201 +
  202 + public Integer getGroupCount() {
  203 + return groupCount;
  204 + }
  205 +
  206 + public void setGroupCount(Integer groupCount) {
  207 + this.groupCount = groupCount;
  208 + }
  209 +
  210 + public Double getZgs() {
  211 + return zgs;
  212 + }
  213 +
  214 + public void setZgs(Double zgs) {
  215 + this.zgs = zgs;
  216 + }
  217 +
  218 + public Integer getZbc() {
  219 + return zbc;
  220 + }
  221 +
  222 + public void setZbc(Integer zbc) {
  223 + this.zbc = zbc;
  224 + }
  225 +
  226 + public Integer getStationRouteId1() {
  227 + return stationRouteId1;
  228 + }
  229 +
  230 + public void setStationRouteId1(Integer stationRouteId1) {
  231 + this.stationRouteId1 = stationRouteId1;
  232 + }
  233 +
  234 + public Integer getStationRouteId2() {
  235 + return stationRouteId2;
  236 + }
  237 +
  238 + public void setStationRouteId2(Integer stationRouteId2) {
  239 + this.stationRouteId2 = stationRouteId2;
  240 + }
  241 + }
  242 +
  243 + public static class StatInfo { // 统计数据对象
  244 + /** 统计项目 */
  245 + private String statItem;
  246 + /** 统计值 */
  247 + private Double statValue;
  248 +
  249 + public String getStatItem() {
  250 + return statItem;
  251 + }
  252 +
  253 + public void setStatItem(String statItem) {
  254 + this.statItem = statItem;
  255 + }
  256 +
  257 + public Double getStatValue() {
  258 + return statValue;
  259 + }
  260 +
  261 + public void setStatValue(Double statValue) {
  262 + this.statValue = statValue;
  263 + }
  264 + }
  265 +
  266 + public static class DTInfos { // 所有数据信息
  267 + /** 路牌班次数据列表 */
  268 + private List<LpObj> lpObjList;
  269 + /** 统计数据列表 */
  270 + private List<StatInfo> statInfoList;
  271 +
  272 + public List<LpObj> getLpObjList() {
  273 + return lpObjList;
  274 + }
  275 +
  276 + public void setLpObjList(List<LpObj> lpObjList) {
  277 + this.lpObjList = lpObjList;
  278 + }
  279 +
  280 + public List<StatInfo> getStatInfoList() {
  281 + return statInfoList;
  282 + }
  283 +
  284 + public void setStatInfoList(List<StatInfo> statInfoList) {
  285 + this.statInfoList = statInfoList;
  286 + }
  287 + }
  288 +
  289 + //---------------------- 生成时刻表用对象(以上) ---------------------//
  290 +
  291 + /**
  292 + * 导出动态时刻表数据。
  293 + * @param dtInfos
  294 + * @return
  295 + * @throws ScheduleException
  296 + */
  297 + public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException;
  298 +}
src/main/java/com/bsth/service/schedule/impl/TTInfoDetailServiceImpl.java
@@ -19,6 +19,7 @@ import com.bsth.service.StationRouteService; @@ -19,6 +19,7 @@ import com.bsth.service.StationRouteService;
19 import com.bsth.service.schedule.GuideboardInfoService; 19 import com.bsth.service.schedule.GuideboardInfoService;
20 import com.bsth.service.schedule.TTInfoDetailService; 20 import com.bsth.service.schedule.TTInfoDetailService;
21 import com.bsth.service.schedule.datatools.TTInfoDetailForEdit; 21 import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;
  22 +import com.bsth.service.schedule.datatools.TTinfoDetailDynamicData;
22 import com.bsth.service.schedule.exception.ScheduleException; 23 import com.bsth.service.schedule.exception.ScheduleException;
23 import com.bsth.service.schedule.utils.DataToolsFile; 24 import com.bsth.service.schedule.utils.DataToolsFile;
24 import com.bsth.service.schedule.utils.DataToolsFileType; 25 import com.bsth.service.schedule.utils.DataToolsFileType;
@@ -86,6 +87,10 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im @@ -86,6 +87,10 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
86 private TTInfoDetailForEdit ttInfoDetailForEdit; 87 private TTInfoDetailForEdit ttInfoDetailForEdit;
87 88
88 @Autowired 89 @Autowired
  90 + @Qualifier(value = "ttInfoDetail_dataTool")
  91 + private TTinfoDetailDynamicData tTinfoDetailDynamicData;
  92 +
  93 + @Autowired
89 private JdbcTemplate jdbcTemplate; 94 private JdbcTemplate jdbcTemplate;
90 95
91 /** 96 /**
@@ -134,6 +139,10 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im @@ -134,6 +139,10 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
134 return dataToolsService.exportData(params); 139 return dataToolsService.exportData(params);
135 } 140 }
136 141
  142 + @Override
  143 + public DataToolsFile exportDynamicTTinfo(TTinfoDetailDynamicData.DTInfos dtInfos) throws ScheduleException {
  144 + return tTinfoDetailDynamicData.exportDynamicTTinfo(dtInfos);
  145 + }
137 146
138 @Override 147 @Override
139 public TTInfoDetailForEdit.EditInfo getEditInfo(Integer xlid, Long ttid, Long maxfcno) throws ScheduleException { 148 public TTInfoDetailForEdit.EditInfo getEditInfo(Integer xlid, Long ttid, Long maxfcno) throws ScheduleException {
src/main/java/com/bsth/service/schedule/utils/PoiUtils.java
1 package com.bsth.service.schedule.utils; 1 package com.bsth.service.schedule.utils;
2 2
3 import org.apache.poi.hssf.usermodel.HSSFDateUtil; 3 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
4 -import org.apache.poi.ss.usermodel.Cell;  
5 -import org.apache.poi.xssf.usermodel.XSSFCell; 4 +import org.apache.poi.ss.usermodel.*;
  5 +import org.apache.poi.ss.util.WorkbookUtil;
  6 +import org.apache.poi.xssf.usermodel.*;
6 7
  8 +import java.awt.Color;
7 import java.text.DecimalFormat; 9 import java.text.DecimalFormat;
8 import java.text.SimpleDateFormat; 10 import java.text.SimpleDateFormat;
9 import java.util.Date; 11 import java.util.Date;
@@ -52,4 +54,152 @@ public class PoiUtils { @@ -52,4 +54,152 @@ public class PoiUtils {
52 } 54 }
53 return cellValue; 55 return cellValue;
54 } 56 }
  57 +
  58 + public static XSSFCell createStringXSSFCell(
  59 + XSSFWorkbook xssfWorkbook, XSSFRow xssfRow, short column, String value,
  60 + Color backgroundColor) {
  61 + return createXSSFCell(
  62 + xssfWorkbook, xssfRow, column,
  63 + value, XSSFCell.CELL_TYPE_STRING,
  64 + HorizontalAlignment.CENTER, VerticalAlignment.CENTER,
  65 + BorderStyle.MEDIUM, new Color(0xdedede),
  66 + (short) 13, new Color(0x2765A7), "宋体",
  67 + backgroundColor, FillPatternType.SOLID_FOREGROUND
  68 + );
  69 + }
  70 +
  71 + public static XSSFCell createStringXSSFCell(
  72 + XSSFWorkbook xssfWorkbook, XSSFRow xssfRow, short column, String value) {
  73 + return createXSSFCell(
  74 + xssfWorkbook, xssfRow, column,
  75 + value, XSSFCell.CELL_TYPE_STRING,
  76 + HorizontalAlignment.CENTER, VerticalAlignment.CENTER,
  77 + BorderStyle.MEDIUM, new Color(0xdedede),
  78 + (short) 13, new Color(0x2765A7), "宋体",
  79 + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND
  80 + );
  81 + }
  82 +
  83 + public static XSSFCell createDoubleXSSFCell(
  84 + XSSFWorkbook xssfWorkbook, XSSFRow xssfRow, short column, Double value) {
  85 + return createXSSFCell(
  86 + xssfWorkbook, xssfRow, column,
  87 + value, XSSFCell.CELL_TYPE_NUMERIC,
  88 + HorizontalAlignment.CENTER, VerticalAlignment.CENTER,
  89 + BorderStyle.MEDIUM, new Color(0xdedede),
  90 + (short) 13, new Color(0x2765A7), "宋体",
  91 + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND
  92 + );
  93 + }
  94 +
  95 + public static XSSFCell createIntegerXSSFCell(
  96 + XSSFWorkbook xssfWorkbook, XSSFRow xssfRow, short column, Integer value) {
  97 + return createXSSFCell(
  98 + xssfWorkbook, xssfRow, column,
  99 + value, XSSFCell.CELL_TYPE_NUMERIC,
  100 + HorizontalAlignment.CENTER, VerticalAlignment.CENTER,
  101 + BorderStyle.MEDIUM, new Color(0xdedede),
  102 + (short) 13, new Color(0x2765A7), "宋体",
  103 + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND
  104 + );
  105 + }
  106 +
  107 + public static XSSFCell createBlankXSSFCell(
  108 + XSSFWorkbook xssfWorkbook, XSSFRow xssfRow, short column) {
  109 + return createXSSFCell(
  110 + xssfWorkbook, xssfRow, column,
  111 + null, XSSFCell.CELL_TYPE_BLANK,
  112 + HorizontalAlignment.CENTER, VerticalAlignment.CENTER,
  113 + BorderStyle.MEDIUM, new Color(0xdedede),
  114 + (short) 13, new Color(0x2765A7), "宋体",
  115 + new Color(0xffffff), FillPatternType.SOLID_FOREGROUND
  116 + );
  117 + }
  118 +
  119 + public static XSSFCell setIntegerStyleXSSFCellStyle(XSSFWorkbook xssfWorkbook, XSSFCell xssfCell) {
  120 + CreationHelper creationHelper = xssfWorkbook.getCreationHelper();
  121 + XSSFCellStyle xssfCellStyle = xssfCell.getCellStyle();
  122 + xssfCellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("0"));
  123 + return xssfCell;
  124 + }
  125 + public static XSSFCell setDoubleStyleXSSFCellStyle(XSSFWorkbook xssfWorkbook, XSSFCell xssfCell) {
  126 + CreationHelper creationHelper = xssfWorkbook.getCreationHelper();
  127 + XSSFCellStyle xssfCellStyle = xssfCell.getCellStyle();
  128 + xssfCellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("0.00"));
  129 + return xssfCell;
  130 + }
  131 +
  132 + public static XSSFCell createXSSFCell(
  133 + XSSFWorkbook xssfWorkbook, XSSFRow xssfRow, short column,
  134 + Object value, int valueType,
  135 + HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment,
  136 + BorderStyle borderStyle, Color borderColor,
  137 + short fontSize, Color fontColor, String fontName,
  138 + Color backgroudColor, FillPatternType fillPatternType) {
  139 + CreationHelper creationHelper = xssfWorkbook.getCreationHelper();
  140 +
  141 + // 1、创建单元格对象
  142 + XSSFCell cell = xssfRow.createCell(column);
  143 +
  144 + // 2、设定样式
  145 + XSSFCellStyle cellStyle = xssfWorkbook.createCellStyle();
  146 +
  147 + // 设定值
  148 + if (valueType == XSSFCell.CELL_TYPE_STRING) {
  149 + cell.setCellValue(creationHelper.createRichTextString(
  150 + WorkbookUtil.createSafeSheetName(String.valueOf(value))));
  151 + } else if (valueType == XSSFCell.CELL_TYPE_NUMERIC) {
  152 + if (value instanceof Date) { // 日期
  153 + cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-mm-dd"));
  154 + cell.setCellValue((Date) value);
  155 + } else if (value instanceof Double) {
  156 + cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("0.00"));
  157 + cell.setCellValue((Double) value);
  158 + } else if (value instanceof Integer) {
  159 + cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("0"));
  160 + cell.setCellValue(Double.valueOf(value.toString()));
  161 + } else {
  162 + throw new RuntimeException("只支持 Date Double Integer 单元格类型");
  163 + }
  164 + } else if (valueType == XSSFCell.CELL_TYPE_BLANK) {
  165 + cell.setCellType(Cell.CELL_TYPE_BLANK);
  166 + }
  167 +
  168 + else {
  169 + throw new RuntimeException("暂时不支持字符串、日期、数字以为的类型");
  170 + }
  171 +
  172 + // 对齐方式
  173 + cellStyle.setAlignment(horizontalAlignment);
  174 + cellStyle.setVerticalAlignment(verticalAlignment);
  175 +
  176 + // 边框样式
  177 + cellStyle.setBorderTop(borderStyle);
  178 + cellStyle.setTopBorderColor(new XSSFColor(borderColor));
  179 + cellStyle.setBorderBottom(borderStyle);
  180 + cellStyle.setBottomBorderColor(new XSSFColor(borderColor));
  181 + cellStyle.setBorderLeft(borderStyle);
  182 + cellStyle.setLeftBorderColor(new XSSFColor(borderColor));
  183 + cellStyle.setBorderRight(borderStyle);
  184 + cellStyle.setRightBorderColor(new XSSFColor(borderColor));
  185 +
  186 + // 字体颜色
  187 + XSSFFont font = xssfWorkbook.createFont();
  188 + font.setColor(new XSSFColor(fontColor));
  189 + font.setFontHeightInPoints(fontSize);
  190 + font.setFontName(fontName);
  191 + cellStyle.setFont(font);
  192 +
  193 +
  194 + // 单元背景色
  195 + cellStyle.setFillForegroundColor(new XSSFColor(backgroudColor));
  196 + cellStyle.setFillPattern(fillPatternType);
  197 +
  198 + // TODO
  199 +
  200 + cell.setCellStyle(cellStyle);
  201 + return cell;
  202 + }
  203 +
55 } 204 }
  205 +
src/main/resources/datatools/ktrs/ttinfodetailDataOutputMetaData.ktr
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<transformation>  
3 - <info>  
4 - <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x51fa;&#x5143;&#x6570;&#x636e;</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>filepath</name>  
14 - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;ttinfodetail_test.xls</default_value>  
15 - <description>&#x65f6;&#x523b;&#x8868;excel&#x5bfc;&#x51fa;&#x6587;&#x4ef6;&#x8def;&#x5f84;&#x540d;</description>  
16 - </parameter>  
17 - <parameter>  
18 - <name>injectktrfile</name>  
19 - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control_parent&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataOutput.ktr</default_value>  
20 - <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>  
21 - </parameter>  
22 - <parameter>  
23 - <name>ttinfoid</name>  
24 - <default_value>56</default_value>  
25 - <description>&#x65f6;&#x523b;&#x8868;id</description>  
26 - </parameter>  
27 - </parameters>  
28 - <log>  
29 -<trans-log-table><connection/>  
30 -<schema/>  
31 -<table/>  
32 -<size_limit_lines/>  
33 -<interval/>  
34 -<timeout_days/>  
35 -<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>  
36 -<perf-log-table><connection/>  
37 -<schema/>  
38 -<table/>  
39 -<interval/>  
40 -<timeout_days/>  
41 -<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>  
42 -<channel-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>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>  
47 -<step-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>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>  
52 -<metrics-log-table><connection/>  
53 -<schema/>  
54 -<table/>  
55 -<timeout_days/>  
56 -<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>  
57 - </log>  
58 - <maxdate>  
59 - <connection/>  
60 - <table/>  
61 - <field/>  
62 - <offset>0.0</offset>  
63 - <maxdiff>0.0</maxdiff>  
64 - </maxdate>  
65 - <size_rowset>10000</size_rowset>  
66 - <sleep_time_empty>50</sleep_time_empty>  
67 - <sleep_time_full>50</sleep_time_full>  
68 - <unique_connections>N</unique_connections>  
69 - <feedback_shown>Y</feedback_shown>  
70 - <feedback_size>50000</feedback_size>  
71 - <using_thread_priorities>Y</using_thread_priorities>  
72 - <shared_objects_file/>  
73 - <capture_step_performance>N</capture_step_performance>  
74 - <step_performance_capturing_delay>1000</step_performance_capturing_delay>  
75 - <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>  
76 - <dependencies>  
77 - </dependencies>  
78 - <partitionschemas>  
79 - </partitionschemas>  
80 - <slaveservers>  
81 - </slaveservers>  
82 - <clusterschemas>  
83 - </clusterschemas>  
84 - <created_user>-</created_user>  
85 - <created_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</created_date>  
86 - <modified_user>-</modified_user>  
87 - <modified_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</modified_date>  
88 - <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>  
89 - <is_key_private>N</is_key_private>  
90 - </info>  
91 - <notepads>  
92 - <notepad>  
93 - <note>TODO&#xff1a;&#x5982;&#x679c;groupby &#x52a0;&#x5165;bctype&#xff0c;&#xa;&#x5219;&#x4ee5;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;&#xff0c;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5206;&#x7ec4;&#x7684;&#x6570;&#x636e;&#x53ef;&#x80fd;&#x91cd;&#x590d;&#xff0c;&#xa;&#x5e94;&#x4e3a;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x53ef;&#x80fd;&#x4e0d;&#x4e00;&#x6837;&#xff08;&#x5bfc;&#x5165;&#x4e4b;&#x540e;&#x4eba;&#x4e3a;&#x4fee;&#x6539;&#x7684;&#xff0c;&#x5982;&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6539;&#x6210;&#x533a;&#x95f4;&#xff09;&#xff0c;&#xa;&#x56e0;&#x4e3a;&#x5bfc;&#x51fa;&#x65f6;&#x5fc5;&#x987b;&#x6570;&#x636e;&#x4e0d;&#x91cd;&#x590d;&#xff0c;&#x8fd9;&#x91cc;&#x7684;&#x89e3;&#x51b3;&#x65b9;&#x6cd5;&#xff0c;&#x53ea;&#x4f7f;&#x7528;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;&#x5206;&#x7ec4;&#xff0c;&#xa;&#x4ee5;&#x540e;&#x5efa;&#x8bae;&#xff0c;&#x8fd8;&#x662f;&#x539f;&#x6765;&#x7684;&#x65b9;&#x5f0f;&#x5206;&#x7ec4;&#xff0c;&#x7136;&#x540e;&#x628a;&#x66f4;&#x65b0;&#x65f6;&#x95f4;&#x665a;&#x7684;&#x53bb;&#x9664;&#xa;&#xa;&#x4ee5;&#x540e;&#x6539;&#x6210;&#x53bb;&#x9664;&#x91cd;&#x590d;&#x7eaa;&#x5f55;</note>  
94 - <xloc>46</xloc>  
95 - <yloc>400</yloc>  
96 - <width>406</width>  
97 - <heigth>122</heigth>  
98 - <fontname>YaHei Consolas Hybrid</fontname>  
99 - <fontsize>12</fontsize>  
100 - <fontbold>N</fontbold>  
101 - <fontitalic>N</fontitalic>  
102 - <fontcolorred>0</fontcolorred>  
103 - <fontcolorgreen>0</fontcolorgreen>  
104 - <fontcolorblue>0</fontcolorblue>  
105 - <backgroundcolorred>255</backgroundcolorred>  
106 - <backgroundcolorgreen>205</backgroundcolorgreen>  
107 - <backgroundcolorblue>112</backgroundcolorblue>  
108 - <bordercolorred>100</bordercolorred>  
109 - <bordercolorgreen>100</bordercolorgreen>  
110 - <bordercolorblue>100</bordercolorblue>  
111 - <drawshadow>Y</drawshadow>  
112 - </notepad>  
113 - </notepads>  
114 - <connection>  
115 - <name>192.168.168.1_jwgl_dw</name>  
116 - <server>192.168.168.1</server>  
117 - <type>ORACLE</type>  
118 - <access>Native</access>  
119 - <database>orcl</database>  
120 - <port>1521</port>  
121 - <username>jwgl_dw</username>  
122 - <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>  
123 - <servername/>  
124 - <data_tablespace/>  
125 - <index_tablespace/>  
126 - <attributes>  
127 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
128 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
129 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
130 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
131 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
132 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
133 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
134 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
135 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
136 - </attributes>  
137 - </connection>  
138 - <connection>  
139 - <name>bus_control_variable</name>  
140 - <server>&#x24;&#x7b;v_db_ip&#x7d;</server>  
141 - <type>MYSQL</type>  
142 - <access>Native</access>  
143 - <database>&#x24;&#x7b;v_db_dname&#x7d;</database>  
144 - <port>3306</port>  
145 - <username>&#x24;&#x7b;v_db_uname&#x7d;</username>  
146 - <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>  
147 - <servername/>  
148 - <data_tablespace/>  
149 - <index_tablespace/>  
150 - <attributes>  
151 - <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>  
152 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
153 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
154 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
155 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
156 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
157 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
158 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
159 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
160 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
161 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
162 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
163 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
164 - </attributes>  
165 - </connection>  
166 - <connection>  
167 - <name>bus_control_&#x516c;&#x53f8;_201</name>  
168 - <server>localhost</server>  
169 - <type>MYSQL</type>  
170 - <access>Native</access>  
171 - <database>control</database>  
172 - <port>3306</port>  
173 - <username>root</username>  
174 - <password>Encrypted </password>  
175 - <servername/>  
176 - <data_tablespace/>  
177 - <index_tablespace/>  
178 - <attributes>  
179 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
180 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
181 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
182 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
183 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
184 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
185 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
186 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
187 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
188 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
189 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
190 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
191 - </attributes>  
192 - </connection>  
193 - <connection>  
194 - <name>bus_control_&#x672c;&#x673a;</name>  
195 - <server>localhost</server>  
196 - <type>MYSQL</type>  
197 - <access>Native</access>  
198 - <database>control</database>  
199 - <port>3306</port>  
200 - <username>root</username>  
201 - <password>Encrypted </password>  
202 - <servername/>  
203 - <data_tablespace/>  
204 - <index_tablespace/>  
205 - <attributes>  
206 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
207 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
208 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
209 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
210 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
211 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
212 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
213 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
214 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
215 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
216 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
217 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
218 - </attributes>  
219 - </connection>  
220 - <connection>  
221 - <name>xlab_mysql_youle</name>  
222 - <server>101.231.124.8</server>  
223 - <type>MYSQL</type>  
224 - <access>Native</access>  
225 - <database>xlab_youle</database>  
226 - <port>45687</port>  
227 - <username>xlab-youle</username>  
228 - <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>  
229 - <servername/>  
230 - <data_tablespace/>  
231 - <index_tablespace/>  
232 - <attributes>  
233 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
234 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
235 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
236 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
237 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
238 - <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>  
239 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
240 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
241 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
242 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
243 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
244 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
245 - </attributes>  
246 - </connection>  
247 - <connection>  
248 - <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>  
249 - <server>localhost</server>  
250 - <type>MYSQL</type>  
251 - <access>Native</access>  
252 - <database>xlab_youle</database>  
253 - <port>3306</port>  
254 - <username>root</username>  
255 - <password>Encrypted </password>  
256 - <servername/>  
257 - <data_tablespace/>  
258 - <index_tablespace/>  
259 - <attributes>  
260 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
261 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
262 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
263 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
264 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
265 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
266 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
267 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
268 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
269 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
270 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
271 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
272 - </attributes>  
273 - </connection>  
274 - <connection>  
275 - <name>xlab_youle</name>  
276 - <server/>  
277 - <type>MYSQL</type>  
278 - <access>JNDI</access>  
279 - <database>xlab_youle</database>  
280 - <port>1521</port>  
281 - <username/>  
282 - <password>Encrypted </password>  
283 - <servername/>  
284 - <data_tablespace/>  
285 - <index_tablespace/>  
286 - <attributes>  
287 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
288 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
289 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
290 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
291 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
292 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
293 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
294 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
295 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
296 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
297 - </attributes>  
298 - </connection>  
299 - <order>  
300 - <hop> <from>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
301 - <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</from><to>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</to><enabled>Y</enabled> </hop>  
302 - <hop> <from>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</from><to>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</to><enabled>Y</enabled> </hop>  
303 - <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>  
304 - <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>  
305 - <hop> <from>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>  
306 - <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
307 - <hop> <from>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
308 - <hop> <from>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
309 - <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
310 - </order>  
311 - <step>  
312 - <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>  
313 - <type>MetaInject</type>  
314 - <description/>  
315 - <distribute>Y</distribute>  
316 - <custom_distribution/>  
317 - <copies>1</copies>  
318 - <partitioning>  
319 - <method>none</method>  
320 - <schema_name/>  
321 - </partitioning>  
322 - <specification_method>filename</specification_method>  
323 - <trans_object_id/>  
324 - <trans_name/>  
325 - <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>  
326 - <directory_path/>  
327 - <source_step/>  
328 - <source_output_fields> </source_output_fields> <target_file/>  
329 - <no_execution>N</no_execution>  
330 - <stream_source_step/>  
331 - <stream_target_step/>  
332 - <mappings> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>  
333 - <target_attribute_key>TARGET_TYPE</target_attribute_key>  
334 - <target_detail>Y</target_detail>  
335 - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>  
336 - <source_field>targettype</source_field>  
337 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>  
338 - <target_attribute_key>TYPE</target_attribute_key>  
339 - <target_detail>Y</target_detail>  
340 - <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>  
341 - <source_field>fieldtype</source_field>  
342 - </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>  
343 - <target_attribute_key>NAME</target_attribute_key>  
344 - <target_detail>Y</target_detail>  
345 - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>  
346 - <source_field>valuefieldname</source_field>  
347 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>  
348 - <target_attribute_key>NAME</target_attribute_key>  
349 - <target_detail>Y</target_detail>  
350 - <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>  
351 - <source_field>fieldname</source_field>  
352 - </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>  
353 - <target_attribute_key>TARGET_NAME</target_attribute_key>  
354 - <target_detail>Y</target_detail>  
355 - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>  
356 - <source_field>targetfieldname</source_field>  
357 - </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>  
358 - <target_attribute_key>KEY_VALUE</target_attribute_key>  
359 - <target_detail>Y</target_detail>  
360 - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>  
361 - <source_field>keyvalue</source_field>  
362 - </mapping> </mappings> <cluster_schema/>  
363 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
364 - <xloc>640</xloc>  
365 - <yloc>64</yloc>  
366 - <draw>Y</draw>  
367 - </GUI>  
368 - </step>  
369 -  
370 - <step>  
371 - <name>&#x53bb;&#x9664;&#x91cd;&#x590d;&#x8bb0;&#x5f55;</name>  
372 - <type>Unique</type>  
373 - <description/>  
374 - <distribute>Y</distribute>  
375 - <custom_distribution/>  
376 - <copies>1</copies>  
377 - <partitioning>  
378 - <method>none</method>  
379 - <schema_name/>  
380 - </partitioning>  
381 - <count_rows>N</count_rows>  
382 - <count_field/>  
383 - <reject_duplicate_row>N</reject_duplicate_row>  
384 - <error_description/>  
385 - <fields> </fields> <cluster_schema/>  
386 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
387 - <xloc>842</xloc>  
388 - <yloc>592</yloc>  
389 - <draw>Y</draw>  
390 - </GUI>  
391 - </step>  
392 -  
393 - <step>  
394 - <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>  
395 - <type>SelectValues</type>  
396 - <description/>  
397 - <distribute>Y</distribute>  
398 - <custom_distribution/>  
399 - <copies>1</copies>  
400 - <partitioning>  
401 - <method>none</method>  
402 - <schema_name/>  
403 - </partitioning>  
404 - <fields> <field> <name>fieldname</name>  
405 - <rename/>  
406 - <length>-2</length>  
407 - <precision>-2</precision>  
408 - </field> <field> <name>fieldtype</name>  
409 - <rename/>  
410 - <length>-2</length>  
411 - <precision>-2</precision>  
412 - </field> <field> <name>fcno</name>  
413 - <rename/>  
414 - <length>-2</length>  
415 - <precision>-2</precision>  
416 - </field> <select_unspecified>N</select_unspecified>  
417 - </fields> <cluster_schema/>  
418 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
419 - <xloc>533</xloc>  
420 - <yloc>325</yloc>  
421 - <draw>Y</draw>  
422 - </GUI>  
423 - </step>  
424 -  
425 - <step>  
426 - <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>  
427 - <type>SortRows</type>  
428 - <description/>  
429 - <distribute>Y</distribute>  
430 - <custom_distribution/>  
431 - <copies>1</copies>  
432 - <partitioning>  
433 - <method>none</method>  
434 - <schema_name/>  
435 - </partitioning>  
436 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
437 - <prefix>out</prefix>  
438 - <sort_size>1000000</sort_size>  
439 - <free_memory/>  
440 - <compress>N</compress>  
441 - <compress_variable/>  
442 - <unique_rows>N</unique_rows>  
443 - <fields>  
444 - <field>  
445 - <name>fcno</name>  
446 - <ascending>Y</ascending>  
447 - <case_sensitive>N</case_sensitive>  
448 - <presorted>N</presorted>  
449 - </field>  
450 - </fields>  
451 - <cluster_schema/>  
452 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
453 - <xloc>642</xloc>  
454 - <yloc>325</yloc>  
455 - <draw>Y</draw>  
456 - </GUI>  
457 - </step>  
458 -  
459 - <step>  
460 - <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</name>  
461 - <type>TableInput</type>  
462 - <description/>  
463 - <distribute>Y</distribute>  
464 - <custom_distribution/>  
465 - <copies>1</copies>  
466 - <partitioning>  
467 - <method>none</method>  
468 - <schema_name/>  
469 - </partitioning>  
470 - <connection>bus_control_variable</connection>  
471 - <sql>select &#xa;fcno&#xa;, min&#x28;xl&#x29; xl &#xa;, min&#x28;xl_dir&#x29; xl_dir&#xa;, min&#x28;qdz_code&#x29; qdz&#xa;, min&#x28;zdz_code&#x29; zdz&#xa;, min&#x28;bc_type&#x29; bc_type &#xa;from bsth_c_s_ttinfo_detail&#xa;where ttinfo &#x3d; &#x24;&#x7b;ttinfoid&#x7d;&#xa;group by fcno</sql>  
472 - <limit>0</limit>  
473 - <lookup/>  
474 - <execute_each_row>N</execute_each_row>  
475 - <variables_active>Y</variables_active>  
476 - <lazy_conversion_active>N</lazy_conversion_active>  
477 - <cluster_schema/>  
478 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
479 - <xloc>56</xloc>  
480 - <yloc>185</yloc>  
481 - <draw>Y</draw>  
482 - </GUI>  
483 - </step>  
484 -  
485 - <step>  
486 - <name>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</name>  
487 - <type>DBLookup</type>  
488 - <description/>  
489 - <distribute>N</distribute>  
490 - <custom_distribution/>  
491 - <copies>1</copies>  
492 - <partitioning>  
493 - <method>none</method>  
494 - <schema_name/>  
495 - </partitioning>  
496 - <connection>bus_control_variable</connection>  
497 - <cache>N</cache>  
498 - <cache_load_all>Y</cache_load_all>  
499 - <cache_size>0</cache_size>  
500 - <lookup>  
501 - <schema/>  
502 - <table>bsth_c_stationroute</table>  
503 - <orderby/>  
504 - <fail_on_multiple>N</fail_on_multiple>  
505 - <eat_row_on_failure>N</eat_row_on_failure>  
506 - <key>  
507 - <name>xl</name>  
508 - <field>line</field>  
509 - <condition>&#x3d;</condition>  
510 - <name2/>  
511 - </key>  
512 - <key>  
513 - <name>xl_dir</name>  
514 - <field>directions</field>  
515 - <condition>&#x3d;</condition>  
516 - <name2/>  
517 - </key>  
518 - <key>  
519 - <name>zd</name>  
520 - <field>station_code</field>  
521 - <condition>&#x3d;</condition>  
522 - <name2/>  
523 - </key>  
524 - <value>  
525 - <name>station_name</name>  
526 - <rename>zdname</rename>  
527 - <default/>  
528 - <type>String</type>  
529 - </value>  
530 - </lookup>  
531 - <cluster_schema/>  
532 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
533 - <xloc>410</xloc>  
534 - <yloc>191</yloc>  
535 - <draw>Y</draw>  
536 - </GUI>  
537 - </step>  
538 -  
539 - <step>  
540 - <name>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</name>  
541 - <type>RowGenerator</type>  
542 - <description/>  
543 - <distribute>Y</distribute>  
544 - <custom_distribution/>  
545 - <copies>1</copies>  
546 - <partitioning>  
547 - <method>none</method>  
548 - <schema_name/>  
549 - </partitioning>  
550 - <fields>  
551 - <field>  
552 - <name>fieldname</name>  
553 - <type>String</type>  
554 - <format/>  
555 - <currency/>  
556 - <decimal/>  
557 - <group/>  
558 - <nullif>&#x8def;&#x724c;</nullif>  
559 - <length>-1</length>  
560 - <precision>-1</precision>  
561 - <set_empty_string>N</set_empty_string>  
562 - </field>  
563 - <field>  
564 - <name>fieldtype</name>  
565 - <type>String</type>  
566 - <format/>  
567 - <currency/>  
568 - <decimal/>  
569 - <group/>  
570 - <nullif>String</nullif>  
571 - <length>-1</length>  
572 - <precision>-1</precision>  
573 - <set_empty_string>N</set_empty_string>  
574 - </field>  
575 - <field>  
576 - <name>fcno</name>  
577 - <type>Integer</type>  
578 - <format/>  
579 - <currency/>  
580 - <decimal/>  
581 - <group/>  
582 - <nullif>0</nullif>  
583 - <length>-1</length>  
584 - <precision>-1</precision>  
585 - <set_empty_string>N</set_empty_string>  
586 - </field>  
587 - </fields>  
588 - <limit>1</limit>  
589 - <never_ending>N</never_ending>  
590 - <interval_in_ms>5000</interval_in_ms>  
591 - <row_time_field>now</row_time_field>  
592 - <last_time_field>FiveSecondsAgo</last_time_field>  
593 - <cluster_schema/>  
594 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
595 - <xloc>530</xloc>  
596 - <yloc>194</yloc>  
597 - <draw>Y</draw>  
598 - </GUI>  
599 - </step>  
600 -  
601 - <step>  
602 - <name>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</name>  
603 - <type>ScriptValueMod</type>  
604 - <description/>  
605 - <distribute>Y</distribute>  
606 - <custom_distribution/>  
607 - <copies>1</copies>  
608 - <partitioning>  
609 - <method>none</method>  
610 - <schema_name/>  
611 - </partitioning>  
612 - <compatible>N</compatible>  
613 - <optimizationLevel>9</optimizationLevel>  
614 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
615 - <jsScript_name>Script 1</jsScript_name>  
616 - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var fieldname&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x540d;&#xa;var fieldtype&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x7c7b;&#x578b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;fieldtype &#x3d; &#x27;String&#x27;&#x3b;&#xa;</jsScript_script>  
617 - </jsScript> </jsScripts> <fields> <field> <name>fieldname</name>  
618 - <rename>fieldname</rename>  
619 - <type>String</type>  
620 - <length>-1</length>  
621 - <precision>-1</precision>  
622 - <replace>N</replace>  
623 - </field> <field> <name>fieldtype</name>  
624 - <rename>fieldtype</rename>  
625 - <type>String</type>  
626 - <length>-1</length>  
627 - <precision>-1</precision>  
628 - <replace>N</replace>  
629 - </field> </fields> <cluster_schema/>  
630 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
631 - <xloc>410</xloc>  
632 - <yloc>326</yloc>  
633 - <draw>Y</draw>  
634 - </GUI>  
635 - </step>  
636 -  
637 - <step>  
638 - <name>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</name>  
639 - <type>ScriptValueMod</type>  
640 - <description/>  
641 - <distribute>Y</distribute>  
642 - <custom_distribution/>  
643 - <copies>1</copies>  
644 - <partitioning>  
645 - <method>none</method>  
646 - <schema_name/>  
647 - </partitioning>  
648 - <compatible>N</compatible>  
649 - <optimizationLevel>9</optimizationLevel>  
650 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
651 - <jsScript_name>Script 1</jsScript_name>  
652 - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var targetfieldname&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x5b57;&#x6bb5;&#x540d;&#xa;var targettype&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x7c7b;&#x578b;&#xa;var valuefieldname&#x3b; &#x2f;&#x2f; &#x503c;&#x5b57;&#x6bb5;&#x540d;&#xa;var keyvalue&#x3b; &#x2f;&#x2f; &#x5173;&#x952e;&#x5b57;&#x503c;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;targettype &#x3d; &#x27;String&#x27;&#x3b;&#xa;valuefieldname &#x3d; &#x27;fcsj&#x27;&#x3b;&#xa;keyvalue &#x3d; fcno&#x3b;&#xa;</jsScript_script>  
653 - </jsScript> </jsScripts> <fields> <field> <name>targetfieldname</name>  
654 - <rename>targetfieldname</rename>  
655 - <type>String</type>  
656 - <length>-1</length>  
657 - <precision>-1</precision>  
658 - <replace>N</replace>  
659 - </field> <field> <name>targettype</name>  
660 - <rename>targettype</rename>  
661 - <type>String</type>  
662 - <length>-1</length>  
663 - <precision>-1</precision>  
664 - <replace>N</replace>  
665 - </field> <field> <name>valuefieldname</name>  
666 - <rename>valuefieldname</rename>  
667 - <type>String</type>  
668 - <length>-1</length>  
669 - <precision>-1</precision>  
670 - <replace>N</replace>  
671 - </field> <field> <name>keyvalue</name>  
672 - <rename>keyvalue</rename>  
673 - <type>String</type>  
674 - <length>-1</length>  
675 - <precision>-1</precision>  
676 - <replace>N</replace>  
677 - </field> </fields> <cluster_schema/>  
678 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
679 - <xloc>410</xloc>  
680 - <yloc>64</yloc>  
681 - <draw>Y</draw>  
682 - </GUI>  
683 - </step>  
684 -  
685 - <step>  
686 - <name>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</name>  
687 - <type>ScriptValueMod</type>  
688 - <description/>  
689 - <distribute>Y</distribute>  
690 - <custom_distribution/>  
691 - <copies>1</copies>  
692 - <partitioning>  
693 - <method>none</method>  
694 - <schema_name/>  
695 - </partitioning>  
696 - <compatible>N</compatible>  
697 - <optimizationLevel>9</optimizationLevel>  
698 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
699 - <jsScript_name>Script 1</jsScript_name>  
700 - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var zd&#x3b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; zd &#x3d; zdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d;&#xa;</jsScript_script>  
701 - </jsScript> </jsScripts> <fields> <field> <name>zd</name>  
702 - <rename>zd</rename>  
703 - <type>String</type>  
704 - <length>-1</length>  
705 - <precision>-1</precision>  
706 - <replace>N</replace>  
707 - </field> </fields> <cluster_schema/>  
708 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
709 - <xloc>300</xloc>  
710 - <yloc>190</yloc>  
711 - <draw>Y</draw>  
712 - </GUI>  
713 - </step>  
714 -  
715 - <step>  
716 - <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</name>  
717 - <type>FilterRows</type>  
718 - <description/>  
719 - <distribute>Y</distribute>  
720 - <custom_distribution/>  
721 - <copies>1</copies>  
722 - <partitioning>  
723 - <method>none</method>  
724 - <schema_name/>  
725 - </partitioning>  
726 -<send_true_to/>  
727 -<send_false_to/>  
728 - <compare>  
729 -<condition>  
730 - <negated>N</negated>  
731 - <leftvalue>bc_type</leftvalue>  
732 - <function>IS NOT NULL</function>  
733 - <rightvalue/>  
734 - </condition>  
735 - </compare>  
736 - <cluster_schema/>  
737 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
738 - <xloc>182</xloc>  
739 - <yloc>189</yloc>  
740 - <draw>Y</draw>  
741 - </GUI>  
742 - </step>  
743 -  
744 - <step_error_handling>  
745 - </step_error_handling>  
746 - <slave-step-copy-partition-distribution>  
747 -</slave-step-copy-partition-distribution>  
748 - <slave_transformation>N</slave_transformation>  
749 -  
750 -</transformation> 1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x51fa;&#x5143;&#x6570;&#x636e;</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>filepath</name>
  14 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;ttinfodetail_test.xls</default_value>
  15 + <description>&#x65f6;&#x523b;&#x8868;excel&#x5bfc;&#x51fa;&#x6587;&#x4ef6;&#x8def;&#x5f84;&#x540d;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>injectktrfile</name>
  19 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control_parent&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataOutput.ktr</default_value>
  20 + <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>
  21 + </parameter>
  22 + <parameter>
  23 + <name>ttinfoid</name>
  24 + <default_value>56</default_value>
  25 + <description>&#x65f6;&#x523b;&#x8868;id</description>
  26 + </parameter>
  27 + </parameters>
  28 + <log>
  29 +<trans-log-table><connection/>
  30 +<schema/>
  31 +<table/>
  32 +<size_limit_lines/>
  33 +<interval/>
  34 +<timeout_days/>
  35 +<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>
  36 +<perf-log-table><connection/>
  37 +<schema/>
  38 +<table/>
  39 +<interval/>
  40 +<timeout_days/>
  41 +<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>
  42 +<channel-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>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>
  47 +<step-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>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>
  52 +<metrics-log-table><connection/>
  53 +<schema/>
  54 +<table/>
  55 +<timeout_days/>
  56 +<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>
  57 + </log>
  58 + <maxdate>
  59 + <connection/>
  60 + <table/>
  61 + <field/>
  62 + <offset>0.0</offset>
  63 + <maxdiff>0.0</maxdiff>
  64 + </maxdate>
  65 + <size_rowset>10000</size_rowset>
  66 + <sleep_time_empty>50</sleep_time_empty>
  67 + <sleep_time_full>50</sleep_time_full>
  68 + <unique_connections>N</unique_connections>
  69 + <feedback_shown>Y</feedback_shown>
  70 + <feedback_size>50000</feedback_size>
  71 + <using_thread_priorities>Y</using_thread_priorities>
  72 + <shared_objects_file/>
  73 + <capture_step_performance>N</capture_step_performance>
  74 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  75 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  76 + <dependencies>
  77 + </dependencies>
  78 + <partitionschemas>
  79 + </partitionschemas>
  80 + <slaveservers>
  81 + </slaveservers>
  82 + <clusterschemas>
  83 + </clusterschemas>
  84 + <created_user>-</created_user>
  85 + <created_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</created_date>
  86 + <modified_user>-</modified_user>
  87 + <modified_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</modified_date>
  88 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  89 + <is_key_private>N</is_key_private>
  90 + </info>
  91 + <notepads>
  92 + <notepad>
  93 + <note>TODO&#xff1a;&#x5982;&#x679c;groupby &#x52a0;&#x5165;bctype&#xff0c;&#xa;&#x5219;&#x4ee5;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;&#xff0c;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5206;&#x7ec4;&#x7684;&#x6570;&#x636e;&#x53ef;&#x80fd;&#x91cd;&#x590d;&#xff0c;&#xa;&#x5e94;&#x4e3a;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x53ef;&#x80fd;&#x4e0d;&#x4e00;&#x6837;&#xff08;&#x5bfc;&#x5165;&#x4e4b;&#x540e;&#x4eba;&#x4e3a;&#x4fee;&#x6539;&#x7684;&#xff0c;&#x5982;&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6539;&#x6210;&#x533a;&#x95f4;&#xff09;&#xff0c;&#xa;&#x56e0;&#x4e3a;&#x5bfc;&#x51fa;&#x65f6;&#x5fc5;&#x987b;&#x6570;&#x636e;&#x4e0d;&#x91cd;&#x590d;&#xff0c;&#x8fd9;&#x91cc;&#x7684;&#x89e3;&#x51b3;&#x65b9;&#x6cd5;&#xff0c;&#x53ea;&#x4f7f;&#x7528;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;&#x5206;&#x7ec4;&#xff0c;&#xa;&#x4ee5;&#x540e;&#x5efa;&#x8bae;&#xff0c;&#x8fd8;&#x662f;&#x539f;&#x6765;&#x7684;&#x65b9;&#x5f0f;&#x5206;&#x7ec4;&#xff0c;&#x7136;&#x540e;&#x628a;&#x66f4;&#x65b0;&#x65f6;&#x95f4;&#x665a;&#x7684;&#x53bb;&#x9664;&#xa;&#xa;&#x4ee5;&#x540e;&#x6539;&#x6210;&#x53bb;&#x9664;&#x91cd;&#x590d;&#x7eaa;&#x5f55;</note>
  94 + <xloc>178</xloc>
  95 + <yloc>547</yloc>
  96 + <width>406</width>
  97 + <heigth>122</heigth>
  98 + <fontname>YaHei Consolas Hybrid</fontname>
  99 + <fontsize>12</fontsize>
  100 + <fontbold>N</fontbold>
  101 + <fontitalic>N</fontitalic>
  102 + <fontcolorred>0</fontcolorred>
  103 + <fontcolorgreen>0</fontcolorgreen>
  104 + <fontcolorblue>0</fontcolorblue>
  105 + <backgroundcolorred>255</backgroundcolorred>
  106 + <backgroundcolorgreen>205</backgroundcolorgreen>
  107 + <backgroundcolorblue>112</backgroundcolorblue>
  108 + <bordercolorred>100</bordercolorred>
  109 + <bordercolorgreen>100</bordercolorgreen>
  110 + <bordercolorblue>100</bordercolorblue>
  111 + <drawshadow>Y</drawshadow>
  112 + </notepad>
  113 + </notepads>
  114 + <connection>
  115 + <name>192.168.168.1_jwgl_dw</name>
  116 + <server>192.168.168.1</server>
  117 + <type>ORACLE</type>
  118 + <access>Native</access>
  119 + <database>orcl</database>
  120 + <port>1521</port>
  121 + <username>jwgl_dw</username>
  122 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  123 + <servername/>
  124 + <data_tablespace/>
  125 + <index_tablespace/>
  126 + <attributes>
  127 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  128 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  129 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  130 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  131 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  132 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  133 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  134 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  135 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  136 + </attributes>
  137 + </connection>
  138 + <connection>
  139 + <name>bus_control_variable</name>
  140 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  141 + <type>MYSQL</type>
  142 + <access>Native</access>
  143 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  144 + <port>3306</port>
  145 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  146 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  147 + <servername/>
  148 + <data_tablespace/>
  149 + <index_tablespace/>
  150 + <attributes>
  151 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  152 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  153 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  154 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  155 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  156 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  157 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  158 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  159 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  160 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  161 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  162 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  163 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  164 + </attributes>
  165 + </connection>
  166 + <connection>
  167 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  168 + <server>localhost</server>
  169 + <type>MYSQL</type>
  170 + <access>Native</access>
  171 + <database>control</database>
  172 + <port>3306</port>
  173 + <username>root</username>
  174 + <password>Encrypted </password>
  175 + <servername/>
  176 + <data_tablespace/>
  177 + <index_tablespace/>
  178 + <attributes>
  179 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  180 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  181 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  182 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  183 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  184 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  185 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  186 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  187 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  188 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  189 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  190 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  191 + </attributes>
  192 + </connection>
  193 + <connection>
  194 + <name>bus_control_&#x672c;&#x673a;</name>
  195 + <server>localhost</server>
  196 + <type>MYSQL</type>
  197 + <access>Native</access>
  198 + <database>control</database>
  199 + <port>3306</port>
  200 + <username>root</username>
  201 + <password>Encrypted </password>
  202 + <servername/>
  203 + <data_tablespace/>
  204 + <index_tablespace/>
  205 + <attributes>
  206 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  207 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  208 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  209 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  210 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  211 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  212 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  213 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  214 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  215 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  216 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  217 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  218 + </attributes>
  219 + </connection>
  220 + <connection>
  221 + <name>xlab_mysql_youle</name>
  222 + <server>101.231.124.8</server>
  223 + <type>MYSQL</type>
  224 + <access>Native</access>
  225 + <database>xlab_youle</database>
  226 + <port>45687</port>
  227 + <username>xlab-youle</username>
  228 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  229 + <servername/>
  230 + <data_tablespace/>
  231 + <index_tablespace/>
  232 + <attributes>
  233 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  234 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  235 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  236 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  237 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  238 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  239 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  240 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  241 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  242 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  243 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  244 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  245 + </attributes>
  246 + </connection>
  247 + <connection>
  248 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  249 + <server>localhost</server>
  250 + <type>MYSQL</type>
  251 + <access>Native</access>
  252 + <database>xlab_youle</database>
  253 + <port>3306</port>
  254 + <username>root</username>
  255 + <password>Encrypted </password>
  256 + <servername/>
  257 + <data_tablespace/>
  258 + <index_tablespace/>
  259 + <attributes>
  260 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  261 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  262 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  263 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  264 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  265 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  266 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  267 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  268 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  269 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  270 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  271 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  272 + </attributes>
  273 + </connection>
  274 + <connection>
  275 + <name>xlab_youle</name>
  276 + <server/>
  277 + <type>MYSQL</type>
  278 + <access>JNDI</access>
  279 + <database>xlab_youle</database>
  280 + <port>1521</port>
  281 + <username/>
  282 + <password>Encrypted </password>
  283 + <servername/>
  284 + <data_tablespace/>
  285 + <index_tablespace/>
  286 + <attributes>
  287 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  288 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  289 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  290 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  291 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  292 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  293 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  294 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  295 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  296 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  297 + </attributes>
  298 + </connection>
  299 + <order>
  300 + <hop> <from>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  301 + <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</from><to>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</to><enabled>Y</enabled> </hop>
  302 + <hop> <from>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  303 + <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  304 + <hop> <from>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  305 + <hop> <from>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  306 + <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  307 + <hop> <from>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</from><to>&#x67e5;&#x627e;&#x8d77;&#x70b9;&#x7ad9;</to><enabled>Y</enabled> </hop>
  308 + <hop> <from>&#x67e5;&#x627e;&#x8d77;&#x70b9;&#x7ad9;</from><to>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  309 + <hop> <from>&#x67e5;&#x627e;&#x8d77;&#x70b9;&#x7ad9;</from><to>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  310 + </order>
  311 + <step>
  312 + <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>
  313 + <type>MetaInject</type>
  314 + <description/>
  315 + <distribute>Y</distribute>
  316 + <custom_distribution/>
  317 + <copies>1</copies>
  318 + <partitioning>
  319 + <method>none</method>
  320 + <schema_name/>
  321 + </partitioning>
  322 + <specification_method>filename</specification_method>
  323 + <trans_object_id/>
  324 + <trans_name/>
  325 + <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>
  326 + <directory_path/>
  327 + <source_step/>
  328 + <source_output_fields> </source_output_fields> <target_file/>
  329 + <no_execution>N</no_execution>
  330 + <stream_source_step/>
  331 + <stream_target_step/>
  332 + <mappings> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  333 + <target_attribute_key>TARGET_TYPE</target_attribute_key>
  334 + <target_detail>Y</target_detail>
  335 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  336 + <source_field>targettype</source_field>
  337 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
  338 + <target_attribute_key>TYPE</target_attribute_key>
  339 + <target_detail>Y</target_detail>
  340 + <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
  341 + <source_field>fieldtype</source_field>
  342 + </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  343 + <target_attribute_key>NAME</target_attribute_key>
  344 + <target_detail>Y</target_detail>
  345 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  346 + <source_field>valuefieldname</source_field>
  347 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
  348 + <target_attribute_key>NAME</target_attribute_key>
  349 + <target_detail>Y</target_detail>
  350 + <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
  351 + <source_field>fieldname</source_field>
  352 + </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  353 + <target_attribute_key>TARGET_NAME</target_attribute_key>
  354 + <target_detail>Y</target_detail>
  355 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  356 + <source_field>targetfieldname</source_field>
  357 + </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  358 + <target_attribute_key>KEY_VALUE</target_attribute_key>
  359 + <target_detail>Y</target_detail>
  360 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  361 + <source_field>keyvalue</source_field>
  362 + </mapping> </mappings> <cluster_schema/>
  363 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  364 + <xloc>640</xloc>
  365 + <yloc>64</yloc>
  366 + <draw>Y</draw>
  367 + </GUI>
  368 + </step>
  369 +
  370 + <step>
  371 + <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
  372 + <type>SelectValues</type>
  373 + <description/>
  374 + <distribute>Y</distribute>
  375 + <custom_distribution/>
  376 + <copies>1</copies>
  377 + <partitioning>
  378 + <method>none</method>
  379 + <schema_name/>
  380 + </partitioning>
  381 + <fields> <field> <name>fieldname</name>
  382 + <rename/>
  383 + <length>-2</length>
  384 + <precision>-2</precision>
  385 + </field> <field> <name>fieldtype</name>
  386 + <rename/>
  387 + <length>-2</length>
  388 + <precision>-2</precision>
  389 + </field> <field> <name>fcno</name>
  390 + <rename/>
  391 + <length>-2</length>
  392 + <precision>-2</precision>
  393 + </field> <select_unspecified>N</select_unspecified>
  394 + </fields> <cluster_schema/>
  395 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  396 + <xloc>533</xloc>
  397 + <yloc>325</yloc>
  398 + <draw>Y</draw>
  399 + </GUI>
  400 + </step>
  401 +
  402 + <step>
  403 + <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>
  404 + <type>SortRows</type>
  405 + <description/>
  406 + <distribute>Y</distribute>
  407 + <custom_distribution/>
  408 + <copies>1</copies>
  409 + <partitioning>
  410 + <method>none</method>
  411 + <schema_name/>
  412 + </partitioning>
  413 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  414 + <prefix>out</prefix>
  415 + <sort_size>1000000</sort_size>
  416 + <free_memory/>
  417 + <compress>N</compress>
  418 + <compress_variable/>
  419 + <unique_rows>N</unique_rows>
  420 + <fields>
  421 + <field>
  422 + <name>fcno</name>
  423 + <ascending>Y</ascending>
  424 + <case_sensitive>N</case_sensitive>
  425 + <presorted>N</presorted>
  426 + </field>
  427 + </fields>
  428 + <cluster_schema/>
  429 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  430 + <xloc>642</xloc>
  431 + <yloc>325</yloc>
  432 + <draw>Y</draw>
  433 + </GUI>
  434 + </step>
  435 +
  436 + <step>
  437 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</name>
  438 + <type>TableInput</type>
  439 + <description/>
  440 + <distribute>Y</distribute>
  441 + <custom_distribution/>
  442 + <copies>1</copies>
  443 + <partitioning>
  444 + <method>none</method>
  445 + <schema_name/>
  446 + </partitioning>
  447 + <connection>bus_control_variable</connection>
  448 + <sql>select &#xa;fcno&#xa;, min&#x28;xl&#x29; xl &#xa;, min&#x28;xl_dir&#x29; xl_dir&#xa;, min&#x28;qdz_code&#x29; qdz&#xa;, min&#x28;zdz_code&#x29; zdz&#xa;, min&#x28;bc_type&#x29; bc_type &#xa;, min&#x28;line_version&#x29; line_version&#xa;from bsth_c_s_ttinfo_detail&#xa;where ttinfo &#x3d; &#x24;&#x7b;ttinfoid&#x7d;&#xa;group by fcno</sql>
  449 + <limit>0</limit>
  450 + <lookup/>
  451 + <execute_each_row>N</execute_each_row>
  452 + <variables_active>Y</variables_active>
  453 + <lazy_conversion_active>N</lazy_conversion_active>
  454 + <cluster_schema/>
  455 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  456 + <xloc>56</xloc>
  457 + <yloc>192</yloc>
  458 + <draw>Y</draw>
  459 + </GUI>
  460 + </step>
  461 +
  462 + <step>
  463 + <name>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</name>
  464 + <type>RowGenerator</type>
  465 + <description/>
  466 + <distribute>Y</distribute>
  467 + <custom_distribution/>
  468 + <copies>1</copies>
  469 + <partitioning>
  470 + <method>none</method>
  471 + <schema_name/>
  472 + </partitioning>
  473 + <fields>
  474 + <field>
  475 + <name>fieldname</name>
  476 + <type>String</type>
  477 + <format/>
  478 + <currency/>
  479 + <decimal/>
  480 + <group/>
  481 + <nullif>&#x8def;&#x724c;</nullif>
  482 + <length>-1</length>
  483 + <precision>-1</precision>
  484 + <set_empty_string>N</set_empty_string>
  485 + </field>
  486 + <field>
  487 + <name>fieldtype</name>
  488 + <type>String</type>
  489 + <format/>
  490 + <currency/>
  491 + <decimal/>
  492 + <group/>
  493 + <nullif>String</nullif>
  494 + <length>-1</length>
  495 + <precision>-1</precision>
  496 + <set_empty_string>N</set_empty_string>
  497 + </field>
  498 + <field>
  499 + <name>fcno</name>
  500 + <type>Integer</type>
  501 + <format/>
  502 + <currency/>
  503 + <decimal/>
  504 + <group/>
  505 + <nullif>0</nullif>
  506 + <length>-1</length>
  507 + <precision>-1</precision>
  508 + <set_empty_string>N</set_empty_string>
  509 + </field>
  510 + </fields>
  511 + <limit>1</limit>
  512 + <never_ending>N</never_ending>
  513 + <interval_in_ms>5000</interval_in_ms>
  514 + <row_time_field>now</row_time_field>
  515 + <last_time_field>FiveSecondsAgo</last_time_field>
  516 + <cluster_schema/>
  517 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  518 + <xloc>530</xloc>
  519 + <yloc>194</yloc>
  520 + <draw>Y</draw>
  521 + </GUI>
  522 + </step>
  523 +
  524 + <step>
  525 + <name>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</name>
  526 + <type>ScriptValueMod</type>
  527 + <description/>
  528 + <distribute>Y</distribute>
  529 + <custom_distribution/>
  530 + <copies>1</copies>
  531 + <partitioning>
  532 + <method>none</method>
  533 + <schema_name/>
  534 + </partitioning>
  535 + <compatible>N</compatible>
  536 + <optimizationLevel>9</optimizationLevel>
  537 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  538 + <jsScript_name>Script 1</jsScript_name>
  539 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var fieldname&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x540d;&#xa;var fieldtype&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x7c7b;&#x578b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;fieldtype &#x3d; &#x27;String&#x27;&#x3b;&#xa;</jsScript_script>
  540 + </jsScript> </jsScripts> <fields> <field> <name>fieldname</name>
  541 + <rename>fieldname</rename>
  542 + <type>String</type>
  543 + <length>-1</length>
  544 + <precision>-1</precision>
  545 + <replace>N</replace>
  546 + </field> <field> <name>fieldtype</name>
  547 + <rename>fieldtype</rename>
  548 + <type>String</type>
  549 + <length>-1</length>
  550 + <precision>-1</precision>
  551 + <replace>N</replace>
  552 + </field> </fields> <cluster_schema/>
  553 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  554 + <xloc>410</xloc>
  555 + <yloc>326</yloc>
  556 + <draw>Y</draw>
  557 + </GUI>
  558 + </step>
  559 +
  560 + <step>
  561 + <name>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</name>
  562 + <type>ScriptValueMod</type>
  563 + <description/>
  564 + <distribute>Y</distribute>
  565 + <custom_distribution/>
  566 + <copies>1</copies>
  567 + <partitioning>
  568 + <method>none</method>
  569 + <schema_name/>
  570 + </partitioning>
  571 + <compatible>N</compatible>
  572 + <optimizationLevel>9</optimizationLevel>
  573 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  574 + <jsScript_name>Script 1</jsScript_name>
  575 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var targetfieldname&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x5b57;&#x6bb5;&#x540d;&#xa;var targettype&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x7c7b;&#x578b;&#xa;var valuefieldname&#x3b; &#x2f;&#x2f; &#x503c;&#x5b57;&#x6bb5;&#x540d;&#xa;var keyvalue&#x3b; &#x2f;&#x2f; &#x5173;&#x952e;&#x5b57;&#x503c;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; &#x22;-&#x3e;&#x22; &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;targettype &#x3d; &#x27;String&#x27;&#x3b;&#xa;valuefieldname &#x3d; &#x27;fcsj&#x27;&#x3b;&#xa;keyvalue &#x3d; fcno&#x3b;&#xa;</jsScript_script>
  576 + </jsScript> </jsScripts> <fields> <field> <name>targetfieldname</name>
  577 + <rename>targetfieldname</rename>
  578 + <type>String</type>
  579 + <length>-1</length>
  580 + <precision>-1</precision>
  581 + <replace>N</replace>
  582 + </field> <field> <name>targettype</name>
  583 + <rename>targettype</rename>
  584 + <type>String</type>
  585 + <length>-1</length>
  586 + <precision>-1</precision>
  587 + <replace>N</replace>
  588 + </field> <field> <name>valuefieldname</name>
  589 + <rename>valuefieldname</rename>
  590 + <type>String</type>
  591 + <length>-1</length>
  592 + <precision>-1</precision>
  593 + <replace>N</replace>
  594 + </field> <field> <name>keyvalue</name>
  595 + <rename>keyvalue</rename>
  596 + <type>String</type>
  597 + <length>-1</length>
  598 + <precision>-1</precision>
  599 + <replace>N</replace>
  600 + </field> </fields> <cluster_schema/>
  601 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  602 + <xloc>410</xloc>
  603 + <yloc>64</yloc>
  604 + <draw>Y</draw>
  605 + </GUI>
  606 + </step>
  607 +
  608 + <step>
  609 + <name>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</name>
  610 + <type>ScriptValueMod</type>
  611 + <description/>
  612 + <distribute>Y</distribute>
  613 + <custom_distribution/>
  614 + <copies>1</copies>
  615 + <partitioning>
  616 + <method>none</method>
  617 + <schema_name/>
  618 + </partitioning>
  619 + <compatible>N</compatible>
  620 + <optimizationLevel>9</optimizationLevel>
  621 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  622 + <jsScript_name>Script 1</jsScript_name>
  623 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;&#x2f;&#x2a;&#xa;var zd&#x3b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; zd &#x3d; zdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d;&#xa;&#x2a;&#x2f;&#xa;&#xa;&#x2f;&#x2f; &#x7ad9;&#x70b9;&#x6807;&#x5fd7;&#xa;var smark &#x3d; &#x22;B&#x22;&#x3b;&#xa;var destroy &#x3d; 0&#x3b;</jsScript_script>
  624 + </jsScript> </jsScripts> <fields> <field> <name>smark</name>
  625 + <rename>smark</rename>
  626 + <type>String</type>
  627 + <length>-1</length>
  628 + <precision>-1</precision>
  629 + <replace>N</replace>
  630 + </field> <field> <name>destroy</name>
  631 + <rename>destroy</rename>
  632 + <type>Number</type>
  633 + <length>16</length>
  634 + <precision>2</precision>
  635 + <replace>N</replace>
  636 + </field> </fields> <cluster_schema/>
  637 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  638 + <xloc>300</xloc>
  639 + <yloc>190</yloc>
  640 + <draw>Y</draw>
  641 + </GUI>
  642 + </step>
  643 +
  644 + <step>
  645 + <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</name>
  646 + <type>FilterRows</type>
  647 + <description/>
  648 + <distribute>Y</distribute>
  649 + <custom_distribution/>
  650 + <copies>1</copies>
  651 + <partitioning>
  652 + <method>none</method>
  653 + <schema_name/>
  654 + </partitioning>
  655 +<send_true_to/>
  656 +<send_false_to/>
  657 + <compare>
  658 +<condition>
  659 + <negated>N</negated>
  660 + <conditions>
  661 + <condition>
  662 + <negated>N</negated>
  663 + <leftvalue>bc_type</leftvalue>
  664 + <function>IS NOT NULL</function>
  665 + <rightvalue/>
  666 + </condition>
  667 + </conditions>
  668 + </condition>
  669 + </compare>
  670 + <cluster_schema/>
  671 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  672 + <xloc>182</xloc>
  673 + <yloc>189</yloc>
  674 + <draw>Y</draw>
  675 + </GUI>
  676 + </step>
  677 +
  678 + <step>
  679 + <name>&#x67e5;&#x627e;&#x8d77;&#x70b9;&#x7ad9;</name>
  680 + <type>DBLookup</type>
  681 + <description/>
  682 + <distribute>N</distribute>
  683 + <custom_distribution/>
  684 + <copies>1</copies>
  685 + <partitioning>
  686 + <method>none</method>
  687 + <schema_name/>
  688 + </partitioning>
  689 + <connection>bus_control_variable</connection>
  690 + <cache>N</cache>
  691 + <cache_load_all>Y</cache_load_all>
  692 + <cache_size>0</cache_size>
  693 + <lookup>
  694 + <schema/>
  695 + <table>bsth_c_ls_stationroute</table>
  696 + <orderby/>
  697 + <fail_on_multiple>N</fail_on_multiple>
  698 + <eat_row_on_failure>N</eat_row_on_failure>
  699 + <key>
  700 + <name>xl</name>
  701 + <field>line</field>
  702 + <condition>&#x3d;</condition>
  703 + <name2/>
  704 + </key>
  705 + <key>
  706 + <name>xl_dir</name>
  707 + <field>directions</field>
  708 + <condition>&#x3d;</condition>
  709 + <name2/>
  710 + </key>
  711 + <key>
  712 + <name>line_version</name>
  713 + <field>versions</field>
  714 + <condition>&#x3d;</condition>
  715 + <name2/>
  716 + </key>
  717 + <key>
  718 + <name>smark</name>
  719 + <field>station_mark</field>
  720 + <condition>&#x3d;</condition>
  721 + <name2/>
  722 + </key>
  723 + <key>
  724 + <name>destroy</name>
  725 + <field>destroy</field>
  726 + <condition>&#x3d;</condition>
  727 + <name2/>
  728 + </key>
  729 + <value>
  730 + <name>station_name</name>
  731 + <rename>zdname</rename>
  732 + <default/>
  733 + <type>String</type>
  734 + </value>
  735 + </lookup>
  736 + <cluster_schema/>
  737 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  738 + <xloc>412</xloc>
  739 + <yloc>189</yloc>
  740 + <draw>Y</draw>
  741 + </GUI>
  742 + </step>
  743 +
  744 + <step_error_handling>
  745 + </step_error_handling>
  746 + <slave-step-copy-partition-distribution>
  747 +</slave-step-copy-partition-distribution>
  748 + <slave_transformation>N</slave_transformation>
  749 +
  750 +</transformation>
src/main/resources/static/pages/base/geo_data_edit/js/change_line.js
1 -/**  
2 - * 线路切换面板  
3 - */  
4 -  
5 -var gb_change_line = (function () {  
6 -  
7 - var data;  
8 -  
9 - var init = function () {  
10 -  
11 - var ep = EventProxy.create("findLine", "findCompanyData", function (lines, comps) {  
12 - //根据公司权限过滤线路  
13 - var lineArray = [];  
14 - for(var i=0,line;line=lines[i++];){  
15 - if(comps.indexOf(line.company + '_' + line.brancheCompany)){  
16 - //拼音映射  
17 - lineArray.push({  
18 - name: line.name,  
19 - code: line.lineCode,  
20 - came: pinyin.getCamelChars(line.name),  
21 - full: pinyin.getFullChars(line.name).toUpperCase()  
22 - });  
23 - }  
24 - }  
25 -  
26 - data = lineArray;  
27 -  
28 - //按更新时间排序  
29 - lineArray.sort(function (a, b) {  
30 - return b.updateDate - a.updateDate;  
31 - });  
32 -  
33 - //渲染页面  
34 - var htmlStr = template('geo_d_e_dropdown_list-temp', {list: lineArray.slice(0, 10), ellipsis: lineArray.length > 10});  
35 - $('.line_change_panel ul.uk-list').html(htmlStr);  
36 - });  
37 -  
38 - $.get('/line/all', {destroy_eq: 0}, function (rs) {  
39 - ep.emit('findLine', rs);  
40 - });  
41 -  
42 - $.get('/user/companyData', {}, function (rs) {  
43 - var filters = [];  
44 - for(var i=0,obj;obj=rs[i++];){  
45 -  
46 - for(var j=0,sCom;sCom=obj.children[j++];){  
47 - filters.push(obj.companyCode + '_' + sCom.code);  
48 - }  
49 - }  
50 - ep.emit('findCompanyData', filters);  
51 - });  
52 - };  
53 -  
54 - /**  
55 - * 线路搜索  
56 - */  
57 - var search_k;  
58 - var search_flag;  
59 - $('.line_change_panel #line_search_input').on('input', function () {  
60 - search_k = $(this).val();  
61 - if(search_flag)  
62 - return;  
63 - search_flag = true;  
64 -  
65 - setTimeout(function () {  
66 - _search(search_k);  
67 - search_flag = false;  
68 - }, 300);  
69 - });  
70 -  
71 - function _search(v) {  
72 - v = v.toUpperCase();  
73 - var rs = [], ellipsis;  
74 - for(var i=0,obj;obj=data[i++];){  
75 - if(obj.came.indexOf(v)!=-1  
76 - || obj.full.indexOf(v)!=-1  
77 - || obj.name.indexOf(v)!=-1)  
78 - rs.push(obj);  
79 -  
80 - if(rs.length >= 10){  
81 - ellipsis = true;  
82 - break;  
83 - }  
84 - }  
85 -  
86 - var htmlStr = template('geo_d_e_dropdown_list-temp', {list: rs, ellipsis: ellipsis});  
87 - $('.line_change_panel ul.uk-list').empty().html(htmlStr);  
88 - }  
89 -  
90 - /**  
91 - * 点击切换线路 data-code  
92 - */  
93 - $('.line_change_panel ul.uk-list').on('click', 'li[data-code]', function () {  
94 - var lineCode = $(this).data('code');  
95 - storage.setItem('geo_data_edit_line_code' , lineCode);  
96 - storage.removeItem('geo_data_edit_line_version');  
97 -  
98 - $loadPanel.show();  
99 - clearAll();  
100 - startup();  
101 - });  
102 -  
103 - return {  
104 - init: init  
105 - }; 1 +/**
  2 + * 线路切换面板
  3 + */
  4 +
  5 +var gb_change_line = (function () {
  6 +
  7 + var data;
  8 +
  9 + var init = function () {
  10 +
  11 + var ep = EventProxy.create("findLine", "findCompanyData", function (lines, comps) {
  12 + //根据公司权限过滤线路
  13 + var lineArray = [];
  14 + for(var i=0,line;line=lines[i++];){
  15 + if(comps.indexOf(line.company + '_' + line.brancheCompany)){
  16 + //拼音映射
  17 + lineArray.push({
  18 + name: line.name,
  19 + code: line.lineCode,
  20 + came: pinyin.getCamelChars(line.name),
  21 + full: pinyin.getFullChars(line.name).toUpperCase()
  22 + });
  23 + }
  24 + }
  25 +
  26 + data = lineArray;
  27 +
  28 + //按更新时间排序
  29 + lineArray.sort(function (a, b) {
  30 + return b.updateDate - a.updateDate;
  31 + });
  32 +
  33 + //渲染页面
  34 + var htmlStr = template('geo_d_e_dropdown_list-temp', {list: lineArray.slice(0, 10), ellipsis: lineArray.length > 10});
  35 + $('.line_change_panel ul.uk-list').html(htmlStr);
  36 + });
  37 +
  38 + $.get('/line/all', {destroy_eq: 0}, function (rs) {
  39 + ep.emit('findLine', rs);
  40 + });
  41 +
  42 + $.get('/user/companyData', {}, function (rs) {
  43 + var filters = [];
  44 + for(var i=0,obj;obj=rs[i++];){
  45 +
  46 + for(var j=0,sCom;sCom=obj.children[j++];){
  47 + filters.push(obj.companyCode + '_' + sCom.code);
  48 + }
  49 + }
  50 + ep.emit('findCompanyData', filters);
  51 + });
  52 + };
  53 +
  54 + /**
  55 + * 线路搜索
  56 + */
  57 + var search_k;
  58 + var search_flag;
  59 + $('.line_change_panel #line_search_input').on('input', function () {
  60 + search_k = $(this).val();
  61 + if(search_flag)
  62 + return;
  63 + search_flag = true;
  64 +
  65 + setTimeout(function () {
  66 + _search(search_k);
  67 + search_flag = false;
  68 + }, 300);
  69 + });
  70 +
  71 + function _search(v) {
  72 + v = v.toUpperCase();
  73 + var rs = [], ellipsis;
  74 + for(var i=0,obj;obj=data[i++];){
  75 + if(obj.came.indexOf(v)!=-1
  76 + || obj.full.indexOf(v)!=-1
  77 + || obj.name.indexOf(v)!=-1)
  78 + rs.push(obj);
  79 +
  80 + if(rs.length >= 10){
  81 + ellipsis = true;
  82 + break;
  83 + }
  84 + }
  85 +
  86 + var htmlStr = template('geo_d_e_dropdown_list-temp', {list: rs, ellipsis: ellipsis});
  87 + $('.line_change_panel ul.uk-list').empty().html(htmlStr);
  88 + }
  89 +
  90 + /**
  91 + * 点击切换线路 data-code
  92 + */
  93 + $('.line_change_panel ul.uk-list').on('click', 'li[data-code]', function () {
  94 + var lineCode = $(this).data('code');
  95 + storage.setItem('geo_data_edit_line_code' , lineCode);
  96 + storage.removeItem('geo_data_edit_line_version');
  97 +
  98 + $loadPanel.show();
  99 + clearAll();
  100 + startup();
  101 + });
  102 +
  103 + return {
  104 + init: init
  105 + };
106 })(); 106 })();
107 \ No newline at end of file 107 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/gantt.html
@@ -44,9 +44,12 @@ @@ -44,9 +44,12 @@
44 <div class="btn-group btn-group-devided countbtn" data-toggle="buttons"> 44 <div class="btn-group btn-group-devided countbtn" data-toggle="buttons">
45 <a class="btn btn-circle blue countAdd" href="javascript:;" data-pjax><i class="fa fa-database"></i> 统计数据</a> 45 <a class="btn btn-circle blue countAdd" href="javascript:;" data-pjax><i class="fa fa-database"></i> 统计数据</a>
46 </div> 46 </div>
47 - <div class="btn-group btn-group-devided checkbtn" data-toggle="buttons">  
48 - <a class="btn btn-circle blue checkAdd" href="javascript:;" data-pjax><i class="fa fa-check"></i> 保存数据</a>  
49 - </div> 47 + <!--<div class="btn-group btn-group-devided checkbtn" data-toggle="buttons">-->
  48 + <!--<a class="btn btn-circle blue checkAdd" href="javascript:;" data-pjax><i class="fa fa-check"></i> 保存数据</a>-->
  49 + <!--</div>-->
  50 + <div class="btn-group btn-group-devided exportbtn" data-toggle="buttons">
  51 + <!--<a class="btn btn-circle blue exportAdd" href="javascript:;" data-pjax><i class="fa fa-file-excel-o"></i> 导出数据</a>-->
  52 + </div>
50 <div class="btn-group checkbtn"> 53 <div class="btn-group checkbtn">
51 <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown" aria-expanded="false"> 54 <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown" aria-expanded="false">
52 <i class="fa fa-cog"></i> 55 <i class="fa fa-cog"></i>
src/main/resources/static/pages/base/timesmodel/js/add-form-reload.js
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 $('.openHaveSkb').on('click',function() { 7 $('.openHaveSkb').on('click',function() {
8 var skbId = $("#skbNameSelect").val(); 8 var skbId = $("#skbNameSelect").val();
9 var argus = { 9 var argus = {
10 - baseRes:"0",carPark:"FFFFFF68",downInMileage:"0", 10 + baseRes:"0",czarPark:"FFFFFF68",downInMileage:"0",
11 downInTimer:"0",downMileage:"3.5",downOutMileage:"0", 11 downInTimer:"0",downMileage:"3.5",downOutMileage:"0",
12 downOutTimer:"0",downStopTime:"10",downTravelTime:"7", 12 downOutTimer:"0",downStopTime:"10",downTravelTime:"7",
13 down_s:"26922_26928",earlyDownTime:"7",earlyEndTime:"08:30", 13 down_s:"26922_26928",earlyDownTime:"7",earlyEndTime:"08:30",
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
@@ -372,11 +372,22 @@ var SKBFormWizard = function() { @@ -372,11 +372,22 @@ var SKBFormWizard = function() {
372 } 372 }
373 sjdArr[s].num = num; 373 sjdArr[s].num = num;
374 } 374 }
375 - map.zgfbeforepcs = sjdArr[0].num;// 早高峰前配车数  
376 - map.zgfpcs = sjdArr[2].num;// 早高峰配车数  
377 - map.gfzjpcs = sjdArr[4].num;// 高峰之间配车数  
378 - map.wgfpcs = sjdArr[2].num ;// 晚高峰配车数  
379 - map.wgfafterpcs = sjdArr[1].num + sjdArr[3].num;// 晚高峰后配车数 375 +
  376 + // 注意:如果为0,设置成 10 17默认值
  377 + map.zgfbeforepcs = sjdArr[0].num == 0 ? 10 : sjdArr[0].num;// 早高峰前配车数
  378 + map.zgfpcs = sjdArr[2].num == 0 ? 17 : sjdArr[2].num;// 早高峰配车数
  379 + map.gfzjpcs = sjdArr[4].num == 0 ? 10 : sjdArr[4].num;// 高峰之间配车数
  380 + map.wgfpcs = sjdArr[2].num == 0 ? 17 : sjdArr[2].num ;// 晚高峰配车数
  381 + map.wgfafterpcs = (sjdArr[1].num + sjdArr[3].num) == 0 ? 10 : sjdArr[1].num + sjdArr[3].num;// 晚高峰后配车数
  382 +
  383 + // 注意:高峰 5 低谷 20 其他 10
  384 + map.upStopTime = 10;
  385 + map.downStopTime = 10;
  386 + map.mixstopTime = 5;
  387 + map.maxstopTime = 20;
  388 +
  389 + //alert("dddd");
  390 +
380 // 返回参数详情模版. 391 // 返回参数详情模版.
381 return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})}); 392 return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})});
382 }); 393 });
@@ -640,13 +651,49 @@ var SKBFormWizard = function() { @@ -640,13 +651,49 @@ var SKBFormWizard = function() {
640 651
641 // 表单提交. 652 // 表单提交.
642 function submit(p,argus) { 653 function submit(p,argus) {
643 - storage.setItem("Gantt_AgursData",JSON.stringify(argus));  
644 - if(p!=null) {  
645 - storage.setItem('isDoDate',JSON.stringify({'rsD':p.rsD,'rsLP':p.rsLp}));  
646 - }else {  
647 - storage.setItem('isDoDate','');  
648 - }  
649 - loadPage('gantt.html'); 654 + var baseRes2 = $('#submit_argus_form input[name="baseRes"]:checked').val();// 获取参数方式值.
  655 + if (baseRes2 == 0) {
  656 + // TODO:客流暂时有问题,直接使用现有时刻表打开,日后有机会再改好
  657 + var skbId2 = $("#skbNameSelect").val();
  658 + var argus2 = {
  659 + baseRes:"0",carPark:"FFFFFF68",downInMileage:"0",
  660 + downInTimer:"0",downMileage:"3.5",downOutMileage:"0",
  661 + downOutTimer:"0",downStopTime:"10",downTravelTime:"7",
  662 + down_s:"26922_26928",earlyDownTime:"7",earlyEndTime:"08:30",
  663 + earlyStartTime:"06:31",earlyUpTime:"10",endStationEndTime:"22:30",
  664 + endStationFirstTime:"05:50",gfzjpcs:"7",istidc:1,kfsj:"",krl:"50",
  665 + lateDownTime:"7",lateEndTime:"18:30",lateStartTime:"16:31",
  666 + lateUpTime:"10",lb:"15",lineName:"801702_801702_1109路",
  667 + linePlayType:"0",maxstopTime:"20",mixstopTime:"8",qjDownTime:"",
  668 + qjUpTime:"",skbName:skbId2,skbmc:"2016.4.6双时刻表",
  669 + startStationEndTime:"23:00",startStationFirstTime:"06:15",tcc_id:45,troughDownTime:"7",troughUpTime:"10",upInMileage:"0",
  670 + upInTimer:"10",upMileage:"3.5",upOutMileage:"0",upOutTimer:"10",upStopTime:"10",upTravelTime:"10",
  671 + up_s:"26912_26921",wgfafterpcs:"5",wgfpcs:"10",workeDinner:"20",workeLunch:"20",xlmc:"1109路",zgfbeforepcs:"3",zgfpcs:"10",}
  672 + // 获取时刻表明细.
  673 + $get('/tidc/all',{'ttinfo.id_eq':parseInt(argus.skbName)},function(data) {
  674 + var p = formatData(data.data,argus2);
  675 + // TODO:添加parent
  676 + for (var ii = 0; ii < p.rsD.length; ii++) {
  677 + p.rsD[ii].parent = p.rsD[ii].lpNo;// 路牌名称
  678 + }
  679 +
  680 + argus2.istidc = 1;
  681 + var storage = window.localStorage;
  682 + storage.setItem("Gantt_AgursData",JSON.stringify(argus2));
  683 + storage.setItem('isDoDate',JSON.stringify({'rsD':p.rsD,'rsLP':p.rsLp}));
  684 + loadPage('gantt.html');
  685 + });
  686 + } else {
  687 + storage.setItem("Gantt_AgursData",JSON.stringify(argus));
  688 + if(p!=null) {
  689 + storage.setItem('isDoDate',JSON.stringify({'rsD':p.rsD,'rsLP':p.rsLp}));
  690 + }else {
  691 + storage.setItem('isDoDate','');
  692 + }
  693 + loadPage('gantt.html');
  694 + }
  695 +
  696 +
650 } 697 }
651 } 698 }
652 }); 699 });
src/main/resources/static/pages/base/timesmodel/js/gantt.js
@@ -83,7 +83,9 @@ @@ -83,7 +83,9 @@
83 // TODO:绘制gantt图表 83 // TODO:绘制gantt图表
84 // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置 84 // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置
85 // TODO:CSMap.maxCar 之后要设定一下的 85 // TODO:CSMap.maxCar 之后要设定一下的
  86 + $(".exportbtn").html("<a class=\"btn btn-circle blue exportAdd\" href=\"javascript:;\" data-pjax><i class=\"fa fa-file-excel-o\"></i> 导出数据</a>");
86 data = Main_v2.BXPplaceClassesTime03(_paramObj, CSMap.maxCar); 87 data = Main_v2.BXPplaceClassesTime03(_paramObj, CSMap.maxCar);
  88 + Main_v2.exportDataConfig(data.aInternalLpObj);
87 } 89 }
88 90
89 }else { 91 }else {
src/main/resources/static/pages/base/timesmodel/js/v2/core/InternalBcObj.js
@@ -51,7 +51,7 @@ var InternalBcObj = function( @@ -51,7 +51,7 @@ var InternalBcObj = function(
51 //------------------- get/set 方法 -------------------// 51 //------------------- get/set 方法 -------------------//
52 52
53 InternalBcObj.prototype.fnSetIsFirstBc = function(bFlag) { 53 InternalBcObj.prototype.fnSetIsFirstBc = function(bFlag) {
54 - this._$_bIsFirstBc = true; 54 + this._$_bIsFirstBc = bFlag;
55 }; 55 };
56 InternalBcObj.prototype.fnIsFirstBc = function() { 56 InternalBcObj.prototype.fnIsFirstBc = function() {
57 return this._$_bIsFirstBc; 57 return this._$_bIsFirstBc;