Commit fc3393ec7e22f372fcaff0ec2822004bb5c2f0df

Authored by 徐烜
2 parents 131bb259 5c7a7e52

Update

Too many changes to show.

To preserve performance only 17 of 19 files are displayed.

src/main/java/com/bsth/XDApplication.java
@@ -126,24 +126,25 @@ public class XDApplication implements CommandLineRunner { @@ -126,24 +126,25 @@ public class XDApplication implements CommandLineRunner {
126 ScheduledExecutorService sexec = Application.mainServices; 126 ScheduledExecutorService sexec = Application.mainServices;
127 127
128 /** 线调业务 */ 128 /** 线调业务 */
129 - sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);//抓取GPS数据  
130 - sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);//GPS设备掉离线  
131 sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);//班次更新线程 129 sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);//班次更新线程
132 - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 10, TimeUnit.SECONDS);//班次延迟入库线程  
133 - sexec.scheduleWithFixedDelay(seiPstThread, 60, 60, TimeUnit.SECONDS);//班次修正日志入库  
134 - sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS);//检查班次误点 130 + sexec.scheduleWithFixedDelay(scheduleLateThread, 70, 30, TimeUnit.SECONDS);//检查班次误点
  131 + sexec.scheduleWithFixedDelay(gpsDataLoader, 100, 2, TimeUnit.SECONDS);//抓取GPS数据
  132 +
  133 + sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);//GPS设备掉离线
  134 + sexec.scheduleWithFixedDelay(schedulePstThread, 120, 10, TimeUnit.SECONDS);//班次延迟入库线程
  135 + sexec.scheduleWithFixedDelay(seiPstThread, 160, 60, TimeUnit.SECONDS);//班次修正日志入库
