Commit d49b419f947af46fbab9820d2b37300ff299589c

Authored by 徐烜
2 parents 2cf6d5fc 502f6f7f

update

Showing 38 changed files with 3105 additions and 1253 deletions

Too many changes to show.

To preserve performance only 38 of 113 files are displayed.

src/main/java/com/bsth/StartCommand.java
1 package com.bsth; 1 package com.bsth;
2 2
3 3
4 -import java.util.concurrent.Executors;  
5 -import java.util.concurrent.ScheduledExecutorService;  
6 -import java.util.concurrent.TimeUnit;  
7 -  
8 -import org.slf4j.Logger;  
9 -import org.slf4j.LoggerFactory;  
10 -import org.springframework.beans.factory.annotation.Autowired;  
11 -import org.springframework.boot.CommandLineRunner;  
12 -import org.springframework.stereotype.Component;  
13 -  
14 import com.bsth.security.SecurityMetadataSourceService; 4 import com.bsth.security.SecurityMetadataSourceService;
15 import com.bsth.service.realcontrol.buffer.GetSchedulePlanThread; 5 import com.bsth.service.realcontrol.buffer.GetSchedulePlanThread;
16 import com.bsth.service.realcontrol.buffer.SchedulePersistenceThread; 6 import com.bsth.service.realcontrol.buffer.SchedulePersistenceThread;
@@ -18,6 +8,15 @@ import com.bsth.vehicle.common.CommonRefreshThread; @@ -18,6 +8,15 @@ import com.bsth.vehicle.common.CommonRefreshThread;
18 import com.bsth.vehicle.directive.DirectivePersistenceThread; 8 import com.bsth.vehicle.directive.DirectivePersistenceThread;
19 import com.bsth.vehicle.gpsdata.GpsArrivalStationThread; 9 import com.bsth.vehicle.gpsdata.GpsArrivalStationThread;
20 import com.bsth.vehicle.gpsdata.GpsRefreshThread; 10 import com.bsth.vehicle.gpsdata.GpsRefreshThread;
  11 +import org.slf4j.Logger;
  12 +import org.slf4j.LoggerFactory;
  13 +import org.springframework.beans.factory.annotation.Autowired;
  14 +import org.springframework.boot.CommandLineRunner;
  15 +import org.springframework.stereotype.Component;
  16 +
  17 +import java.util.concurrent.Executors;
  18 +import java.util.concurrent.ScheduledExecutorService;
  19 +import java.util.concurrent.TimeUnit;
21 20
22 /** 21 /**
23 * 随应用启动运行 22 * 随应用启动运行
@@ -67,7 +66,7 @@ public class StartCommand implements CommandLineRunner{ @@ -67,7 +66,7 @@ public class StartCommand implements CommandLineRunner{
67 //一分钟持久化一次实际排班 66 //一分钟持久化一次实际排班
68 scheduler.scheduleWithFixedDelay(SchedulePersistenceThread, 60 * 1, 60 * 1, TimeUnit.SECONDS); 67 scheduler.scheduleWithFixedDelay(SchedulePersistenceThread, 60 * 1, 60 * 1, TimeUnit.SECONDS);
69 //将实际到离站和排班计划进行匹配 12秒一次 68 //将实际到离站和排班计划进行匹配 12秒一次
70 - //scheduler.scheduleWithFixedDelay(gpsArrivalStationThread, 20, 1200, TimeUnit.SECONDS); 69 + //scheduler.scheduleWithFixedDelay(gpsArrivalStationThread, 5, 1200, TimeUnit.SECONDS);
71 } catch (Exception e) { 70 } catch (Exception e) {
72 e.printStackTrace(); 71 e.printStackTrace();
73 } 72 }
src/main/java/com/bsth/controller/CarDeviceController.java
1 -package com.bsth.controller;  
2 -  
3 -import com.bsth.entity.CarDevice;  
4 -import org.springframework.web.bind.annotation.RequestBody;  
5 -import org.springframework.web.bind.annotation.RequestMapping;  
6 -import org.springframework.web.bind.annotation.RequestMethod;  
7 -import org.springframework.web.bind.annotation.RestController;  
8 -  
9 -import java.util.Map;  
10 -  
11 -/**  
12 - * Created by xu on 16/6/15.  
13 - */  
14 -@RestController  
15 -@RequestMapping("carDevice")  
16 -public class CarDeviceController extends BaseController<CarDevice, Long> {  
17 -  
18 - /**  
19 - * 覆写方法,因为form提交的方式参数不全,改用 json形式提交 @RequestBody  
20 - * @Title: save  
21 - * @Description: TODO(持久化对象)  
22 - * @param @param t  
23 - * @param @return 设定文件  
24 - * @return Map<String,Object> {status: 1(成功),-1(失败)}  
25 - * @throws  
26 - */  
27 - @RequestMapping(method = RequestMethod.POST)  
28 - public Map<String, Object> save(@RequestBody CarDevice t){  
29 - return baseService.save(t);  
30 - }  
31 -} 1 +package com.bsth.controller;
  2 +
  3 +import com.bsth.entity.CarDevice;
  4 +import org.springframework.web.bind.annotation.RequestBody;
  5 +import org.springframework.web.bind.annotation.RequestMapping;
  6 +import org.springframework.web.bind.annotation.RequestMethod;
  7 +import org.springframework.web.bind.annotation.RestController;
  8 +
  9 +import java.util.Map;
  10 +
  11 +/**
  12 + * Created by xu on 16/6/15.
  13 + */
  14 +@RestController
  15 +@RequestMapping("carDevice")
  16 +public class CarDeviceController extends BaseController<CarDevice, Long> {
  17 +
  18 + /**
  19 + * 覆写方法,因为form提交的方式参数不全,改用 json形式提交 @RequestBody
  20 + * @Title: save
  21 + * @Description: TODO(持久化对象)
  22 + * @param @param t
  23 + * @param @return 设定文件
  24 + * @return Map<String,Object> {status: 1(成功),-1(失败)}
  25 + * @throws
  26 + */
  27 + @RequestMapping(method = RequestMethod.POST)
  28 + public Map<String, Object> save(@RequestBody CarDevice t){
  29 + return baseService.save(t);
  30 + }
  31 +}
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
1 package com.bsth.controller.realcontrol; 1 package com.bsth.controller.realcontrol;
2 2
3 import java.util.Collection; 3 import java.util.Collection;
  4 +import java.util.List;
4 import java.util.Map; 5 import java.util.Map;
5 6
6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.beans.factory.annotation.Autowired;
@@ -66,4 +67,40 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo, @@ -66,4 +67,40 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
66 public Map<String, String> carDeviceMapp(){ 67 public Map<String, String> carDeviceMapp(){
67 return CommonMapped.vehicDeviceBiMap.inverse(); 68 return CommonMapped.vehicDeviceBiMap.inverse();
68 } 69 }
  70 +
  71 + /**
  72 + *
  73 + * @Title: findPersionByLine
  74 + * @Description: TODO(根据线路主键获取驾驶员)
  75 + * @param @param lineId
  76 + * @throws
  77 + */
  78 + @RequestMapping(value = "/driver", method = RequestMethod.GET)
  79 + public List<Map<String, String>> findDriverByLine(@RequestParam String lineCode){
  80 + return scheduleRealInfoService.findDriverByLine(lineCode);
  81 + }
  82 +
  83 + /**
  84 + *
  85 + * @Title: findPersionByLine
  86 + * @Description: TODO(根据线路主键获取售票员)
  87 + * @param @param lineId
  88 + * @throws
  89 + */
  90 + @RequestMapping(value = "/conductor", method = RequestMethod.GET)
  91 + public List<Map<String, String>> findConductorByLine(@RequestParam String lineCode){
  92 + return scheduleRealInfoService.findConductorByLine(lineCode);
  93 + }
  94 +
  95 + /**
  96 + *
  97 + * @Title: findPersionByLine
  98 + * @Description: TODO(根据线路主键获取车辆)
  99 + * @param @param lineId
  100 + * @throws
  101 + */
  102 + @RequestMapping(value = "/cars", method = RequestMethod.GET)
  103 + public List<Map<String, String>> findCarByLine(@RequestParam String lineCode){
  104 + return scheduleRealInfoService.findCarByLine(lineCode);
  105 + }
69 } 106 }
src/main/java/com/bsth/controller/schedule/SchedulePlanController.java
1 -package com.bsth.controller.schedule;  
2 -  
3 -import com.bsth.controller.BaseController;  
4 -import com.bsth.entity.schedule.SchedulePlan;  
5 -import org.springframework.web.bind.annotation.RequestMapping;  
6 -import org.springframework.web.bind.annotation.RestController;  
7 -  
8 -/**  
9 - * Created by xu on 16/6/16.  
10 - */  
11 -@RestController  
12 -@RequestMapping("spc")  
13 -public class SchedulePlanController extends BaseController<SchedulePlan, Long> {  
14 -} 1 +package com.bsth.controller.schedule;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.entity.schedule.SchedulePlan;
  5 +import org.springframework.web.bind.annotation.RequestMapping;
  6 +import org.springframework.web.bind.annotation.RestController;
  7 +
  8 +/**
  9 + * Created by xu on 16/6/16.
  10 + */
  11 +@RestController
  12 +@RequestMapping("spc")
  13 +public class SchedulePlanController extends BaseController<SchedulePlan, Long> {
  14 +}
src/main/java/com/bsth/controller/schedule/SchedulePlanInfoController.java
1 -package com.bsth.controller.schedule;  
2 -  
3 -import com.bsth.controller.BaseController;  
4 -import com.bsth.entity.schedule.SchedulePlanInfo;  
5 -import org.springframework.web.bind.annotation.RequestMapping;  
6 -import org.springframework.web.bind.annotation.RestController;  
7 -  
8 -/**  
9 - * Created by xu on 16/6/16.  
10 - */  
11 -@RestController  
12 -@RequestMapping("spic")  
13 -public class SchedulePlanInfoController extends BaseController<SchedulePlanInfo, Long> {  
14 -} 1 +package com.bsth.controller.schedule;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.entity.schedule.SchedulePlanInfo;
  5 +import org.springframework.web.bind.annotation.RequestMapping;
  6 +import org.springframework.web.bind.annotation.RestController;
  7 +
  8 +/**
  9 + * Created by xu on 16/6/16.
  10 + */
  11 +@RestController
  12 +@RequestMapping("spic")
  13 +public class SchedulePlanInfoController extends BaseController<SchedulePlanInfo, Long> {
  14 +}
