Commit a4f546423224b7bd4307f7787259217a2a0dcd99

Authored by 徐烜
2 parents a7932481 d23fa3b0

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

Showing 25 changed files with 1970 additions and 1739 deletions

Too many changes to show.

To preserve performance only 25 of 57 files are displayed.

src/main/java/com/bsth/controller/CarParkController.java
... ... @@ -15,7 +15,6 @@ import org.springframework.web.bind.annotation.*;
15 15 @RestController
16 16 @RequestMapping("carpark")
17 17 public class CarParkController extends BaseController<CarPark, Integer> {
18   -
19 18 @Autowired
20 19 CarParkService service;
21 20  
... ... @@ -26,16 +25,10 @@ public class CarParkController extends BaseController&lt;CarPark, Integer&gt; {
26 25 */
27 26 @RequestMapping(value="getCarParkCode" , method = RequestMethod.GET)
28 27 public Map<String, Object> getStationCode() {
29   -
30 28 Map<String, Object> resultMap = new HashMap<String, Object>();
31   -
32   - resultMap.put("carParkCode", "FFFF" + GetUIDAndCode.getCarParkId());
33   -
  29 + resultMap.put("carParkCode", "FFFFFF" + GetUIDAndCode.getCarParkId());
34 30 return resultMap;
35   -
36 31 }
37   -
38   -
39 32 /**
40 33 * 新增停车场信息
41 34 *
... ... @@ -53,21 +46,14 @@ public class CarParkController extends BaseController&lt;CarPark, Integer&gt; {
53 46 */
54 47 @RequestMapping(value="carParkSave" , method = RequestMethod.POST)
55 48 public Map<String, Object> stationSave(@RequestParam Map<String, Object> map) {
56   -
57 49 map.put("createBy", "");
58   -
59 50 map.put("updateBy", "");
60   -
61 51 return service.carParkSave(map);
62   -
63 52 }
64   -
65 53 @RequestMapping(value = "findCarParkInfoFormId",method = RequestMethod.GET)
66 54 public List<Map<String, Object>> findCarParkInfoFormId(@RequestParam Map<String, Object> map) {
67   -
68 55 return service.findCarParkInfoFormId(map);
69 56 }
70   -
71 57 /**
72 58 * 修改停车场信息
73 59 *
... ... @@ -85,11 +71,12 @@ public class CarParkController extends BaseController&lt;CarPark, Integer&gt; {
85 71 */
86 72 @RequestMapping(value="carParkUpdate" , method = RequestMethod.POST)
87 73 public Map<String, Object> carParkUpdate(@RequestParam Map<String, Object> map) {
88   -
89 74 map.put("updateBy", "");
90   -
91 75 return service.carParkUpdate(map);
92   -
93 76 }
94 77  
  78 + @RequestMapping(value="isHaveParkCode",method=RequestMethod.GET)
  79 + public boolean isHaveParkCode(@RequestParam Map<String,Object> map) {
  80 + return service.selectTccInfoByCode(map);
  81 + }
95 82 }
... ...
src/main/java/com/bsth/controller/realcontrol/anomalyCheckController.java
1 1 package com.bsth.controller.realcontrol;
2 2  
  3 +import com.bsth.data.gpsdata.client.ClientApp;
3 4 import com.bsth.data.schedule.DayOfSchedule;
4 5 import com.bsth.entity.realcontrol.ScheduleRealInfo;
5 6 import org.slf4j.Logger;
... ... @@ -15,7 +16,6 @@ import java.util.List;
15 16 import java.util.Map;
16 17  
17 18 /**
18   - * 相关数据异常检测
19 19 * Created by panzhao on 2017/4/14.
20 20 */
21 21 @RestController
... ... @@ -50,4 +50,10 @@ public class anomalyCheckController {
50 50 dayOfSchedule.replaceByNbbm(nbbm, map.values());
51 51 }
52 52 }
  53 +
  54 + @RequestMapping(value = "/gpsClientReconn", method = RequestMethod.POST)
  55 + public void gpsClientReconn(){
  56 + ClientApp.pdreconn();
  57 + ClientApp.pfreconn();
  58 + }
53 59 }
... ...
src/main/java/com/bsth/controller/report/ReportController.java
... ... @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
12 12 import org.springframework.web.bind.annotation.RequestParam;
13 13 import org.springframework.web.bind.annotation.RestController;
14 14  
  15 +import com.bsth.entity.StationRoute;
15 16 import com.bsth.entity.excep.ArrivalInfo;
16 17 import com.bsth.entity.realcontrol.ScheduleRealInfo;
17 18 import com.bsth.service.report.ReportService;
... ... @@ -75,6 +76,17 @@ public class ReportController {
75 76 }
76 77  
77 78  
  79 + @RequestMapping(value="/queryStrinon" ,method = RequestMethod.GET)
  80 + public List<StationRoute> queryStrinon(@RequestParam String line,
  81 + @RequestParam int zd){
  82 + return service.queryStrinon(line,zd);
  83 + }
  84 + @RequestMapping(value="/queryInOutStrtion" ,method = RequestMethod.GET)
  85 + public List<Map<String, Object>> queryInOutStrtion(@RequestParam String line,
  86 + @RequestParam String date,@RequestParam int zd,@RequestParam String lzsj){
  87 + return service.queryInOutStrtion(line,date,zd,lzsj);
  88 + }
  89 +