135 sexec.scheduleWithFixedDelay(directivesPstThread, 180, 100, TimeUnit.SECONDS);//调度指令延迟入库 136 sexec.scheduleWithFixedDelay(directivesPstThread, 180, 100, TimeUnit.SECONDS);//调度指令延迟入库
136 sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);//线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作) 137 sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);//线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作)
137 - sexec.scheduleWithFixedDelay(sampleTimeDataLoader, 12, 120 * 60, TimeUnit.SECONDS);//到离站预测需要的站点间耗时数据 138 + sexec.scheduleWithFixedDelay(sampleTimeDataLoader, 140, 120 * 60, TimeUnit.SECONDS);//到离站预测需要的站点间耗时数据
138 sexec.scheduleWithFixedDelay(basicDataLoader, 2, 2, TimeUnit.HOURS);//基础数据更新 139 sexec.scheduleWithFixedDelay(basicDataLoader, 2, 2, TimeUnit.HOURS);//基础数据更新
139 DirectivePushQueue.start();//消息队列 -指令,系统下发的 140 DirectivePushQueue.start();//消息队列 -指令,系统下发的
140 WebSocketPushQueue.start();//消息队列 -webSocket ,推送至线调web页面的 141 WebSocketPushQueue.start();//消息队列 -webSocket ,推送至线调web页面的
141 142
142 /** 线调为其他程序提供的数据 --写入数据库 */ 143 /** 线调为其他程序提供的数据 --写入数据库 */
143 - sexec.scheduleWithFixedDelay(fcxxUpdateThread, 60, 40, TimeUnit.SECONDS);//发车信息(发车屏、信息发布) 144 + sexec.scheduleWithFixedDelay(fcxxUpdateThread, 160, 40, TimeUnit.SECONDS);//发车信息(发车屏、信息发布)
144 //线路首末班数据(网关用,班次更新时写入) 145 //线路首末班数据(网关用,班次更新时写入)
145 //com.bsth.data.schedule.f_a_l.FirstAndLastHandler 146 //com.bsth.data.schedule.f_a_l.FirstAndLastHandler
146 - sexec.scheduleWithFixedDelay(schSiginUpdateDBThread, 60, 60 * 30, TimeUnit.SECONDS);//无法自动完成的班次信息(网关用,补信号) 147 + sexec.scheduleWithFixedDelay(schSiginUpdateDBThread, 160, 60 * 30, TimeUnit.SECONDS);//无法自动完成的班次信息(网关用,补信号)
147 148
148 //运管处静态数据提交 149 //运管处静态数据提交
149 log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处"); 150 log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处");
src/main/java/com/bsth/controller/LineController.java
@@ -90,7 +90,7 @@ public class LineController extends BaseController<Line, Integer> { @@ -90,7 +90,7 @@ public class LineController extends BaseController<Line, Integer> {
90 map.put("status", ResponseCode.ERROR); 90 map.put("status", ResponseCode.ERROR);
91 return map; 91 return map;
92 } 92 }
93 - return service.save(l); 93 + return service.update(l);
94 } 94 }
95 95
96 @RequestMapping(value ="/findById" , method = RequestMethod.GET) 96 @RequestMapping(value ="/findById" , method = RequestMethod.GET)
src/main/java/com/bsth/data/gpsdata/arrival/GeoCacheData.java
@@ -33,8 +33,8 @@ public class GeoCacheData { @@ -33,8 +33,8 @@ public class GeoCacheData {
33 33
34 static Logger logger = LoggerFactory.getLogger(GeoCacheData.class); 34 static Logger logger = LoggerFactory.getLogger(GeoCacheData.class);
35 35
36 - //每辆车缓存最后1000条gps  
37 - private static final int CACHE_SIZE = 1000; 36 + //每辆车缓存最后500条gps
  37 + private static final int CACHE_SIZE = 500;
38 private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>(); 38 private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>();
39 39
40 //线路路段走向 40 //线路路段走向
src/main/java/com/bsth/data/gpsdata/arrival/GpsRealAnalyse.java
@@ -41,7 +41,8 @@ public class GpsRealAnalyse { @@ -41,7 +41,8 @@ public class GpsRealAnalyse {
41 @Autowired 41 @Autowired
42 GpsRealData gpsRealData; 42 GpsRealData gpsRealData;
43 43
44 - static ExecutorService threadPool = Executors.newFixedThreadPool(25); 44 + final static int POOL_SIZE = 15;
  45 + static ExecutorService threadPool = Executors.newFixedThreadPool(POOL_SIZE + 1);
45 46
46 public static long st; 47 public static long st;
47 public static CountDownLatch count; 48 public static CountDownLatch count;
@@ -60,19 +61,27 @@ public class GpsRealAnalyse { @@ -60,19 +61,27 @@ public class GpsRealAnalyse {
60 return; 61 return;
61 st = System.currentTimeMillis(); 62 st = System.currentTimeMillis();
62 63
63 - //按线路分组gps 64 + //按设备号分组数据(一个设备号的多条数据,必须在一个线程里跑)
64 ArrayListMultimap multimap = ArrayListMultimap.create(); 65 ArrayListMultimap multimap = ArrayListMultimap.create();
65 for (GpsEntity gps : list) { 66 for (GpsEntity gps : list) {
66 - multimap.put(gps.getLineId(), gps); 67 + multimap.put(gps.getDeviceId(), gps);
67 } 68 }
68 -  
69 - Set<String> ks = multimap.keySet();  
70 - 69 + List<String> deviceList = new ArrayList<>(multimap.keySet());
  70 +
  71 + //数据均分给20个线程
  72 + ArrayListMultimap dataListMap = ArrayListMultimap.create();
  73 + int size = deviceList.size(), threadIndex=0, threadSize = size / POOL_SIZE;
  74 + for(int i = 0; i < size; i++){
  75 + if(i % threadSize == 0)
  76 + threadIndex ++;
  77 + dataListMap.putAll(threadIndex, multimap.get(deviceList.get(i)));
  78 + }
  79 + Set<Integer> ks = dataListMap.keySet();
71 logger.info("analyse gps size: " + list.size() + ", ks: " + ks.size()); 80 logger.info("analyse gps size: " + list.size() + ", ks: " + ks.size());
72 count = new CountDownLatch(ks.size()); 81 count = new CountDownLatch(ks.size());
73 82
74 - for (String lineCode : ks) {  
75 - threadPool.execute(new SignalHandleThread(multimap.get(lineCode), count)); 83 + for (Integer index : ks) {
  84 + threadPool.execute(new SignalHandleThread(dataListMap.get(index), count));
76 } 85 }
77 86
78 //等待子线程结束 87 //等待子线程结束
src/main/java/com/bsth/data/summary/service/impl/FastAndSlowServiceImpl.java
@@ -41,7 +41,7 @@ public class FastAndSlowServiceImpl extends BaseServiceImpl&lt;FastAndSlow, Long&gt; i @@ -41,7 +41,7 @@ public class FastAndSlowServiceImpl extends BaseServiceImpl&lt;FastAndSlow, Long&gt; i
41 try { 41 try {
42 //最多5天 42 //最多5天
43 map.put("rq_le", maxEndTime(map.get("rq_ge").toString() 43 map.put("rq_le", maxEndTime(map.get("rq_ge").toString()
44 - , map.get("rq_le").toString(), 5)); 44 + , map.get("rq_le").toString(), 4));
45 45
46 List<FastAndSlow> list = (List) super.list(map); 46 List<FastAndSlow> list = (List) super.list(map);
47 String type = String.valueOf(map.get("type")); 47 String type = String.valueOf(map.get("type"));
@@ -95,7 +95,7 @@ public class FastAndSlowServiceImpl extends BaseServiceImpl&lt;FastAndSlow, Long&gt; i @@ -95,7 +95,7 @@ public class FastAndSlowServiceImpl extends BaseServiceImpl&lt;FastAndSlow, Long&gt; i
95 wb.setSheetName(i, ks.get(i)); 95 wb.setSheetName(i, ks.get(i));
96 } 96 }
97 //删除多余的sheet 97 //删除多余的sheet
98 - for(int i = ks.size(); i <31; i++){ 98 + for(int i = ks.size(); i <32; i++){
99 wb.removeSheetAt(ks.size()); 99 wb.removeSheetAt(ks.size());
100 } 100 }
101 101
src/main/java/com/bsth/repository/LineRepository.java
1 package com.bsth.repository; 1 package com.bsth.repository;
2 2
  3 +import java.util.Date;
3 import java.util.List; 4 import java.util.List;
  5 +import java.util.Map;
4 6
  7 +import org.springframework.data.jpa.repository.Modifying;
5 import org.springframework.data.jpa.repository.Query; 8 import org.springframework.data.jpa.repository.Query;
6 import org.springframework.stereotype.Repository; 9 import org.springframework.stereotype.Repository;
  10 +import org.springframework.transaction.annotation.Transactional;
7 11
8 import com.bsth.entity.Line; 12 import com.bsth.entity.Line;
9 13
@@ -24,8 +28,7 @@ import com.bsth.entity.Line; @@ -24,8 +28,7 @@ import com.bsth.entity.Line;
24 */ 28 */
25 @Repository 29 @Repository
26 public interface LineRepository extends BaseRepository<Line, Integer> { 30 public interface LineRepository extends BaseRepository<Line, Integer> {
27 -  
28 - 31 +
29 /** 32 /**
30 * 获取线路编码 33 * 获取线路编码
31 * 34 *
@@ -33,15 +36,31 @@ public interface LineRepository extends BaseRepository&lt;Line, Integer&gt; { @@ -33,15 +36,31 @@ public interface LineRepository extends BaseRepository&lt;Line, Integer&gt; {
33 */ 36 */
34 @Query(value = " SELECT IFNULL(num,0) as maxId from (SELECT MAX(id) as num FROM bsth_c_line) k ", nativeQuery = true) 37 @Query(value = " SELECT IFNULL(num,0) as maxId from (SELECT MAX(id) as num FROM bsth_c_line) k ", nativeQuery = true)
35 public long selectMaxIdToLineCode(); 38 public long selectMaxIdToLineCode();
36 - 39 +
37 @Query(value = " SELECT l FROM Line l where l.name like ?1") 40 @Query(value = " SELECT l FROM Line l where l.name like ?1")
38 List<Line> findLine(String line); 41 List<Line> findLine(String line);
39 - 42 +
40 public Line findByLineCode(String string); 43 public Line findByLineCode(String string);
41 - 44 +
42 @Query(value = " SELECT l FROM Line l where l.company like %?1% and l.brancheCompany like %?2% and l.lineCode like ?3") 45 @Query(value = " SELECT l FROM Line l where l.company like %?1% and l.brancheCompany like %?2% and l.lineCode like ?3")
43 public List<Line> findLineBygsBm(String gsBm, String fgsBm, String line); 46 public List<Line> findLineBygsBm(String gsBm, String fgsBm, String line);
44 47
45 @Query("SELECT L FROM Line L where L.destroy=0") 48 @Query("SELECT L FROM Line L where L.destroy=0")
46 List<Line> findAllService(); 49 List<Line> findAllService();
  50 +
  51 +
  52 + @Modifying
  53 + @Query(value = "UPDATE Line l set l.name=?1 , l.company=?2, l.brancheCompany=?3, "
  54 + + "l.level=?4, l.nature=?5, l.startStationName=?6, l.endStationName=?7, l.startStationFirstTime=?8, "
  55 + + "l.startStationEndTime=?9, l.endStationFirstTime=?10, l.endStationEndTime=?11, l.linePlayType=?12, "
  56 + + "l.openDate=?13, l.es=?14, l.shortName=?15, l.shanghaiLinecode=?16, l.eqLinecode=?17, l.startPhone=?18, "
  57 + + "l.endPhone=?19, l.carSumNumber=?20, l.hvacCarNumber=?21, l.ordCarNumber=?22, l.history=?23, "
  58 + + "l.descriptions=?24, l.destroy=?25, l.supperLine=?26, l.spacGrade=?27, l.warrantCar=?28 where "
  59 + + "l.lineCode=?29 ")
  60 + public int update(String name, String company, String brancheCompany, String level, String nature,
  61 + String startStationName, String endStationName, String startStationFirstTime, String startStationEndTime,
  62 + String endStationFirstTime, String endStationEndTime, Integer linePlayType, Date openDate, String es,
  63 + String shortName, String shanghaiLinecode, String eqLinecode, String startPhone, String endPhone,
  64 + Integer carSumNumber, Integer hvacCarNumber, Integer ordCarNumber, String history, String descriptions,
  65 + Integer destroy, Integer supperLine, Integer spacGrade, Integer warrantCar, String lineCode);
47 } 66 }
src/main/java/com/bsth/service/LineService.java
@@ -36,4 +36,6 @@ public interface LineService extends BaseService&lt;Line, Integer&gt; { @@ -36,4 +36,6 @@ public interface LineService extends BaseService&lt;Line, Integer&gt; {
36 Line findById(Integer id); 36 Line findById(Integer id);
37 37
38 String lineCodeVerification(String lineCode); 38 String lineCodeVerification(String lineCode);
  39 +
  40 + Map<String, Object> update(Line l);
39 } 41 }
src/main/java/com/bsth/service/impl/LineServiceImpl.java
@@ -5,7 +5,9 @@ import java.util.Map; @@ -5,7 +5,9 @@ import java.util.Map;
5 5
6 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.stereotype.Service; 7 import org.springframework.stereotype.Service;
  8 +import org.springframework.transaction.annotation.Transactional;
8 9
  10 +import com.bsth.common.ResponseCode;
9 import com.bsth.entity.Line; 11 import com.bsth.entity.Line;
10 import com.bsth.repository.LineRepository; 12 import com.bsth.repository.LineRepository;
11 import com.bsth.service.LineService; 13 import com.bsth.service.LineService;
@@ -27,11 +29,11 @@ import com.bsth.service.LineService; @@ -27,11 +29,11 @@ import com.bsth.service.LineService;
27 */ 29 */
28 30
29 @Service 31 @Service
30 -public class LineServiceImpl extends BaseServiceImpl<Line, Integer> implements LineService{  
31 - 32 +public class LineServiceImpl extends BaseServiceImpl<Line, Integer> implements LineService {
  33 +
32 @Autowired 34 @Autowired
33 private LineRepository repository; 35 private LineRepository repository;
34 - 36 +
35 /** 37 /**
36 * 获取线路编码 38 * 获取线路编码
37 * 39 *
@@ -41,7 +43,7 @@ public class LineServiceImpl extends BaseServiceImpl&lt;Line, Integer&gt; implements L @@ -41,7 +43,7 @@ public class LineServiceImpl extends BaseServiceImpl&lt;Line, Integer&gt; implements L
41 // TODO Auto-generated method stub 43 // TODO Auto-generated method stub
42 return repository.selectMaxIdToLineCode(); 44 return repository.selectMaxIdToLineCode();
43 } 45 }
44 - 46 +
45 @Override 47 @Override
46 public Line findByLineCode(String lineCode) { 48 public Line findByLineCode(String lineCode) {
47 return repository.findByLineCode(lineCode); 49 return repository.findByLineCode(lineCode);
@@ -57,10 +59,31 @@ public class LineServiceImpl extends BaseServiceImpl&lt;Line, Integer&gt; implements L @@ -57,10 +59,31 @@ public class LineServiceImpl extends BaseServiceImpl&lt;Line, Integer&gt; implements L
57 public String lineCodeVerification(String lineCode) { 59 public String lineCodeVerification(String lineCode) {
58 String state = "true"; 60 String state = "true";
59 Line line = repository.findByLineCode(lineCode); 61 Line line = repository.findByLineCode(lineCode);
60 - if(line != null){ 62 + if (line != null) {
61 state = "false"; 63 state = "false";
62 } 64 }
63 return state; 65 return state;
64 } 66 }
  67 +
  68 + @Transactional
  69 + @Override
  70 + public Map<String, Object> update(Line l) {
  71 + Map<String, Object> map = new HashMap<>();
  72 +
  73 + int status = repository.update(l.getName(), l.getCompany(), l.getBrancheCompany(), l.getLevel(), l.getNature(),
  74 + l.getStartStationName(), l.getEndStationName(), l.getStartStationFirstTime(),
  75 + l.getStartStationEndTime(), l.getEndStationFirstTime(), l.getEndStationEndTime(), l.getLinePlayType(),
  76 + l.getOpenDate(), l.getEs(), l.getShortName(), l.getShanghaiLinecode(), l.getEqLinecode(),
  77 + l.getStartPhone(), l.getEndPhone(), l.getCarSumNumber(), l.getHvacCarNumber(), l.getOrdCarNumber(),
  78 + l.getHistory(), l.getDescriptions(), l.getDestroy(), l.getSupperLine(), l.getSpacGrade(),
  79 + l.getWarrantCar(), l.getLineCode());
  80 + if (status==1) {
  81 + map.put("status", ResponseCode.SUCCESS);
  82 + } else {
  83 + map.put("status", ResponseCode.ERROR);
  84 + }
  85 +
  86 + return map;
  87 + }
65 88
66 } 89 }
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
@@ -1909,7 +1909,19 @@ public class ReportServiceImpl implements ReportService{ @@ -1909,7 +1909,19 @@ public class ReportServiceImpl implements ReportService{
1909 } 1909 }
1910 1910
1911 List<ScheduleRealInfo> sList=scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date); 1911 List<ScheduleRealInfo> sList=scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
1912 - Map<String, Object> newMap=culateService.culateWdbcs(sList); 1912 + List<ScheduleRealInfo> lists=new ArrayList<ScheduleRealInfo>();
  1913 + for (int i = 0; i < sList.size(); i++) {
  1914 + ScheduleRealInfo s=sList.get(i);
  1915 + Set<ChildTaskPlan> cts = s.getcTasks();
  1916 + if(cts != null && cts.size() > 0){
  1917 + lists.add(s);
  1918 + }else{
  1919 + if(s.getZdsjActual()!=null){
  1920 + lists.add(s);
  1921 + }
  1922 + }
  1923 + }
  1924 + Map<String, Object> newMap=culateService.culateWdbcs(lists);
1913 newMap.put("jhbc", culateService.culateJhbc(sList,"")); 1925 newMap.put("jhbc", culateService.culateJhbc(sList,""));
1914 newMap.put("jhbczgf", culateService.culateJhbc(sList,"zgf")); 1926 newMap.put("jhbczgf", culateService.culateJhbc(sList,"zgf"));
1915 newMap.put("jhbcwgf", culateService.culateJhbc(sList,"wgf")); 1927 newMap.put("jhbcwgf", culateService.culateJhbc(sList,"wgf"));
@@ -1917,35 +1929,35 @@ public class ReportServiceImpl implements ReportService{ @@ -1917,35 +1929,35 @@ public class ReportServiceImpl implements ReportService{
1917 newMap.put("jhglzgf", culateService.culateJhgl_(sList,"zgf")); 1929 newMap.put("jhglzgf", culateService.culateJhgl_(sList,"zgf"));
1918 newMap.put("jhglwgf", culateService.culateJhgl_(sList,"wgf")); 1930 newMap.put("jhglwgf", culateService.culateJhgl_(sList,"wgf"));
1919 1931
1920 - newMap.put("sjbc", culateService.culateSjbc(sList,""));  
1921 - newMap.put("sjbczgf", culateService.culateSjbc(sList,"zgf"));  
1922 - newMap.put("sjbcwgf", culateService.culateSjbc(sList,"wgf"));  
1923 - newMap.put("sjgl", culateService.culateSjgl(sList));  
1924 - newMap.put("sjglzgf", culateService.culateSjgl_(sList,"zgf"));  
1925 - newMap.put("sjglwgf", culateService.culateSjgl_(sList,"wgf")); 1932 + newMap.put("sjbc", culateService.culateSjbc(lists,""));
  1933 + newMap.put("sjbczgf", culateService.culateSjbc(lists,"zgf"));
  1934 + newMap.put("sjbcwgf", culateService.culateSjbc(lists,"wgf"));
  1935 + newMap.put("sjgl", culateService.culateSjgl(lists));
  1936 + newMap.put("sjglzgf", culateService.culateSjgl_(lists,"zgf"));
  1937 + newMap.put("sjglwgf", culateService.culateSjgl_(lists,"wgf"));
1926 1938
1927 - newMap.put("lbgl", culateService.culateLbgl(sList));  
1928 - newMap.put("lbbc", culateService.culateLbbc(sList));  
1929 - newMap.put("ljgl", culateService.culateLjgl(sList));  
1930 - newMap.put("ljglzgf", culateService.culateLjgl_(sList,"zgf"));  
1931 - newMap.put("ljglwgf", culateService.culateLjgl_(sList,"wgf"));  
1932 -  
1933 - newMap.put("ljbc", culateService.culateLjbc(sList,""));  
1934 - newMap.put("ksgl", culateService.culateKsgl(sList)); 1939 + newMap.put("lbgl", culateService.culateLbgl(lists));
  1940 + newMap.put("lbbc", culateService.culateLbbc(lists));
  1941 + newMap.put("ljgl", culateService.culateLjgl(lists));
  1942 + newMap.put("ljglzgf", culateService.culateLjgl_(lists,"zgf"));
  1943 + newMap.put("ljglwgf", culateService.culateLjgl_(lists,"wgf"));
  1944 +
  1945 + newMap.put("ljbc", culateService.culateLjbc(lists,""));
  1946 + newMap.put("ksgl", culateService.culateKsgl(lists));
1935 1947
1936 - newMap.put("jhfbbc",culateService.culateDtfzbc(sList, "venting", "jh", ""));  
1937 - newMap.put("jhfbbczgf",culateService.culateDtfzbc(sList, "venting", "jh", "zgf"));  
1938 - newMap.put("jhfbbcwgf",culateService.culateDtfzbc(sList, "venting", "jh", "wgf"));  
1939 - newMap.put("sjfbbc",culateService.culateDtfzbc(sList, "venting", "sj", ""));  
1940 - newMap.put("sjfbbczgf",culateService.culateDtfzbc(sList, "venting", "sj", "zgf"));  
1941 - newMap.put("sjfbbcwgf",culateService.culateDtfzbc(sList, "venting", "sj", "wgf")); 1948 + newMap.put("jhfbbc",culateService.culateDtfzbc(lists, "venting", "jh", ""));
  1949 + newMap.put("jhfbbczgf",culateService.culateDtfzbc(lists, "venting", "jh", "zgf"));
  1950 + newMap.put("jhfbbcwgf",culateService.culateDtfzbc(lists, "venting", "jh", "wgf"));
  1951 + newMap.put("sjfbbc",culateService.culateDtfzbc(lists, "venting", "sj", ""));
  1952 + newMap.put("sjfbbczgf",culateService.culateDtfzbc(lists, "venting", "sj", "zgf"));
  1953 + newMap.put("sjfbbcwgf",culateService.culateDtfzbc(lists, "venting", "sj", "wgf"));
1942 1954
1943 - newMap.put("jhdtbc",culateService.culateDtfzbc(sList, "major", "jh", ""));  
1944 - newMap.put("jhdtbczgf",culateService.culateDtfzbc(sList, "major", "jh", "zgf"));  
1945 - newMap.put("jhdtbcwgf",culateService.culateDtfzbc(sList, "major", "jh", "wgf"));  
1946 - newMap.put("sjdtbc",culateService.culateDtfzbc(sList, "major", "sj", ""));  
1947 - newMap.put("sjdtbczgf",culateService.culateDtfzbc(sList, "major", "sj", "zgf"));  
1948 - newMap.put("sjdtbcwgf",culateService.culateDtfzbc(sList, "major", "sj", "wgf")); 1955 + newMap.put("jhdtbc",culateService.culateDtfzbc(lists, "major", "jh", ""));
  1956 + newMap.put("jhdtbczgf",culateService.culateDtfzbc(lists, "major", "jh", "zgf"));
  1957 + newMap.put("jhdtbcwgf",culateService.culateDtfzbc(lists, "major", "jh", "wgf"));
  1958 + newMap.put("sjdtbc",culateService.culateDtfzbc(lists, "major", "sj", ""));
  1959 + newMap.put("sjdtbczgf",culateService.culateDtfzbc(lists, "major", "sj", "zgf"));
  1960 + newMap.put("sjdtbcwgf",culateService.culateDtfzbc(lists, "major", "sj", "wgf"));
1949 return newMap; 1961 return newMap;
1950 } 1962 }
1951 @Override 1963 @Override
src/main/resources/datatools/ktrs/employeesConfigDataInput.ktr
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<transformation>  
3 - <info>  
4 - <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</name>  
5 - <description>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</description>  
6 - <extended_description>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;</extended_description>  
7 - <trans_version/>  
8 - <trans_type>Normal</trans_type>  
9 - <trans_status>0</trans_status>  
10 - <directory>&#x2f;</directory>  
11 - <parameters>  
12 - <parameter>  
13 - <name>erroroutputdir</name>  
14 - <default_value/>  
15 - <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>  
16 - </parameter>  
17 - <parameter>  
18 - <name>filepath</name>  
19 - <default_value/>  
20 - <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>  
21 - </parameter>  
22 - </parameters>  
23 - <log>  
24 -<trans-log-table><connection/>  
25 -<schema/>  
26 -<table/>  
27 -<size_limit_lines/>  
28 -<interval/>  
29 -<timeout_days/>  
30 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>  
31 -<perf-log-table><connection/>  
32 -<schema/>  
33 -<table/>  
34 -<interval/>  
35 -<timeout_days/>  
36 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>  
37 -<channel-log-table><connection/>  
38 -<schema/>  
39 -<table/>  
40 -<timeout_days/>  
41 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>  
42 -<step-log-table><connection/>  
43 -<schema/>  
44 -<table/>  
45 -<timeout_days/>  
46 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>  
47 -<metrics-log-table><connection/>  
48 -<schema/>  
49 -<table/>  
50 -<timeout_days/>  
51 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>  
52 - </log>  
53 - <maxdate>  
54 - <connection/>  
55 - <table/>  
56 - <field/>  
57 - <offset>0.0</offset>  
58 - <maxdiff>0.0</maxdiff>  
59 - </maxdate>  
60 - <size_rowset>10000</size_rowset>  
61 - <sleep_time_empty>50</sleep_time_empty>  
62 - <sleep_time_full>50</sleep_time_full>  
63 - <unique_connections>N</unique_connections>  
64 - <feedback_shown>Y</feedback_shown>  
65 - <feedback_size>50000</feedback_size>  
66 - <using_thread_priorities>Y</using_thread_priorities>  
67 - <shared_objects_file/>  
68 - <capture_step_performance>N</capture_step_performance>  
69 - <step_performance_capturing_delay>1000</step_performance_capturing_delay>  
70 - <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>  
71 - <dependencies>  
72 - </dependencies>  
73 - <partitionschemas>  
74 - </partitionschemas>  
75 - <slaveservers>  
76 - </slaveservers>  
77 - <clusterschemas>  
78 - </clusterschemas>  
79 - <created_user>-</created_user>  
80 - <created_date>2016&#x2f;06&#x2f;29 15&#x3a;12&#x3a;27.273</created_date>  
81 - <modified_user>-</modified_user>  
82 - <modified_date>2016&#x2f;06&#x2f;29 15&#x3a;12&#x3a;27.273</modified_date>  
83 - <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>  
84 - <is_key_private>N</is_key_private>  
85 - </info>  
86 - <notepads>  
87 - <notepad>  
88 - <note>&#x8fd9;&#x91cc;&#x6709;&#x4e9b;&#x95ee;&#x9898;&#xa;&#x5728;window2012&#x7684;&#x73af;&#x5883;&#x4e0b;&#xff0c;&#xa;MySql&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x4e2d;&#x5982;&#x679c;&#x8fd4;&#x56de;&#x4e2d;&#x6587;&#x5185;&#x5bb9;&#x7684;&#x5b57;&#x6bb5;&#xff0c;&#x8fd9;&#x4e2a;&#x5185;&#x5bb9;&#x4e71;&#x7801;&#xa;&#x89e3;&#x51b3;&#x529e;&#x6cd5;&#xff0c;&#x5c31;&#x662f;&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x5168;&#x90e8;&#x7f13;&#x5b58;&#xff0c;&#x5c31;&#x4e0d;&#x4e71;&#x7801;&#xa;linux&#x73af;&#x5883;&#x4e0b;&#x6ca1;&#x95ee;&#x9898;</note>  
89 - <xloc>101</xloc>  
90 - <yloc>264</yloc>  
91 - <width>333</width>  
92 - <heigth>90</heigth>  
93 - <fontname>YaHei Consolas Hybrid</fontname>  
94 - <fontsize>12</fontsize>  
95 - <fontbold>N</fontbold>  
96 - <fontitalic>N</fontitalic>  
97 - <fontcolorred>0</fontcolorred>  
98 - <fontcolorgreen>0</fontcolorgreen>  
99 - <fontcolorblue>0</fontcolorblue>  
100 - <backgroundcolorred>255</backgroundcolorred>  
101 - <backgroundcolorgreen>205</backgroundcolorgreen>  
102 - <backgroundcolorblue>112</backgroundcolorblue>  
103 - <bordercolorred>100</bordercolorred>  
104 - <bordercolorgreen>100</bordercolorgreen>  
105 - <bordercolorblue>100</bordercolorblue>  
106 - <drawshadow>Y</drawshadow>  
107 - </notepad>  
108 - </notepads>  
109 - <connection>  
110 - <name>192.168.168.1_jwgl_dw</name>  
111 - <server>192.168.168.1</server>  
112 - <type>ORACLE</type>  
113 - <access>Native</access>  
114 - <database>orcl</database>  
115 - <port>1521</port>  
116 - <username>jwgl_dw</username>  
117 - <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>  
118 - <servername/>  
119 - <data_tablespace/>  
120 - <index_tablespace/>  
121 - <attributes>  
122 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
123 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
124 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
125 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
126 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
127 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
128 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
129 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
130 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
131 - </attributes>  
132 - </connection>  
133 - <connection>  
134 - <name>bus_control_variable</name>  
135 - <server>&#x24;&#x7b;v_db_ip&#x7d;</server>  
136 - <type>MYSQL</type>  
137 - <access>Native</access>  
138 - <database>&#x24;&#x7b;v_db_dname&#x7d;</database>  
139 - <port>3306</port>  
140 - <username>&#x24;&#x7b;v_db_uname&#x7d;</username>  
141 - <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>  
142 - <servername/>  
143 - <data_tablespace/>  
144 - <index_tablespace/>  
145 - <attributes>  
146 - <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>  
147 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
148 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
149 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
150 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
151 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
152 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
153 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
154 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
155 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
156 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
157 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
158 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
159 - </attributes>  
160 - </connection>  
161 - <connection>  
162 - <name>bus_control_&#x516c;&#x53f8;_201</name>  
163 - <server>localhost</server>  
164 - <type>MYSQL</type>  
165 - <access>Native</access>  
166 - <database>control</database>  
167 - <port>3306</port>  
168 - <username>root</username>  
169 - <password>Encrypted </password>  
170 - <servername/>  
171 - <data_tablespace/>  
172 - <index_tablespace/>  
173 - <attributes>  
174 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
175 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
176 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
177 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
178 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
179 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
180 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
181 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
182 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
183 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
184 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
185 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
186 - </attributes>  
187 - </connection>  
188 - <connection>  
189 - <name>bus_control_&#x672c;&#x673a;</name>  
190 - <server>localhost</server>  
191 - <type>MYSQL</type>  
192 - <access>Native</access>  
193 - <database>control</database>  
194 - <port>3306</port>  
195 - <username>root</username>  
196 - <password>Encrypted </password>  
197 - <servername/>  
198 - <data_tablespace/>  
199 - <index_tablespace/>  
200 - <attributes>  
201 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
202 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
203 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
204 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
205 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
206 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
207 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
208 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
209 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
210 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
211 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
212 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
213 - </attributes>  
214 - </connection>  
215 - <connection>  
216 - <name>xlab_mysql_youle</name>  
217 - <server>101.231.124.8</server>  
218 - <type>MYSQL</type>  
219 - <access>Native</access>  
220 - <database>xlab_youle</database>  
221 - <port>45687</port>  
222 - <username>xlab-youle</username>  
223 - <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>  
224 - <servername/>  
225 - <data_tablespace/>  
226 - <index_tablespace/>  
227 - <attributes>  
228 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
229 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
230 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
231 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
232 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
233 - <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>  
234 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
235 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
236 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
237 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
238 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
239 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
240 - </attributes>  
241 - </connection>  
242 - <connection>  
243 - <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>  
244 - <server>localhost</server>  
245 - <type>MYSQL</type>  
246 - <access>Native</access>  
247 - <database>xlab_youle</database>  
248 - <port>3306</port>  
249 - <username>root</username>  
250 - <password>Encrypted </password>  
251 - <servername/>  
252 - <data_tablespace/>  
253 - <index_tablespace/>  
254 - <attributes>  
255 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
256 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
257 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
258 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
259 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
260 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
261 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
262 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
263 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
264 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
265 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
266 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
267 - </attributes>  
268 - </connection>  
269 - <connection>  
270 - <name>xlab_youle</name>  
271 - <server/>  
272 - <type>MYSQL</type>  
273 - <access>JNDI</access>  
274 - <database>xlab_youle</database>  
275 - <port>1521</port>  
276 - <username/>  
277 - <password>Encrypted </password>  
278 - <servername/>  
279 - <data_tablespace/>  
280 - <index_tablespace/>  
281 - <attributes>  
282 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
283 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
284 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
285 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
286 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
287 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
288 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
289 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
290 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
291 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
292 - </attributes>  
293 - </connection>  
294 - <order>  
295 - <hop> <from>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>  
296 - <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>  
297 - <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</to><enabled>Y</enabled> </hop>  
298 - <hop> <from>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</from><to>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>  
299 - <hop> <from>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</from><to>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
300 - <hop> <from>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</from><to>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
301 - <hop> <from>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>  
302 - <hop> <from>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</to><enabled>Y</enabled> </hop>  
303 - <hop> <from>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>  
304 - </order>  
305 - <step>  
306 - <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name>  
307 - <type>ExcelInput</type>  
308 - <description/>  
309 - <distribute>Y</distribute>  
310 - <custom_distribution/>  
311 - <copies>1</copies>  
312 - <partitioning>  
313 - <method>none</method>  
314 - <schema_name/>  
315 - </partitioning>  
316 - <header>Y</header>  
317 - <noempty>Y</noempty>  
318 - <stoponempty>N</stoponempty>  
319 - <filefield/>  
320 - <sheetfield/>  
321 - <sheetrownumfield/>  
322 - <rownumfield/>  
323 - <sheetfield/>  
324 - <filefield/>  
325 - <limit>0</limit>  
326 - <encoding/>  
327 - <add_to_result_filenames>Y</add_to_result_filenames>  
328 - <accept_filenames>Y</accept_filenames>  
329 - <accept_field>filepath_</accept_field>  
330 - <accept_stepname>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</accept_stepname>  
331 - <file>  
332 - <name/>  
333 - <filemask/>  
334 - <exclude_filemask/>  
335 - <file_required>N</file_required>  
336 - <include_subfolders>N</include_subfolders>  
337 - </file>  
338 - <fields>  
339 - <field>  
340 - <name>&#x7ebf;&#x8def;</name>  
341 - <type>String</type>  
342 - <length>-1</length>  
343 - <precision>-1</precision>  
344 - <trim_type>none</trim_type>  
345 - <repeat>N</repeat>  
346 - <format/>  
347 - <currency/>  
348 - <decimal/>  
349 - <group/>  
350 - </field>  
351 - <field>  
352 - <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>  
353 - <type>String</type>  
354 - <length>-1</length>  
355 - <precision>-1</precision>  
356 - <trim_type>none</trim_type>  
357 - <repeat>N</repeat>  
358 - <format>&#x23;</format>  
359 - <currency/>  
360 - <decimal/>  
361 - <group/>  
362 - </field>  
363 - <field>  
364 - <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>  
365 - <type>String</type>  
366 - <length>-1</length>  
367 - <precision>-1</precision>  
368 - <trim_type>none</trim_type>  
369 - <repeat>N</repeat>  
370 - <format>&#x23;</format>  
371 - <currency/>  
372 - <decimal/>  
373 - <group/>  
374 - </field>  
375 - <field>  
376 - <name>&#x9a7e;&#x9a76;&#x5458;</name>  
377 - <type>String</type>  
378 - <length>-1</length>  
379 - <precision>-1</precision>  
380 - <trim_type>none</trim_type>  
381 - <repeat>N</repeat>  
382 - <format/>  
383 - <currency/>  
384 - <decimal/>  
385 - <group/>  
386 - </field>  
387 - <field>  
388 - <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>  
389 - <type>String</type>  
390 - <length>-1</length>  
391 - <precision>-1</precision>  
392 - <trim_type>none</trim_type>  
393 - <repeat>N</repeat>  
394 - <format>&#x23;</format>  
395 - <currency/>  
396 - <decimal/>  
397 - <group/>  
398 - </field>  
399 - <field>  
400 - <name>&#x552e;&#x7968;&#x5458;</name>  
401 - <type>String</type>  
402 - <length>-1</length>  
403 - <precision>-1</precision>  
404 - <trim_type>none</trim_type>  
405 - <repeat>N</repeat>  
406 - <format/>  
407 - <currency/>  
408 - <decimal/>  
409 - <group/>  
410 - </field>  
411 - </fields>  
412 - <sheets>  
413 - <sheet>  
414 - <name>&#x5de5;&#x4f5c;&#x8868;1</name>  
415 - <startrow>0</startrow>  
416 - <startcol>0</startcol>  
417 - </sheet>  
418 - </sheets>  
419 - <strict_types>N</strict_types>  
420 - <error_ignored>N</error_ignored>  
421 - <error_line_skipped>N</error_line_skipped>  
422 - <bad_line_files_destination_directory/>  
423 - <bad_line_files_extension>warning</bad_line_files_extension>  
424 - <error_line_files_destination_directory/>  
425 - <error_line_files_extension>error</error_line_files_extension>  
426 - <line_number_files_destination_directory/>  
427 - <line_number_files_extension>line</line_number_files_extension>  
428 - <shortFileFieldName/>  
429 - <pathFieldName/>  
430 - <hiddenFieldName/>  
431 - <lastModificationTimeFieldName/>  
432 - <uriNameFieldName/>  
433 - <rootUriNameFieldName/>  
434 - <extensionFieldName/>  
435 - <sizeFieldName/>  
436 - <spreadsheet_type>JXL</spreadsheet_type>  
437 - <cluster_schema/>  
438 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
439 - <xloc>93</xloc>  
440 - <yloc>51</yloc>  
441 - <draw>Y</draw>  
442 - </GUI>  
443 - </step>  
444 -  
445 - <step>  
446 - <name>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</name>  
447 - <type>Constant</type>  
448 - <description/>  
449 - <distribute>Y</distribute>  
450 - <custom_distribution/>  
451 - <copies>1</copies>  
452 - <partitioning>  
453 - <method>none</method>  
454 - <schema_name/>  
455 - </partitioning>  
456 - <fields>  
457 - <field>  
458 - <name>isCancel</name>  
459 - <type>Integer</type>  
460 - <format/>  
461 - <currency/>  
462 - <decimal/>  
463 - <group/>  
464 - <nullif>0</nullif>  
465 - <length>-1</length>  
466 - <precision>-1</precision>  
467 - <set_empty_string>N</set_empty_string>  
468 - </field>  
469 - </fields>  
470 - <cluster_schema/>  
471 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
472 - <xloc>225</xloc>  
473 - <yloc>53</yloc>  
474 - <draw>Y</draw>  
475 - </GUI>  
476 - </step>  
477 -  
478 - <step>  
479 - <name>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</name>  
480 - <type>DBJoin</type>  
481 - <description/>  
482 - <distribute>Y</distribute>  
483 - <custom_distribution/>  
484 - <copies>1</copies>  
485 - <partitioning>  
486 - <method>none</method>  
487 - <schema_name/>  
488 - </partitioning>  
489 - <connection>bus_control_variable</connection>  
490 - <rowlimit>1</rowlimit>  
491 - <sql>select id as sid from bsth_c_personnel&#xa;where job_codeori &#x3d; &#x3f; and personnel_name &#x3d; &#x3f;</sql>  
492 - <outer_join>Y</outer_join>  
493 - <replace_vars>N</replace_vars>  
494 - <parameter>  
495 - <field>  
496 - <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>  
497 - <type>String</type>  
498 - </field>  
499 - <field>  
500 - <name>&#x552e;&#x7968;&#x5458;</name>  
501 - <type>String</type>  
502 - </field>  
503 - </parameter>  
504 - <cluster_schema/>  
505 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
506 - <xloc>830</xloc>  
507 - <yloc>45</yloc>  
508 - <draw>Y</draw>  
509 - </GUI>  
510 - </step>  
511 -  
512 - <step>  
513 - <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</name>  
514 - <type>InsertUpdate</type>  
515 - <description/>  
516 - <distribute>Y</distribute>  
517 - <custom_distribution/>  
518 - <copies>1</copies>  
519 - <partitioning>  
520 - <method>none</method>  
521 - <schema_name/>  
522 - </partitioning>  
523 - <connection>bus_control_variable</connection>  
524 - <commit>100</commit>  
525 - <update_bypassed>N</update_bypassed>  
526 - <lookup>  
527 - <schema/>  
528 - <table>bsth_c_s_ecinfo</table>  
529 - <key>  
530 - <name>xlid</name>  
531 - <field>xl</field>  
532 - <condition>&#x3d;</condition>  
533 - <name2/>  
534 - </key>  
535 - <key>  
536 - <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>  
537 - <field>dbbm</field>  
538 - <condition>&#x3d;</condition>  
539 - <name2/>  
540 - </key>  
541 - <key>  
542 - <name>isCancel</name>  
543 - <field>is_cancel</field>  
544 - <condition>&#x3d;</condition>  
545 - <name2/>  
546 - </key>  
547 - <value>  
548 - <name>xl</name>  
549 - <rename>xlid</rename>  
550 - <update>Y</update>  
551 - </value>  
552 - <value>  
553 - <name>dbbm</name>  
554 - <rename>&#x642d;&#x73ed;&#x7f16;&#x7801;</rename>  
555 - <update>Y</update>  
556 - </value>  
557 - <value>  
558 - <name>jsy</name>  
559 - <rename>jid</rename>  
560 - <update>Y</update>  
561 - </value>  
562 - <value>  
563 - <name>spy</name>  
564 - <rename>sid</rename>  
565 - <update>Y</update>  
566 - </value>  
567 - <value>  
568 - <name>is_cancel</name>  
569 - <rename>isCancel</rename>  
570 - <update>Y</update>  
571 - </value>  
572 - </lookup>  
573 - <cluster_schema/>  
574 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
575 - <xloc>833</xloc>  
576 - <yloc>198</yloc>  
577 - <draw>Y</draw>  
578 - </GUI>  
579 - </step>  
580 -  
581 - <step>  
582 - <name>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</name>  
583 - <type>DBLookup</type>  
584 - <description/>  
585 - <distribute>Y</distribute>  
586 - <custom_distribution/>  
587 - <copies>1</copies>  
588 - <partitioning>  
589 - <method>none</method>  
590 - <schema_name/>  
591 - </partitioning>  
592 - <connection>bus_control_variable</connection>  
593 - <cache>Y</cache>  
594 - <cache_load_all>Y</cache_load_all>  
595 - <cache_size>0</cache_size>  
596 - <lookup>  
597 - <schema/>  
598 - <table>bsth_c_line</table>  
599 - <orderby/>  
600 - <fail_on_multiple>N</fail_on_multiple>  
601 - <eat_row_on_failure>N</eat_row_on_failure>  
602 - <key>  
603 - <name>&#x7ebf;&#x8def;</name>  
604 - <field>name</field>  
605 - <condition>&#x3d;</condition>  
606 - <name2/>  
607 - </key>  
608 - <key>  
609 - <name>isCancel</name>  
610 - <field>destroy</field>  
611 - <condition>&#x3d;</condition>  
612 - <name2/>  
613 - </key>  
614 - <value>  
615 - <name>id</name>  
616 - <rename>xlid</rename>  
617 - <default/>  
618 - <type>Integer</type>  
619 - </value>  
620 - </lookup>  
621 - <cluster_schema/>  
622 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
623 - <xloc>397</xloc>  
624 - <yloc>144</yloc>  
625 - <draw>Y</draw>  
626 - </GUI>  
627 - </step>  
628 -  
629 - <step>  
630 - <name>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</name>  
631 - <type>GetVariable</type>  
632 - <description/>  
633 - <distribute>Y</distribute>  
634 - <custom_distribution/>  
635 - <copies>1</copies>  
636 - <partitioning>  
637 - <method>none</method>  
638 - <schema_name/>  
639 - </partitioning>  
640 - <fields>  
641 - <field>  
642 - <name>filepath_</name>  
643 - <variable>&#x24;&#x7b;filepath&#x7d;</variable>  
644 - <type>String</type>  
645 - <format/>  
646 - <currency/>  
647 - <decimal/>  
648 - <group/>  
649 - <length>-1</length>  
650 - <precision>-1</precision>  
651 - <trim_type>none</trim_type>  
652 - </field>  
653 - <field>  
654 - <name>erroroutputdir_</name>  
655 - <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>  
656 - <type>String</type>  
657 - <format/>  
658 - <currency/>  
659 - <decimal/>  
660 - <group/>  
661 - <length>-1</length>  
662 - <precision>-1</precision>  
663 - <trim_type>none</trim_type>  
664 - </field>  
665 - </fields>  
666 - <cluster_schema/>  
667 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
668 - <xloc>94</xloc>  
669 - <yloc>178</yloc>  
670 - <draw>Y</draw>  
671 - </GUI>  
672 - </step>  
673 -  
674 - <step>  
675 - <name>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>  
676 - <type>FilterRows</type>  
677 - <description/>  
678 - <distribute>Y</distribute>  
679 - <custom_distribution/>  
680 - <copies>1</copies>  
681 - <partitioning>  
682 - <method>none</method>  
683 - <schema_name/>  
684 - </partitioning>  
685 -<send_true_to/>  
686 -<send_false_to/>  
687 - <compare>  
688 -<condition>  
689 - <negated>N</negated>  
690 - <leftvalue>xlid</leftvalue>  
691 - <function>IS NOT NULL</function>  
692 - <rightvalue/>  
693 - </condition>  
694 - </compare>  
695 - <cluster_schema/>  
696 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
697 - <xloc>395</xloc>  
698 - <yloc>49</yloc>  
699 - <draw>Y</draw>  
700 - </GUI>  
701 - </step>  
702 -  
703 - <step>  
704 - <name>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>  
705 - <type>FilterRows</type>  
706 - <description/>  
707 - <distribute>Y</distribute>  
708 - <custom_distribution/>  
709 - <copies>1</copies>  
710 - <partitioning>  
711 - <method>none</method>  
712 - <schema_name/>  
713 - </partitioning>  
714 -<send_true_to>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</send_true_to>  
715 -<send_false_to/>  
716 - <compare>  
717 -<condition>  
718 - <negated>N</negated>  
719 - <leftvalue>jid</leftvalue>  
720 - <function>IS NOT NULL</function>  
721 - <rightvalue/>  
722 - </condition>  
723 - </compare>  
724 - <cluster_schema/>  
725 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
726 - <xloc>604</xloc>  
727 - <yloc>46</yloc>  
728 - <draw>Y</draw>  
729 - </GUI>  
730 - </step>  
731 -  
732 - <step>  
733 - <name>&#x9519;&#x8bef;&#x8f93;&#x51fa;</name>  
734 - <type>ExcelOutput</type>  
735 - <description/>  
736 - <distribute>Y</distribute>  
737 - <custom_distribution/>  
738 - <copies>1</copies>  
739 - <partitioning>  
740 - <method>none</method>  
741 - <schema_name/>  
742 - </partitioning>  
743 - <header>Y</header>  
744 - <footer>N</footer>  
745 - <encoding>UTF-8</encoding>  
746 - <append>N</append>  
747 - <add_to_result_filenames>Y</add_to_result_filenames>  
748 - <file>  
749 - <name>&#x24;&#x7b;erroroutputdir&#x7d;&#x2f;&#x4eba;&#x5458;&#x914d;&#x7f6e;_&#x9519;&#x8bef;</name>  
750 - <extention>xls</extention>  
751 - <do_not_open_newfile_init>N</do_not_open_newfile_init>  
752 - <create_parent_folder>N</create_parent_folder>  
753 - <split>N</split>  
754 - <add_date>N</add_date>  
755 - <add_time>N</add_time>  
756 - <SpecifyFormat>N</SpecifyFormat>  
757 - <date_time_format/>  
758 - <sheetname>Sheet1</sheetname>  
759 - <autosizecolums>N</autosizecolums>  
760 - <nullisblank>N</nullisblank>  
761 - <protect_sheet>N</protect_sheet>  
762 - <password>Encrypted </password>  
763 - <splitevery>0</splitevery>  
764 - <usetempfiles>N</usetempfiles>  
765 - <tempdirectory/>  
766 - </file>  
767 - <template>  
768 - <enabled>N</enabled>  
769 - <append>N</append>  
770 - <filename>template.xls</filename>  
771 - </template>  
772 - <fields>  
773 - <field>  
774 - <name>&#x7ebf;&#x8def;</name>  
775 - <type>String</type>  
776 - <format/>  
777 - </field>  
778 - <field>  
779 - <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>  
780 - <type>String</type>  
781 - <format/>  
782 - </field>  
783 - <field>  
784 - <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>  
785 - <type>String</type>  
786 - <format/>  
787 - </field>  
788 - <field>  
789 - <name>&#x9a7e;&#x9a76;&#x5458;</name>  
790 - <type>String</type>  
791 - <format/>  
792 - </field>  
793 - <field>  
794 - <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>  
795 - <type>String</type>  
796 - <format/>  
797 - </field>  
798 - <field>  
799 - <name>&#x552e;&#x7968;&#x5458;</name>  
800 - <type>String</type>  
801 - <format/>  
802 - </field>  
803 - <field>  
804 - <name>isCancel</name>  
805 - <type>Integer</type>  
806 - <format/>  
807 - </field>  
808 - <field>  
809 - <name>xlid</name>  
810 - <type>Integer</type>  
811 - <format/>  
812 - </field>  
813 - <field>  
814 - <name>jid</name>  
815 - <type>Integer</type>  
816 - <format/>  
817 - </field>  
818 - <field>  
819 - <name>sid</name>  
820 - <type>Integer</type>  
821 - <format/>  
822 - </field>  
823 - <field>  
824 - <name>error_count</name>  
825 - <type>Integer</type>  
826 - <format/>  
827 - </field>  
828 - <field>  
829 - <name>error_desc</name>  
830 - <type>String</type>  
831 - <format/>  
832 - </field>  
833 - <field>  
834 - <name>error_column1</name>  
835 - <type>String</type>  
836 - <format/>  
837 - </field>  
838 - <field>  
839 - <name>error_column2</name>  
840 - <type>String</type>  
841 - <format/>  
842 - </field>  
843 - </fields>  
844 - <custom>  
845 - <header_font_name>arial</header_font_name>  
846 - <header_font_size>10</header_font_size>  
847 - <header_font_bold>N</header_font_bold>  
848 - <header_font_italic>N</header_font_italic>  
849 - <header_font_underline>no</header_font_underline>  
850 - <header_font_orientation>horizontal</header_font_orientation>  
851 - <header_font_color>black</header_font_color>  
852 - <header_background_color>none</header_background_color>  
853 - <header_row_height>255</header_row_height>  
854 - <header_alignment>left</header_alignment>  
855 - <header_image/>  
856 - <row_font_name>arial</row_font_name>  
857 - <row_font_size>10</row_font_size>  
858 - <row_font_color>black</row_font_color>  
859 - <row_background_color>none</row_background_color>  
860 - </custom>  
861 - <cluster_schema/>  
862 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
863 - <xloc>833</xloc>  
864 - <yloc>321</yloc>  
865 - <draw>Y</draw>  
866 - </GUI>  
867 - </step>  
868 -  
869 - <step>  
870 - <name>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</name>  
871 - <type>DBJoin</type>  
872 - <description/>  
873 - <distribute>Y</distribute>  
874 - <custom_distribution/>  
875 - <copies>1</copies>  
876 - <partitioning>  
877 - <method>none</method>  
878 - <schema_name/>  
879 - </partitioning>  
880 - <connection>bus_control_variable</connection>  
881 - <rowlimit>1</rowlimit>  
882 - <sql>select id as jid from bsth_c_personnel&#xa;where job_codeori &#x3d; &#x3f; and personnel_name &#x3d; &#x3f;</sql>  
883 - <outer_join>Y</outer_join>  
884 - <replace_vars>N</replace_vars>  
885 - <parameter>  
886 - <field>  
887 - <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>  
888 - <type>String</type>  
889 - </field>  
890 - <field>  
891 - <name>&#x9a7e;&#x9a76;&#x5458;</name>  
892 - <type>String</type>  
893 - </field>  
894 - </parameter>  
895 - <cluster_schema/>  
896 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
897 - <xloc>603</xloc>  
898 - <yloc>142</yloc>  
899 - <draw>Y</draw>  
900 - </GUI>  
901 - </step>  
902 -  
903 - <step_error_handling>  
904 - <error>  
905 - <source_step>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</source_step>  
906 - <target_step>&#x9519;&#x8bef;&#x8f93;&#x51fa;</target_step>  
907 - <is_enabled>Y</is_enabled>  
908 - <nr_valuename>error_count</nr_valuename>  
909 - <descriptions_valuename>error_desc</descriptions_valuename>  
910 - <fields_valuename>error_column1</fields_valuename>  
911 - <codes_valuename>error_column2</codes_valuename>  
912 - <max_errors/>  
913 - <max_pct_errors/>  
914 - <min_pct_rows/>  
915 - </error>  
916 - </step_error_handling>  
917 - <slave-step-copy-partition-distribution>  
918 -</slave-step-copy-partition-distribution>  
919 - <slave_transformation>N</slave_transformation>  
920 -  
921 -</transformation> 1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</name>
  5 + <description>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</description>
  6 + <extended_description>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;</extended_description>
  7 + <trans_version/>
  8 + <trans_type>Normal</trans_type>
  9 + <trans_status>0</trans_status>
  10 + <directory>&#x2f;</directory>
  11 + <parameters>
  12 + <parameter>
  13 + <name>erroroutputdir</name>
  14 + <default_value/>
  15 + <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>filepath</name>
  19 + <default_value/>
  20 + <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>
  21 + </parameter>
  22 + </parameters>
  23 + <log>
  24 +<trans-log-table><connection/>
  25 +<schema/>
  26 +<table/>
  27 +<size_limit_lines/>
  28 +<interval/>
  29 +<timeout_days/>
  30 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
  31 +<perf-log-table><connection/>
  32 +<schema/>
  33 +<table/>
  34 +<interval/>
  35 +<timeout_days/>
  36 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
  37 +<channel-log-table><connection/>
  38 +<schema/>
  39 +<table/>
  40 +<timeout_days/>
  41 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
  42 +<step-log-table><connection/>
  43 +<schema/>
  44 +<table/>
  45 +<timeout_days/>
  46 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
  47 +<metrics-log-table><connection/>
  48 +<schema/>
  49 +<table/>
  50 +<timeout_days/>
  51 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
  52 + </log>
  53 + <maxdate>
  54 + <connection/>
  55 + <table/>
  56 + <field/>
  57 + <offset>0.0</offset>
  58 + <maxdiff>0.0</maxdiff>
  59 + </maxdate>
  60 + <size_rowset>10000</size_rowset>
  61 + <sleep_time_empty>50</sleep_time_empty>
  62 + <sleep_time_full>50</sleep_time_full>
  63 + <unique_connections>N</unique_connections>
  64 + <feedback_shown>Y</feedback_shown>
  65 + <feedback_size>50000</feedback_size>
  66 + <using_thread_priorities>Y</using_thread_priorities>
  67 + <shared_objects_file/>
  68 + <capture_step_performance>N</capture_step_performance>
  69 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  70 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  71 + <dependencies>
  72 + </dependencies>
  73 + <partitionschemas>
  74 + </partitionschemas>
  75 + <slaveservers>
  76 + </slaveservers>
  77 + <clusterschemas>
  78 + </clusterschemas>
  79 + <created_user>-</created_user>
  80 + <created_date>2016&#x2f;06&#x2f;29 15&#x3a;12&#x3a;27.273</created_date>
  81 + <modified_user>-</modified_user>
  82 + <modified_date>2016&#x2f;06&#x2f;29 15&#x3a;12&#x3a;27.273</modified_date>
  83 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  84 + <is_key_private>N</is_key_private>
  85 + </info>
  86 + <notepads>
  87 + <notepad>
  88 + <note>&#x8fd9;&#x91cc;&#x6709;&#x4e9b;&#x95ee;&#x9898;&#xa;&#x5728;window2012&#x7684;&#x73af;&#x5883;&#x4e0b;&#xff0c;&#xa;MySql&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x4e2d;&#x5982;&#x679c;&#x8fd4;&#x56de;&#x4e2d;&#x6587;&#x5185;&#x5bb9;&#x7684;&#x5b57;&#x6bb5;&#xff0c;&#x8fd9;&#x4e2a;&#x5185;&#x5bb9;&#x4e71;&#x7801;&#xa;&#x89e3;&#x51b3;&#x529e;&#x6cd5;&#xff0c;&#x5c31;&#x662f;&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x5168;&#x90e8;&#x7f13;&#x5b58;&#xff0c;&#x5c31;&#x4e0d;&#x4e71;&#x7801;&#xa;linux&#x73af;&#x5883;&#x4e0b;&#x6ca1;&#x95ee;&#x9898;</note>
  89 + <xloc>101</xloc>
  90 + <yloc>264</yloc>
  91 + <width>333</width>
  92 + <heigth>90</heigth>
  93 + <fontname>YaHei Consolas Hybrid</fontname>
  94 + <fontsize>12</fontsize>
  95 + <fontbold>N</fontbold>
  96 + <fontitalic>N</fontitalic>
  97 + <fontcolorred>0</fontcolorred>
  98 + <fontcolorgreen>0</fontcolorgreen>
  99 + <fontcolorblue>0</fontcolorblue>
  100 + <backgroundcolorred>255</backgroundcolorred>
  101 + <backgroundcolorgreen>205</backgroundcolorgreen>
  102 + <backgroundcolorblue>112</backgroundcolorblue>
  103 + <bordercolorred>100</bordercolorred>
  104 + <bordercolorgreen>100</bordercolorgreen>
  105 + <bordercolorblue>100</bordercolorblue>
  106 + <drawshadow>Y</drawshadow>
  107 + </notepad>
  108 + </notepads>
  109 + <connection>
  110 + <name>192.168.168.1_jwgl_dw</name>
  111 + <server>192.168.168.1</server>
  112 + <type>ORACLE</type>
  113 + <access>Native</access>
  114 + <database>orcl</database>
  115 + <port>1521</port>
  116 + <username>jwgl_dw</username>
  117 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  118 + <servername/>
  119 + <data_tablespace/>
  120 + <index_tablespace/>
  121 + <attributes>
  122 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  123 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  124 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  125 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  126 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  127 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  128 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  129 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  130 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  131 + </attributes>
  132 + </connection>
  133 + <connection>
  134 + <name>bus_control_variable</name>
  135 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  136 + <type>MYSQL</type>
  137 + <access>Native</access>
  138 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  139 + <port>3306</port>
  140 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  141 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  142 + <servername/>
  143 + <data_tablespace/>
  144 + <index_tablespace/>
  145 + <attributes>
  146 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  147 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  148 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  149 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  150 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  151 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  152 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  153 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  154 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  155 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  156 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  157 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  158 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  159 + </attributes>
  160 + </connection>
  161 + <connection>
  162 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  163 + <server>localhost</server>
  164 + <type>MYSQL</type>
  165 + <access>Native</access>
  166 + <database>control</database>
  167 + <port>3306</port>
  168 + <username>root</username>
  169 + <password>Encrypted </password>
  170 + <servername/>
  171 + <data_tablespace/>
  172 + <index_tablespace/>
  173 + <attributes>
  174 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  175 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  176 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  177 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  178 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  179 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  180 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  181 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  182 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  183 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  184 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  185 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  186 + </attributes>
  187 + </connection>
  188 + <connection>
  189 + <name>bus_control_&#x672c;&#x673a;</name>
  190 + <server>localhost</server>
  191 + <type>MYSQL</type>
  192 + <access>Native</access>
  193 + <database>control</database>
  194 + <port>3306</port>
  195 + <username>root</username>
  196 + <password>Encrypted </password>
  197 + <servername/>
  198 + <data_tablespace/>
  199 + <index_tablespace/>
  200 + <attributes>
  201 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  202 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  203 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  204 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  205 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  206 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  207 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  208 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  209 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  210 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  211 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  212 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  213 + </attributes>
  214 + </connection>
  215 + <connection>
  216 + <name>xlab_mysql_youle</name>
  217 + <server>101.231.124.8</server>
  218 + <type>MYSQL</type>
  219 + <access>Native</access>
  220 + <database>xlab_youle</database>
  221 + <port>45687</port>
  222 + <username>xlab-youle</username>
  223 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  224 + <servername/>
  225 + <data_tablespace/>
  226 + <index_tablespace/>
  227 + <attributes>
  228 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  229 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  230 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  231 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  232 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  233 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  234 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  235 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  236 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  237 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  238 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  239 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  240 + </attributes>
  241 + </connection>
  242 + <connection>
  243 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  244 + <server>localhost</server>
  245 + <type>MYSQL</type>
  246 + <access>Native</access>
  247 + <database>xlab_youle</database>
  248 + <port>3306</port>
  249 + <username>root</username>
  250 + <password>Encrypted </password>
  251 + <servername/>
  252 + <data_tablespace/>
  253 + <index_tablespace/>
  254 + <attributes>
  255 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  256 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  257 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  258 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  259 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  260 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  261 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  262 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  263 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  264 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  265 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  266 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  267 + </attributes>
  268 + </connection>
  269 + <connection>
  270 + <name>xlab_youle</name>
  271 + <server/>
  272 + <type>MYSQL</type>
  273 + <access>JNDI</access>
  274 + <database>xlab_youle</database>
  275 + <port>1521</port>
  276 + <username/>
  277 + <password>Encrypted </password>
  278 + <servername/>
  279 + <data_tablespace/>
  280 + <index_tablespace/>
  281 + <attributes>
  282 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  283 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  284 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  285 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  286 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  287 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  288 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  289 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  290 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  291 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  292 + </attributes>
  293 + </connection>
  294 + <order>
  295 + <hop> <from>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>
  296 + <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>
  297 + <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</to><enabled>Y</enabled> </hop>
  298 + <hop> <from>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</from><to>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  299 + <hop> <from>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</from><to>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  300 + <hop> <from>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</from><to>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  301 + <hop> <from>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>
  302 + <hop> <from>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</to><enabled>Y</enabled> </hop>
  303 + <hop> <from>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>
  304 + </order>
  305 + <step>
  306 + <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name>
  307 + <type>ExcelInput</type>
  308 + <description/>
  309 + <distribute>Y</distribute>
  310 + <custom_distribution/>
  311 + <copies>1</copies>
  312 + <partitioning>
  313 + <method>none</method>
  314 + <schema_name/>
  315 + </partitioning>
  316 + <header>Y</header>
  317 + <noempty>Y</noempty>
  318 + <stoponempty>N</stoponempty>
  319 + <filefield/>
  320 + <sheetfield/>
  321 + <sheetrownumfield/>
  322 + <rownumfield/>
  323 + <sheetfield/>
  324 + <filefield/>
  325 + <limit>0</limit>
  326 + <encoding/>
  327 + <add_to_result_filenames>Y</add_to_result_filenames>
  328 + <accept_filenames>Y</accept_filenames>
  329 + <accept_field>filepath_</accept_field>
  330 + <accept_stepname>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</accept_stepname>
  331 + <file>
  332 + <name/>
  333 + <filemask/>
  334 + <exclude_filemask/>
  335 + <file_required>N</file_required>
  336 + <include_subfolders>N</include_subfolders>
  337 + </file>
  338 + <fields>
  339 + <field>
  340 + <name>&#x7ebf;&#x8def;</name>
  341 + <type>String</type>
  342 + <length>-1</length>
  343 + <precision>-1</precision>
  344 + <trim_type>none</trim_type>
  345 + <repeat>N</repeat>
  346 + <format/>
  347 + <currency/>
  348 + <decimal/>
  349 + <group/>
  350 + </field>
  351 + <field>
  352 + <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>
  353 + <type>String</type>
  354 + <length>-1</length>
  355 + <precision>-1</precision>
  356 + <trim_type>none</trim_type>
  357 + <repeat>N</repeat>
  358 + <format>&#x23;</format>
  359 + <currency/>
  360 + <decimal/>
  361 + <group/>
  362 + </field>
  363 + <field>
  364 + <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>
  365 + <type>String</type>
  366 + <length>-1</length>
  367 + <precision>-1</precision>
  368 + <trim_type>none</trim_type>
  369 + <repeat>N</repeat>
  370 + <format>&#x23;</format>
  371 + <currency/>
  372 + <decimal/>
  373 + <group/>
  374 + </field>
  375 + <field>
  376 + <name>&#x9a7e;&#x9a76;&#x5458;</name>
  377 + <type>String</type>
  378 + <length>-1</length>
  379 + <precision>-1</precision>
  380 + <trim_type>none</trim_type>
  381 + <repeat>N</repeat>
  382 + <format/>
  383 + <currency/>
  384 + <decimal/>
  385 + <group/>
  386 + </field>
  387 + <field>
  388 + <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>
  389 + <type>String</type>
  390 + <length>-1</length>
  391 + <precision>-1</precision>
  392 + <trim_type>none</trim_type>
  393 + <repeat>N</repeat>
  394 + <format>&#x23;</format>
  395 + <currency/>
  396 + <decimal/>
  397 + <group/>
  398 + </field>
  399 + <field>
  400 + <name>&#x552e;&#x7968;&#x5458;</name>
  401 + <type>String</type>
  402 + <length>-1</length>
  403 + <precision>-1</precision>
  404 + <trim_type>none</trim_type>
  405 + <repeat>N</repeat>
  406 + <format/>
  407 + <currency/>
  408 + <decimal/>
  409 + <group/>
  410 + </field>
  411 + </fields>
  412 + <sheets>
  413 + <sheet>
  414 + <name>&#x5de5;&#x4f5c;&#x8868;1</name>
  415 + <startrow>0</startrow>
  416 + <startcol>0</startcol>
  417 + </sheet>
  418 + </sheets>
  419 + <strict_types>N</strict_types>
  420 + <error_ignored>N</error_ignored>
  421 + <error_line_skipped>N</error_line_skipped>
  422 + <bad_line_files_destination_directory/>
  423 + <bad_line_files_extension>warning</bad_line_files_extension>
  424 + <error_line_files_destination_directory/>
  425 + <error_line_files_extension>error</error_line_files_extension>
  426 + <line_number_files_destination_directory/>
  427 + <line_number_files_extension>line</line_number_files_extension>
  428 + <shortFileFieldName/>
  429 + <pathFieldName/>
  430 + <hiddenFieldName/>
  431 + <lastModificationTimeFieldName/>
  432 + <uriNameFieldName/>
  433 + <rootUriNameFieldName/>
  434 + <extensionFieldName/>
  435 + <sizeFieldName/>
  436 + <spreadsheet_type>JXL</spreadsheet_type>
  437 + <cluster_schema/>
  438 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  439 + <xloc>93</xloc>
  440 + <yloc>51</yloc>
  441 + <draw>Y</draw>
  442 + </GUI>
  443 + </step>
  444 +
  445 + <step>
  446 + <name>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</name>
  447 + <type>Constant</type>
  448 + <description/>
  449 + <distribute>Y</distribute>
  450 + <custom_distribution/>
  451 + <copies>1</copies>
  452 + <partitioning>
  453 + <method>none</method>
  454 + <schema_name/>
  455 + </partitioning>
  456 + <fields>
  457 + <field>
  458 + <name>isCancel</name>
  459 + <type>Integer</type>
  460 + <format/>
  461 + <currency/>
  462 + <decimal/>
  463 + <group/>
  464 + <nullif>0</nullif>
  465 + <length>-1</length>
  466 + <precision>-1</precision>
  467 + <set_empty_string>N</set_empty_string>
  468 + </field>
  469 + </fields>
  470 + <cluster_schema/>
  471 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  472 + <xloc>225</xloc>
  473 + <yloc>53</yloc>
  474 + <draw>Y</draw>
  475 + </GUI>
  476 + </step>
  477 +
  478 + <step>
  479 + <name>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</name>
  480 + <type>DBJoin</type>
  481 + <description/>
  482 + <distribute>Y</distribute>
  483 + <custom_distribution/>
  484 + <copies>1</copies>
  485 + <partitioning>
  486 + <method>none</method>
  487 + <schema_name/>
  488 + </partitioning>
  489 + <connection>bus_control_variable</connection>
  490 + <rowlimit>1</rowlimit>
  491 + <sql>select id as sid from bsth_c_personnel&#xa;where job_codeori &#x3d; &#x3f; and personnel_name &#x3d; &#x3f;</sql>
  492 + <outer_join>Y</outer_join>
  493 + <replace_vars>N</replace_vars>
  494 + <parameter>
  495 + <field>
  496 + <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>
  497 + <type>String</type>
  498 + </field>
  499 + <field>
  500 + <name>&#x552e;&#x7968;&#x5458;</name>
  501 + <type>String</type>
  502 + </field>
  503 + </parameter>
  504 + <cluster_schema/>
  505 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  506 + <xloc>830</xloc>
  507 + <yloc>45</yloc>
  508 + <draw>Y</draw>
  509 + </GUI>
  510 + </step>
  511 +
  512 + <step>
  513 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</name>
  514 + <type>InsertUpdate</type>
  515 + <description/>
  516 + <distribute>Y</distribute>
  517 + <custom_distribution/>
  518 + <copies>1</copies>
  519 + <partitioning>
  520 + <method>none</method>
  521 + <schema_name/>
  522 + </partitioning>
  523 + <connection>bus_control_variable</connection>
  524 + <commit>100</commit>
  525 + <update_bypassed>N</update_bypassed>
  526 + <lookup>
  527 + <schema/>
  528 + <table>bsth_c_s_ecinfo</table>
  529 + <key>
  530 + <name>xlid</name>
  531 + <field>xl</field>
  532 + <condition>&#x3d;</condition>
  533 + <name2/>
  534 + </key>
  535 + <key>
  536 + <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>
  537 + <field>dbbm</field>
  538 + <condition>&#x3d;</condition>
  539 + <name2/>
  540 + </key>
  541 + <key>
  542 + <name>isCancel</name>
  543 + <field>is_cancel</field>
  544 + <condition>&#x3d;</condition>
  545 + <name2/>
  546 + </key>
  547 + <value>
  548 + <name>xl</name>
  549 + <rename>xlid</rename>
  550 + <update>Y</update>
  551 + </value>
  552 + <value>
  553 + <name>dbbm</name>
  554 + <rename>&#x642d;&#x73ed;&#x7f16;&#x7801;</rename>
  555 + <update>Y</update>
  556 + </value>
  557 + <value>
  558 + <name>jsy</name>
  559 + <rename>jid</rename>
  560 + <update>Y</update>
  561 + </value>
  562 + <value>
  563 + <name>spy</name>
  564 + <rename>sid</rename>
  565 + <update>Y</update>
  566 + </value>
  567 + <value>
  568 + <name>is_cancel</name>
  569 + <rename>isCancel</rename>
  570 + <update>Y</update>
  571 + </value>
  572 + </lookup>
  573 + <cluster_schema/>
  574 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  575 + <xloc>833</xloc>
  576 + <yloc>198</yloc>
  577 + <draw>Y</draw>
  578 + </GUI>
  579 + </step>
  580 +
  581 + <step>
  582 + <name>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</name>
  583 + <type>DBLookup</type>
  584 + <description/>
  585 + <distribute>Y</distribute>
  586 + <custom_distribution/>
  587 + <copies>1</copies>
  588 + <partitioning>
  589 + <method>none</method>
  590 + <schema_name/>
  591 + </partitioning>
  592 + <connection>bus_control_variable</connection>
  593 + <cache>Y</cache>
  594 + <cache_load_all>Y</cache_load_all>
  595 + <cache_size>0</cache_size>
  596 + <lookup>
  597 + <schema/>
  598 + <table>bsth_c_line</table>
  599 + <orderby/>
  600 + <fail_on_multiple>N</fail_on_multiple>
  601 + <eat_row_on_failure>N</eat_row_on_failure>
  602 + <key>
  603 + <name>&#x7ebf;&#x8def;</name>
  604 + <field>name</field>
  605 + <condition>&#x3d;</condition>
  606 + <name2/>
  607 + </key>
  608 + <key>
  609 + <name>isCancel</name>
  610 + <field>destroy</field>
  611 + <condition>&#x3d;</condition>
  612 + <name2/>
  613 + </key>
  614 + <value>
  615 + <name>id</name>
  616 + <rename>xlid</rename>
  617 + <default/>
  618 + <type>Integer</type>
  619 + </value>
  620 + </lookup>
  621 + <cluster_schema/>
  622 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  623 + <xloc>397</xloc>
  624 + <yloc>144</yloc>
  625 + <draw>Y</draw>
  626 + </GUI>
  627 + </step>
  628 +
  629 + <step>
  630 + <name>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</name>
  631 + <type>GetVariable</type>
  632 + <description/>
  633 + <distribute>Y</distribute>
  634 + <custom_distribution/>
  635 + <copies>1</copies>
  636 + <partitioning>
  637 + <method>none</method>
  638 + <schema_name/>
  639 + </partitioning>
  640 + <fields>
  641 + <field>
  642 + <name>filepath_</name>
  643 + <variable>&#x24;&#x7b;filepath&#x7d;</variable>
  644 + <type>String</type>
  645 + <format/>
  646 + <currency/>
  647 + <decimal/>
  648 + <group/>
  649 + <length>-1</length>
  650 + <precision>-1</precision>
  651 + <trim_type>none</trim_type>
  652 + </field>
  653 + <field>
  654 + <name>erroroutputdir_</name>
  655 + <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>
  656 + <type>String</type>
  657 + <format/>
  658 + <currency/>
  659 + <decimal/>
  660 + <group/>
  661 + <length>-1</length>
  662 + <precision>-1</precision>
  663 + <trim_type>none</trim_type>
  664 + </field>
  665 + </fields>
  666 + <cluster_schema/>
  667 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  668 + <xloc>94</xloc>
  669 + <yloc>178</yloc>
  670 + <draw>Y</draw>
  671 + </GUI>
  672 + </step>
  673 +
  674 + <step>
  675 + <name>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>
  676 + <type>FilterRows</type>
  677 + <description/>
  678 + <distribute>Y</distribute>
  679 + <custom_distribution/>
  680 + <copies>1</copies>
  681 + <partitioning>
  682 + <method>none</method>
  683 + <schema_name/>
  684 + </partitioning>
  685 +<send_true_to/>
  686 +<send_false_to/>
  687 + <compare>
  688 +<condition>
  689 + <negated>N</negated>
  690 + <leftvalue>xlid</leftvalue>
  691 + <function>IS NOT NULL</function>
  692 + <rightvalue/>
  693 + </condition>
  694 + </compare>
  695 + <cluster_schema/>
  696 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  697 + <xloc>395</xloc>
  698 + <yloc>49</yloc>
  699 + <draw>Y</draw>
  700 + </GUI>
  701 + </step>
  702 +
  703 + <step>
  704 + <name>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>
  705 + <type>FilterRows</type>
  706 + <description/>
  707 + <distribute>Y</distribute>
  708 + <custom_distribution/>
  709 + <copies>1</copies>
  710 + <partitioning>
  711 + <method>none</method>
  712 + <schema_name/>
  713 + </partitioning>
  714 +<send_true_to>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</send_true_to>
  715 +<send_false_to/>
  716 + <compare>
  717 +<condition>
  718 + <negated>N</negated>
  719 + <leftvalue>jid</leftvalue>
  720 + <function>IS NOT NULL</function>
  721 + <rightvalue/>
  722 + </condition>
  723 + </compare>
  724 + <cluster_schema/>
  725 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  726 + <xloc>604</xloc>
  727 + <yloc>46</yloc>
  728 + <draw>Y</draw>
  729 + </GUI>
  730 + </step>
  731 +
  732 + <step>
  733 + <name>&#x9519;&#x8bef;&#x8f93;&#x51fa;</name>
  734 + <type>ExcelOutput</type>
  735 + <description/>
  736 + <distribute>Y</distribute>
  737 + <custom_distribution/>
  738 + <copies>1</copies>
  739 + <partitioning>
  740 + <method>none</method>
  741 + <schema_name/>
  742 + </partitioning>
  743 + <header>Y</header>
  744 + <footer>N</footer>
  745 + <encoding>UTF-8</encoding>
  746 + <append>N</append>
  747 + <add_to_result_filenames>Y</add_to_result_filenames>
  748 + <file>
  749 + <name>&#x24;&#x7b;erroroutputdir&#x7d;&#x2f;&#x4eba;&#x5458;&#x914d;&#x7f6e;_&#x9519;&#x8bef;</name>
  750 + <extention>xls</extention>
  751 + <do_not_open_newfile_init>N</do_not_open_newfile_init>
  752 + <create_parent_folder>N</create_parent_folder>
  753 + <split>N</split>
  754 + <add_date>N</add_date>
  755 + <add_time>N</add_time>
  756 + <SpecifyFormat>N</SpecifyFormat>
  757 + <date_time_format/>
  758 + <sheetname>Sheet1</sheetname>
  759 + <autosizecolums>N</autosizecolums>
  760 + <nullisblank>N</nullisblank>
  761 + <protect_sheet>N</protect_sheet>
  762 + <password>Encrypted </password>
  763 + <splitevery>0</splitevery>
  764 + <usetempfiles>N</usetempfiles>
  765 + <tempdirectory/>
  766 + </file>
  767 + <template>
  768 + <enabled>N</enabled>
  769 + <append>N</append>
  770 + <filename>template.xls</filename>
  771 + </template>
  772 + <fields>
  773 + <field>
  774 + <name>&#x7ebf;&#x8def;</name>
  775 + <type>String</type>
  776 + <format/>
  777 + </field>
  778 + <field>
  779 + <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>
  780 + <type>String</type>
  781 + <format/>
  782 + </field>
  783 + <field>
  784 + <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>
  785 + <type>String</type>
  786 + <format/>
  787 + </field>
  788 + <field>
  789 + <name>&#x9a7e;&#x9a76;&#x5458;</name>
  790 + <type>String</type>
  791 + <format/>
  792 + </field>
  793 + <field>
  794 + <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>
  795 + <type>String</type>
  796 + <format/>
  797 + </field>
  798 + <field>
  799 + <name>&#x552e;&#x7968;&#x5458;</name>
  800 + <type>String</type>
  801 + <format/>
  802 + </field>
  803 + <field>
  804 + <name>isCancel</name>
  805 + <type>Integer</type>
  806 + <format/>
  807 + </field>
  808 + <field>
  809 + <name>xlid</name>
  810 + <type>Integer</type>
  811 + <format/>
  812 + </field>
  813 + <field>
  814 + <name>jid</name>
  815 + <type>Integer</type>
  816 + <format/>
  817 + </field>
  818 + <field>
  819 + <name>sid</name>
  820 + <type>Integer</type>
  821 + <format/>
  822 + </field>
  823 + <field>
  824 + <name>error_count</name>
  825 + <type>Integer</type>
  826 + <format/>
  827 + </field>
  828 + <field>
  829 + <name>error_desc</name>
  830 + <type>String</type>
  831 + <format/>
  832 + </field>
  833 + <field>
  834 + <name>error_column1</name>
  835 + <type>String</type>
  836 + <format/>
  837 + </field>
  838 + <field>
  839 + <name>error_column2</name>
  840 + <type>String</type>
  841 + <format/>
  842 + </field>
  843 + </fields>
  844 + <custom>
  845 + <header_font_name>arial</header_font_name>
  846 + <header_font_size>10</header_font_size>
  847 + <header_font_bold>N</header_font_bold>
  848 + <header_font_italic>N</header_font_italic>
  849 + <header_font_underline>no</header_font_underline>
  850 + <header_font_orientation>horizontal</header_font_orientation>
  851 + <header_font_color>black</header_font_color>
  852 + <header_background_color>none</header_background_color>
  853 + <header_row_height>255</header_row_height>
  854 + <header_alignment>left</header_alignment>
  855 + <header_image/>
  856 + <row_font_name>arial</row_font_name>
  857 + <row_font_size>10</row_font_size>
  858 + <row_font_color>black</row_font_color>
  859 + <row_background_color>none</row_background_color>
  860 + </custom>
  861 + <cluster_schema/>
  862 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  863 + <xloc>833</xloc>
  864 + <yloc>321</yloc>
  865 + <draw>Y</draw>
  866 + </GUI>
  867 + </step>
  868 +
  869 + <step>
  870 + <name>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</name>
  871 + <type>DBJoin</type>
  872 + <description/>
  873 + <distribute>Y</distribute>
  874 + <custom_distribution/>
  875 + <copies>1</copies>
  876 + <partitioning>
  877 + <method>none</method>
  878 + <schema_name/>
  879 + </partitioning>
  880 + <connection>bus_control_variable</connection>
  881 + <rowlimit>1</rowlimit>
  882 + <sql>select id as jid from bsth_c_personnel&#xa;where job_codeori &#x3d; &#x3f; and personnel_name &#x3d; &#x3f;</sql>
  883 + <outer_join>Y</outer_join>
  884 + <replace_vars>N</replace_vars>
  885 + <parameter>
  886 + <field>
  887 + <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>
  888 + <type>String</type>
  889 + </field>
  890 + <field>
  891 + <name>&#x9a7e;&#x9a76;&#x5458;</name>
  892 + <type>String</type>
  893 + </field>
  894 + </parameter>
  895 + <cluster_schema/>
  896 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  897 + <xloc>603</xloc>
  898 + <yloc>142</yloc>
  899 + <draw>Y</draw>
  900 + </GUI>
  901 + </step>
  902 +
  903 + <step_error_handling>
  904 + <error>
  905 + <source_step>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</source_step>
  906 + <target_step>&#x9519;&#x8bef;&#x8f93;&#x51fa;</target_step>
  907 + <is_enabled>Y</is_enabled>
  908 + <nr_valuename>error_count</nr_valuename>
  909 + <descriptions_valuename>error_desc</descriptions_valuename>
  910 + <fields_valuename>error_column1</fields_valuename>
  911 + <codes_valuename>error_column2</codes_valuename>
  912 + <max_errors/>
  913 + <max_pct_errors/>
  914 + <min_pct_rows/>
  915 + </error>
  916 + </step_error_handling>
  917 + <slave-step-copy-partition-distribution>
  918 +</slave-step-copy-partition-distribution>
  919 + <slave_transformation>N</slave_transformation>
  920 +
  921 +</transformation>
src/main/resources/datatools/ktrs/employeesConfigDataOutput.ktr
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<transformation>  
3 - <info>  
4 - <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;&#x5bfc;&#x51fa;</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/>  
15 - <description>excel&#x6587;&#x4ef6;&#x8def;&#x5f84;</description>  
16 - </parameter>  
17 - <parameter>  
18 - <name>xlid</name>  
19 - <default_value/>  
20 - <description>&#x7ebf;&#x8def;id</description>  
21 - </parameter>  
22 - </parameters>  
23 - <log>  
24 -<trans-log-table><connection/>  
25 -<schema/>  
26 -<table/>  
27 -<size_limit_lines/>  
28 -<interval/>  
29 -<timeout_days/>  
30 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>  
31 -<perf-log-table><connection/>  
32 -<schema/>  
33 -<table/>  
34 -<interval/>  
35 -<timeout_days/>  
36 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>  
37 -<channel-log-table><connection/>  
38 -<schema/>  
39 -<table/>  
40 -<timeout_days/>  
41 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>  
42 -<step-log-table><connection/>  
43 -<schema/>  
44 -<table/>  
45 -<timeout_days/>  
46 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>  
47 -<metrics-log-table><connection/>  
48 -<schema/>  
49 -<table/>  
50 -<timeout_days/>  
51 -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>  
52 - </log>  
53 - <maxdate>  
54 - <connection/>  
55 - <table/>  
56 - <field/>  
57 - <offset>0.0</offset>  
58 - <maxdiff>0.0</maxdiff>  
59 - </maxdate>  
60 - <size_rowset>10000</size_rowset>  
61 - <sleep_time_empty>50</sleep_time_empty>  
62 - <sleep_time_full>50</sleep_time_full>  
63 - <unique_connections>N</unique_connections>  
64 - <feedback_shown>Y</feedback_shown>  
65 - <feedback_size>50000</feedback_size>  
66 - <using_thread_priorities>Y</using_thread_priorities>  
67 - <shared_objects_file/>  
68 - <capture_step_performance>N</capture_step_performance>  
69 - <step_performance_capturing_delay>1000</step_performance_capturing_delay>  
70 - <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>  
71 - <dependencies>  
72 - </dependencies>  
73 - <partitionschemas>  
74 - </partitionschemas>  
75 - <slaveservers>  
76 - </slaveservers>  
77 - <clusterschemas>  
78 - </clusterschemas>  
79 - <created_user>-</created_user>  
80 - <created_date>2017&#x2f;01&#x2f;11 15&#x3a;36&#x3a;10.101</created_date>  
81 - <modified_user>-</modified_user>  
82 - <modified_date>2017&#x2f;01&#x2f;11 15&#x3a;36&#x3a;10.101</modified_date>  
83 - <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>  
84 - <is_key_private>N</is_key_private>  
85 - </info>  
86 - <notepads>  
87 - <notepad>  
88 - <note>&#x8fd9;&#x91cc;&#x6709;&#x4e9b;&#x95ee;&#x9898;&#xa;&#x5728;window2012&#x7684;&#x73af;&#x5883;&#x4e0b;&#xff0c;&#xa;MySql&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x4e2d;&#x5982;&#x679c;&#x8fd4;&#x56de;&#x4e2d;&#x6587;&#x5185;&#x5bb9;&#x7684;&#x5b57;&#x6bb5;&#xff0c;&#x8fd9;&#x4e2a;&#x5185;&#x5bb9;&#x4e71;&#x7801;&#xa;&#x89e3;&#x51b3;&#x529e;&#x6cd5;&#xff0c;&#x5c31;&#x662f;&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x5168;&#x90e8;&#x7f13;&#x5b58;&#xff0c;&#x5c31;&#x4e0d;&#x4e71;&#x7801;&#xa;linux&#x73af;&#x5883;&#x4e0b;&#x6ca1;&#x95ee;&#x9898;</note>  
89 - <xloc>66</xloc>  
90 - <yloc>151</yloc>  
91 - <width>333</width>  
92 - <heigth>90</heigth>  
93 - <fontname>YaHei Consolas Hybrid</fontname>  
94 - <fontsize>12</fontsize>  
95 - <fontbold>N</fontbold>  
96 - <fontitalic>N</fontitalic>  
97 - <fontcolorred>0</fontcolorred>  
98 - <fontcolorgreen>0</fontcolorgreen>  
99 - <fontcolorblue>0</fontcolorblue>  
100 - <backgroundcolorred>255</backgroundcolorred>  
101 - <backgroundcolorgreen>205</backgroundcolorgreen>  
102 - <backgroundcolorblue>112</backgroundcolorblue>  
103 - <bordercolorred>100</bordercolorred>  
104 - <bordercolorgreen>100</bordercolorgreen>  
105 - <bordercolorblue>100</bordercolorblue>  
106 - <drawshadow>Y</drawshadow>  
107 - </notepad>  
108 - </notepads>  
109 - <connection>  
110 - <name>192.168.168.1_jwgl_dw</name>  
111 - <server>192.168.168.1</server>  
112 - <type>ORACLE</type>  
113 - <access>Native</access>  
114 - <database>orcl</database>  
115 - <port>1521</port>  
116 - <username>jwgl_dw</username>  
117 - <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>  
118 - <servername/>  
119 - <data_tablespace/>  
120 - <index_tablespace/>  
121 - <attributes>  
122 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
123 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
124 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
125 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
126 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
127 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
128 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
129 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
130 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
131 - </attributes>  
132 - </connection>  
133 - <connection>  
134 - <name>bus_control_variable</name>  
135 - <server>&#x24;&#x7b;v_db_ip&#x7d;</server>  
136 - <type>MYSQL</type>  
137 - <access>Native</access>  
138 - <database>&#x24;&#x7b;v_db_dname&#x7d;</database>  
139 - <port>3306</port>  
140 - <username>&#x24;&#x7b;v_db_uname&#x7d;</username>  
141 - <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>  
142 - <servername/>  
143 - <data_tablespace/>  
144 - <index_tablespace/>  
145 - <attributes>  
146 - <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>  
147 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
148 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
149 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
150 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
151 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
152 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
153 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
154 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
155 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
156 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
157 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
158 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
159 - </attributes>  
160 - </connection>  
161 - <connection>  
162 - <name>bus_control_&#x516c;&#x53f8;_201</name>  
163 - <server>localhost</server>  
164 - <type>MYSQL</type>  
165 - <access>Native</access>  
166 - <database>control</database>  
167 - <port>3306</port>  
168 - <username>root</username>  
169 - <password>Encrypted </password>  
170 - <servername/>  
171 - <data_tablespace/>  
172 - <index_tablespace/>  
173 - <attributes>  
174 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
175 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
176 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
177 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
178 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
179 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
180 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
181 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
182 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
183 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
184 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
185 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
186 - </attributes>  
187 - </connection>  
188 - <connection>  
189 - <name>bus_control_&#x672c;&#x673a;</name>  
190 - <server>localhost</server>  
191 - <type>MYSQL</type>  
192 - <access>Native</access>  
193 - <database>control</database>  
194 - <port>3306</port>  
195 - <username>root</username>  
196 - <password>Encrypted </password>  
197 - <servername/>  
198 - <data_tablespace/>  
199 - <index_tablespace/>  
200 - <attributes>  
201 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
202 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
203 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
204 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
205 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
206 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
207 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
208 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
209 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
210 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
211 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
212 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
213 - </attributes>  
214 - </connection>  
215 - <connection>  
216 - <name>xlab_mysql_youle</name>  
217 - <server>101.231.124.8</server>  
218 - <type>MYSQL</type>  
219 - <access>Native</access>  
220 - <database>xlab_youle</database>  
221 - <port>45687</port>  
222 - <username>xlab-youle</username>  
223 - <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>  
224 - <servername/>  
225 - <data_tablespace/>  
226 - <index_tablespace/>  
227 - <attributes>  
228 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
229 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
230 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
231 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
232 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
233 - <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>  
234 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
235 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
236 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
237 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
238 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
239 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
240 - </attributes>  
241 - </connection>  
242 - <connection>  
243 - <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>  
244 - <server>localhost</server>  
245 - <type>MYSQL</type>  
246 - <access>Native</access>  
247 - <database>xlab_youle</database>  
248 - <port>3306</port>  
249 - <username>root</username>  
250 - <password>Encrypted </password>  
251 - <servername/>  
252 - <data_tablespace/>  
253 - <index_tablespace/>  
254 - <attributes>  
255 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
256 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
257 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
258 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
259 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
260 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
261 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
262 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
263 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
264 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
265 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
266 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
267 - </attributes>  
268 - </connection>  
269 - <connection>  
270 - <name>xlab_youle</name>  
271 - <server/>  
272 - <type>MYSQL</type>  
273 - <access>JNDI</access>  
274 - <database>xlab_youle</database>  
275 - <port>1521</port>  
276 - <username/>  
277 - <password>Encrypted </password>  
278 - <servername/>  
279 - <data_tablespace/>  
280 - <index_tablespace/>  
281 - <attributes>  
282 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
283 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
284 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
285 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
286 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
287 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
288 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
289 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
290 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
291 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
292 - </attributes>  
293 - </connection>  
294 - <order>  
295 - <hop> <from>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#xff08;&#x6ca1;&#x6709;&#x4f5c;&#x5e9f;&#xff09;</from><to>&#x7ebf;&#x8def;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>  
296 - <hop> <from>&#x7ebf;&#x8def;&#x67e5;&#x8be2;</from><to>&#x9a7e;&#x9a76;&#x5458;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>  
297 - <hop> <from>&#x9a7e;&#x9a76;&#x5458;&#x67e5;&#x8be2;</from><to>&#x552e;&#x7968;&#x5458;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>  
298 - <hop> <from>&#x552e;&#x7968;&#x5458;&#x67e5;&#x8be2;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>  
299 - <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
300 - <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>Excel&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>  
301 - </order>  
302 - <step>  
303 - <name>Excel&#x8f93;&#x51fa;</name>  
304 - <type>ExcelOutput</type>  
305 - <description/>  
306 - <distribute>Y</distribute>  
307 - <custom_distribution/>  
308 - <copies>1</copies>  
309 - <partitioning>  
310 - <method>none</method>  
311 - <schema_name/>  
312 - </partitioning>  
313 - <header>Y</header>  
314 - <footer>N</footer>  
315 - <encoding/>  
316 - <append>N</append>  
317 - <add_to_result_filenames>Y</add_to_result_filenames>  
318 - <file>  
319 - <name>&#x24;&#x7b;filepath&#x7d;</name>  
320 - <extention>xls</extention>  
321 - <do_not_open_newfile_init>N</do_not_open_newfile_init>  
322 - <create_parent_folder>N</create_parent_folder>  
323 - <split>N</split>  
324 - <add_date>N</add_date>  
325 - <add_time>N</add_time>  
326 - <SpecifyFormat>N</SpecifyFormat>  
327 - <date_time_format>yyyyMMddHHmmss</date_time_format>  
328 - <sheetname>&#x5de5;&#x4f5c;&#x8868;1</sheetname>  
329 - <autosizecolums>N</autosizecolums>  
330 - <nullisblank>N</nullisblank>  
331 - <protect_sheet>N</protect_sheet>  
332 - <password>Encrypted </password>  
333 - <splitevery>0</splitevery>  
334 - <usetempfiles>N</usetempfiles>  
335 - <tempdirectory/>  
336 - </file>  
337 - <template>  
338 - <enabled>N</enabled>  
339 - <append>N</append>  
340 - <filename>template.xls</filename>  
341 - </template>  
342 - <fields>  
343 - <field>  
344 - <name>&#x7ebf;&#x8def;</name>  
345 - <type>String</type>  
346 - <format/>  
347 - </field>  
348 - <field>  
349 - <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>  
350 - <type>String</type>  
351 - <format/>  
352 - </field>  
353 - <field>  
354 - <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>  
355 - <type>String</type>  
356 - <format/>  
357 - </field>  
358 - <field>  
359 - <name>&#x9a7e;&#x9a76;&#x5458;</name>  
360 - <type>String</type>  
361 - <format/>  
362 - </field>  
363 - <field>  
364 - <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>  
365 - <type>String</type>  
366 - <format/>  
367 - </field>  
368 - <field>  
369 - <name>&#x552e;&#x7968;&#x5458;</name>  
370 - <type>String</type>  
371 - <format/>  
372 - </field>  
373 - </fields>  
374 - <custom>  
375 - <header_font_name>arial</header_font_name>  
376 - <header_font_size>10</header_font_size>  
377 - <header_font_bold>N</header_font_bold>  
378 - <header_font_italic>N</header_font_italic>  
379 - <header_font_underline>no</header_font_underline>  
380 - <header_font_orientation>horizontal</header_font_orientation>  
381 - <header_font_color>black</header_font_color>  
382 - <header_background_color>none</header_background_color>  
383 - <header_row_height>255</header_row_height>  
384 - <header_alignment>left</header_alignment>  
385 - <header_image/>  
386 - <row_font_name>arial</row_font_name>  
387 - <row_font_size>10</row_font_size>  
388 - <row_font_color>black</row_font_color>  
389 - <row_background_color>none</row_background_color>  
390 - </custom>  
391 - <cluster_schema/>  
392 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
393 - <xloc>696</xloc>  
394 - <yloc>257</yloc>  
395 - <draw>Y</draw>  
396 - </GUI>  
397 - </step>  
398 -  
399 - <step>  
400 - <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#xff08;&#x6ca1;&#x6709;&#x4f5c;&#x5e9f;&#xff09;</name>  
401 - <type>TableInput</type>  
402 - <description/>  
403 - <distribute>Y</distribute>  
404 - <custom_distribution/>  
405 - <copies>1</copies>  
406 - <partitioning>  
407 - <method>none</method>  
408 - <schema_name/>  
409 - </partitioning>  
410 - <connection>bus_control_variable</connection>  
411 - <sql>select &#x2a; from bsth_c_s_ecinfo where is_cancel &#x3d; 0 and xl &#x3d; &#x24;&#x7b;xlid&#x7d;</sql>  
412 - <limit>0</limit>  
413 - <lookup/>  
414 - <execute_each_row>N</execute_each_row>  
415 - <variables_active>Y</variables_active>  
416 - <lazy_conversion_active>N</lazy_conversion_active>  
417 - <cluster_schema/>  
418 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
419 - <xloc>90</xloc>  
420 - <yloc>59</yloc>  
421 - <draw>Y</draw>  
422 - </GUI>  
423 - </step>  
424 -  
425 - <step>  
426 - <name>&#x552e;&#x7968;&#x5458;&#x67e5;&#x8be2;</name>  
427 - <type>DBJoin</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 - <connection>bus_control_variable</connection>  
437 - <rowlimit>1</rowlimit>  
438 - <sql>select job_codeori as scode, personnel_name as sname from bsth_c_personnel&#xa;where id &#x3d; &#x3f;</sql>  
439 - <outer_join>Y</outer_join>  
440 - <replace_vars>N</replace_vars>  
441 - <parameter>  
442 - <field>  
443 - <name>spy</name>  
444 - <type>Integer</type>  
445 - </field>  
446 - </parameter>  
447 - <cluster_schema/>  
448 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
449 - <xloc>491</xloc>  
450 - <yloc>60</yloc>  
451 - <draw>Y</draw>  
452 - </GUI>  
453 - </step>  
454 -  
455 - <step>  
456 - <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>  
457 - <type>SelectValues</type>  
458 - <description/>  
459 - <distribute>Y</distribute>  
460 - <custom_distribution/>  
461 - <copies>1</copies>  
462 - <partitioning>  
463 - <method>none</method>  
464 - <schema_name/>  
465 - </partitioning>  
466 - <fields> <field> <name>xlmc</name>  
467 - <rename>&#x7ebf;&#x8def;</rename>  
468 - <length>-2</length>  
469 - <precision>-2</precision>  
470 - </field> <field> <name>dbbm</name>  
471 - <rename>&#x642d;&#x73ed;&#x7f16;&#x7801;</rename>  
472 - <length>-2</length>  
473 - <precision>-2</precision>  
474 - </field> <field> <name>jcode</name>  
475 - <rename>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</rename>  
476 - <length>-2</length>  
477 - <precision>-2</precision>  
478 - </field> <field> <name>jname</name>  
479 - <rename>&#x9a7e;&#x9a76;&#x5458;</rename>  
480 - <length>-2</length>  
481 - <precision>-2</precision>  
482 - </field> <field> <name>scode</name>  
483 - <rename>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</rename>  
484 - <length>-2</length>  
485 - <precision>-2</precision>  
486 - </field> <field> <name>sname</name>  
487 - <rename>&#x552e;&#x7968;&#x5458;</rename>  
488 - <length>-2</length>  
489 - <precision>-2</precision>  
490 - </field> <select_unspecified>N</select_unspecified>  
491 - </fields> <cluster_schema/>  
492 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
493 - <xloc>492</xloc>  
494 - <yloc>164</yloc>  
495 - <draw>Y</draw>  
496 - </GUI>  
497 - </step>  
498 -  
499 - <step>  
500 - <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>  
501 - <type>SortRows</type>  
502 - <description/>  
503 - <distribute>Y</distribute>  
504 - <custom_distribution/>  
505 - <copies>1</copies>  
506 - <partitioning>  
507 - <method>none</method>  
508 - <schema_name/>  
509 - </partitioning>  
510 - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>  
511 - <prefix>out</prefix>  
512 - <sort_size>1000000</sort_size>  
513 - <free_memory/>  
514 - <compress>N</compress>  
515 - <compress_variable/>  
516 - <unique_rows>N</unique_rows>  
517 - <fields>  
518 - <field>  
519 - <name>&#x7ebf;&#x8def;</name>  
520 - <ascending>Y</ascending>  
521 - <case_sensitive>N</case_sensitive>  
522 - <presorted>N</presorted>  
523 - </field>  
524 - <field>  
525 - <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>  
526 - <ascending>Y</ascending>  
527 - <case_sensitive>N</case_sensitive>  
528 - <presorted>N</presorted>  
529 - </field>  
530 - </fields>  
531 - <cluster_schema/>  
532 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
533 - <xloc>692</xloc>  
534 - <yloc>164</yloc>  
535 - <draw>Y</draw>  
536 - </GUI>  
537 - </step>  
538 -  
539 - <step>  
540 - <name>&#x7ebf;&#x8def;&#x67e5;&#x8be2;</name>  
541 - <type>DBLookup</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 - <connection>bus_control_variable</connection>  
551 - <cache>Y</cache>  
552 - <cache_load_all>Y</cache_load_all>  
553 - <cache_size>0</cache_size>  
554 - <lookup>  
555 - <schema/>  
556 - <table>bsth_c_line</table>  
557 - <orderby/>  
558 - <fail_on_multiple>N</fail_on_multiple>  
559 - <eat_row_on_failure>N</eat_row_on_failure>  
560 - <key>  
561 - <name>xl</name>  
562 - <field>id</field>  
563 - <condition>&#x3d;</condition>  
564 - <name2/>  
565 - </key>  
566 - <value>  
567 - <name>name</name>  
568 - <rename>xlmc</rename>  
569 - <default/>  
570 - <type>String</type>  
571 - </value>  
572 - </lookup>  
573 - <cluster_schema/>  
574 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
575 - <xloc>227</xloc>  
576 - <yloc>59</yloc>  
577 - <draw>Y</draw>  
578 - </GUI>  
579 - </step>  
580 -  
581 - <step>  
582 - <name>&#x9a7e;&#x9a76;&#x5458;&#x67e5;&#x8be2;</name>  
583 - <type>DBJoin</type>  
584 - <description/>  
585 - <distribute>Y</distribute>  
586 - <custom_distribution/>  
587 - <copies>1</copies>  
588 - <partitioning>  
589 - <method>none</method>  
590 - <schema_name/>  
591 - </partitioning>  
592 - <connection>bus_control_variable</connection>  
593 - <rowlimit>1</rowlimit>  
594 - <sql>select job_codeori as jcode, personnel_name as jname from bsth_c_personnel&#xa;where id &#x3d; &#x3f;</sql>  
595 - <outer_join>Y</outer_join>  
596 - <replace_vars>N</replace_vars>  
597 - <parameter>  
598 - <field>  
599 - <name>jsy</name>  
600 - <type>Integer</type>  
601 - </field>  
602 - </parameter>  
603 - <cluster_schema/>  
604 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
605 - <xloc>366</xloc>  
606 - <yloc>60</yloc>  
607 - <draw>Y</draw>  
608 - </GUI>  
609 - </step>  
610 -  
611 - <step_error_handling>  
612 - </step_error_handling>  
613 - <slave-step-copy-partition-distribution>  
614 -</slave-step-copy-partition-distribution>  
615 - <slave_transformation>N</slave_transformation>  
616 -  
617 -</transformation> 1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;&#x5bfc;&#x51fa;</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/>
  15 + <description>excel&#x6587;&#x4ef6;&#x8def;&#x5f84;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>xlid</name>
  19 + <default_value/>
  20 + <description>&#x7ebf;&#x8def;id</description>
  21 + </parameter>
  22 + </parameters>
  23 + <log>
  24 +<trans-log-table><connection/>
  25 +<schema/>
  26 +<table/>
  27 +<size_limit_lines/>
  28 +<interval/>
  29 +<timeout_days/>
  30 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
  31 +<perf-log-table><connection/>
  32 +<schema/>
  33 +<table/>
  34 +<interval/>
  35 +<timeout_days/>
  36 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
  37 +<channel-log-table><connection/>
  38 +<schema/>
  39 +<table/>
  40 +<timeout_days/>
  41 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
  42 +<step-log-table><connection/>
  43 +<schema/>
  44 +<table/>
  45 +<timeout_days/>
  46 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
  47 +<metrics-log-table><connection/>
  48 +<schema/>
  49 +<table/>
  50 +<timeout_days/>
  51 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
  52 + </log>
  53 + <maxdate>
  54 + <connection/>
  55 + <table/>
  56 + <field/>
  57 + <offset>0.0</offset>
  58 + <maxdiff>0.0</maxdiff>
  59 + </maxdate>
  60 + <size_rowset>10000</size_rowset>
  61 + <sleep_time_empty>50</sleep_time_empty>
  62 + <sleep_time_full>50</sleep_time_full>
  63 + <unique_connections>N</unique_connections>
  64 + <feedback_shown>Y</feedback_shown>
  65 + <feedback_size>50000</feedback_size>
  66 + <using_thread_priorities>Y</using_thread_priorities>
  67 + <shared_objects_file/>
  68 + <capture_step_performance>N</capture_step_performance>
  69 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  70 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  71 + <dependencies>
  72 + </dependencies>
  73 + <partitionschemas>
  74 + </partitionschemas>
  75 + <slaveservers>
  76 + </slaveservers>
  77 + <clusterschemas>
  78 + </clusterschemas>
  79 + <created_user>-</created_user>
  80 + <created_date>2017&#x2f;01&#x2f;11 15&#x3a;36&#x3a;10.101</created_date>
  81 + <modified_user>-</modified_user>
  82 + <modified_date>2017&#x2f;01&#x2f;11 15&#x3a;36&#x3a;10.101</modified_date>
  83 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  84 + <is_key_private>N</is_key_private>
  85 + </info>
  86 + <notepads>
  87 + <notepad>
  88 + <note>&#x8fd9;&#x91cc;&#x6709;&#x4e9b;&#x95ee;&#x9898;&#xa;&#x5728;window2012&#x7684;&#x73af;&#x5883;&#x4e0b;&#xff0c;&#xa;MySql&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x4e2d;&#x5982;&#x679c;&#x8fd4;&#x56de;&#x4e2d;&#x6587;&#x5185;&#x5bb9;&#x7684;&#x5b57;&#x6bb5;&#xff0c;&#x8fd9;&#x4e2a;&#x5185;&#x5bb9;&#x4e71;&#x7801;&#xa;&#x89e3;&#x51b3;&#x529e;&#x6cd5;&#xff0c;&#x5c31;&#x662f;&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x5168;&#x90e8;&#x7f13;&#x5b58;&#xff0c;&#x5c31;&#x4e0d;&#x4e71;&#x7801;&#xa;linux&#x73af;&#x5883;&#x4e0b;&#x6ca1;&#x95ee;&#x9898;</note>
  89 + <xloc>66</xloc>
  90 + <yloc>151</yloc>
  91 + <width>333</width>
  92 + <heigth>90</heigth>
  93 + <fontname>YaHei Consolas Hybrid</fontname>
  94 + <fontsize>12</fontsize>
  95 + <fontbold>N</fontbold>
  96 + <fontitalic>N</fontitalic>
  97 + <fontcolorred>0</fontcolorred>
  98 + <fontcolorgreen>0</fontcolorgreen>
  99 + <fontcolorblue>0</fontcolorblue>
  100 + <backgroundcolorred>255</backgroundcolorred>
  101 + <backgroundcolorgreen>205</backgroundcolorgreen>
  102 + <backgroundcolorblue>112</backgroundcolorblue>
  103 + <bordercolorred>100</bordercolorred>
  104 + <bordercolorgreen>100</bordercolorgreen>
  105 + <bordercolorblue>100</bordercolorblue>
  106 + <drawshadow>Y</drawshadow>
  107 + </notepad>
  108 + </notepads>
  109 + <connection>
  110 + <name>192.168.168.1_jwgl_dw</name>
  111 + <server>192.168.168.1</server>
  112 + <type>ORACLE</type>
  113 + <access>Native</access>
  114 + <database>orcl</database>
  115 + <port>1521</port>
  116 + <username>jwgl_dw</username>
  117 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  118 + <servername/>
  119 + <data_tablespace/>
  120 + <index_tablespace/>
  121 + <attributes>
  122 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  123 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  124 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  125 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  126 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  127 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  128 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  129 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  130 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  131 + </attributes>
  132 + </connection>
  133 + <connection>
  134 + <name>bus_control_variable</name>
  135 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  136 + <type>MYSQL</type>
  137 + <access>Native</access>
  138 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  139 + <port>3306</port>
  140 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  141 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  142 + <servername/>
  143 + <data_tablespace/>
  144 + <index_tablespace/>
  145 + <attributes>
  146 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  147 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  148 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  149 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  150 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  151 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  152 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  153 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  154 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  155 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  156 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  157 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  158 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  159 + </attributes>
  160 + </connection>
  161 + <connection>
  162 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  163 + <server>localhost</server>
  164 + <type>MYSQL</type>
  165 + <access>Native</access>
  166 + <database>control</database>
  167 + <port>3306</port>
  168 + <username>root</username>
  169 + <password>Encrypted </password>
  170 + <servername/>
  171 + <data_tablespace/>
  172 + <index_tablespace/>
  173 + <attributes>
  174 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  175 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  176 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  177 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  178 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  179 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  180 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  181 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  182 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  183 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  184 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  185 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  186 + </attributes>
  187 + </connection>
  188 + <connection>
  189 + <name>bus_control_&#x672c;&#x673a;</name>
  190 + <server>localhost</server>
  191 + <type>MYSQL</type>
  192 + <access>Native</access>
  193 + <database>control</database>
  194 + <port>3306</port>
  195 + <username>root</username>
  196 + <password>Encrypted </password>
  197 + <servername/>
  198 + <data_tablespace/>
  199 + <index_tablespace/>
  200 + <attributes>
  201 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  202 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  203 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  204 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  205 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  206 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  207 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  208 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  209 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  210 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  211 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  212 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  213 + </attributes>
  214 + </connection>
  215 + <connection>
  216 + <name>xlab_mysql_youle</name>
  217 + <server>101.231.124.8</server>
  218 + <type>MYSQL</type>
  219 + <access>Native</access>
  220 + <database>xlab_youle</database>
  221 + <port>45687</port>
  222 + <username>xlab-youle</username>
  223 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  224 + <servername/>
  225 + <data_tablespace/>
  226 + <index_tablespace/>
  227 + <attributes>
  228 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  229 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  230 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  231 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  232 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  233 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  234 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  235 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  236 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  237 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  238 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  239 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  240 + </attributes>
  241 + </connection>
  242 + <connection>
  243 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  244 + <server>localhost</server>
  245 + <type>MYSQL</type>
  246 + <access>Native</access>
  247 + <database>xlab_youle</database>
  248 + <port>3306</port>
  249 + <username>root</username>
  250 + <password>Encrypted </password>
  251 + <servername/>
  252 + <data_tablespace/>
  253 + <index_tablespace/>
  254 + <attributes>
  255 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  256 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  257 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  258 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  259 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  260 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  261 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  262 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  263 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  264 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  265 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  266 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  267 + </attributes>
  268 + </connection>
  269 + <connection>
  270 + <name>xlab_youle</name>
  271 + <server/>
  272 + <type>MYSQL</type>
  273 + <access>JNDI</access>
  274 + <database>xlab_youle</database>
  275 + <port>1521</port>
  276 + <username/>
  277 + <password>Encrypted </password>
  278 + <servername/>
  279 + <data_tablespace/>
  280 + <index_tablespace/>
  281 + <attributes>
  282 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  283 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  284 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  285 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  286 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  287 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  288 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  289 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  290 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  291 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  292 + </attributes>
  293 + </connection>
  294 + <order>
  295 + <hop> <from>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#xff08;&#x6ca1;&#x6709;&#x4f5c;&#x5e9f;&#xff09;</from><to>&#x7ebf;&#x8def;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  296 + <hop> <from>&#x7ebf;&#x8def;&#x67e5;&#x8be2;</from><to>&#x9a7e;&#x9a76;&#x5458;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  297 + <hop> <from>&#x9a7e;&#x9a76;&#x5458;&#x67e5;&#x8be2;</from><to>&#x552e;&#x7968;&#x5458;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  298 + <hop> <from>&#x552e;&#x7968;&#x5458;&#x67e5;&#x8be2;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  299 + <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  300 + <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>Excel&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>
  301 + </order>
  302 + <step>
  303 + <name>Excel&#x8f93;&#x51fa;</name>
  304 + <type>ExcelOutput</type>
  305 + <description/>
  306 + <distribute>Y</distribute>
  307 + <custom_distribution/>
  308 + <copies>1</copies>
  309 + <partitioning>
  310 + <method>none</method>
  311 + <schema_name/>
  312 + </partitioning>
  313 + <header>Y</header>
  314 + <footer>N</footer>
  315 + <encoding/>
  316 + <append>N</append>
  317 + <add_to_result_filenames>Y</add_to_result_filenames>
  318 + <file>
  319 + <name>&#x24;&#x7b;filepath&#x7d;</name>
  320 + <extention>xls</extention>
  321 + <do_not_open_newfile_init>N</do_not_open_newfile_init>
  322 + <create_parent_folder>N</create_parent_folder>
  323 + <split>N</split>
  324 + <add_date>N</add_date>
  325 + <add_time>N</add_time>
  326 + <SpecifyFormat>N</SpecifyFormat>
  327 + <date_time_format>yyyyMMddHHmmss</date_time_format>
  328 + <sheetname>&#x5de5;&#x4f5c;&#x8868;1</sheetname>
  329 + <autosizecolums>N</autosizecolums>
  330 + <nullisblank>N</nullisblank>
  331 + <protect_sheet>N</protect_sheet>
  332 + <password>Encrypted </password>
  333 + <splitevery>0</splitevery>
  334 + <usetempfiles>N</usetempfiles>
  335 + <tempdirectory/>
  336 + </file>
  337 + <template>
  338 + <enabled>N</enabled>
  339 + <append>N</append>
  340 + <filename>template.xls</filename>
  341 + </template>
  342 + <fields>
  343 + <field>
  344 + <name>&#x7ebf;&#x8def;</name>
  345 + <type>String</type>
  346 + <format/>
  347 + </field>
  348 + <field>
  349 + <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>
  350 + <type>String</type>
  351 + <format/>
  352 + </field>
  353 + <field>
  354 + <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>
  355 + <type>String</type>
  356 + <format/>
  357 + </field>
  358 + <field>
  359 + <name>&#x9a7e;&#x9a76;&#x5458;</name>
  360 + <type>String</type>
  361 + <format/>
  362 + </field>
  363 + <field>
  364 + <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>
  365 + <type>String</type>
  366 + <format/>
  367 + </field>
  368 + <field>
  369 + <name>&#x552e;&#x7968;&#x5458;</name>
  370 + <type>String</type>
  371 + <format/>
  372 + </field>
  373 + </fields>
  374 + <custom>
  375 + <header_font_name>arial</header_font_name>
  376 + <header_font_size>10</header_font_size>
  377 + <header_font_bold>N</header_font_bold>
  378 + <header_font_italic>N</header_font_italic>
  379 + <header_font_underline>no</header_font_underline>
  380 + <header_font_orientation>horizontal</header_font_orientation>
  381 + <header_font_color>black</header_font_color>
  382 + <header_background_color>none</header_background_color>
  383 + <header_row_height>255</header_row_height>
  384 + <header_alignment>left</header_alignment>
  385 + <header_image/>
  386 + <row_font_name>arial</row_font_name>
  387 + <row_font_size>10</row_font_size>
  388 + <row_font_color>black</row_font_color>
  389 + <row_background_color>none</row_background_color>
  390 + </custom>
  391 + <cluster_schema/>
  392 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  393 + <xloc>696</xloc>
  394 + <yloc>257</yloc>
  395 + <draw>Y</draw>
  396 + </GUI>
  397 + </step>
  398 +
  399 + <step>
  400 + <name>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#xff08;&#x6ca1;&#x6709;&#x4f5c;&#x5e9f;&#xff09;</name>
  401 + <type>TableInput</type>
  402 + <description/>
  403 + <distribute>Y</distribute>
  404 + <custom_distribution/>
  405 + <copies>1</copies>
  406 + <partitioning>
  407 + <method>none</method>
  408 + <schema_name/>
  409 + </partitioning>
  410 + <connection>bus_control_variable</connection>
  411 + <sql>select &#x2a; from bsth_c_s_ecinfo where is_cancel &#x3d; 0 and xl &#x3d; &#x24;&#x7b;xlid&#x7d;</sql>
  412 + <limit>0</limit>
  413 + <lookup/>
  414 + <execute_each_row>N</execute_each_row>
  415 + <variables_active>Y</variables_active>
  416 + <lazy_conversion_active>N</lazy_conversion_active>
  417 + <cluster_schema/>
  418 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  419 + <xloc>90</xloc>
  420 + <yloc>59</yloc>
  421 + <draw>Y</draw>
  422 + </GUI>
  423 + </step>
  424 +
  425 + <step>
  426 + <name>&#x552e;&#x7968;&#x5458;&#x67e5;&#x8be2;</name>
  427 + <type>DBJoin</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 + <connection>bus_control_variable</connection>
  437 + <rowlimit>1</rowlimit>
  438 + <sql>select job_codeori as scode, personnel_name as sname from bsth_c_personnel&#xa;where id &#x3d; &#x3f;</sql>
  439 + <outer_join>Y</outer_join>
  440 + <replace_vars>N</replace_vars>
  441 + <parameter>
  442 + <field>
  443 + <name>spy</name>
  444 + <type>Integer</type>
  445 + </field>
  446 + </parameter>
  447 + <cluster_schema/>
  448 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  449 + <xloc>491</xloc>
  450 + <yloc>60</yloc>
  451 + <draw>Y</draw>
  452 + </GUI>
  453 + </step>
  454 +
  455 + <step>
  456 + <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
  457 + <type>SelectValues</type>
  458 + <description/>
  459 + <distribute>Y</distribute>
  460 + <custom_distribution/>
  461 + <copies>1</copies>
  462 + <partitioning>
  463 + <method>none</method>
  464 + <schema_name/>
  465 + </partitioning>
  466 + <fields> <field> <name>xlmc</name>
  467 + <rename>&#x7ebf;&#x8def;</rename>
  468 + <length>-2</length>
  469 + <precision>-2</precision>
  470 + </field> <field> <name>dbbm</name>
  471 + <rename>&#x642d;&#x73ed;&#x7f16;&#x7801;</rename>
  472 + <length>-2</length>
  473 + <precision>-2</precision>
  474 + </field> <field> <name>jcode</name>
  475 + <rename>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</rename>
  476 + <length>-2</length>
  477 + <precision>-2</precision>
  478 + </field> <field> <name>jname</name>
  479 + <rename>&#x9a7e;&#x9a76;&#x5458;</rename>
  480 + <length>-2</length>
  481 + <precision>-2</precision>
  482 + </field> <field> <name>scode</name>
  483 + <rename>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</rename>
  484 + <length>-2</length>
  485 + <precision>-2</precision>
  486 + </field> <field> <name>sname</name>
  487 + <rename>&#x552e;&#x7968;&#x5458;</rename>
  488 + <length>-2</length>
  489 + <precision>-2</precision>
  490 + </field> <select_unspecified>N</select_unspecified>
  491 + </fields> <cluster_schema/>
  492 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  493 + <xloc>492</xloc>
  494 + <yloc>164</yloc>
  495 + <draw>Y</draw>
  496 + </GUI>
  497 + </step>
  498 +
  499 + <step>
  500 + <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>
  501 + <type>SortRows</type>
  502 + <description/>
  503 + <distribute>Y</distribute>
  504 + <custom_distribution/>
  505 + <copies>1</copies>
  506 + <partitioning>
  507 + <method>none</method>
  508 + <schema_name/>
  509 + </partitioning>
  510 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  511 + <prefix>out</prefix>
  512 + <sort_size>1000000</sort_size>
  513 + <free_memory/>
  514 + <compress>N</compress>
  515 + <compress_variable/>
  516 + <unique_rows>N</unique_rows>
  517 + <fields>
  518 + <field>
  519 + <name>&#x7ebf;&#x8def;</name>
  520 + <ascending>Y</ascending>
  521 + <case_sensitive>N</case_sensitive>
  522 + <presorted>N</presorted>
  523 + </field>
  524 + <field>
  525 + <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>
  526 + <ascending>Y</ascending>
  527 + <case_sensitive>N</case_sensitive>
  528 + <presorted>N</presorted>
  529 + </field>
  530 + </fields>
  531 + <cluster_schema/>
  532 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  533 + <xloc>692</xloc>
  534 + <yloc>164</yloc>
  535 + <draw>Y</draw>
  536 + </GUI>
  537 + </step>
  538 +
  539 + <step>
  540 + <name>&#x7ebf;&#x8def;&#x67e5;&#x8be2;</name>
  541 + <type>DBLookup</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 + <connection>bus_control_variable</connection>
  551 + <cache>Y</cache>
  552 + <cache_load_all>Y</cache_load_all>
  553 + <cache_size>0</cache_size>
  554 + <lookup>
  555 + <schema/>
  556 + <table>bsth_c_line</table>
  557 + <orderby/>
  558 + <fail_on_multiple>N</fail_on_multiple>
  559 + <eat_row_on_failure>N</eat_row_on_failure>
  560 + <key>
  561 + <name>xl</name>
  562 + <field>id</field>
  563 + <condition>&#x3d;</condition>
  564 + <name2/>
  565 + </key>
  566 + <value>
  567 + <name>name</name>
  568 + <rename>xlmc</rename>
  569 + <default/>
  570 + <type>String</type>
  571 + </value>
  572 + </lookup>
  573 + <cluster_schema/>
  574 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  575 + <xloc>227</xloc>
  576 + <yloc>59</yloc>
  577 + <draw>Y</draw>
  578 + </GUI>
  579 + </step>
  580 +
  581 + <step>
  582 + <name>&#x9a7e;&#x9a76;&#x5458;&#x67e5;&#x8be2;</name>
  583 + <type>DBJoin</type>
  584 + <description/>
  585 + <distribute>Y</distribute>
  586 + <custom_distribution/>
  587 + <copies>1</copies>
  588 + <partitioning>
  589 + <method>none</method>
  590 + <schema_name/>
  591 + </partitioning>
  592 + <connection>bus_control_variable</connection>
  593 + <rowlimit>1</rowlimit>
  594 + <sql>select job_codeori as jcode, personnel_name as jname from bsth_c_personnel&#xa;where id &#x3d; &#x3f;</sql>
  595 + <outer_join>Y</outer_join>
  596 + <replace_vars>N</replace_vars>
  597 + <parameter>
  598 + <field>
  599 + <name>jsy</name>
  600 + <type>Integer</type>
  601 + </field>
  602 + </parameter>
  603 + <cluster_schema/>
  604 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  605 + <xloc>366</xloc>
  606 + <yloc>60</yloc>
  607 + <draw>Y</draw>
  608 + </GUI>
  609 + </step>
  610 +
  611 + <step_error_handling>
  612 + </step_error_handling>
  613 + <slave-step-copy-partition-distribution>
  614 +</slave-step-copy-partition-distribution>
  615 + <slave_transformation>N</slave_transformation>
  616 +
  617 +</transformation>
src/main/resources/static/pages/base/line/js/line-edit-form.js
@@ -9,7 +9,8 @@ @@ -9,7 +9,8 @@
9 9
10 10
11 !function(){ 11 !function(){
12 - 12 + // 关闭左侧栏
  13 + if (!$('body').hasClass('page-sidebar-closed')) {$('.menu-toggler.sidebar-toggler').click();}
13 /** 开辟日期 日期控件 <format:日期控件时间格式;locale:语言> */ 14 /** 开辟日期 日期控件 <format:日期控件时间格式;locale:语言> */
14 $('#openDateInput').datetimepicker({format : 'YYYY-MM-DD', locale: 'zh-cn'}); 15 $('#openDateInput').datetimepicker({format : 'YYYY-MM-DD', locale: 'zh-cn'});
15 /** 起始站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */ 16 /** 起始站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */
src/main/resources/static/pages/base/station/js/station-list-edit.js
@@ -16,9 +16,6 @@ @@ -16,9 +16,6 @@
16 $('#lineNameInput').val(no[1]); 16 $('#lineNameInput').val(no[1]);
17 // 获取站点对象信息 17 // 获取站点对象信息
18 var editStation = {}; 18 var editStation = {};
19 - /*PositionsPublicFunctions.getStationRouteInfo(id,function(r) {  
20 - editStation = r;  
21 - });*/  
22 $.ajax({ 19 $.ajax({
23 url: "/stationroute/findStationRouteInfo", //请求地址 20 url: "/stationroute/findStationRouteInfo", //请求地址
24 type: "Get", 21 type: "Get",
@@ -29,74 +26,77 @@ @@ -29,74 +26,77 @@
29 editStation = result[0]; 26 editStation = result[0];
30 } 27 }
31 }); 28 });
32 - // 初始化表单值  
33 - PositionsPublicFunctions.setListEditFrom(editStation);  
34 - var initzdlyP = {'lineCode_eq':editStation.stationRouteLIneCode,'destroy_eq':0,'directions_eq':editStation.stationRoutedirections};  
35 - initSelect(initzdlyP); 29 + setTimeout(function(){
  30 + // 初始化表单值
  31 + PositionsPublicFunctions.setListEditFrom(editStation);
  32 +
  33 + var initzdlyP = {'lineCode_eq':editStation.stationRouteLIneCode,'destroy_eq':0,'directions_eq':editStation.stationRoutedirections};
  34 + initSelect(initzdlyP);
  35 +
  36 + // 编辑表单元素
  37 + var form = $('#list_edit_station_form');
  38 + // 获取错误提示元素
  39 + var error = $('.alert-danger', form);
  40 + // 提交数据按钮事件
  41 + $('#editStationButton').on('click', function() {
  42 + // 表单提交
  43 + form.submit();
  44 + });
  45 + // 表单验证
  46 + form.validate({
  47 + errorElement : 'span',
  48 + errorClass : 'help-block help-block-error',
  49 + focusInvalid : false,
  50 + rules : {
  51 + 'stationName' : {required : true},// 站点路由名称 必填项
  52 + 'stationCod': {required : true,},// 站点编码 必填项
  53 + 'directions' : {required : true,dirIs : true},// 站点方向 必填项 必填项
  54 + 'stationRouteCode' : {isStart : true},// 站点序号
  55 + 'bJwpoints' : {required : true},// 经纬度坐标点 必填项
  56 + 'shapesType' : {required : true},// 几何图形类型 必填项
  57 + 'radius' : {required : true},// 圆形半径 必填项
  58 + 'destroy' : {required : true},// 是否撤销 必填项
  59 + 'toTime' : {number : true},// 到站时间 必须输入合法的数字(负数,小数)。
  60 + 'distances' : {number : true},// 到站距离 // 到站距离
  61 + 'descriptions' : {maxlength: 150}// 描述与说明 最大长度
  62 + },
  63 + invalidHandler : function(event, validator) {
  64 + error.show();
  65 + App.scrollTo(error, -200);
  66 + },
  67 + highlight : function(element) {
  68 + $(element).closest('.form-group').addClass('has-error');
  69 + },
  70 + unhighlight : function(element) {
  71 + $(element).closest('.form-group').removeClass('has-error');
  72 + },
  73 + success : function(label) {
  74 + label.closest('.form-group').removeClass('has-error');
  75 + },
  76 + submitHandler : function(f) {
  77 + error.hide();
  78 + var params = form.serializeJSON();
  79 + /*if(params.shapesType=='圆形')
  80 + params.shapesType = 'r';
  81 + else if(params.shapesType=='多边形')
  82 + params.shapesType = 'd';*/
  83 + if(params.stationRouteCode=='请选择...')
  84 + params.stationRouteCode='';
  85 + PositionsPublicFunctions.stationUpdate(params,function(resuntDate) {
  86 + if(resuntDate.status=='SUCCESS') {
  87 + // 弹出添加成功提示消息
  88 + layer.msg('修改成功...');
  89 + }else {
  90 + // 弹出添加失败提示消息
  91 + layer.msg('修改失败...');
  92 + }
  93 + //返回站点信息页面
  94 + loadPage('list.html');
  95 + });
  96 + }
  97 + });
  98 + },500);
36 99
37 - // 编辑表单元素  
38 - var form = $('#list_edit_station_form');  
39 - // 获取错误提示元素  
40 - var error = $('.alert-danger', form);  
41 - // 提交数据按钮事件  
42 - $('#editStationButton').on('click', function() {  
43 - // 表单提交  
44 - form.submit();  
45 - });  
46 - // 表单验证  
47 - form.validate({  
48 - errorElement : 'span',  
49 - errorClass : 'help-block help-block-error',  
50 - focusInvalid : false,  
51 - rules : {  
52 - 'stationName' : {required : true},// 站点路由名称 必填项  
53 - 'stationCod': {required : true,},// 站点编码 必填项  
54 - 'directions' : {required : true,dirIs : true},// 站点方向 必填项 必填项  
55 - 'stationRouteCode' : {isStart : true},// 站点序号  
56 - 'stationMark' : {required : true},// 站点类型 必填项  
57 - 'bJwpoints' : {required : true},// 经纬度坐标点 必填项  
58 - 'shapesType' : {required : true},// 几何图形类型 必填项  
59 - 'radius' : {required : true},// 圆形半径 必填项  
60 - 'destroy' : {required : true},// 是否撤销 必填项  
61 - 'toTime' : {number : true},// 到站时间 必须输入合法的数字(负数,小数)。  
62 - 'distances' : {number : true},// 到站距离 // 到站距离  
63 - 'descriptions' : {maxlength: 150}// 描述与说明 最大长度  
64 - },  
65 - invalidHandler : function(event, validator) {  
66 - error.show();  
67 - App.scrollTo(error, -200);  
68 - },  
69 - highlight : function(element) {  
70 - $(element).closest('.form-group').addClass('has-error');  
71 - },  
72 - unhighlight : function(element) {  
73 - $(element).closest('.form-group').removeClass('has-error');  
74 - },  
75 - success : function(label) {  
76 - label.closest('.form-group').removeClass('has-error');  
77 - },  
78 - submitHandler : function(f) {  
79 - error.hide();  
80 - var params = form.serializeJSON();  
81 - /*if(params.shapesType=='圆形')  
82 - params.shapesType = 'r';  
83 - else if(params.shapesType=='多边形')  
84 - params.shapesType = 'd';*/  
85 - if(params.stationRouteCode=='请选择...')  
86 - params.stationRouteCode='';  
87 - PositionsPublicFunctions.stationUpdate(params,function(resuntDate) {  
88 - if(resuntDate.status=='SUCCESS') {  
89 - // 弹出添加成功提示消息  
90 - layer.msg('修改成功...');  
91 - }else {  
92 - // 弹出添加失败提示消息  
93 - layer.msg('修改失败...');  
94 - }  
95 - //返回站点信息页面  
96 - loadPage('list.html');  
97 - });  
98 - }  
99 - });  
100 // 站点序号值改变事件 100 // 站点序号值改变事件
101 $('#stationrouteSelect').on('change',function() { 101 $('#stationrouteSelect').on('change',function() {
102 var stationRValue = $('#stationrouteSelect').val(); 102 var stationRValue = $('#stationrouteSelect').val();
src/main/resources/static/pages/base/station/js/station-positions-function.js
@@ -154,12 +154,12 @@ var PositionsPublicFunctions = function () { @@ -154,12 +154,12 @@ var PositionsPublicFunctions = function () {
154 $('#descriptionsTextarea').val(stationObj.stationRouteDescriptions); 154 $('#descriptionsTextarea').val(stationObj.stationRouteDescriptions);
155 }, 155 },
156 setListEditFrom : function(stationObj) { 156 setListEditFrom : function(stationObj) {
157 - // 图形坐标点集合(百度坐标) 157 + // WGS坐标点图形集合
158 $('#bPolygonGridInput').val(stationObj.stationBPolyonGrid); 158 $('#bPolygonGridInput').val(stationObj.stationBPolyonGrid);
159 // 百度地图经纬度坐标中心点 159 // 百度地图经纬度坐标中心点
160 $('#bJwpointsInput').val(stationObj.stationJwpoints); 160 $('#bJwpointsInput').val(stationObj.stationJwpoints);
161 - // WGS坐标点图形集合  
162 - $('#bPolygonGridInput').val(stationObj.stationGPloyonGrid); 161 + // 图形坐标点集合(百度坐标)
  162 +// $('#bPolygonGridInput').val(stationObj.stationGPloyonGrid);
163 // 城建坐标x 163 // 城建坐标x
164 $('#xInput').val(stationObj.stationGlonx); 164 $('#xInput').val(stationObj.stationGlonx);
165 // 城建坐标y 165 // 城建坐标y
@@ -169,14 +169,11 @@ var PositionsPublicFunctions = function () { @@ -169,14 +169,11 @@ var PositionsPublicFunctions = function () {
169 // 获取半径元素,并添加值 169 // 获取半径元素,并添加值
170 $('#radiusInput').val(stationObj.stationRadius); 170 $('#radiusInput').val(stationObj.stationRadius);
171 // 线路ID 171 // 线路ID
172 - $('#stationRouteLineInput').val(stationObj.stationRouteLIneCode); 172 + $('#stationRouteLineInput').val(stationObj.stationRouteLine);
173 // 站点编码 173 // 站点编码
174 $('#stationCodInput').val(stationObj.stationCode); 174 $('#stationCodInput').val(stationObj.stationCode);
175 -  
176 // 线路编码 175 // 线路编码
177 - $('#lineCodeInput').val(stationObj.stationRouteCode);  
178 - /*// 线路名称  
179 - $('#lineNameInput').val();*/ 176 + $('#lineCodeInput').val(stationObj.stationRouteLIneCode);
180 // 站点ID 177 // 站点ID
181 $('#StationCodeInput').val(stationObj.stationRouteStation); 178 $('#StationCodeInput').val(stationObj.stationRouteStation);
182 // 站点路由ID 179 // 站点路由ID
src/main/resources/static/pages/base/station/list_edit.html
@@ -81,7 +81,6 @@ @@ -81,7 +81,6 @@
81 </label> 81 </label>
82 <div class="col-md-4"> 82 <div class="col-md-4">
83 <input type="text" class="form-control" name="lineName" id="lineNameInput" placeholder="线路名称" readonly="readonly" /> 83 <input type="text" class="form-control" name="lineName" id="lineNameInput" placeholder="线路名称" readonly="readonly" />
84 - <span class="help-block"> 例如 :浦东88路 </span>  
85 </div> 84 </div>
86 </div> 85 </div>
87 <!-- 线路名称 (* 必填项) END --> 86 <!-- 线路名称 (* 必填项) END -->
@@ -157,7 +156,7 @@ @@ -157,7 +156,7 @@
157 <!-- 站点序号 --> 156 <!-- 站点序号 -->
158 <div class="col-md-6"> 157 <div class="col-md-6">
159 <label class="control-label col-md-5"> 158 <label class="control-label col-md-5">
160 - <span class="required"> * </span>上一站点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 159 + <span class="required"> </span>上一站点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
161 </label> 160 </label>
162 <div class="col-md-4"> 161 <div class="col-md-4">
163 <select name="stationRouteCode" class="form-control" id="stationrouteSelect" style="width:100%"></select> 162 <select name="stationRouteCode" class="form-control" id="stationrouteSelect" style="width:100%"></select>
@@ -205,7 +204,7 @@ @@ -205,7 +204,7 @@
205 <div class="form-group"> 204 <div class="form-group">
206 <!-- 道路编码--> 205 <!-- 道路编码-->
207 <div class="col-md-6"> 206 <div class="col-md-6">
208 - <label class="control-label col-md-5"><span class="required"> * </span> 207 + <label class="control-label col-md-5"><span class="required"> </span>
209 道路编码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 208 道路编码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
210 </label> 209 </label>
211 <div class="col-md-4"> 210 <div class="col-md-4">
@@ -215,7 +214,7 @@ @@ -215,7 +214,7 @@
215 214
216 <!-- 到站时间 --> 215 <!-- 到站时间 -->
217 <div class="col-md-6"> 216 <div class="col-md-6">
218 - <label class="control-label col-md-5"><span class="required"> * </span> 217 + <label class="control-label col-md-5"><span class="required"></span>
219 到站时间 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: </label> 218 到站时间 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: </label>
220 <div class="col-md-4"> 219 <div class="col-md-4">
221 <input type="text" class="form-control" name="toTime" id="toTimeInput" placeholder="到站时间"> 220 <input type="text" class="form-control" name="toTime" id="toTimeInput" placeholder="到站时间">
@@ -229,7 +228,7 @@ @@ -229,7 +228,7 @@
229 <div class="form-group"> 228 <div class="form-group">
230 <!-- 到站距离 --> 229 <!-- 到站距离 -->
231 <div class="col-md-6"> 230 <div class="col-md-6">
232 - <label class="control-label col-md-5"><span class="required"> * </span> 231 + <label class="control-label col-md-5"><span class="required"> </span>
233 到站距离&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</label> 232 到站距离&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</label>
234 <div class="col-md-4"> 233 <div class="col-md-4">
235 <input type="text" class="form-control" name="distances" id="distancesInput" placeholder="到站距离"> 234 <input type="text" class="form-control" name="distances" id="distancesInput" placeholder="到站距离">
@@ -239,10 +238,10 @@ @@ -239,10 +238,10 @@
239 238
240 <!-- 版本号 --> 239 <!-- 版本号 -->
241 <div class="col-md-6"> 240 <div class="col-md-6">
242 - <label class="control-label col-md-5"><span class="required"> * </span> 版本号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 241 + <label class="control-label col-md-5"><span class="required"> </span> 版本号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
243 </label> 242 </label>
244 <div class="col-md-4"> 243 <div class="col-md-4">
245 - <input type="text" class="form-control" name="versions" value='1' Readonly> 244 + <input type="text" class="form-control" name="versions" >
246 </div> 245 </div>
247 </div> 246 </div>
248 </div> 247 </div>
@@ -252,7 +251,7 @@ @@ -252,7 +251,7 @@
252 <div class="form-group"> 251 <div class="form-group">
253 <!-- 描述/说明 --> 252 <!-- 描述/说明 -->
254 <div class="col-md-6"> 253 <div class="col-md-6">
255 - <label class="control-label col-md-5"><span class="required"> * </span>描述/说明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 254 + <label class="control-label col-md-5"><span class="required"></span>描述/说明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
256 </label> 255 </label>
257 <div class="col-md-4"> 256 <div class="col-md-4">
258 <textarea class="form-control" rows="3" name="descriptions" id="descriptionsTextarea" placeholder="描述/说明"></textarea> 257 <textarea class="form-control" rows="3" name="descriptions" id="descriptionsTextarea" placeholder="描述/说明"></textarea>
src/main/resources/static/pages/base/timesmodel/js/strategy/BcObj.js
1 -/**  
2 - * 班次类型对象(最后转换成显示用bc对象)  
3 - * @param bcType  
4 - * @param isUp  
5 - * @param lp  
6 - * @param fcno  
7 - * @param fcTimeObj  
8 - * @param paramObj  
9 - * @returns {{}}  
10 - * @constructor  
11 - */  
12 -var BcObj = function(bcType, isUp, lp, fcno, fcTimeObj, paramObj) {  
13 -  
14 - //---------- 内部属性 ----------//  
15 - var _bcType = bcType; // 班次类型(normal,in,out等)  
16 - var _isUp = isUp; // true表示上行,false表示下行  
17 - var _lp = lp; // 路牌  
18 - var _fcno = fcno; // 发车顺序号  
19 -  
20 - // 计算的属性,TODO:还有其他属性  
21 - // 上标线里属于第几圈(本班次方向和标线方向一致,才有意义)  
22 - var qCount;  
23 -  
24 - // 班次里程  
25 - var _bclc = StrategyUtils.calcuTravelLcNumber(_isUp, _bcType, paramObj);  
26 - // 发车时间  
27 - var _fcsjObj = moment(fcTimeObj);  
28 - // 班次时间  
29 - var _bcsj = StrategyUtils.calcuTravelTime(_fcsjObj, _isUp, paramObj);  
30 - // 到达时间  
31 - var _arrsj = StrategyUtils.addMinute(_fcsjObj, _bcsj);  
32 - // 到达后的停站时间(使用到达时间判定)  
33 - var _stopTime = StrategyUtils.calcuFixedStopNumber(_arrsj, !_isUp, paramObj);  
34 -  
35 - return {  
36 - /**  
37 - * 是否上行。  
38 - * @returns boolean  
39 - */  
40 - isUp: function() {  
41 - return _isUp;  
42 - },  
43 - /**  
44 - * 获取发车时间。  
45 - * @returns {*|moment.Moment}  
46 - */  
47 - getFcTimeObj: function() {  
48 - return _fcsjObj;  
49 - },  
50 - /**  
51 - * 获取班次时间。  
52 - */  
53 - getBcTime: function() {  
54 - return _bcsj;  
55 - },  
56 - /**  
57 - * 获取停站时间。  
58 - * @returns {*}  
59 - */  
60 - getStopTime: function() {  
61 - return _stopTime;  
62 - },  
63 -  
64 - /**  
65 - * 转换成显示用班次对象。  
66 - */  
67 - toGanttBcObj: function() {  
68 - var _bcObj = {  
69 - parent: _lp,  
70 - lpNo: _lp,  
71 - lp: null,  
72 - lpName: _lp,  
73 - lpType: '普通路牌',  
74 - bcType: _bcType,  
75 - fcno: _fcno,  
76 - isfb: 0,  
77 - isSwitchXl: null,  
78 - bz: null  
79 - };  
80 -  
81 - // 线路上下行  
82 - _bcObj.xlDir = _isUp ? "relationshipGraph-up" : "relationshipGraph-down";  
83 -  
84 - // 里程  
85 - _bcObj.jhlc = _bclc;  
86 -  
87 - // 停车场  
88 - _bcObj.tcc = paramObj.getTccId();  
89 -  
90 - // 时刻表  
91 - _bcObj.ttinfo = paramObj.getTTinfoId();  
92 -  
93 - // 线路  
94 - _bcObj.xl = paramObj.getXlId();  
95 -  
96 - // 起点站、终点站  
97 - _bcObj.qdz = _isUp ? paramObj.getUpQdzObj().id : paramObj.getDownQdzObj().id;  
98 - _bcObj.zdz = _isUp ? paramObj.getUpZdzObj().id : paramObj.getDownZdzObj().id;  
99 -  
100 - // 发车时间,行驶时间,到达时间,停站时间  
101 - _bcObj.fcsj = _fcsjObj.format("HH:mm");  
102 - _bcObj.bcsj = _bcsj;  
103 - _bcObj.ARRIVALTIME = _arrsj.format("HH:mm");  
104 - _bcObj.STOPTIME = _stopTime;  
105 -  
106 - return _bcObj;  
107 - }  
108 - }; 1 +/**
  2 + * 班次类型对象(最后转换成显示用bc对象)
  3 + * @param bcType
  4 + * @param isUp
  5 + * @param lp
  6 + * @param fcno
  7 + * @param fcTimeObj
  8 + * @param paramObj
  9 + * @returns {{}}
  10 + * @constructor
  11 + */
  12 +var BcObj = function(bcType, isUp, lp, fcno, fcTimeObj, paramObj) {
  13 +
  14 + //---------- 内部属性 ----------//
  15 + var _bcType = bcType; // 班次类型(normal,in,out等)
  16 + var _isUp = isUp; // true表示上行,false表示下行
  17 + var _lp = lp; // 路牌
  18 + var _fcno = fcno; // 发车顺序号
  19 +
  20 + // 计算的属性,TODO:还有其他属性
  21 + // 上标线里属于第几圈(本班次方向和标线方向一致,才有意义)
  22 + var qCount;
  23 +
  24 + // 班次里程
  25 + var _bclc = StrategyUtils.calcuTravelLcNumber(_isUp, _bcType, paramObj);
  26 + // 发车时间
  27 + var _fcsjObj = moment(fcTimeObj);
  28 + // 班次时间
  29 + var _bcsj = StrategyUtils.calcuTravelTime(_fcsjObj, _isUp, paramObj);
  30 + // 到达时间
  31 + var _arrsj = StrategyUtils.addMinute(_fcsjObj, _bcsj);
  32 + // 到达后的停站时间(使用到达时间判定)
  33 + var _stopTime = StrategyUtils.calcuFixedStopNumber(_arrsj, !_isUp, paramObj);
  34 +
  35 + return {
  36 + /**
  37 + * 是否上行。
  38 + * @returns boolean
  39 + */
  40 + isUp: function() {
  41 + return _isUp;
  42 + },
  43 + /**
  44 + * 获取发车时间。
  45 + * @returns {*|moment.Moment}
  46 + */
  47 + getFcTimeObj: function() {
  48 + return _fcsjObj;
  49 + },
  50 + /**
  51 + * 获取班次时间。
  52 + */
  53 + getBcTime: function() {
  54 + return _bcsj;
  55 + },
  56 + /**
  57 + * 获取停站时间。
  58 + * @returns {*}
  59 + */
  60 + getStopTime: function() {
  61 + return _stopTime;
  62 + },
  63 +
  64 + /**
  65 + * 转换成显示用班次对象。
  66 + */
  67 + toGanttBcObj: function() {
  68 + var _bcObj = {
  69 + parent: _lp,
  70 + lpNo: _lp,
  71 + lp: null,
  72 + lpName: _lp,
  73 + lpType: '普通路牌',
  74 + bcType: _bcType,
  75 + fcno: _fcno,
  76 + isfb: 0,
  77 + isSwitchXl: null,
  78 + bz: null
  79 + };
  80 +
  81 + // 线路上下行
  82 + _bcObj.xlDir = _isUp ? "relationshipGraph-up" : "relationshipGraph-down";
  83 +
  84 + // 里程
  85 + _bcObj.jhlc = _bclc;
  86 +
  87 + // 停车场
  88 + _bcObj.tcc = paramObj.getTccId();
  89 +
  90 + // 时刻表
  91 + _bcObj.ttinfo = paramObj.getTTinfoId();
  92 +
  93 + // 线路
  94 + _bcObj.xl = paramObj.getXlId();
  95 +
  96 + // 起点站、终点站
  97 + _bcObj.qdz = _isUp ? paramObj.getUpQdzObj().id : paramObj.getDownQdzObj().id;
  98 + _bcObj.zdz = _isUp ? paramObj.getUpZdzObj().id : paramObj.getDownZdzObj().id;
  99 +
  100 + // 发车时间,行驶时间,到达时间,停站时间
  101 + _bcObj.fcsj = _fcsjObj.format("HH:mm");
  102 + _bcObj.bcsj = _bcsj;
  103 + _bcObj.ARRIVALTIME = _arrsj.format("HH:mm");
  104 + _bcObj.STOPTIME = _stopTime;
  105 +
  106 + return _bcObj;
  107 + }
  108 + };
109 }; 109 };
110 \ No newline at end of file 110 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/js/strategy/StrategyUtils.js
1 -/**  
2 - * 工具类。  
3 - * 注意:moment是mutable,所有的moment操作都会改变原有对象的值,  
4 - * 所以所有的操作都要小心处理。  
5 - */  
6 -var StrategyUtils = function() {  
7 - var date_wrap_prefix = "2000-01-01 "; // 包装日期的前缀  
8 - var date_wrap_format = "YYYY-MM-DD HH:mm"; // 日期格式  
9 - /**  
10 - * 将时间包装成日期,方便计算。  
11 - * @param timeStr 时间格式,如 06:30  
12 - * @returns moment对象  
13 - */  
14 - var _wrapTimeFun = function(timeStr) {  
15 - return moment(  
16 - date_wrap_prefix + timeStr,  
17 - date_wrap_format  
18 - );  
19 - };  
20 - /**  
21 - * 添加时间(注意,返回一个新的moment对象,此方法是immutable)  
22 - * @param timeObj moment 对象  
23 - * @param time 时间  
24 - * @param type 时间单位  
25 - * @returns 重新创建一个moment返回  
26 - */  
27 - var _addTimeFun = function(timeObj, time, type) {  
28 - var _timeObj = moment(timeObj); // clone  
29 - _timeObj.add(time, type);  
30 - return _timeObj;  
31 - };  
32 -  
33 - // 内部工厂类  
34 - var _factoryFun = function() {  
35 - return {  
36 - // 创建参数  
37 - createParameterObj: function(formMap, dataMap) {  
38 - return ParameterObj(formMap, dataMap);  
39 - },  
40 - // 创建班次对象  
41 - createBcObj: function(bcType, isUp, lp, fcno, fcTimeObj, paramObj) {  
42 - return BcObj(bcType, isUp, lp, fcno, fcTimeObj, paramObj);  
43 - }  
44 - };  
45 - };  
46 -  
47 - return {  
48 - /**  
49 - * 工厂对象,创建不同的对象。  
50 - * @returns {{createParameterObj, createBcObj}}  
51 - */  
52 - getFactory: function() {  
53 - return _factoryFun();  
54 - },  
55 -  
56 - //-------------- 时间操作 ------------//  
57 - /**  
58 - * 通过字符串创建时间对象。  
59 - * @param timeStr 时间字符串  
60 - * @returns {moment对象}  
61 - */  
62 - toTimeObj: function(timeStr) {  
63 - return _wrapTimeFun(timeStr);  
64 - },  
65 - /**  
66 - * 增加分钟。  
67 - * @param timeObj 时间对象  
68 - * @param minute 分钟  
69 - * @returns {重新创建一个moment返回}  
70 - */  
71 - addMinute: function(timeObj, minute) {  
72 - return _addTimeFun(timeObj, minute, "m");  
73 - },  
74 -  
75 - //-------------- 时间业务操作 ------------//  
76 - /**  
77 - * 判定某个班次是否是早高峰班次。  
78 - * @param timeObj 班次时间  
79 - * @param paramObj 参数对象  
80 - * @returns true false  
81 - */  
82 - isMPeakBc: function(timeObj, paramObj) {  
83 - // 早高峰开始时间  
84 - var st = paramObj.getMPeakStartTimeObj();  
85 - // 早高峰结束时间  
86 - var et = paramObj.getMPeakEndTimeObj();  
87 - // 包装日期  
88 - return timeObj.isBetween(st, et, null, "[]");  
89 - },  
90 - /**  
91 - * 判定某个班次是否是晚高峰班次。  
92 - * @param timeObj 班次时间  
93 - * @param paramObj 参数对象  
94 - * @returns true false  
95 - */  
96 - isEPeakBc: function(timeObj, paramObj) {  
97 - // 晚高峰开始时间  
98 - var st = paramObj.getEPeakStartTimeObj();  
99 - // 晚高峰结束时间  
100 - var et = paramObj.getEPeakEndTimeObj();  
101 - // 包装日期  
102 - return timeObj.isBetween(st, et, null, "[]");  
103 - },  
104 - /**  
105 - * 判定某个班次是否是低谷班次。  
106 - * @param timeObj 班次时间  
107 - * @param paramObj 参数对象  
108 - * @returns true false  
109 - */  
110 - isTroughBc: function(timeObj, paramObj) {  
111 - return (  
112 - !this.isMPeakBc(timeObj, paramObj) &&  
113 - !this.isEPeakBc(timeObj, paramObj)  
114 - );  
115 - },  
116 - /**  
117 - * 判定某个低谷班次是否在早高峰开始之前。  
118 - * @param timeObj 班次时间  
119 - * @param paramObj 参数对象  
120 - * @returns true false  
121 - */  
122 - isTroughBeforMPeakStartBc: function(timeObj, paramObj) {  
123 - // 早高峰开始时间  
124 - var st = paramObj.getMPeakStartTimeObj();  
125 - // 包装日期  
126 - return timeObj.isBefore(st);  
127 - },  
128 - /**  
129 - * 判定某个低谷班次是否在晚高峰结束之后。  
130 - * @param timeObj 班次时间  
131 - * @param paramObj 参数对象  
132 - * @returns true false  
133 - */  
134 - isTroughAfterEPeakEndBc: function(timeObj, paramObj) {  
135 - // 晚高峰结束时间  
136 - var et = paramObj.getEPeakEndTimeObj();  
137 - // 包装日期  
138 - return timeObj.isAfter(et);  
139 - },  
140 -  
141 - /**  
142 - * 获取固定的停站时间(固定停站时间都是选的最大值)  
143 - * @param timeObj 时间对象  
144 - * @param isUp 是否上行  
145 - * @param paramObj 参数对象  
146 - * @returns number  
147 - */  
148 - calcuFixedStopNumber: function(timeObj, isUp, paramObj) {  
149 - var peakStopTime; // 高峰停站时间  
150 - var troughStopTime; // 低谷停站时间  
151 - var secondaryStopTime; // 副站停站时间  
152 -  
153 - // 双向停站  
154 - if (paramObj.isTwoWayStop()) {  
155 - if (isUp) { // 上行  
156 - if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰  
157 - peakStopTime = Math.floor(paramObj.getUpMPeakTime() * 0.1); // 行驶时间的10%  
158 - if (peakStopTime < 3) { // 不少于3分钟  
159 - peakStopTime = 3;  
160 - }  
161 - return peakStopTime;  
162 - } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰  
163 - peakStopTime = Math.floor(paramObj.getUpEPeakTime() * 0.1); // 行驶时间的10%  
164 - if (peakStopTime < 3) { // 不少于3分钟  
165 - peakStopTime = 3;  
166 - }  
167 - return peakStopTime;  
168 - } else { // 低谷  
169 - if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前  
170 - troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%  
171 - if (troughStopTime < 10) { // 不少于10分钟  
172 - troughStopTime = 10;  
173 - }  
174 - return troughStopTime;  
175 - } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后  
176 - troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%  
177 - if (troughStopTime < 10) { // 不少于10分钟  
178 - troughStopTime = 10;  
179 - }  
180 - return troughStopTime;  
181 - } else { // 早高峰,晚高峰之间  
182 - troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.15); // 行驶时间15%  
183 - if (troughStopTime < 10) { // 不少于10分钟  
184 - troughStopTime = 10;  
185 - }  
186 - return troughStopTime;  
187 - }  
188 - }  
189 - } else { // 下行  
190 - if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰  
191 - peakStopTime = Math.floor(paramObj.getDownMPeakTime() * 0.1); // 行驶时间的10%  
192 - if (peakStopTime < 3) { // 不少于3分钟  
193 - peakStopTime = 3;  
194 - }  
195 - return peakStopTime;  
196 - } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰  
197 - peakStopTime = Math.floor(paramObj.getDownEPeakTime() * 0.1); // 行驶时间的10%  
198 - if (peakStopTime < 3) { // 不少于3分钟  
199 - peakStopTime = 3;  
200 - }  
201 - return peakStopTime;  
202 - } else { // 低谷  
203 - if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前  
204 - troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%  
205 - if (troughStopTime < 10) { // 不少于10分钟  
206 - troughStopTime = 10;  
207 - }  
208 - return troughStopTime;  
209 - } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后  
210 - troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%  
211 - if (troughStopTime < 10) { // 不少于10分钟  
212 - troughStopTime = 10;  
213 - }  
214 - return troughStopTime;  
215 - } else { // 早高峰,晚高峰之间  
216 - troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.15); // 行驶时间15%  
217 - if (troughStopTime < 10) { // 不少于10分钟  
218 - troughStopTime = 10;  
219 - }  
220 - return troughStopTime;  
221 - }  
222 - }  
223 - }  
224 - } else { // 主站停站  
225 - if (isUp == paramObj.isUpOneWayStop()) {  
226 - if (isUp) { // 上行  
227 - if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰  
228 - peakStopTime = Math.floor(paramObj.getUpMPeakTime() * 0.1); // 行驶时间的10%  
229 - if (peakStopTime < 3) { // 不少于3分钟  
230 - peakStopTime = 3;  
231 - }  
232 - return peakStopTime;  
233 - } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰  
234 - peakStopTime = Math.floor(paramObj.getUpEPeakTime() * 0.1); // 行驶时间的10%  
235 - if (peakStopTime < 3) { // 不少于3分钟  
236 - peakStopTime = 3;  
237 - }  
238 - return peakStopTime;  
239 - } else { // 低谷  
240 - if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前  
241 - troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%  
242 - if (troughStopTime < 10) { // 不少于10分钟  
243 - troughStopTime = 10;  
244 - }  
245 - return troughStopTime;  
246 - } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后  
247 - troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%  
248 - if (troughStopTime < 10) { // 不少于10分钟  
249 - troughStopTime = 10;  
250 - }  
251 - return troughStopTime;  
252 - } else { // 早高峰,晚高峰之间  
253 - troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.15); // 行驶时间15%  
254 - if (troughStopTime < 10) { // 不少于10分钟  
255 - troughStopTime = 10;  
256 - }  
257 - return troughStopTime;  
258 - }  
259 - }  
260 - } else { // 下行  
261 - if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰  
262 - peakStopTime = Math.floor(paramObj.getDownMPeakTime() * 0.1); // 行驶时间的10%  
263 - if (peakStopTime < 3) { // 不少于3分钟  
264 - peakStopTime = 3;  
265 - }  
266 - return peakStopTime;  
267 - } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰  
268 - peakStopTime = Math.floor(paramObj.getDownEPeakTime() * 0.1); // 行驶时间的10%  
269 - if (peakStopTime < 3) { // 不少于3分钟  
270 - peakStopTime = 3;  
271 - }  
272 - return peakStopTime;  
273 - } else { // 低谷  
274 - if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前  
275 - troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%  
276 - if (troughStopTime < 10) { // 不少于10分钟  
277 - troughStopTime = 10;  
278 - }  
279 - return troughStopTime;  
280 - } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后  
281 - troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%  
282 - if (troughStopTime < 10) { // 不少于10分钟  
283 - troughStopTime = 10;  
284 - }  
285 - return troughStopTime;  
286 - } else { // 早高峰,晚高峰之间  
287 - troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.15); // 行驶时间15%  
288 - if (troughStopTime < 10) { // 不少于10分钟  
289 - troughStopTime = 10;  
290 - }  
291 - return troughStopTime;  
292 - }  
293 - }  
294 - }  
295 - } else { // 副站停战,2到3分钟  
296 - secondaryStopTime = 3;  
297 - return secondaryStopTime; // 直接返回3分钟  
298 - }  
299 - }  
300 -  
301 - },  
302 -  
303 - /**  
304 - * 获取行驶时间。  
305 - * @param timeObj 班次时间字符串  
306 - * @param isUp 是否上行  
307 - * @param paramObj 参数对象  
308 - */  
309 - calcuTravelTime: function(timeObj, isUp, paramObj) {  
310 - if (isUp) {  
311 - if (this.isMPeakBc(timeObj, paramObj)) {  
312 - return paramObj.getUpMPeakTime();  
313 - } else if (this.isEPeakBc(timeObj, paramObj)) {  
314 - return paramObj.getUpEPeakTime();  
315 - } else {  
316 - return paramObj.getUpTroughTime();  
317 - }  
318 - } else {  
319 - if (this.isMPeakBc(timeObj, paramObj)) {  
320 - return paramObj.getDownMPeakTime();  
321 - } else if (this.isEPeakBc(timeObj, paramObj)) {  
322 - return paramObj.getDownEPeakTime();  
323 - } else {  
324 - return paramObj.getDownTroughTime();  
325 - }  
326 - }  
327 - },  
328 -  
329 - /**  
330 - * 获取行驶里程。  
331 - * @param isUp 是否上行  
332 - * @param bcType 班次类型  
333 - * @param paramObj 参数对象  
334 - */  
335 - calcuTravelLcNumber: function(isUp, bcType, paramObj) {  
336 - if (isUp) {  
337 - if (bcType == "in") {  
338 - return paramObj.getUpInLc();  
339 - } else if (bcType == "out") {  
340 - return paramObj.getUpOutLc();  
341 - } else {  
342 - // 基本班次类型,暂时不考虑区间等其他班次类型  
343 - // 暂时不考虑高峰低谷里程的区分  
344 - return paramObj.getUpNormalLc();  
345 - }  
346 - } else {  
347 - if (bcType == "in") {  
348 - return paramObj.getDownInLc();  
349 - } else if (bcType == "out") {  
350 - return paramObj.getDownOutLc();  
351 - } else {  
352 - // 基本班次类型,暂时不考虑区间等其他班次类型  
353 - // 暂时不考虑高峰低谷里程的区分  
354 - return paramObj.getDownNormalLc();  
355 - }  
356 - }  
357 - },  
358 -  
359 - /**  
360 - * 计算高峰周转时间。  
361 - * @param paramObj 参数对象  
362 - * @returns 周转时间  
363 - */  
364 - calcuPeakZzsj: function(paramObj) {  
365 - // 使用早高峰的周转时间  
366 - var _time = paramObj.getMPeakStartTimeObj();  
367 - var _zzsj = // 早高峰上行行驶时间+停站时间+早高峰下行行驶时间+停站时间  
368 - this.calcuTravelTime(_time, true, paramObj) +  
369 - this.calcuFixedStopNumber(_time, true, paramObj) +  
370 - this.calcuTravelTime(_time, false, paramObj) +  
371 - this.calcuFixedStopNumber(_time, false, paramObj);  
372 - return _zzsj;  
373 - },  
374 -  
375 - /**  
376 - * 计算低谷周转时间。  
377 - * @param paramObj 参数对象  
378 - * @returns 周转时间  
379 - */  
380 - calcuTroughZzsj: function(paramObj) {  
381 - // 使用低谷的周转时间  
382 - var _time = this.addMinute(paramObj.getMPeakStartTimeObj(), -1); // 使用任意一个低谷时间  
383 - var _zzsj = // 低谷上行行驶时间+停站时间+低谷下行行驶时间+停站时间  
384 - this.calcuTravelTime(_time, true, paramObj) +  
385 - this.calcuFixedStopNumber(_time, true, paramObj) +  
386 - this.calcuTravelTime(_time, false, paramObj) +  
387 - this.calcuFixedStopNumber(_time, false, paramObj);  
388 -  
389 - return _zzsj;  
390 - },  
391 -  
392 - /**  
393 - * 计算车辆总数。  
394 - * @param paramObj 参数对象  
395 - * @returns 车辆数  
396 - */  
397 - calcuClzx: function(paramObj) {  
398 - // 使用早高峰平均间隔  
399 - var _fcjx_avg = Math.floor((paramObj.getMPeakMinFcjx() + paramObj.getMPeakMaxFcjx()) / 2);  
400 - return Math.round(this.calcuPeakZzsj(paramObj) / _fcjx_avg);  
401 - }  
402 -  
403 - }; 1 +/**
  2 + * 工具类。
  3 + * 注意:moment是mutable,所有的moment操作都会改变原有对象的值,
  4 + * 所以所有的操作都要小心处理。
  5 + */
  6 +var StrategyUtils = function() {
  7 + var date_wrap_prefix = "2000-01-01 "; // 包装日期的前缀
  8 + var date_wrap_format = "YYYY-MM-DD HH:mm"; // 日期格式
  9 + /**
  10 + * 将时间包装成日期,方便计算。
  11 + * @param timeStr 时间格式,如 06:30
  12 + * @returns moment对象
  13 + */
  14 + var _wrapTimeFun = function(timeStr) {
  15 + return moment(
  16 + date_wrap_prefix + timeStr,
  17 + date_wrap_format
  18 + );
  19 + };
  20 + /**
  21 + * 添加时间(注意,返回一个新的moment对象,此方法是immutable)
  22 + * @param timeObj moment 对象
  23 + * @param time 时间
  24 + * @param type 时间单位
  25 + * @returns 重新创建一个moment返回
  26 + */
  27 + var _addTimeFun = function(timeObj, time, type) {
  28 + var _timeObj = moment(timeObj); // clone
  29 + _timeObj.add(time, type);
  30 + return _timeObj;
  31 + };
  32 +
  33 + // 内部工厂类
  34 + var _factoryFun = function() {
  35 + return {
  36 + // 创建参数
  37 + createParameterObj: function(formMap, dataMap) {
  38 + return ParameterObj(formMap, dataMap);
  39 + },
  40 + // 创建班次对象
  41 + createBcObj: function(bcType, isUp, lp, fcno, fcTimeObj, paramObj) {
  42 + return BcObj(bcType, isUp, lp, fcno, fcTimeObj, paramObj);
  43 + }
  44 + };
  45 + };
  46 +
  47 + return {
  48 + /**
  49 + * 工厂对象,创建不同的对象。
  50 + * @returns {{createParameterObj, createBcObj}}
  51 + */
  52 + getFactory: function() {
  53 + return _factoryFun();
  54 + },
  55 +
  56 + //-------------- 时间操作 ------------//
  57 + /**
  58 + * 通过字符串创建时间对象。
  59 + * @param timeStr 时间字符串
  60 + * @returns {moment对象}
  61 + */
  62 + toTimeObj: function(timeStr) {
  63 + return _wrapTimeFun(timeStr);
  64 + },
  65 + /**
  66 + * 增加分钟。
  67 + * @param timeObj 时间对象
  68 + * @param minute 分钟
  69 + * @returns {重新创建一个moment返回}
  70 + */
  71 + addMinute: function(timeObj, minute) {
  72 + return _addTimeFun(timeObj, minute, "m");
  73 + },
  74 +
  75 + //-------------- 时间业务操作 ------------//
  76 + /**
  77 + * 判定某个班次是否是早高峰班次。
  78 + * @param timeObj 班次时间
  79 + * @param paramObj 参数对象
  80 + * @returns true false
  81 + */
  82 + isMPeakBc: function(timeObj, paramObj) {
  83 + // 早高峰开始时间
  84 + var st = paramObj.getMPeakStartTimeObj();
  85 + // 早高峰结束时间
  86 + var et = paramObj.getMPeakEndTimeObj();
  87 + // 包装日期
  88 + return timeObj.isBetween(st, et, null, "[]");
  89 + },
  90 + /**
  91 + * 判定某个班次是否是晚高峰班次。
  92 + * @param timeObj 班次时间
  93 + * @param paramObj 参数对象
  94 + * @returns true false
  95 + */
  96 + isEPeakBc: function(timeObj, paramObj) {
  97 + // 晚高峰开始时间
  98 + var st = paramObj.getEPeakStartTimeObj();
  99 + // 晚高峰结束时间
  100 + var et = paramObj.getEPeakEndTimeObj();
  101 + // 包装日期
  102 + return timeObj.isBetween(st, et, null, "[]");
  103 + },
  104 + /**
  105 + * 判定某个班次是否是低谷班次。
  106 + * @param timeObj 班次时间
  107 + * @param paramObj 参数对象
  108 + * @returns true false
  109 + */
  110 + isTroughBc: function(timeObj, paramObj) {
  111 + return (
  112 + !this.isMPeakBc(timeObj, paramObj) &&
  113 + !this.isEPeakBc(timeObj, paramObj)
  114 + );
  115 + },
  116 + /**
  117 + * 判定某个低谷班次是否在早高峰开始之前。
  118 + * @param timeObj 班次时间
  119 + * @param paramObj 参数对象
  120 + * @returns true false
  121 + */
  122 + isTroughBeforMPeakStartBc: function(timeObj, paramObj) {
  123 + // 早高峰开始时间
  124 + var st = paramObj.getMPeakStartTimeObj();
  125 + // 包装日期
  126 + return timeObj.isBefore(st);
  127 + },
  128 + /**
  129 + * 判定某个低谷班次是否在晚高峰结束之后。
  130 + * @param timeObj 班次时间
  131 + * @param paramObj 参数对象
  132 + * @returns true false
  133 + */
  134 + isTroughAfterEPeakEndBc: function(timeObj, paramObj) {
  135 + // 晚高峰结束时间
  136 + var et = paramObj.getEPeakEndTimeObj();
  137 + // 包装日期
  138 + return timeObj.isAfter(et);
  139 + },
  140 +
  141 + /**
  142 + * 获取固定的停站时间(固定停站时间都是选的最大值)
  143 + * @param timeObj 时间对象
  144 + * @param isUp 是否上行
  145 + * @param paramObj 参数对象
  146 + * @returns number
  147 + */
  148 + calcuFixedStopNumber: function(timeObj, isUp, paramObj) {
  149 + var peakStopTime; // 高峰停站时间
  150 + var troughStopTime; // 低谷停站时间
  151 + var secondaryStopTime; // 副站停站时间
  152 +
  153 + // 双向停站
  154 + if (paramObj.isTwoWayStop()) {
  155 + if (isUp) { // 上行
  156 + if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰
  157 + peakStopTime = Math.floor(paramObj.getUpMPeakTime() * 0.1); // 行驶时间的10%
  158 + if (peakStopTime < 3) { // 不少于3分钟
  159 + peakStopTime = 3;
  160 + }
  161 + return peakStopTime;
  162 + } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰
  163 + peakStopTime = Math.floor(paramObj.getUpEPeakTime() * 0.1); // 行驶时间的10%
  164 + if (peakStopTime < 3) { // 不少于3分钟
  165 + peakStopTime = 3;
  166 + }
  167 + return peakStopTime;
  168 + } else { // 低谷
  169 + if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前
  170 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%
  171 + if (troughStopTime < 10) { // 不少于10分钟
  172 + troughStopTime = 10;
  173 + }
  174 + return troughStopTime;
  175 + } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后
  176 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%
  177 + if (troughStopTime < 10) { // 不少于10分钟
  178 + troughStopTime = 10;
  179 + }
  180 + return troughStopTime;
  181 + } else { // 早高峰,晚高峰之间
  182 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.15); // 行驶时间15%
  183 + if (troughStopTime < 10) { // 不少于10分钟
  184 + troughStopTime = 10;
  185 + }
  186 + return troughStopTime;
  187 + }
  188 + }
  189 + } else { // 下行
  190 + if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰
  191 + peakStopTime = Math.floor(paramObj.getDownMPeakTime() * 0.1); // 行驶时间的10%
  192 + if (peakStopTime < 3) { // 不少于3分钟
  193 + peakStopTime = 3;
  194 + }
  195 + return peakStopTime;
  196 + } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰
  197 + peakStopTime = Math.floor(paramObj.getDownEPeakTime() * 0.1); // 行驶时间的10%
  198 + if (peakStopTime < 3) { // 不少于3分钟
  199 + peakStopTime = 3;
  200 + }
  201 + return peakStopTime;
  202 + } else { // 低谷
  203 + if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前
  204 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%
  205 + if (troughStopTime < 10) { // 不少于10分钟
  206 + troughStopTime = 10;
  207 + }
  208 + return troughStopTime;
  209 + } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后
  210 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%
  211 + if (troughStopTime < 10) { // 不少于10分钟
  212 + troughStopTime = 10;
  213 + }
  214 + return troughStopTime;
  215 + } else { // 早高峰,晚高峰之间
  216 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.15); // 行驶时间15%
  217 + if (troughStopTime < 10) { // 不少于10分钟
  218 + troughStopTime = 10;
  219 + }
  220 + return troughStopTime;
  221 + }
  222 + }
  223 + }
  224 + } else { // 主站停站
  225 + if (isUp == paramObj.isUpOneWayStop()) {
  226 + if (isUp) { // 上行
  227 + if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰
  228 + peakStopTime = Math.floor(paramObj.getUpMPeakTime() * 0.1); // 行驶时间的10%
  229 + if (peakStopTime < 3) { // 不少于3分钟
  230 + peakStopTime = 3;
  231 + }
  232 + return peakStopTime;
  233 + } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰
  234 + peakStopTime = Math.floor(paramObj.getUpEPeakTime() * 0.1); // 行驶时间的10%
  235 + if (peakStopTime < 3) { // 不少于3分钟
  236 + peakStopTime = 3;
  237 + }
  238 + return peakStopTime;
  239 + } else { // 低谷
  240 + if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前
  241 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%
  242 + if (troughStopTime < 10) { // 不少于10分钟
  243 + troughStopTime = 10;
  244 + }
  245 + return troughStopTime;
  246 + } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后
  247 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%
  248 + if (troughStopTime < 10) { // 不少于10分钟
  249 + troughStopTime = 10;
  250 + }
  251 + return troughStopTime;
  252 + } else { // 早高峰,晚高峰之间
  253 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.15); // 行驶时间15%
  254 + if (troughStopTime < 10) { // 不少于10分钟
  255 + troughStopTime = 10;
  256 + }
  257 + return troughStopTime;
  258 + }
  259 + }
  260 + } else { // 下行
  261 + if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰
  262 + peakStopTime = Math.floor(paramObj.getDownMPeakTime() * 0.1); // 行驶时间的10%
  263 + if (peakStopTime < 3) { // 不少于3分钟
  264 + peakStopTime = 3;
  265 + }
  266 + return peakStopTime;
  267 + } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰
  268 + peakStopTime = Math.floor(paramObj.getDownEPeakTime() * 0.1); // 行驶时间的10%
  269 + if (peakStopTime < 3) { // 不少于3分钟
  270 + peakStopTime = 3;
  271 + }
  272 + return peakStopTime;
  273 + } else { // 低谷
  274 + if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前
  275 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%
  276 + if (troughStopTime < 10) { // 不少于10分钟
  277 + troughStopTime = 10;
  278 + }
  279 + return troughStopTime;
  280 + } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后
  281 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%
  282 + if (troughStopTime < 10) { // 不少于10分钟
  283 + troughStopTime = 10;
  284 + }
  285 + return troughStopTime;
  286 + } else { // 早高峰,晚高峰之间
  287 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.15); // 行驶时间15%
  288 + if (troughStopTime < 10) { // 不少于10分钟
  289 + troughStopTime = 10;
  290 + }
  291 + return troughStopTime;
  292 + }
  293 + }
  294 + }
  295 + } else { // 副站停战,2到3分钟
  296 + secondaryStopTime = 3;
  297 + return secondaryStopTime; // 直接返回3分钟
  298 + }
  299 + }
  300 +
  301 + },
  302 +
  303 + /**
  304 + * 获取行驶时间。
  305 + * @param timeObj 班次时间字符串
  306 + * @param isUp 是否上行
  307 + * @param paramObj 参数对象
  308 + */
  309 + calcuTravelTime: function(timeObj, isUp, paramObj) {
  310 + if (isUp) {
  311 + if (this.isMPeakBc(timeObj, paramObj)) {
  312 + return paramObj.getUpMPeakTime();
  313 + } else if (this.isEPeakBc(timeObj, paramObj)) {
  314 + return paramObj.getUpEPeakTime();
  315 + } else {
  316 + return paramObj.getUpTroughTime();
  317 + }
  318 + } else {
  319 + if (this.isMPeakBc(timeObj, paramObj)) {
  320 + return paramObj.getDownMPeakTime();
  321 + } else if (this.isEPeakBc(timeObj, paramObj)) {
  322 + return paramObj.getDownEPeakTime();
  323 + } else {
  324 + return paramObj.getDownTroughTime();
  325 + }
  326 + }
  327 + },
  328 +
  329 + /**
  330 + * 获取行驶里程。
  331 + * @param isUp 是否上行
  332 + * @param bcType 班次类型
  333 + * @param paramObj 参数对象
  334 + */
  335 + calcuTravelLcNumber: function(isUp, bcType, paramObj) {
  336 + if (isUp) {
  337 + if (bcType == "in") {
  338 + return paramObj.getUpInLc();
  339 + } else if (bcType == "out") {
  340 + return paramObj.getUpOutLc();
  341 + } else {
  342 + // 基本班次类型,暂时不考虑区间等其他班次类型
  343 + // 暂时不考虑高峰低谷里程的区分
  344 + return paramObj.getUpNormalLc();
  345 + }
  346 + } else {
  347 + if (bcType == "in") {
  348 + return paramObj.getDownInLc();
  349 + } else if (bcType == "out") {
  350 + return paramObj.getDownOutLc();
  351 + } else {
  352 + // 基本班次类型,暂时不考虑区间等其他班次类型
  353 + // 暂时不考虑高峰低谷里程的区分
  354 + return paramObj.getDownNormalLc();
  355 + }
  356 + }
  357 + },
  358 +
  359 + /**
  360 + * 计算高峰周转时间。
  361 + * @param paramObj 参数对象
  362 + * @returns 周转时间
  363 + */
  364 + calcuPeakZzsj: function(paramObj) {
  365 + // 使用早高峰的周转时间
  366 + var _time = paramObj.getMPeakStartTimeObj();
  367 + var _zzsj = // 早高峰上行行驶时间+停站时间+早高峰下行行驶时间+停站时间
  368 + this.calcuTravelTime(_time, true, paramObj) +
  369 + this.calcuFixedStopNumber(_time, true, paramObj) +
  370 + this.calcuTravelTime(_time, false, paramObj) +
  371 + this.calcuFixedStopNumber(_time, false, paramObj);
  372 + return _zzsj;
  373 + },
  374 +
  375 + /**
  376 + * 计算低谷周转时间。
  377 + * @param paramObj 参数对象
  378 + * @returns 周转时间
  379 + */
  380 + calcuTroughZzsj: function(paramObj) {
  381 + // 使用低谷的周转时间
  382 + var _time = this.addMinute(paramObj.getMPeakStartTimeObj(), -1); // 使用任意一个低谷时间
  383 + var _zzsj = // 低谷上行行驶时间+停站时间+低谷下行行驶时间+停站时间
  384 + this.calcuTravelTime(_time, true, paramObj) +
  385 + this.calcuFixedStopNumber(_time, true, paramObj) +
  386 + this.calcuTravelTime(_time, false, paramObj) +
  387 + this.calcuFixedStopNumber(_time, false, paramObj);
  388 +
  389 + return _zzsj;
  390 + },
  391 +
  392 + /**
  393 + * 计算车辆总数。
  394 + * @param paramObj 参数对象
  395 + * @returns 车辆数
  396 + */
  397 + calcuClzx: function(paramObj) {
  398 + // 使用早高峰平均间隔
  399 + var _fcjx_avg = Math.floor((paramObj.getMPeakMinFcjx() + paramObj.getMPeakMaxFcjx()) / 2);
  400 + return Math.round(this.calcuPeakZzsj(paramObj) / _fcjx_avg);
  401 + }
  402 +
  403 + };
404 }(); 404 }();
405 \ No newline at end of file 405 \ No newline at end of file