src/main/java/com/bsth/entity/schedule/GuideboardInfo.java
1 -package com.bsth.entity.schedule;  
2 -  
3 -import com.bsth.entity.Line;  
4 -import com.bsth.entity.sys.SysUser;  
5 -  
6 -import javax.persistence.*;  
7 -import javax.persistence.Table;  
8 -import java.util.Date;  
9 -  
10 -/**  
11 - * 路牌信息。  
12 - */  
13 -@Entity  
14 -@Table(name = "bsth_c_s_gbi")  
15 -public class GuideboardInfo {  
16 -  
17 - /** 主键Id */  
18 - @Id  
19 - @GeneratedValue  
20 - private Long id;  
21 -  
22 - /** 线路关联 */  
23 - @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
24 - private Line xl;  
25 -  
26 - /** 路牌顺序号 */  
27 - @Column(nullable = false)  
28 - private Integer lpNo;  
29 - /** 路牌名称 */  
30 - @Column(nullable = false)  
31 - private String lpName;  
32 - /** 路牌类型(普通路牌/临加路牌) */  
33 - @Column(nullable = false)  
34 - private String lpType;  
35 -  
36 - /** 创建人 */  
37 - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)  
38 - private SysUser createBy;  
39 - /** 修改人 */  
40 - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)  
41 - private SysUser updateBy;  
42 -  
43 - /** 创建日期 */  
44 - @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")  
45 - private Date createDate;  
46 - /** 修改日期 */  
47 - @Column(name = "update_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")  
48 - private Date updateDate;  
49 -  
50 -  
51 - public Long getId() {  
52 - return id;  
53 - }  
54 -  
55 - public void setId(Long id) {  
56 - this.id = id;  
57 - }  
58 -  
59 - public Line getXl() {  
60 - return xl;  
61 - }  
62 -  
63 - public void setXl(Line xl) {  
64 - this.xl = xl;  
65 - }  
66 -  
67 - public Integer getLpNo() {  
68 - return lpNo;  
69 - }  
70 -  
71 - public void setLpNo(Integer lpNo) {  
72 - this.lpNo = lpNo;  
73 - }  
74 -  
75 - public String getLpName() {  
76 - return lpName;  
77 - }  
78 -  
79 - public void setLpName(String lpName) {  
80 - this.lpName = lpName;  
81 - }  
82 -  
83 - public String getLpType() {  
84 - return lpType;  
85 - }  
86 -  
87 - public void setLpType(String lpType) {  
88 - this.lpType = lpType;  
89 - }  
90 -  
91 - public SysUser getCreateBy() {  
92 - return createBy;  
93 - }  
94 -  
95 - public void setCreateBy(SysUser createBy) {  
96 - this.createBy = createBy;  
97 - }  
98 -  
99 - public SysUser getUpdateBy() {  
100 - return updateBy;  
101 - }  
102 -  
103 - public void setUpdateBy(SysUser updateBy) {  
104 - this.updateBy = updateBy;  
105 - }  
106 -  
107 - public Date getCreateDate() {  
108 - return createDate;  
109 - }  
110 -  
111 - public void setCreateDate(Date createDate) {  
112 - this.createDate = createDate;  
113 - }  
114 -  
115 - public Date getUpdateDate() {  
116 - return updateDate;  
117 - }  
118 -  
119 - public void setUpdateDate(Date updateDate) {  
120 - this.updateDate = updateDate;  
121 - }  
122 -} 1 +package com.bsth.entity.schedule;
  2 +
  3 +import com.bsth.entity.Line;
  4 +import com.bsth.entity.sys.SysUser;
  5 +
  6 +import javax.persistence.*;
  7 +import javax.persistence.Table;
  8 +import java.util.Date;
  9 +
  10 +/**
  11 + * 路牌信息。
  12 + */
  13 +@Entity
  14 +@Table(name = "bsth_c_s_gbi")
  15 +public class GuideboardInfo {
  16 +
  17 + /** 主键Id */
  18 + @Id
  19 + @GeneratedValue
  20 + private Long id;
  21 +
  22 + /** 线路关联 */
  23 + @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  24 + private Line xl;
  25 +
  26 + /** 路牌顺序号 */
  27 + @Column(nullable = false)
  28 + private Integer lpNo;
  29 + /** 路牌名称 */
  30 + @Column(nullable = false)
  31 + private String lpName;
  32 + /** 路牌类型(普通路牌/临加路牌) */
  33 + @Column(nullable = false)
  34 + private String lpType;
  35 +
  36 + /** 创建人 */
  37 + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
  38 + private SysUser createBy;
  39 + /** 修改人 */
  40 + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
  41 + private SysUser updateBy;
  42 +
  43 + /** 创建日期 */
  44 + @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
  45 + private Date createDate;
  46 + /** 修改日期 */
  47 + @Column(name = "update_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
  48 + private Date updateDate;
  49 +
  50 +
  51 + public Long getId() {
  52 + return id;
  53 + }
  54 +
  55 + public void setId(Long id) {
  56 + this.id = id;
  57 + }
  58 +
  59 + public Line getXl() {
  60 + return xl;
  61 + }
  62 +
  63 + public void setXl(Line xl) {
  64 + this.xl = xl;
  65 + }
  66 +
  67 + public Integer getLpNo() {
  68 + return lpNo;
  69 + }
  70 +
  71 + public void setLpNo(Integer lpNo) {
  72 + this.lpNo = lpNo;
  73 + }
  74 +
  75 + public String getLpName() {
  76 + return lpName;
  77 + }
  78 +
  79 + public void setLpName(String lpName) {
  80 + this.lpName = lpName;
  81 + }
  82 +
  83 + public String getLpType() {
  84 + return lpType;
  85 + }
  86 +
  87 + public void setLpType(String lpType) {
  88 + this.lpType = lpType;
  89 + }
  90 +
  91 + public SysUser getCreateBy() {
  92 + return createBy;
  93 + }
  94 +
  95 + public void setCreateBy(SysUser createBy) {
  96 + this.createBy = createBy;
  97 + }
  98 +
  99 + public SysUser getUpdateBy() {
  100 + return updateBy;
  101 + }
  102 +
  103 + public void setUpdateBy(SysUser updateBy) {
  104 + this.updateBy = updateBy;
  105 + }
  106 +
  107 + public Date getCreateDate() {
  108 + return createDate;
  109 + }
  110 +
  111 + public void setCreateDate(Date createDate) {
  112 + this.createDate = createDate;
  113 + }
  114 +
  115 + public Date getUpdateDate() {
  116 + return updateDate;
  117 + }
  118 +
  119 + public void setUpdateDate(Date updateDate) {
  120 + this.updateDate = updateDate;
  121 + }
  122 +}
src/main/java/com/bsth/entity/schedule/TTInfo.java
1 -package com.bsth.entity.schedule;  
2 -  
3 -import com.bsth.entity.Line;  
4 -import com.bsth.entity.sys.SysUser;  
5 -  
6 -import javax.persistence.*;  
7 -import java.util.Date;  
8 -  
9 -/**  
10 - * 时刻表信息  
11 - */  
12 -@Entity  
13 -@Table(name="bsth_c_s_ttinfo")  
14 -public class TTInfo {  
15 -  
16 - /** 主键Id */  
17 - @Id  
18 - @GeneratedValue  
19 - private Long id;  
20 -  
21 - /** 线路关联 */  
22 - @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
23 - private Line xl;  
24 -  
25 - /** 时刻表名称 */  
26 - @Column(nullable = false, unique = true)  
27 - private String name;  
28 - /** 线路方向(TODO:上下行,上行,下行,这个以后用枚举还是字典再议,现在先用文字) */  
29 - @Column(nullable = false)  
30 - private String xlDir;  
31 - /** 启用日期 */  
32 - @Column(nullable = false)  
33 - private Date qyrq;  
34 - /** 模版类型(TODO:时刻表,间隔式,这个以后用枚举还是字典再议,现在先用文字) */  
35 - private String templateType;  
36 - /** 是否启用调度模版 */  
37 - private Boolean isEnableDisTemplate;  
38 - /** 路牌数 */  
39 - private int lpCount;  
40 - /** 圈数 */  
41 - private int loopCount;  
42 -  
43 - // TODO:原系统里的分别在,圈后圈进场,意思不知道,再议  
44 -  
45 - /** 常规有效日(1-7表示星期一到星期日,多个用逗号隔开) */  
46 - private String rule_days;  
47 - /** 特殊有效日期(格式:2001-01-01,多个用逗号隔开) */  
48 - private String special_days;  
49 -  
50 -  
51 -  
52 - /** 是否启用(这个是算出来的,不持久化) */  
53 - @Transient  
54 - private boolean isEnable;  
55 -  
56 - /** 操作人员关联 */  
57 - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
58 - private SysUser createBy;  
59 - /** 更新人员关联 */  
60 - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
61 - private SysUser updateBy;  
62 - // 创建日期  
63 - @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")  
64 - private Date createDate;  
65 - // 修改日期  
66 - @Column(name = "update_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")  
67 - private Date updateDate;  
68 -  
69 -  
70 - public Long getId() {  
71 - return id;  
72 - }  
73 -  
74 - public void setId(Long id) {  
75 - this.id = id;  
76 - }  
77 -  
78 - public Line getXl() {  
79 - return xl;  
80 - }  
81 -  
82 - public void setXl(Line xl) {  
83 - this.xl = xl;  
84 - }  
85 -  
86 - public String getName() {  
87 - return name;  
88 - }  
89 -  
90 - public void setName(String name) {  
91 - this.name = name;  
92 - }  
93 -  
94 - public String getXlDir() {  
95 - return xlDir;  
96 - }  
97 -  
98 - public void setXlDir(String xlDir) {  
99 - this.xlDir = xlDir;  
100 - }  
101 -  
102 - public Date getQyrq() {  
103 - return qyrq;  
104 - }  
105 -  
106 - public void setQyrq(Date qyrq) {  
107 - this.qyrq = qyrq;  
108 - }  
109 -  
110 - public String getTemplateType() {  
111 - return templateType;  
112 - }  
113 -  
114 - public void setTemplateType(String templateType) {  
115 - this.templateType = templateType;  
116 - }  
117 -  
118 - public Boolean getIsEnableDisTemplate() {  
119 - return isEnableDisTemplate;  
120 - }  
121 -  
122 - public void setIsEnableDisTemplate(Boolean isEnableDisTemplate) {  
123 - this.isEnableDisTemplate = isEnableDisTemplate;  
124 - }  
125 -  
126 - public int getLpCount() {  
127 - return lpCount;  
128 - }  
129 -  
130 - public void setLpCount(int lpCount) {  
131 - this.lpCount = lpCount;  
132 - }  
133 -  
134 - public int getLoopCount() {  
135 - return loopCount;  
136 - }  
137 -  
138 - public void setLoopCount(int loopCount) {  
139 - this.loopCount = loopCount;  
140 - }  
141 -  
142 - public String getRule_days() {  
143 - return rule_days;  
144 - }  
145 -  
146 - public void setRule_days(String rule_days) {  
147 - this.rule_days = rule_days;  
148 - }  
149 -  
150 - public String getSpecial_days() {  
151 - return special_days;  
152 - }  
153 -  
154 - public void setSpecial_days(String special_days) {  
155 - this.special_days = special_days;  
156 - }  
157 -  
158 - public boolean isEnable() {  
159 - return isEnable;  
160 - }  
161 -  
162 - public void setIsEnable(boolean isEnable) {  
163 - this.isEnable = isEnable;  
164 - }  
165 -  
166 - public SysUser getCreateBy() {  
167 - return createBy;  
168 - }  
169 -  
170 - public void setCreateBy(SysUser createBy) {  
171 - this.createBy = createBy;  
172 - }  
173 -  
174 - public SysUser getUpdateBy() {  
175 - return updateBy;  
176 - }  
177 -  
178 - public void setUpdateBy(SysUser updateBy) {  
179 - this.updateBy = updateBy;  
180 - }  
181 -  
182 - public Date getCreateDate() {  
183 - return createDate;  
184 - }  
185 -  
186 - public void setCreateDate(Date createDate) {  
187 - this.createDate = createDate;  
188 - }  
189 -  
190 - public Date getUpdateDate() {  
191 - return updateDate;  
192 - }  
193 -  
194 - public void setUpdateDate(Date updateDate) {  
195 - this.updateDate = updateDate;  
196 - }  
197 -} 1 +package com.bsth.entity.schedule;
  2 +
  3 +import com.bsth.entity.Line;
  4 +import com.bsth.entity.sys.SysUser;
  5 +
  6 +import javax.persistence.*;
  7 +import java.util.Date;
  8 +
  9 +/**
  10 + * 时刻表信息
  11 + */
  12 +@Entity
  13 +@Table(name="bsth_c_s_ttinfo")
  14 +public class TTInfo {
  15 +
  16 + /** 主键Id */
  17 + @Id
  18 + @GeneratedValue
  19 + private Long id;
  20 +
  21 + /** 线路关联 */
  22 + @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  23 + private Line xl;
  24 +
  25 + /** 时刻表名称 */
  26 + @Column(nullable = false, unique = true)
  27 + private String name;
  28 + /** 线路方向(TODO:上下行,上行,下行,这个以后用枚举还是字典再议,现在先用文字) */
  29 + @Column(nullable = false)
  30 + private String xlDir;
  31 + /** 启用日期 */
  32 + @Column(nullable = false)
  33 + private Date qyrq;
  34 + /** 模版类型(TODO:时刻表,间隔式,这个以后用枚举还是字典再议,现在先用文字) */
  35 + private String templateType;
  36 + /** 是否启用调度模版 */
  37 + private Boolean isEnableDisTemplate;
  38 + /** 路牌数 */
  39 + private int lpCount;
  40 + /** 圈数 */
  41 + private int loopCount;
  42 +
  43 + // TODO:原系统里的分别在,圈后圈进场,意思不知道,再议
  44 +
  45 + /** 常规有效日(1-7表示星期一到星期日,多个用逗号隔开) */
  46 + private String rule_days;
  47 + /** 特殊有效日期(格式:2001-01-01,多个用逗号隔开) */
  48 + private String special_days;
  49 +
  50 +
  51 +
  52 + /** 是否启用(这个是算出来的,不持久化) */
  53 + @Transient
  54 + private boolean isEnable;
  55 +
  56 + /** 操作人员关联 */
  57 + @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  58 + private SysUser createBy;
  59 + /** 更新人员关联 */
  60 + @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  61 + private SysUser updateBy;
  62 + // 创建日期
  63 + @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
  64 + private Date createDate;
  65 + // 修改日期
  66 + @Column(name = "update_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
  67 + private Date updateDate;
  68 +
  69 +
  70 + public Long getId() {
  71 + return id;
  72 + }
  73 +
  74 + public void setId(Long id) {
  75 + this.id = id;
  76 + }
  77 +
  78 + public Line getXl() {
  79 + return xl;
  80 + }
  81 +
  82 + public void setXl(Line xl) {
  83 + this.xl = xl;
  84 + }
  85 +
  86 + public String getName() {
  87 + return name;
  88 + }
  89 +
  90 + public void setName(String name) {
  91 + this.name = name;
  92 + }
  93 +
  94 + public String getXlDir() {
  95 + return xlDir;
  96 + }
  97 +
  98 + public void setXlDir(String xlDir) {
  99 + this.xlDir = xlDir;
  100 + }
  101 +
  102 + public Date getQyrq() {
  103 + return qyrq;
  104 + }
  105 +
  106 + public void setQyrq(Date qyrq) {
  107 + this.qyrq = qyrq;
  108 + }
  109 +
  110 + public String getTemplateType() {
  111 + return templateType;
  112 + }
  113 +
  114 + public void setTemplateType(String templateType) {
  115 + this.templateType = templateType;
  116 + }
  117 +
  118 + public Boolean getIsEnableDisTemplate() {
  119 + return isEnableDisTemplate;
  120 + }
  121 +
  122 + public void setIsEnableDisTemplate(Boolean isEnableDisTemplate) {
  123 + this.isEnableDisTemplate = isEnableDisTemplate;
  124 + }
  125 +
  126 + public int getLpCount() {
  127 + return lpCount;
  128 + }
  129 +
  130 + public void setLpCount(int lpCount) {
  131 + this.lpCount = lpCount;
  132 + }
  133 +
  134 + public int getLoopCount() {
  135 + return loopCount;
  136 + }
  137 +
  138 + public void setLoopCount(int loopCount) {
  139 + this.loopCount = loopCount;
  140 + }
  141 +
  142 + public String getRule_days() {
  143 + return rule_days;
  144 + }
  145 +
  146 + public void setRule_days(String rule_days) {
  147 + this.rule_days = rule_days;
  148 + }
  149 +
  150 + public String getSpecial_days() {
  151 + return special_days;
  152 + }
  153 +
  154 + public void setSpecial_days(String special_days) {
  155 + this.special_days = special_days;
  156 + }
  157 +
  158 + public boolean isEnable() {
  159 + return isEnable;
  160 + }
  161 +
  162 + public void setIsEnable(boolean isEnable) {
  163 + this.isEnable = isEnable;
  164 + }
  165 +
  166 + public SysUser getCreateBy() {
  167 + return createBy;
  168 + }
  169 +
  170 + public void setCreateBy(SysUser createBy) {
  171 + this.createBy = createBy;
  172 + }
  173 +
  174 + public SysUser getUpdateBy() {
  175 + return updateBy;
  176 + }
  177 +
  178 + public void setUpdateBy(SysUser updateBy) {
  179 + this.updateBy = updateBy;
  180 + }
  181 +
  182 + public Date getCreateDate() {
  183 + return createDate;
  184 + }
  185 +
  186 + public void setCreateDate(Date createDate) {
  187 + this.createDate = createDate;
  188 + }
  189 +
  190 + public Date getUpdateDate() {
  191 + return updateDate;
  192 + }
  193 +
  194 + public void setUpdateDate(Date updateDate) {
  195 + this.updateDate = updateDate;
  196 + }
  197 +}
src/main/java/com/bsth/entity/schedule/TTInfoDetail.java
1 -package com.bsth.entity.schedule;  
2 -  
3 -import com.bsth.entity.CarPark;  
4 -import com.bsth.entity.Line;  
5 -import com.bsth.entity.Station;  
6 -import com.bsth.entity.sys.SysUser;  
7 -  
8 -import javax.persistence.*;  
9 -import java.util.Date;  
10 -  
11 -/**  
12 - * 时刻表明细  
13 - */  
14 -@Entity  
15 -@Table(name = "bsth_c_s_ttinfo_detail")  
16 -public class TTInfoDetail {  
17 -  
18 - /** 主健Id */  
19 - @Id  
20 - @GeneratedValue  
21 - private Long id;  
22 -  
23 -  
24 - /** 关联线路 */  
25 - @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
26 - private Line xl;  
27 - /** 时刻表主对象关联 */  
28 - @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
29 - private TTInfo ttinfo;  
30 - /** 关联的路牌 */  
31 - @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
32 - private GuideboardInfo lp;  
33 -  
34 - /** 发车顺序号 */  
35 - @Column(nullable = false)  
36 - private Integer fcno;  
37 - /** 线路方向(TODO:上下行,上行,下行,这个以后用枚举还是字典再议,现在先用文字) */  
38 - @Column(nullable = false)  
39 - private String xlDir;  
40 - /** 起点站关联 */  
41 - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
42 - private Station qdz;  
43 - /** 终点站关联 */  
44 - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
45 - private Station zdz;  
46 - /** 停车场关联(出场,进场班次会关联停车场) */  
47 - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
48 - private CarPark tcc;  
49 -  
50 - /** 发车时间(格式 HH:mm) */  
51 - @Column(nullable = false, length = 5)  
52 - private String fcsj;  
53 - /** 对应班次数 */  
54 - private Integer bcs;  
55 - @Column(nullable = false)  
56 - /** 计划里程 */  
57 - private Double jhlc;  
58 - /** 班次历时 */  
59 - private Integer bcsj;  
60 -  
61 - /**  
62 - * 班次类型  
63 - * TODO:正常班次、出场、进场、加油、临加班次、区间班次、放空班次、放大站班次、两点间空驶  
64 - * TODO:这个以后用枚举还是字典再议,现在先用文字  
65 - */  
66 - @Column(nullable = false)  
67 - private String bcType;  
68 -  
69 - /** 是否分班(表示这个班次是否是晚班班次,就是换另外一个驾驶员开)*/  
70 - private Boolean isFB;  
71 -  
72 - /** 是否切换线路 */  
73 - private Boolean isSwitchXl;  
74 - /** 切换的线路(isSwitchXl == true) */  
75 - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
76 - private Line switchXl;  
77 - /** 切换线路信息(isSwitchXl == true) */  
78 - private String switchXlDesc;  
79 - /** 备注 */  
80 - private String remark;  
81 -  
82 - /** 创建人 */  
83 - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
84 - private SysUser createBy;  
85 - /** 修改人 */  
86 - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)  
87 - private SysUser updateBy;  
88 -  
89 - /** 创建日期 */  
90 - @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")  
91 - private Date createDate;  
92 - /** 修改日期 */  
93 - @Column(name = "update_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")  
94 - private Date updateDate;  
95 -  
96 - public Long getId() {  
97 - return id;  
98 - }  
99 -  
100 - public void setId(Long id) {  
101 - this.id = id;  
102 - }  
103 -  
104 - public Line getXl() {  
105 - return xl;  
106 - }  
107 -  
108 - public void setXl(Line xl) {  
109 - this.xl = xl;  
110 - }  
111 -  
112 - public TTInfo getTtinfo() {  
113 - return ttinfo;  
114 - }  
115 -  
116 - public void setTtinfo(TTInfo ttinfo) {  
117 - this.ttinfo = ttinfo;  
118 - }  
119 -  
120 - public GuideboardInfo getLp() {  
121 - return lp;  
122 - }  
123 -  
124 - public void setLp(GuideboardInfo lp) {  
125 - this.lp = lp;  
126 - }  
127 -  
128 - public Integer getFcno() {  
129 - return fcno;  
130 - }  
131 -  
132 - public void setFcno(Integer fcno) {  
133 - this.fcno = fcno;  
134 - }  
135 -  
136 - public String getXlDir() {  
137 - return xlDir;  
138 - }  
139 -  
140 - public void setXlDir(String xlDir) {  
141 - this.xlDir = xlDir;  
142 - }  
143 -  
144 - public Station getQdz() {  
145 - return qdz;  
146 - }  
147 -  
148 - public void setQdz(Station qdz) {  
149 - this.qdz = qdz;  
150 - }  
151 -  
152 - public Station getZdz() {  
153 - return zdz;  
154 - }  
155 -  
156 - public void setZdz(Station zdz) {  
157 - this.zdz = zdz;  
158 - }  
159 -  
160 - public String getFcsj() {  
161 - return fcsj;  
162 - }  
163 -  
164 - public void setFcsj(String fcsj) {  
165 - this.fcsj = fcsj;  
166 - }  
167 -  
168 - public Integer getBcs() {  
169 - return bcs;  
170 - }  
171 -  
172 - public void setBcs(Integer bcs) {  
173 - this.bcs = bcs;  
174 - }  
175 -  
176 - public Double getJhlc() {  
177 - return jhlc;  
178 - }  
179 -  
180 - public void setJhlc(Double jhlc) {  
181 - this.jhlc = jhlc;  
182 - }  
183 -  
184 - public Integer getBcsj() {  
185 - return bcsj;  
186 - }  
187 -  
188 - public void setBcsj(Integer bcsj) {  
189 - this.bcsj = bcsj;  
190 - }  
191 -  
192 - public String getBcType() {  
193 - return bcType;  
194 - }  
195 -  
196 - public void setBcType(String bcType) {  
197 - this.bcType = bcType;  
198 - }  
199 -  
200 - public Boolean getIsSwitchXl() {  
201 - return isSwitchXl;  
202 - }  
203 -  
204 - public void setIsSwitchXl(Boolean isSwitchXl) {  
205 - this.isSwitchXl = isSwitchXl;  
206 - }  
207 -  
208 - public Line getSwitchXl() {  
209 - return switchXl;  
210 - }  
211 -  
212 - public void setSwitchXl(Line switchXl) {  
213 - this.switchXl = switchXl;  
214 - }  
215 -  
216 - public String getSwitchXlDesc() {  
217 - return switchXlDesc;  
218 - }  
219 -  
220 - public void setSwitchXlDesc(String switchXlDesc) {  
221 - this.switchXlDesc = switchXlDesc;  
222 - }  
223 -  
224 - public String getRemark() {  
225 - return remark;  
226 - }  
227 -  
228 - public void setRemark(String remark) {  
229 - this.remark = remark;  
230 - }  
231 -  
232 - public SysUser getCreateBy() {  
233 - return createBy;  
234 - }  
235 -  
236 - public void setCreateBy(SysUser createBy) {  
237 - this.createBy = createBy;  
238 - }  
239 -  
240 - public SysUser getUpdateBy() {  
241 - return updateBy;  
242 - }  
243 -  
244 - public void setUpdateBy(SysUser updateBy) {  
245 - this.updateBy = updateBy;  
246 - }  
247 -  
248 - public Date getCreateDate() {  
249 - return createDate;  
250 - }  
251 -  
252 - public void setCreateDate(Date createDate) {  
253 - this.createDate = createDate;  
254 - }  
255 -  
256 - public Date getUpdateDate() {  
257 - return updateDate;  
258 - }  
259 -  
260 - public void setUpdateDate(Date updateDate) {  
261 - this.updateDate = updateDate;  
262 - }  
263 -  
264 - public CarPark getTcc() {  
265 - return tcc;  
266 - }  
267 -  
268 - public void setTcc(CarPark tcc) {  
269 - this.tcc = tcc;  
270 - }  
271 -  
272 - public Boolean getIsFB() {  
273 - return isFB;  
274 - }  
275 -  
276 - public void setIsFB(Boolean isFB) {  
277 - this.isFB = isFB;  
278 - }  
279 -} 1 +package com.bsth.entity.schedule;
  2 +
  3 +import com.bsth.entity.CarPark;
  4 +import com.bsth.entity.Line;
  5 +import com.bsth.entity.Station;
  6 +import com.bsth.entity.sys.SysUser;
  7 +
  8 +import javax.persistence.*;
  9 +import java.util.Date;
  10 +
  11 +/**
  12 + * 时刻表明细
  13 + */
  14 +@Entity
  15 +@Table(name = "bsth_c_s_ttinfo_detail")
  16 +public class TTInfoDetail {
  17 +
  18 + /** 主健Id */
  19 + @Id
  20 + @GeneratedValue
  21 + private Long id;
  22 +
  23 +
  24 + /** 关联线路 */
  25 + @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  26 + private Line xl;
  27 + /** 时刻表主对象关联 */
  28 + @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  29 + private TTInfo ttinfo;
  30 + /** 关联的路牌 */
  31 + @ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  32 + private GuideboardInfo lp;
  33 +
  34 + /** 发车顺序号 */
  35 + @Column(nullable = false)
  36 + private Integer fcno;
  37 + /** 线路方向(TODO:上下行,上行,下行,这个以后用枚举还是字典再议,现在先用文字) */
  38 + @Column(nullable = false)
  39 + private String xlDir;
  40 + /** 起点站关联 */
  41 + @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  42 + private Station qdz;
  43 + /** 终点站关联 */
  44 + @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  45 + private Station zdz;
  46 + /** 停车场关联(出场,进场班次会关联停车场) */
  47 + @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  48 + private CarPark tcc;
  49 +
  50 + /** 发车时间(格式 HH:mm) */
  51 + @Column(nullable = false, length = 5)
  52 + private String fcsj;
  53 + /** 对应班次数 */
  54 + private Integer bcs;
  55 + @Column(nullable = false)
  56 + /** 计划里程 */
  57 + private Double jhlc;
  58 + /** 班次历时 */
  59 + private Integer bcsj;
  60 +
  61 + /**
  62 + * 班次类型
  63 + * TODO:正常班次、出场、进场、加油、临加班次、区间班次、放空班次、放大站班次、两点间空驶
  64 + * TODO:这个以后用枚举还是字典再议,现在先用文字
  65 + */
  66 + @Column(nullable = false)
  67 + private String bcType;
  68 +
  69 + /** 是否分班(表示这个班次是否是晚班班次,就是换另外一个驾驶员开)*/
  70 + private Boolean isFB;
  71 +
  72 + /** 是否切换线路 */
  73 + private Boolean isSwitchXl;
  74 + /** 切换的线路(isSwitchXl == true) */
  75 + @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  76 + private Line switchXl;
  77 + /** 切换线路信息(isSwitchXl == true) */
  78 + private String switchXlDesc;
  79 + /** 备注 */
  80 + private String remark;
  81 +
  82 + /** 创建人 */
  83 + @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  84 + private SysUser createBy;
  85 + /** 修改人 */
  86 + @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  87 + private SysUser updateBy;
  88 +
  89 + /** 创建日期 */
  90 + @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
  91 + private Date createDate;
  92 + /** 修改日期 */
  93 + @Column(name = "update_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
  94 + private Date updateDate;
  95 +
  96 + public Long getId() {
  97 + return id;
  98 + }
  99 +
  100 + public void setId(Long id) {
  101 + this.id = id;
  102 + }
  103 +
  104 + public Line getXl() {
  105 + return xl;
  106 + }
  107 +
  108 + public void setXl(Line xl) {
  109 + this.xl = xl;
  110 + }
  111 +
  112 + public TTInfo getTtinfo() {
  113 + return ttinfo;
  114 + }
  115 +
  116 + public void setTtinfo(TTInfo ttinfo) {
  117 + this.ttinfo = ttinfo;
  118 + }
  119 +
  120 + public GuideboardInfo getLp() {
  121 + return lp;
  122 + }
  123 +
  124 + public void setLp(GuideboardInfo lp) {
  125 + this.lp = lp;
  126 + }
  127 +
  128 + public Integer getFcno() {
  129 + return fcno;
  130 + }
  131 +
  132 + public void setFcno(Integer fcno) {
  133 + this.fcno = fcno;
  134 + }
  135 +
  136 + public String getXlDir() {
  137 + return xlDir;
  138 + }
  139 +
  140 + public void setXlDir(String xlDir) {
  141 + this.xlDir = xlDir;
  142 + }
  143 +
  144 + public Station getQdz() {
  145 + return qdz;
  146 + }
  147 +
  148 + public void setQdz(Station qdz) {
  149 + this.qdz = qdz;
  150 + }
  151 +
  152 + public Station getZdz() {
  153 + return zdz;
  154 + }
  155 +
  156 + public void setZdz(Station zdz) {
  157 + this.zdz = zdz;
  158 + }
  159 +
  160 + public String getFcsj() {
  161 + return fcsj;
  162 + }
  163 +
  164 + public void setFcsj(String fcsj) {
  165 + this.fcsj = fcsj;
  166 + }
  167 +
  168 + public Integer getBcs() {
  169 + return bcs;
  170 + }
  171 +
  172 + public void setBcs(Integer bcs) {
  173 + this.bcs = bcs;
  174 + }
  175 +
  176 + public Double getJhlc() {
  177 + return jhlc;
  178 + }
  179 +
  180 + public void setJhlc(Double jhlc) {
  181 + this.jhlc = jhlc;
  182 + }
  183 +
  184 + public Integer getBcsj() {
  185 + return bcsj;
  186 + }
  187 +
  188 + public void setBcsj(Integer bcsj) {
  189 + this.bcsj = bcsj;
  190 + }
  191 +
  192 + public String getBcType() {
  193 + return bcType;
  194 + }
  195 +
  196 + public void setBcType(String bcType) {
  197 + this.bcType = bcType;
  198 + }
  199 +
  200 + public Boolean getIsSwitchXl() {
  201 + return isSwitchXl;
  202 + }
  203 +
  204 + public void setIsSwitchXl(Boolean isSwitchXl) {
  205 + this.isSwitchXl = isSwitchXl;
  206 + }
  207 +
  208 + public Line getSwitchXl() {
  209 + return switchXl;
  210 + }
  211 +
  212 + public void setSwitchXl(Line switchXl) {
  213 + this.switchXl = switchXl;
  214 + }
  215 +
  216 + public String getSwitchXlDesc() {
  217 + return switchXlDesc;
  218 + }
  219 +
  220 + public void setSwitchXlDesc(String switchXlDesc) {
  221 + this.switchXlDesc = switchXlDesc;
  222 + }
  223 +
  224 + public String getRemark() {
  225 + return remark;
  226 + }
  227 +
  228 + public void setRemark(String remark) {
  229 + this.remark = remark;
  230 + }
  231 +
  232 + public SysUser getCreateBy() {
  233 + return createBy;
  234 + }
  235 +
  236 + public void setCreateBy(SysUser createBy) {
  237 + this.createBy = createBy;
  238 + }
  239 +
  240 + public SysUser getUpdateBy() {
  241 + return updateBy;
  242 + }
  243 +
  244 + public void setUpdateBy(SysUser updateBy) {
  245 + this.updateBy = updateBy;
  246 + }
  247 +
  248 + public Date getCreateDate() {
  249 + return createDate;
  250 + }
  251 +
  252 + public void setCreateDate(Date createDate) {
  253 + this.createDate = createDate;
  254 + }
  255 +
  256 + public Date getUpdateDate() {
  257 + return updateDate;
  258 + }
  259 +
  260 + public void setUpdateDate(Date updateDate) {
  261 + this.updateDate = updateDate;
  262 + }
  263 +
  264 + public CarPark getTcc() {
  265 + return tcc;
  266 + }
  267 +
  268 + public void setTcc(CarPark tcc) {
  269 + this.tcc = tcc;
  270 + }
  271 +
  272 + public Boolean getIsFB() {
  273 + return isFB;
  274 + }
  275 +
  276 + public void setIsFB(Boolean isFB) {
  277 + this.isFB = isFB;
  278 + }
  279 +}
src/main/java/com/bsth/repository/CarDeviceRepository.java
1 -package com.bsth.repository;  
2 -  
3 -import com.bsth.entity.CarDevice;  
4 -import org.springframework.stereotype.Repository;  
5 -  
6 -/**  
7 - * Created by xu on 16/6/15.  
8 - */  
9 -@Repository  
10 -public interface CarDeviceRepository extends BaseRepository<CarDevice, Long> {  
11 -} 1 +package com.bsth.repository;
  2 +
  3 +import com.bsth.entity.CarDevice;
  4 +import org.springframework.stereotype.Repository;
  5 +
  6 +/**
  7 + * Created by xu on 16/6/15.
  8 + */
  9 +@Repository
  10 +public interface CarDeviceRepository extends BaseRepository<CarDevice, Long> {
  11 +}
src/main/java/com/bsth/repository/PersonnelRepository.java
1 -package com.bsth.repository;  
2 -  
3 -import com.bsth.entity.Personnel;  
4 -import org.springframework.stereotype.Repository;  
5 -  
6 -/**  
7 - * Created by xu on 16/6/15.  
8 - */  
9 -@Repository  
10 -public interface PersonnelRepository extends BaseRepository<Personnel, Integer> {  
11 -} 1 +package com.bsth.repository;
  2 +
  3 +import com.bsth.entity.Personnel;
  4 +import org.springframework.stereotype.Repository;
  5 +
  6 +/**
  7 + * Created by xu on 16/6/15.
  8 + */
  9 +@Repository
  10 +public interface PersonnelRepository extends BaseRepository<Personnel, Integer> {
  11 +}
src/main/java/com/bsth/repository/schedule/CarConfigInfoRepository.java
@@ -2,10 +2,14 @@ package com.bsth.repository.schedule; @@ -2,10 +2,14 @@ package com.bsth.repository.schedule;
2 2
3 import com.bsth.entity.schedule.CarConfigInfo; 3 import com.bsth.entity.schedule.CarConfigInfo;
4 import com.bsth.repository.BaseRepository; 4 import com.bsth.repository.BaseRepository;
  5 +
  6 +import java.util.List;
  7 +
5 import org.springframework.data.domain.Page; 8 import org.springframework.data.domain.Page;
6 import org.springframework.data.domain.Pageable; 9 import org.springframework.data.domain.Pageable;
7 import org.springframework.data.jpa.domain.Specification; 10 import org.springframework.data.jpa.domain.Specification;
8 import org.springframework.data.jpa.repository.EntityGraph; 11 import org.springframework.data.jpa.repository.EntityGraph;
  12 +import org.springframework.data.jpa.repository.Query;
9 import org.springframework.stereotype.Repository; 13 import org.springframework.stereotype.Repository;
10 14
11 /** 15 /**
@@ -17,4 +21,8 @@ public interface CarConfigInfoRepository extends BaseRepository&lt;CarConfigInfo, L @@ -17,4 +21,8 @@ public interface CarConfigInfoRepository extends BaseRepository&lt;CarConfigInfo, L
17 @EntityGraph(value = "carConfigInfo_xl_cl", type = EntityGraph.EntityGraphType.FETCH) 21 @EntityGraph(value = "carConfigInfo_xl_cl", type = EntityGraph.EntityGraphType.FETCH)
18 @Override 22 @Override
19 Page<CarConfigInfo> findAll(Specification<CarConfigInfo> spec, Pageable pageable); 23 Page<CarConfigInfo> findAll(Specification<CarConfigInfo> spec, Pageable pageable);
20 -} 24 +
  25 + @EntityGraph(value = "carConfigInfo_xl_cl", type = EntityGraph.EntityGraphType.FETCH)
  26 + @Query("select cc from CarConfigInfo cc where cc.xl.lineCode=?1")
  27 + List<CarConfigInfo> findBylineCode(String lineCode);
  28 +}
21 \ No newline at end of file 29 \ No newline at end of file
src/main/java/com/bsth/repository/schedule/EmployeeConfigInfoRepository.java
@@ -16,6 +16,6 @@ import org.springframework.stereotype.Repository; @@ -16,6 +16,6 @@ import org.springframework.stereotype.Repository;
16 public interface EmployeeConfigInfoRepository extends BaseRepository<EmployeeConfigInfo, Long> { 16 public interface EmployeeConfigInfoRepository extends BaseRepository<EmployeeConfigInfo, Long> {
17 17
18 @EntityGraph(value = "employeeConfigInfo_xl_cl", type = EntityGraph.EntityGraphType.FETCH) 18 @EntityGraph(value = "employeeConfigInfo_xl_cl", type = EntityGraph.EntityGraphType.FETCH)
19 - @Query("select ec from EmployeeConfigInfo ec where ec.xl.id=?1")  
20 - List<EmployeeConfigInfo> findByLine(Integer lineId); 19 + @Query("select ec from EmployeeConfigInfo ec where ec.xl.lineCode=?1")
  20 + List<EmployeeConfigInfo> findBylineCode(String lineCode);
21 } 21 }
src/main/java/com/bsth/repository/schedule/SchedulePlanRepository.java
1 -package com.bsth.repository.schedule;  
2 -  
3 -import com.bsth.entity.schedule.SchedulePlan;  
4 -import com.bsth.repository.BaseRepository;  
5 -import org.springframework.stereotype.Repository;  
6 -  
7 -/**  
8 - * Created by xu on 16/6/16.  
9 - */  
10 -@Repository  
11 -public interface SchedulePlanRepository extends BaseRepository<SchedulePlan, Long> {  
12 -} 1 +package com.bsth.repository.schedule;
  2 +
  3 +import com.bsth.entity.schedule.SchedulePlan;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +/**
  8 + * Created by xu on 16/6/16.
  9 + */
  10 +@Repository
  11 +public interface SchedulePlanRepository extends BaseRepository<SchedulePlan, Long> {
  12 +}
src/main/java/com/bsth/service/CarDeviceService.java
1 -package com.bsth.service;  
2 -  
3 -import com.bsth.entity.CarDevice;  
4 -  
5 -/**  
6 - * Created by xu on 16/6/15.  
7 - */  
8 -public interface CarDeviceService extends BaseService<CarDevice, Long> {  
9 -} 1 +package com.bsth.service;
  2 +
  3 +import com.bsth.entity.CarDevice;
  4 +
  5 +/**
  6 + * Created by xu on 16/6/15.
  7 + */
  8 +public interface CarDeviceService extends BaseService<CarDevice, Long> {
  9 +}
src/main/java/com/bsth/service/PersonnelService.java
1 -package com.bsth.service;  
2 -  
3 -import com.bsth.entity.Personnel;  
4 -  
5 -/**  
6 - * Created by xu on 16/6/15.  
7 - */  
8 -public interface PersonnelService extends BaseService<Personnel, Integer> {  
9 -} 1 +package com.bsth.service;
  2 +
  3 +import com.bsth.entity.Personnel;
  4 +
  5 +/**
  6 + * Created by xu on 16/6/15.
  7 + */
  8 +public interface PersonnelService extends BaseService<Personnel, Integer> {
  9 +}
src/main/java/com/bsth/service/impl/CarDeviceServiceImpl.java
1 -package com.bsth.service.impl;  
2 -  
3 -import com.bsth.entity.CarDevice;  
4 -import com.bsth.service.CarDeviceService;  
5 -import org.springframework.stereotype.Service;  
6 -  
7 -/**  
8 - * Created by xu on 16/6/15.  
9 - */  
10 -@Service  
11 -public class CarDeviceServiceImpl extends BaseServiceImpl<CarDevice, Long> implements CarDeviceService {  
12 -} 1 +package com.bsth.service.impl;
  2 +
  3 +import com.bsth.entity.CarDevice;
  4 +import com.bsth.service.CarDeviceService;
  5 +import org.springframework.stereotype.Service;
  6 +
  7 +/**
  8 + * Created by xu on 16/6/15.
  9 + */
  10 +@Service
  11 +public class CarDeviceServiceImpl extends BaseServiceImpl<CarDevice, Long> implements CarDeviceService {
  12 +}
src/main/java/com/bsth/service/impl/PersonnelServiceImpl.java
1 -package com.bsth.service.impl;  
2 -  
3 -import com.bsth.entity.Personnel;  
4 -import com.bsth.service.PersonnelService;  
5 -import org.springframework.stereotype.Service;  
6 -  
7 -/**  
8 - * Created by xu on 16/6/15.  
9 - */  
10 -@Service  
11 -public class PersonnelServiceImpl extends BaseServiceImpl<Personnel, Integer> implements PersonnelService {  
12 -} 1 +package com.bsth.service.impl;
  2 +
  3 +import com.bsth.entity.Personnel;
  4 +import com.bsth.service.PersonnelService;
  5 +import org.springframework.stereotype.Service;
  6 +
  7 +/**
  8 + * Created by xu on 16/6/15.
  9 + */
  10 +@Service
  11 +public class PersonnelServiceImpl extends BaseServiceImpl<Personnel, Integer> implements PersonnelService {
  12 +}
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
1 package com.bsth.service.realcontrol; 1 package com.bsth.service.realcontrol;
2 2
3 import java.util.Collection; 3 import java.util.Collection;
  4 +import java.util.List;
4 import java.util.Map; 5 import java.util.Map;
5 6
6 import org.springframework.stereotype.Service; 7 import org.springframework.stereotype.Service;
@@ -17,4 +18,10 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -17,4 +18,10 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
17 18
18 Map<String, Object> destroy(String idsStr, int spaceAdjust, String remarks, String reason, int spaceNum); 19 Map<String, Object> destroy(String idsStr, int spaceAdjust, String remarks, String reason, int spaceNum);
19 20
  21 + List<Map<String, String>> findDriverByLine(String lineCode);
  22 +
  23 + List<Map<String, String>> findConductorByLine(String lineCode);
  24 +
  25 + List<Map<String, String>> findCarByLine(String lineCode);
  26 +
20 } 27 }
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -14,8 +14,14 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -14,8 +14,14 @@ import org.springframework.beans.factory.annotation.Autowired;
14 import org.springframework.stereotype.Service; 14 import org.springframework.stereotype.Service;
15 15
16 import com.bsth.common.ResponseCode; 16 import com.bsth.common.ResponseCode;
  17 +import com.bsth.entity.Cars;
  18 +import com.bsth.entity.Personnel;