78 90 @RequestMapping(value="/queryListClzd" ,method = RequestMethod.GET)
79 91 public List<ArrivalInfo> queryListClzd(@RequestParam String zd,@RequestParam String line,
80 92 @RequestParam String zdlx,@RequestParam String fcsj,@RequestParam String ddsj){
... ... @@ -84,6 +96,8 @@ public class ReportController {
84 96  
85 97  
86 98  
  99 +
  100 +
87 101 @RequestMapping(value="/exportQueryListClzd" ,method = RequestMethod.GET)
88 102 public List<Map<String, Object>> exportQueryListClzd(@RequestParam String zd,@RequestParam String line,
89 103 @RequestParam String zdlx,@RequestParam String fcsj,@RequestParam String ddsj){
... ...
src/main/java/com/bsth/data/car_out_info/CarOutInfo.java
1   -package com.bsth.data.car_out_info;
2   -
3   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
4   -
5   -import java.util.List;
6   -
7   -/**
8   - * Created by panzhao on 2017/5/7.
9   - */
10   -public interface CarOutInfo {
11   -
12   - void updateAll();
13   -
14   - void update(String lineCode);
15   -
16   - void update(List<ScheduleRealInfo> list) ;
17   -}
  1 +package com.bsth.data.car_out_info;
  2 +
  3 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  4 +
  5 +import java.util.List;
  6 +
  7 +/**
  8 + * Created by panzhao on 2017/5/7.
  9 + */
  10 +public interface CarOutInfo {
  11 +
  12 + void updateAll();
  13 +
  14 + void update(String lineCode);
  15 +
  16 + void update(List<ScheduleRealInfo> list) ;
  17 +}
... ...
src/main/java/com/bsth/data/car_out_info/CarOutInfoHandler.java
1   -package com.bsth.data.car_out_info;
2   -
3   -import com.bsth.data.BasicData;
4   -import com.bsth.data.schedule.DayOfSchedule;
5   -import com.bsth.data.schedule.ScheduleComparator;
6   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
7   -import com.google.common.collect.ArrayListMultimap;
8   -import org.apache.commons.lang3.StringUtils;
9   -import org.slf4j.Logger;
10   -import org.slf4j.LoggerFactory;
11   -import org.springframework.beans.factory.annotation.Autowired;
12   -import org.springframework.boot.CommandLineRunner;
13   -import org.springframework.jdbc.core.BatchPreparedStatementSetter;
14   -import org.springframework.jdbc.core.JdbcTemplate;
15   -import org.springframework.stereotype.Component;
16   -import org.springframework.stereotype.Service;
17   -import org.springframework.transaction.annotation.Transactional;
18   -
19   -import java.sql.PreparedStatement;
20   -import java.sql.SQLException;
21   -import java.util.*;
22   -
23   -/**
24   - * 发车信息表处理程序
25   - * Created by panzhao on 2017/5/5.
26   - */
27   -@Service
28   -public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo {
29   -
30   - @Autowired
31   - DayOfSchedule dayOfSchedule;
32   -
33   - //班次类型对照表
34   - Map<String, String> bcTypeMap;
35   -
36   - private static ScheduleComparator.FCSJ schFCSJComparator = new ScheduleComparator.FCSJ();
37   -
38   - @Autowired
39   - JdbcTemplate jdbcTemplate;
40   -
41   - Logger logger = LoggerFactory.getLogger(this.getClass());
42   -
43   - /**
44   - * 全量更新发车信息表
45   - */
46   - @Override
47   - public void updateAll() {
48   - Set<String> ks = BasicData.lineCode2NameMap.keySet();
49   - for (String lineCode : ks) {
50   - update(lineCode);
51   - }
52   - }
53   -
54   - @Override
55   - public void update(String lineCode) {
56   - try {
57   - ArrayListMultimap<String, ScheduleRealInfo> lpScheduleMap = dayOfSchedule.getLpScheduleMap();
58   - List<ScheduleRealInfo> list = new ArrayList<>();
59   -
60   - Set<String> ks = lpScheduleMap.keySet();
61   - String prefix = lineCode + "_";
62   - for (String k : ks) {
63   - if (k.indexOf(prefix) != -1) {
64   - list.addAll(lpScheduleMap.get(k));
65   - }
66   - }
67   -
68   - update(list);
69   - } catch (Exception e) {
70   - logger.error("", e);
71   - }
72   - }
73   -
74   - @Transactional
75   - @Override
76   - public void update(List<ScheduleRealInfo> list) {
77   - if (list.size() == 0)
78   - return;
79   - String lineCode = list.get(0).getXlBm();
80   - //按上下行分组
81   - List<ScheduleRealInfo> ups = new ArrayList<>(), downs = new ArrayList<>();
82   - for (ScheduleRealInfo sch : list) {
83   - if (sch.getXlDir().equals("0"))
84   - ups.add(sch);
85   - else
86   - downs.add(sch);
87   - }
88   -
89   - ScheduleRealInfo[] upArray = nexts(ups),
90   - downArray = nexts(downs);
91   -
92   - final List<ScheduleRealInfo> pstArray = mergeArray(upArray, downArray);
93   - //删除
94   - jdbcTemplate.update("delete from bsth_t_clfcxxb where line_code=?", lineCode);
95   - //重新写入
96   - jdbcTemplate.batchUpdate("insert into bsth_t_clfcxxb(rq, line_code, line_name, lp_name, lp_sn, dfsj, nbbm, cph, bc_type, end_station_name, updown, jGh, jName, remarks, sn)" +
97   - " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new BatchPreparedStatementSetter() {
98   - @Override
99   - public void setValues(PreparedStatement ps, int i) throws SQLException {
100   - ScheduleRealInfo sch = pstArray.get(i);
101   - ps.setString(1, sch.getScheduleDateStr());
102   - ps.setString(2, sch.getXlBm());
103   - ps.setString(3, sch.getXlName());
104   - ps.setString(4, sch.getLpName());
105   - ps.setInt(5, sch.getFcno());
106   - ps.setString(6, sch.getDfsj());
107   - ps.setString(7, sch.getClZbh());
108   - ps.setString(8, BasicData.nbbmCompanyPlateMap.get(sch.getClZbh()));
109   - ps.setString(9, bcTypeMap.containsKey(sch.getBcType()) ? bcTypeMap.get(sch.getBcType()) : sch.getBcType());
110   - ps.setString(10, sch.getZdzName());
111   - ps.setInt(11, Integer.parseInt(sch.getXlDir()));
112   - ps.setString(12, sch.getjGh());
113   - ps.setString(13, sch.getjName());
114   - ps.setString(14, sch.getRemarks());
115   - ps.setInt(15, sch.getFcpSn());
116   - }
117   -
118   - @Override
119   - public int getBatchSize() {
120   - return pstArray.size();
121   - }
122   - });
123   - }
124   -
125   - private List<ScheduleRealInfo> mergeArray(ScheduleRealInfo[] upArray, ScheduleRealInfo[] downArray) {
126   - List<ScheduleRealInfo> list = new ArrayList<>();
127   - for (int i = 0; i < upArray.length; i++) {
128   - if (upArray[i] != null) {
129   - upArray[i].setFcpSn(i + 1);
130   - list.add(upArray[i]);
131   - }
132   - }
133   - for (int i = 0; i < downArray.length; i++) {
134   - if (downArray[i] != null) {
135   - downArray[i].setFcpSn(i + 1);
136   - list.add(downArray[i]);
137   - }
138   - }
139   - return list;
140   - }
141   -
142   - /**
143   - * 接下来要执行的3个班次
144   - *
145   - * @param list
146   - * @return
147   - */
148   - private ScheduleRealInfo[] nexts(List<ScheduleRealInfo> list) {
149   - ScheduleRealInfo[] array = new ScheduleRealInfo[3];
150   - Collections.sort(list, schFCSJComparator);
151   -
152   - int count = 0, threshold = 1000 * 60 * 30;
153   - long t = System.currentTimeMillis();
154   - for (ScheduleRealInfo sch : list) {
155   - if (count == 3)
156   - break;
157   -
158   - //烂班
159   - if (sch.isDestroy())
160   - continue;
161   -
162   - //进场、出场、2点间空驶
163   - if (sch.getBcType().equals("in")
164   - || sch.getBcType().equals("out")
165   - || sch.getBcType().equals("ldks"))
166   - continue;
167   -
168   - //有实发实达时间的
169   - if (StringUtils.isNotEmpty(sch.getFcsjActual())
170   - || StringUtils.isNotEmpty(sch.getZdsjActual()))
171   - continue;
172   -
173   - if (t - sch.getDfsjT() > threshold)
174   - continue;
175   -
176   - array[count] = sch;
177   - count++;
178   - }
179   - return array;
180   - }
181   -
182   - @Autowired
183   - UpdateInfoThread updateInfoThread;
184   -
185   - @Override
186   - public void run(String... strings) throws Exception {
187   - bcTypeMap = new HashMap<>();
188   - bcTypeMap.put("normal", "正常班次");
189   - bcTypeMap.put("region", "区间");
190   - bcTypeMap.put("venting", "直放");
191   - bcTypeMap.put("major", "放站");
192   - bcTypeMap.put("ldks", "两点间空驶");
193   - //Application.mainServices.scheduleWithFixedDelay(updateInfoThread, 60, 40, TimeUnit.SECONDS);
194   - }
195   -
196   - @Component
197   - private static class UpdateInfoThread extends Thread {
198   -
199   - @Autowired
200   - CarOutInfo carOutInfoHandler;
201   -
202   - @Override
203   - public void run() {
204   - carOutInfoHandler.updateAll();
205   - }
206   - }
207   -}
  1 +package com.bsth.data.car_out_info;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +import com.bsth.data.schedule.DayOfSchedule;
  5 +import com.bsth.data.schedule.ScheduleComparator;
  6 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  7 +import com.google.common.collect.ArrayListMultimap;
  8 +import org.apache.commons.lang3.StringUtils;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.boot.CommandLineRunner;
  13 +import org.springframework.jdbc.core.BatchPreparedStatementSetter;
  14 +import org.springframework.jdbc.core.JdbcTemplate;
  15 +import org.springframework.stereotype.Component;
  16 +import org.springframework.stereotype.Service;
  17 +import org.springframework.transaction.annotation.Transactional;
  18 +
  19 +import java.sql.PreparedStatement;
  20 +import java.sql.SQLException;
  21 +import java.util.*;
  22 +
  23 +/**
  24 + * 发车信息表处理程序
  25 + * Created by panzhao on 2017/5/5.
  26 + */
  27 +@Service
  28 +public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo {
  29 +
  30 + @Autowired
  31 + DayOfSchedule dayOfSchedule;
  32 +
  33 + //班次类型对照表
  34 + Map<String, String> bcTypeMap;
  35 +
  36 + private static ScheduleComparator.FCSJ schFCSJComparator = new ScheduleComparator.FCSJ();
  37 +
  38 + @Autowired
  39 + JdbcTemplate jdbcTemplate;
  40 +
  41 + Logger logger = LoggerFactory.getLogger(this.getClass());
  42 +
  43 + /**
  44 + * 全量更新发车信息表
  45 + */
  46 + @Override
  47 + public void updateAll() {
  48 + Set<String> ks = BasicData.lineCode2NameMap.keySet();
  49 + for (String lineCode : ks) {
  50 + update(lineCode);
  51 + }
  52 + }
  53 +
  54 + @Override
  55 + public void update(String lineCode) {
  56 + try {
  57 + ArrayListMultimap<String, ScheduleRealInfo> lpScheduleMap = dayOfSchedule.getLpScheduleMap();
  58 + List<ScheduleRealInfo> list = new ArrayList<>();
  59 +
  60 + Set<String> ks = lpScheduleMap.keySet();
  61 + String prefix = lineCode + "_";
  62 + for (String k : ks) {
  63 + if (k.indexOf(prefix) != -1) {
  64 + list.addAll(lpScheduleMap.get(k));
  65 + }
  66 + }
  67 +
  68 + update(list);
  69 + } catch (Exception e) {
  70 + logger.error("", e);
  71 + }
  72 + }
  73 +
  74 + @Transactional
  75 + @Override
  76 + public void update(List<ScheduleRealInfo> list) {
  77 + if (list.size() == 0)
  78 + return;
  79 + String lineCode = list.get(0).getXlBm();
  80 + //按上下行分组
  81 + List<ScheduleRealInfo> ups = new ArrayList<>(), downs = new ArrayList<>();
  82 + for (ScheduleRealInfo sch : list) {
  83 + if (sch.getXlDir().equals("0"))
  84 + ups.add(sch);
  85 + else
  86 + downs.add(sch);
  87 + }
  88 +
  89 + ScheduleRealInfo[] upArray = nexts(ups),
  90 + downArray = nexts(downs);
  91 +
  92 + final List<ScheduleRealInfo> pstArray = mergeArray(upArray, downArray);
  93 + //删除
  94 + jdbcTemplate.update("delete from bsth_t_clfcxxb where line_code=?", lineCode);
  95 + //重新写入
  96 + jdbcTemplate.batchUpdate("insert into bsth_t_clfcxxb(rq, line_code, line_name, lp_name, lp_sn, dfsj, nbbm, cph, bc_type, end_station_name, updown, jGh, jName, remarks, sn)" +
  97 + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new BatchPreparedStatementSetter() {
  98 + @Override
  99 + public void setValues(PreparedStatement ps, int i) throws SQLException {
  100 + ScheduleRealInfo sch = pstArray.get(i);
  101 + ps.setString(1, sch.getScheduleDateStr());
  102 + ps.setString(2, sch.getXlBm());
  103 + ps.setString(3, sch.getXlName());
  104 + ps.setString(4, sch.getLpName());
  105 + ps.setInt(5, sch.getFcno());
  106 + ps.setString(6, sch.getDfsj());
  107 + ps.setString(7, sch.getClZbh());
  108 + ps.setString(8, BasicData.nbbmCompanyPlateMap.get(sch.getClZbh()));
  109 + ps.setString(9, bcTypeMap.containsKey(sch.getBcType()) ? bcTypeMap.get(sch.getBcType()) : sch.getBcType());
  110 + ps.setString(10, sch.getZdzName());
  111 + ps.setInt(11, Integer.parseInt(sch.getXlDir()));
  112 + ps.setString(12, sch.getjGh());
  113 + ps.setString(13, sch.getjName());
  114 + ps.setString(14, sch.getRemarks());
  115 + ps.setInt(15, sch.getFcpSn());
  116 + }
  117 +
  118 + @Override
  119 + public int getBatchSize() {
  120 + return pstArray.size();
  121 + }
  122 + });
  123 + }
  124 +
  125 + private List<ScheduleRealInfo> mergeArray(ScheduleRealInfo[] upArray, ScheduleRealInfo[] downArray) {
  126 + List<ScheduleRealInfo> list = new ArrayList<>();
  127 + for (int i = 0; i < upArray.length; i++) {
  128 + if (upArray[i] != null) {
  129 + upArray[i].setFcpSn(i + 1);
  130 + list.add(upArray[i]);
  131 + }
  132 + }
  133 + for (int i = 0; i < downArray.length; i++) {
  134 + if (downArray[i] != null) {
  135 + downArray[i].setFcpSn(i + 1);
  136 + list.add(downArray[i]);
  137 + }
  138 + }
  139 + return list;
  140 + }
  141 +
  142 + /**
  143 + * 接下来要执行的3个班次
  144 + *
  145 + * @param list
  146 + * @return
  147 + */
  148 + private ScheduleRealInfo[] nexts(List<ScheduleRealInfo> list) {
  149 + ScheduleRealInfo[] array = new ScheduleRealInfo[3];
  150 + Collections.sort(list, schFCSJComparator);
  151 +
  152 + int count = 0, threshold = 1000 * 60 * 30;
  153 + long t = System.currentTimeMillis();
  154 + for (ScheduleRealInfo sch : list) {
  155 + if (count == 3)
  156 + break;
  157 +
  158 + //烂班
  159 + if (sch.isDestroy())
  160 + continue;
  161 +
  162 + //进场、出场、2点间空驶
  163 + if (sch.getBcType().equals("in")
  164 + || sch.getBcType().equals("out")
  165 + || sch.getBcType().equals("ldks"))
  166 + continue;
  167 +
  168 + //有实发实达时间的
  169 + if (StringUtils.isNotEmpty(sch.getFcsjActual())
  170 + || StringUtils.isNotEmpty(sch.getZdsjActual()))
  171 + continue;
  172 +
  173 + if (t - sch.getDfsjT() > threshold)
  174 + continue;
  175 +
  176 + array[count] = sch;
  177 + count++;
  178 + }
  179 + return array;
  180 + }
  181 +
  182 + @Autowired
  183 + UpdateInfoThread updateInfoThread;
  184 +
  185 + @Override
  186 + public void run(String... strings) throws Exception {
  187 + bcTypeMap = new HashMap<>();
  188 + bcTypeMap.put("normal", "正常班次");
  189 + bcTypeMap.put("region", "区间");
  190 + bcTypeMap.put("venting", "直放");
  191 + bcTypeMap.put("major", "放站");
  192 + bcTypeMap.put("ldks", "两点间空驶");
  193 + //Application.mainServices.scheduleWithFixedDelay(updateInfoThread, 60, 40, TimeUnit.SECONDS);
  194 + }
  195 +
  196 + @Component
  197 + private static class UpdateInfoThread extends Thread {
  198 +
  199 + @Autowired
  200 + CarOutInfo carOutInfoHandler;
  201 +
  202 + @Override
  203 + public void run() {
  204 + carOutInfoHandler.updateAll();
  205 + }
  206 + }
  207 +}
... ...
src/main/java/com/bsth/data/forecast/ArrivalComparator.java
1   -package com.bsth.data.forecast;
2   -
3   -import com.bsth.data.forecast.entity.ArrivalEntity;
4   -
5   -import java.util.Comparator;
6   -
7   -public class ArrivalComparator implements Comparator<ArrivalEntity>{
8   -
9   - @Override
10   - public int compare(ArrivalEntity a1, ArrivalEntity a2) {
11   - return (int) (a1.getTs() - a2.getTs());
12   - }
13   -}
  1 +package com.bsth.data.forecast;
  2 +
  3 +import com.bsth.data.forecast.entity.ArrivalEntity;
  4 +
  5 +import java.util.Comparator;
  6 +
  7 +public class ArrivalComparator implements Comparator<ArrivalEntity>{
  8 +
  9 + @Override
  10 + public int compare(ArrivalEntity a1, ArrivalEntity a2) {
  11 + return (int) (a1.getTs() - a2.getTs());
  12 + }
  13 +}
... ...
src/main/java/com/bsth/data/forecast/ArrivalDataLoader.java
1   -package com.bsth.data.forecast;
2   -
3   -import com.bsth.data.BasicData;
4   -import com.bsth.data.LineConfigData;
5   -import com.bsth.data.forecast.entity.ArrivalEntity;
6   -import com.bsth.entity.realcontrol.LineConfig;
7   -import com.bsth.util.db.DBUtils_MS;
8   -import org.slf4j.Logger;
9   -import org.slf4j.LoggerFactory;
10   -import org.springframework.beans.factory.annotation.Autowired;
11   -import org.springframework.stereotype.Component;
12   -
13   -import java.sql.Connection;
14   -import java.sql.PreparedStatement;
15   -import java.sql.ResultSet;
16   -import java.sql.SQLException;
17   -import java.util.ArrayList;
18   -import java.util.Calendar;
19   -import java.util.Collection;
20   -import java.util.List;
21   -
22   -/**
23   - *
24   - * @ClassName: DataLoader
25   - * @Description: TODO(从数据库加载进出站数据)
26   - * @author PanZhao
27   - * @date 2016年8月19日 上午9:59:21
28   - *
29   - */
30   -@Component
31   -public class ArrivalDataLoader {
32   -
33   - private static Long prveLoadTime;
34   -
35   - private final static long DAY_TIME = 1000 * 60 * 60 * 24;
36   -
37   - private Logger logger = LoggerFactory.getLogger(this.getClass());
38   -
39   - @Autowired
40   - LineConfigData lineConfigData;
41   -
42   - /**
43   - *
44   - * @Title: load
45   - * @Description: TODO(根据上次加载时间,查询之后的增量数据)
46   - */
47   - public List<ArrivalEntity> load(){
48   - List<ArrivalEntity> list = null;
49   -
50   - if(null == prveLoadTime)
51   - list = recovery();
52   - else{
53   - Calendar cal = Calendar.getInstance();
54   - //周数,表分区字段
55   - int weeks_year = cal.get(Calendar.WEEK_OF_YEAR);
56   -
57   - Connection conn = null;
58   - PreparedStatement ps = null;
59   - ResultSet rs = null;
60   -
61   - String sql = "select * from bsth_c_arrival_info where weeks_year=? AND create_timestamp > ? AND create_timestamp <=? AND ABS(create_timestamp - ts) < 3600000 order by create_date";
62   - try{
63   - long t = System.currentTimeMillis();
64   -
65   - conn = DBUtils_MS.getConnection();
66   - ps = conn.prepareStatement(sql);
67   - ps.setInt(1, weeks_year);
68   - ps.setLong(2, prveLoadTime);
69   - ps.setLong(3, t);
70   - rs = ps.executeQuery();
71   -
72   - list = resultSet2Set(rs);
73   -
74   - prveLoadTime = t;
75   - }catch(Exception e){
76   - logger.error("", e);
77   - }finally {
78   - DBUtils_MS.close(rs, ps, conn);
79   - }
80   - }
81   - return list;
82   - }
83   -
84   - /**
85   - *
86   - * @Title: recovery
87   - * @Description: TODO(从数据库恢复数据,按照线路的开始运营时间恢复)
88   - */
89   - public List<ArrivalEntity> recovery(){
90   - Collection<LineConfig> confs = lineConfigData.getAll();
91   - long t = System.currentTimeMillis()
92   - ,st;
93   -
94   - List<ArrivalEntity> all = new ArrayList<>();
95   - for(LineConfig conf : confs){
96   - st = conf.getCurrStartTime();
97   - if(t < st)
98   - st = st - DAY_TIME;
99   - try{
100   - all.addAll(loadByLineAndTime(conf.getLine().getLineCode(), st, t));
101   - }catch(Exception e){
102   - logger.error("", e);
103   - }
104   - }
105   -
106   - prveLoadTime = t;
107   - return all;
108   - }
109   -
110   - /**
111   - *
112   - * @Title: loadByLineAndStartTime
113   - * @Description: TODO(根据线路和时间戳加载数据)
114   - */
115   - public List<ArrivalEntity> loadByLineAndTime(String lineCode, long st, long et){
116   - Calendar cal = Calendar.getInstance();
117   - cal.setTimeInMillis(st);
118   - int weeks_year = cal.get(Calendar.WEEK_OF_YEAR);
119   -
120   - Connection conn = null;
121   - PreparedStatement ps = null;
122   - ResultSet rs = null;
123   -
124   - List<ArrivalEntity> list = new ArrayList<>();
125   - String sql = "select * from bsth_c_arrival_info where weeks_year=? and line_id=? AND create_timestamp > ? AND create_timestamp <=? AND ABS(create_timestamp - ts) < 3600000 order by ts";
126   - try{
127   - conn = DBUtils_MS.getConnection();
128   - ps = conn.prepareStatement(sql);
129   - ps.setInt(1, weeks_year);
130   - ps.setString(2, lineCode);
131   - ps.setLong(3, st);
132   - ps.setLong(4, et);
133   - rs = ps.executeQuery();
134   -
135   - list = resultSet2Set(rs);
136   - }catch(Exception e){
137   - logger.error("", e);
138   - }finally {
139   - DBUtils_MS.close(rs, ps, conn);
140   - }
141   - return list;
142   - }
143   -
144   - /**
145   - *
146   - * @Title: loadByLineAndStartTime
147   - * @Description: TODO(根据线路,走向和时间戳加载数据)
148   - */
149   - public List<ArrivalEntity> loadByLineAndTime(String lineCode, int updown, long st, long et){
150   - Calendar cal = Calendar.getInstance();
151   - cal.setTimeInMillis(st);
152   - int weeks_year = cal.get(Calendar.WEEK_OF_YEAR);
153   -
154   - Connection conn = null;
155   - PreparedStatement ps = null;
156   - ResultSet rs = null;
157   -
158   - List<ArrivalEntity> list = new ArrayList<>();
159   - String sql = "select * from bsth_c_arrival_info where weeks_year=? and line_id=? and up_down=? and in_out=0 AND create_timestamp > ? AND create_timestamp <=? AND ABS(create_timestamp - ts) < 3600000 order by ts";
160   - try{
161   - conn = DBUtils_MS.getConnection();
162   - ps = conn.prepareStatement(sql);
163   - ps.setInt(1, weeks_year);
164   - ps.setString(2, lineCode);
165   - ps.setInt(3, updown);
166   - ps.setLong(4, st);
167   - ps.setLong(5, et);
168   - rs = ps.executeQuery();
169   -
170   - list = resultSet2Set(rs);
171   - }catch(Exception e){
172   - logger.error("", e);
173   - }finally {
174   - DBUtils_MS.close(rs, ps, conn);
175   - }
176   - return list;
177   - }
178   -
179   - public List<ArrivalEntity> resultSet2Set(ResultSet rs) throws SQLException{
180   - List<ArrivalEntity> list = new ArrayList<>();
181   -
182   - ArrivalEntity arr;
183   - while(rs.next()){
184   - arr = new ArrivalEntity();
185   - arr.setDeviceId(rs.getString("device_id"));
186   - arr.setNbbm(BasicData.deviceId2NbbmMap.get(arr.getDeviceId()));
187   - if(null == arr.getNbbm()){
188   - logger.warn("未注册的设备号," + arr.getDeviceId());
189   - continue;
190   - }
191   -
192   - arr.setTs(rs.getLong("ts"));
193   - arr.setLineCode(rs.getString("line_id"));
194   - arr.setUpDown(rs.getInt("up_down"));
195   - arr.setStopNo(rs.getString("stop_no"));
196   - arr.setStopName(BasicData.stationCode2NameMap.get(arr.getStopNo()));
197   - arr.setInOut(rs.getInt("in_out"));
198   - arr.setCreateDate(rs.getLong("create_timestamp"));
199   - arr.setWeeksYear(rs.getInt("weeks_year"));
200   - arr.setEnable(true);
201   -
202   - list.add(arr);
203   - }
204   - return list;
205   - }
206   -
207   - public static void setPrveLoadTime(long t){
208   - prveLoadTime = t;
209   - }
210   -}
  1 +package com.bsth.data.forecast;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +import com.bsth.data.LineConfigData;
  5 +import com.bsth.data.forecast.entity.ArrivalEntity;
  6 +import com.bsth.entity.realcontrol.LineConfig;
  7 +import com.bsth.util.db.DBUtils_MS;
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
  10 +import org.springframework.beans.factory.annotation.Autowired;
  11 +import org.springframework.stereotype.Component;
  12 +
  13 +import java.sql.Connection;
  14 +import java.sql.PreparedStatement;
  15 +import java.sql.ResultSet;
  16 +import java.sql.SQLException;
  17 +import java.util.ArrayList;
  18 +import java.util.Calendar;
  19 +import java.util.Collection;
  20 +import java.util.List;
  21 +
  22 +/**
  23 + *
  24 + * @ClassName: DataLoader
  25 + * @Description: TODO(从数据库加载进出站数据)
  26 + * @author PanZhao
  27 + * @date 2016年8月19日 上午9:59:21
  28 + *
  29 + */
  30 +@Component
  31 +public class ArrivalDataLoader {
  32 +
  33 + private static Long prveLoadTime;
  34 +
  35 + private final static long DAY_TIME = 1000 * 60 * 60 * 24;
  36 +
  37 + private Logger logger = LoggerFactory.getLogger(this.getClass());
  38 +
  39 + @Autowired
  40 + LineConfigData lineConfigData;
  41 +
  42 + /**
  43 + *
  44 + * @Title: load
  45 + * @Description: TODO(根据上次加载时间,查询之后的增量数据)
  46 + */
  47 + public List<ArrivalEntity> load(){
  48 + List<ArrivalEntity> list = null;
  49 +
  50 + if(null == prveLoadTime)
  51 + list = recovery();
  52 + else{
  53 + Calendar cal = Calendar.getInstance();
  54 + //周数,表分区字段
  55 + int weeks_year = cal.get(Calendar.WEEK_OF_YEAR);
  56 +
  57 + Connection conn = null;
  58 + PreparedStatement ps = null;
  59 + ResultSet rs = null;
  60 +
  61 + String sql = "select * from bsth_c_arrival_info where weeks_year=? AND create_timestamp > ? AND create_timestamp <=? AND ABS(create_timestamp - ts) < 3600000 order by create_date";
  62 + try{
  63 + long t = System.currentTimeMillis();
  64 +
  65 + conn = DBUtils_MS.getConnection();
  66 + ps = conn.prepareStatement(sql);
  67 + ps.setInt(1, weeks_year);
  68 + ps.setLong(2, prveLoadTime);
  69 + ps.setLong(3, t);
  70 + rs = ps.executeQuery();
  71 +
  72 + list = resultSet2Set(rs);
  73 +
  74 + prveLoadTime = t;
  75 + }catch(Exception e){
  76 + logger.error("", e);
  77 + }finally {
  78 + DBUtils_MS.close(rs, ps, conn);
  79 + }
  80 + }
  81 + return list;
  82 + }
  83 +
  84 + /**
  85 + *
  86 + * @Title: recovery
  87 + * @Description: TODO(从数据库恢复数据,按照线路的开始运营时间恢复)
  88 + */
  89 + public List<ArrivalEntity> recovery(){
  90 + Collection<LineConfig> confs = lineConfigData.getAll();
  91 + long t = System.currentTimeMillis()
  92 + ,st;
  93 +
  94 + List<ArrivalEntity> all = new ArrayList<>();
  95 + for(LineConfig conf : confs){
  96 + st = conf.getCurrStartTime();
  97 + if(t < st)
  98 + st = st - DAY_TIME;
  99 + try{
  100 + all.addAll(loadByLineAndTime(conf.getLine().getLineCode(), st, t));
  101 + }catch(Exception e){
  102 + logger.error("", e);
  103 + }
  104 + }
  105 +
  106 + prveLoadTime = t;
  107 + return all;
  108 + }
  109 +
  110 + /**
  111 + *
  112 + * @Title: loadByLineAndStartTime
  113 + * @Description: TODO(根据线路和时间戳加载数据)
  114 + */
  115 + public List<ArrivalEntity> loadByLineAndTime(String lineCode, long st, long et){
  116 + Calendar cal = Calendar.getInstance();
  117 + cal.setTimeInMillis(st);
  118 + int weeks_year = cal.get(Calendar.WEEK_OF_YEAR);
  119 +
  120 + Connection conn = null;
  121 + PreparedStatement ps = null;
  122 + ResultSet rs = null;
  123 +
  124 + List<ArrivalEntity> list = new ArrayList<>();
  125 + String sql = "select * from bsth_c_arrival_info where weeks_year=? and line_id=? AND create_timestamp > ? AND create_timestamp <=? AND ABS(create_timestamp - ts) < 3600000 order by ts";
  126 + try{
  127 + conn = DBUtils_MS.getConnection();
  128 + ps = conn.prepareStatement(sql);
  129 + ps.setInt(1, weeks_year);
  130 + ps.setString(2, lineCode);
  131 + ps.setLong(3, st);
  132 + ps.setLong(4, et);
  133 + rs = ps.executeQuery();
  134 +
  135 + list = resultSet2Set(rs);
  136 + }catch(Exception e){
  137 + logger.error("", e);
  138 + }finally {
  139 + DBUtils_MS.close(rs, ps, conn);
  140 + }
  141 + return list;
  142 + }
  143 +
  144 + /**
  145 + *
  146 + * @Title: loadByLineAndStartTime
  147 + * @Description: TODO(根据线路,走向和时间戳加载数据)
  148 + */
  149 + public List<ArrivalEntity> loadByLineAndTime(String lineCode, int updown, long st, long et){
  150 + Calendar cal = Calendar.getInstance();
  151 + cal.setTimeInMillis(st);
  152 + int weeks_year = cal.get(Calendar.WEEK_OF_YEAR);
  153 +
  154 + Connection conn = null;
  155 + PreparedStatement ps = null;
  156 + ResultSet rs = null;
  157 +
  158 + List<ArrivalEntity> list = new ArrayList<>();
  159 + String sql = "select * from bsth_c_arrival_info where weeks_year=? and line_id=? and up_down=? and in_out=0 AND create_timestamp > ? AND create_timestamp <=? AND ABS(create_timestamp - ts) < 3600000 order by ts";
  160 + try{
  161 + conn = DBUtils_MS.getConnection();
  162 + ps = conn.prepareStatement(sql);
  163 + ps.setInt(1, weeks_year);
  164 + ps.setString(2, lineCode);
  165 + ps.setInt(3, updown);
  166 + ps.setLong(4, st);
  167 + ps.setLong(5, et);
  168 + rs = ps.executeQuery();
  169 +
  170 + list = resultSet2Set(rs);
  171 + }catch(Exception e){
  172 + logger.error("", e);
  173 + }finally {
  174 + DBUtils_MS.close(rs, ps, conn);
  175 + }
  176 + return list;
  177 + }
  178 +
  179 + public List<ArrivalEntity> resultSet2Set(ResultSet rs) throws SQLException{
  180 + List<ArrivalEntity> list = new ArrayList<>();
  181 +
  182 + ArrivalEntity arr;
  183 + while(rs.next()){
  184 + arr = new ArrivalEntity();
  185 + arr.setDeviceId(rs.getString("device_id"));
  186 + arr.setNbbm(BasicData.deviceId2NbbmMap.get(arr.getDeviceId()));
  187 + if(null == arr.getNbbm()){
  188 + logger.warn("未注册的设备号," + arr.getDeviceId());
  189 + continue;
  190 + }
  191 +
  192 + arr.setTs(rs.getLong("ts"));
  193 + arr.setLineCode(rs.getString("line_id"));
  194 + arr.setUpDown(rs.getInt("up_down"));
  195 + arr.setStopNo(rs.getString("stop_no"));
  196 + arr.setStopName(BasicData.stationCode2NameMap.get(arr.getStopNo()));
  197 + arr.setInOut(rs.getInt("in_out"));
  198 + arr.setCreateDate(rs.getLong("create_timestamp"));
  199 + arr.setWeeksYear(rs.getInt("weeks_year"));
  200 + arr.setEnable(true);
  201 +
  202 + list.add(arr);
  203 + }
  204 + return list;
  205 + }
  206 +
  207 + public static void setPrveLoadTime(long t){
  208 + prveLoadTime = t;
  209 + }
  210 +}
... ...
src/main/java/com/bsth/data/forecast/entity/ArrivalEntity.java
1   -package com.bsth.data.forecast.entity;
2   -
3   -import com.bsth.data.BasicData;
4   -
5   -import java.text.SimpleDateFormat;
6   -import java.util.Date;
7   -
8   -/**
9   - *
10   - * @ClassName: ArrivalEntity
11   - * @Description: TODO(进出站实体)
12   - * @author PanZhao
13   - * @date 2016年8月19日 上午9:32:20
14   - *
15   - */
16   -public class ArrivalEntity {
17   -
18   - /** 设备号*/
19   - private String deviceId;
20   -
21   - private String nbbm;
22   -
23   - /** 站点名称 */
24   - private String stopName;
25   -
26   - /** 时间戳*/
27   - private Long ts;
28   -
29   - /** 线路编码*/
30   - private String lineCode;
31   -
32   - /** 上下行*/
33   - private Integer upDown;
34   -
35   - /**站点编码*/
36   - private String stopNo;
37   -
38   - /** 0: 进 1:出*/
39   - private Integer inOut;
40   -
41   - private Long createDate;
42   -
43   - /** 是否有效 */
44   - private boolean enable;
45   -
46   - /**分区字段,当年的第几周*/
47   - private Integer weeksYear;
48   -
49   - private boolean tcc;
50   -
51   - //是否被纠正
52   - private boolean correct;
53   -
54   - private String correctText;
55   -
56   - /** -1 则信号有效,但程序标记为不使用 */
57   - private int flag = 0;
58   -
59   - public ArrivalEntity(){}
60   -
61   - public ArrivalEntity(String deviceId, long ts, String lineCode, int upDown, String stopNo, int inOut, long createDate,
62   - int weeksYear, String stopName) {
63   -
64   - this.deviceId = deviceId;
65   - this.ts = ts;
66   - this.lineCode = lineCode;
67   - this.upDown = upDown;
68   - this.stopNo = stopNo;
69   - this.stopName = stopName;
70   - this.inOut = inOut;
71   - this.createDate = createDate;
72   - }
73   -
74   -/* @Override
75   - public boolean equals(Object obj) {
76   - ArrivalEntity a2 = (ArrivalEntity)obj;
77   -
78   - return this.toString().equals(a2.toString())
79   - && Math.abs(this.ts - a2.ts) < EQ_RANGE;
80   - }
81   -
82   - @Override
83   - public int hashCode() {
84   - return this.toString().hashCode();
85   - }*/
86   -
87   -
88   - @Override
89   - public String toString() {
90   - try {
91   - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");
92   - return "["+BasicData.deviceId2NbbmMap.get(this.deviceId)+", "+sdfHHmm.format(new Date(this.ts))
93   - +","+(this.getUpDown()==0?"上行":"下行")+","+(this.inOut==0?"进":"出")+","+this.stopNo+" ("+this.stopName+")]";
94   - } catch (Exception e) {
95   - return "";
96   - }
97   - }
98   -
99   - public String getLineCode() {
100   - return lineCode;
101   - }
102   -
103   - public void setLineCode(String lineCode) {
104   - this.lineCode = lineCode;
105   - }
106   -
107   - public Integer getUpDown() {
108   - return upDown;
109   - }
110   -
111   - public void setUpDown(Integer upDown) {
112   - this.upDown = upDown;
113   - }
114   -
115   - public String getStopNo() {
116   - return stopNo;
117   - }
118   -
119   - public void setStopNo(String stopNo) {
120   - this.stopNo = stopNo;
121   - }
122   -
123   - public Integer getInOut() {
124   - return inOut;
125   - }
126   -
127   - public void setInOut(Integer inOut) {
128   - this.inOut = inOut;
129   - }
130   -
131   - public Long getCreateDate() {
132   - return createDate;
133   - }
134   -
135   - public void setCreateDate(Long createDate) {
136   - this.createDate = createDate;
137   - }
138   -
139   - public Integer getWeeksYear() {
140   - return weeksYear;
141   - }
142   -
143   - public void setWeeksYear(Integer weeksYear) {
144   - this.weeksYear = weeksYear;
145   - }
146   -
147   - public String getDeviceId() {
148   - return deviceId;
149   - }
150   -
151   - public void setDeviceId(String deviceId) {
152   - this.deviceId = deviceId;
153   - }
154   -
155   - public Long getTs() {
156   - return ts;
157   - }
158   -
159   - public void setTs(Long ts) {
160   - this.ts = ts;
161   - }
162   -
163   - public String getStopName() {
164   - return stopName;
165   - }
166   -
167   - public void setStopName(String stopName) {
168   - this.stopName = stopName;
169   - }
170   -
171   - public String getId(){
172   - return this.deviceId + "_" + this.ts;
173   - }
174   -
175   - public String getNbbm() {
176   - return nbbm;
177   - }
178   -
179   - public void setNbbm(String nbbm) {
180   - this.nbbm = nbbm;
181   - }
182   -
183   - public boolean isEnable() {
184   - return enable;
185   - }
186   -
187   - public void setEnable(boolean enable) {
188   - this.enable = enable;
189   - }
190   -
191   - public boolean isTcc() {
192   - return tcc;
193   - }
194   -
195   - public void setTcc(boolean tcc) {
196   - this.tcc = tcc;
197   - }
198   -
199   - public boolean isOutTcc() {
200   - return isTcc() && inOut == 1;
201   - }
202   -
203   - public boolean isCorrect() {
204   - return correct;
205   - }
206   -
207   - public void setCorrect(boolean correct) {
208   - this.correct = correct;
209   - }
210   -
211   - public String getCorrectText() {
212   - return correctText;
213   - }
214   -
215   - public void setCorrectText(String correctText) {
216   - this.correctText = correctText;
217   - }
218   -
219   - public Integer getFlag() {
220   - return flag;
221   - }
222   -
223   - public void setFlag(Integer flag) {
224   - this.flag = flag;
225   - }
226   -}
  1 +package com.bsth.data.forecast.entity;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +
  5 +import java.text.SimpleDateFormat;
  6 +import java.util.Date;
  7 +
  8 +/**
  9 + *
  10 + * @ClassName: ArrivalEntity
  11 + * @Description: TODO(进出站实体)
  12 + * @author PanZhao
  13 + * @date 2016年8月19日 上午9:32:20
  14 + *
  15 + */
  16 +public class ArrivalEntity {
  17 +
  18 + /** 设备号*/
  19 + private String deviceId;
  20 +
  21 + private String nbbm;
  22 +
  23 + /** 站点名称 */
  24 + private String stopName;
  25 +
  26 + /** 时间戳*/
  27 + private Long ts;
  28 +
  29 + /** 线路编码*/
  30 + private String lineCode;
  31 +
  32 + /** 上下行*/
  33 + private Integer upDown;
  34 +
  35 + /**站点编码*/
  36 + private String stopNo;
  37 +
  38 + /** 0: 进 1:出*/
  39 + private Integer inOut;
  40 +
  41 + private Long createDate;
  42 +
  43 + /** 是否有效 */
  44 + private boolean enable;
  45 +
  46 + /**分区字段,当年的第几周*/
  47 + private Integer weeksYear;
  48 +
  49 + private boolean tcc;
  50 +
  51 + //是否被纠正
  52 + private boolean correct;
  53 +
  54 + private String correctText;
  55 +
  56 + /** -1 则信号有效,但程序标记为不使用 */
  57 + private int flag = 0;
  58 +
  59 + public ArrivalEntity(){}
  60 +
  61 + public ArrivalEntity(String deviceId, long ts, String lineCode, int upDown, String stopNo, int inOut, long createDate,
  62 + int weeksYear, String stopName) {
  63 +
  64 + this.deviceId = deviceId;
  65 + this.ts = ts;
  66 + this.lineCode = lineCode;
  67 + this.upDown = upDown;
  68 + this.stopNo = stopNo;
  69 + this.stopName = stopName;
  70 + this.inOut = inOut;
  71 + this.createDate = createDate;
  72 + }
  73 +
  74 +/* @Override
  75 + public boolean equals(Object obj) {
  76 + ArrivalEntity a2 = (ArrivalEntity)obj;
  77 +
  78 + return this.toString().equals(a2.toString())
  79 + && Math.abs(this.ts - a2.ts) < EQ_RANGE;
  80 + }
  81 +
  82 + @Override
  83 + public int hashCode() {
  84 + return this.toString().hashCode();
  85 + }*/
  86 +
  87 +
  88 + @Override
  89 + public String toString() {
  90 + try {
  91 + SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");
  92 + return "["+BasicData.deviceId2NbbmMap.get(this.deviceId)+", "+sdfHHmm.format(new Date(this.ts))
  93 + +","+(this.getUpDown()==0?"上行":"下行")+","+(this.inOut==0?"进":"出")+","+this.stopNo+" ("+this.stopName+")]";
  94 + } catch (Exception e) {
  95 + return "";
  96 + }
  97 + }
  98 +
  99 + public String getLineCode() {
  100 + return lineCode;
  101 + }
  102 +
  103 + public void setLineCode(String lineCode) {
  104 + this.lineCode = lineCode;
  105 + }
  106 +
  107 + public Integer getUpDown() {
  108 + return upDown;
  109 + }
  110 +
  111 + public void setUpDown(Integer upDown) {
  112 + this.upDown = upDown;
  113 + }
  114 +
  115 + public String getStopNo() {
  116 + return stopNo;
  117 + }
  118 +
  119 + public void setStopNo(String stopNo) {
  120 + this.stopNo = stopNo;
  121 + }
  122 +
  123 + public Integer getInOut() {
  124 + return inOut;
  125 + }
  126 +
  127 + public void setInOut(Integer inOut) {
  128 + this.inOut = inOut;
  129 + }
  130 +
  131 + public Long getCreateDate() {
  132 + return createDate;
  133 + }
  134 +
  135 + public void setCreateDate(Long createDate) {
  136 + this.createDate = createDate;
  137 + }
  138 +
  139 + public Integer getWeeksYear() {
  140 + return weeksYear;
  141 + }
  142 +
  143 + public void setWeeksYear(Integer weeksYear) {
  144 + this.weeksYear = weeksYear;
  145 + }
  146 +
  147 + public String getDeviceId() {
  148 + return deviceId;
  149 + }
  150 +
  151 + public void setDeviceId(String deviceId) {
  152 + this.deviceId = deviceId;
  153 + }
  154 +
  155 + public Long getTs() {
  156 + return ts;
  157 + }
  158 +
  159 + public void setTs(Long ts) {
  160 + this.ts = ts;
  161 + }
  162 +
  163 + public String getStopName() {
  164 + return stopName;
  165 + }
  166 +
  167 + public void setStopName(String stopName) {
  168 + this.stopName = stopName;
  169 + }
  170 +
  171 + public String getId(){
  172 + return this.deviceId + "_" + this.ts;
  173 + }
  174 +
  175 + public String getNbbm() {
  176 + return nbbm;
  177 + }
  178 +
  179 + public void setNbbm(String nbbm) {
  180 + this.nbbm = nbbm;
  181 + }
  182 +
  183 + public boolean isEnable() {
  184 + return enable;
  185 + }
  186 +
  187 + public void setEnable(boolean enable) {
  188 + this.enable = enable;
  189 + }
  190 +
  191 + public boolean isTcc() {
  192 + return tcc;
  193 + }
  194 +
  195 + public void setTcc(boolean tcc) {
  196 + this.tcc = tcc;
  197 + }
  198 +
  199 + public boolean isOutTcc() {
  200 + return isTcc() && inOut == 1;
  201 + }
  202 +
  203 + public boolean isCorrect() {
  204 + return correct;
  205 + }
  206 +
  207 + public void setCorrect(boolean correct) {
  208 + this.correct = correct;
  209 + }
  210 +
  211 + public String getCorrectText() {
  212 + return correctText;
  213 + }
  214 +
  215 + public void setCorrectText(String correctText) {
  216 + this.correctText = correctText;
  217 + }
  218 +
  219 + public Integer getFlag() {
  220 + return flag;
  221 + }
  222 +
  223 + public void setFlag(Integer flag) {
  224 + this.flag = flag;
  225 + }
  226 +}
... ...
src/main/java/com/bsth/data/gpsdata/client/ClientApp.java
... ... @@ -21,6 +21,10 @@ import org.springframework.beans.factory.annotation.Autowired;
21 21 import org.springframework.stereotype.Component;
22 22  
23 23 import java.net.InetSocketAddress;
  24 +import java.util.concurrent.Executors;
  25 +import java.util.concurrent.ScheduledExecutorService;
  26 +import java.util.concurrent.ThreadFactory;
  27 +import java.util.concurrent.TimeUnit;
24 28  
25 29 /**
26 30 * Created by panzhao on 2017/5/4.
... ... @@ -40,6 +44,17 @@ public class ClientApp {
40 44  
41 45 static Logger logger = LoggerFactory.getLogger(ClientApp.class);
42 46  
  47 + private ScheduledExecutorService sexec = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
  48 +
  49 + @Override
  50 + public Thread newThread(Runnable r) {
  51 + // TODO Auto-generated method stub
  52 + Thread t = new Thread(r);
  53 + t.setName("SessionCheckExecutor");
  54 + return t;
  55 + }
  56 + });
  57 +
43 58 public static boolean dconnect(String device) {
44 59 boolean flag = false;
45 60 try {
... ... @@ -62,6 +77,7 @@ public class ClientApp {
62 77 flag = true;
63 78  
64 79 logger.info("dconnect...");
  80 + pdSession = session;
65 81 //SessionManager.getInstance().register(device, session);
66 82 } catch (Exception e) {
67 83 e.printStackTrace();
... ... @@ -69,6 +85,14 @@ public class ClientApp {
69 85 return flag;
70 86 }
71 87  
  88 + public static void pdreconn(){
  89 + dconnect(ConfigUtil.get("forward.device.name"));
  90 + }
  91 +
  92 + public static void pfreconn(){
  93 + fconnect(ConfigUtil.get("forward.device.name"));
  94 + }
  95 +
72 96 public static boolean fconnect(String device) {
73 97 boolean flag = false;
74 98 try {
... ... @@ -79,6 +103,7 @@ public class ClientApp {
79 103 flag = true;
80 104  
81 105 logger.info("fconnect...");
  106 + pfSession = session;
82 107 } catch (Exception e) {
83 108 e.printStackTrace();
84 109 }
... ... @@ -87,7 +112,7 @@ public class ClientApp {
87 112  
88 113 public void init() {
89 114 //exec = Executors.newFixedThreadPool(4);
90   - //sexec.scheduleAtFixedRate(new SessionChecker(), 1, 1, TimeUnit.MINUTES);
  115 + sexec.scheduleAtFixedRate(new SessionChecker(), 1, 1, TimeUnit.MINUTES);
91 116 /*******************************浦东********************************/
92 117 pdDataConnector = new NioSocketConnector();
93 118  
... ... @@ -133,4 +158,30 @@ public class ClientApp {
133 158  
134 159 gpsBeforeBuffer.init();
135 160 }
  161 +
  162 +
  163 + static IoSession pdSession;
  164 + static IoSession pfSession;
  165 + final class SessionChecker implements Runnable {
  166 +
  167 + @Override
  168 + public void run() {
  169 + // TODO Auto-generated method stub
  170 + try {
  171 +
  172 + if(!pdSession.isActive()){
  173 + logger.warn("浦东设备注销");
  174 + ClientApp.pdreconn();
  175 + }
  176 +
  177 + if(!pfSession.isActive()){
  178 + logger.warn("浦东转发设备注销");
  179 + ClientApp.pfreconn();
  180 + }
  181 + } catch (Exception e) {
  182 + logger.error("SessionChecker异常", e);
  183 + }
  184 + }
  185 +
  186 + }
136 187 }
137 188 \ No newline at end of file
... ...
src/main/java/com/bsth/data/gpsdata/client/DataMonitor.java 0 → 100644
  1 +package com.bsth.data.gpsdata.client;
  2 +
  3 +/**
  4 + * Created by panzhao on 2017/5/7.
  5 + */
  6 +public class DataMonitor {
  7 +
  8 + public static long lastTimePd;
  9 +
  10 + public static long lastTimePf;
  11 +
  12 +}
... ...
src/main/java/com/bsth/data/gpsdata/client/GpsBeforeBuffer.java
1   -package com.bsth.data.gpsdata.client;
2   -
3   -import com.bsth.Application;
4   -import com.bsth.data.BasicData;
5   -import com.bsth.data.gpsdata.GpsEntity;
6   -import com.bsth.data.gpsdata.arrival.GpsRealAnalyse;
7   -import com.bsth.data.gpsdata.client.pd.protocol.BasicInfo;
8   -import org.apache.commons.lang3.StringUtils;
9   -import org.springframework.beans.factory.annotation.Autowired;
10   -import org.springframework.stereotype.Component;
11   -
12   -import java.util.ArrayList;
13   -import java.util.LinkedList;
14   -import java.util.List;
15   -import java.util.concurrent.TimeUnit;
16   -
17   -/**
18   - * 从 socket client 到 .. 的缓冲
19   - * Created by panzhao on 2017/5/4.
20   - */
21   -@Component
22   -public class GpsBeforeBuffer {
23   -
24   - static LinkedList<GpsEntity> linkedList = new LinkedList<>();
25   -
26   - @Autowired
27   - GpsHandleThread gpsHandleThread;
28   -
29   - public void put(BasicInfo basicInfo){
30   - //放弃补发数据
31   - byte cacheData = getCacheState(basicInfo.getServiceState());
32   - if(cacheData == 1)
33   - return;
34   - GpsEntity gps = new GpsEntity();
35   -
36   - gps.setDeviceId(basicInfo.getDeviceId());
37   - gps.setTimestamp(basicInfo.getTimestamp());
38   - gps.setLat(basicInfo.getLat());
39   - gps.setLon(basicInfo.getLon());
40   - gps.setDirection((float)basicInfo.getDirection() / 10);
41   - gps.setValid(basicInfo.getGpsValid());
42   - gps.setCompanyCode(basicInfo.getCompanyCode());
43   - gps.setStopNo(basicInfo.getStopNo());
44   - gps.setUpDown(basicInfo.getUpOrDown());
45   - gps.setSpeed((float)basicInfo.getSpeedGps() / 10);
46   - gps.setLineId(String.valueOf(basicInfo.getLineId()));
47   - gps.setState((int) getService(basicInfo.getServiceState()));
48   - //没有设备号
49   - if (StringUtils.isBlank(gps.getDeviceId()))
50   - return;
51   -
52   - String nbbm = BasicData.deviceId2NbbmMap.get(gps.getDeviceId());
53   - if (StringUtils.isBlank(nbbm))
54   - gps.setIncomplete(true);
55   - else
56   - gps.setNbbm(nbbm);
57   -
58   - linkedList.addLast(gps);
59   - }
60   -
61   - public byte getCacheState(long serviceState) {
62   - return (byte)(((serviceState & 0x00100000) == 0x00100000) ? 1 : 0);
63   - }
64   -
65   - public void init(){
66   - Application.mainServices.scheduleWithFixedDelay(gpsHandleThread, 20 * 1000, 1100, TimeUnit.MILLISECONDS);
67   - }
68   -
69   - @Component
70   - public static class GpsHandleThread extends Thread{
71   -
72   - List<GpsEntity> list;
73   -
74   - @Autowired
75   - GpsRealAnalyse gpsRealAnalyse;
76   -
77   - @Override
78   - public void run() {
79   - list = new ArrayList<>(100);
80   -
81   - GpsEntity gps;
82   - for(int i = 0; i < 2000; i ++){
83   - gps = linkedList.poll();
84   - if(gps == null)
85   - break;
86   - list.add(gps);
87   - }
88   -
89   - gpsRealAnalyse.analyse(list);
90   - }
91   - }
92   -
93   - /**
94   - * 获取运营状态
95   - *
96   - * @return -1无效 0运营 1未运营
97   - */
98   - public static byte getService(long serviceState) {
99   - if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000)
100   - return -1;
101   - return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0);
102   - }
  1 +package com.bsth.data.gpsdata.client;
  2 +
  3 +import com.bsth.Application;
  4 +import com.bsth.data.BasicData;
  5 +import com.bsth.data.gpsdata.GpsEntity;
  6 +import com.bsth.data.gpsdata.arrival.GpsRealAnalyse;
  7 +import com.bsth.data.gpsdata.client.pd.protocol.BasicInfo;
  8 +import org.apache.commons.lang3.StringUtils;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.stereotype.Component;
  11 +
  12 +import java.util.ArrayList;
  13 +import java.util.LinkedList;
  14 +import java.util.List;
  15 +import java.util.concurrent.TimeUnit;
  16 +
  17 +/**
  18 + * 从 socket client 到 .. 的缓冲
  19 + * Created by panzhao on 2017/5/4.
  20 + */
  21 +@Component
  22 +public class GpsBeforeBuffer {
  23 +
  24 + static LinkedList<GpsEntity> linkedList = new LinkedList<>();
  25 +
  26 + @Autowired
  27 + GpsHandleThread gpsHandleThread;
  28 +
  29 + public void put(BasicInfo basicInfo){
  30 + //放弃补发数据
  31 + byte cacheData = getCacheState(basicInfo.getServiceState());
  32 + if(cacheData == 1)
  33 + return;
  34 + GpsEntity gps = new GpsEntity();
  35 +
  36 + gps.setDeviceId(basicInfo.getDeviceId());
  37 + gps.setTimestamp(basicInfo.getTimestamp());
  38 + gps.setLat(basicInfo.getLat());
  39 + gps.setLon(basicInfo.getLon());
  40 + gps.setDirection((float)basicInfo.getDirection() / 10);
  41 + gps.setValid(basicInfo.getGpsValid());
  42 + gps.setCompanyCode(basicInfo.getCompanyCode());
  43 + gps.setStopNo(basicInfo.getStopNo());
  44 + gps.setUpDown(basicInfo.getUpOrDown());
  45 + gps.setSpeed((float)basicInfo.getSpeedGps() / 10);
  46 + gps.setLineId(String.valueOf(basicInfo.getLineId()));
  47 + gps.setState((int) getService(basicInfo.getServiceState()));
  48 + //没有设备号
  49 + if (StringUtils.isBlank(gps.getDeviceId()))
  50 + return;
  51 +
  52 + String nbbm = BasicData.deviceId2NbbmMap.get(gps.getDeviceId());
  53 + if (StringUtils.isBlank(nbbm))
  54 + gps.setIncomplete(true);
  55 + else
  56 + gps.setNbbm(nbbm);
  57 +
  58 + linkedList.addLast(gps);
  59 + }
  60 +
  61 + public byte getCacheState(long serviceState) {
  62 + return (byte)(((serviceState & 0x00100000) == 0x00100000) ? 1 : 0);
  63 + }
  64 +
  65 + public void init(){
  66 + Application.mainServices.scheduleWithFixedDelay(gpsHandleThread, 20 * 1000, 1100, TimeUnit.MILLISECONDS);
  67 + }
  68 +
  69 + @Component
  70 + public static class GpsHandleThread extends Thread{
  71 +
  72 + List<GpsEntity> list;
  73 +
  74 + @Autowired
  75 + GpsRealAnalyse gpsRealAnalyse;
  76 +
  77 + @Override
  78 + public void run() {
  79 + list = new ArrayList<>(100);
  80 +
  81 + GpsEntity gps;
  82 + for(int i = 0; i < 2000; i ++){
  83 + gps = linkedList.poll();
  84 + if(gps == null)
  85 + break;
  86 + list.add(gps);
  87 + }
  88 +
  89 + gpsRealAnalyse.analyse(list);
  90 + }
  91 + }
  92 +
  93 + /**
  94 + * 获取运营状态
  95 + *
  96 + * @return -1无效 0运营 1未运营
  97 + */
  98 + public static byte getService(long serviceState) {
  99 + if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000)
  100 + return -1;
  101 + return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0);
  102 + }