17 import com.bsth.entity.realcontrol.ScheduleRealInfo; 19 import com.bsth.entity.realcontrol.ScheduleRealInfo;
  20 +import com.bsth.entity.schedule.CarConfigInfo;
  21 +import com.bsth.entity.schedule.EmployeeConfigInfo;
18 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; 22 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
  23 +import com.bsth.repository.schedule.CarConfigInfoRepository;
  24 +import com.bsth.repository.schedule.EmployeeConfigInfoRepository;
19 import com.bsth.service.impl.BaseServiceImpl; 25 import com.bsth.service.impl.BaseServiceImpl;
20 import com.bsth.service.realcontrol.ScheduleRealInfoService; 26 import com.bsth.service.realcontrol.ScheduleRealInfoService;
21 import com.bsth.service.realcontrol.buffer.ScheduleBuffer; 27 import com.bsth.service.realcontrol.buffer.ScheduleBuffer;
@@ -30,6 +36,12 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -30,6 +36,12 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
30 @Autowired 36 @Autowired
31 ScheduleRealInfoRepository scheduleRealInfoRepository; 37 ScheduleRealInfoRepository scheduleRealInfoRepository;
32 38
  39 + @Autowired
  40 + EmployeeConfigInfoRepository employeeConfigInfoRepository;
  41 +
  42 + @Autowired
  43 + CarConfigInfoRepository carConfigInfoRepository;
  44 +
33 Logger logger = LoggerFactory.getLogger(this.getClass()); 45 Logger logger = LoggerFactory.getLogger(this.getClass());
34 46
35 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd") 47 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd")
@@ -139,4 +151,73 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -139,4 +151,73 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
139 } 151 }
140 return map; 152 return map;
141 } 153 }
  154 +
  155 + //线路id获取驾驶员
  156 + @Override
  157 + public List<Map<String, String>> findDriverByLine(String lineCode) {
  158 + List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
  159 +
  160 + List<Map<String, String>> rsList = new ArrayList<>();
  161 + Map<String, String> map = null;
  162 + Personnel driver = null;
  163 + String code = null;
  164 +
  165 + for(EmployeeConfigInfo employee : list){
  166 + driver = employee.getJsy();
  167 + if(driver != null){
  168 + map = new HashMap<>();
  169 + code = driver.getJobCode();
  170 + map.put("id", code);
  171 + map.put("text", code + "/" + driver.getPersonnelName());
  172 + rsList.add(map);
  173 + }
  174 + }
  175 + return rsList;
  176 + }
  177 +
  178 + //线路id获取售票员
  179 + @Override
  180 + public List<Map<String, String>> findConductorByLine(String lineCode) {
  181 + List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
  182 +
  183 + List<Map<String, String>> rsList = new ArrayList<>();
  184 + Map<String, String> map = null;
  185 + Personnel conductor = null;
  186 + String code = null;
  187 +
  188 + for(EmployeeConfigInfo employee : list){
  189 + conductor = employee.getSpy();
  190 + if(conductor != null){
  191 + code = conductor.getJobCode();
  192 + map = new HashMap<>();
  193 + map.put("id", code);
  194 + map.put("text", code + "/" + conductor.getPersonnelName());
  195 + rsList.add(map);
  196 + }
  197 + }
  198 + return rsList;
  199 + }
  200 +
  201 + @Override
  202 + public List<Map<String, String>> findCarByLine(String lineCode) {
  203 +
  204 + List<CarConfigInfo> list = carConfigInfoRepository.findBylineCode(lineCode);
  205 +
  206 + List<Map<String, String>> rsList = new ArrayList<>();
  207 + Map<String, String> map = null;
  208 + Cars car = null;
  209 + String code = null;
  210 +
  211 + for(CarConfigInfo cci : list){
  212 + car = cci.getCl();
  213 + if(car != null){
  214 + code = car.getInsideCode();
  215 + map = new HashMap<>();
  216 + map.put("id", code);
  217 + map.put("text", code);
  218 + rsList.add(map);
  219 + }
  220 + }
  221 + return rsList;
  222 + }
142 } 223 }
src/main/java/com/bsth/service/schedule/SchedulePlanInfoService.java
1 -package com.bsth.service.schedule;  
2 -  
3 -import com.bsth.entity.schedule.SchedulePlanInfo;  
4 -import com.bsth.service.BaseService;  
5 -  
6 -/**  
7 - * Created by xu on 16/6/16.  
8 - */  
9 -public interface SchedulePlanInfoService extends BaseService<SchedulePlanInfo, Long> {  
10 -} 1 +package com.bsth.service.schedule;
  2 +
  3 +import com.bsth.entity.schedule.SchedulePlanInfo;
  4 +import com.bsth.service.BaseService;
  5 +
  6 +/**
  7 + * Created by xu on 16/6/16.
  8 + */
  9 +public interface SchedulePlanInfoService extends BaseService<SchedulePlanInfo, Long> {
  10 +}
src/main/java/com/bsth/service/schedule/SchedulePlanInfoServiceImpl.java
1 -package com.bsth.service.schedule;  
2 -  
3 -import com.bsth.entity.schedule.SchedulePlanInfo;  
4 -import com.bsth.service.impl.BaseServiceImpl;  
5 -import org.springframework.stereotype.Service;  
6 -  
7 -/**  
8 - * Created by xu on 16/6/16.  
9 - */  
10 -@Service  
11 -public class SchedulePlanInfoServiceImpl extends BaseServiceImpl<SchedulePlanInfo, Long> implements SchedulePlanInfoService {  
12 -} 1 +package com.bsth.service.schedule;
  2 +
  3 +import com.bsth.entity.schedule.SchedulePlanInfo;
  4 +import com.bsth.service.impl.BaseServiceImpl;
  5 +import org.springframework.stereotype.Service;
  6 +
  7 +/**
  8 + * Created by xu on 16/6/16.
  9 + */
  10 +@Service
  11 +public class SchedulePlanInfoServiceImpl extends BaseServiceImpl<SchedulePlanInfo, Long> implements SchedulePlanInfoService {
  12 +}
src/main/java/com/bsth/service/schedule/SchedulePlanService.java
1 -package com.bsth.service.schedule;  
2 -  
3 -import com.bsth.entity.schedule.SchedulePlan;  
4 -import com.bsth.service.BaseService;  
5 -  
6 -/**  
7 - * Created by xu on 16/6/16.  
8 - */  
9 -public interface SchedulePlanService extends BaseService<SchedulePlan, Long> {  
10 -} 1 +package com.bsth.service.schedule;
  2 +
  3 +import com.bsth.entity.schedule.SchedulePlan;
  4 +import com.bsth.service.BaseService;
  5 +
  6 +/**
  7 + * Created by xu on 16/6/16.
  8 + */
  9 +public interface SchedulePlanService extends BaseService<SchedulePlan, Long> {
  10 +}
src/main/java/com/bsth/service/schedule/SchedulePlanServiceImpl.java
1 -package com.bsth.service.schedule;  
2 -  
3 -import com.bsth.entity.schedule.SchedulePlan;  
4 -import com.bsth.service.impl.BaseServiceImpl;  
5 -import org.springframework.stereotype.Service;  
6 -  
7 -/**  
8 - * Created by xu on 16/6/16.  
9 - */  
10 -@Service  
11 -public class SchedulePlanServiceImpl extends BaseServiceImpl<SchedulePlan, Long> implements SchedulePlanService {  
12 -} 1 +package com.bsth.service.schedule;
  2 +
  3 +import com.bsth.entity.schedule.SchedulePlan;
  4 +import com.bsth.service.impl.BaseServiceImpl;
  5 +import org.springframework.stereotype.Service;
  6 +
  7 +/**
  8 + * Created by xu on 16/6/16.
  9 + */
  10 +@Service
  11 +public class SchedulePlanServiceImpl extends BaseServiceImpl<SchedulePlan, Long> implements SchedulePlanService {
  12 +}
src/main/java/com/bsth/service/schedule/rules/Message.java
1 -package com.bsth.service.schedule.rules;  
2 -  
3 -/**  
4 - * Created by xu on 16/6/15.  
5 - */  
6 -public class Message {  
7 - public static final int HELLO = 0;  
8 - public static final int GOODBYE = 1;  
9 -  
10 - private String message;  
11 - private int status;  
12 - public String getMessage() {  
13 - return message;  
14 - }  
15 - public void setMessage(String message) {  
16 - this.message = message;  
17 - }  
18 - public int getStatus() {  
19 - return status;  
20 - }  
21 - public void setStatus(int status) {  
22 - this.status = status;  
23 - }  
24 -} 1 +package com.bsth.service.schedule.rules;
  2 +
  3 +/**
  4 + * Created by xu on 16/6/15.
  5 + */
  6 +public class Message {
  7 + public static final int HELLO = 0;
  8 + public static final int GOODBYE = 1;
  9 +
  10 + private String message;
  11 + private int status;
  12 + public String getMessage() {
  13 + return message;
  14 + }
  15 + public void setMessage(String message) {
  16 + this.message = message;
  17 + }
  18 + public int getStatus() {
  19 + return status;
  20 + }
  21 + public void setStatus(int status) {
  22 + this.status = status;
  23 + }
  24 +}