103 103 }
104 104 \ No newline at end of file
... ...
src/main/java/com/bsth/data/gpsdata/client/pd/handler/PdClientHandler.java
1 1 package com.bsth.data.gpsdata.client.pd.handler;
2 2  
3   -import com.bsth.data.gpsdata.client.ClientApp;
4 3 import com.bsth.data.gpsdata.client.GpsBeforeBuffer;
5 4 import com.bsth.data.gpsdata.client.msg.IMessageBody;
6 5 import com.bsth.data.gpsdata.client.pd.protocol.PdMessage;
... ... @@ -45,7 +44,7 @@ public class PdClientHandler extends IoHandlerAdapter{
45 44 log.info("连网关设备编号:" + deviceId + "断开连接");
46 45 log.warn(deviceId + "网关设备注销");
47 46  
48   - ClientApp.dconnect(deviceId);
  47 + //ClientApp.dconnect(deviceId);
49 48 } else {
50 49 log.info("连网关设备编号:" + deviceId + "断开连接");
51 50 }
... ...
src/main/java/com/bsth/data/gpsdata/client/pf/handler/PfClientHandler.java
1 1 package com.bsth.data.gpsdata.client.pf.handler;
2 2  
3   -import com.bsth.data.gpsdata.client.ClientApp;
4 3 import com.bsth.data.gpsdata.client.GpsBeforeBuffer;
5 4 import com.bsth.data.gpsdata.client.common.Protocol2BizUtil;
6 5 import com.bsth.data.gpsdata.client.msg.IMessageBody;
... ... @@ -44,7 +43,7 @@ public class PfClientHandler extends IoHandlerAdapter{
44 43 //SessionManager.getInstance().unregister(deviceId);
45 44 log.info("连老网关设备编号:" + deviceId + "断开连接");
46 45 log.warn(deviceId + "老网关设备注销");
47   - ClientApp.fconnect(deviceId);
  46 + //ClientApp.fconnect(deviceId);
48 47 }
49 48 }
50 49  
... ...
src/main/java/com/bsth/data/schedule/SchModifyLog.java 0 → 100644
  1 +package com.bsth.data.schedule;
  2 +
  3 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
  4 +import com.bsth.entity.mcy_forms.Changetochange;
  5 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  6 +import com.bsth.entity.sys.SysUser;
  7 +import com.bsth.repository.form.ChangetochangeRepository;
  8 +import com.bsth.security.util.SecurityUtils;
  9 +import org.apache.commons.lang3.StringUtils;
  10 +import org.joda.time.format.DateTimeFormat;
  11 +import org.joda.time.format.DateTimeFormatter;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.stereotype.Service;
  16 +
  17 +import java.util.Date;
  18 +
  19 +/**
  20 + * 线调实际排班修改日志记录
  21 + * Created by panzhao on 2017/5/7.
  22 + */
  23 +@Service
  24 +public class SchModifyLog {
  25 +
  26 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  27 +
  28 + Logger log = LoggerFactory.getLogger(this.getClass());
  29 +
  30 + @Autowired
  31 + ChangetochangeRepository changetochangeRepository;
  32 +
  33 + /**
  34 + * 换人换车情况表
  35 + */
  36 + public void saveChangetochange(ScheduleRealInfo sch, ChangePersonCar cpc){
  37 + try {
  38 + String newNbbm = cpc.getClZbh();
  39 + String newJsy = cpc.getJsy();
  40 + String oldJsy = sch.getjGh()+"/"+sch.getjName();
  41 +
  42 + if(newNbbm == null && newJsy == null)
  43 + return;
  44 +
  45 + if(newNbbm != null && newJsy != null
  46 + && newNbbm.equals(sch.getClZbh()) && newJsy.equals(oldJsy))
  47 + return;
  48 +
  49 + Date d = new Date();
  50 + SysUser user = SecurityUtils.getCurrentUser();
  51 + Changetochange cc = new Changetochange();
  52 + cc.setRq(sch.getScheduleDateStr());
  53 + cc.setGs(sch.getGsBm());
  54 + cc.setFgs(sch.getFgsBm());
  55 + cc.setXl(sch.getXlBm());
  56 + cc.setLp(sch.getLpName());
  57 + cc.setFssj(fmtHHmm.print(d.getTime()));
  58 + cc.setXgsj(fmtHHmm.print(d.getTime()));
  59 + if(user != null)
  60 + cc.setXgr(user.getUserName());
  61 +
  62 + cc.setPcch(sch.getClZbh());
  63 + cc.setPcry(oldJsy);
  64 + cc.setJhch(sch.getClZbh());
  65 + cc.setJhgh(sch.getjGh());
  66 +
  67 + if(StringUtils.isNotEmpty(newNbbm))
  68 + cc.setSjch(newNbbm);
  69 + if(StringUtils.isNotEmpty(newJsy))
  70 + cc.setSjgh(newJsy);
  71 +
  72 + changetochangeRepository.save(cc);
  73 + }catch (Exception e){
  74 + log.error("纪录换人换车情况表", e);
  75 + }
  76 + }
  77 +
  78 + public void saveChangetochange(ScheduleRealInfo sch, String nbbm, String jsy){
  79 + ChangePersonCar cpc = new ChangePersonCar();
  80 + cpc.setClZbh(nbbm);
  81 + cpc.setJsy(jsy);
  82 + saveChangetochange(sch, cpc);
  83 + }
  84 +}
... ...
src/main/java/com/bsth/entity/CarPark.java
... ... @@ -3,6 +3,9 @@ package com.bsth.entity;
3 3 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4 4  
5 5 import javax.persistence.*;
  6 +
  7 +import org.hibernate.annotations.Formula;
  8 +
6 9 import java.util.Date;
7 10  
8 11  
... ... @@ -77,6 +80,10 @@ public class CarPark {
77 80 // 分公司
78 81 private String brancheCompany;
79 82  
  83 + /** 组合公司分公司编码 */
  84 + @Formula(" concat(company, '_', branche_company) ")
  85 + private String cgsbm;
  86 +
80 87 // 是否撤销
81 88 private Integer destroy;
82 89  
... ... @@ -99,6 +106,14 @@ public class CarPark {
99 106 // 修改日期
100 107 @Column(name = "update_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
101 108 private Date updateDate;
  109 +
  110 + public String getCgsbm() {
  111 + return cgsbm;
  112 + }
  113 +
  114 + public void setCgsbm(String cgsbm) {
  115 + this.cgsbm = cgsbm;
  116 + }
102 117  
103 118 public Integer getId() {
104 119 return id;
... ...
src/main/java/com/bsth/repository/CarParkRepository.java
... ... @@ -107,4 +107,7 @@ public interface CarParkRepository extends BaseRepository&lt;CarPark, Integer&gt;{
107 107  
108 108 @Query(value = "select st_astext(g_park_point), shapes_type, g_center_point, radius,park_code,park_name from bsth_c_car_park where park_code=?1", nativeQuery = true)
109 109 public Object[][] bufferAera(String parkCode);
  110 +
  111 + @Query(value ="SELECT p.park_name,p.park_code from bsth_c_car_park p where p.park_code = ?1", nativeQuery=true)
  112 + List<Object[]> selectTccInfoByCode(String parkCode);
110 113 }
... ...
src/main/java/com/bsth/repository/form/ChangetochangeRepository.java 0 → 100644
  1 +package com.bsth.repository.form;
  2 +
  3 +import com.bsth.entity.mcy_forms.Changetochange;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +/**
  8 + * Created by panzhao on 2017/5/7.
  9 + */
  10 +@Repository
  11 +public interface ChangetochangeRepository extends BaseRepository<Changetochange, Integer>{
  12 +}
... ...
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
... ... @@ -90,11 +90,11 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
90 90 List<ScheduleRealInfo> correctForm(String line,String startDate,String endDate,String lpName,String code);
91 91  
92 92 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
93   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDate = str_to_date(?4,'%Y-%m-%d') and s.xlBm=?5 order by realExecDate,dfsj")
  93 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDate = str_to_date(?4,'%Y-%m-%d') and s.xlBm=?5 order by realExecDate,fcsj")
94 94 List<ScheduleRealInfo> queryListWaybill(String jName,String clZbh,String lpName,String date,String line);
95 95  
96 96 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
97   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDate = str_to_date(?4,'%Y-%m-%d') and s.xlBm=?5 order by realExecDate,dfsj")
  97 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDate = str_to_date(?4,'%Y-%m-%d') and s.xlBm=?5 order by realExecDate,fcsj")
98 98 List<ScheduleRealInfo> queryListWaybillXcld(String jGh,String clZbh,String lpName,String date,String line);
99 99  
100 100 // @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
... ... @@ -105,9 +105,12 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
105 105 @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by s.xlBm,s.clZbh,s.jGh,s.adjustExps,s.fcsj")
106 106 List<ScheduleRealInfo> scheduleByDateAndLineTjrb(String line,String date);
107 107  
  108 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  109 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and s.xlDir=?3 and s.fcsjActual is not null and s.zdsjActual is not null order by s.realExecDate,s.fcsjActual")
  110 + List<ScheduleRealInfo> scheduleByDateAndLineInOut(String line,String date,String zd);
108 111  
109 112 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
110   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.clZbh = ?1 and s.scheduleDate = str_to_date(?2,'%Y-%m-%d') and xlBm =?3 order by realExecDate,dfsj")
  113 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.clZbh = ?1 and s.scheduleDate = str_to_date(?2,'%Y-%m-%d') and xlBm =?3 order by realExecDate,fcsj")
111 114 List<ScheduleRealInfo> queryListWaybill2(String clZbh,String date,String line);
112 115  
113 116 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
... ...
src/main/java/com/bsth/service/CarParkService.java
... ... @@ -28,5 +28,6 @@ public interface CarParkService extends BaseService&lt;CarPark, Integer&gt; {
28 28 *
29 29 */
30 30 Map<String, Object> carParkUpdate(Map<String, Object> map);
31   -
  31 +
  32 + boolean selectTccInfoByCode(Map<String, Object> map);
32 33 }
... ...
src/main/java/com/bsth/service/impl/CarParkServiceImpl.java
... ... @@ -26,55 +26,30 @@ public class CarParkServiceImpl extends BaseServiceImpl&lt;CarPark, Integer&gt; implem
26 26  
27 27 @Override
28 28 public Map<String, Object> carParkSave(Map<String, Object> map) {
29   -
30 29 Map<String, Object> resultMap = new HashMap<String, Object>();
31   -
32 30 try {
33   -
34 31 // 停车场编码
35 32 String parkCode = map.get("parkCode").equals("") ? null : map.get("parkCode").toString();
36   -
37   - // 停车场id
38   - // Integer id = Integer.parseInt(parkCode);
39   -
40 33 // 停车场名称
41 34 String parkName = map.get("parkName").equals("") ? "" : map.get("parkName").toString();
42   -
43 35 // 地理位置(百度坐标集合)
44 36 String bParkPoint = map.get("bParkPoint").equals("") ? "" : map.get("bParkPoint").toString();
45   -
46   - // 地理位置(WGS坐标集合)
47   - // String gParkPoint = map.get("gParkPoint").equals("") ? "" :map.get("gParkPoint").toString();
48   -
49 37 // 多边形WGS坐标点集合
50 38 String gParkPoint ="";
51   -
52 39 if(!bParkPoint.equals("")) {
53   -
54 40 String bPloygonGridArray[] = bParkPoint.split(",");
55   -
56 41 int bLen_ = bPloygonGridArray.length;
57   -
58 42 for(int b = 0 ;b<bLen_;b++) {
59   -
60 43 String tempArray[]= bPloygonGridArray[b].split(" ");
61   -
62 44 Location resultPoint = FromBDPointToWGSPoint(tempArray[0],tempArray[1]);
63   -
64 45 if(b==0) {
65   -
66 46 gParkPoint = resultPoint.getLng() + " " + resultPoint.getLat();
67   -
68 47 }else {
69   -
70 48 gParkPoint = gParkPoint + ',' + resultPoint.getLng() + " " + resultPoint.getLat();
71   -
72 49 }
73   -
74 50 }
75 51  
76 52 }
77   -
78 53 if(bParkPoint.equals(""))
79 54 bParkPoint = null;
80 55 else
... ... @@ -84,169 +59,92 @@ public class CarParkServiceImpl extends BaseServiceImpl&lt;CarPark, Integer&gt; implem
84 59 gParkPoint = null;
85 60 else
86 61 gParkPoint = "POLYGON((" + gParkPoint +"))";
87   -
88   - /*bParkPoint = "POLYGON((" + bParkPoint +"))";
89   -
90   - gParkPoint = "POLYGON((" + gParkPoint +"))";*/
91   -
92 62 // 地理位置中心点(百度坐标)
93 63 String bCenterPoint = map.get("bCenterPoint").equals("") ? "" : map.get("bCenterPoint").toString();
94   -
95   - // 地理位置中心点(WGS坐标)
96   - // String gCenterPoint = map.get("gCenterPoint").equals("") ? "" : map.get("gCenterPoint").toString();
97   -
98 64 String bJwpointsArray[] =null;
99   -
100 65 if(bCenterPoint!=null) {
101   -
102 66 bJwpointsArray = bCenterPoint.split(" ");
103   -
104 67 }
105   -
106 68 String gCenterPoint = null;
107   -
108 69 if(bJwpointsArray.length>0) {
109   -
110 70 Location resultPoint = FromBDPointToWGSPoint(bJwpointsArray[0],bJwpointsArray[1]);
111   -
112 71 gCenterPoint = String.valueOf(resultPoint.getLng()) + " " + String.valueOf(resultPoint.getLat());
113   -
114 72 }
115   -
116 73 // 坐标类型
117 74 String dbType = map.get("dbType").equals("") ? "" : map.get("dbType").toString();
118   -
119 75 // 图形类型
120 76 String shapesType = map.get("shapesType").equals("") ? "" : map.get("shapesType").toString();
121   -
122 77 // 半径
123 78 Integer radius = map.get("radius").equals("") ? null : Integer.parseInt(map.get("radius").toString());
124   -
125 79 // 面积
126 80 Double area = map.get("area").equals("") ? 0.0 : Double.parseDouble(map.get("area").toString());
127   -
128 81 // 公司
129 82 String company = map.get("company").equals("") ? "" : map.get("company").toString();
130   -
131 83 // 分公司
132   - /*String brancheCompany = map.get("brancheCompany").equals("") ? "" : map.get("brancheCompany").toString();*/
133   - String brancheCompany="";
134   -
  84 + String brancheCompany = map.get("brancheCompany").equals("") ? "" : map.get("brancheCompany").toString();
135 85 // 是否撤销
136 86 Integer destroy = map.get("destroy").equals("") ? null : Integer.parseInt(map.get("destroy").toString());
137   -
138 87 // 版本号
139 88 Integer versions = map.get("versions").equals("") ? null : Integer.parseInt(map.get("versions").toString());
140   -
141 89 // 描述与说明
142 90 String descriptions = map.get("descriptions").equals("") ? "" : map.get("descriptions").toString();
143   -
144 91 SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
145   -
146 92 Date date = new Date();
147   -
148 93 // 创建日期
149 94 String createDate = formatter.format(date);
150   -
151 95 // 修改日期
152 96 String updateDate = formatter.format(date);
153   -
154 97 // 创建人
155 98 Integer createBy = map.get("createBy").equals("") ? null : Integer.parseInt(map.get("createBy").toString());
156   -
157 99 // 修改人
158 100 Integer updateBy = map.get("updateBy").equals("") ? null : Integer.parseInt(map.get("updateBy").toString());
159   -
160   -
161   -
162   -
163 101 carParkRepository.carParkSave(area, company, parkCode, parkName,
164   -
165 102 brancheCompany, createBy, createDate, descriptions, destroy,
166   -
167 103 updateBy, updateDate, versions, bCenterPoint, bParkPoint,
168   -
169 104 dbType, gCenterPoint, gParkPoint, radius, shapesType);
170   -
171 105 resultMap.put("status", ResponseCode.SUCCESS);
172   -
173 106 } catch (Exception e) {
174   -
175 107 resultMap.put("status", ResponseCode.ERROR);
176   -
177 108 logger.error("save erro.", e);
178   -
179 109 }
180   -
181 110 return resultMap;
182 111 }
183 112  
184 113 @Override
185 114 public List<Map<String, Object>> findCarParkInfoFormId(Map<String, Object> map) {
186   -
187 115 // 获取线路ID
188 116 Integer id = map.get("id").equals("") ? 0 : Integer.parseInt(map.get("id").toString());
189   -
190 117 List<Object[]> objects = carParkRepository.findCarParkInfoFormId(id);
191   -
192 118 List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
193   -
194 119 int len = objects.size();
195   -
196 120 if(objects.size()>0) {
197   -
198 121 for(int i = 0 ; i < len; i++) {
199   -
200 122 Map<String, Object> tempM = new HashMap<String,Object>();
201   -
202 123 tempM.put("carParkId", objects.get(i)[0]);
203   -
204 124 tempM.put("carParkArea", objects.get(i)[1]);
205   -
206 125 tempM.put("carParkCompany", objects.get(i)[2]);
207   -
208 126 tempM.put("carParkCode", objects.get(i)[3]);
209   -
210 127 tempM.put("carParkName", objects.get(i)[4]);
211   -
212 128 tempM.put("carParkBrancheCompany", objects.get(i)[5]);
213   -
214 129 tempM.put("carParkCreateBy", objects.get(i)[6]);
215   -
216 130 tempM.put("carParkCreateDate", objects.get(i)[7]);
217   -
218 131 tempM.put("carParkDescriptions", objects.get(i)[8]);
219   -
220 132 tempM.put("carParkDestroy", objects.get(i)[9]);
221   -
222 133 tempM.put("carParkUpdate", objects.get(i)[10]);
223   -
224 134 tempM.put("carParkUpdateDate", objects.get(i)[11]);
225   -
226 135 tempM.put("carParkVersions", objects.get(i)[12]);
227   -
228 136 tempM.put("carParkBcenterPoint", objects.get(i)[13]);
229   -
230 137 tempM.put("carParkBparkPoint", objects.get(i)[14]);
231   -
232 138 tempM.put("carParkGcenterPoint", objects.get(i)[15]);
233   -
234 139 tempM.put("carParkGparkPoint", objects.get(i)[16]);
235   -
236 140 tempM.put("carParkDBtype", objects.get(i)[17]);
237   -
238 141 tempM.put("carParkRadius", objects.get(i)[18]);
239   -
240 142 tempM.put("carParkShapesType", objects.get(i)[19]);
241   -
242 143 resultList.add(tempM);
243 144 }
244   -
245 145 }
246   -
247 146 return resultList;
248 147 }
249   -
250 148 /**
251 149 * 修改停车场信息
252 150 *
... ... @@ -265,90 +163,54 @@ public class CarParkServiceImpl extends BaseServiceImpl&lt;CarPark, Integer&gt; implem
265 163 @Override
266 164 public Map<String, Object> carParkUpdate(Map<String, Object> map) {
267 165 Map<String, Object> resultMap = new HashMap<String, Object>();
268   -
269 166 try {
270   -
271 167 // id
272 168 Integer id = map.get("id").equals("") ? null : Integer.parseInt(map.get("id").toString());
273   -
274 169 if(id!=null) {
275   -
276 170 // 面积
277 171 Double area = map.get("area").equals("") ? null : Double.parseDouble(map.get("area").toString());
278   -
279 172 // 中心点(百度坐标)
280 173 String bCenterPoint = map.get("bCenterPoint").equals("") ? "" : map.get("bCenterPoint").toString();
281   -
282 174 // 图形坐标点集合(百度坐标)
283 175 String bParkPoint = map.get("bParkPoint").equals("") ? "" : map.get("bParkPoint").toString();
284   -
285 176 // 分公司
286   - /*String brancheCompany = map.get("brancheCompany").equals("")? "" :map.get("brancheCompany").toString();*/
287   - String brancheCompany = "";
288   -
  177 + String brancheCompany = map.get("brancheCompany").equals("")? "" :map.get("brancheCompany").toString();
  178 + //String brancheCompany = "";
289 179 // 公司
290 180 String company = map.get("company").equals("") ? "" : map.get("company").toString();
291   -
292 181 // 坐标类型
293 182 String dbType = map.get("dbType").equals("") ? "" : map.get("dbType").toString();
294   -
295 183 // 描述与说明
296 184 String descriptions = map.get("descriptions").equals("") ? "" : map.get("descriptions").toString();
297   -
298 185 // 是否撤销
299 186 Integer destroy = map.get("destroy").equals("") ? null : Integer.parseInt(map.get("destroy").toString());
300   -
301 187 // 中心点(WGS坐标)
302 188 // String gCenterPoint = map.get("gCenterPoint").equals("") ? "" : map.get("gCenterPoint").toString();
303   -
304 189 String bJwpointsArray[] =null;
305   -
306 190 if(bCenterPoint!=null) {
307   -
308 191 bJwpointsArray = bCenterPoint.split(" ");
309   -
310 192 }
311   -
312 193 String gCenterPoint =null;
313   -
314 194 if(bJwpointsArray.length>0) {
315   -
316 195 Location resultPoint = FromBDPointToWGSPoint(bJwpointsArray[0],bJwpointsArray[1]);
317   -
318 196 gCenterPoint = String.valueOf(resultPoint.getLng()) + " " + String.valueOf(resultPoint.getLat());
319   -
320 197 }
321   -
322 198 // 图形坐标点集合(WGS坐标)
323 199 // String gParkPoint = map.get("gParkPoint").equals("") ? "" : map.get("gParkPoint").toString();
324   -
325 200 // 多边形WGS坐标点集合
326 201 String gParkPoint ="";
327   -
328 202 if(!bParkPoint.equals("")) {
329   -
330 203 String bPloygonGridArray[] = bParkPoint.split(",");
331   -
332 204 int bLen_ = bPloygonGridArray.length;
333   -
334 205 for(int b = 0 ;b<bLen_;b++) {
335   -
336 206 String tempArray[]= bPloygonGridArray[b].split(" ");
337   -
338 207 Location resultPoint = FromBDPointToWGSPoint(tempArray[0],tempArray[1]);
339   -
340 208 if(b==0) {
341   -
342 209 gParkPoint = resultPoint.getLng() + " " + resultPoint.getLat();
343   -
344 210 }else {
345   -
346 211 gParkPoint = gParkPoint + ',' + resultPoint.getLng() + " " + resultPoint.getLat();
347   -
348 212 }
349   -
350 213 }
351   -
352 214 }
353 215 if(bParkPoint.equals(""))
354 216 bParkPoint = null;
... ... @@ -362,69 +224,51 @@ public class CarParkServiceImpl extends BaseServiceImpl&lt;CarPark, Integer&gt; implem
362 224 /*bParkPoint = "POLYGON((" + bParkPoint +"))";
363 225  
364 226 gParkPoint = "POLYGON((" + gParkPoint +"))";*/
365   -
366 227 // 编码
367 228 String parkCode = map.get("parkCode").equals("") ? "" : map.get("parkCode").toString();
368   -
369 229 // 名称
370 230 String parkName = map.get("parkName").equals("") ? "" : map.get("parkName").toString();
371   -
372 231 // 半径
373 232 Integer radius = map.get("radius").equals("") ? null : Integer.parseInt(map.get("radius").toString());
374   -
375 233 // 图形类型
376 234 String shapesType = map.get("shapesType").equals("") ? "" : map.get("shapesType").toString();
377   -
378 235 // 版本
379 236 Integer versions = map.get("versions").equals("") ? null : Integer.parseInt(map.get("versions").toString());
380   -
381 237 // 创建人
382 238 Integer createBy = map.get("createBy").equals("") ? null : Integer.parseInt(map.get("createBy").toString());
383   -
384 239 // 创建日期
385 240 String createDate = map.get("createDate").equals("") ? "" : map.get("createDate").toString();
386   -
387 241 Integer updateBy = map.get("updateBy").equals("") ? null : Integer.parseInt(map.get("updateBy").toString());
388   -
389 242 SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
390   -
391 243 Date date = new Date();
392   -
393 244 // 修改日期
394 245 String updateDate = formatter.format(date);
395   -
396 246 carParkRepository.carParkUpdate(area, company, parkCode, parkName, brancheCompany, createBy, createDate, descriptions, destroy, updateBy, updateDate, versions, bCenterPoint, gCenterPoint, bParkPoint, gParkPoint, dbType, radius, shapesType, id);
397   -
398 247 }
399   -
400 248 resultMap.put("status", ResponseCode.SUCCESS);
401   -
402 249 } catch (Exception e) {
403   -
404 250 resultMap.put("status", ResponseCode.ERROR);
405   -
406 251 logger.error("save erro.", e);
407   -
408 252 }
409   -
410 253 return resultMap;
411 254 }
412   -
413 255 /** 百度坐标转WGS坐标 */
414 256 public Location FromBDPointToWGSPoint(String bLonx,String bLatx) {
415   -
416 257 double lng = Double.parseDouble(bLonx);
417   -
418 258 double lat = Double.parseDouble(bLatx);
419   -
420 259 Location bdLoc = TransGPS.LocationMake(lng, lat);
421   -
422 260 Location location = TransGPS.bd_decrypt(bdLoc);
423   -
424 261 Location WGSPoint = TransGPS.transformFromGCJToWGS(location);
425   -
426 262 return WGSPoint;
427   -
428 263 }
429   -
  264 +
  265 + @Override
  266 + public boolean selectTccInfoByCode(Map<String, Object> map) {
  267 + List<Object[]> arrayObj = carParkRepository.selectTccInfoByCode(map.get("parkCode").equals("") ? "" : map.get("parkCode").toString());
  268 + boolean tag = true;
  269 + if(arrayObj.size()>0) {
  270 + tag= false;
  271 + }
  272 + return tag;
  273 + }
430 274 }
... ...
src/main/java/com/bsth/service/realcontrol/impl/RealChartsServiceImpl.java
... ... @@ -259,7 +259,7 @@ public class RealChartsServiceImpl implements RealChartsService {
259 259 }
260 260 inStr = " (" + inStr.substring(1) + ")";
261 261  
262   - String sql = "SELECT ID,DFSJ,FCSJ_ACTUAL,ZDSJ,ZDSJ_ACTUAL,`STATUS`,XL_BM FROM bsth_c_s_sp_info_real WHERE schedule_date_str=:date AND concat_ws('', real_exec_date, dfsj)<:cdate and xl_bm in "+inStr+" ORDER BY dfsj";
  262 + String sql = "SELECT ID,DFSJ,FCSJ_ACTUAL,ZDSJ,ZDSJ_ACTUAL,`STATUS`,XL_BM FROM bsth_c_s_sp_info_real WHERE bc_type!='in' and bc_type!='out' and schedule_date_str=:date AND concat_ws('', real_exec_date, dfsj)<:cdate and xl_bm in "+inStr+" ORDER BY dfsj";