src/main/java/com/bsth/service/schedule/rules/MyDroolsConfiguration.java
1 -package com.bsth.service.schedule.rules;  
2 -  
3 -import org.kie.api.KieBase;  
4 -import org.kie.api.KieBaseConfiguration;  
5 -import org.kie.api.KieServices;  
6 -import org.kie.api.builder.*;  
7 -import org.kie.api.builder.Message;  
8 -import org.kie.api.builder.model.KieBaseModel;  
9 -import org.kie.api.builder.model.KieModuleModel;  
10 -import org.kie.api.builder.model.KieSessionModel;  
11 -import org.kie.api.conf.EqualityBehaviorOption;  
12 -import org.kie.api.conf.EventProcessingOption;  
13 -import org.kie.api.runtime.KieContainer;  
14 -import org.kie.api.runtime.conf.ClockTypeOption;  
15 -import org.springframework.context.annotation.Bean;  
16 -import org.springframework.context.annotation.Configuration;  
17 -  
18 -/**  
19 - * Drools 6配置类。  
20 - */  
21 -@Configuration  
22 -public class MyDroolsConfiguration {  
23 - /**  
24 - * 返回一个kiebase知识库,直接冲文件系统读入drl规则文件,  
25 - * TODO:以后需要从数据库读入规则文件,并重新创建kbase知识库。  
26 - */  
27 - @Bean  
28 - public KieBase myKieBase() {  
29 - // Drools 6开始引入kie统一接口(jboss的jbpm工作流也使用kie接口了),整个定义方式和5差别很大  
30 - // 这里使用全api方式创建知识库对象,不使用xml的方式,提供最大的灵活性  
31 -  
32 - // 1、创建kieservices  
33 - KieServices kieServices = KieServices.Factory.get();  
34 - // 2、创建KieModuleModel,默认是由kmodule.xml的方式创建,这里使用api方式闯将  
35 - KieModuleModel kieModuleModel = kieServices.newKieModuleModel();  
36 - // 2.1、创建KieBaseModel,类似kmodule.xml中的kbase标签  
37 - KieBaseModel kieBaseModel1 = kieModuleModel.newKieBaseModel("KBase1")  
38 - .setDefault(true)  
39 - .setEqualsBehavior(EqualityBehaviorOption.EQUALITY)  
40 - .setEventProcessingMode(EventProcessingOption.STREAM);  
41 - // 2.2、创建与kbase关联的KieSessionModel,类似kmodule.xml中的kbase内的ksession标签  
42 - kieBaseModel1.newKieSessionModel("KSession1")  
43 - .setDefault(true)  
44 - .setType(KieSessionModel.KieSessionType.STATEFUL)  
45 - .setClockType(ClockTypeOption.get("realtime"));  
46 -  
47 - // 3、创建KieFileSystem,将模型xml,drl等写入,TODO:以后考虑从数据库中获取  
48 - KieFileSystem kfs = kieServices.newKieFileSystem();  
49 - // 3.1、写入KieBaseModel(内部包含了KieSessionModel的内容了,注意之前的KieSessionModel的创建方式)  
50 - kfs.writeKModuleXML(kieModuleModel.toXML());  
51 -  
52 - // 3.2、写入drl(写法超多,有点混乱)  
53 - // 这里使用文件的形式写入,TODO:以后考虑从数据库中读drl写入  
54 - // 注意kfs写的时候如果指定path,强制为src/main/resources/加上文件名,还有就是文件名不要重复否则会覆盖的  
55 - kfs.write("src/main/resources/HelloWorld.drl", kieServices.getResources()  
56 - .newInputStreamResource(this.getClass().getResourceAsStream(  
57 - "/rules/HelloWorld.drl"), "UTF-8"));  
58 - kfs.write("src/main/resources/shiftloop.drl", kieServices.getResources()  
59 - .newInputStreamResource(this.getClass().getResourceAsStream(  
60 - "/rules/shiftloop.drl"), "UTF-8"));  
61 - // TODO:还有其他drl....  
62 -  
63 - // 4、创建KieBuilder,使用KieFileSystem构建  
64 - KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();  
65 - Results results = kieBuilder.getResults();  
66 - if (results.hasMessages(Message.Level.ERROR))  
67 - throw new IllegalStateException("构建drools6错误:" + results.getMessages());  
68 -  
69 - // 5、获取KieContainer  
70 - // TODO:ReleaseId用处很大,以后再议  
71 - ReleaseId releaseId = kieServices.getRepository().getDefaultReleaseId();  
72 - KieContainer kieContainer = kieServices.newKieContainer(releaseId);  
73 -  
74 - // 6、创建kbase  
75 - KieBaseConfiguration kieBaseConfiguration = kieServices.newKieBaseConfiguration();  
76 - KieBase kieBase = kieContainer.newKieBase("KBase1", kieBaseConfiguration);  
77 -  
78 - return kieBase;  
79 - }  
80 -} 1 +package com.bsth.service.schedule.rules;
  2 +
  3 +import org.kie.api.KieBase;
  4 +import org.kie.api.KieBaseConfiguration;
  5 +import org.kie.api.KieServices;
  6 +import org.kie.api.builder.*;
  7 +import org.kie.api.builder.Message;
  8 +import org.kie.api.builder.model.KieBaseModel;
  9 +import org.kie.api.builder.model.KieModuleModel;
  10 +import org.kie.api.builder.model.KieSessionModel;
  11 +import org.kie.api.conf.EqualityBehaviorOption;
  12 +import org.kie.api.conf.EventProcessingOption;
  13 +import org.kie.api.runtime.KieContainer;
  14 +import org.kie.api.runtime.conf.ClockTypeOption;
  15 +import org.springframework.context.annotation.Bean;
  16 +import org.springframework.context.annotation.Configuration;
  17 +
  18 +/**
  19 + * Drools 6配置类。
  20 + */
  21 +@Configuration
  22 +public class MyDroolsConfiguration {
  23 + /**
  24 + * 返回一个kiebase知识库,直接冲文件系统读入drl规则文件,
  25 + * TODO:以后需要从数据库读入规则文件,并重新创建kbase知识库。
  26 + */
  27 + @Bean
  28 + public KieBase myKieBase() {
  29 + // Drools 6开始引入kie统一接口(jboss的jbpm工作流也使用kie接口了),整个定义方式和5差别很大
  30 + // 这里使用全api方式创建知识库对象,不使用xml的方式,提供最大的灵活性
  31 +
  32 + // 1、创建kieservices
  33 + KieServices kieServices = KieServices.Factory.get();
  34 + // 2、创建KieModuleModel,默认是由kmodule.xml的方式创建,这里使用api方式闯将
  35 + KieModuleModel kieModuleModel = kieServices.newKieModuleModel();
  36 + // 2.1、创建KieBaseModel,类似kmodule.xml中的kbase标签
  37 + KieBaseModel kieBaseModel1 = kieModuleModel.newKieBaseModel("KBase1")
  38 + .setDefault(true)
  39 + .setEqualsBehavior(EqualityBehaviorOption.EQUALITY)
  40 + .setEventProcessingMode(EventProcessingOption.STREAM);
  41 + // 2.2、创建与kbase关联的KieSessionModel,类似kmodule.xml中的kbase内的ksession标签
  42 + kieBaseModel1.newKieSessionModel("KSession1")
  43 + .setDefault(true)
  44 + .setType(KieSessionModel.KieSessionType.STATEFUL)
  45 + .setClockType(ClockTypeOption.get("realtime"));
  46 +
  47 + // 3、创建KieFileSystem,将模型xml,drl等写入,TODO:以后考虑从数据库中获取
  48 + KieFileSystem kfs = kieServices.newKieFileSystem();
  49 + // 3.1、写入KieBaseModel(内部包含了KieSessionModel的内容了,注意之前的KieSessionModel的创建方式)
  50 + kfs.writeKModuleXML(kieModuleModel.toXML());
  51 +
  52 + // 3.2、写入drl(写法超多,有点混乱)
  53 + // 这里使用文件的形式写入,TODO:以后考虑从数据库中读drl写入
  54 + // 注意kfs写的时候如果指定path,强制为src/main/resources/加上文件名,还有就是文件名不要重复否则会覆盖的
  55 + kfs.write("src/main/resources/HelloWorld.drl", kieServices.getResources()
  56 + .newInputStreamResource(this.getClass().getResourceAsStream(
  57 + "/rules/HelloWorld.drl"), "UTF-8"));
  58 + kfs.write("src/main/resources/shiftloop.drl", kieServices.getResources()
  59 + .newInputStreamResource(this.getClass().getResourceAsStream(
  60 + "/rules/shiftloop.drl"), "UTF-8"));
  61 + // TODO:还有其他drl....
  62 +
  63 + // 4、创建KieBuilder,使用KieFileSystem构建
  64 + KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
  65 + Results results = kieBuilder.getResults();
  66 + if (results.hasMessages(Message.Level.ERROR))
  67 + throw new IllegalStateException("构建drools6错误:" + results.getMessages());
  68 +
  69 + // 5、获取KieContainer
  70 + // TODO:ReleaseId用处很大,以后再议
  71 + ReleaseId releaseId = kieServices.getRepository().getDefaultReleaseId();
  72 + KieContainer kieContainer = kieServices.newKieContainer(releaseId);
  73 +
  74 + // 6、创建kbase
  75 + KieBaseConfiguration kieBaseConfiguration = kieServices.newKieBaseConfiguration();
  76 + KieBase kieBase = kieContainer.newKieBase("KBase1", kieBaseConfiguration);
  77 +
  78 + return kieBase;
  79 + }
  80 +}
src/main/java/com/bsth/service/schedule/rules/shiftloop/ScheduleCalcuParam_input.java
1 -package com.bsth.service.schedule.rules.shiftloop;  
2 -  
3 -import org.joda.time.DateTime;  
4 -  
5 -/**  
6 - * 排班计算参数_输入。  
7 - */  
8 -public class ScheduleCalcuParam_input {  
9 - /** 开始计算日期 */  
10 - private DateTime fromDate;  
11 - /** 结束计算日期 */  
12 - private DateTime toDate;  
13 - /** 时刻表id */  
14 - private Long ttinfoId;  
15 -  
16 - public DateTime getFromDate() {  
17 - return fromDate;  
18 - }  
19 -  
20 - public void setFromDate(DateTime fromDate) {  
21 - this.fromDate = fromDate;  
22 - }  
23 -  
24 - public DateTime getToDate() {  
25 - return toDate;  
26 - }  
27 -  
28 - public void setToDate(DateTime toDate) {  
29 - this.toDate = toDate;  
30 - }  
31 -  
32 - public Long getTtinfoId() {  
33 - return ttinfoId;  
34 - }  
35 -  
36 - public void setTtinfoId(Long ttinfoId) {  
37 - this.ttinfoId = ttinfoId;  
38 - }  
39 -} 1 +package com.bsth.service.schedule.rules.shiftloop;
  2 +
  3 +import org.joda.time.DateTime;
  4 +
  5 +/**
  6 + * 排班计算参数_输入。
  7 + */
  8 +public class ScheduleCalcuParam_input {
  9 + /** 开始计算日期 */
  10 + private DateTime fromDate;
  11 + /** 结束计算日期 */
  12 + private DateTime toDate;
  13 + /** 时刻表id */
  14 + private Long ttinfoId;
  15 +
  16 + public DateTime getFromDate() {
  17 + return fromDate;
  18 + }
  19 +
  20 + public void setFromDate(DateTime fromDate) {
  21 + this.fromDate = fromDate;
  22 + }
  23 +
  24 + public DateTime getToDate() {
  25 + return toDate;
  26 + }
  27 +
  28 + public void setToDate(DateTime toDate) {
  29 + this.toDate = toDate;
  30 + }
  31 +
  32 + public Long getTtinfoId() {
  33 + return ttinfoId;
  34 + }
  35 +
  36 + public void setTtinfoId(Long ttinfoId) {
  37 + this.ttinfoId = ttinfoId;
  38 + }
  39 +}
src/main/java/com/bsth/service/schedule/rules/shiftloop/ScheduleResult_output.java
1 -package com.bsth.service.schedule.rules.shiftloop;  
2 -  
3 -import org.joda.time.DateTime;  
4 -  
5 -/**  
6 - * 规则计算出的结果_输出。  
7 - */  
8 -public class ScheduleResult_output {  
9 - /** 具体日期 */  
10 - private DateTime sd;  
11 - /** 用的是哪一组rule */  
12 - private Long ruleId;  
13 - /** 路牌id */  
14 - private Long guideboardId;  
15 - /** 人员配置id */  
16 - private Long employeeConfigId;  
17 - /** 车辆配置id */  
18 - private Long carConfigId;  
19 -  
20 - public DateTime getSd() {  
21 - return sd;  
22 - }  
23 -  
24 - public void setSd(DateTime sd) {  
25 - this.sd = sd;  
26 - }  
27 -  
28 - public Long getGuideboardId() {  
29 - return guideboardId;  
30 - }  
31 -  
32 - public void setGuideboardId(Long guideboardId) {  
33 - this.guideboardId = guideboardId;  
34 - }  
35 -  
36 - public Long getEmployeeConfigId() {  
37 - return employeeConfigId;  
38 - }  
39 -  
40 - public void setEmployeeConfigId(Long employeeConfigId) {  
41 - this.employeeConfigId = employeeConfigId;  
42 - }  
43 -  
44 - public Long getCarConfigId() {  
45 - return carConfigId;  
46 - }  
47 -  
48 - public void setCarConfigId(Long carConfigId) {  
49 - this.carConfigId = carConfigId;  
50 - }  
51 -  
52 - public Long getRuleId() {  
53 - return ruleId;  
54 - }  
55 -  
56 - public void setRuleId(Long ruleId) {  
57 - this.ruleId = ruleId;  
58 - }  
59 -  
60 -} 1 +package com.bsth.service.schedule.rules.shiftloop;
  2 +
  3 +import org.joda.time.DateTime;
  4 +
  5 +/**
  6 + * 规则计算出的结果_输出。
  7 + */
  8 +public class ScheduleResult_output {
  9 + /** 具体日期 */
  10 + private DateTime sd;
  11 + /** 用的是哪一组rule */
  12 + private Long ruleId;
  13 + /** 路牌id */
  14 + private Long guideboardId;
  15 + /** 人员配置id */
  16 + private Long employeeConfigId;
  17 + /** 车辆配置id */
  18 + private Long carConfigId;
  19 +
  20 + public DateTime getSd() {
  21 + return sd;
  22 + }
  23 +
  24 + public void setSd(DateTime sd) {
  25 + this.sd = sd;
  26 + }
  27 +
  28 + public Long getGuideboardId() {
  29 + return guideboardId;
  30 + }
  31 +
  32 + public void setGuideboardId(Long guideboardId) {
  33 + this.guideboardId = guideboardId;
  34 + }
  35 +
  36 + public Long getEmployeeConfigId() {
  37 + return employeeConfigId;
  38 + }
  39 +
  40 + public void setEmployeeConfigId(Long employeeConfigId) {
  41 + this.employeeConfigId = employeeConfigId;
  42 + }
  43 +
  44 + public Long getCarConfigId() {
  45 + return carConfigId;
  46 + }
  47 +
  48 + public void setCarConfigId(Long carConfigId) {
  49 + this.carConfigId = carConfigId;
  50 + }
  51 +
  52 + public Long getRuleId() {
  53 + return ruleId;
  54 + }
  55 +
  56 + public void setRuleId(Long ruleId) {
  57 + this.ruleId = ruleId;
  58 + }
  59 +
  60 +}
src/main/java/com/bsth/service/schedule/rules/shiftloop/ScheduleResults_output.java
1 -package com.bsth.service.schedule.rules.shiftloop;  
2 -  
3 -import org.apache.commons.lang3.StringUtils;  
4 -  
5 -import java.util.*;  
6 -  
7 -/**  
8 - * 输出结果集合。  
9 - */  
10 -public class ScheduleResults_output {  
11 - /** 输出列表 */  
12 - private List<ScheduleResult_output> results = new ArrayList<>();  
13 -  
14 - public List<ScheduleResult_output> getResults() {  
15 - return results;  
16 - }  
17 -  
18 - public void setResults(List<ScheduleResult_output> results) {  
19 - this.results = results;  
20 - }  
21 -  
22 - /**  
23 - * 输出每个规则排出来的路牌id列表  
24 - * @return  
25 - */  
26 - public String showGuideboardDesc1() {  
27 - StringBuilder stringBuilder = new StringBuilder();  
28 - Map<Long, List<ScheduleResult_output>> groupRuleIdGuideBoardMap = new HashMap<>();  
29 - for (ScheduleResult_output s : results) {  
30 - if (groupRuleIdGuideBoardMap.get(s.getRuleId()) == null) {  
31 - groupRuleIdGuideBoardMap.put(s.getRuleId(), new ArrayList<ScheduleResult_output>());  
32 - }  
33 - groupRuleIdGuideBoardMap.get(s.getRuleId()).add(s);  
34 - }  
35 -  
36 - for (Long ruleId : groupRuleIdGuideBoardMap.keySet()) {  
37 - Collections.sort(groupRuleIdGuideBoardMap.get(ruleId), new Comparator<ScheduleResult_output>() {  
38 - @Override  
39 - public int compare(ScheduleResult_output o1, ScheduleResult_output o2) {  
40 - return o1.getSd().compareTo(o2.getSd());  
41 - }  
42 - });  
43 -  
44 - List<Long> gbids = new ArrayList<>();  
45 - List<Long> ecids = new ArrayList<>();  
46 - for (ScheduleResult_output so : groupRuleIdGuideBoardMap.get(ruleId)) {  
47 - gbids.add(so.getGuideboardId());  
48 - ecids.add(so.getEmployeeConfigId());  
49 - }  
50 -  
51 - stringBuilder.append(  
52 - "规则id=" + ruleId + ", " +  
53 - "路牌列表=" + StringUtils.join(gbids, ",") + "\n");  
54 - stringBuilder.append(  
55 - "规则id=" + ruleId + ", " +  
56 - "人员配置列表=" + StringUtils.join(ecids, ",") + "\n");  
57 - }  
58 -  
59 - return stringBuilder.toString();  
60 - }  
61 -  
62 - // TODO:人员输出  
63 -} 1 +package com.bsth.service.schedule.rules.shiftloop;
  2 +
  3 +import org.apache.commons.lang3.StringUtils;
  4 +
  5 +import java.util.*;
  6 +
  7 +/**
  8 + * 输出结果集合。
  9 + */
  10 +public class ScheduleResults_output {
  11 + /** 输出列表 */
  12 + private List<ScheduleResult_output> results = new ArrayList<>();
  13 +
  14 + public List<ScheduleResult_output> getResults() {
  15 + return results;
  16 + }
  17 +
  18 + public void setResults(List<ScheduleResult_output> results) {
  19 + this.results = results;
  20 + }
  21 +
  22 + /**
  23 + * 输出每个规则排出来的路牌id列表
  24 + * @return
  25 + */
  26 + public String showGuideboardDesc1() {
  27 + StringBuilder stringBuilder = new StringBuilder();
  28 + Map<Long, List<ScheduleResult_output>> groupRuleIdGuideBoardMap = new HashMap<>();
  29 + for (ScheduleResult_output s : results) {
  30 + if (groupRuleIdGuideBoardMap.get(s.getRuleId()) == null) {
  31 + groupRuleIdGuideBoardMap.put(s.getRuleId(), new ArrayList<ScheduleResult_output>());
  32 + }
  33 + groupRuleIdGuideBoardMap.get(s.getRuleId()).add(s);
  34 + }
  35 +
  36 + for (Long ruleId : groupRuleIdGuideBoardMap.keySet()) {
  37 + Collections.sort(groupRuleIdGuideBoardMap.get(ruleId), new Comparator<ScheduleResult_output>() {
  38 + @Override
  39 + public int compare(ScheduleResult_output o1, ScheduleResult_output o2) {
  40 + return o1.getSd().compareTo(o2.getSd());
  41 + }
  42 + });
  43 +
  44 + List<Long> gbids = new ArrayList<>();
  45 + List<Long> ecids = new ArrayList<>();
  46 + for (ScheduleResult_output so : groupRuleIdGuideBoardMap.get(ruleId)) {
  47 + gbids.add(so.getGuideboardId());
  48 + ecids.add(so.getEmployeeConfigId());
  49 + }
  50 +
  51 + stringBuilder.append(
  52 + "规则id=" + ruleId + ", " +
  53 + "路牌列表=" + StringUtils.join(gbids, ",") + "\n");
  54 + stringBuilder.append(
  55 + "规则id=" + ruleId + ", " +
  56 + "人员配置列表=" + StringUtils.join(ecids, ",") + "\n");
  57 + }
  58 +
  59 + return stringBuilder.toString();
  60 + }
  61 +
  62 + // TODO:人员输出
  63 +}
src/main/java/com/bsth/service/schedule/rules/shiftloop/ScheduleRule_input.java
1 -package com.bsth.service.schedule.rules.shiftloop;  
2 -  
3 -import org.joda.time.DateTime;  
4 -  
5 -import java.util.ArrayList;  
6 -import java.util.List;  
7 -  
8 -/**  
9 - * 排班规则_输入。  
10 - */  
11 -public class ScheduleRule_input {  
12 - /** 规则Id */  
13 - private Long ruleId;  
14 - /** 规则启用日期 */  
15 - private DateTime qyrq;  
16 -  
17 - /** 路牌范围 */  
18 - private List<Long> guideboardIds = new ArrayList<>();  
19 - /** 起始路牌下标 */  
20 - private int startGbdIndex;  
21 -  
22 - /** 人员范围 */  
23 - private List<Long> employeeConfigIds = new ArrayList<>();  
24 - /** 起始人员下标 */  
25 - private int startEIndex;  
26 -  
27 - /** 车辆配置id */  
28 - private Long carConfigId;  
29 -  
30 - // TODO:车辆翻班暂时不考虑进去  
31 -  
32 -  
33 - public Long getRuleId() {  
34 - return ruleId;  
35 - }  
36 -  
37 - public void setRuleId(Long ruleId) {  
38 - this.ruleId = ruleId;  
39 - }  
40 -  
41 - public DateTime getQyrq() {  
42 - return qyrq;  
43 - }  
44 -  
45 - public void setQyrq(DateTime qyrq) {  
46 - this.qyrq = qyrq;  
47 - }  
48 -  
49 - public List<Long> getGuideboardIds() {  
50 - return guideboardIds;  
51 - }  
52 -  
53 - public void setGuideboardIds(List<Long> guideboardIds) {  
54 - this.guideboardIds = guideboardIds;  
55 - }  
56 -  
57 - public int getStartGbdIndex() {  
58 - return startGbdIndex;  
59 - }  
60 -  
61 - public void setStartGbdIndex(int startGbdIndex) {  
62 - this.startGbdIndex = startGbdIndex;  
63 - }  
64 -  
65 - public List<Long> getEmployeeConfigIds() {  
66 - return employeeConfigIds;  
67 - }  
68 -  
69 - public void setEmployeeConfigIds(List<Long> employeeConfigIds) {  
70 - this.employeeConfigIds = employeeConfigIds;  
71 - }  
72 -  
73 - public int getStartEIndex() {  
74 - return startEIndex;  
75 - }  
76 -  
77 - public void setStartEIndex(int startEIndex) {  
78 - this.startEIndex = startEIndex;  
79 - }  
80 -  
81 - public Long getCarConfigId() {  
82 - return carConfigId;  
83 - }  
84 -  
85 - public void setCarConfigId(Long carConfigId) {  
86 - this.carConfigId = carConfigId;  
87 - }  
88 -} 1 +package com.bsth.service.schedule.rules.shiftloop;
  2 +
  3 +import org.joda.time.DateTime;
  4 +
  5 +import java.util.ArrayList;
  6 +import java.util.List;
  7 +
  8 +/**
  9 + * 排班规则_输入。
  10 + */
  11 +public class ScheduleRule_input {
  12 + /** 规则Id */
  13 + private Long ruleId;
  14 + /** 规则启用日期 */
  15 + private DateTime qyrq;
  16 +
  17 + /** 路牌范围 */
  18 + private List<Long> guideboardIds = new ArrayList<>();
  19 + /** 起始路牌下标 */
  20 + private int startGbdIndex;
  21 +
  22 + /** 人员范围 */
  23 + private List<Long> employeeConfigIds = new ArrayList<>();
  24 + /** 起始人员下标 */
  25 + private int startEIndex;
  26 +
  27 + /** 车辆配置id */
  28 + private Long carConfigId;
  29 +
  30 + // TODO:车辆翻班暂时不考虑进去
  31 +
  32 +
  33 + public Long getRuleId() {
  34 + return ruleId;
  35 + }
  36 +
  37 + public void setRuleId(Long ruleId) {
  38 + this.ruleId = ruleId;
  39 + }
  40 +
  41 + public DateTime getQyrq() {
  42 + return qyrq;
  43 + }
  44 +
  45 + public void setQyrq(DateTime qyrq) {
  46 + this.qyrq = qyrq;
  47 + }
  48 +
  49 + public List<Long> getGuideboardIds() {
  50 + return guideboardIds;
  51 + }
  52 +
  53 + public void setGuideboardIds(List<Long> guideboardIds) {
  54 + this.guideboardIds = guideboardIds;
  55 + }
  56 +
  57 + public int getStartGbdIndex() {
  58 + return startGbdIndex;
  59 + }
  60 +
  61 + public void setStartGbdIndex(int startGbdIndex) {
  62 + this.startGbdIndex = startGbdIndex;
  63 + }
  64 +
  65 + public List<Long> getEmployeeConfigIds() {
  66 + return employeeConfigIds;
  67 + }
  68 +
  69 + public void setEmployeeConfigIds(List<Long> employeeConfigIds) {
  70 + this.employeeConfigIds = employeeConfigIds;
  71 + }
  72 +
  73 + public int getStartEIndex() {
  74 + return startEIndex;
  75 + }
  76 +
  77 + public void setStartEIndex(int startEIndex) {
  78 + this.startEIndex = startEIndex;
  79 + }
  80 +
  81 + public Long getCarConfigId() {
  82 + return carConfigId;
  83 + }
  84 +
  85 + public void setCarConfigId(Long carConfigId) {
  86 + this.carConfigId = carConfigId;
  87 + }
  88 +}
src/main/java/com/bsth/service/schedule/utils/DataImportExportService.java
1 -package com.bsth.service.schedule.utils;  
2 -  
3 -import org.springframework.web.multipart.MultipartFile;  
4 -  
5 -import java.io.File;  
6 -  
7 -/**  
8 - * 数据导入导出服务。  
9 - */  
10 -public interface DataImportExportService {  
11 - /**  
12 - * 上传文件。  
13 - * @param file mutipartFile  
14 - * @return 上传后的文件路径  
15 - * @throws Exception  
16 - */  
17 - File uploadFile(MultipartFile file) throws Exception;  
18 -  
19 - /**  
20 - * 上传文件,并导入文件数据。  
21 - * @param datafile 上传的文件  
22 - * @param ktrFile 导入的逻辑ktr文件  
23 - * @throws Exception  
24 - */  
25 - void fileDataImport(MultipartFile datafile, File ktrFile) throws Exception;  
26 -} 1 +package com.bsth.service.schedule.utils;
  2 +
  3 +import org.springframework.web.multipart.MultipartFile;
  4 +
  5 +import java.io.File;
  6 +
  7 +/**
  8 + * 数据导入导出服务。
  9 + */
  10 +public interface DataImportExportService {
  11 + /**
  12 + * 上传文件。
  13 + * @param file mutipartFile
  14 + * @return 上传后的文件路径
  15 + * @throws Exception
  16 + */
  17 + File uploadFile(MultipartFile file) throws Exception;
  18 +
  19 + /**
  20 + * 上传文件,并导入文件数据。
  21 + * @param datafile 上传的文件
  22 + * @param ktrFile 导入的逻辑ktr文件
  23 + * @throws Exception
  24 + */
  25 + void fileDataImport(MultipartFile datafile, File ktrFile) throws Exception;
  26 +}
src/main/java/com/bsth/service/schedule/utils/DataImportExportServiceImpl.java
1 -package com.bsth.service.schedule.utils;  
2 -  
3 -import com.google.common.io.Files;  
4 -import org.pentaho.di.core.KettleEnvironment;  
5 -import org.pentaho.di.core.util.EnvUtil;  
6 -import org.pentaho.di.trans.Trans;  
7 -import org.pentaho.di.trans.TransMeta;  
8 -import org.springframework.beans.factory.annotation.Autowired;  
9 -import org.springframework.boot.context.properties.EnableConfigurationProperties;  
10 -import org.springframework.stereotype.Service;  
11 -import org.springframework.web.multipart.MultipartFile;  
12 -  
13 -import java.io.File;  
14 -  
15 -/**  
16 - * Created by xu on 16/6/23.  
17 - */  
18 -@Service  
19 -@EnableConfigurationProperties(DataToolsProperties.class)  
20 -public class DataImportExportServiceImpl implements DataImportExportService {  
21 -  
22 - @Autowired  
23 - private DataToolsProperties dataToolsProperties;  
24 -  
25 - @Override  
26 - public File uploadFile(MultipartFile file) throws Exception {  
27 - // TODO:以后的文件名要加时间戳  
28 - File newFile = new File(  
29 - dataToolsProperties.getFileuploadDir() + File.separator +  
30 - file.getOriginalFilename());  
31 - Files.write(file.getBytes(), newFile);  
32 - return newFile;  
33 - }  
34 -  
35 - @Override  
36 - public void fileDataImport(MultipartFile datafile, File ktrFile) throws Exception {  
37 - // 1、上传数据文件  
38 - File uploadFile = uploadFile(datafile);  
39 -  
40 - // 2、使用kettle运行封装数据导入逻辑的ktr转换文件  
41 - // 2.1、初始化kettle  
42 - EnvUtil.environmentInit();  
43 - KettleEnvironment.init();  
44 - // 2.2、创建转换元数据,转换  
45 - TransMeta transMeta = new TransMeta(ktrFile.getAbsolutePath());  
46 - Trans trans = new Trans(transMeta);  
47 - // 2.3、设定命名参数,用于指定数据文件,注意每个ktr必须都有以下指定的命名参数  
48 - trans.setParameterValue("filepath", uploadFile.getAbsolutePath()); // 指定导入数据文件的位置  
49 - trans.setParameterValue("erroroutputdir", dataToolsProperties.getTransErrordir()); // ktr转换错误输出目录  
50 - // TODO:可以考虑设定日志输出  
51 - // 2.4、执行转换  
52 - trans.execute(null);  
53 - // 2.5、等待转换结束  
54 - trans.waitUntilFinished();  
55 -  
56 - // 3、判定ktr错误数,注意这种错误代表部分数据错误,不会终止转换执行,一般设计ktr的时候,会有错误输出文件,TODO:以后考虑使用日志实时输出  
57 - if (trans.getErrors() > 0) {  
58 - throw new Exception("转换数据部分错误,请查看相关错误输出文件!");  
59 - }  
60 - }  
61 -} 1 +package com.bsth.service.schedule.utils;
  2 +
  3 +import com.google.common.io.Files;
  4 +import org.pentaho.di.core.KettleEnvironment;
  5 +import org.pentaho.di.core.util.EnvUtil;
  6 +import org.pentaho.di.trans.Trans;
  7 +import org.pentaho.di.trans.TransMeta;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  10 +import org.springframework.stereotype.Service;
  11 +import org.springframework.web.multipart.MultipartFile;
  12 +
  13 +import java.io.File;
  14 +
  15 +/**
  16 + * Created by xu on 16/6/23.
  17 + */
  18 +@Service
  19 +@EnableConfigurationProperties(DataToolsProperties.class)
  20 +public class DataImportExportServiceImpl implements DataImportExportService {
  21 +
  22 + @Autowired
  23 + private DataToolsProperties dataToolsProperties;
  24 +
  25 + @Override
  26 + public File uploadFile(MultipartFile file) throws Exception {
  27 + // TODO:以后的文件名要加时间戳
  28 + File newFile = new File(
  29 + dataToolsProperties.getFileuploadDir() + File.separator +
  30 + file.getOriginalFilename());
  31 + Files.write(file.getBytes(), newFile);
  32 + return newFile;
  33 + }
  34 +
  35 + @Override
  36 + public void fileDataImport(MultipartFile datafile, File ktrFile) throws Exception {
  37 + // 1、上传数据文件
  38 + File uploadFile = uploadFile(datafile);
  39 +
  40 + // 2、使用kettle运行封装数据导入逻辑的ktr转换文件
  41 + // 2.1、初始化kettle
  42 + EnvUtil.environmentInit();
  43 + KettleEnvironment.init();
  44 + // 2.2、创建转换元数据,转换
  45 + TransMeta transMeta = new TransMeta(ktrFile.getAbsolutePath());
  46 + Trans trans = new Trans(transMeta);
  47 + // 2.3、设定命名参数,用于指定数据文件,注意每个ktr必须都有以下指定的命名参数
  48 + trans.setParameterValue("filepath", uploadFile.getAbsolutePath()); // 指定导入数据文件的位置
  49 + trans.setParameterValue("erroroutputdir", dataToolsProperties.getTransErrordir()); // ktr转换错误输出目录
  50 + // TODO:可以考虑设定日志输出
  51 + // 2.4、执行转换
  52 + trans.execute(null);
  53 + // 2.5、等待转换结束
  54 + trans.waitUntilFinished();
  55 +
  56 + // 3、判定ktr错误数,注意这种错误代表部分数据错误,不会终止转换执行,一般设计ktr的时候,会有错误输出文件,TODO:以后考虑使用日志实时输出
  57 + if (trans.getErrors() > 0) {
  58 + throw new Exception("转换数据部分错误,请查看相关错误输出文件!");
  59 + }
  60 + }
  61 +}