263 263  
264 264 MapSqlParameterSource parameters = new MapSqlParameterSource();
265 265 parameters.addValue("date", date);
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -12,6 +12,7 @@ import com.bsth.data.BasicData;
12 12 import com.bsth.data.LineConfigData;
13 13 import com.bsth.data.schedule.DayOfSchedule;
14 14 import com.bsth.data.schedule.SchAttrCalculator;
  15 +import com.bsth.data.schedule.SchModifyLog;
15 16 import com.bsth.data.schedule.ScheduleComparator;
16 17 import com.bsth.data.schedule.late_adjust.LateAdjustHandle;
17 18 import com.bsth.entity.Cars;
... ... @@ -52,7 +53,6 @@ import com.google.common.base.Splitter;
52 53 import com.google.common.collect.Lists;
53 54 import org.apache.commons.lang3.StringEscapeUtils;
54 55 import org.apache.commons.lang3.StringUtils;
55   -import org.drools.compiler.lang.dsl.DSLMapParser.statement_return;
56 56 import org.joda.time.format.DateTimeFormat;
57 57 import org.joda.time.format.DateTimeFormatter;
58 58 import org.slf4j.Logger;
... ... @@ -132,6 +132,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
132 132 @Autowired
133 133 CulateMileageService culateService;
134 134  
  135 + @Autowired
  136 + SchModifyLog schModifyLog;
  137 +
135 138 Logger logger = LoggerFactory.getLogger(this.getClass());
136 139  
137 140 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
... ... @@ -1171,10 +1174,14 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1171 1174 return rs;
1172 1175 }
1173 1176  
  1177 + String clZbh = map.get("clZbh");
  1178 + String jsy = map.get("jsy");
  1179 + if(!clZbh.equals(sch.getClZbh())
  1180 + || !jsy.equals(sch.getjGh() + "/" + sch.getjName()))
  1181 + schModifyLog.saveChangetochange(sch, clZbh, jsy);//为换人换车情况表写入数据