src/main/java/com/bsth/util/TransGPS.java
@@ -82,7 +82,7 @@ public class TransGPS { @@ -82,7 +82,7 @@ public class TransGPS {
82 return mgLoc; 82 return mgLoc;
83 } 83 }
84 84
85 - Location transformFromGCJToWGS(Location gcLoc) { 85 + public static Location transformFromGCJToWGS(Location gcLoc) {
86 Location wgLoc = new Location(); 86 Location wgLoc = new Location();
87 wgLoc.lat = gcLoc.lat; 87 wgLoc.lat = gcLoc.lat;
88 wgLoc.lng = gcLoc.lng; 88 wgLoc.lng = gcLoc.lng;
src/main/java/com/bsth/vehicle/gpsdata/GpsArrivalStationThread.java
@@ -8,7 +8,6 @@ import java.text.SimpleDateFormat; @@ -8,7 +8,6 @@ import java.text.SimpleDateFormat;
8 import java.util.ArrayList; 8 import java.util.ArrayList;
9 import java.util.Calendar; 9 import java.util.Calendar;
10 import java.util.Iterator; 10 import java.util.Iterator;
11 -import java.util.LinkedList;  
12 import java.util.List; 11 import java.util.List;
13 import java.util.Set; 12 import java.util.Set;
14 13
@@ -37,7 +36,7 @@ public class GpsArrivalStationThread extends Thread{ @@ -37,7 +36,7 @@ public class GpsArrivalStationThread extends Thread{
37 Logger logger = LoggerFactory.getLogger(this.getClass()); 36 Logger logger = LoggerFactory.getLogger(this.getClass());
38 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 37 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
39 38
40 - private static int diff = 1000 * 60 * 60; 39 + private static int diff = 1000 * 60 * 20;
41 40
42 @Override 41 @Override
43 public void run() { 42 public void run() {
@@ -47,7 +46,6 @@ public class GpsArrivalStationThread extends Thread{ @@ -47,7 +46,6 @@ public class GpsArrivalStationThread extends Thread{
47 } catch (ParseException e) { 46 } catch (ParseException e) {
48 e.printStackTrace(); 47 e.printStackTrace();
49 } 48 }
50 - System.out.println("size: " + list.size());  
51 GpsArrivalDataBuffer.putAll(list); 49 GpsArrivalDataBuffer.putAll(list);
52 //实际到离站和计划排班相匹配 50 //实际到离站和计划排班相匹配
53 51
@@ -85,26 +83,62 @@ public class GpsArrivalStationThread extends Thread{ @@ -85,26 +83,62 @@ public class GpsArrivalStationThread extends Thread{
85 } 83 }
86 } 84 }
87 85
88 - //单个匹配  
89 public void match(ScheduleRealInfo scInfo, ArrivalInfo arr){ 86 public void match(ScheduleRealInfo scInfo, ArrivalInfo arr){
  87 + try{
  88 + //匹配起点
  89 + matchStart(scInfo, arr);
  90 +
  91 + //计划终点
  92 + matchEnd(scInfo, arr);
  93 + }catch(Exception e){
  94 + e.printStackTrace();
  95 + }
  96 + }
  97 +
  98 + /**
  99 + *
  100 + * @Title: matchStart
  101 + * @Description: TODO(匹配起点 出站时间)
  102 + * @param @param scInfo
  103 + * @throws
  104 + */
  105 + public void matchStart(ScheduleRealInfo scInfo, ArrivalInfo arr){
  106 + if(scInfo.getFcsjT() == null
  107 + || arr.getInOut() != 1)
  108 + return;
  109 +
90 Long ts = arr.getTs(); 110 Long ts = arr.getTs();
91 - //起点  
92 - if(scInfo.getFcsjActualTime() == null  
93 - && scInfo.getQdzCode().equals(arr.getStopNo()) 111 + //起点站和发车时间比比较
  112 + if(scInfo.getQdzCode().equals(arr.getStopNo())
94 && Math.abs(scInfo.getFcsjT() - ts) < diff){ 113 && Math.abs(scInfo.getFcsjT() - ts) < diff){
95 -  
96 scInfo.setFcsjActualTime(ts); 114 scInfo.setFcsjActualTime(ts);
97 scInfo.setFcsjActual(sdf.format(ts)); 115 scInfo.setFcsjActual(sdf.format(ts));
  116 +
98 System.out.println("成功匹配一个起点..."); 117 System.out.println("成功匹配一个起点...");
  118 + ScheduleBuffer.persistentList.add(scInfo);
99 } 119 }
100 - //终点  
101 - if(scInfo.getZdsjActualTime() == null  
102 - && scInfo.getZdzCode().equals(arr.getStopNo()) 120 + }
  121 +
  122 + /**
  123 + *
  124 + * @Title: matchEnd
  125 + * @Description: TODO(匹配终点 进站时间)
  126 + * @throws
  127 + */
  128 + public void matchEnd(ScheduleRealInfo scInfo, ArrivalInfo arr){
  129 + if(scInfo.getZdsjT() == null
  130 + || arr.getInOut() != 0)
  131 + return;
  132 +
  133 + Long ts = arr.getTs();
  134 + //终点站和发车时间比较
  135 + if(scInfo.getZdzCode().equals(arr.getStopNo())
103 && Math.abs(scInfo.getZdsjT() - ts) < diff){ 136 && Math.abs(scInfo.getZdsjT() - ts) < diff){
104 -  
105 scInfo.setZdsjActualTime(ts); 137 scInfo.setZdsjActualTime(ts);
106 scInfo.setZdsjActual(sdf.format(ts)); 138 scInfo.setZdsjActual(sdf.format(ts));
  139 +
107 System.out.println("成功匹配一个终点..."); 140 System.out.println("成功匹配一个终点...");
  141 + ScheduleBuffer.persistentList.add(scInfo);
108 } 142 }
109 } 143 }
110 144
@@ -136,7 +170,7 @@ public class GpsArrivalStationThread extends Thread{ @@ -136,7 +170,7 @@ public class GpsArrivalStationThread extends Thread{
136 conn = DBUtils_MS.getConnection(); 170 conn = DBUtils_MS.getConnection();
137 ps = conn.prepareStatement(sql); 171 ps = conn.prepareStatement(sql);
138 ps.setInt(1, weeks_year); 172 ps.setInt(1, weeks_year);
139 - ps.setLong(2, GpsArrivalDataBuffer.markTime); 173 + ps.setLong(2, /*GpsArrivalDataBuffer.markTime*/1467099600000L);
140 174
141 Long t = System.currentTimeMillis(); 175 Long t = System.currentTimeMillis();
142 rs = ps.executeQuery(); 176 rs = ps.executeQuery();
src/main/java/com/bsth/vehicle/gpsdata/controller/GpsDataController.java
1 package com.bsth.vehicle.gpsdata.controller; 1 package com.bsth.vehicle.gpsdata.controller;
2 2
3 import java.util.List; 3 import java.util.List;
  4 +import java.util.Map;
4 5
5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.web.bind.annotation.PathVariable; 7 import org.springframework.web.bind.annotation.PathVariable;
@@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController; @@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
10 11
11 import com.bsth.vehicle.gpsdata.buffer.GpsRealDataBuffer; 12 import com.bsth.vehicle.gpsdata.buffer.GpsRealDataBuffer;
12 import com.bsth.vehicle.gpsdata.entity.GpsRealData; 13 import com.bsth.vehicle.gpsdata.entity.GpsRealData;
  14 +import com.bsth.vehicle.gpsdata.service.GpsDataService;
13 import com.google.common.base.Splitter; 15 import com.google.common.base.Splitter;
14 16
15 @RestController 17 @RestController
@@ -19,6 +21,9 @@ public class GpsDataController { @@ -19,6 +21,9 @@ public class GpsDataController {
19 @Autowired 21 @Autowired
20 GpsRealDataBuffer gpsBuffer; 22 GpsRealDataBuffer gpsBuffer;
21 23
  24 + @Autowired
  25 + GpsDataService gpsDataService;
  26 +
22 @RequestMapping(value = "/real/line/{lineCode}") 27 @RequestMapping(value = "/real/line/{lineCode}")
23 public List<GpsRealData> findByLineCode(@PathVariable("lineCode") Integer lineCode){ 28 public List<GpsRealData> findByLineCode(@PathVariable("lineCode") Integer lineCode){
24 return gpsBuffer.getListByLineCode(lineCode); 29 return gpsBuffer.getListByLineCode(lineCode);
@@ -28,4 +33,13 @@ public class GpsDataController { @@ -28,4 +33,13 @@ public class GpsDataController {
28 public List<GpsRealData> findByLineCode(@RequestParam String lineCodes){ 33 public List<GpsRealData> findByLineCode(@RequestParam String lineCodes){
29 return gpsBuffer.getListByLines(Splitter.on(",").split(lineCodes).iterator()); 34 return gpsBuffer.getListByLines(Splitter.on(",").split(lineCodes).iterator());
30 } 35 }
  36 +
  37 + @RequestMapping(value = "/history/{device}")
  38 + public List<Map<String, Object>> history(@PathVariable("device") String device
  39 + ,@RequestParam Long startTime
  40 + ,@RequestParam Long endTime,
  41 + @RequestParam int directions){
  42 +
  43 + return gpsDataService.history(device, startTime, endTime, directions);
  44 + }
31 } 45 }
src/main/java/com/bsth/vehicle/gpsdata/entity/ArrivalInfo.java
@@ -17,18 +17,17 @@ import javax.persistence.Transient; @@ -17,18 +17,17 @@ import javax.persistence.Transient;
17 public class ArrivalInfo { 17 public class ArrivalInfo {
18 18
19 @Transient 19 @Transient
20 - static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")  
21 - ,sdf2 = new SimpleDateFormat("HH:mm")  
22 - ,sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 20 + static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm")
  21 + ,sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
23 22
24 23
25 public ArrivalInfo(String deviceId, Long ts, String lineCode, Integer upDown, String stopNo, Integer inOut, 24 public ArrivalInfo(String deviceId, Long ts, String lineCode, Integer upDown, String stopNo, Integer inOut,
26 Date createDate, Integer weeksYear) { 25 Date createDate, Integer weeksYear) {
27 this.deviceId = deviceId; 26 this.deviceId = deviceId;
28 27
29 - //gps是2014年的数据,临时将ts拉到当天 28 + //gps是2014年的数据,临时将ts拉到6月1号
30 try { 29 try {
31 - this.ts = sdf3.parse(sdf.format(new Date()) +" " + sdf2.format(new Date(ts))).getTime(); 30 + this.ts = sdf2.parse("2016-06-01 " + sdf.format(new Date(ts))).getTime();
32 } catch (ParseException e) { 31 } catch (ParseException e) {
33 e.printStackTrace(); 32 e.printStackTrace();
34 } 33 }
src/main/java/com/bsth/vehicle/gpsdata/service/GpsDataServiceImpl.java
@@ -59,7 +59,7 @@ public class GpsDataServiceImpl implements GpsDataService{ @@ -59,7 +59,7 @@ public class GpsDataServiceImpl implements GpsDataService{
59 59
60 //to 百度坐标 60 //to 百度坐标
61 lon = rs.getFloat("LON"); 61 lon = rs.getFloat("LON");
62 - lat = rs.getFloat("lat"); 62 + lat = rs.getFloat("LAT");
63 location = TransGPS.LocationMake(lon, lat); 63 location = TransGPS.LocationMake(lon, lat);
64 location = TransGPS.bd_encrypt(TransGPS.transformFromWGSToGCJ(location)); 64 location = TransGPS.bd_encrypt(TransGPS.transformFromWGSToGCJ(location));
65 65
@@ -67,7 +67,7 @@ public class GpsDataServiceImpl implements GpsDataService{ @@ -67,7 +67,7 @@ public class GpsDataServiceImpl implements GpsDataService{
67 map.put("device", rs.getString("DEVICE_ID")); 67 map.put("device", rs.getString("DEVICE_ID"));
68 map.put("lon", location.getLng()); 68 map.put("lon", location.getLng());
69 map.put("lat", location.getLat()); 69 map.put("lat", location.getLat());
70 - map.put("ts", rs.getLong("ts")); 70 + map.put("ts", rs.getLong("TS"));
71 map.put("inout_stop", rs.getInt("INOUT_STOP")); 71 map.put("inout_stop", rs.getInt("INOUT_STOP"));
72 //上下行 72 //上下行
73 map.put("upDown", upDown); 73 map.put("upDown", upDown);
src/main/resources/datatools/config.properties
  1 +<<<<<<< HEAD
1 # 配置数据导入导出用到的配置信息 2 # 配置数据导入导出用到的配置信息
2 3
3 # 上传文件目录配置(根据不同的环境需要修正) 4 # 上传文件目录配置(根据不同的环境需要修正)
@@ -20,4 +21,28 @@ datatools.employees_datainputktr=/datatools/ktrs/employeesDataInput.ktr @@ -20,4 +21,28 @@ datatools.employees_datainputktr=/datatools/ktrs/employeesDataInput.ktr
20 datatools.carsconfig_datainputktr=/datatools/ktrs/carsConfigDataInput.ktr 21 datatools.carsconfig_datainputktr=/datatools/ktrs/carsConfigDataInput.ktr
21 # 人员配置信息导入 22 # 人员配置信息导入
22 23
  24 +=======
  25 +# 配置数据导入导出用到的配置信息
  26 +
  27 +# 上传文件目录配置(根据不同的环境需要修正)
  28 +datatools.fileupload_dir=/Users/xu/resource/project/bsth_control_u_d_files
  29 +# ktr转换文件,中配置的错误输出目录(根据不同的环境需要修正)
  30 +datatools.trans_errordir=/Users/xu/resource/project/bsth_control_u_d_files/erroroutput
  31 +
  32 +# 以下是封装数据导入导出逻辑的ktr转换文件,类路径,以后考虑放到数据库中
  33 +# 测试temp的ktr转换文件
  34 +datatools.temp_datainputktr=/datatools/ktrs/test.ktr
  35 +# 车辆信息导入ktr转换
  36 +datatools.cars_datainputktr=/datatools/ktrs/carsDataInput.ktr
  37 +# 人员信息导入
  38 +datatools.employees_datainputktr=/datatools/ktrs/employeesDataInput.ktr
  39 +# 时刻表基础信息导入
  40 +
  41 +# 时刻明细信息导入
  42 +
  43 +# 车辆配置信息导入
  44 +
  45 +# 人员配置信息导入
  46 +
  47 +>>>>>>> 502f6f7ff3ff76f0f6b6dbdac8a353604a7d5626
23 # 排班规则信息导入** 48 # 排班规则信息导入**
24 \ No newline at end of file 49 \ No newline at end of file
src/main/resources/datatools/ktrs/carsDataInput.ktr
  1 +<<<<<<< HEAD
1 <?xml version="1.0" encoding="UTF-8"?> 2 <?xml version="1.0" encoding="UTF-8"?>
2 <transformation> 3 <transformation>
3 <info> 4 <info>
@@ -1649,3 +1650,1650 @@ @@ -1649,3 +1650,1650 @@
1649 <slave_transformation>N</slave_transformation> 1650 <slave_transformation>N</slave_transformation>
1650 1651
1651 </transformation> 1652 </transformation>
  1653 +=======
  1654 +<?xml version="1.0" encoding="UTF-8"?>
  1655 +<transformation>
  1656 + <info>
  1657 + <name>carsDataInput</name>
  1658 + <description>&#x8f66;&#x8f86;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</description>
  1659 + <extended_description>&#x8f66;&#x8f86;&#x57fa;&#x7840;&#x4fe1;&#x606f;</extended_description>
  1660 + <trans_version/>
  1661 + <trans_type>Normal</trans_type>
  1662 + <trans_status>0</trans_status>
  1663 + <directory>&#x2f;</directory>
  1664 + <parameters>
  1665 + <parameter>
  1666 + <name>erroroutputdir</name>
  1667 + <default_value/>
  1668 + <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>
  1669 + </parameter>
  1670 + <parameter>
  1671 + <name>filepath</name>
  1672 + <default_value/>
  1673 + <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>
  1674 + </parameter>
  1675 + </parameters>
  1676 + <log>
  1677 +<trans-log-table><connection/>
  1678 +<schema/>
  1679 +<table/>
  1680 +<size_limit_lines/>
  1681 +<interval/>
  1682 +<timeout_days/>
  1683 +<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>
  1684 +<perf-log-table><connection/>
  1685 +<schema/>
  1686 +<table/>
  1687 +<interval/>
  1688 +<timeout_days/>
  1689 +<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>
  1690 +<channel-log-table><connection/>
  1691 +<schema/>
  1692 +<table/>
  1693 +<timeout_days/>
  1694 +<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>
  1695 +<step-log-table><connection/>
  1696 +<schema/>
  1697 +<table/>
  1698 +<timeout_days/>
  1699 +<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>
  1700 +<metrics-log-table><connection/>
  1701 +<schema/>
  1702 +<table/>
  1703 +<timeout_days/>
  1704 +<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>
  1705 + </log>
  1706 + <maxdate>
  1707 + <connection/>
  1708 + <table/>
  1709 + <field/>
  1710 + <offset>0.0</offset>
  1711 + <maxdiff>0.0</maxdiff>
  1712 + </maxdate>
  1713 + <size_rowset>10000</size_rowset>
  1714 + <sleep_time_empty>50</sleep_time_empty>
  1715 + <sleep_time_full>50</sleep_time_full>
  1716 + <unique_connections>N</unique_connections>
  1717 + <feedback_shown>Y</feedback_shown>
  1718 + <feedback_size>50000</feedback_size>
  1719 + <using_thread_priorities>Y</using_thread_priorities>
  1720 + <shared_objects_file/>
  1721 + <capture_step_performance>N</capture_step_performance>
  1722 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  1723 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  1724 + <dependencies>
  1725 + </dependencies>
  1726 + <partitionschemas>
  1727 + </partitionschemas>
  1728 + <slaveservers>
  1729 + </slaveservers>
  1730 + <clusterschemas>
  1731 + </clusterschemas>
  1732 + <created_user>-</created_user>
  1733 + <created_date>2016&#x2f;06&#x2f;23 17&#x3a;44&#x3a;46.781</created_date>
  1734 + <modified_user>-</modified_user>
  1735 + <modified_date>2016&#x2f;06&#x2f;23 17&#x3a;44&#x3a;46.781</modified_date>
  1736 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  1737 + <is_key_private>N</is_key_private>
  1738 + </info>
  1739 + <notepads>
  1740 + <notepad>
  1741 + <note>&#x539f;&#x7cfb;&#x7edf;&#x7684;&#x5bfc;&#x51fa;&#x8868;&#xff0c;&#x6709;&#x4e9b;&#x6570;&#x636e;&#x662f;&#x6ca1;&#x6709;&#x7684;&#xff0c;&#x6709;&#x4e9b;&#x6570;&#x636e;&#x4e5f;&#x6709;&#x95ee;&#x9898;&#xff0c;&#x5982;&#x4e0b;&#xa;&#x62a5;&#x5e9f;&#x65e5;&#x671f;&#x53bb;&#x6389;&#xa;&#x8f66;&#x8f86;&#x7f16;&#x7801;&#xff0c;&#x6682;&#x65f6;&#x7528;1&#x4ee3;&#x66ff;&#xa;&#x662f;&#x5426;&#x7535;&#x8f66; &#x6ca1;&#x6709;&#xa;&#x8f66;&#x8f86;&#x5e8f;&#x53f7; &#x6ca1;&#x6709;&#xa;&#x662f;&#x5426;&#x5207;&#x6362; &#x6ca1;&#x6709;&#xa;&#x7ebf;&#x8def;&#x540d;&#x79f0;&#xff08;&#x8fd9;&#x91cc;&#x4e0d;&#x505a;&#x5173;&#x8054;&#xff0c;&#x53ea;&#x662f;&#x767b;&#x8bb0;&#x7684;&#x65f6;&#x5019;&#x4f7f;&#x7528;&#xff09; &#x54a9;&#x6709;</note>
  1742 + <xloc>365</xloc>
  1743 + <yloc>136</yloc>
  1744 + <width>346</width>
  1745 + <heigth>122</heigth>
  1746 + <fontname>YaHei Consolas Hybrid</fontname>
  1747 + <fontsize>12</fontsize>
  1748 + <fontbold>N</fontbold>
  1749 + <fontitalic>N</fontitalic>
  1750 + <fontcolorred>0</fontcolorred>
  1751 + <fontcolorgreen>0</fontcolorgreen>
  1752 + <fontcolorblue>0</fontcolorblue>
  1753 + <backgroundcolorred>255</backgroundcolorred>
  1754 + <backgroundcolorgreen>205</backgroundcolorgreen>
  1755 + <backgroundcolorblue>112</backgroundcolorblue>
  1756 + <bordercolorred>100</bordercolorred>
  1757 + <bordercolorgreen>100</bordercolorgreen>
  1758 + <bordercolorblue>100</bordercolorblue>
  1759 + <drawshadow>Y</drawshadow>
  1760 + </notepad>
  1761 + </notepads>
  1762 + <connection>
  1763 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  1764 + <server>192.168.168.201</server>
  1765 + <type>MYSQL</type>
  1766 + <access>Native</access>
  1767 + <database>control</database>
  1768 + <port>3306</port>
  1769 + <username>root</username>
  1770 + <password>Encrypted 2be98afc86aa7f2e4cb79ff228dc6fa8c</password>
  1771 + <servername/>
  1772 + <data_tablespace/>
  1773 + <index_tablespace/>
  1774 + <attributes>
  1775 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  1776 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  1777 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  1778 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  1779 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  1780 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  1781 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  1782 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  1783 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  1784 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  1785 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  1786 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  1787 + </attributes>
  1788 + </connection>
  1789 + <connection>
  1790 + <name>xlab_mysql_youle</name>
  1791 + <server>101.231.124.8</server>
  1792 + <type>MYSQL</type>
  1793 + <access>Native</access>
  1794 + <database>xlab_youle</database>
  1795 + <port>45687</port>
  1796 + <username>xlab-youle</username>
  1797 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  1798 + <servername/>
  1799 + <data_tablespace/>
  1800 + <index_tablespace/>
  1801 + <attributes>
  1802 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  1803 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  1804 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  1805 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  1806 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  1807 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  1808 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  1809 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  1810 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  1811 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  1812 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  1813 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  1814 + </attributes>
  1815 + </connection>
  1816 + <connection>
  1817 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  1818 + <server>localhost</server>
  1819 + <type>MYSQL</type>
  1820 + <access>Native</access>
  1821 + <database>xlab_youle</database>
  1822 + <port>3306</port>
  1823 + <username>root</username>
  1824 + <password>Encrypted </password>
  1825 + <servername/>
  1826 + <data_tablespace/>
  1827 + <index_tablespace/>
  1828 + <attributes>
  1829 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  1830 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  1831 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  1832 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  1833 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  1834 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  1835 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  1836 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  1837 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  1838 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  1839 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  1840 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  1841 + </attributes>
  1842 + </connection>
  1843 + <connection>
  1844 + <name>xlab_youle</name>
  1845 + <server/>
  1846 + <type>MYSQL</type>
  1847 + <access>JNDI</access>
  1848 + <database>xlab_youle</database>
  1849 + <port>1521</port>
  1850 + <username/>
  1851 + <password>Encrypted </password>
  1852 + <servername/>
  1853 + <data_tablespace/>
  1854 + <index_tablespace/>
  1855 + <attributes>
  1856 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  1857 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  1858 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  1859 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  1860 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  1861 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  1862 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  1863 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  1864 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  1865 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  1866 + </attributes>
  1867 + </connection>
  1868 + <order>
  1869 + <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  1870 + <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x662f;&#x5426;&#x7a7a;&#x8c03;&#x8f66;</to><enabled>Y</enabled> </hop>
  1871 + <hop> <from>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>
  1872 + <hop> <from>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</from><to>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</to><enabled>Y</enabled> </hop>
  1873 + <hop> <from>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</from><to>&#x662f;&#x5426;&#x7684;&#x53d8;&#x6210;&#x6570;&#x5b57;&#x578b;</to><enabled>Y</enabled> </hop>
  1874 + <hop> <from>&#x662f;&#x5426;&#x7684;&#x53d8;&#x6210;&#x6570;&#x5b57;&#x578b;</from><to>&#x516c;&#x4ea4;&#x4f01;&#x4e1a;&#x4ee3;&#x7801;</to><enabled>Y</enabled> </hop>
  1875 + <hop> <from>&#x662f;&#x5426;&#x7a7a;&#x8c03;&#x8f66;</from><to>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</to><enabled>Y</enabled> </hop>
  1876 + <hop> <from>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</from><to>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</to><enabled>Y</enabled> </hop>
  1877 + <hop> <from>&#x516c;&#x4ea4;&#x4f01;&#x4e1a;&#x4ee3;&#x7801;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars</to><enabled>Y</enabled> </hop>
  1878 + <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>
  1879 + </order>
  1880 + <step>
  1881 + <name>&#x516c;&#x4ea4;&#x4f01;&#x4e1a;&#x4ee3;&#x7801;</name>
  1882 + <type>ValueMapper</type>
  1883 + <description/>
  1884 + <distribute>Y</distribute>
  1885 + <custom_distribution/>
  1886 + <copies>1</copies>
  1887 + <partitioning>
  1888 + <method>none</method>
  1889 + <schema_name/>
  1890 + </partitioning>
  1891 + <field_to_use>company</field_to_use>
  1892 + <target_field>businessCode</target_field>
  1893 + <non_match_default/>
  1894 + <fields>
  1895 + <field>
  1896 + <source_value>&#x4e0a;&#x5357;&#x516c;&#x53f8;</source_value>
  1897 + <target_value>55</target_value>
  1898 + </field>
  1899 + <field>
  1900 + <source_value>&#x91d1;&#x9ad8;&#x516c;&#x53f8;</source_value>
  1901 + <target_value>22</target_value>
  1902 + </field>
  1903 + <field>
  1904 + <source_value>&#x6768;&#x9ad8;&#x516c;&#x53f8;</source_value>
  1905 + <target_value>05</target_value>
  1906 + </field>
  1907 + <field>
  1908 + <source_value>&#x5357;&#x6c47;&#x516c;&#x53f8;</source_value>
  1909 + <target_value>26</target_value>
  1910 + </field>
  1911 + <field>
  1912 + <source_value>&#x516c;&#x4ea4;&#x516c;&#x53f8;</source_value>
  1913 + <target_value>88</target_value>
  1914 + </field>
  1915 + <field>
  1916 + <source_value>&#x95f5;&#x884c;&#x516c;&#x4ea4;</source_value>
  1917 + <target_value>77</target_value>
  1918 + </field>
  1919 + </fields>
  1920 + <cluster_schema/>
  1921 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1922 + <xloc>841</xloc>
  1923 + <yloc>166</yloc>
  1924 + <draw>Y</draw>
  1925 + </GUI>
  1926 + </step>
  1927 +
  1928 + <step>
  1929 + <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name>
  1930 + <type>ExcelInput</type>
  1931 + <description/>
  1932 + <distribute>Y</distribute>
  1933 + <custom_distribution/>
  1934 + <copies>1</copies>
  1935 + <partitioning>
  1936 + <method>none</method>
  1937 + <schema_name/>
  1938 + </partitioning>
  1939 + <header>Y</header>
  1940 + <noempty>Y</noempty>
  1941 + <stoponempty>N</stoponempty>
  1942 + <filefield/>
  1943 + <sheetfield/>
  1944 + <sheetrownumfield/>
  1945 + <rownumfield/>
  1946 + <sheetfield/>
  1947 + <filefield/>
  1948 + <limit>0</limit>
  1949 + <encoding/>
  1950 + <add_to_result_filenames>Y</add_to_result_filenames>
  1951 + <accept_filenames>Y</accept_filenames>
  1952 + <accept_field>filepath_</accept_field>
  1953 + <accept_stepname>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</accept_stepname>
  1954 + <file>
  1955 + <name/>
  1956 + <filemask/>
  1957 + <exclude_filemask/>
  1958 + <file_required>N</file_required>
  1959 + <include_subfolders>N</include_subfolders>
  1960 + </file>
  1961 + <fields>
  1962 + <field>
  1963 + <name>&#x8f66;&#x724c;&#x53f7;</name>
  1964 + <type>String</type>
  1965 + <length>-1</length>
  1966 + <precision>-1</precision>
  1967 + <trim_type>none</trim_type>
  1968 + <repeat>N</repeat>
  1969 + <format/>
  1970 + <currency/>
  1971 + <decimal/>
  1972 + <group/>
  1973 + </field>
  1974 + <field>
  1975 + <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
  1976 + <type>String</type>
  1977 + <length>-1</length>
  1978 + <precision>-1</precision>
  1979 + <trim_type>none</trim_type>
  1980 + <repeat>N</repeat>
  1981 + <format/>
  1982 + <currency/>
  1983 + <decimal/>
  1984 + <group/>
  1985 + </field>
  1986 + <field>
  1987 + <name>&#x8f66;&#x8f86;&#x7f16;&#x7801;</name>
  1988 + <type>String</type>
  1989 + <length>-1</length>
  1990 + <precision>-1</precision>
  1991 + <trim_type>none</trim_type>
  1992 + <repeat>N</repeat>
  1993 + <format/>
  1994 + <currency/>
  1995 + <decimal/>
  1996 + <group/>
  1997 + </field>
  1998 + <field>
  1999 + <name>&#x8f66;&#x578b;&#x7c7b;&#x522b;</name>
  2000 + <type>String</type>
  2001 + <length>-1</length>
  2002 + <precision>-1</precision>
  2003 + <trim_type>none</trim_type>
  2004 + <repeat>N</repeat>
  2005 + <format/>
  2006 + <currency/>
  2007 + <decimal/>
  2008 + <group/>
  2009 + </field>
  2010 + <field>
  2011 + <name>&#x5ea7;&#x4f4d;&#x6570;</name>
  2012 + <type>String</type>
  2013 + <length>-1</length>
  2014 + <precision>-1</precision>
  2015 + <trim_type>none</trim_type>
  2016 + <repeat>N</repeat>
  2017 + <format/>
  2018 + <currency/>
  2019 + <decimal/>
  2020 + <group/>
  2021 + </field>
  2022 + <field>
  2023 + <name>&#x8f7d;&#x5ba2;&#x6807;&#x51c6;</name>
  2024 + <type>String</type>
  2025 + <length>-1</length>
  2026 + <precision>-1</precision>
  2027 + <trim_type>none</trim_type>
  2028 + <repeat>N</repeat>
  2029 + <format/>
  2030 + <currency/>
  2031 + <decimal/>
  2032 + <group/>
  2033 + </field>
  2034 + <field>
  2035 + <name>&#x6280;&#x672f;&#x901f;&#x5ea6;</name>
  2036 + <type>String</type>
  2037 + <length>-1</length>
  2038 + <precision>-1</precision>
  2039 + <trim_type>none</trim_type>
  2040 + <repeat>N</repeat>
  2041 + <format/>
  2042 + <currency/>
  2043 + <decimal/>
  2044 + <group/>
  2045 + </field>
  2046 + <field>
  2047 + <name>&#x662f;&#x5426;&#x7a7a;&#x8c03;</name>
  2048 + <type>String</type>
  2049 + <length>-1</length>
  2050 + <precision>-1</precision>
  2051 + <trim_type>none</trim_type>
  2052 + <repeat>N</repeat>
  2053 + <format/>
  2054 + <currency/>
  2055 + <decimal/>
  2056 + <group/>
  2057 + </field>
  2058 + <field>
  2059 + <name>&#x6807;&#x51c6;&#x6cb9;&#x8017;&#x28;&#x5f00;&#x7a7a;&#x8c03;&#x29;</name>
  2060 + <type>String</type>
  2061 + <length>-1</length>
  2062 + <precision>-1</precision>
  2063 + <trim_type>none</trim_type>
  2064 + <repeat>N</repeat>
  2065 + <format/>
  2066 + <currency/>
  2067 + <decimal/>
  2068 + <group/>
  2069 + </field>
  2070 + <field>
  2071 + <name>&#x6807;&#x51c6;&#x6cb9;&#x8017;&#x28;&#x5173;&#x7a7a;&#x8c03;&#x29;</name>
  2072 + <type>String</type>
  2073 + <length>-1</length>
  2074 + <precision>-1</precision>
  2075 + <trim_type>none</trim_type>
  2076 + <repeat>N</repeat>
  2077 + <format/>
  2078 + <currency/>
  2079 + <decimal/>
  2080 + <group/>
  2081 + </field>
  2082 + <field>
  2083 + <name>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</name>
  2084 + <type>String</type>
  2085 + <length>-1</length>
  2086 + <precision>-1</precision>
  2087 + <trim_type>none</trim_type>
  2088 + <repeat>N</repeat>
  2089 + <format/>
  2090 + <currency/>
  2091 + <decimal/>
  2092 + <group/>
  2093 + </field>
  2094 + <field>
  2095 + <name>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</name>
  2096 + <type>String</type>
  2097 + <length>-1</length>
  2098 + <precision>-1</precision>
  2099 + <trim_type>none</trim_type>
  2100 + <repeat>N</repeat>
  2101 + <format/>
  2102 + <currency/>
  2103 + <decimal/>
  2104 + <group/>
  2105 + </field>
  2106 + <field>
  2107 + <name>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</name>
  2108 + <type>String</type>
  2109 + <length>-1</length>
  2110 + <precision>-1</precision>
  2111 + <trim_type>none</trim_type>
  2112 + <repeat>N</repeat>
  2113 + <format/>
  2114 + <currency/>
  2115 + <decimal/>
  2116 + <group/>
  2117 + </field>
  2118 + <field>
  2119 + <name>&#x8fd0;&#x8425;&#x72b6;&#x6001;</name>
  2120 + <type>String</type>
  2121 + <length>-1</length>
  2122 + <precision>-1</precision>
  2123 + <trim_type>none</trim_type>
  2124 + <repeat>N</repeat>
  2125 + <format/>
  2126 + <currency/>
  2127 + <decimal/>
  2128 + <group/>
  2129 + </field>
  2130 + <field>
  2131 + <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  2132 + <type>String</type>
  2133 + <length>-1</length>
  2134 + <precision>-1</precision>
  2135 + <trim_type>none</trim_type>
  2136 + <repeat>N</repeat>
  2137 + <format/>
  2138 + <currency/>
  2139 + <decimal/>
  2140 + <group/>
  2141 + </field>
  2142 + <field>
  2143 + <name>&#x53d6;&#x6d88;&#x65e5;&#x671f;</name>
  2144 + <type>String</type>
  2145 + <length>-1</length>
  2146 + <precision>-1</precision>
  2147 + <trim_type>none</trim_type>
  2148 + <repeat>N</repeat>
  2149 + <format/>
  2150 + <currency/>
  2151 + <decimal/>
  2152 + <group/>
  2153 + </field>
  2154 + <field>
  2155 + <name>&#x62a5;&#x5e9f;&#x53f7;</name>
  2156 + <type>String</type>
  2157 + <length>-1</length>
  2158 + <precision>-1</precision>
  2159 + <trim_type>none</trim_type>
  2160 + <repeat>N</repeat>
  2161 + <format/>
  2162 + <currency/>
  2163 + <decimal/>
  2164 + <group/>
  2165 + </field>
  2166 + <field>
  2167 + <name>&#x62a5;&#x5e9f;&#x65e5;&#x671f;</name>
  2168 + <type>String</type>
  2169 + <length>-1</length>
  2170 + <precision>-1</precision>
  2171 + <trim_type>none</trim_type>
  2172 + <repeat>N</repeat>
  2173 + <format/>
  2174 + <currency/>
  2175 + <decimal/>
  2176 + <group/>
  2177 + </field>
  2178 + <field>
  2179 + <name>&#x5907;&#x6ce8;</name>
  2180 + <type>String</type>
  2181 + <length>-1</length>
  2182 + <precision>-1</precision>
  2183 + <trim_type>none</trim_type>
  2184 + <repeat>N</repeat>
  2185 + <format/>
  2186 + <currency/>
  2187 + <decimal/>
  2188 + <group/>
  2189 + </field>
  2190 + <field>
  2191 + <name>&#x8bbe;&#x5907;&#x7f16;&#x53f7;</name>
  2192 + <type>String</type>
  2193 + <length>-1</length>
  2194 + <precision>-1</precision>
  2195 + <trim_type>none</trim_type>
  2196 + <repeat>N</repeat>
  2197 + <format/>
  2198 + <currency/>
  2199 + <decimal/>
  2200 + <group/>
  2201 + </field>
  2202 + <field>
  2203 + <name>&#x5382;&#x724c;&#x578b;&#x53f7;</name>
  2204 + <type>String</type>
  2205 + <length>-1</length>
  2206 + <precision>-1</precision>
  2207 + <trim_type>none</trim_type>
  2208 + <repeat>N</repeat>
  2209 + <format/>
  2210 + <currency/>
  2211 + <decimal/>
  2212 + <group/>
  2213 + </field>
  2214 + <field>
  2215 + <name>&#x5382;&#x724c;&#x578b;&#x53f7;2</name>
  2216 + <type>String</type>
  2217 + <length>-1</length>
  2218 + <precision>-1</precision>
  2219 + <trim_type>none</trim_type>
  2220 + <repeat>N</repeat>
  2221 + <format/>
  2222 + <currency/>
  2223 + <decimal/>
  2224 + <group/>
  2225 + </field>
  2226 + <field>
  2227 + <name>&#x8f66;&#x8f86;&#x7b49;&#x7ea7;&#x6807;&#x51c6;</name>
  2228 + <type>String</type>
  2229 + <length>-1</length>
  2230 + <precision>-1</precision>
  2231 + <trim_type>none</trim_type>
  2232 + <repeat>N</repeat>
  2233 + <format/>
  2234 + <currency/>
  2235 + <decimal/>
  2236 + <group/>
  2237 + </field>
  2238 + <field>
  2239 + <name>&#x51fa;&#x5382;&#x6392;&#x653e;&#x6807;&#x51c6;</name>
  2240 + <type>String</type>
  2241 + <length>-1</length>
  2242 + <precision>-1</precision>
  2243 + <trim_type>none</trim_type>
  2244 + <repeat>N</repeat>
  2245 + <format/>
  2246 + <currency/>
  2247 + <decimal/>
  2248 + <group/>
  2249 + </field>
  2250 + <field>
  2251 + <name>&#x53d1;&#x52a8;&#x673a;&#x53f7;&#x7801;1</name>
  2252 + <type>String</type>
  2253 + <length>-1</length>
  2254 + <precision>-1</precision>
  2255 + <trim_type>none</trim_type>
  2256 + <repeat>N</repeat>
  2257 + <format/>
  2258 + <currency/>
  2259 + <decimal/>
  2260 + <group/>
  2261 + </field>
  2262 + <field>
  2263 + <name>&#x53d1;&#x52a8;&#x673a;&#x53f7;&#x7801;2</name>
  2264 + <type>String</type>
  2265 + <length>-1</length>
  2266 + <precision>-1</precision>
  2267 + <trim_type>none</trim_type>
  2268 + <repeat>N</repeat>
  2269 + <format/>
  2270 + <currency/>
  2271 + <decimal/>
  2272 + <group/>
  2273 + </field>
  2274 + <field>
  2275 + <name>&#x8f66;&#x67b6;&#x53f7;&#x7801;1</name>
  2276 + <type>String</type>
  2277 + <length>-1</length>
  2278 + <precision>-1</precision>
  2279 + <trim_type>none</trim_type>
  2280 + <repeat>N</repeat>
  2281 + <format/>
  2282 + <currency/>
  2283 + <decimal/>
  2284 + <group/>
  2285 + </field>
  2286 + <field>
  2287 + <name>&#x8f66;&#x67b6;&#x53f7;&#x7801;2</name>
  2288 + <type>String</type>
  2289 + <length>-1</length>
  2290 + <precision>-1</precision>
  2291 + <trim_type>none</trim_type>
  2292 + <repeat>N</repeat>
  2293 + <format/>
  2294 + <currency/>
  2295 + <decimal/>
  2296 + <group/>
  2297 + </field>
  2298 + <field>
  2299 + <name>&#x8f66;&#x8f86;&#x7c7b;&#x578b;</name>
  2300 + <type>String</type>
  2301 + <length>-1</length>
  2302 + <precision>-1</precision>
  2303 + <trim_type>none</trim_type>
  2304 + <repeat>N</repeat>
  2305 + <format/>
  2306 + <currency/>
  2307 + <decimal/>
  2308 + <group/>
  2309 + </field>
  2310 + <field>
  2311 + <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name>
  2312 + <type>String</type>
  2313 + <length>-1</length>
  2314 + <precision>-1</precision>
  2315 + <trim_type>none</trim_type>
  2316 + <repeat>N</repeat>
  2317 + <format/>
  2318 + <currency/>
  2319 + <decimal/>
  2320 + <group/>
  2321 + </field>
  2322 + <field>
  2323 + <name>&#x4fee;&#x6539;&#x65e5;&#x671f;</name>
  2324 + <type>String</type>
  2325 + <length>-1</length>
  2326 + <precision>-1</precision>
  2327 + <trim_type>none</trim_type>
  2328 + <repeat>N</repeat>
  2329 + <format/>
  2330 + <currency/>
  2331 + <decimal/>
  2332 + <group/>
  2333 + </field>
  2334 + <field>
  2335 + <name>&#x662f;&#x5426;&#x673a;&#x52a8;&#x8f66;</name>
  2336 + <type>String</type>
  2337 + <length>-1</length>
  2338 + <precision>-1</precision>
  2339 + <trim_type>none</trim_type>
  2340 + <repeat>N</repeat>
  2341 + <format/>
  2342 + <currency/>
  2343 + <decimal/>
  2344 + <group/>
  2345 + </field>
  2346 + <field>
  2347 + <name>&#x89c6;&#x9891;&#x7f16;&#x53f7;</name>
  2348 + <type>String</type>
  2349 + <length>-1</length>
  2350 + <precision>-1</precision>
  2351 + <trim_type>none</trim_type>
  2352 + <repeat>N</repeat>
  2353 + <format/>
  2354 + <currency/>
  2355 + <decimal/>
  2356 + <group/>
  2357 + </field>
  2358 + <field>
  2359 + <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name>
  2360 + <type>String</type>
  2361 + <length>-1</length>
  2362 + <precision>-1</precision>
  2363 + <trim_type>none</trim_type>
  2364 + <repeat>N</repeat>
  2365 + <format/>
  2366 + <currency/>
  2367 + <decimal/>
  2368 + <group/>
  2369 + </field>
  2370 + <field>
  2371 + <name>&#x5206;&#x516c;&#x53f8;</name>
  2372 + <type>String</type>
  2373 + <length>-1</length>
  2374 + <precision>-1</precision>
  2375 + <trim_type>none</trim_type>
  2376 + <repeat>N</repeat>
  2377 + <format/>
  2378 + <currency/>
  2379 + <decimal/>
  2380 + <group/>
  2381 + </field>
  2382 + </fields>
  2383 + <sheets>
  2384 + <sheet>
  2385 + <name>&#x5de5;&#x4f5c;&#x8868;1</name>
  2386 + <startrow>0</startrow>
  2387 + <startcol>0</startcol>
  2388 + </sheet>
  2389 + </sheets>
  2390 + <strict_types>N</strict_types>
  2391 + <error_ignored>N</error_ignored>
  2392 + <error_line_skipped>N</error_line_skipped>
  2393 + <bad_line_files_destination_directory/>
  2394 + <bad_line_files_extension>warning</bad_line_files_extension>
  2395 + <error_line_files_destination_directory/>
  2396 + <error_line_files_extension>error</error_line_files_extension>
  2397 + <line_number_files_destination_directory/>
  2398 + <line_number_files_extension>line</line_number_files_extension>
  2399 + <shortFileFieldName/>
  2400 + <pathFieldName/>
  2401 + <hiddenFieldName/>
  2402 + <lastModificationTimeFieldName/>
  2403 + <uriNameFieldName/>
  2404 + <rootUriNameFieldName/>
  2405 + <extensionFieldName/>
  2406 + <sizeFieldName/>
  2407 + <spreadsheet_type>JXL</spreadsheet_type>
  2408 + <cluster_schema/>
  2409 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2410 + <xloc>131</xloc>
  2411 + <yloc>58</yloc>
  2412 + <draw>Y</draw>
  2413 + </GUI>
  2414 + </step>
  2415 +
  2416 + <step>
  2417 + <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
  2418 + <type>SelectValues</type>
  2419 + <description/>
  2420 + <distribute>Y</distribute>
  2421 + <custom_distribution/>
  2422 + <copies>1</copies>
  2423 + <partitioning>
  2424 + <method>none</method>
  2425 + <schema_name/>
  2426 + </partitioning>
  2427 + <fields> <field> <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
  2428 + <rename>insideCode</rename>
  2429 + <length>-2</length>
  2430 + <precision>-2</precision>
  2431 + </field> <field> <name>&#x8f66;&#x8f86;&#x7f16;&#x7801;</name>
  2432 + <rename>carCode</rename>
  2433 + <length>-2</length>
  2434 + <precision>-2</precision>
  2435 + </field> <field> <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name>
  2436 + <rename>company</rename>
  2437 + <length>-2</length>
  2438 + <precision>-2</precision>
  2439 + </field> <field> <name>&#x5206;&#x516c;&#x53f8;</name>
  2440 + <rename>brancheCompany</rename>
  2441 + <length>-2</length>
  2442 + <precision>-2</precision>
  2443 + </field> <field> <name>&#x8f66;&#x724c;&#x53f7;</name>
  2444 + <rename>carPlate</rename>
  2445 + <length>-2</length>
  2446 + <precision>-2</precision>
  2447 + </field> <field> <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name>
  2448 + <rename>supplierName</rename>
  2449 + <length>-2</length>
  2450 + <precision>-2</precision>
  2451 + </field> <field> <name>&#x8bbe;&#x5907;&#x7f16;&#x53f7;</name>
  2452 + <rename>equipmentCode</rename>
  2453 + <length>-2</length>
  2454 + <precision>-2</precision>
  2455 + </field> <field> <name>&#x8f66;&#x578b;&#x7c7b;&#x522b;</name>
  2456 + <rename>carClass</rename>
  2457 + <length>-2</length>
  2458 + <precision>-2</precision>
  2459 + </field> <field> <name>&#x6280;&#x672f;&#x901f;&#x5ea6;</name>
  2460 + <rename>speed</rename>
  2461 + <length>-2</length>
  2462 + <precision>-2</precision>
  2463 + </field> <field> <name>&#x5ea7;&#x4f4d;&#x6570;</name>
  2464 + <rename>carSeatnNumber</rename>
  2465 + <length>-2</length>
  2466 + <precision>-2</precision>
  2467 + </field> <field> <name>&#x8f7d;&#x5ba2;&#x6807;&#x51c6;</name>
  2468 + <rename>carStandard</rename>
  2469 + <length>-2</length>
  2470 + <precision>-2</precision>
  2471 + </field> <field> <name>&#x6807;&#x51c6;&#x6cb9;&#x8017;&#x28;&#x5f00;&#x7a7a;&#x8c03;&#x29;</name>
  2472 + <rename>kburnStandard</rename>
  2473 + <length>-2</length>
  2474 + <precision>-2</precision>
  2475 + </field> <field> <name>&#x6807;&#x51c6;&#x6cb9;&#x8017;&#x28;&#x5173;&#x7a7a;&#x8c03;&#x29;</name>
  2476 + <rename>gburnStandard</rename>
  2477 + <length>-2</length>
  2478 + <precision>-2</precision>
  2479 + </field> <field> <name>&#x62a5;&#x5e9f;&#x53f7;</name>
  2480 + <rename>scrapCode</rename>
  2481 + <length>-2</length>
  2482 + <precision>-2</precision>
  2483 + </field> <field> <name>&#x5382;&#x724c;&#x578b;&#x53f7;</name>
  2484 + <rename>makeCodeOne</rename>
  2485 + <length>-2</length>
  2486 + <precision>-2</precision>
  2487 + </field> <field> <name>&#x5382;&#x724c;&#x578b;&#x53f7;2</name>
  2488 + <rename>makeCodeTwo</rename>
  2489 + <length>-2</length>
  2490 + <precision>-2</precision>
  2491 + </field> <field> <name>&#x8f66;&#x8f86;&#x7b49;&#x7ea7;&#x6807;&#x51c6;</name>
  2492 + <rename>carGride</rename>
  2493 + <length>-2</length>
  2494 + <precision>-2</precision>
  2495 + </field> <field> <name>&#x51fa;&#x5382;&#x6392;&#x653e;&#x6807;&#x51c6;</name>
  2496 + <rename>emissionsStandard</rename>
  2497 + <length>-2</length>
  2498 + <precision>-2</precision>
  2499 + </field> <field> <name>&#x53d1;&#x52a8;&#x673a;&#x53f7;&#x7801;1</name>
  2500 + <rename>engineCodeOne</rename>
  2501 + <length>-2</length>
  2502 + <precision>-2</precision>
  2503 + </field> <field> <name>&#x53d1;&#x52a8;&#x673a;&#x53f7;&#x7801;2</name>
  2504 + <rename>engineCodeTwo</rename>
  2505 + <length>-2</length>
  2506 + <precision>-2</precision>
  2507 + </field> <field> <name>&#x8f66;&#x67b6;&#x53f7;&#x7801;1</name>
  2508 + <rename>carNumberOne</rename>
  2509 + <length>-2</length>
  2510 + <precision>-2</precision>
  2511 + </field> <field> <name>&#x8f66;&#x67b6;&#x53f7;&#x7801;2</name>
  2512 + <rename>carNumberTwo</rename>
  2513 + <length>-2</length>
  2514 + <precision>-2</precision>
  2515 + </field> <field> <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  2516 + <rename>openDate</rename>
  2517 + <length>-2</length>
  2518 + <precision>-2</precision>
  2519 + </field> <field> <name>&#x53d6;&#x6d88;&#x65e5;&#x671f;</name>
  2520 + <rename>closeDate</rename>
  2521 + <length>-2</length>
  2522 + <precision>-2</precision>
  2523 + </field> <field> <name>&#x662f;&#x5426;&#x7a7a;&#x8c03;</name>
  2524 + <rename>hvacCar</rename>
  2525 + <length>-2</length>
  2526 + <precision>-2</precision>
  2527 + </field> <field> <name>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</name>
  2528 + <rename>ticketType</rename>
  2529 + <length>-2</length>
  2530 + <precision>-2</precision>
  2531 + </field> <field> <name>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</name>
  2532 + <rename>ledScreen</rename>
  2533 + <length>-2</length>
  2534 + <precision>-2</precision>
  2535 + </field> <field> <name>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</name>
  2536 + <rename>tvVideoType</rename>
  2537 + <length>-2</length>
  2538 + <precision>-2</precision>
  2539 + </field> <field> <name>&#x8f66;&#x8f86;&#x7c7b;&#x578b;</name>
  2540 + <rename>carType</rename>
  2541 + <length>-2</length>
  2542 + <precision>-2</precision>
  2543 + </field> <field> <name>&#x662f;&#x5426;&#x673a;&#x52a8;&#x8f66;</name>
  2544 + <rename>vehicleStats</rename>
  2545 + <length>-2</length>
  2546 + <precision>-2</precision>
  2547 + </field> <field> <name>&#x8fd0;&#x8425;&#x72b6;&#x6001;</name>
  2548 + <rename>operatorsState</rename>
  2549 + <length>-2</length>
  2550 + <precision>-2</precision>
  2551 + </field> <field> <name>&#x5907;&#x6ce8;</name>
  2552 + <rename>descriptions</rename>
  2553 + <length>-2</length>
  2554 + <precision>-2</precision>
  2555 + </field> <field> <name>&#x89c6;&#x9891;&#x7f16;&#x53f7;</name>
  2556 + <rename>videoCode</rename>
  2557 + <length>-2</length>
  2558 + <precision>-2</precision>
  2559 + </field> <select_unspecified>Y</select_unspecified>
  2560 + </fields> <cluster_schema/>
  2561 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2562 + <xloc>279</xloc>
  2563 + <yloc>59</yloc>
  2564 + <draw>Y</draw>
  2565 + </GUI>
  2566 + </step>
  2567 +
  2568 + <step>
  2569 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars</name>
  2570 + <type>InsertUpdate</type>
  2571 + <description/>
  2572 + <distribute>Y</distribute>
  2573 + <custom_distribution/>
  2574 + <copies>1</copies>
  2575 + <partitioning>
  2576 + <method>none</method>
  2577 + <schema_name/>
  2578 + </partitioning>
  2579 + <connection>bus_control_&#x516c;&#x53f8;_201</connection>
  2580 + <commit>1000</commit>
  2581 + <update_bypassed>N</update_bypassed>
  2582 + <lookup>
  2583 + <schema/>
  2584 + <table>bsth_c_cars</table>
  2585 + <key>
  2586 + <name>insideCode</name>
  2587 + <field>inside_code</field>
  2588 + <condition>&#x3d;</condition>
  2589 + <name2/>
  2590 + </key>
  2591 + <value>
  2592 + <name>inside_code</name>
  2593 + <rename>insideCode</rename>
  2594 + <update>Y</update>
  2595 + </value>
  2596 + <value>
  2597 + <name>company</name>
  2598 + <rename>company</rename>
  2599 + <update>Y</update>
  2600 + </value>
  2601 + <value>
  2602 + <name>branche_company</name>
  2603 + <rename>brancheCompany</rename>
  2604 + <update>Y</update>
  2605 + </value>
  2606 + <value>
  2607 + <name>car_plate</name>
  2608 + <rename>carPlate</rename>
  2609 + <update>Y</update>
  2610 + </value>
  2611 + <value>
  2612 + <name>supplier_name</name>
  2613 + <rename>supplierName</rename>
  2614 + <update>Y</update>
  2615 + </value>
  2616 + <value>
  2617 + <name>equipment_code</name>
  2618 + <rename>equipmentCode</rename>
  2619 + <update>Y</update>
  2620 + </value>
  2621 + <value>
  2622 + <name>car_class</name>
  2623 + <rename>carClass</rename>
  2624 + <update>Y</update>
  2625 + </value>
  2626 + <value>
  2627 + <name>speed</name>
  2628 + <rename>speed</rename>
  2629 + <update>Y</update>
  2630 + </value>
  2631 + <value>
  2632 + <name>car_seatn_number</name>
  2633 + <rename>carSeatnNumber</rename>
  2634 + <update>Y</update>
  2635 + </value>
  2636 + <value>
  2637 + <name>car_standard</name>
  2638 + <rename>carStandard</rename>
  2639 + <update>Y</update>
  2640 + </value>
  2641 + <value>
  2642 + <name>car_code</name>
  2643 + <rename>carCode</rename>
  2644 + <update>Y</update>
  2645 + </value>
  2646 + <value>
  2647 + <name>kburn_standard</name>
  2648 + <rename>kburnStandard</rename>
  2649 + <update>Y</update>
  2650 + </value>
  2651 + <value>
  2652 + <name>gburn_standard</name>
  2653 + <rename>gburnStandard</rename>
  2654 + <update>Y</update>
  2655 + </value>
  2656 + <value>
  2657 + <name>scrap_code</name>
  2658 + <rename>scrapCode</rename>
  2659 + <update>Y</update>
  2660 + </value>
  2661 + <value>
  2662 + <name>make_code_one</name>
  2663 + <rename>makeCodeOne</rename>
  2664 + <update>Y</update>
  2665 + </value>
  2666 + <value>
  2667 + <name>make_code_two</name>
  2668 + <rename>makeCodeTwo</rename>
  2669 + <update>Y</update>
  2670 + </value>
  2671 + <value>
  2672 + <name>car_gride</name>
  2673 + <rename>carGride</rename>
  2674 + <update>Y</update>
  2675 + </value>
  2676 + <value>
  2677 + <name>emissions_standard</name>
  2678 + <rename>emissionsStandard</rename>
  2679 + <update>Y</update>
  2680 + </value>
  2681 + <value>
  2682 + <name>engine_code_one</name>
  2683 + <rename>engineCodeOne</rename>
  2684 + <update>Y</update>
  2685 + </value>
  2686 + <value>
  2687 + <name>engine_code_two</name>
  2688 + <rename>engineCodeTwo</rename>
  2689 + <update>Y</update>
  2690 + </value>
  2691 + <value>
  2692 + <name>car_number_one</name>
  2693 + <rename>carNumberOne</rename>
  2694 + <update>Y</update>
  2695 + </value>
  2696 + <value>
  2697 + <name>car_number_two</name>
  2698 + <rename>carNumberTwo</rename>
  2699 + <update>Y</update>
  2700 + </value>
  2701 + <value>
  2702 + <name>open_date</name>
  2703 + <rename>openDate</rename>
  2704 + <update>Y</update>
  2705 + </value>
  2706 + <value>
  2707 + <name>close_date</name>
  2708 + <rename>closeDate</rename>
  2709 + <update>Y</update>
  2710 + </value>
  2711 + <value>
  2712 + <name>hvac_car</name>
  2713 + <rename>hvacCar</rename>
  2714 + <update>Y</update>
  2715 + </value>
  2716 + <value>
  2717 + <name>ticket_type</name>
  2718 + <rename>ticketType</rename>
  2719 + <update>Y</update>
  2720 + </value>
  2721 + <value>
  2722 + <name>led_screen</name>
  2723 + <rename>ledScreen</rename>
  2724 + <update>Y</update>
  2725 + </value>
  2726 + <value>
  2727 + <name>tv_video_type</name>
  2728 + <rename>tvVideoType</rename>
  2729 + <update>Y</update>
  2730 + </value>
  2731 + <value>
  2732 + <name>car_type</name>
  2733 + <rename>carType</rename>
  2734 + <update>Y</update>
  2735 + </value>
  2736 + <value>
  2737 + <name>vehicle_stats</name>
  2738 + <rename>vehicleStats</rename>
  2739 + <update>Y</update>
  2740 + </value>
  2741 + <value>
  2742 + <name>operators_state</name>
  2743 + <rename>operatorsState</rename>
  2744 + <update>Y</update>
  2745 + </value>
  2746 + <value>
  2747 + <name>descriptions</name>
  2748 + <rename>descriptions</rename>
  2749 + <update>Y</update>
  2750 + </value>
  2751 + <value>
  2752 + <name>video_code</name>
  2753 + <rename>videoCode</rename>
  2754 + <update>Y</update>
  2755 + </value>
  2756 + <value>
  2757 + <name>business_code</name>
  2758 + <rename>businessCode</rename>
  2759 + <update>Y</update>
  2760 + </value>
  2761 + </lookup>
  2762 + <cluster_schema/>
  2763 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2764 + <xloc>842</xloc>
  2765 + <yloc>319</yloc>
  2766 + <draw>Y</draw>
  2767 + </GUI>
  2768 + </step>
  2769 +
  2770 + <step>
  2771 + <name>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</name>
  2772 + <type>ValueMapper</type>
  2773 + <description/>
  2774 + <distribute>Y</distribute>
  2775 + <custom_distribution/>
  2776 + <copies>1</copies>
  2777 + <partitioning>
  2778 + <method>none</method>
  2779 + <schema_name/>
  2780 + </partitioning>
  2781 + <field_to_use>ledScreen</field_to_use>
  2782 + <target_field/>
  2783 + <non_match_default/>
  2784 + <fields>
  2785 + <field>
  2786 + <source_value>&#x662f;</source_value>
  2787 + <target_value>1</target_value>
  2788 + </field>
  2789 + <field>
  2790 + <source_value>&#x5426;</source_value>
  2791 + <target_value>0</target_value>
  2792 + </field>
  2793 + </fields>
  2794 + <cluster_schema/>
  2795 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2796 + <xloc>590</xloc>
  2797 + <yloc>61</yloc>
  2798 + <draw>Y</draw>
  2799 + </GUI>
  2800 + </step>
  2801 +
  2802 + <step>
  2803 + <name>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</name>
  2804 + <type>ValueMapper</type>
  2805 + <description/>
  2806 + <distribute>Y</distribute>
  2807 + <custom_distribution/>
  2808 + <copies>1</copies>
  2809 + <partitioning>
  2810 + <method>none</method>
  2811 + <schema_name/>
  2812 + </partitioning>
  2813 + <field_to_use>tvVideoType</field_to_use>
  2814 + <target_field/>
  2815 + <non_match_default/>
  2816 + <fields>
  2817 + <field>
  2818 + <source_value>&#x662f;</source_value>
  2819 + <target_value>1</target_value>
  2820 + </field>
  2821 + <field>
  2822 + <source_value>&#x5426;</source_value>
  2823 + <target_value>0</target_value>
  2824 + </field>
  2825 + </fields>
  2826 + <cluster_schema/>
  2827 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2828 + <xloc>706</xloc>
  2829 + <yloc>61</yloc>
  2830 + <draw>Y</draw>
  2831 + </GUI>
  2832 + </step>
  2833 +
  2834 + <step>
  2835 + <name>&#x662f;&#x5426;&#x7684;&#x53d8;&#x6210;&#x6570;&#x5b57;&#x578b;</name>
  2836 + <type>SelectValues</type>
  2837 + <description/>
  2838 + <distribute>Y</distribute>
  2839 + <custom_distribution/>
  2840 + <copies>1</copies>
  2841 + <partitioning>
  2842 + <method>none</method>
  2843 + <schema_name/>
  2844 + </partitioning>
  2845 + <fields> <select_unspecified>N</select_unspecified>
  2846 + <meta> <name>hvacCar</name>
  2847 + <rename>hvacCar</rename>
  2848 + <type>Integer</type>
  2849 + <length>1</length>
  2850 + <precision>-2</precision>
  2851 + <conversion_mask/>
  2852 + <date_format_lenient>false</date_format_lenient>
  2853 + <date_format_locale/>
  2854 + <date_format_timezone/>
  2855 + <lenient_string_to_number>false</lenient_string_to_number>
  2856 + <encoding/>
  2857 + <decimal_symbol/>
  2858 + <grouping_symbol/>
  2859 + <currency_symbol/>
  2860 + <storage_type/>
  2861 + </meta> <meta> <name>ticketType</name>
  2862 + <rename>ticketType</rename>
  2863 + <type>Integer</type>
  2864 + <length>1</length>
  2865 + <precision>-2</precision>
  2866 + <conversion_mask/>
  2867 + <date_format_lenient>false</date_format_lenient>
  2868 + <date_format_locale/>
  2869 + <date_format_timezone/>
  2870 + <lenient_string_to_number>false</lenient_string_to_number>
  2871 + <encoding/>
  2872 + <decimal_symbol/>
  2873 + <grouping_symbol/>
  2874 + <currency_symbol/>
  2875 + <storage_type/>
  2876 + </meta> <meta> <name>ledScreen</name>
  2877 + <rename>ledScreen</rename>
  2878 + <type>Integer</type>
  2879 + <length>1</length>
  2880 + <precision>-2</precision>
  2881 + <conversion_mask/>
  2882 + <date_format_lenient>false</date_format_lenient>
  2883 + <date_format_locale/>
  2884 + <date_format_timezone/>
  2885 + <lenient_string_to_number>false</lenient_string_to_number>
  2886 + <encoding/>
  2887 + <decimal_symbol/>
  2888 + <grouping_symbol/>
  2889 + <currency_symbol/>
  2890 + <storage_type/>
  2891 + </meta> <meta> <name>tvVideoType</name>
  2892 + <rename>tvVideoType</rename>
  2893 + <type>Integer</type>
  2894 + <length>1</length>
  2895 + <precision>-2</precision>
  2896 + <conversion_mask/>
  2897 + <date_format_lenient>false</date_format_lenient>
  2898 + <date_format_locale/>
  2899 + <date_format_timezone/>
  2900 + <lenient_string_to_number>false</lenient_string_to_number>
  2901 + <encoding/>
  2902 + <decimal_symbol/>
  2903 + <grouping_symbol/>
  2904 + <currency_symbol/>
  2905 + <storage_type/>
  2906 + </meta> </fields> <cluster_schema/>
  2907 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2908 + <xloc>839</xloc>
  2909 + <yloc>61</yloc>
  2910 + <draw>Y</draw>
  2911 + </GUI>
  2912 + </step>
  2913 +
  2914 + <step>
  2915 + <name>&#x662f;&#x5426;&#x7a7a;&#x8c03;&#x8f66;</name>
  2916 + <type>ValueMapper</type>
  2917 + <description/>
  2918 + <distribute>Y</distribute>
  2919 + <custom_distribution/>
  2920 + <copies>1</copies>
  2921 + <partitioning>
  2922 + <method>none</method>
  2923 + <schema_name/>
  2924 + </partitioning>
  2925 + <field_to_use>hvacCar</field_to_use>
  2926 + <target_field/>
  2927 + <non_match_default/>
  2928 + <fields>
  2929 + <field>
  2930 + <source_value>&#x662f;</source_value>
  2931 + <target_value>1</target_value>
  2932 + </field>
  2933 + <field>
  2934 + <source_value>&#x5426;</source_value>
  2935 + <target_value>0</target_value>
  2936 + </field>
  2937 + </fields>
  2938 + <cluster_schema/>
  2939 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2940 + <xloc>388</xloc>
  2941 + <yloc>61</yloc>
  2942 + <draw>Y</draw>
  2943 + </GUI>
  2944 + </step>
  2945 +
  2946 + <step>
  2947 + <name>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</name>
  2948 + <type>ValueMapper</type>
  2949 + <description/>
  2950 + <distribute>Y</distribute>
  2951 + <custom_distribution/>
  2952 + <copies>1</copies>
  2953 + <partitioning>
  2954 + <method>none</method>
  2955 + <schema_name/>
  2956 + </partitioning>
  2957 + <field_to_use>ticketType</field_to_use>
  2958 + <target_field/>
  2959 + <non_match_default/>
  2960 + <fields>
  2961 + <field>
  2962 + <source_value>&#x662f;</source_value>
  2963 + <target_value>1</target_value>
  2964 + </field>
  2965 + <field>
  2966 + <source_value>&#x5426;</source_value>
  2967 + <target_value>0</target_value>
  2968 + </field>
  2969 + </fields>
  2970 + <cluster_schema/>
  2971 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2972 + <xloc>485</xloc>
  2973 + <yloc>61</yloc>
  2974 + <draw>Y</draw>
  2975 + </GUI>
  2976 + </step>
  2977 +
  2978 + <step>
  2979 + <name>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</name>
  2980 + <type>GetVariable</type>
  2981 + <description/>
  2982 + <distribute>Y</distribute>
  2983 + <custom_distribution/>
  2984 + <copies>1</copies>
  2985 + <partitioning>
  2986 + <method>none</method>
  2987 + <schema_name/>
  2988 + </partitioning>
  2989 + <fields>
  2990 + <field>
  2991 + <name>filepath_</name>
  2992 + <variable>&#x24;&#x7b;filepath&#x7d;</variable>
  2993 + <type>String</type>
  2994 + <format/>
  2995 + <currency/>
  2996 + <decimal/>
  2997 + <group/>
  2998 + <length>-1</length>
  2999 + <precision>-1</precision>
  3000 + <trim_type>none</trim_type>
  3001 + </field>
  3002 + <field>
  3003 + <name>erroroutputdir_</name>
  3004 + <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>
  3005 + <type>String</type>
  3006 + <format/>
  3007 + <currency/>
  3008 + <decimal/>
  3009 + <group/>
  3010 + <length>-1</length>
  3011 + <precision>-1</precision>
  3012 + <trim_type>none</trim_type>
  3013 + </field>
  3014 + </fields>
  3015 + <cluster_schema/>
  3016 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  3017 + <xloc>134</xloc>
  3018 + <yloc>183</yloc>
  3019 + <draw>Y</draw>
  3020 + </GUI>
  3021 + </step>
  3022 +
  3023 + <step>
  3024 + <name>&#x9519;&#x8bef;&#x8f93;&#x51fa;</name>
  3025 + <type>ExcelOutput</type>
  3026 + <description/>
  3027 + <distribute>Y</distribute>
  3028 + <custom_distribution/>
  3029 + <copies>1</copies>
  3030 + <partitioning>
  3031 + <method>none</method>
  3032 + <schema_name/>
  3033 + </partitioning>
  3034 + <header>Y</header>
  3035 + <footer>N</footer>
  3036 + <encoding/>
  3037 + <append>N</append>
  3038 + <add_to_result_filenames>Y</add_to_result_filenames>
  3039 + <file>
  3040 + <name>&#x24;&#x7b;erroroutputdir&#x7d;&#x2f;&#x8f66;&#x8f86;&#x57fa;&#x7840;&#x4fe1;&#x606f;_&#x9519;&#x8bef;</name>
  3041 + <extention>xls</extention>
  3042 + <do_not_open_newfile_init>N</do_not_open_newfile_init>
  3043 + <create_parent_folder>N</create_parent_folder>
  3044 + <split>N</split>
  3045 + <add_date>N</add_date>
  3046 + <add_time>N</add_time>
  3047 + <SpecifyFormat>N</SpecifyFormat>
  3048 + <date_time_format/>
  3049 + <sheetname>Sheet1</sheetname>
  3050 + <autosizecolums>N</autosizecolums>
  3051 + <nullisblank>N</nullisblank>
  3052 + <protect_sheet>N</protect_sheet>
  3053 + <password>Encrypted </password>
  3054 + <splitevery>0</splitevery>
  3055 + <usetempfiles>N</usetempfiles>
  3056 + <tempdirectory/>
  3057 + </file>
  3058 + <template>
  3059 + <enabled>N</enabled>
  3060 + <append>N</append>
  3061 + <filename>template.xls</filename>
  3062 + </template>
  3063 + <fields>
  3064 + <field>
  3065 + <name>insideCode</name>
  3066 + <type>String</type>
  3067 + <format/>
  3068 + </field>
  3069 + <field>
  3070 + <name>company</name>
  3071 + <type>String</type>
  3072 + <format/>
  3073 + </field>
  3074 + <field>
  3075 + <name>brancheCompany</name>
  3076 + <type>String</type>
  3077 + <format/>
  3078 + </field>
  3079 + <field>
  3080 + <name>carPlate</name>
  3081 + <type>String</type>
  3082 + <format/>
  3083 + </field>
  3084 + <field>
  3085 + <name>supplierName</name>
  3086 + <type>String</type>
  3087 + <format/>
  3088 + </field>
  3089 + <field>
  3090 + <name>equipmentCode</name>
  3091 + <type>String</type>
  3092 + <format/>
  3093 + </field>
  3094 + <field>
  3095 + <name>carClass</name>
  3096 + <type>String</type>
  3097 + <format/>
  3098 + </field>
  3099 + <field>
  3100 + <name>speed</name>
  3101 + <type>String</type>
  3102 + <format/>
  3103 + </field>
  3104 + <field>
  3105 + <name>carSeatnNumber</name>
  3106 + <type>String</type>
  3107 + <format/>
  3108 + </field>
  3109 + <field>
  3110 + <name>carStandard</name>
  3111 + <type>String</type>
  3112 + <format/>
  3113 + </field>
  3114 + <field>
  3115 + <name>kburnStandard</name>
  3116 + <type>String</type>
  3117 + <format/>
  3118 + </field>
  3119 + <field>
  3120 + <name>gburnStandard</name>
  3121 + <type>String</type>
  3122 + <format/>
  3123 + </field>
  3124 + <field>
  3125 + <name>scrapCode</name>
  3126 + <type>String</type>
  3127 + <format/>
  3128 + </field>
  3129 + <field>
  3130 + <name>makeCodeOne</name>
  3131 + <type>String</type>
  3132 + <format/>
  3133 + </field>
  3134 + <field>
  3135 + <name>makeCodeTwo</name>
  3136 + <type>String</type>
  3137 + <format/>
  3138 + </field>
  3139 + <field>
  3140 + <name>carGride</name>
  3141 + <type>String</type>
  3142 + <format/>
  3143 + </field>
  3144 + <field>
  3145 + <name>emissionsStandard</name>
  3146 + <type>String</type>
  3147 + <format/>
  3148 + </field>
  3149 + <field>
  3150 + <name>engineCodeOne</name>
  3151 + <type>String</type>
  3152 + <format/>
  3153 + </field>
  3154 + <field>
  3155 + <name>engineCodeTwo</name>
  3156 + <type>String</type>
  3157 + <format/>
  3158 + </field>
  3159 + <field>
  3160 + <name>carNumberOne</name>
  3161 + <type>String</type>
  3162 + <format/>
  3163 + </field>
  3164 + <field>
  3165 + <name>carNumberTwo</name>
  3166 + <type>String</type>
  3167 + <format/>
  3168 + </field>
  3169 + <field>
  3170 + <name>openDate</name>
  3171 + <type>String</type>
  3172 + <format/>
  3173 + </field>
  3174 + <field>
  3175 + <name>closeDate</name>
  3176 + <type>String</type>
  3177 + <format/>
  3178 + </field>
  3179 + <field>
  3180 + <name>hvacCar</name>
  3181 + <type>Integer</type>
  3182 + <format/>
  3183 + </field>
  3184 + <field>
  3185 + <name>ticketType</name>
  3186 + <type>Integer</type>
  3187 + <format/>
  3188 + </field>
  3189 + <field>
  3190 + <name>ledScreen</name>
  3191 + <type>Integer</type>
  3192 + <format/>
  3193 + </field>
  3194 + <field>
  3195 + <name>tvVideoType</name>
  3196 + <type>Integer</type>
  3197 + <format/>
  3198 + </field>
  3199 + <field>
  3200 + <name>carType</name>
  3201 + <type>String</type>
  3202 + <format/>
  3203 + </field>
  3204 + <field>
  3205 + <name>vehicleStats</name>
  3206 + <type>String</type>
  3207 + <format/>
  3208 + </field>
  3209 + <field>
  3210 + <name>operatorsState</name>
  3211 + <type>String</type>
  3212 + <format/>
  3213 + </field>
  3214 + <field>
  3215 + <name>descriptions</name>
  3216 + <type>String</type>
  3217 + <format/>
  3218 + </field>
  3219 + <field>
  3220 + <name>videoCode</name>
  3221 + <type>String</type>
  3222 + <format/>
  3223 + </field>
  3224 + <field>
  3225 + <name>businessCode</name>
  3226 + <type>String</type>
  3227 + <format/>
  3228 + </field>
  3229 + <field>
  3230 + <name>carCode</name>
  3231 + <type>String</type>
  3232 + <format/>
  3233 + </field>
  3234 + <field>
  3235 + <name>error_count</name>
  3236 + <type>Integer</type>
  3237 + <format/>
  3238 + </field>
  3239 + <field>
  3240 + <name>error_desc</name>
  3241 + <type>String</type>
  3242 + <format/>
  3243 + </field>
  3244 + <field>
  3245 + <name>error_column1</name>
  3246 + <type>String</type>
  3247 + <format/>
  3248 + </field>
  3249 + <field>
  3250 + <name>error_column2</name>
  3251 + <type>String</type>
  3252 + <format/>
  3253 + </field>
  3254 + </fields>
  3255 + <custom>
  3256 + <header_font_name>arial</header_font_name>
  3257 + <header_font_size>10</header_font_size>
  3258 + <header_font_bold>N</header_font_bold>
  3259 + <header_font_italic>N</header_font_italic>
  3260 + <header_font_underline>no</header_font_underline>
  3261 + <header_font_orientation>horizontal</header_font_orientation>
  3262 + <header_font_color>black</header_font_color>
  3263 + <header_background_color>none</header_background_color>
  3264 + <header_row_height>255</header_row_height>
  3265 + <header_alignment>left</header_alignment>
  3266 + <header_image/>
  3267 + <row_font_name>arial</row_font_name>
  3268 + <row_font_size>10</row_font_size>
  3269 + <row_font_color>black</row_font_color>
  3270 + <row_background_color>none</row_background_color>
  3271 + </custom>
  3272 + <cluster_schema/>
  3273 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  3274 + <xloc>637</xloc>
  3275 + <yloc>320</yloc>
  3276 + <draw>Y</draw>
  3277 + </GUI>
  3278 + </step>
  3279 +
  3280 + <step_error_handling>
  3281 + <error>
  3282 + <source_step>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars</source_step>
  3283 + <target_step>&#x9519;&#x8bef;&#x8f93;&#x51fa;</target_step>
  3284 + <is_enabled>Y</is_enabled>
  3285 + <nr_valuename>error_count</nr_valuename>
  3286 + <descriptions_valuename>error_desc</descriptions_valuename>
  3287 + <fields_valuename>error_column1</fields_valuename>
  3288 + <codes_valuename>error_column2</codes_valuename>
  3289 + <max_errors/>
  3290 + <max_pct_errors/>
  3291 + <min_pct_rows/>
  3292 + </error>
  3293 + </step_error_handling>
  3294 + <slave-step-copy-partition-distribution>
  3295 +</slave-step-copy-partition-distribution>
  3296 + <slave_transformation>N</slave_transformation>
  3297 +
  3298 +</transformation>
  3299 +>>>>>>> 502f6f7ff3ff76f0f6b6dbdac8a353604a7d5626