1174 1182 /**
1175 1183 * 换车
1176 1184 */
1177   - String clZbh = map.get("clZbh");
1178 1185 if (StringUtils.isNotEmpty(clZbh)) {
1179 1186 //换车
1180 1187 if (!carExist(sch.getGsBm(), clZbh)) {
... ... @@ -1189,7 +1196,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1189 1196 /**
1190 1197 * 换驾驶员
1191 1198 */
1192   - String jsy = map.get("jsy");
1193 1199 if (StringUtils.isNotEmpty(jsy) && jsy.indexOf("/") != -1) {
1194 1200 String jGh = jsy.split("/")[0];
1195 1201 String jName = getPersonName(sch.getGsBm(), jGh);
... ... @@ -1978,11 +1984,11 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1978 1984 int dtbcZ = 0, dtbc_mZ = 0, dtbc_aZ = 0;
1979 1985 int djgZ = 0, djg_mZ = 0, djg_aZ = 0, djg_timeZ = 0;
1980 1986 Map<String, Object> map = null;
1981   -
  1987 +
1982 1988 double xgssgl=0,xgljgl=0,lj=0,cj=0;
1983 1989 for (int i = 0; i < list.size(); i++) {
1984 1990 ScheduleRealInfo scheduleRealInfo = list.get(i);
1985   -
  1991 +
1986 1992 if (scheduleRealInfo != null) {
1987 1993 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
1988 1994 //计算实际里程,少驶里程,计划里程=实际里程+少驶里程
... ... @@ -1993,7 +1999,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1993 1999 if (childTaskPlans.isEmpty()) {
1994 2000 tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
1995 2001 jhlcOrig = scheduleRealInfo.getJhlcOrig() == null ? 0 : scheduleRealInfo.getJhlcOrig();
1996   -
  2002 +
1997 2003 if(jhlcOrig-tempJhlc>0){
1998 2004 xgssgl +=jhlcOrig-tempJhlc;
1999 2005 cj += jhlcOrig-tempJhlc;
... ... @@ -2005,8 +2011,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2005 2011 if (scheduleRealInfo.isSflj()) {
2006 2012 ljgl += tempJhlc;
2007 2013 ljglZ += tempJhlc;
2008   - }
2009   -
  2014 + }
  2015 +
2010 2016 if (scheduleRealInfo.getStatus() == -1) {
2011 2017 ssgl += tempJhlc;
2012 2018 ssglZ += tempJhlc;
... ... @@ -2771,7 +2777,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2771 2777 for(ScheduleRealInfo info:listInfo){
2772 2778 for(ScheduleRealInfo total:listTotal){
2773 2779 if(info.getjGh().equals(total.getjGh()) && info.getLpName().equals(total.getLpName()) && info.getClZbh().equals(total.getClZbh())){
2774   -
  2780 +
2775 2781 }
2776 2782 }
2777 2783 }*/
... ... @@ -2867,7 +2873,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2867 2873 for(ScheduleRealInfo info:listInfo){
2868 2874 for(ScheduleRealInfo total:listTotal){
2869 2875 if(info.getjGh().equals(total.getjGh()) && info.getLpName().equals(total.getLpName()) && info.getClZbh().equals(total.getClZbh())){
2870   -
  2876 +
2871 2877 }
2872 2878 }
2873 2879 }*/
... ... @@ -2944,7 +2950,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2944 2950 fage = false;
2945 2951 }
2946 2952 listS.add(scheduleRealInfo);
2947   -
  2953 +
2948 2954 /* if (scheduleRealInfo != null) {
2949 2955 //计划里程(主任务过滤掉临加班次),
2950 2956 //烂班里程(主任务烂班),
... ... @@ -2960,7 +2966,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2960 2966 || scheduleRealInfo.getBcType().equals("out"))) {
2961 2967 jhlc =Arith.add(jhlc,tempJhlc);
2962 2968 }
2963   -
  2969 +
2964 2970 if (scheduleRealInfo.getStatus() == -1) {
2965 2971 remMileage =Arith.add(remMileage,tempJhlc);
2966 2972 }
... ... @@ -3046,7 +3052,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3046 3052 ScheduleRealInfo sch;
3047 3053 //BiMap<String, String> map = BasicData.deviceId2NbbmMap.inverse();
3048 3054  
3049   - String jGh,jName,sGh,sName;
  3055 + String jGh = null,jName,sGh,sName;
3050 3056 for (ChangePersonCar cpc : cpcs) {
3051 3057  
3052 3058 sch = dayOfSchedule.get(cpc.getSchId());
... ... @@ -3067,6 +3073,12 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3067 3073 rs.put("status", ResponseCode.ERROR);
3068 3074 return rs;
3069 3075 }
  3076 + }
  3077 +
  3078 + //为换人换车情况表写入数据
  3079 + schModifyLog.saveChangetochange(sch, cpc);
  3080 +
  3081 + if (StringUtils.isNotEmpty(cpc.getJsy())) {
3070 3082 //换驾驶员
3071 3083 persoChange(sch, jGh);
3072 3084 set.add(sch);
... ... @@ -4012,13 +4024,17 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4012 4024 String xlName = map.get("xlName").toString();
4013 4025 String state = map.get("state").toString();
4014 4026 String type = map.get("type").toString();
4015   -
  4027 +
4016 4028 List<Map<String, Object>> dataList2 = new ArrayList<Map<String, Object>>();
4017 4029 List<Map<String, Object>> dataList3 = new ArrayList<Map<String, Object>>();
4018 4030 List<Map<String, Object>> list1 = this.statisticsDaily(line, date, xlName, null);
4019 4031 List<ScheduleRealInfo> list2 = this.queryUserInfo(line, date, state);
4020 4032 List<ScheduleRealInfo> list3 = this.realScheduleList(line, date);
4021 4033  
  4034 + Map<String, Object> nMap=new HashMap<String, Object>();
  4035 + nMap.put("date", date);
  4036 + nMap.put("jls", list1.get(0).get("jls"));
  4037 + nMap.put("sjgl", list1.get(0).get("sjgl"));
4022 4038 for (Map<String, Object> m : list1) {
4023 4039 // m.put("ssgl", m.get("ssgl"));
4024 4040 // m.put("ssbc", m.get("ssbc"));
... ... @@ -4132,7 +4148,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4132 4148 sdfSimple = new SimpleDateFormat("yyyyMM");
4133 4149 sourcePath = path + "mould/scheduleDaily_m.xls";
4134 4150 }
4135   - ee.excelReplace(listI, new Object[]{m}, sourcePath,
  4151 + ee.excelReplace(listI, new Object[]{nMap}, sourcePath,
4136 4152 path + "export/调度日报" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
4137 4153 } catch (Exception e) {
4138 4154 // TODO: handle exception
... ...
src/main/java/com/bsth/service/report/ReportService.java
... ... @@ -3,6 +3,7 @@ package com.bsth.service.report;
3 3 import java.util.List;
4 4 import java.util.Map;
5 5  
  6 +import com.bsth.entity.StationRoute;
6 7 import com.bsth.entity.excep.ArrivalInfo;
7 8 import com.bsth.entity.realcontrol.ScheduleRealInfo;
8 9  
... ... @@ -14,7 +15,8 @@ public interface ReportService {
14 15 List<ArrivalInfo> queryListZdxx(String line,String date,String clzbh,String sjfc,String sjdd);
15 16  
16 17 List<ArrivalInfo> queryListClzd(String line,String zd,String zdlx,String fcsj,String ddsj);
17   -
  18 + List<StationRoute> queryStrinon(String line,int zd);
  19 + List<Map<String, Object>> queryInOutStrtion(String line,String date,int zd,String lzsj);
18 20 List<Map<String, String>> sreachZd(String line,int zdlx,String zd);
19 21  
20 22 List<Object[]> historyMessageCount(String line, String date, String code);
... ...
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
... ... @@ -59,6 +59,8 @@ public class ReportServiceImpl implements ReportService{
59 59 CulateMileageService culateService;
60 60 @Autowired
61 61 LineRepository lineRepository;
  62 + @Autowired
  63 + StationRouteRepository stationRouteRepository;
62 64 @Override
63 65 public List<ScheduleRealInfo> queryListBczx(String line, String date,String clzbh) {
64 66 // TODO Auto-generated method stub
... ... @@ -1469,4 +1471,185 @@ public class ReportServiceImpl implements ReportService{
1469 1471 }
1470 1472 return list;
1471 1473 }
  1474 +
  1475 + public List<ArrivalInfo> load3(String line, String date, int zd){
  1476 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1477 + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
  1478 + Long date1=0L;
  1479 + Long date2=0L;
  1480 + Calendar cal = Calendar.getInstance();
  1481 + try {
  1482 + Date dates1 = simpleDateFormat.parse(date+" 00:00:01");
  1483 + Date dates2=simpleDateFormat.parse(date+" 23:59:59");
  1484 + date1=dates1.getTime();
  1485 + date2=dates2.getTime();
  1486 + cal.setTime(dates1);
  1487 + } catch (ParseException e1) {
  1488 + // TODO Auto-generated catch block
  1489 + e1.printStackTrace();
  1490 + }
  1491 + //周数,表分区字段
  1492 + int weeks_year1 = cal.get(Calendar.WEEK_OF_YEAR);
  1493 + List<ArrivalInfo> list = null;
  1494 + Connection conn = null;
  1495 + PreparedStatement ps = null;
  1496 + ResultSet rs = null;
  1497 +
  1498 + String sql = "select * from bsth_c_arrival_info where line_id=? AND weeks_year=? "
  1499 + + " AND ts >= ? AND ts <=? AND up_down=? order by device_id,ts";
  1500 + try{
  1501 + conn = DBUtils_MS.getConnection();
  1502 + ps = conn.prepareStatement(sql);
  1503 + ps.setString(1, line);
  1504 + ps.setInt(2, weeks_year1);
  1505 + ps.setLong(3, date1);
  1506 + ps.setLong(4, date2);
  1507 + ps.setInt(5, zd);
  1508 + rs = ps.executeQuery();
  1509 +
  1510 + list = resultSet2Set(rs);
  1511 + }catch(Exception e){
  1512 + logger.error("", e);
  1513 + }finally {
  1514 + DBUtils_MS.close(rs, ps, conn);
  1515 + }
  1516 + return list;
  1517 + }
  1518 + @Override
  1519 + public List<Map<String, Object>> queryInOutStrtion(String line, String date, int zd,String lzsj) {
  1520 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1521 + //查询线路所有的站点
  1522 + List<ArrivalInfo> arrInfoList=this.load3(line, date, zd);
  1523 + List<StationRoute> listStation= stationRouteRepository.findByLine(line,zd);
  1524 + List<Map<String, Object>> inoutList=new ArrayList<Map<String,Object>>();
  1525 + //保存的所以的站点信息
  1526 + Map<String, Object> map1=new HashMap<String,Object>();
  1527 + map1.put("bc", "");
  1528 + map1.put("nbbm", "");
  1529 +
  1530 + //所有的班次信息(实际排班排序)
  1531 + List<ScheduleRealInfo> realList= scheduleRealInfoRepository.scheduleByDateAndLineInOut(line, date,zd+"");
  1532 + for (int i = 0; i < listStation.size(); i++) {
  1533 + map1.put(listStation.get(i).getStationCode()+"in"
  1534 + , listStation.get(i).getStationName());
  1535 + map1.put(listStation.get(i).getStationCode()+"out"
  1536 + , (i+1));
  1537 + }
  1538 + inoutList.add(map1);
  1539 +
  1540 + for (int i = 0; i < realList.size(); i++) {
  1541 + ScheduleRealInfo sinfo=realList.get(i);
  1542 + String devuceId=BasicData.deviceId2NbbmMap.inverse().get(sinfo.getClZbh());
  1543 + String sjfcsj=sinfo.getRealExecDate()+" "+sinfo.getFcsjActual()+":00";
  1544 + String sjddsj=sinfo.getRealExecDate()+" "+sinfo.getZdsjActual()+":59";
  1545 +
  1546 + try {
  1547 + Date dates1 = simpleDateFormat.parse(sjfcsj);
  1548 + Date dates2=simpleDateFormat.parse(sjddsj);
  1549 + Long date1=dates1.getTime();
  1550 + Long date2=dates2.getTime();
  1551 + List<ArrivalInfo> arrList=new ArrayList<ArrivalInfo>();
  1552 + for (int j = 0; j < arrInfoList.size(); j++) {
  1553 + ArrivalInfo a=arrInfoList.get(j);
  1554 + if(a.getDeviceId().equals(devuceId) && a.getTs()>=date1 && a.getTs()<=date2){
  1555 + arrList.add(a);
  1556 + }
  1557 + }
  1558 +
  1559 + Map<String, Object> map2=new HashMap<String,Object>();
  1560 + map2.put("bc", (i+1));
  1561 + map2.put("nbbm", sinfo.getClZbh());
  1562 +
  1563 + for (int j = 0; j < listStation.size(); j++) {
  1564 + StationRoute s=listStation.get(j);
  1565 + List<ArrivalInfo> arrivalList=new ArrayList<ArrivalInfo>();
  1566 + for (int j2 = 0; j2 < arrList.size(); j2++) {
  1567 + ArrivalInfo a=arrList.get(j2);
  1568 + if(s.getStationCode().equals(a.getStopNo())){
  1569 + arrivalList.add(a);
  1570 + }
  1571 + }
  1572 + Map<String, String> m=this.strInOut(arrivalList,lzsj);
  1573 +
  1574 + map2.put(s.getStationCode()+"in", m.get("in"));
  1575 + map2.put(s.getStationCode()+"out", m.get("out"));
  1576 + map2.put(s.getStationCode(), m.get("type"));
  1577 + }
  1578 + inoutList.add(map2);
  1579 + } catch (ParseException e) {
  1580 + // TODO Auto-generated catch block
  1581 + e.printStackTrace();
  1582 + }
  1583 + }
  1584 + return inoutList;
  1585 + }
  1586 +
  1587 + public Map<String, String> strInOut(List<ArrivalInfo> lists,String lzsj){
  1588 + String inout="";
  1589 + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
  1590 + Long in=0L;
  1591 + Long out=0L;
  1592 + for(int i=0;i<lists.size();i++){
  1593 + ArrivalInfo t1=lists.get(i);
  1594 + if(t1.getInOut()==0){
  1595 + in=t1.getTs();
  1596 + t1.setJzsj(sdf.format(new Date(t1.getTs())));
  1597 + for(int j=0;j<lists.size();j++){
  1598 + ArrivalInfo t2=lists.get(j);
  1599 + if(t2.getInOut()==1 && t2.getDeviceId().equals(t1.getDeviceId())
  1600 + && t2.getStopNo().equals(t1.getStopNo())
  1601 + && t2.getTs()>t1.getTs()){
  1602 + t1.setCzsj(sdf.format(new Date(t2.getTs())));
  1603 + out =t2.getTs();
  1604 + break;
  1605 + }
  1606 + }
  1607 +
  1608 + }else{
  1609 + out =t1.getTs();
  1610 + t1.setCzsj(sdf.format(new Date(t1.getTs())));
  1611 + for(int j=0;j<lists.size();j++){
  1612 + ArrivalInfo t2=lists.get(j);
  1613 + if(t2.getInOut()==0 && t2.getDeviceId().equals(t1.getDeviceId())
  1614 + && t2.getStopNo().equals(t1.getStopNo())
  1615 + && t2.getTs()>t1.getTs()){
  1616 + in =t2.getTs();
  1617 + t1.setJzsj(sdf.format(new Date(t2.getTs())));
  1618 + break;
  1619 + }
  1620 + }
  1621 + }
  1622 + }
  1623 +
  1624 + Map<String, String> map=new HashMap<String,String>();
  1625 + if(in>0 ){
  1626 + map.put("in",sdf.format(new Date(in)));
  1627 +
  1628 + }else{
  1629 + map.put("in", "");
  1630 + }
  1631 + if(out>0){
  1632 + map.put("out", sdf.format(new Date(out)));
  1633 + }else{
  1634 + map.put("out", "");
  1635 + }
  1636 + Long sj=1000000000L;
  1637 + if(!lzsj.trim().equals("")){
  1638 + sj =Long.parseLong(lzsj);
  1639 + }
  1640 + if(in>0 && out >0){
  1641 + if((out-in)/1000>sj){
  1642 + map.put("type", "y");
  1643 + }else{
  1644 + map.put("type", "n");
  1645 + }
  1646 + }
  1647 + return map;
  1648 + }
  1649 + @Override
  1650 + public List<StationRoute> queryStrinon(String line, int zd) {
  1651 + // TODO Auto-generated method stub
  1652 + List<StationRoute> listStation= stationRouteRepository.findByLine(line,zd);
  1653 + return listStation;
  1654 + }
1472 1655 }
... ...
src/main/resources/datatools/ktrs/ttinfodetailDataOutputMetaData.ktr
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<transformation>
3   - <info>
4   - <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x51fa;&#x5143;&#x6570;&#x636e;</name>
5   - <description/>
6   - <extended_description/>
7   - <trans_version/>
8   - <trans_type>Normal</trans_type>
9   - <trans_status>0</trans_status>
10   - <directory>&#x2f;</directory>
11   - <parameters>
12   - <parameter>
13   - <name>filepath</name>
14   - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;ttinfodetail_test.xls</default_value>
15   - <description>&#x65f6;&#x523b;&#x8868;excel&#x5bfc;&#x51fa;&#x6587;&#x4ef6;&#x8def;&#x5f84;&#x540d;</description>
16   - </parameter>
17   - <parameter>
18   - <name>injectktrfile</name>
19   - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataOutput.ktr</default_value>
20   - <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>
21   - </parameter>
22   - <parameter>
23   - <name>ttinfoid</name>
24   - <default_value>56</default_value>
25   - <description>&#x65f6;&#x523b;&#x8868;id</description>
26   - </parameter>
27   - </parameters>
28   - <log>
29   -<trans-log-table><connection/>
30   -<schema/>
31   -<table/>
32   -<size_limit_lines/>
33   -<interval/>
34   -<timeout_days/>
35   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
36   -<perf-log-table><connection/>
37   -<schema/>
38   -<table/>
39   -<interval/>
40   -<timeout_days/>
41   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
42   -<channel-log-table><connection/>
43   -<schema/>
44   -<table/>
45   -<timeout_days/>
46   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
47   -<step-log-table><connection/>
48   -<schema/>
49   -<table/>
50   -<timeout_days/>
51   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
52   -<metrics-log-table><connection/>
53   -<schema/>
54   -<table/>
55   -<timeout_days/>
56   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
57   - </log>
58   - <maxdate>
59   - <connection/>
60   - <table/>
61   - <field/>
62   - <offset>0.0</offset>
63   - <maxdiff>0.0</maxdiff>
64   - </maxdate>
65   - <size_rowset>10000</size_rowset>
66   - <sleep_time_empty>50</sleep_time_empty>
67   - <sleep_time_full>50</sleep_time_full>
68   - <unique_connections>N</unique_connections>
69   - <feedback_shown>Y</feedback_shown>
70   - <feedback_size>50000</feedback_size>
71   - <using_thread_priorities>Y</using_thread_priorities>
72   - <shared_objects_file/>
73   - <capture_step_performance>N</capture_step_performance>
74   - <step_performance_capturing_delay>1000</step_performance_capturing_delay>
75   - <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
76   - <dependencies>
77   - </dependencies>
78   - <partitionschemas>
79   - </partitionschemas>
80   - <slaveservers>
81   - </slaveservers>
82   - <clusterschemas>
83   - </clusterschemas>
84   - <created_user>-</created_user>
85   - <created_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</created_date>
86   - <modified_user>-</modified_user>
87   - <modified_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</modified_date>
88   - <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
89   - <is_key_private>N</is_key_private>
90   - </info>
91   - <notepads>
92   - <notepad>
93   - <note>TODO&#xff1a;&#x5982;&#x679c;groupby &#x52a0;&#x5165;bctype&#xff0c;&#xa;&#x5219;&#x4ee5;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;&#xff0c;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5206;&#x7ec4;&#x7684;&#x6570;&#x636e;&#x53ef;&#x80fd;&#x91cd;&#x590d;&#xff0c;&#xa;&#x5e94;&#x4e3a;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x53ef;&#x80fd;&#x4e0d;&#x4e00;&#x6837;&#xff08;&#x5bfc;&#x5165;&#x4e4b;&#x540e;&#x4eba;&#x4e3a;&#x4fee;&#x6539;&#x7684;&#xff0c;&#x5982;&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6539;&#x6210;&#x533a;&#x95f4;&#xff09;&#xff0c;&#xa;&#x56e0;&#x4e3a;&#x5bfc;&#x51fa;&#x65f6;&#x5fc5;&#x987b;&#x6570;&#x636e;&#x4e0d;&#x91cd;&#x590d;&#xff0c;&#x8fd9;&#x91cc;&#x7684;&#x89e3;&#x51b3;&#x65b9;&#x6cd5;&#xff0c;&#x53ea;&#x4f7f;&#x7528;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;&#x5206;&#x7ec4;&#xff0c;&#xa;&#x4ee5;&#x540e;&#x5efa;&#x8bae;&#xff0c;&#x8fd8;&#x662f;&#x539f;&#x6765;&#x7684;&#x65b9;&#x5f0f;&#x5206;&#x7ec4;&#xff0c;&#x7136;&#x540e;&#x628a;&#x66f4;&#x65b0;&#x65f6;&#x95f4;&#x665a;&#x7684;&#x53bb;&#x9664;&#xa;&#xa;&#x4ee5;&#x540e;&#x6539;&#x6210;&#x53bb;&#x9664;&#x91cd;&#x590d;&#x7eaa;&#x5f55;</note>
94   - <xloc>37</xloc>
95   - <yloc>309</yloc>
96   - <width>406</width>
97   - <heigth>122</heigth>
98   - <fontname>YaHei Consolas Hybrid</fontname>
99   - <fontsize>12</fontsize>
100   - <fontbold>N</fontbold>
101   - <fontitalic>N</fontitalic>
102   - <fontcolorred>0</fontcolorred>
103   - <fontcolorgreen>0</fontcolorgreen>
104   - <fontcolorblue>0</fontcolorblue>
105   - <backgroundcolorred>255</backgroundcolorred>
106   - <backgroundcolorgreen>205</backgroundcolorgreen>
107   - <backgroundcolorblue>112</backgroundcolorblue>
108   - <bordercolorred>100</bordercolorred>
109   - <bordercolorgreen>100</bordercolorgreen>
110   - <bordercolorblue>100</bordercolorblue>
111   - <drawshadow>Y</drawshadow>
112   - </notepad>
113   - </notepads>
114   - <connection>
115   - <name>192.168.168.1_jwgl_dw</name>
116   - <server>192.168.168.1</server>
117   - <type>ORACLE</type>
118   - <access>Native</access>
119   - <database>orcl</database>
120   - <port>1521</port>
121   - <username>jwgl_dw</username>
122   - <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
123   - <servername/>
124   - <data_tablespace/>
125   - <index_tablespace/>
126   - <attributes>
127   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
128   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
129   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
130   - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
131   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
132   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
133   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
134   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
135   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
136   - </attributes>
137   - </connection>
138   - <connection>
139   - <name>bus_control_variable</name>
140   - <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
141   - <type>MYSQL</type>
142   - <access>Native</access>
143   - <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
144   - <port>3306</port>
145   - <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
146   - <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
147   - <servername/>
148   - <data_tablespace/>
149   - <index_tablespace/>
150   - <attributes>
151   - <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
152   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
153   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
154   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
155   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
156   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
157   - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
158   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
159   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
160   - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
161   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
162   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
163   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
164   - </attributes>
165   - </connection>
166   - <connection>
167   - <name>bus_control_&#x516c;&#x53f8;_201</name>
168   - <server>localhost</server>
169   - <type>MYSQL</type>
170   - <access>Native</access>
171   - <database>control</database>
172   - <port>3306</port>
173   - <username>root</username>
174   - <password>Encrypted </password>
175   - <servername/>
176   - <data_tablespace/>
177   - <index_tablespace/>
178   - <attributes>
179   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
180   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
181   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
182   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
183   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
184   - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
185   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
186   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
187   - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
188   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
189   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
190   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
191   - </attributes>
192   - </connection>
193   - <connection>
194   - <name>bus_control_&#x672c;&#x673a;</name>
195   - <server>localhost</server>
196   - <type>MYSQL</type>
197   - <access>Native</access>
198   - <database>control</database>
199   - <port>3306</port>
200   - <username>root</username>
201   - <password>Encrypted </password>
202   - <servername/>
203   - <data_tablespace/>
204   - <index_tablespace/>
205   - <attributes>
206   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
207   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
208   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
209   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
210   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
211   - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
212   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
213   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
214   - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
215   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
216   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
217   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
218   - </attributes>
219   - </connection>
220   - <connection>
221   - <name>xlab_mysql_youle</name>
222   - <server>101.231.124.8</server>
223   - <type>MYSQL</type>
224   - <access>Native</access>
225   - <database>xlab_youle</database>
226   - <port>45687</port>
227   - <username>xlab-youle</username>
228   - <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
229   - <servername/>
230   - <data_tablespace/>
231   - <index_tablespace/>
232   - <attributes>
233   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
234   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
235   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
236   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
237   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
238   - <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
239   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
240   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
241   - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
242   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
243   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
244   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
245   - </attributes>
246   - </connection>
247   - <connection>
248   - <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
249   - <server>localhost</server>
250   - <type>MYSQL</type>
251   - <access>Native</access>
252   - <database>xlab_youle</database>
253   - <port>3306</port>
254   - <username>root</username>
255   - <password>Encrypted </password>
256   - <servername/>
257   - <data_tablespace/>
258   - <index_tablespace/>
259   - <attributes>
260   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
261   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
262   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
263   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
264   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
265   - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
266   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
267   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
268   - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
269   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
270   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
271   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
272   - </attributes>
273   - </connection>
274   - <connection>
275   - <name>xlab_youle</name>
276   - <server/>
277   - <type>MYSQL</type>
278   - <access>JNDI</access>
279   - <database>xlab_youle</database>
280   - <port>1521</port>
281   - <username/>
282   - <password>Encrypted </password>
283   - <servername/>
284   - <data_tablespace/>
285   - <index_tablespace/>
286   - <attributes>
287   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
288   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
289   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
290   - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
291   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
292   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
293   - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
294   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
295   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
296   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
297   - </attributes>
298   - </connection>
299   - <order>
300   - <hop> <from>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
301   - <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</from><to>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</to><enabled>Y</enabled> </hop>
302   - <hop> <from>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</from><to>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</to><enabled>Y</enabled> </hop>
303   - <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
304   - <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
305   - <hop> <from>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
306   - <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
307   - <hop> <from>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
308   - <hop> <from>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
309   - <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
310   - </order>
311   - <step>
312   - <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>
313   - <type>MetaInject</type>
314   - <description/>
315   - <distribute>Y</distribute>
316   - <custom_distribution/>
317   - <copies>1</copies>
318   - <partitioning>
319   - <method>none</method>
320   - <schema_name/>
321   - </partitioning>
322   - <specification_method>filename</specification_method>
323   - <trans_object_id/>
324   - <trans_name/>
325   - <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>
326   - <directory_path/>
327   - <source_step/>
328   - <source_output_fields> </source_output_fields> <target_file/>
329   - <no_execution>N</no_execution>
330   - <stream_source_step/>
331   - <stream_target_step/>
332   - <mappings> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
333   - <target_attribute_key>TARGET_TYPE</target_attribute_key>
334   - <target_detail>Y</target_detail>
335   - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
336   - <source_field>targettype</source_field>
337   - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
338   - <target_attribute_key>TYPE</target_attribute_key>
339   - <target_detail>Y</target_detail>
340   - <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
341   - <source_field>fieldtype</source_field>
342   - </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
343   - <target_attribute_key>NAME</target_attribute_key>
344   - <target_detail>Y</target_detail>
345   - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
346   - <source_field>valuefieldname</source_field>
347   - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
348   - <target_attribute_key>NAME</target_attribute_key>
349   - <target_detail>Y</target_detail>
350   - <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
351   - <source_field>fieldname</source_field>
352   - </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
353   - <target_attribute_key>TARGET_NAME</target_attribute_key>
354   - <target_detail>Y</target_detail>
355   - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
356   - <source_field>targetfieldname</source_field>
357   - </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
358   - <target_attribute_key>KEY_VALUE</target_attribute_key>
359   - <target_detail>Y</target_detail>
360   - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
361   - <source_field>keyvalue</source_field>
362   - </mapping> </mappings> <cluster_schema/>
363   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
364   - <xloc>640</xloc>
365   - <yloc>64</yloc>
366   - <draw>Y</draw>
367   - </GUI>
368   - </step>
369   -
370   - <step>
371   - <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
372   - <type>SelectValues</type>
373   - <description/>
374   - <distribute>Y</distribute>
375   - <custom_distribution/>
376   - <copies>1</copies>
377   - <partitioning>
378   - <method>none</method>
379   - <schema_name/>
380   - </partitioning>
381   - <fields> <field> <name>fieldname</name>
382   - <rename/>
383   - <length>-2</length>
384   - <precision>-2</precision>
385   - </field> <field> <name>fieldtype</name>
386   - <rename/>
387   - <length>-2</length>
388   - <precision>-2</precision>
389   - </field> <field> <name>fcno</name>
390   - <rename/>
391   - <length>-2</length>
392   - <precision>-2</precision>
393   - </field> <select_unspecified>N</select_unspecified>
394   - </fields> <cluster_schema/>
395   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
396   - <xloc>533</xloc>
397   - <yloc>325</yloc>
398   - <draw>Y</draw>
399   - </GUI>
400   - </step>
401   -
402   - <step>
403   - <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>
404   - <type>SortRows</type>
405   - <description/>
406   - <distribute>Y</distribute>
407   - <custom_distribution/>
408   - <copies>1</copies>
409   - <partitioning>
410   - <method>none</method>
411   - <schema_name/>
412   - </partitioning>
413   - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
414   - <prefix>out</prefix>
415   - <sort_size>1000000</sort_size>
416   - <free_memory/>
417   - <compress>N</compress>
418   - <compress_variable/>
419   - <unique_rows>N</unique_rows>
420   - <fields>
421   - <field>
422   - <name>fcno</name>
423   - <ascending>Y</ascending>
424   - <case_sensitive>N</case_sensitive>
425   - <presorted>N</presorted>
426   - </field>
427   - </fields>
428   - <cluster_schema/>
429   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
430   - <xloc>642</xloc>
431   - <yloc>325</yloc>
432   - <draw>Y</draw>
433   - </GUI>
434   - </step>
435   -
436   - <step>
437   - <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</name>
438   - <type>TableInput</type>
439   - <description/>
440   - <distribute>Y</distribute>
441   - <custom_distribution/>
442   - <copies>1</copies>
443   - <partitioning>
444   - <method>none</method>
445   - <schema_name/>
446   - </partitioning>
447   - <connection>bus_control_variable</connection>
448   - <sql>select &#xa;fcno&#xa;, min&#x28;xl&#x29; xl &#xa;, min&#x28;xl_dir&#x29; xl_dir&#xa;, min&#x28;qdz_code&#x29; qdz&#xa;, min&#x28;zdz_code&#x29; zdz&#xa;, min&#x28;bc_type&#x29; bc_type &#xa;from bsth_c_s_ttinfo_detail&#xa;where ttinfo &#x3d; &#x24;&#x7b;ttinfoid&#x7d;&#xa;group by fcno</sql>
449   - <limit>0</limit>
450   - <lookup/>
451   - <execute_each_row>N</execute_each_row>
452   - <variables_active>Y</variables_active>
453   - <lazy_conversion_active>N</lazy_conversion_active>
454   - <cluster_schema/>
455   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
456   - <xloc>56</xloc>
457   - <yloc>185</yloc>
458   - <draw>Y</draw>
459   - </GUI>
460   - </step>
461   -
462   - <step>
463   - <name>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</name>
464   - <type>DBLookup</type>
465   - <description/>
466   - <distribute>N</distribute>
467   - <custom_distribution/>
468   - <copies>1</copies>
469   - <partitioning>
470   - <method>none</method>
471   - <schema_name/>
472   - </partitioning>
473   - <connection>bus_control_variable</connection>
474   - <cache>N</cache>
475   - <cache_load_all>Y</cache_load_all>
476   - <cache_size>0</cache_size>
477   - <lookup>
478   - <schema/>
479   - <table>bsth_c_stationroute</table>
480   - <orderby/>
481   - <fail_on_multiple>N</fail_on_multiple>
482   - <eat_row_on_failure>N</eat_row_on_failure>
483   - <key>
484   - <name>xl</name>
485   - <field>line</field>
486   - <condition>&#x3d;</condition>
487   - <name2/>
488   - </key>
489   - <key>
490   - <name>xl_dir</name>
491   - <field>directions</field>
492   - <condition>&#x3d;</condition>
493   - <name2/>
494   - </key>
495   - <key>
496   - <name>zd</name>
497   - <field>station_code</field>
498   - <condition>&#x3d;</condition>
499   - <name2/>
500   - </key>
501   - <value>
502   - <name>station_name</name>
503   - <rename>zdname</rename>
504   - <default/>
505   - <type>String</type>
506   - </value>
507   - </lookup>
508   - <cluster_schema/>
509   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
510   - <xloc>410</xloc>
511   - <yloc>191</yloc>
512   - <draw>Y</draw>
513   - </GUI>
514   - </step>
515   -
516   - <step>
517   - <name>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</name>
518   - <type>RowGenerator</type>
519   - <description/>
520   - <distribute>Y</distribute>
521   - <custom_distribution/>
522   - <copies>1</copies>
523   - <partitioning>
524   - <method>none</method>
525   - <schema_name/>
526   - </partitioning>
527   - <fields>
528   - <field>
529   - <name>fieldname</name>
530   - <type>String</type>
531   - <format/>
532   - <currency/>
533   - <decimal/>
534   - <group/>
535   - <nullif>&#x8def;&#x724c;</nullif>
536   - <length>-1</length>
537   - <precision>-1</precision>
538   - <set_empty_string>N</set_empty_string>
539   - </field>
540   - <field>
541   - <name>fieldtype</name>
542   - <type>String</type>
543   - <format/>
544   - <currency/>
545   - <decimal/>
546   - <group/>
547   - <nullif>String</nullif>
548   - <length>-1</length>
549   - <precision>-1</precision>
550   - <set_empty_string>N</set_empty_string>
551   - </field>
552   - <field>
553   - <name>fcno</name>
554   - <type>Integer</type>
555   - <format/>
556   - <currency/>
557   - <decimal/>
558   - <group/>
559   - <nullif>0</nullif>
560   - <length>-1</length>
561   - <precision>-1</precision>
562   - <set_empty_string>N</set_empty_string>
563   - </field>
564   - </fields>
565   - <limit>1</limit>
566   - <never_ending>N</never_ending>
567   - <interval_in_ms>5000</interval_in_ms>
568   - <row_time_field>now</row_time_field>
569   - <last_time_field>FiveSecondsAgo</last_time_field>
570   - <cluster_schema/>
571   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
572   - <xloc>530</xloc>
573   - <yloc>194</yloc>
574   - <draw>Y</draw>
575   - </GUI>
576   - </step>
577   -
578   - <step>
579   - <name>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</name>
580   - <type>ScriptValueMod</type>
581   - <description/>
582   - <distribute>Y</distribute>
583   - <custom_distribution/>
584   - <copies>1</copies>
585   - <partitioning>
586   - <method>none</method>
587   - <schema_name/>
588   - </partitioning>
589   - <compatible>N</compatible>
590   - <optimizationLevel>9</optimizationLevel>
591   - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
592   - <jsScript_name>Script 1</jsScript_name>
593   - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var fieldname&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x540d;&#xa;var fieldtype&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x7c7b;&#x578b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;fieldtype &#x3d; &#x27;String&#x27;&#x3b;&#xa;</jsScript_script>
594   - </jsScript> </jsScripts> <fields> <field> <name>fieldname</name>
595   - <rename>fieldname</rename>
596   - <type>String</type>
597   - <length>-1</length>
598   - <precision>-1</precision>
599   - <replace>N</replace>
600   - </field> <field> <name>fieldtype</name>
601   - <rename>fieldtype</rename>
602   - <type>String</type>
603   - <length>-1</length>
604   - <precision>-1</precision>
605   - <replace>N</replace>
606   - </field> </fields> <cluster_schema/>
607   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
608   - <xloc>410</xloc>
609   - <yloc>326</yloc>
610   - <draw>Y</draw>
611   - </GUI>
612   - </step>
613   -
614   - <step>
615   - <name>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</name>
616   - <type>ScriptValueMod</type>
617   - <description/>
618   - <distribute>Y</distribute>
619   - <custom_distribution/>
620   - <copies>1</copies>
621   - <partitioning>
622   - <method>none</method>
623   - <schema_name/>
624   - </partitioning>
625   - <compatible>N</compatible>
626   - <optimizationLevel>9</optimizationLevel>
627   - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
628   - <jsScript_name>Script 1</jsScript_name>
629   - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var targetfieldname&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x5b57;&#x6bb5;&#x540d;&#xa;var targettype&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x7c7b;&#x578b;&#xa;var valuefieldname&#x3b; &#x2f;&#x2f; &#x503c;&#x5b57;&#x6bb5;&#x540d;&#xa;var keyvalue&#x3b; &#x2f;&#x2f; &#x5173;&#x952e;&#x5b57;&#x503c;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;targettype &#x3d; &#x27;String&#x27;&#x3b;&#xa;valuefieldname &#x3d; &#x27;fcsj&#x27;&#x3b;&#xa;keyvalue &#x3d; fcno&#x3b;&#xa;</jsScript_script>
630   - </jsScript> </jsScripts> <fields> <field> <name>targetfieldname</name>
631   - <rename>targetfieldname</rename>
632   - <type>String</type>
633   - <length>-1</length>
634   - <precision>-1</precision>
635   - <replace>N</replace>
636   - </field> <field> <name>targettype</name>
637   - <rename>targettype</rename>
638   - <type>String</type>
639   - <length>-1</length>
640   - <precision>-1</precision>
641   - <replace>N</replace>
642   - </field> <field> <name>valuefieldname</name>
643   - <rename>valuefieldname</rename>
644   - <type>String</type>
645   - <length>-1</length>
646   - <precision>-1</precision>
647   - <replace>N</replace>
648   - </field> <field> <name>keyvalue</name>
649   - <rename>keyvalue</rename>
650   - <type>String</type>
651   - <length>-1</length>
652   - <precision>-1</precision>
653   - <replace>N</replace>
654   - </field> </fields> <cluster_schema/>
655   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
656   - <xloc>410</xloc>
657   - <yloc>64</yloc>
658   - <draw>Y</draw>
659   - </GUI>
660   - </step>
661   -
662   - <step>
663   - <name>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</name>
664   - <type>ScriptValueMod</type>
665   - <description/>
666   - <distribute>Y</distribute>
667   - <custom_distribution/>
668   - <copies>1</copies>
669   - <partitioning>
670   - <method>none</method>
671   - <schema_name/>
672   - </partitioning>
673   - <compatible>N</compatible>
674   - <optimizationLevel>9</optimizationLevel>
675   - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
676   - <jsScript_name>Script 1</jsScript_name>
677   - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var zd&#x3b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; zd &#x3d; zdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d;&#xa;</jsScript_script>
678   - </jsScript> </jsScripts> <fields> <field> <name>zd</name>
679   - <rename>zd</rename>
680   - <type>String</type>
681   - <length>-1</length>
682   - <precision>-1</precision>
683   - <replace>N</replace>
684   - </field> </fields> <cluster_schema/>
685   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
686   - <xloc>300</xloc>
687   - <yloc>190</yloc>
688   - <draw>Y</draw>
689   - </GUI>
690   - </step>
691   -
692   - <step>
693   - <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</name>
694   - <type>FilterRows</type>
695   - <description/>
696   - <distribute>Y</distribute>
697   - <custom_distribution/>
698   - <copies>1</copies>
699   - <partitioning>
700   - <method>none</method>
701   - <schema_name/>
702   - </partitioning>
703   -<send_true_to/>
704   -<send_false_to/>
705   - <compare>
706   -<condition>
707   - <negated>N</negated>
708   - <leftvalue>bc_type</leftvalue>
709   - <function>IS NOT NULL</function>
710   - <rightvalue/>
711   - </condition>
712   - </compare>
713   - <cluster_schema/>
714   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
715   - <xloc>182</xloc>
716   - <yloc>189</yloc>
717   - <draw>Y</draw>
718   - </GUI>
719   - </step>
720   -
721   - <step>
722   - <name>&#x53bb;&#x9664;&#x91cd;&#x590d;&#x8bb0;&#x5f55;</name>
723   - <type>Unique</type>
724   - <description/>
725   - <distribute>Y</distribute>
726   - <custom_distribution/>
727   - <copies>1</copies>
728   - <partitioning>
729   - <method>none</method>
730   - <schema_name/>
731   - </partitioning>
732   - <count_rows>N</count_rows>
733   - <count_field/>
734   - <reject_duplicate_row>N</reject_duplicate_row>
735   - <error_description/>
736   - <fields> </fields> <cluster_schema/>
737   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
738   - <xloc>842</xloc>
739   - <yloc>592</yloc>
740   - <draw>Y</draw>
741   - </GUI>
742   - </step>
743   -
744   - <step_error_handling>
745   - </step_error_handling>
746   - <slave-step-copy-partition-distribution>
747   -</slave-step-copy-partition-distribution>
748   - <slave_transformation>N</slave_transformation>
749   -
750   -</transformation>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x51fa;&#x5143;&#x6570;&#x636e;</name>
  5 + <description/>
  6 + <extended_description/>
  7 + <trans_version/>
  8 + <trans_type>Normal</trans_type>
  9 + <trans_status>0</trans_status>
  10 + <directory>&#x2f;</directory>
  11 + <parameters>
  12 + <parameter>
  13 + <name>filepath</name>
  14 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;ttinfodetail_test.xls</default_value>
  15 + <description>&#x65f6;&#x523b;&#x8868;excel&#x5bfc;&#x51fa;&#x6587;&#x4ef6;&#x8def;&#x5f84;&#x540d;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>injectktrfile</name>
  19 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataOutput.ktr</default_value>
  20 + <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>
  21 + </parameter>
  22 + <parameter>
  23 + <name>ttinfoid</name>
  24 + <default_value>56</default_value>
  25 + <description>&#x65f6;&#x523b;&#x8868;id</description>
  26 + </parameter>
  27 + </parameters>
  28 + <log>
  29 +<trans-log-table><connection/>
  30 +<schema/>
  31 +<table/>
  32 +<size_limit_lines/>
  33 +<interval/>
  34 +<timeout_days/>
  35 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
  36 +<perf-log-table><connection/>
  37 +<schema/>
  38 +<table/>
  39 +<interval/>
  40 +<timeout_days/>
  41 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
  42 +<channel-log-table><connection/>
  43 +<schema/>
  44 +<table/>
  45 +<timeout_days/>
  46 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
  47 +<step-log-table><connection/>
  48 +<schema/>
  49 +<table/>
  50 +<timeout_days/>
  51 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
  52 +<metrics-log-table><connection/>
  53 +<schema/>
  54 +<table/>
  55 +<timeout_days/>
  56 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
  57 + </log>
  58 + <maxdate>
  59 + <connection/>
  60 + <table/>
  61 + <field/>
  62 + <offset>0.0</offset>
  63 + <maxdiff>0.0</maxdiff>
  64 + </maxdate>
  65 + <size_rowset>10000</size_rowset>
  66 + <sleep_time_empty>50</sleep_time_empty>
  67 + <sleep_time_full>50</sleep_time_full>
  68 + <unique_connections>N</unique_connections>
  69 + <feedback_shown>Y</feedback_shown>
  70 + <feedback_size>50000</feedback_size>
  71 + <using_thread_priorities>Y</using_thread_priorities>
  72 + <shared_objects_file/>
  73 + <capture_step_performance>N</capture_step_performance>
  74 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  75 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  76 + <dependencies>
  77 + </dependencies>
  78 + <partitionschemas>
  79 + </partitionschemas>
  80 + <slaveservers>
  81 + </slaveservers>
  82 + <clusterschemas>
  83 + </clusterschemas>
  84 + <created_user>-</created_user>
  85 + <created_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</created_date>
  86 + <modified_user>-</modified_user>
  87 + <modified_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</modified_date>
  88 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  89 + <is_key_private>N</is_key_private>
  90 + </info>
  91 + <notepads>
  92 + <notepad>
  93 + <note>TODO&#xff1a;&#x5982;&#x679c;groupby &#x52a0;&#x5165;bctype&#xff0c;&#xa;&#x5219;&#x4ee5;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;&#xff0c;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x5206;&#x7ec4;&#x7684;&#x6570;&#x636e;&#x53ef;&#x80fd;&#x91cd;&#x590d;&#xff0c;&#xa;&#x5e94;&#x4e3a;&#x73ed;&#x6b21;&#x7c7b;&#x578b;&#x53ef;&#x80fd;&#x4e0d;&#x4e00;&#x6837;&#xff08;&#x5bfc;&#x5165;&#x4e4b;&#x540e;&#x4eba;&#x4e3a;&#x4fee;&#x6539;&#x7684;&#xff0c;&#x5982;&#x6b63;&#x5e38;&#x73ed;&#x6b21;&#x6539;&#x6210;&#x533a;&#x95f4;&#xff09;&#xff0c;&#xa;&#x56e0;&#x4e3a;&#x5bfc;&#x51fa;&#x65f6;&#x5fc5;&#x987b;&#x6570;&#x636e;&#x4e0d;&#x91cd;&#x590d;&#xff0c;&#x8fd9;&#x91cc;&#x7684;&#x89e3;&#x51b3;&#x65b9;&#x6cd5;&#xff0c;&#x53ea;&#x4f7f;&#x7528;&#x53d1;&#x8f66;&#x987a;&#x5e8f;&#x53f7;&#x5206;&#x7ec4;&#xff0c;&#xa;&#x4ee5;&#x540e;&#x5efa;&#x8bae;&#xff0c;&#x8fd8;&#x662f;&#x539f;&#x6765;&#x7684;&#x65b9;&#x5f0f;&#x5206;&#x7ec4;&#xff0c;&#x7136;&#x540e;&#x628a;&#x66f4;&#x65b0;&#x65f6;&#x95f4;&#x665a;&#x7684;&#x53bb;&#x9664;&#xa;&#xa;&#x4ee5;&#x540e;&#x6539;&#x6210;&#x53bb;&#x9664;&#x91cd;&#x590d;&#x7eaa;&#x5f55;</note>
  94 + <xloc>37</xloc>
  95 + <yloc>309</yloc>
  96 + <width>406</width>
  97 + <heigth>122</heigth>
  98 + <fontname>YaHei Consolas Hybrid</fontname>
  99 + <fontsize>12</fontsize>
  100 + <fontbold>N</fontbold>
  101 + <fontitalic>N</fontitalic>
  102 + <fontcolorred>0</fontcolorred>
  103 + <fontcolorgreen>0</fontcolorgreen>
  104 + <fontcolorblue>0</fontcolorblue>
  105 + <backgroundcolorred>255</backgroundcolorred>
  106 + <backgroundcolorgreen>205</backgroundcolorgreen>
  107 + <backgroundcolorblue>112</backgroundcolorblue>
  108 + <bordercolorred>100</bordercolorred>
  109 + <bordercolorgreen>100</bordercolorgreen>
  110 + <bordercolorblue>100</bordercolorblue>
  111 + <drawshadow>Y</drawshadow>
  112 + </notepad>
  113 + </notepads>
  114 + <connection>
  115 + <name>192.168.168.1_jwgl_dw</name>
  116 + <server>192.168.168.1</server>
  117 + <type>ORACLE</type>
  118 + <access>Native</access>
  119 + <database>orcl</database>
  120 + <port>1521</port>
  121 + <username>jwgl_dw</username>
  122 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  123 + <servername/>
  124 + <data_tablespace/>
  125 + <index_tablespace/>
  126 + <attributes>
  127 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  128 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  129 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  130 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  131 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  132 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  133 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  134 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  135 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  136 + </attributes>
  137 + </connection>
  138 + <connection>
  139 + <name>bus_control_variable</name>
  140 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  141 + <type>MYSQL</type>
  142 + <access>Native</access>
  143 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  144 + <port>3306</port>
  145 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  146 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  147 + <servername/>
  148 + <data_tablespace/>
  149 + <index_tablespace/>
  150 + <attributes>
  151 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  152 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  153 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  154 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  155 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  156 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  157 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  158 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  159 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  160 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  161 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  162 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  163 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  164 + </attributes>
  165 + </connection>
  166 + <connection>
  167 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  168 + <server>localhost</server>
  169 + <type>MYSQL</type>
  170 + <access>Native</access>
  171 + <database>control</database>
  172 + <port>3306</port>
  173 + <username>root</username>
  174 + <password>Encrypted </password>
  175 + <servername/>
  176 + <data_tablespace/>
  177 + <index_tablespace/>
  178 + <attributes>
  179 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  180 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  181 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  182 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  183 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  184 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  185 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  186 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  187 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  188 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  189 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  190 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  191 + </attributes>
  192 + </connection>
  193 + <connection>
  194 + <name>bus_control_&#x672c;&#x673a;</name>
  195 + <server>localhost</server>
  196 + <type>MYSQL</type>
  197 + <access>Native</access>
  198 + <database>control</database>
  199 + <port>3306</port>
  200 + <username>root</username>
  201 + <password>Encrypted </password>
  202 + <servername/>
  203 + <data_tablespace/>
  204 + <index_tablespace/>
  205 + <attributes>
  206 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  207 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  208 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  209 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  210 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  211 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  212 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  213 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  214 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  215 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  216 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  217 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  218 + </attributes>
  219 + </connection>
  220 + <connection>
  221 + <name>xlab_mysql_youle</name>
  222 + <server>101.231.124.8</server>
  223 + <type>MYSQL</type>
  224 + <access>Native</access>
  225 + <database>xlab_youle</database>
  226 + <port>45687</port>
  227 + <username>xlab-youle</username>
  228 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  229 + <servername/>
  230 + <data_tablespace/>
  231 + <index_tablespace/>
  232 + <attributes>
  233 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  234 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  235 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  236 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  237 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  238 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  239 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  240 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  241 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  242 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  243 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  244 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  245 + </attributes>
  246 + </connection>
  247 + <connection>
  248 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  249 + <server>localhost</server>
  250 + <type>MYSQL</type>
  251 + <access>Native</access>
  252 + <database>xlab_youle</database>
  253 + <port>3306</port>
  254 + <username>root</username>
  255 + <password>Encrypted </password>
  256 + <servername/>
  257 + <data_tablespace/>
  258 + <index_tablespace/>
  259 + <attributes>
  260 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  261 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  262 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  263 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  264 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  265 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  266 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  267 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  268 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  269 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  270 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  271 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  272 + </attributes>
  273 + </connection>
  274 + <connection>
  275 + <name>xlab_youle</name>
  276 + <server/>
  277 + <type>MYSQL</type>
  278 + <access>JNDI</access>
  279 + <database>xlab_youle</database>
  280 + <port>1521</port>
  281 + <username/>
  282 + <password>Encrypted </password>
  283 + <servername/>
  284 + <data_tablespace/>
  285 + <index_tablespace/>
  286 + <attributes>
  287 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  288 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  289 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  290 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  291 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  292 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  293 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  294 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  295 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  296 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  297 + </attributes>
  298 + </connection>
  299 + <order>
  300 + <hop> <from>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  301 + <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</from><to>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</to><enabled>Y</enabled> </hop>
  302 + <hop> <from>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</from><to>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</to><enabled>Y</enabled> </hop>
  303 + <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  304 + <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  305 + <hop> <from>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  306 + <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  307 + <hop> <from>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  308 + <hop> <from>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  309 + <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  310 + </order>
  311 + <step>
  312 + <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>
  313 + <type>MetaInject</type>
  314 + <description/>
  315 + <distribute>Y</distribute>
  316 + <custom_distribution/>
  317 + <copies>1</copies>
  318 + <partitioning>
  319 + <method>none</method>
  320 + <schema_name/>
  321 + </partitioning>
  322 + <specification_method>filename</specification_method>
  323 + <trans_object_id/>
  324 + <trans_name/>
  325 + <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>
  326 + <directory_path/>
  327 + <source_step/>
  328 + <source_output_fields> </source_output_fields> <target_file/>
  329 + <no_execution>N</no_execution>
  330 + <stream_source_step/>
  331 + <stream_target_step/>
  332 + <mappings> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  333 + <target_attribute_key>TARGET_TYPE</target_attribute_key>
  334 + <target_detail>Y</target_detail>
  335 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  336 + <source_field>targettype</source_field>
  337 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
  338 + <target_attribute_key>TYPE</target_attribute_key>
  339 + <target_detail>Y</target_detail>
  340 + <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
  341 + <source_field>fieldtype</source_field>
  342 + </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  343 + <target_attribute_key>NAME</target_attribute_key>
  344 + <target_detail>Y</target_detail>
  345 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  346 + <source_field>valuefieldname</source_field>
  347 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
  348 + <target_attribute_key>NAME</target_attribute_key>
  349 + <target_detail>Y</target_detail>
  350 + <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
  351 + <source_field>fieldname</source_field>
  352 + </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  353 + <target_attribute_key>TARGET_NAME</target_attribute_key>
  354 + <target_detail>Y</target_detail>
  355 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  356 + <source_field>targetfieldname</source_field>
  357 + </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  358 + <target_attribute_key>KEY_VALUE</target_attribute_key>
  359 + <target_detail>Y</target_detail>
  360 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  361 + <source_field>keyvalue</source_field>
  362 + </mapping> </mappings> <cluster_schema/>
  363 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  364 + <xloc>640</xloc>
  365 + <yloc>64</yloc>
  366 + <draw>Y</draw>
  367 + </GUI>
  368 + </step>
  369 +
  370 + <step>
  371 + <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
  372 + <type>SelectValues</type>
  373 + <description/>
  374 + <distribute>Y</distribute>
  375 + <custom_distribution/>
  376 + <copies>1</copies>
  377 + <partitioning>
  378 + <method>none</method>
  379 + <schema_name/>
  380 + </partitioning>
  381 + <fields> <field> <name>fieldname</name>
  382 + <rename/>
  383 + <length>-2</length>
  384 + <precision>-2</precision>
  385 + </field> <field> <name>fieldtype</name>
  386 + <rename/>
  387 + <length>-2</length>
  388 + <precision>-2</precision>
  389 + </field> <field> <name>fcno</name>
  390 + <rename/>
  391 + <length>-2</length>
  392 + <precision>-2</precision>
  393 + </field> <select_unspecified>N</select_unspecified>
  394 + </fields> <cluster_schema/>
  395 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  396 + <xloc>533</xloc>
  397 + <yloc>325</yloc>
  398 + <draw>Y</draw>
  399 + </GUI>
  400 + </step>
  401 +
  402 + <step>
  403 + <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>
  404 + <type>SortRows</type>
  405 + <description/>
  406 + <distribute>Y</distribute>
  407 + <custom_distribution/>
  408 + <copies>1</copies>
  409 + <partitioning>
  410 + <method>none</method>
  411 + <schema_name/>
  412 + </partitioning>
  413 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  414 + <prefix>out</prefix>
  415 + <sort_size>1000000</sort_size>
  416 + <free_memory/>
  417 + <compress>N</compress>
  418 + <compress_variable/>
  419 + <unique_rows>N</unique_rows>
  420 + <fields>
  421 + <field>
  422 + <name>fcno</name>
  423 + <ascending>Y</ascending>
  424 + <case_sensitive>N</case_sensitive>
  425 + <presorted>N</presorted>
  426 + </field>
  427 + </fields>
  428 + <cluster_schema/>
  429 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  430 + <xloc>642</xloc>
  431 + <yloc>325</yloc>
  432 + <draw>Y</draw>
  433 + </GUI>
  434 + </step>
  435 +
  436 + <step>
  437 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</name>
  438 + <type>TableInput</type>
  439 + <description/>
  440 + <distribute>Y</distribute>
  441 + <custom_distribution/>
  442 + <copies>1</copies>
  443 + <partitioning>
  444 + <method>none</method>
  445 + <schema_name/>
  446 + </partitioning>
  447 + <connection>bus_control_variable</connection>
  448 + <sql>select &#xa;fcno&#xa;, min&#x28;xl&#x29; xl &#xa;, min&#x28;xl_dir&#x29; xl_dir&#xa;, min&#x28;qdz_code&#x29; qdz&#xa;, min&#x28;zdz_code&#x29; zdz&#xa;, min&#x28;bc_type&#x29; bc_type &#xa;from bsth_c_s_ttinfo_detail&#xa;where ttinfo &#x3d; &#x24;&#x7b;ttinfoid&#x7d;&#xa;group by fcno</sql>
  449 + <limit>0</limit>
  450 + <lookup/>
  451 + <execute_each_row>N</execute_each_row>
  452 + <variables_active>Y</variables_active>
  453 + <lazy_conversion_active>N</lazy_conversion_active>
  454 + <cluster_schema/>
  455 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  456 + <xloc>56</xloc>
  457 + <yloc>185</yloc>
  458 + <draw>Y</draw>
  459 + </GUI>
  460 + </step>
  461 +
  462 + <step>
  463 + <name>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</name>
  464 + <type>DBLookup</type>
  465 + <description/>
  466 + <distribute>N</distribute>
  467 + <custom_distribution/>
  468 + <copies>1</copies>
  469 + <partitioning>
  470 + <method>none</method>
  471 + <schema_name/>
  472 + </partitioning>
  473 + <connection>bus_control_variable</connection>
  474 + <cache>N</cache>
  475 + <cache_load_all>Y</cache_load_all>
  476 + <cache_size>0</cache_size>
  477 + <lookup>
  478 + <schema/>
  479 + <table>bsth_c_stationroute</table>
  480 + <orderby/>
  481 + <fail_on_multiple>N</fail_on_multiple>
  482 + <eat_row_on_failure>N</eat_row_on_failure>
  483 + <key>
  484 + <name>xl</name>
  485 + <field>line</field>
  486 + <condition>&#x3d;</condition>
  487 + <name2/>
  488 + </key>
  489 + <key>
  490 + <name>xl_dir</name>
  491 + <field>directions</field>
  492 + <condition>&#x3d;</condition>
  493 + <name2/>
  494 + </key>
  495 + <key>
  496 + <name>zd</name>
  497 + <field>station_code</field>
  498 + <condition>&#x3d;</condition>
  499 + <name2/>
  500 + </key>
  501 + <value>
  502 + <name>station_name</name>
  503 + <rename>zdname</rename>
  504 + <default/>
  505 + <type>String</type>
  506 + </value>
  507 + </lookup>
  508 + <cluster_schema/>
  509 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  510 + <xloc>410</xloc>
  511 + <yloc>191</yloc>
  512 + <draw>Y</draw>
  513 + </GUI>
  514 + </step>
  515 +
  516 + <step>
  517 + <name>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</name>
  518 + <type>RowGenerator</type>
  519 + <description/>
  520 + <distribute>Y</distribute>
  521 + <custom_distribution/>
  522 + <copies>1</copies>
  523 + <partitioning>
  524 + <method>none</method>
  525 + <schema_name/>
  526 + </partitioning>
  527 + <fields>
  528 + <field>
  529 + <name>fieldname</name>
  530 + <type>String</type>
  531 + <format/>
  532 + <currency/>
  533 + <decimal/>
  534 + <group/>
  535 + <nullif>&#x8def;&#x724c;</nullif>
  536 + <length>-1</length>
  537 + <precision>-1</precision>
  538 + <set_empty_string>N</set_empty_string>
  539 + </field>
  540 + <field>
  541 + <name>fieldtype</name>
  542 + <type>String</type>
  543 + <format/>
  544 + <currency/>
  545 + <decimal/>
  546 + <group/>
  547 + <nullif>String</nullif>
  548 + <length>-1</length>
  549 + <precision>-1</precision>
  550 + <set_empty_string>N</set_empty_string>
  551 + </field>
  552 + <field>
  553 + <name>fcno</name>
  554 + <type>Integer</type>
  555 + <format/>
  556 + <currency/>
  557 + <decimal/>
  558 + <group/>
  559 + <nullif>0</nullif>
  560 + <length>-1</length>
  561 + <precision>-1</precision>
  562 + <set_empty_string>N</set_empty_string>
  563 + </field>
  564 + </fields>
  565 + <limit>1</limit>
  566 + <never_ending>N</never_ending>
  567 + <interval_in_ms>5000</interval_in_ms>
  568 + <row_time_field>now</row_time_field>
  569 + <last_time_field>FiveSecondsAgo</last_time_field>
  570 + <cluster_schema/>
  571 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  572 + <xloc>530</xloc>
  573 + <yloc>194</yloc>
  574 + <draw>Y</draw>
  575 + </GUI>
  576 + </step>
  577 +
  578 + <step>
  579 + <name>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</name>
  580 + <type>ScriptValueMod</type>
  581 + <description/>
  582 + <distribute>Y</distribute>
  583 + <custom_distribution/>
  584 + <copies>1</copies>
  585 + <partitioning>
  586 + <method>none</method>
  587 + <schema_name/>
  588 + </partitioning>
  589 + <compatible>N</compatible>
  590 + <optimizationLevel>9</optimizationLevel>
  591 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  592 + <jsScript_name>Script 1</jsScript_name>
  593 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var fieldname&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x540d;&#xa;var fieldtype&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x7c7b;&#x578b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;fieldtype &#x3d; &#x27;String&#x27;&#x3b;&#xa;</jsScript_script>
  594 + </jsScript> </jsScripts> <fields> <field> <name>fieldname</name>
  595 + <rename>fieldname</rename>
  596 + <type>String</type>
  597 + <length>-1</length>
  598 + <precision>-1</precision>
  599 + <replace>N</replace>
  600 + </field> <field> <name>fieldtype</name>
  601 + <rename>fieldtype</rename>
  602 + <type>String</type>
  603 + <length>-1</length>
  604 + <precision>-1</precision>
  605 + <replace>N</replace>
  606 + </field> </fields> <cluster_schema/>
  607 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  608 + <xloc>410</xloc>
  609 + <yloc>326</yloc>
  610 + <draw>Y</draw>
  611 + </GUI>
  612 + </step>
  613 +
  614 + <step>
  615 + <name>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</name>
  616 + <type>ScriptValueMod</type>
  617 + <description/>
  618 + <distribute>Y</distribute>
  619 + <custom_distribution/>
  620 + <copies>1</copies>
  621 + <partitioning>
  622 + <method>none</method>
  623 + <schema_name/>
  624 + </partitioning>
  625 + <compatible>N</compatible>
  626 + <optimizationLevel>9</optimizationLevel>
  627 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  628 + <jsScript_name>Script 1</jsScript_name>
  629 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var targetfieldname&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x5b57;&#x6bb5;&#x540d;&#xa;var targettype&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x7c7b;&#x578b;&#xa;var valuefieldname&#x3b; &#x2f;&#x2f; &#x503c;&#x5b57;&#x6bb5;&#x540d;&#xa;var keyvalue&#x3b; &#x2f;&#x2f; &#x5173;&#x952e;&#x5b57;&#x503c;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;targettype &#x3d; &#x27;String&#x27;&#x3b;&#xa;valuefieldname &#x3d; &#x27;fcsj&#x27;&#x3b;&#xa;keyvalue &#x3d; fcno&#x3b;&#xa;</jsScript_script>
  630 + </jsScript> </jsScripts> <fields> <field> <name>targetfieldname</name>
  631 + <rename>targetfieldname</rename>
  632 + <type>String</type>
  633 + <length>-1</length>
  634 + <precision>-1</precision>
  635 + <replace>N</replace>
  636 + </field> <field> <name>targettype</name>
  637 + <rename>targettype</rename>
  638 + <type>String</type>
  639 + <length>-1</length>
  640 + <precision>-1</precision>
  641 + <replace>N</replace>
  642 + </field> <field> <name>valuefieldname</name>
  643 + <rename>valuefieldname</rename>
  644 + <type>String</type>
  645 + <length>-1</length>
  646 + <precision>-1</precision>
  647 + <replace>N</replace>
  648 + </field> <field> <name>keyvalue</name>
  649 + <rename>keyvalue</rename>
  650 + <type>String</type>
  651 + <length>-1</length>
  652 + <precision>-1</precision>
  653 + <replace>N</replace>
  654 + </field> </fields> <cluster_schema/>
  655 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  656 + <xloc>410</xloc>
  657 + <yloc>64</yloc>
  658 + <draw>Y</draw>
  659 + </GUI>
  660 + </step>
  661 +
  662 + <step>
  663 + <name>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</name>
  664 + <type>ScriptValueMod</type>
  665 + <description/>
  666 + <distribute>Y</distribute>
  667 + <custom_distribution/>
  668 + <copies>1</copies>
  669 + <partitioning>
  670 + <method>none</method>
  671 + <schema_name/>
  672 + </partitioning>
  673 + <compatible>N</compatible>
  674 + <optimizationLevel>9</optimizationLevel>
  675 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  676 + <jsScript_name>Script 1</jsScript_name>
  677 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var zd&#x3b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; zd &#x3d; zdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d;&#xa;</jsScript_script>
  678 + </jsScript> </jsScripts> <fields> <field> <name>zd</name>
  679 + <rename>zd</rename>
  680 + <type>String</type>
  681 + <length>-1</length>
  682 + <precision>-1</precision>
  683 + <replace>N</replace>
  684 + </field> </fields> <cluster_schema/>
  685 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  686 + <xloc>300</xloc>
  687 + <yloc>190</yloc>
  688 + <draw>Y</draw>
  689 + </GUI>
  690 + </step>
  691 +
  692 + <step>
  693 + <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</name>
  694 + <type>FilterRows</type>
  695 + <description/>
  696 + <distribute>Y</distribute>
  697 + <custom_distribution/>
  698 + <copies>1</copies>
  699 + <partitioning>
  700 + <method>none</method>
  701 + <schema_name/>
  702 + </partitioning>
  703 +<send_true_to/>
  704 +<send_false_to/>
  705 + <compare>
  706 +<condition>
  707 + <negated>N</negated>
  708 + <leftvalue>bc_type</leftvalue>
  709 + <function>IS NOT NULL</function>
  710 + <rightvalue/>
  711 + </condition>
  712 + </compare>
  713 + <cluster_schema/>
  714 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  715 + <xloc>182</xloc>
  716 + <yloc>189</yloc>
  717 + <draw>Y</draw>
  718 + </GUI>
  719 + </step>
  720 +
  721 + <step>
  722 + <name>&#x53bb;&#x9664;&#x91cd;&#x590d;&#x8bb0;&#x5f55;</name>
  723 + <type>Unique</type>
  724 + <description/>
  725 + <distribute>Y</distribute>
  726 + <custom_distribution/>
  727 + <copies>1</copies>
  728 + <partitioning>
  729 + <method>none</method>
  730 + <schema_name/>
  731 + </partitioning>
  732 + <count_rows>N</count_rows>
  733 + <count_field/>
  734 + <reject_duplicate_row>N</reject_duplicate_row>
  735 + <error_description/>
  736 + <fields> </fields> <cluster_schema/>
  737 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  738 + <xloc>842</xloc>
  739 + <yloc>592</yloc>
  740 + <draw>Y</draw>
  741 + </GUI>
  742 + </step>
  743 +
  744 + <step_error_handling>
  745 + </step_error_handling>
  746 + <slave-step-copy-partition-distribution>
  747 +</slave-step-copy-partition-distribution>
  748 + <slave_transformation>N</slave_transformation>
  749 +
  750 +</transformation>
... ...