Commit 1cd873841de7dcc920fbcff2ed5e504ec909f14b

Authored by 徐烜
1 parent 85d31a80

Update

src/main/java/com/bsth/entity/schedule/SchedulePlan.java
... ... @@ -2,6 +2,7 @@ package com.bsth.entity.schedule;
2 2  
3 3 import com.bsth.entity.Line;
4 4 import com.fasterxml.jackson.annotation.JsonIgnore;
  5 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5 6 import org.apache.commons.lang3.BooleanUtils;
6 7  
7 8 import javax.persistence.*;
... ... @@ -21,6 +22,7 @@ import java.util.List;
21 22 @NamedAttributeNode("xl"),
22 23 })
23 24 })
  25 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
24 26 public class SchedulePlan extends BEntity {
25 27  
26 28 /** 主键Id */
... ...
src/main/java/com/bsth/entity/schedule/SchedulePlanInfo.java
1 1 package com.bsth.entity.schedule;
2 2  
3 3 import com.bsth.entity.Line;
4   -import com.bsth.entity.sys.SysUser;
5 4 import com.bsth.service.schedule.rules.rerun.RerunRule_input;
6 5 import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output;
7 6 import org.apache.commons.lang3.StringUtils;
... ... @@ -20,7 +19,7 @@ import java.util.List;
20 19 */
21 20 @Entity
22 21 @Table(name = "bsth_c_s_sp_info")
23   -public class SchedulePlanInfo {
  22 +public class SchedulePlanInfo extends BEntity {
24 23  
25 24 /** 主键Id */
26 25 @Id
... ... @@ -138,20 +137,6 @@ public class SchedulePlanInfo {
138 137 private String remark;
139 138  
140 139  
141   - /** 创建人 */
142   - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
143   - private SysUser createBy;
144   - /** 修改人 */
145   - @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
146   - private SysUser updateBy;
147   - /** 创建日期 */
148   - @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
149   - private Date createDate;
150   - /** 修改日期 */
151   - @Column(name = "update_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
152   - private Date updateDate;
153   -
154   -
155 140 // @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
156 141 // @JoinTable(
157 142 // name = "bsth_c_s_sp_r_info",
... ... @@ -468,10 +453,10 @@ public class SchedulePlanInfo {
468 453 if (this.ttInfoName != null) ps.setString(34, this.ttInfoName); else ps.setNull(34, Types.VARCHAR);
469 454 if (this.remark != null) ps.setString(35, this.remark); else ps.setNull(35, Types.VARCHAR);
470 455 if (this.schedulePlan != null) ps.setLong(36, this.schedulePlan.getId()); else ps.setNull(36, Types.BIGINT);
471   - if (this.createBy != null) ps.setInt(37, this.createBy.getId()); else ps.setNull(37, Types.INTEGER);
472   - if (this.updateBy != null) ps.setInt(38, this.updateBy.getId()); else ps.setNull(38, Types.INTEGER);
473   - if (this.createDate != null) ps.setTimestamp(39, new java.sql.Timestamp(this.createDate.getTime())); else ps.setNull(39, Types.TIMESTAMP);
474   - if (this.updateDate != null) ps.setTimestamp(40, new java.sql.Timestamp(this.updateDate.getTime())); else ps.setNull(40, Types.TIMESTAMP);
  456 + if (this.getCreateBy() != null) ps.setInt(37, this.getCreateBy().getId()); else ps.setNull(37, Types.INTEGER);
  457 + if (this.getUpdateBy() != null) ps.setInt(38, this.getUpdateBy().getId()); else ps.setNull(38, Types.INTEGER);
  458 + if (this.getCreateDate() != null) ps.setTimestamp(39, new java.sql.Timestamp(this.getCreateDate().getTime())); else ps.setNull(39, Types.TIMESTAMP);
  459 + if (this.getUpdateDate() != null) ps.setTimestamp(40, new java.sql.Timestamp(this.getUpdateDate().getTime())); else ps.setNull(40, Types.TIMESTAMP);
475 460 }
476 461  
477 462 public Long getId() {
... ... @@ -762,38 +747,6 @@ public class SchedulePlanInfo {
762 747 this.remark = remark;
763 748 }
764 749  
765   - public SysUser getCreateBy() {
766   - return createBy;
767   - }
768   -
769   - public void setCreateBy(SysUser createBy) {
770   - this.createBy = createBy;
771   - }
772   -
773   - public SysUser getUpdateBy() {
774   - return updateBy;
775   - }
776   -
777   - public void setUpdateBy(SysUser updateBy) {
778   - this.updateBy = updateBy;
779   - }
780   -
781   - public Date getCreateDate() {
782   - return createDate;
783   - }
784   -
785   - public void setCreateDate(Date createDate) {
786   - this.createDate = createDate;
787   - }
788   -
789   - public Date getUpdateDate() {
790   - return updateDate;
791   - }
792   -
793   - public void setUpdateDate(Date updateDate) {
794   - this.updateDate = updateDate;
795   - }
796   -
797 750 public SchedulePlan getSchedulePlan() {
798 751 return schedulePlan;
799 752 }
... ...
src/main/java/com/bsth/service/schedule/SchedulePlanInfoService.java
... ... @@ -164,7 +164,7 @@ public interface SchedulePlanInfoService extends BService<SchedulePlanInfo, Long
164 164 this.spyGhs.addAll(Arrays.asList(spyGhs_temp.split(",")));
165 165 }
166 166  
167   - this.updateDate = new Date(rs.getDate("updateDate").getTime());
  167 + this.updateDate = new Date(rs.getTimestamp("updateDate").getTime());
168 168 this.updateByName = rs.getString("updateUserName");
169 169 this.ttInfoName = rs.getString("ttInfoName");
170 170  
... ...
src/main/resources/datatools/ktrs/ttinfodetailDataOutputMetaData.ktr
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<transformation>
3   - <info>
4   - <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x51fa;&#x5143;&#x6570;&#x636e;</name>
5   - <description/>
6   - <extended_description/>
7   - <trans_version/>
8   - <trans_type>Normal</trans_type>
9   - <trans_status>0</trans_status>
10   - <directory>&#x2f;</directory>
11   - <parameters>
12   - <parameter>
13   - <name>filepath</name>
14   - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;ttinfodetail_test.xls</default_value>
15   - <description>&#x65f6;&#x523b;&#x8868;excel&#x5bfc;&#x51fa;&#x6587;&#x4ef6;&#x8def;&#x5f84;&#x540d;</description>
16   - </parameter>
17   - <parameter>
18   - <name>injectktrfile</name>
19   - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataOutput.ktr</default_value>
20   - <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>
21   - </parameter>
22   - <parameter>
23   - <name>ttinfoid</name>
24   - <default_value>56</default_value>
25   - <description>&#x65f6;&#x523b;&#x8868;id</description>
26   - </parameter>
27   - </parameters>
28   - <log>
29   -<trans-log-table><connection/>
30   -<schema/>
31   -<table/>
32   -<size_limit_lines/>
33   -<interval/>
34   -<timeout_days/>
35   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
36   -<perf-log-table><connection/>
37   -<schema/>
38   -<table/>
39   -<interval/>
40   -<timeout_days/>
41   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
42   -<channel-log-table><connection/>
43   -<schema/>
44   -<table/>
45   -<timeout_days/>
46   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
47   -<step-log-table><connection/>
48   -<schema/>
49   -<table/>
50   -<timeout_days/>
51   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
52   -<metrics-log-table><connection/>
53   -<schema/>
54   -<table/>
55   -<timeout_days/>
56   -<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
57   - </log>
58   - <maxdate>
59   - <connection/>
60   - <table/>
61   - <field/>
62   - <offset>0.0</offset>
63   - <maxdiff>0.0</maxdiff>
64   - </maxdate>
65   - <size_rowset>10000</size_rowset>
66   - <sleep_time_empty>50</sleep_time_empty>
67   - <sleep_time_full>50</sleep_time_full>
68   - <unique_connections>N</unique_connections>
69   - <feedback_shown>Y</feedback_shown>
70   - <feedback_size>50000</feedback_size>
71   - <using_thread_priorities>Y</using_thread_priorities>
72   - <shared_objects_file/>
73   - <capture_step_performance>N</capture_step_performance>
74   - <step_performance_capturing_delay>1000</step_performance_capturing_delay>
75   - <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
76   - <dependencies>
77   - </dependencies>
78   - <partitionschemas>
79   - </partitionschemas>
80   - <slaveservers>
81   - </slaveservers>
82   - <clusterschemas>
83   - </clusterschemas>
84   - <created_user>-</created_user>
85   - <created_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</created_date>
86   - <modified_user>-</modified_user>
87   - <modified_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</modified_date>
88   - <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
89   - <is_key_private>N</is_key_private>
90   - </info>
91   - <notepads>
92   - <notepad>
93   - <note>&#x8fd9;&#x91cc;&#x6709;&#x4e9b;&#x95ee;&#x9898;&#xa;&#x5728;window2012&#x7684;&#x73af;&#x5883;&#x4e0b;&#xff0c;&#xa;MySql&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x4e2d;&#x5982;&#x679c;&#x8fd4;&#x56de;&#x4e2d;&#x6587;&#x5185;&#x5bb9;&#x7684;&#x5b57;&#x6bb5;&#xff0c;&#x8fd9;&#x4e2a;&#x5185;&#x5bb9;&#x4e71;&#x7801;&#xa;&#x89e3;&#x51b3;&#x529e;&#x6cd5;&#xff0c;&#x5c31;&#x662f;&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x5168;&#x90e8;&#x7f13;&#x5b58;&#xff0c;&#x5c31;&#x4e0d;&#x4e71;&#x7801;&#xa;linux&#x73af;&#x5883;&#x4e0b;&#x6ca1;&#x95ee;&#x9898;</note>
94   - <xloc>165</xloc>
95   - <yloc>402</yloc>
96   - <width>333</width>
97   - <heigth>90</heigth>
98   - <fontname>YaHei Consolas Hybrid</fontname>
99   - <fontsize>12</fontsize>
100   - <fontbold>N</fontbold>
101   - <fontitalic>N</fontitalic>
102   - <fontcolorred>0</fontcolorred>
103   - <fontcolorgreen>0</fontcolorgreen>
104   - <fontcolorblue>0</fontcolorblue>
105   - <backgroundcolorred>255</backgroundcolorred>
106   - <backgroundcolorgreen>205</backgroundcolorgreen>
107   - <backgroundcolorblue>112</backgroundcolorblue>
108   - <bordercolorred>100</bordercolorred>
109   - <bordercolorgreen>100</bordercolorgreen>
110   - <bordercolorblue>100</bordercolorblue>
111   - <drawshadow>Y</drawshadow>
112   - </notepad>
113   - </notepads>
114   - <connection>
115   - <name>bus_control_variable</name>
116   - <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
117   - <type>MYSQL</type>
118   - <access>Native</access>
119   - <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
120   - <port>3306</port>
121   - <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
122   - <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
123   - <servername/>
124   - <data_tablespace/>
125   - <index_tablespace/>
126   - <attributes>
127   - <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
128   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
129   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
130   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
131   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
132   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
133   - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
134   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
135   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
136   - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
137   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
138   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
139   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
140   - </attributes>
141   - </connection>
142   - <connection>
143   - <name>bus_control_&#x516c;&#x53f8;_201</name>
144   - <server>localhost</server>
145   - <type>MYSQL</type>
146   - <access>Native</access>
147   - <database>control</database>
148   - <port>3306</port>
149   - <username>root</username>
150   - <password>Encrypted </password>
151   - <servername/>
152   - <data_tablespace/>
153   - <index_tablespace/>
154   - <attributes>
155   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
156   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
157   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
158   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
159   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
160   - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
161   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
162   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
163   - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
164   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
165   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
166   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
167   - </attributes>
168   - </connection>
169   - <connection>
170   - <name>bus_control_&#x672c;&#x673a;</name>
171   - <server>localhost</server>
172   - <type>MYSQL</type>
173   - <access>Native</access>
174   - <database>control</database>
175   - <port>3306</port>
176   - <username>root</username>
177   - <password>Encrypted </password>
178   - <servername/>
179   - <data_tablespace/>
180   - <index_tablespace/>
181   - <attributes>
182   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
183   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
184   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
185   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
186   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
187   - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
188   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
189   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
190   - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
191   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
192   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
193   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
194   - </attributes>
195   - </connection>
196   - <connection>
197   - <name>xlab_mysql_youle</name>
198   - <server>101.231.124.8</server>
199   - <type>MYSQL</type>
200   - <access>Native</access>
201   - <database>xlab_youle</database>
202   - <port>45687</port>
203   - <username>xlab-youle</username>
204   - <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
205   - <servername/>
206   - <data_tablespace/>
207   - <index_tablespace/>
208   - <attributes>
209   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
210   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
211   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
212   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
213   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
214   - <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
215   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
216   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
217   - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
218   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
219   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
220   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
221   - </attributes>
222   - </connection>
223   - <connection>
224   - <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
225   - <server>localhost</server>
226   - <type>MYSQL</type>
227   - <access>Native</access>
228   - <database>xlab_youle</database>
229   - <port>3306</port>
230   - <username>root</username>
231   - <password>Encrypted </password>
232   - <servername/>
233   - <data_tablespace/>
234   - <index_tablespace/>
235   - <attributes>
236   - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
237   - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
238   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
239   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
240   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
241   - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
242   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
243   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
244   - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
245   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
246   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
247   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
248   - </attributes>
249   - </connection>
250   - <connection>
251   - <name>xlab_youle</name>
252   - <server/>
253   - <type>MYSQL</type>
254   - <access>JNDI</access>
255   - <database>xlab_youle</database>
256   - <port>1521</port>
257   - <username/>
258   - <password>Encrypted </password>
259   - <servername/>
260   - <data_tablespace/>
261   - <index_tablespace/>
262   - <attributes>
263   - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
264   - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
265   - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
266   - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
267   - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
268   - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
269   - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
270   - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
271   - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
272   - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
273   - </attributes>
274   - </connection>
275   - <order>
276   - <hop> <from>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
277   - <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</from><to>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</to><enabled>Y</enabled> </hop>
278   - <hop> <from>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</from><to>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</to><enabled>Y</enabled> </hop>
279   - <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
280   - <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
281   - <hop> <from>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
282   - <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
283   - <hop> <from>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
284   - <hop> <from>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
285   - <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
286   - </order>
287   - <step>
288   - <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>
289   - <type>MetaInject</type>
290   - <description/>
291   - <distribute>Y</distribute>
292   - <custom_distribution/>
293   - <copies>1</copies>
294   - <partitioning>
295   - <method>none</method>
296   - <schema_name/>
297   - </partitioning>
298   - <specification_method>filename</specification_method>
299   - <trans_object_id/>
300   - <trans_name/>
301   - <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>
302   - <directory_path/>
303   - <source_step/>
304   - <source_output_fields> </source_output_fields> <target_file/>
305   - <no_execution>N</no_execution>
306   - <stream_source_step/>
307   - <stream_target_step/>
308   - <mappings> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
309   - <target_attribute_key>TARGET_TYPE</target_attribute_key>
310   - <target_detail>Y</target_detail>
311   - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
312   - <source_field>targettype</source_field>
313   - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
314   - <target_attribute_key>TYPE</target_attribute_key>
315   - <target_detail>Y</target_detail>
316   - <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
317   - <source_field>fieldtype</source_field>
318   - </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
319   - <target_attribute_key>NAME</target_attribute_key>
320   - <target_detail>Y</target_detail>
321   - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
322   - <source_field>valuefieldname</source_field>
323   - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
324   - <target_attribute_key>NAME</target_attribute_key>
325   - <target_detail>Y</target_detail>
326   - <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
327   - <source_field>fieldname</source_field>
328   - </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
329   - <target_attribute_key>TARGET_NAME</target_attribute_key>
330   - <target_detail>Y</target_detail>
331   - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
332   - <source_field>targetfieldname</source_field>
333   - </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
334   - <target_attribute_key>KEY_VALUE</target_attribute_key>
335   - <target_detail>Y</target_detail>
336   - <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
337   - <source_field>keyvalue</source_field>
338   - </mapping> </mappings> <cluster_schema/>
339   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
340   - <xloc>640</xloc>
341   - <yloc>64</yloc>
342   - <draw>Y</draw>
343   - </GUI>
344   - </step>
345   -
346   - <step>
347   - <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
348   - <type>SelectValues</type>
349   - <description/>
350   - <distribute>Y</distribute>
351   - <custom_distribution/>
352   - <copies>1</copies>
353   - <partitioning>
354   - <method>none</method>
355   - <schema_name/>
356   - </partitioning>
357   - <fields> <field> <name>fieldname</name>
358   - <rename/>
359   - <length>-2</length>
360   - <precision>-2</precision>
361   - </field> <field> <name>fieldtype</name>
362   - <rename/>
363   - <length>-2</length>
364   - <precision>-2</precision>
365   - </field> <field> <name>fcno</name>
366   - <rename/>
367   - <length>-2</length>
368   - <precision>-2</precision>
369   - </field> <select_unspecified>N</select_unspecified>
370   - </fields> <cluster_schema/>
371   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
372   - <xloc>533</xloc>
373   - <yloc>325</yloc>
374   - <draw>Y</draw>
375   - </GUI>
376   - </step>
377   -
378   - <step>
379   - <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>
380   - <type>SortRows</type>
381   - <description/>
382   - <distribute>Y</distribute>
383   - <custom_distribution/>
384   - <copies>1</copies>
385   - <partitioning>
386   - <method>none</method>
387   - <schema_name/>
388   - </partitioning>
389   - <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
390   - <prefix>out</prefix>
391   - <sort_size>1000000</sort_size>
392   - <free_memory/>
393   - <compress>N</compress>
394   - <compress_variable/>
395   - <unique_rows>N</unique_rows>
396   - <fields>
397   - <field>
398   - <name>fcno</name>
399   - <ascending>Y</ascending>
400   - <case_sensitive>N</case_sensitive>
401   - <presorted>N</presorted>
402   - </field>
403   - </fields>
404   - <cluster_schema/>
405   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
406   - <xloc>642</xloc>
407   - <yloc>325</yloc>
408   - <draw>Y</draw>
409   - </GUI>
410   - </step>
411   -
412   - <step>
413   - <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</name>
414   - <type>TableInput</type>
415   - <description/>
416   - <distribute>Y</distribute>
417   - <custom_distribution/>
418   - <copies>1</copies>
419   - <partitioning>
420   - <method>none</method>
421   - <schema_name/>
422   - </partitioning>
423   - <connection>bus_control_variable</connection>
424   - <sql>select &#xa;fcno&#xa;, min&#x28;xl_dir&#x29; xl_dir&#xa;,min&#x28;qdz&#x29; qdz&#xa;,min&#x28;zdz&#x29; zdz&#xa;,bc_type &#xa;from bsth_c_s_ttinfo_detail&#xa;where ttinfo &#x3d; &#x24;&#x7b;ttinfoid&#x7d;&#xa;group by fcno,bc_type</sql>
425   - <limit>0</limit>
426   - <lookup/>
427   - <execute_each_row>N</execute_each_row>
428   - <variables_active>Y</variables_active>
429   - <lazy_conversion_active>N</lazy_conversion_active>
430   - <cluster_schema/>
431   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
432   - <xloc>56</xloc>
433   - <yloc>185</yloc>
434   - <draw>Y</draw>
435   - </GUI>
436   - </step>
437   -
438   - <step>
439   - <name>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</name>
440   - <type>DBLookup</type>
441   - <description/>
442   - <distribute>N</distribute>
443   - <custom_distribution/>
444   - <copies>1</copies>
445   - <partitioning>
446   - <method>none</method>
447   - <schema_name/>
448   - </partitioning>
449   - <connection>bus_control_variable</connection>
450   - <cache>Y</cache>
451   - <cache_load_all>Y</cache_load_all>
452   - <cache_size>0</cache_size>
453   - <lookup>
454   - <schema/>
455   - <table>bsth_c_stationroute</table>
456   - <orderby/>
457   - <fail_on_multiple>N</fail_on_multiple>
458   - <eat_row_on_failure>N</eat_row_on_failure>
459   - <key>
460   - <name>zd</name>
461   - <field>station</field>
462   - <condition>&#x3d;</condition>
463   - <name2/>
464   - </key>
465   - <key>
466   - <name>xl_dir</name>
467   - <field>directions</field>
468   - <condition>&#x3d;</condition>
469   - <name2/>
470   - </key>
471   - <value>
472   - <name>station_name</name>
473   - <rename>zdname</rename>
474   - <default/>
475   - <type>String</type>
476   - </value>
477   - </lookup>
478   - <cluster_schema/>
479   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
480   - <xloc>410</xloc>
481   - <yloc>191</yloc>
482   - <draw>Y</draw>
483   - </GUI>
484   - </step>
485   -
486   - <step>
487   - <name>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</name>
488   - <type>RowGenerator</type>
489   - <description/>
490   - <distribute>Y</distribute>
491   - <custom_distribution/>
492   - <copies>1</copies>
493   - <partitioning>
494   - <method>none</method>
495   - <schema_name/>
496   - </partitioning>
497   - <fields>
498   - <field>
499   - <name>fieldname</name>
500   - <type>String</type>
501   - <format/>
502   - <currency/>
503   - <decimal/>
504   - <group/>
505   - <nullif>&#x8def;&#x724c;</nullif>
506   - <length>-1</length>
507   - <precision>-1</precision>
508   - <set_empty_string>N</set_empty_string>
509   - </field>
510   - <field>
511   - <name>fieldtype</name>
512   - <type>String</type>
513   - <format/>
514   - <currency/>
515   - <decimal/>
516   - <group/>
517   - <nullif>String</nullif>
518   - <length>-1</length>
519   - <precision>-1</precision>
520   - <set_empty_string>N</set_empty_string>
521   - </field>
522   - <field>
523   - <name>fcno</name>
524   - <type>Integer</type>
525   - <format/>
526   - <currency/>
527   - <decimal/>
528   - <group/>
529   - <nullif>0</nullif>
530   - <length>-1</length>
531   - <precision>-1</precision>
532   - <set_empty_string>N</set_empty_string>
533   - </field>
534   - </fields>
535   - <limit>1</limit>
536   - <never_ending>N</never_ending>
537   - <interval_in_ms>5000</interval_in_ms>
538   - <row_time_field>now</row_time_field>
539   - <last_time_field>FiveSecondsAgo</last_time_field>
540   - <cluster_schema/>
541   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
542   - <xloc>530</xloc>
543   - <yloc>194</yloc>
544   - <draw>Y</draw>
545   - </GUI>
546   - </step>
547   -
548   - <step>
549   - <name>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</name>
550   - <type>ScriptValueMod</type>
551   - <description/>
552   - <distribute>Y</distribute>
553   - <custom_distribution/>
554   - <copies>1</copies>
555   - <partitioning>
556   - <method>none</method>
557   - <schema_name/>
558   - </partitioning>
559   - <compatible>N</compatible>
560   - <optimizationLevel>9</optimizationLevel>
561   - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
562   - <jsScript_name>Script 1</jsScript_name>
563   - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var fieldname&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x540d;&#xa;var fieldtype&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x7c7b;&#x578b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;fieldtype &#x3d; &#x27;String&#x27;&#x3b;&#xa;</jsScript_script>
564   - </jsScript> </jsScripts> <fields> <field> <name>fieldname</name>
565   - <rename>fieldname</rename>
566   - <type>String</type>
567   - <length>-1</length>
568   - <precision>-1</precision>
569   - <replace>N</replace>
570   - </field> <field> <name>fieldtype</name>
571   - <rename>fieldtype</rename>
572   - <type>String</type>
573   - <length>-1</length>
574   - <precision>-1</precision>
575   - <replace>N</replace>
576   - </field> </fields> <cluster_schema/>
577   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
578   - <xloc>410</xloc>
579   - <yloc>326</yloc>
580   - <draw>Y</draw>
581   - </GUI>
582   - </step>
583   -
584   - <step>
585   - <name>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</name>
586   - <type>ScriptValueMod</type>
587   - <description/>
588   - <distribute>Y</distribute>
589   - <custom_distribution/>
590   - <copies>1</copies>
591   - <partitioning>
592   - <method>none</method>
593   - <schema_name/>
594   - </partitioning>
595   - <compatible>N</compatible>
596   - <optimizationLevel>9</optimizationLevel>
597   - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
598   - <jsScript_name>Script 1</jsScript_name>
599   - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var targetfieldname&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x5b57;&#x6bb5;&#x540d;&#xa;var targettype&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x7c7b;&#x578b;&#xa;var valuefieldname&#x3b; &#x2f;&#x2f; &#x503c;&#x5b57;&#x6bb5;&#x540d;&#xa;var keyvalue&#x3b; &#x2f;&#x2f; &#x5173;&#x952e;&#x5b57;&#x503c;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;targettype &#x3d; &#x27;String&#x27;&#x3b;&#xa;valuefieldname &#x3d; &#x27;fcsj&#x27;&#x3b;&#xa;keyvalue &#x3d; fcno&#x3b;&#xa;</jsScript_script>
600   - </jsScript> </jsScripts> <fields> <field> <name>targetfieldname</name>
601   - <rename>targetfieldname</rename>
602   - <type>String</type>
603   - <length>-1</length>
604   - <precision>-1</precision>
605   - <replace>N</replace>
606   - </field> <field> <name>targettype</name>
607   - <rename>targettype</rename>
608   - <type>String</type>
609   - <length>-1</length>
610   - <precision>-1</precision>
611   - <replace>N</replace>
612   - </field> <field> <name>valuefieldname</name>
613   - <rename>valuefieldname</rename>
614   - <type>String</type>
615   - <length>-1</length>
616   - <precision>-1</precision>
617   - <replace>N</replace>
618   - </field> <field> <name>keyvalue</name>
619   - <rename>keyvalue</rename>
620   - <type>String</type>
621   - <length>-1</length>
622   - <precision>-1</precision>
623   - <replace>N</replace>
624   - </field> </fields> <cluster_schema/>
625   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
626   - <xloc>410</xloc>
627   - <yloc>64</yloc>
628   - <draw>Y</draw>
629   - </GUI>
630   - </step>
631   -
632   - <step>
633   - <name>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</name>
634   - <type>ScriptValueMod</type>
635   - <description/>
636   - <distribute>Y</distribute>
637   - <custom_distribution/>
638   - <copies>1</copies>
639   - <partitioning>
640   - <method>none</method>
641   - <schema_name/>
642   - </partitioning>
643   - <compatible>N</compatible>
644   - <optimizationLevel>9</optimizationLevel>
645   - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
646   - <jsScript_name>Script 1</jsScript_name>
647   - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var zd&#x3b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; zd &#x3d; zdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d;&#xa;</jsScript_script>
648   - </jsScript> </jsScripts> <fields> <field> <name>zd</name>
649   - <rename>zd</rename>
650   - <type>String</type>
651   - <length>-1</length>
652   - <precision>-1</precision>
653   - <replace>N</replace>
654   - </field> </fields> <cluster_schema/>
655   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
656   - <xloc>300</xloc>
657   - <yloc>190</yloc>
658   - <draw>Y</draw>
659   - </GUI>
660   - </step>
661   -
662   - <step>
663   - <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</name>
664   - <type>FilterRows</type>
665   - <description/>
666   - <distribute>Y</distribute>
667   - <custom_distribution/>
668   - <copies>1</copies>
669   - <partitioning>
670   - <method>none</method>
671   - <schema_name/>
672   - </partitioning>
673   -<send_true_to/>
674   -<send_false_to/>
675   - <compare>
676   -<condition>
677   - <negated>N</negated>
678   - <leftvalue>bc_type</leftvalue>
679   - <function>IS NOT NULL</function>
680   - <rightvalue/>
681   - </condition>
682   - </compare>
683   - <cluster_schema/>
684   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
685   - <xloc>182</xloc>
686   - <yloc>189</yloc>
687   - <draw>Y</draw>
688   - </GUI>
689   - </step>
690   -
691   - <step_error_handling>
692   - </step_error_handling>
693   - <slave-step-copy-partition-distribution>
694   -</slave-step-copy-partition-distribution>
695   - <slave_transformation>N</slave_transformation>
696   -
697   -</transformation>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x51fa;&#x5143;&#x6570;&#x636e;</name>
  5 + <description/>
  6 + <extended_description/>
  7 + <trans_version/>
  8 + <trans_type>Normal</trans_type>
  9 + <trans_status>0</trans_status>
  10 + <directory>&#x2f;</directory>
  11 + <parameters>
  12 + <parameter>
  13 + <name>filepath</name>
  14 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;ttinfodetail_test.xls</default_value>
  15 + <description>&#x65f6;&#x523b;&#x8868;excel&#x5bfc;&#x51fa;&#x6587;&#x4ef6;&#x8def;&#x5f84;&#x540d;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>injectktrfile</name>
  19 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataOutput.ktr</default_value>
  20 + <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>
  21 + </parameter>
  22 + <parameter>
  23 + <name>ttinfoid</name>
  24 + <default_value>56</default_value>
  25 + <description>&#x65f6;&#x523b;&#x8868;id</description>
  26 + </parameter>
  27 + </parameters>
  28 + <log>
  29 +<trans-log-table><connection/>
  30 +<schema/>
  31 +<table/>
  32 +<size_limit_lines/>
  33 +<interval/>
  34 +<timeout_days/>
  35 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
  36 +<perf-log-table><connection/>
  37 +<schema/>
  38 +<table/>
  39 +<interval/>
  40 +<timeout_days/>
  41 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
  42 +<channel-log-table><connection/>
  43 +<schema/>
  44 +<table/>
  45 +<timeout_days/>
  46 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
  47 +<step-log-table><connection/>
  48 +<schema/>
  49 +<table/>
  50 +<timeout_days/>
  51 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
  52 +<metrics-log-table><connection/>
  53 +<schema/>
  54 +<table/>
  55 +<timeout_days/>
  56 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
  57 + </log>
  58 + <maxdate>
  59 + <connection/>
  60 + <table/>
  61 + <field/>
  62 + <offset>0.0</offset>
  63 + <maxdiff>0.0</maxdiff>
  64 + </maxdate>
  65 + <size_rowset>10000</size_rowset>
  66 + <sleep_time_empty>50</sleep_time_empty>
  67 + <sleep_time_full>50</sleep_time_full>
  68 + <unique_connections>N</unique_connections>
  69 + <feedback_shown>Y</feedback_shown>
  70 + <feedback_size>50000</feedback_size>
  71 + <using_thread_priorities>Y</using_thread_priorities>
  72 + <shared_objects_file/>
  73 + <capture_step_performance>N</capture_step_performance>
  74 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  75 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  76 + <dependencies>
  77 + </dependencies>
  78 + <partitionschemas>
  79 + </partitionschemas>
  80 + <slaveservers>
  81 + </slaveservers>
  82 + <clusterschemas>
  83 + </clusterschemas>
  84 + <created_user>-</created_user>
  85 + <created_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</created_date>
  86 + <modified_user>-</modified_user>
  87 + <modified_date>2016&#x2f;11&#x2f;15 15&#x3a;02&#x3a;41.624</modified_date>
  88 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  89 + <is_key_private>N</is_key_private>
  90 + </info>
  91 + <notepads>
  92 + <notepad>
  93 + <note>&#x8fd9;&#x91cc;&#x6709;&#x4e9b;&#x95ee;&#x9898;&#xa;&#x5728;window2012&#x7684;&#x73af;&#x5883;&#x4e0b;&#xff0c;&#xa;MySql&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x4e2d;&#x5982;&#x679c;&#x8fd4;&#x56de;&#x4e2d;&#x6587;&#x5185;&#x5bb9;&#x7684;&#x5b57;&#x6bb5;&#xff0c;&#x8fd9;&#x4e2a;&#x5185;&#x5bb9;&#x4e71;&#x7801;&#xa;&#x89e3;&#x51b3;&#x529e;&#x6cd5;&#xff0c;&#x5c31;&#x662f;&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x5168;&#x90e8;&#x7f13;&#x5b58;&#xff0c;&#x5c31;&#x4e0d;&#x4e71;&#x7801;&#xa;linux&#x73af;&#x5883;&#x4e0b;&#x6ca1;&#x95ee;&#x9898;</note>
  94 + <xloc>165</xloc>
  95 + <yloc>402</yloc>
  96 + <width>333</width>
  97 + <heigth>90</heigth>
  98 + <fontname>YaHei Consolas Hybrid</fontname>
  99 + <fontsize>12</fontsize>
  100 + <fontbold>N</fontbold>
  101 + <fontitalic>N</fontitalic>
  102 + <fontcolorred>0</fontcolorred>
  103 + <fontcolorgreen>0</fontcolorgreen>
  104 + <fontcolorblue>0</fontcolorblue>
  105 + <backgroundcolorred>255</backgroundcolorred>
  106 + <backgroundcolorgreen>205</backgroundcolorgreen>
  107 + <backgroundcolorblue>112</backgroundcolorblue>
  108 + <bordercolorred>100</bordercolorred>
  109 + <bordercolorgreen>100</bordercolorgreen>
  110 + <bordercolorblue>100</bordercolorblue>
  111 + <drawshadow>Y</drawshadow>
  112 + </notepad>
  113 + </notepads>
  114 + <connection>
  115 + <name>192.168.168.1_jwgl_dw</name>
  116 + <server>192.168.168.1</server>
  117 + <type>ORACLE</type>
  118 + <access>Native</access>
  119 + <database>orcl</database>
  120 + <port>1521</port>
  121 + <username>jwgl_dw</username>
  122 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  123 + <servername/>
  124 + <data_tablespace/>
  125 + <index_tablespace/>
  126 + <attributes>
  127 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  128 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  129 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  130 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  131 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  132 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  133 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  134 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  135 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  136 + </attributes>
  137 + </connection>
  138 + <connection>
  139 + <name>bus_control_variable</name>
  140 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  141 + <type>MYSQL</type>
  142 + <access>Native</access>
  143 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  144 + <port>3306</port>
  145 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  146 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  147 + <servername/>
  148 + <data_tablespace/>
  149 + <index_tablespace/>
  150 + <attributes>
  151 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  152 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  153 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  154 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  155 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  156 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  157 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  158 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  159 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  160 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  161 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  162 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  163 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  164 + </attributes>
  165 + </connection>
  166 + <connection>
  167 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  168 + <server>localhost</server>
  169 + <type>MYSQL</type>
  170 + <access>Native</access>
  171 + <database>control</database>
  172 + <port>3306</port>
  173 + <username>root</username>
  174 + <password>Encrypted </password>
  175 + <servername/>
  176 + <data_tablespace/>
  177 + <index_tablespace/>
  178 + <attributes>
  179 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  180 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  181 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  182 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  183 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  184 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  185 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  186 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  187 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  188 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  189 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  190 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  191 + </attributes>
  192 + </connection>
  193 + <connection>
  194 + <name>bus_control_&#x672c;&#x673a;</name>
  195 + <server>localhost</server>
  196 + <type>MYSQL</type>
  197 + <access>Native</access>
  198 + <database>control</database>
  199 + <port>3306</port>
  200 + <username>root</username>
  201 + <password>Encrypted </password>
  202 + <servername/>
  203 + <data_tablespace/>
  204 + <index_tablespace/>
  205 + <attributes>
  206 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  207 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  208 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  209 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  210 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  211 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  212 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  213 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  214 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  215 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  216 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  217 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  218 + </attributes>
  219 + </connection>
  220 + <connection>
  221 + <name>xlab_mysql_youle</name>
  222 + <server>101.231.124.8</server>
  223 + <type>MYSQL</type>
  224 + <access>Native</access>
  225 + <database>xlab_youle</database>
  226 + <port>45687</port>
  227 + <username>xlab-youle</username>
  228 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  229 + <servername/>
  230 + <data_tablespace/>
  231 + <index_tablespace/>
  232 + <attributes>
  233 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  234 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  235 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  236 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  237 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  238 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  239 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  240 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  241 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  242 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  243 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  244 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  245 + </attributes>
  246 + </connection>
  247 + <connection>
  248 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  249 + <server>localhost</server>
  250 + <type>MYSQL</type>
  251 + <access>Native</access>
  252 + <database>xlab_youle</database>
  253 + <port>3306</port>
  254 + <username>root</username>
  255 + <password>Encrypted </password>
  256 + <servername/>
  257 + <data_tablespace/>
  258 + <index_tablespace/>
  259 + <attributes>
  260 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  261 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  262 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  263 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  264 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  265 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  266 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  267 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  268 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  269 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  270 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  271 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  272 + </attributes>
  273 + </connection>
  274 + <connection>
  275 + <name>xlab_youle</name>
  276 + <server/>
  277 + <type>MYSQL</type>
  278 + <access>JNDI</access>
  279 + <database>xlab_youle</database>
  280 + <port>1521</port>
  281 + <username/>
  282 + <password>Encrypted </password>
  283 + <servername/>
  284 + <data_tablespace/>
  285 + <index_tablespace/>
  286 + <attributes>
  287 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  288 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  289 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  290 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  291 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  292 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  293 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  294 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  295 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  296 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  297 + </attributes>
  298 + </connection>
  299 + <order>
  300 + <hop> <from>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  301 + <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</from><to>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</to><enabled>Y</enabled> </hop>
  302 + <hop> <from>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</from><to>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</to><enabled>Y</enabled> </hop>
  303 + <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  304 + <hop> <from>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</from><to>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  305 + <hop> <from>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  306 + <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  307 + <hop> <from>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  308 + <hop> <from>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  309 + <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  310 + </order>
  311 + <step>
  312 + <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>
  313 + <type>MetaInject</type>
  314 + <description/>
  315 + <distribute>Y</distribute>
  316 + <custom_distribution/>
  317 + <copies>1</copies>
  318 + <partitioning>
  319 + <method>none</method>
  320 + <schema_name/>
  321 + </partitioning>
  322 + <specification_method>filename</specification_method>
  323 + <trans_object_id/>
  324 + <trans_name/>
  325 + <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>
  326 + <directory_path/>
  327 + <source_step/>
  328 + <source_output_fields> </source_output_fields> <target_file/>
  329 + <no_execution>N</no_execution>
  330 + <stream_source_step/>
  331 + <stream_target_step/>
  332 + <mappings> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  333 + <target_attribute_key>TARGET_TYPE</target_attribute_key>
  334 + <target_detail>Y</target_detail>
  335 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  336 + <source_field>targettype</source_field>
  337 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
  338 + <target_attribute_key>TYPE</target_attribute_key>
  339 + <target_detail>Y</target_detail>
  340 + <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
  341 + <source_field>fieldtype</source_field>
  342 + </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  343 + <target_attribute_key>NAME</target_attribute_key>
  344 + <target_detail>Y</target_detail>
  345 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  346 + <source_field>valuefieldname</source_field>
  347 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x51fa;</target_step_name>
  348 + <target_attribute_key>NAME</target_attribute_key>
  349 + <target_detail>Y</target_detail>
  350 + <source_step>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</source_step>
  351 + <source_field>fieldname</source_field>
  352 + </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  353 + <target_attribute_key>TARGET_NAME</target_attribute_key>
  354 + <target_detail>Y</target_detail>
  355 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  356 + <source_field>targetfieldname</source_field>
  357 + </mapping> <mapping> <target_step_name>&#x5217;&#x8f6c;&#x884c;</target_step_name>
  358 + <target_attribute_key>KEY_VALUE</target_attribute_key>
  359 + <target_detail>Y</target_detail>
  360 + <source_step>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</source_step>
  361 + <source_field>keyvalue</source_field>
  362 + </mapping> </mappings> <cluster_schema/>
  363 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  364 + <xloc>640</xloc>
  365 + <yloc>64</yloc>
  366 + <draw>Y</draw>
  367 + </GUI>
  368 + </step>
  369 +
  370 + <step>
  371 + <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
  372 + <type>SelectValues</type>
  373 + <description/>
  374 + <distribute>Y</distribute>
  375 + <custom_distribution/>
  376 + <copies>1</copies>
  377 + <partitioning>
  378 + <method>none</method>
  379 + <schema_name/>
  380 + </partitioning>
  381 + <fields> <field> <name>fieldname</name>
  382 + <rename/>
  383 + <length>-2</length>
  384 + <precision>-2</precision>
  385 + </field> <field> <name>fieldtype</name>
  386 + <rename/>
  387 + <length>-2</length>
  388 + <precision>-2</precision>
  389 + </field> <field> <name>fcno</name>
  390 + <rename/>
  391 + <length>-2</length>
  392 + <precision>-2</precision>
  393 + </field> <select_unspecified>N</select_unspecified>
  394 + </fields> <cluster_schema/>
  395 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  396 + <xloc>533</xloc>
  397 + <yloc>325</yloc>
  398 + <draw>Y</draw>
  399 + </GUI>
  400 + </step>
  401 +
  402 + <step>
  403 + <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>
  404 + <type>SortRows</type>
  405 + <description/>
  406 + <distribute>Y</distribute>
  407 + <custom_distribution/>
  408 + <copies>1</copies>
  409 + <partitioning>
  410 + <method>none</method>
  411 + <schema_name/>
  412 + </partitioning>
  413 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  414 + <prefix>out</prefix>
  415 + <sort_size>1000000</sort_size>
  416 + <free_memory/>
  417 + <compress>N</compress>
  418 + <compress_variable/>
  419 + <unique_rows>N</unique_rows>
  420 + <fields>
  421 + <field>
  422 + <name>fcno</name>
  423 + <ascending>Y</ascending>
  424 + <case_sensitive>N</case_sensitive>
  425 + <presorted>N</presorted>
  426 + </field>
  427 + </fields>
  428 + <cluster_schema/>
  429 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  430 + <xloc>642</xloc>
  431 + <yloc>325</yloc>
  432 + <draw>Y</draw>
  433 + </GUI>
  434 + </step>
  435 +
  436 + <step>
  437 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5206;&#x7ec4;&#x6570;&#x636e;</name>
  438 + <type>TableInput</type>
  439 + <description/>
  440 + <distribute>Y</distribute>
  441 + <custom_distribution/>
  442 + <copies>1</copies>
  443 + <partitioning>
  444 + <method>none</method>
  445 + <schema_name/>
  446 + </partitioning>
  447 + <connection>bus_control_variable</connection>
  448 + <sql>select &#xa;fcno&#xa;, min&#x28;xl_dir&#x29; xl_dir&#xa;,min&#x28;qdz&#x29; qdz&#xa;,min&#x28;zdz&#x29; zdz&#xa;,bc_type &#xa;from bsth_c_s_ttinfo_detail&#xa;where ttinfo &#x3d; &#x24;&#x7b;ttinfoid&#x7d;&#xa;group by fcno,bc_type</sql>
  449 + <limit>0</limit>
  450 + <lookup/>
  451 + <execute_each_row>N</execute_each_row>
  452 + <variables_active>Y</variables_active>
  453 + <lazy_conversion_active>N</lazy_conversion_active>
  454 + <cluster_schema/>
  455 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  456 + <xloc>56</xloc>
  457 + <yloc>185</yloc>
  458 + <draw>Y</draw>
  459 + </GUI>
  460 + </step>
  461 +
  462 + <step>
  463 + <name>&#x67e5;&#x627e;&#x7ad9;&#x70b9;&#x540d;</name>
  464 + <type>DBLookup</type>
  465 + <description/>
  466 + <distribute>N</distribute>
  467 + <custom_distribution/>
  468 + <copies>1</copies>
  469 + <partitioning>
  470 + <method>none</method>
  471 + <schema_name/>
  472 + </partitioning>
  473 + <connection>bus_control_variable</connection>
  474 + <cache>N</cache>
  475 + <cache_load_all>Y</cache_load_all>
  476 + <cache_size>0</cache_size>
  477 + <lookup>
  478 + <schema/>
  479 + <table>bsth_c_stationroute</table>
  480 + <orderby/>
  481 + <fail_on_multiple>N</fail_on_multiple>
  482 + <eat_row_on_failure>N</eat_row_on_failure>
  483 + <key>
  484 + <name>zd</name>
  485 + <field>station</field>
  486 + <condition>&#x3d;</condition>
  487 + <name2/>
  488 + </key>
  489 + <key>
  490 + <name>xl_dir</name>
  491 + <field>directions</field>
  492 + <condition>&#x3d;</condition>
  493 + <name2/>
  494 + </key>
  495 + <value>
  496 + <name>station_name</name>
  497 + <rename>zdname</rename>
  498 + <default/>
  499 + <type>String</type>
  500 + </value>
  501 + </lookup>
  502 + <cluster_schema/>
  503 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  504 + <xloc>410</xloc>
  505 + <yloc>191</yloc>
  506 + <draw>Y</draw>
  507 + </GUI>
  508 + </step>
  509 +
  510 + <step>
  511 + <name>&#x751f;&#x6210;&#x8def;&#x724c;&#x5b57;&#x6bb5;</name>
  512 + <type>RowGenerator</type>
  513 + <description/>
  514 + <distribute>Y</distribute>
  515 + <custom_distribution/>
  516 + <copies>1</copies>
  517 + <partitioning>
  518 + <method>none</method>
  519 + <schema_name/>
  520 + </partitioning>
  521 + <fields>
  522 + <field>
  523 + <name>fieldname</name>
  524 + <type>String</type>
  525 + <format/>
  526 + <currency/>
  527 + <decimal/>
  528 + <group/>
  529 + <nullif>&#x8def;&#x724c;</nullif>
  530 + <length>-1</length>
  531 + <precision>-1</precision>
  532 + <set_empty_string>N</set_empty_string>
  533 + </field>
  534 + <field>
  535 + <name>fieldtype</name>
  536 + <type>String</type>
  537 + <format/>
  538 + <currency/>
  539 + <decimal/>
  540 + <group/>
  541 + <nullif>String</nullif>
  542 + <length>-1</length>
  543 + <precision>-1</precision>
  544 + <set_empty_string>N</set_empty_string>
  545 + </field>
  546 + <field>
  547 + <name>fcno</name>
  548 + <type>Integer</type>
  549 + <format/>
  550 + <currency/>
  551 + <decimal/>
  552 + <group/>
  553 + <nullif>0</nullif>
  554 + <length>-1</length>
  555 + <precision>-1</precision>
  556 + <set_empty_string>N</set_empty_string>
  557 + </field>
  558 + </fields>
  559 + <limit>1</limit>
  560 + <never_ending>N</never_ending>
  561 + <interval_in_ms>5000</interval_in_ms>
  562 + <row_time_field>now</row_time_field>
  563 + <last_time_field>FiveSecondsAgo</last_time_field>
  564 + <cluster_schema/>
  565 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  566 + <xloc>530</xloc>
  567 + <yloc>194</yloc>
  568 + <draw>Y</draw>
  569 + </GUI>
  570 + </step>
  571 +
  572 + <step>
  573 + <name>&#x8ba1;&#x7b97;excel&#x8f93;&#x51fa;&#x5b57;&#x6bb5;</name>
  574 + <type>ScriptValueMod</type>
  575 + <description/>
  576 + <distribute>Y</distribute>
  577 + <custom_distribution/>
  578 + <copies>1</copies>
  579 + <partitioning>
  580 + <method>none</method>
  581 + <schema_name/>
  582 + </partitioning>
  583 + <compatible>N</compatible>
  584 + <optimizationLevel>9</optimizationLevel>
  585 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  586 + <jsScript_name>Script 1</jsScript_name>
  587 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var fieldname&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x540d;&#xa;var fieldtype&#x3b; &#x2f;&#x2f; &#x5b57;&#x6bb5;&#x7c7b;&#x578b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; fieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;fieldtype &#x3d; &#x27;String&#x27;&#x3b;&#xa;</jsScript_script>
  588 + </jsScript> </jsScripts> <fields> <field> <name>fieldname</name>
  589 + <rename>fieldname</rename>
  590 + <type>String</type>
  591 + <length>-1</length>
  592 + <precision>-1</precision>
  593 + <replace>N</replace>
  594 + </field> <field> <name>fieldtype</name>
  595 + <rename>fieldtype</rename>
  596 + <type>String</type>
  597 + <length>-1</length>
  598 + <precision>-1</precision>
  599 + <replace>N</replace>
  600 + </field> </fields> <cluster_schema/>
  601 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  602 + <xloc>410</xloc>
  603 + <yloc>326</yloc>
  604 + <draw>Y</draw>
  605 + </GUI>
  606 + </step>
  607 +
  608 + <step>
  609 + <name>&#x8ba1;&#x7b97;&#x53cd;&#x8303;&#x5f0f;&#x5143;&#x6570;&#x636e;</name>
  610 + <type>ScriptValueMod</type>
  611 + <description/>
  612 + <distribute>Y</distribute>
  613 + <custom_distribution/>
  614 + <copies>1</copies>
  615 + <partitioning>
  616 + <method>none</method>
  617 + <schema_name/>
  618 + </partitioning>
  619 + <compatible>N</compatible>
  620 + <optimizationLevel>9</optimizationLevel>
  621 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  622 + <jsScript_name>Script 1</jsScript_name>
  623 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var targetfieldname&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x5b57;&#x6bb5;&#x540d;&#xa;var targettype&#x3b; &#x2f;&#x2f; &#x76ee;&#x6807;&#x7c7b;&#x578b;&#xa;var valuefieldname&#x3b; &#x2f;&#x2f; &#x503c;&#x5b57;&#x6bb5;&#x540d;&#xa;var keyvalue&#x3b; &#x2f;&#x2f; &#x5173;&#x952e;&#x5b57;&#x503c;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x8fdb;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; &#x27;&#x51fa;&#x573a;&#x27; &#x2b; fcno&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; else &#x7b;&#xa; targetfieldname &#x3d; zdname &#x2b; fcno&#x3b;&#xa;&#x7d; &#xa;&#xa;targettype &#x3d; &#x27;String&#x27;&#x3b;&#xa;valuefieldname &#x3d; &#x27;fcsj&#x27;&#x3b;&#xa;keyvalue &#x3d; fcno&#x3b;&#xa;</jsScript_script>
  624 + </jsScript> </jsScripts> <fields> <field> <name>targetfieldname</name>
  625 + <rename>targetfieldname</rename>
  626 + <type>String</type>
  627 + <length>-1</length>
  628 + <precision>-1</precision>
  629 + <replace>N</replace>
  630 + </field> <field> <name>targettype</name>
  631 + <rename>targettype</rename>
  632 + <type>String</type>
  633 + <length>-1</length>
  634 + <precision>-1</precision>
  635 + <replace>N</replace>
  636 + </field> <field> <name>valuefieldname</name>
  637 + <rename>valuefieldname</rename>
  638 + <type>String</type>
  639 + <length>-1</length>
  640 + <precision>-1</precision>
  641 + <replace>N</replace>
  642 + </field> <field> <name>keyvalue</name>
  643 + <rename>keyvalue</rename>
  644 + <type>String</type>
  645 + <length>-1</length>
  646 + <precision>-1</precision>
  647 + <replace>N</replace>
  648 + </field> </fields> <cluster_schema/>
  649 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  650 + <xloc>410</xloc>
  651 + <yloc>64</yloc>
  652 + <draw>Y</draw>
  653 + </GUI>
  654 + </step>
  655 +
  656 + <step>
  657 + <name>&#x8ba1;&#x7b97;&#x7ad9;&#x70b9;</name>
  658 + <type>ScriptValueMod</type>
  659 + <description/>
  660 + <distribute>Y</distribute>
  661 + <custom_distribution/>
  662 + <copies>1</copies>
  663 + <partitioning>
  664 + <method>none</method>
  665 + <schema_name/>
  666 + </partitioning>
  667 + <compatible>N</compatible>
  668 + <optimizationLevel>9</optimizationLevel>
  669 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  670 + <jsScript_name>Script 1</jsScript_name>
  671 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var zd&#x3b;&#xa;&#xa;if &#x28;bc_type &#x3d;&#x3d; &#x27;in&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;out&#x27;&#x29; &#x7b;&#xa; zd &#x3d; zdz&#x3b;&#xa;&#x7d; else if &#x28;bc_type &#x3d;&#x3d; &#x27;normal&#x27;&#x29; &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d; else &#x7b;&#xa; zd &#x3d; qdz&#x3b;&#xa;&#x7d;&#xa;</jsScript_script>
  672 + </jsScript> </jsScripts> <fields> <field> <name>zd</name>
  673 + <rename>zd</rename>
  674 + <type>String</type>
  675 + <length>-1</length>
  676 + <precision>-1</precision>
  677 + <replace>N</replace>
  678 + </field> </fields> <cluster_schema/>
  679 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  680 + <xloc>300</xloc>
  681 + <yloc>190</yloc>
  682 + <draw>Y</draw>
  683 + </GUI>
  684 + </step>
  685 +
  686 + <step>
  687 + <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</name>
  688 + <type>FilterRows</type>
  689 + <description/>
  690 + <distribute>Y</distribute>
  691 + <custom_distribution/>
  692 + <copies>1</copies>
  693 + <partitioning>
  694 + <method>none</method>
  695 + <schema_name/>
  696 + </partitioning>
  697 +<send_true_to/>
  698 +<send_false_to/>
  699 + <compare>
  700 +<condition>
  701 + <negated>N</negated>
  702 + <leftvalue>bc_type</leftvalue>
  703 + <function>IS NOT NULL</function>
  704 + <rightvalue/>
  705 + </condition>
  706 + </compare>
  707 + <cluster_schema/>
  708 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  709 + <xloc>182</xloc>
  710 + <yloc>189</yloc>
  711 + <draw>Y</draw>
  712 + </GUI>
  713 + </step>
  714 +
  715 + <step_error_handling>
  716 + </step_error_handling>
  717 + <slave-step-copy-partition-distribution>
  718 +</slave-step-copy-partition-distribution>
  719 + <slave_transformation>N</slave_transformation>
  720 +
  721 +</transformation>
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect5.js
... ... @@ -173,7 +173,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
173 173 // 处理search
174 174 console.log("search:" + search);
175 175  
176   - if (dataModelType == 'ajax') {
  176 + if (dataModelType == 'ajax' || dataModelType == 'local') {
177 177 scope[ctrlAs].$$data = [];
178 178 for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
179 179 var upTerm = search.toUpperCase();
... ... @@ -400,6 +400,25 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
400 400 };
401 401  
402 402 /**
  403 + * 内部方法,读取传过来的动态数据源。
  404 + * @param ldata
  405 + */
  406 + scope[ctrlAs].$$internal_pass_data = function(ldata) {
  407 + // 重新创建内部保存的数据
  408 + scope[ctrlAs].$$data_real = [];
  409 + // 重新创建内部ui-select显示用数据,默认取10条记录显示
  410 + scope[ctrlAs].$$data = [];
  411 +
  412 + // 本地动态数据直接显示,暂时不优化
  413 + for (var i = 0; i < ldata.length; i++) {
  414 + scope[ctrlAs].$$data_real.push(ldata[i]);
  415 + scope[ctrlAs].$$data.push(ldata[i]);
  416 + }
  417 +
  418 + scope[ctrlAs].$$internal_validate_model();
  419 + };
  420 +
  421 + /**
403 422 * 监控dsparams属性变化
404 423 */
405 424 attr.$observe("dsparams", function(value) {
... ... @@ -411,6 +430,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
411 430 // {type: 'ajax', param: 'ajax查询参数对象', atype: 'ajax查询累西'}
412 431 // {type: 'dic', param: 'dic名字'}
413 432 // {type: 'local', param: '本地存储type名字'}
  433 + // {type: 'passdata', : 'ldata': '本地存储数据'}
414 434  
415 435 if (obj.type == 'dic') {
416 436 dataModelType = 'dic';
... ... @@ -422,6 +442,9 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
422 442 } else if (obj.type == 'local') {
423 443 dataModelType = 'local';
424 444 scope[ctrlAs].$$internal_local_data(obj.param);
  445 + } else if (obj.type == 'passdata') {
  446 + dataModelType = 'passdata';
  447 + scope[ctrlAs].$$internal_pass_data(obj.ldata);
425 448 } else {
426 449 throw new Error("dsparams参数格式异常=" + obj);
427 450 }
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoEdit.js
... ... @@ -22,9 +22,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
22 22 controllerAs: '$saPlanInfoEditCtrl',
23 23 bindToController: true,
24 24 controller: function() {
25   - var self = this;
  25 + //var self = this;
26 26  
27   - // TODO:
28 27 },
29 28  
30 29 compile: function(tElem, tAttrs) {
... ... @@ -42,8 +41,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
42 41 var old_cl = {}; // key:{车辆id_车辆自编号},value:所在list下标数组
43 42 var old_j = {}; // key:{驾驶员id_姓名_工号}, value:所在list下标数组
44 43 var old_s = {}; // key:{售票员id_姓名_工号}, value:所在list下标数组
  44 + var old_isfb = false; // 是否有分班
  45 + var old_isfb_index = 0; // 分班开始索引
  46 + var old_hasJCBC = false; // 是否有进场班次
  47 + var old_max_fcno = 0; // 最大发车顺序号
  48 + var old_firstJCBCFcno = 0; // 第一个进场班次发车顺序号
  49 + var old_half_bcs = 0; // 一般的班次数量
45 50  
46 51 // 内部变量,变更的车辆,变更的人员
  52 + var new_cl1 = undefined; // 新的车辆1(车辆id_车辆自编号)
  53 + var new_cl2 = undefined; // 新的车辆2(车辆id_车辆自编号)
  54 + var new_j1 = undefined; // 新的驾驶员1(驾驶员id_姓名_工号)
  55 + var new_j2 = undefined; // 新的驾驶员2(驾驶员id_姓名_工号)
  56 + var new_s1 = undefined; // 新的售票员1(售票员id_姓名_工号)
  57 + var new_s2 = undefined; // 新的售票员2(售票员id_姓名_工号)
47 58  
48 59 return {
49 60 pre: function(scope, element, attr) {
... ... @@ -51,33 +62,361 @@ angular.module(&#39;ScheduleApp&#39;).directive(
51 62 },
52 63 post: function(scope, element, attr) {
53 64  
  65 + /**
  66 + * 刷新车辆数据。
  67 + */
  68 + scope[ctrlAs].$$internal_refresh_dsdata_cl = function() {
  69 + if (new_cl1) {
  70 + var new_cl1_id = new_cl1.split("_")[0];
  71 + var new_cl1_zbh = new_cl1.split("_")[1];
  72 +
  73 + if (new_cl2) {
  74 + var new_cl2_id = new_cl2.split("_")[0];
  75 + var new_cl2_zbh = new_cl2.split("_")[1];
  76 +
  77 + if (old_isfb) { // 使用分班判定
  78 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  79 + if (index < old_isfb_index) {
  80 + obj.cl = new_cl1_id;
  81 + obj.clZbh = new_cl1_zbh;
  82 + } else {
  83 + obj.cl = new_cl2_id;
  84 + obj.clZbh = new_cl2_zbh;
  85 + }
  86 + });
  87 +
  88 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  89 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  90 + if (obj.fcno <= old_firstJCBCFcno) {
  91 + obj.cl = new_cl1_id;
  92 + obj.clZbh = new_cl1_zbh;
  93 + } else {
  94 + obj.cl = new_cl2_id;
  95 + obj.clZbh = new_cl2_zbh;
  96 + }
  97 + });
  98 + } else { // 使用一半一半班次判定
  99 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  100 + if (index < old_half_bcs) {
  101 + obj.cl = new_cl1_id;
  102 + obj.clZbh = new_cl1_zbh;
  103 + } else {
  104 + obj.cl = new_cl2_id;
  105 + obj.clZbh = new_cl2_zbh;
  106 + }
  107 + });
  108 + }
  109 +
  110 + } else {
  111 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  112 + obj.cl = new_cl1_id;
  113 + obj.clZbh = new_cl1_zbh;
  114 + });
  115 + }
  116 +
  117 + } else {
  118 + // 使用旧的
  119 + angular.forEach(old_cl, function(value, key) {
  120 + angular.forEach(value, function(i) {
  121 + scope[ctrlAs].ds[i].cl = key.split("_")[0];
  122 + scope[ctrlAs].ds[i].clZbh = key.split("_")[1];
  123 + });
  124 + });
  125 + }
  126 + };
  127 +
  128 + /**
  129 + * 刷新驾驶员数据。
  130 + */
  131 + scope[ctrlAs].$$internal_refresh_dsdata_j = function() {
  132 + if (new_j1) {
  133 + var new_j1_id = new_j1.split("_")[0];
  134 + var new_j1_name = new_j1.split("_")[1];
  135 + var new_j1_gh = new_j1.split("_")[2];
  136 +
  137 + if (new_j2) {
  138 + var new_j2_id = new_j2.split("_")[0];
  139 + var new_j2_name = new_j2.split("_")[1];
  140 + var new_j2_gh = new_j2.split("_")[2];
  141 +
  142 + if (old_isfb) { // 使用分班判定
  143 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  144 + if (index < old_isfb_index) {
  145 + obj.j = new_j1_id;
  146 + obj.jGh = new_j1_gh;
  147 + obj.jName = new_j1_name;
  148 + } else {
  149 + obj.j = new_j2_id;
  150 + obj.jGh = new_j2_gh;
  151 + obj.jName = new_j2_name;
  152 + }
  153 + });
  154 +
  155 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  156 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  157 + if (obj.fcno <= old_firstJCBCFcno) {
  158 + obj.j = new_j1_id;
  159 + obj.jGh = new_j1_gh;
  160 + obj.jName = new_j1_name;
  161 + } else {
  162 + obj.j = new_j2_id;
  163 + obj.jGh = new_j2_gh;
  164 + obj.jName = new_j2_name;
  165 + }
  166 + });
  167 + } else { // 使用一半一半班次判定
  168 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  169 + if (index < old_half_bcs) {
  170 + obj.j = new_j1_id;
  171 + obj.jGh = new_j1_gh;
  172 + obj.jName = new_j1_name;
  173 + } else {
  174 + obj.j = new_j2_id;
  175 + obj.jGh = new_j2_gh;
  176 + obj.jName = new_j2_name;
  177 + }
  178 + });
  179 + }
  180 +
  181 + } else {
  182 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  183 + obj.j = new_j1_id;
  184 + obj.jGh = new_j1_gh;
  185 + obj.jName = new_j1_name;
  186 + });
  187 + }
  188 +
  189 + } else {
  190 + // 使用旧的
  191 + angular.forEach(old_j, function(value, key) {
  192 + angular.forEach(value, function(i) {
  193 + scope[ctrlAs].ds[i].j = key.split("_")[0];
  194 + scope[ctrlAs].ds[i].jName = key.split("_")[1];
  195 + scope[ctrlAs].ds[i].jGh = key.split("_")[2];
  196 + });
  197 + });
  198 + }
  199 + };
  200 + /**
  201 + * 刷新售票员数据。
  202 + */
  203 + scope[ctrlAs].$$internal_refresh_dsdata_s = function() {
  204 + if (new_s1) {
  205 + var new_s1_id = new_s1.split("_")[0];
  206 + var new_s1_name = new_s1.split("_")[1];
  207 + var new_s1_gh = new_s1.split("_")[2];
  208 +
  209 + if (new_s2) {
  210 + var new_s2_id = new_s2.split("_")[0];
  211 + var new_s2_name = new_s2.split("_")[1];
  212 + var new_s2_gh = new_s2.split("_")[2];
  213 +
  214 + if (old_isfb) { // 使用分班判定
  215 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  216 + if (index < old_isfb_index) {
  217 + obj.s = new_s1_id;
  218 + obj.sGh = new_s1_gh;
  219 + obj.sName = new_s1_name;
  220 + } else {
  221 + obj.s = new_s2_id;
  222 + obj.sGh = new_s2_gh;
  223 + obj.sName = new_s2_name;
  224 + }
  225 + });
  226 +
  227 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  228 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  229 + if (obj.fcno <= old_firstJCBCFcno) {
  230 + obj.s = new_s1_id;
  231 + obj.sGh = new_s1_gh;
  232 + obj.sName = new_s1_name;
  233 + } else {
  234 + obj.s = new_s2_id;
  235 + obj.sGh = new_s2_gh;
  236 + obj.sName = new_s2_name;
  237 + }
  238 + });
  239 + } else { // 使用一半一半班次判定
  240 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  241 + if (index < old_half_bcs) {
  242 + obj.s = new_s1_id;
  243 + obj.sGh = new_s1_gh;
  244 + obj.sName = new_s1_name;
  245 + } else {
  246 + obj.s = new_s2_id;
  247 + obj.sGh = new_s2_gh;
  248 + obj.sName = new_s2_name;
  249 + }
  250 + });
  251 + }
  252 +
  253 + } else {
  254 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  255 + obj.s = new_s1_id;
  256 + obj.sGh = new_s1_gh;
  257 + obj.sName = new_s1_name;
  258 + });
  259 + }
  260 +
  261 + } else {
  262 + // 先清空
  263 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  264 + obj.s = undefined;
  265 + obj.sGh = undefined;
  266 + obj.sName = undefined;
  267 + });
  268 +
  269 + // 使用旧的
  270 + angular.forEach(old_s, function(value, key) {
  271 + angular.forEach(value, function(i) {
  272 + scope[ctrlAs].ds[i].s = key.split("_")[0];
  273 + scope[ctrlAs].ds[i].sName = key.split("_")[1];
  274 + scope[ctrlAs].ds[i].sGh = key.split("_")[2];
  275 + });
  276 + });
  277 + }
  278 + };
  279 +
  280 + /**
  281 + * 刷新内部数据。
  282 + */
  283 + scope[ctrlAs].$$internal_refresh_dsdata = function() {
  284 + // 更新车辆
  285 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
  286 +
  287 + // 更新驾驶员
  288 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  289 +
  290 + // 更新售票员
  291 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  292 + };
  293 +
54 294 // -------------- 监控function ---------------//
  295 + attr.$observe('cl1', function(value) {
  296 + if (value && value != "") {
  297 + var obj = JSON.parse(value);
  298 + if (obj.id && obj.zbh) {
  299 + new_cl1 = obj.id + "_" + obj.zbh;
  300 + } else {
  301 + new_cl1 = undefined;
  302 + }
  303 + scope[ctrlAs].$$internal_refresh_dsdata();
  304 + }
  305 + });
  306 +
  307 + attr.$observe('cl2', function(value) {
  308 + if (value && value != "") {
  309 + var obj = JSON.parse(value);
  310 + if (obj.id && obj.zbh) {
  311 + new_cl2 = obj.id + "_" + obj.zbh;
  312 + } else {
  313 + new_cl2 = undefined;
  314 + }
  315 + scope[ctrlAs].$$internal_refresh_dsdata();
  316 + }
  317 + });
  318 +
  319 + attr.$observe('j1', function(value) {
  320 + if (value && value != "") {
  321 + var obj = JSON.parse(value);
  322 + if (obj.id && obj.name && obj.jobCode) {
  323 + new_j1 = obj.id + "_" + obj.name + "_" + obj.jobCode;
  324 + } else {
  325 + new_j1 = undefined;
  326 + }
  327 + scope[ctrlAs].$$internal_refresh_dsdata();
  328 + }
  329 + });
  330 +
  331 + attr.$observe('j2', function(value) {
  332 + if (value && value != "") {
  333 + var obj = JSON.parse(value);
  334 + if (obj.id && obj.name && obj.jobCode) {
  335 + new_j2 = obj.id + "_" + obj.name + "_" + obj.jobCode;
  336 + } else {
  337 + new_j2 = undefined;
  338 + }
  339 + scope[ctrlAs].$$internal_refresh_dsdata();
  340 + }
  341 + });
  342 +
  343 + attr.$observe('s1', function(value) {
  344 + if (value && value != "") {
  345 + var obj = JSON.parse(value);
  346 + if (obj.id && obj.name && obj.jobCode) {
  347 + new_s1 = obj.id + "_" + obj.name + "_" + obj.jobCode;
  348 + } else {
  349 + new_s1 = undefined;
  350 + }
  351 + scope[ctrlAs].$$internal_refresh_dsdata();
  352 + }
  353 + });
  354 +
  355 + attr.$observe('s2', function(value) {
  356 + if (value && value != "") {
  357 + var obj = JSON.parse(value);
  358 + if (obj.id && obj.name && obj.jobCode) {
  359 + new_s2 = obj.id + "_" + obj.name + "_" + obj.jobCode;
  360 + } else {
  361 + new_s2 = undefined;
  362 + }
  363 + scope[ctrlAs].$$internal_refresh_dsdata();
  364 + }
  365 + });
  366 +
55 367 scope.$watch(
56 368 function() {
57 369 return scope[ctrlAs].ds;
58 370 },
59 371 function(newValue, oldValue) {
60 372 if (newValue && newValue.length > 0) {
  373 +
  374 + var j1 = newValue[0].j;
  375 +
61 376 angular.forEach(newValue, function(obj, index) {
62 377 var k1 = obj.cl + "_" + obj.clZbh;
63   - var k2 = obj.j + "_" + obj.jName + "_" + obj.jGh;
64   - var k3 = obj.s + "_" + obj.sName + "_" + obj.sGh;
  378 + var k2 = !obj.j? undefined: obj.j + "_" + obj.jName + "_" + obj.jGh;
  379 + var k3 = !obj.s? undefined: obj.s + "_" + obj.sName + "_" + obj.sGh;
65 380  
66   - if (!old_cl.k1) {
  381 + if (!old_cl[k1]) {
67 382 old_cl[k1] = [];
68 383 }
69   - if (!old_j.k2) {
  384 + if (!old_j[k2] && k2) {
70 385 old_j[k2] = [];
71 386 }
72   - if (!old_s.k3) {
  387 + if (!old_s[k3] && k3) {
73 388 old_s[k3] = [];
74 389 }
75 390  
76   - old_cl[k1].push(index);
77   - old_j[k2].push(index);
78   - old_s[k3].push(index);
  391 + // 闭包
  392 + (function(i) {
  393 + old_cl[k1].push(i);
  394 + if (k2) {
  395 + old_j[k2].push(i);
  396 + }
  397 + if (k3) {
  398 + old_s[k3].push(i);
  399 + }
  400 + })(index);
  401 +
  402 + // 判断是否分班
  403 + if (j1 != obj.j && !old_isfb) {
  404 + old_isfb = true;
  405 + old_isfb_index = index;
  406 + }
  407 +
  408 + // 判断进出场
  409 + if (obj.bcType == 'in' && !old_hasJCBC) {
  410 + old_hasJCBC = true;
  411 + old_firstJCBCFcno = obj.fcno;
  412 + }
  413 + });
  414 +
  415 + old_max_fcno = newValue[newValue.length - 1].fcno;
  416 + old_half_bcs = newValue.length / 2;
79 417  
80   - })
  418 + // 可以用resource封装一下
  419 + // TODO:
81 420 }
82 421 }
83 422 );
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/scheduleplan/saPlaninfoeditTemplate.html
... ... @@ -8,6 +8,7 @@
8 8 <tr role="row" class="heading">
9 9 <th style="width: 50px;">序号</th>
10 10 <th style="width: 80px;">发车时间</th>
  11 + <th style="width: 70px;">车辆</th>
11 12 <th style="width: 60px;">驾驶员</th>
12 13 <th style="width: 60px;">售票员</th>
13 14 <th style="width: 100px;">停车场</th>
... ... @@ -25,6 +26,11 @@
25 26 </td>
26 27 <td>
27 28 <a href="#">
  29 + <span ng-bind="info.clZbh"></span>
  30 + </a>
  31 + </td>
  32 + <td>
  33 + <a href="#">
28 34 <span ng-bind="info.jName"></span>
29 35 </a>
30 36 </td>
... ... @@ -34,9 +40,12 @@
34 40 </a>
35 41 </td>
36 42 <td>
37   - <a href="#">
  43 + <a href="#" ng-if="info.bcType == 'in'">
38 44 <span ng-bind="info.zdzName"></span>
39 45 </a>
  46 + <a href="#" ng-if="info.bcType == 'out'">
  47 + <span ng-bind="info.qdzName"></span>
  48 + </a>
40 49 </td>
41 50 </tr>
42 51 </tbody>
... ...
src/main/resources/static/pages/scheduleApp/module/common/main.js
... ... @@ -68,11 +68,11 @@ ScheduleApp.factory(&#39;DataStore&#39;, [
68 68 dataMap.cl = result.data.data;
69 69 angular.forEach(result.data.data, function(obj) {
70 70 // 全拼
71   - obj["$fullChars"] = pinyin.getFullChars(obj.insideCode ? "": obj.insideCode);
  71 + obj["$fullChars"] = pinyin.getFullChars(obj.insideCode ? obj.insideCode: "");
72 72 // 简拼
73   - obj["$camelChars"] = pinyin.getCamelChars(obj.insideCode ? "": obj.insideCode);
  73 + obj["$camelChars"] = pinyin.getCamelChars(obj.insideCode ? obj.insideCode: "");
74 74 // 原值
75   - obj["$calcu_str"] = obj.insideCode? "": obj.insideCode;
  75 + obj["$calcu_str"] = obj.insideCode? obj.insideCode: "";
76 76 });
77 77 });
78 78  
... ... @@ -82,7 +82,7 @@ ScheduleApp.factory(&#39;DataStore&#39;, [
82 82 }).then(function(result) {
83 83 // 简拼数据
84 84 dataMap.ry = result.data.data;
85   - angular.forEach(dataMap.ryInfos, function(obj) {
  85 + angular.forEach(result.data.data, function(obj) {
86 86 // 全拼
87 87 obj["$fullChars"] = pinyin.getFullChars(obj.personnelName + "-" + obj.jobCode);
88 88 // 简拼
... ...
src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
... ... @@ -1478,7 +1478,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1478 1478 // 处理search
1479 1479 console.log("search:" + search);
1480 1480  
1481   - if (dataModelType == 'ajax') {
  1481 + if (dataModelType == 'ajax' || dataModelType == 'local') {
1482 1482 scope[ctrlAs].$$data = [];
1483 1483 for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
1484 1484 var upTerm = search.toUpperCase();
... ... @@ -1705,6 +1705,25 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1705 1705 };
1706 1706  
1707 1707 /**
  1708 + * 内部方法,读取传过来的动态数据源。
  1709 + * @param ldata
  1710 + */
  1711 + scope[ctrlAs].$$internal_pass_data = function(ldata) {
  1712 + // 重新创建内部保存的数据
  1713 + scope[ctrlAs].$$data_real = [];
  1714 + // 重新创建内部ui-select显示用数据,默认取10条记录显示
  1715 + scope[ctrlAs].$$data = [];
  1716 +
  1717 + // 本地动态数据直接显示,暂时不优化
  1718 + for (var i = 0; i < ldata.length; i++) {
  1719 + scope[ctrlAs].$$data_real.push(ldata[i]);
  1720 + scope[ctrlAs].$$data.push(ldata[i]);
  1721 + }
  1722 +
  1723 + scope[ctrlAs].$$internal_validate_model();
  1724 + };
  1725 +
  1726 + /**
1708 1727 * 监控dsparams属性变化
1709 1728 */
1710 1729 attr.$observe("dsparams", function(value) {
... ... @@ -1716,6 +1735,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1716 1735 // {type: 'ajax', param: 'ajax查询参数对象', atype: 'ajax查询累西'}
1717 1736 // {type: 'dic', param: 'dic名字'}
1718 1737 // {type: 'local', param: '本地存储type名字'}
  1738 + // {type: 'passdata', : 'ldata': '本地存储数据'}
1719 1739  
1720 1740 if (obj.type == 'dic') {
1721 1741 dataModelType = 'dic';
... ... @@ -1727,6 +1747,9 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1727 1747 } else if (obj.type == 'local') {
1728 1748 dataModelType = 'local';
1729 1749 scope[ctrlAs].$$internal_local_data(obj.param);
  1750 + } else if (obj.type == 'passdata') {
  1751 + dataModelType = 'passdata';
  1752 + scope[ctrlAs].$$internal_pass_data(obj.ldata);
1730 1753 } else {
1731 1754 throw new Error("dsparams参数格式异常=" + obj);
1732 1755 }
... ... @@ -4302,9 +4325,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4302 4325 controllerAs: '$saPlanInfoEditCtrl',
4303 4326 bindToController: true,
4304 4327 controller: function() {
4305   - var self = this;
  4328 + //var self = this;
4306 4329  
4307   - // TODO:
4308 4330 },
4309 4331  
4310 4332 compile: function(tElem, tAttrs) {
... ... @@ -4322,8 +4344,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4322 4344 var old_cl = {}; // key:{车辆id_车辆自编号},value:所在list下标数组
4323 4345 var old_j = {}; // key:{驾驶员id_姓名_工号}, value:所在list下标数组
4324 4346 var old_s = {}; // key:{售票员id_姓名_工号}, value:所在list下标数组
  4347 + var old_isfb = false; // 是否有分班
  4348 + var old_isfb_index = 0; // 分班开始索引
  4349 + var old_hasJCBC = false; // 是否有进场班次
  4350 + var old_max_fcno = 0; // 最大发车顺序号
  4351 + var old_firstJCBCFcno = 0; // 第一个进场班次发车顺序号
  4352 + var old_half_bcs = 0; // 一般的班次数量
4325 4353  
4326 4354 // 内部变量,变更的车辆,变更的人员
  4355 + var new_cl1 = undefined; // 新的车辆1(车辆id_车辆自编号)
  4356 + var new_cl2 = undefined; // 新的车辆2(车辆id_车辆自编号)
  4357 + var new_j1 = undefined; // 新的驾驶员1(驾驶员id_姓名_工号)
  4358 + var new_j2 = undefined; // 新的驾驶员2(驾驶员id_姓名_工号)
  4359 + var new_s1 = undefined; // 新的售票员1(售票员id_姓名_工号)
  4360 + var new_s2 = undefined; // 新的售票员2(售票员id_姓名_工号)
4327 4361  
4328 4362 return {
4329 4363 pre: function(scope, element, attr) {
... ... @@ -4331,33 +4365,361 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4331 4365 },
4332 4366 post: function(scope, element, attr) {
4333 4367  
  4368 + /**
  4369 + * 刷新车辆数据。
  4370 + */
  4371 + scope[ctrlAs].$$internal_refresh_dsdata_cl = function() {
  4372 + if (new_cl1) {
  4373 + var new_cl1_id = new_cl1.split("_")[0];
  4374 + var new_cl1_zbh = new_cl1.split("_")[1];
  4375 +
  4376 + if (new_cl2) {
  4377 + var new_cl2_id = new_cl2.split("_")[0];
  4378 + var new_cl2_zbh = new_cl2.split("_")[1];
  4379 +
  4380 + if (old_isfb) { // 使用分班判定
  4381 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4382 + if (index < old_isfb_index) {
  4383 + obj.cl = new_cl1_id;
  4384 + obj.clZbh = new_cl1_zbh;
  4385 + } else {
  4386 + obj.cl = new_cl2_id;
  4387 + obj.clZbh = new_cl2_zbh;
  4388 + }
  4389 + });
  4390 +
  4391 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  4392 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  4393 + if (obj.fcno <= old_firstJCBCFcno) {
  4394 + obj.cl = new_cl1_id;
  4395 + obj.clZbh = new_cl1_zbh;
  4396 + } else {
  4397 + obj.cl = new_cl2_id;
  4398 + obj.clZbh = new_cl2_zbh;
  4399 + }
  4400 + });
  4401 + } else { // 使用一半一半班次判定
  4402 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4403 + if (index < old_half_bcs) {
  4404 + obj.cl = new_cl1_id;
  4405 + obj.clZbh = new_cl1_zbh;
  4406 + } else {
  4407 + obj.cl = new_cl2_id;
  4408 + obj.clZbh = new_cl2_zbh;
  4409 + }
  4410 + });
  4411 + }
  4412 +
  4413 + } else {
  4414 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4415 + obj.cl = new_cl1_id;
  4416 + obj.clZbh = new_cl1_zbh;
  4417 + });
  4418 + }
  4419 +
  4420 + } else {
  4421 + // 使用旧的
  4422 + angular.forEach(old_cl, function(value, key) {
  4423 + angular.forEach(value, function(i) {
  4424 + scope[ctrlAs].ds[i].cl = key.split("_")[0];
  4425 + scope[ctrlAs].ds[i].clZbh = key.split("_")[1];
  4426 + });
  4427 + });
  4428 + }
  4429 + };
  4430 +
  4431 + /**
  4432 + * 刷新驾驶员数据。
  4433 + */
  4434 + scope[ctrlAs].$$internal_refresh_dsdata_j = function() {
  4435 + if (new_j1) {
  4436 + var new_j1_id = new_j1.split("_")[0];
  4437 + var new_j1_name = new_j1.split("_")[1];
  4438 + var new_j1_gh = new_j1.split("_")[2];
  4439 +
  4440 + if (new_j2) {
  4441 + var new_j2_id = new_j2.split("_")[0];
  4442 + var new_j2_name = new_j2.split("_")[1];
  4443 + var new_j2_gh = new_j2.split("_")[2];
  4444 +
  4445 + if (old_isfb) { // 使用分班判定
  4446 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4447 + if (index < old_isfb_index) {
  4448 + obj.j = new_j1_id;
  4449 + obj.jGh = new_j1_gh;
  4450 + obj.jName = new_j1_name;
  4451 + } else {
  4452 + obj.j = new_j2_id;
  4453 + obj.jGh = new_j2_gh;
  4454 + obj.jName = new_j2_name;
  4455 + }
  4456 + });
  4457 +
  4458 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  4459 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  4460 + if (obj.fcno <= old_firstJCBCFcno) {
  4461 + obj.j = new_j1_id;
  4462 + obj.jGh = new_j1_gh;
  4463 + obj.jName = new_j1_name;
  4464 + } else {
  4465 + obj.j = new_j2_id;
  4466 + obj.jGh = new_j2_gh;
  4467 + obj.jName = new_j2_name;
  4468 + }
  4469 + });
  4470 + } else { // 使用一半一半班次判定
  4471 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4472 + if (index < old_half_bcs) {
  4473 + obj.j = new_j1_id;
  4474 + obj.jGh = new_j1_gh;
  4475 + obj.jName = new_j1_name;
  4476 + } else {
  4477 + obj.j = new_j2_id;
  4478 + obj.jGh = new_j2_gh;
  4479 + obj.jName = new_j2_name;
  4480 + }
  4481 + });
  4482 + }
  4483 +
  4484 + } else {
  4485 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4486 + obj.j = new_j1_id;
  4487 + obj.jGh = new_j1_gh;
  4488 + obj.jName = new_j1_name;
  4489 + });
  4490 + }
  4491 +
  4492 + } else {
  4493 + // 使用旧的
  4494 + angular.forEach(old_j, function(value, key) {
  4495 + angular.forEach(value, function(i) {
  4496 + scope[ctrlAs].ds[i].j = key.split("_")[0];
  4497 + scope[ctrlAs].ds[i].jName = key.split("_")[1];
  4498 + scope[ctrlAs].ds[i].jGh = key.split("_")[2];
  4499 + });
  4500 + });
  4501 + }
  4502 + };
  4503 + /**
  4504 + * 刷新售票员数据。
  4505 + */
  4506 + scope[ctrlAs].$$internal_refresh_dsdata_s = function() {
  4507 + if (new_s1) {
  4508 + var new_s1_id = new_s1.split("_")[0];
  4509 + var new_s1_name = new_s1.split("_")[1];
  4510 + var new_s1_gh = new_s1.split("_")[2];
  4511 +
  4512 + if (new_s2) {
  4513 + var new_s2_id = new_s2.split("_")[0];
  4514 + var new_s2_name = new_s2.split("_")[1];
  4515 + var new_s2_gh = new_s2.split("_")[2];
  4516 +
  4517 + if (old_isfb) { // 使用分班判定
  4518 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4519 + if (index < old_isfb_index) {
  4520 + obj.s = new_s1_id;
  4521 + obj.sGh = new_s1_gh;
  4522 + obj.sName = new_s1_name;
  4523 + } else {
  4524 + obj.s = new_s2_id;
  4525 + obj.sGh = new_s2_gh;
  4526 + obj.sName = new_s2_name;
  4527 + }
  4528 + });
  4529 +
  4530 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  4531 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  4532 + if (obj.fcno <= old_firstJCBCFcno) {
  4533 + obj.s = new_s1_id;
  4534 + obj.sGh = new_s1_gh;
  4535 + obj.sName = new_s1_name;
  4536 + } else {
  4537 + obj.s = new_s2_id;
  4538 + obj.sGh = new_s2_gh;
  4539 + obj.sName = new_s2_name;
  4540 + }
  4541 + });
  4542 + } else { // 使用一半一半班次判定
  4543 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4544 + if (index < old_half_bcs) {
  4545 + obj.s = new_s1_id;
  4546 + obj.sGh = new_s1_gh;
  4547 + obj.sName = new_s1_name;
  4548 + } else {
  4549 + obj.s = new_s2_id;
  4550 + obj.sGh = new_s2_gh;
  4551 + obj.sName = new_s2_name;
  4552 + }
  4553 + });
  4554 + }
  4555 +
  4556 + } else {
  4557 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4558 + obj.s = new_s1_id;
  4559 + obj.sGh = new_s1_gh;
  4560 + obj.sName = new_s1_name;
  4561 + });
  4562 + }
  4563 +
  4564 + } else {
  4565 + // 先清空
  4566 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  4567 + obj.s = undefined;
  4568 + obj.sGh = undefined;
  4569 + obj.sName = undefined;
  4570 + });
  4571 +
  4572 + // 使用旧的
  4573 + angular.forEach(old_s, function(value, key) {
  4574 + angular.forEach(value, function(i) {
  4575 + scope[ctrlAs].ds[i].s = key.split("_")[0];
  4576 + scope[ctrlAs].ds[i].sName = key.split("_")[1];
  4577 + scope[ctrlAs].ds[i].sGh = key.split("_")[2];
  4578 + });
  4579 + });
  4580 + }
  4581 + };
  4582 +
  4583 + /**
  4584 + * 刷新内部数据。
  4585 + */
  4586 + scope[ctrlAs].$$internal_refresh_dsdata = function() {
  4587 + // 更新车辆
  4588 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
  4589 +
  4590 + // 更新驾驶员
  4591 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  4592 +
  4593 + // 更新售票员
  4594 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  4595 + };
  4596 +
4334 4597 // -------------- 监控function ---------------//
  4598 + attr.$observe('cl1', function(value) {
  4599 + if (value && value != "") {
  4600 + var obj = JSON.parse(value);
  4601 + if (obj.id && obj.zbh) {
  4602 + new_cl1 = obj.id + "_" + obj.zbh;
  4603 + } else {
  4604 + new_cl1 = undefined;
  4605 + }
  4606 + scope[ctrlAs].$$internal_refresh_dsdata();
  4607 + }
  4608 + });
  4609 +
  4610 + attr.$observe('cl2', function(value) {
  4611 + if (value && value != "") {
  4612 + var obj = JSON.parse(value);
  4613 + if (obj.id && obj.zbh) {
  4614 + new_cl2 = obj.id + "_" + obj.zbh;
  4615 + } else {
  4616 + new_cl2 = undefined;
  4617 + }
  4618 + scope[ctrlAs].$$internal_refresh_dsdata();
  4619 + }
  4620 + });
  4621 +
  4622 + attr.$observe('j1', function(value) {
  4623 + if (value && value != "") {
  4624 + var obj = JSON.parse(value);
  4625 + if (obj.id && obj.name && obj.jobCode) {
  4626 + new_j1 = obj.id + "_" + obj.name + "_" + obj.jobCode;
  4627 + } else {
  4628 + new_j1 = undefined;
  4629 + }
  4630 + scope[ctrlAs].$$internal_refresh_dsdata();
  4631 + }
  4632 + });
  4633 +
  4634 + attr.$observe('j2', function(value) {
  4635 + if (value && value != "") {
  4636 + var obj = JSON.parse(value);
  4637 + if (obj.id && obj.name && obj.jobCode) {
  4638 + new_j2 = obj.id + "_" + obj.name + "_" + obj.jobCode;
  4639 + } else {
  4640 + new_j2 = undefined;
  4641 + }
  4642 + scope[ctrlAs].$$internal_refresh_dsdata();
  4643 + }
  4644 + });
  4645 +
  4646 + attr.$observe('s1', function(value) {
  4647 + if (value && value != "") {
  4648 + var obj = JSON.parse(value);
  4649 + if (obj.id && obj.name && obj.jobCode) {
  4650 + new_s1 = obj.id + "_" + obj.name + "_" + obj.jobCode;
  4651 + } else {
  4652 + new_s1 = undefined;
  4653 + }
  4654 + scope[ctrlAs].$$internal_refresh_dsdata();
  4655 + }
  4656 + });
  4657 +
  4658 + attr.$observe('s2', function(value) {
  4659 + if (value && value != "") {
  4660 + var obj = JSON.parse(value);
  4661 + if (obj.id && obj.name && obj.jobCode) {
  4662 + new_s2 = obj.id + "_" + obj.name + "_" + obj.jobCode;
  4663 + } else {
  4664 + new_s2 = undefined;
  4665 + }
  4666 + scope[ctrlAs].$$internal_refresh_dsdata();
  4667 + }
  4668 + });
  4669 +
4335 4670 scope.$watch(
4336 4671 function() {
4337 4672 return scope[ctrlAs].ds;
4338 4673 },
4339 4674 function(newValue, oldValue) {
4340 4675 if (newValue && newValue.length > 0) {
  4676 +
  4677 + var j1 = newValue[0].j;
  4678 +
4341 4679 angular.forEach(newValue, function(obj, index) {
4342 4680 var k1 = obj.cl + "_" + obj.clZbh;
4343   - var k2 = obj.j + "_" + obj.jName + "_" + obj.jGh;
4344   - var k3 = obj.s + "_" + obj.sName + "_" + obj.sGh;
  4681 + var k2 = !obj.j? undefined: obj.j + "_" + obj.jName + "_" + obj.jGh;
  4682 + var k3 = !obj.s? undefined: obj.s + "_" + obj.sName + "_" + obj.sGh;
4345 4683  
4346   - if (!old_cl.k1) {
  4684 + if (!old_cl[k1]) {
4347 4685 old_cl[k1] = [];
4348 4686 }
4349   - if (!old_j.k2) {
  4687 + if (!old_j[k2] && k2) {
4350 4688 old_j[k2] = [];
4351 4689 }
4352   - if (!old_s.k3) {
  4690 + if (!old_s[k3] && k3) {
4353 4691 old_s[k3] = [];
4354 4692 }
4355 4693  
4356   - old_cl[k1].push(index);
4357   - old_j[k2].push(index);
4358   - old_s[k3].push(index);
  4694 + // 闭包
  4695 + (function(i) {
  4696 + old_cl[k1].push(i);
  4697 + if (k2) {
  4698 + old_j[k2].push(i);
  4699 + }
  4700 + if (k3) {
  4701 + old_s[k3].push(i);
  4702 + }
  4703 + })(index);
  4704 +
  4705 + // 判断是否分班
  4706 + if (j1 != obj.j && !old_isfb) {
  4707 + old_isfb = true;
  4708 + old_isfb_index = index;
  4709 + }
  4710 +
  4711 + // 判断进出场
  4712 + if (obj.bcType == 'in' && !old_hasJCBC) {
  4713 + old_hasJCBC = true;
  4714 + old_firstJCBCFcno = obj.fcno;
  4715 + }
  4716 + });
  4717 +
  4718 + old_max_fcno = newValue[newValue.length - 1].fcno;
  4719 + old_half_bcs = newValue.length / 2;
4359 4720  
4360   - })
  4721 + // 可以用resource封装一下
  4722 + // TODO:
4361 4723 }
4362 4724 }
4363 4725 );
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit.html
... ... @@ -51,7 +51,7 @@
51 51 <div class="col-md-7">
52 52 <sa-Select5 name="cl1"
53 53 model="ctrl.formData"
54   - cmaps="{'cl1.id': 'id'}"
  54 + cmaps="{'cl1.id': 'id', 'cl1.zbh': 'insideCode'}"
55 55 dcname="cl1.id"
56 56 icname="id"
57 57 dsparams="{{ {type: 'local', param: 'cl' } | json }}"
... ... @@ -59,20 +59,21 @@
59 59 iterobjexp="item.insideCode"
60 60 searchph="请输拼音..."
61 61 searchexp="this.insideCode"
62   - required >
  62 + <!--required -->
  63 + >
63 64 </sa-Select5>
64 65 </div>
65   - <!-- 隐藏块,显示验证信息 -->
66   - <div class="alert alert-danger well-sm" ng-show="myForm.cl1.$error.required">
67   - 车辆1必须选择
68   - </div>
  66 + <!--&lt;!&ndash; 隐藏块,显示验证信息 &ndash;&gt;-->
  67 + <!--<div class="alert alert-danger well-sm" ng-show="myForm.cl1.$error.required">-->
  68 + <!--车辆1必须选择-->
  69 + <!--</div>-->
69 70 </div>
70 71 <div class="form-group has-success has-feedback">
71 72 <label class="col-md-5 control-label">车辆2:</label>
72 73 <div class="col-md-7">
73 74 <sa-Select5 name="cl2"
74 75 model="ctrl.formData"
75   - cmaps="{'cl2.id': 'id'}"
  76 + cmaps="{'cl2.id': 'id', 'cl2.zbh': 'insideCode'}"
76 77 dcname="cl2.id"
77 78 icname="id"
78 79 dsparams="{{ {type: 'local', param: 'cl' } | json }}"
... ... @@ -90,28 +91,30 @@
90 91 <div class="col-md-7">
91 92 <sa-Select5 name="j1"
92 93 model="ctrl.formData"
93   - cmaps="{'j1.id' : 'id'}"
  94 + cmaps="{'j1.id' : 'id', 'j1.jobCode': 'jobCode', 'j1.name': 'personnelName'}"
94 95 dcname="j1.id"
95 96 icname="id"
96 97 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
97 98 iterobjname="item"
98   - iterobjexp="item.personnelName"
  99 + iterobjexp="item.personnelName + '(' + item.jobCode + ')'"
99 100 searchph="请输拼音..."
100 101 searchexp="this.personnelName"
101   - required >
  102 + <!--required -->
  103 + >
102 104 </sa-Select5>
103 105 </div>
104   - <!-- 隐藏块,显示验证信息 -->
105   - <div class="alert alert-danger well-sm" ng-show="myForm.j1.$error.required">
106   - 驾驶员必须选择
107   - </div>
  106 + <!--&lt;!&ndash; 隐藏块,显示验证信息 &ndash;&gt;-->
  107 + <!--<div class="alert alert-danger well-sm" ng-show="myForm.j1.$error.required">-->
  108 + <!--驾驶员必须选择-->
  109 + <!--</div>-->
108 110 </div>
  111 +
109 112 <div class="form-group has-success has-feedback">
110 113 <label class="col-md-5 control-label">售票员1:</label>
111 114 <div class="col-md-7">
112 115 <sa-Select5 name="s1"
113 116 model="ctrl.formData"
114   - cmaps="{'s1.id' : 'id'}"
  117 + cmaps="{'s1.id' : 'id', 's1.jobCode': 'jobCode', 's1.name': 'personnelName'}"
115 118 dcname="s1.id"
116 119 icname="id"
117 120 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ... @@ -129,7 +132,7 @@
129 132 <div class="col-md-7">
130 133 <sa-Select5 name="j2"
131 134 model="ctrl.formData"
132   - cmaps="{'j2.id' : 'id'}"
  135 + cmaps="{'j2.id' : 'id', 'j2.jobCode': 'jobCode', 'j2.name': 'personnelName'}"
133 136 dcname="j2.id"
134 137 icname="id"
135 138 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ... @@ -141,12 +144,13 @@
141 144 </sa-Select5>
142 145 </div>
143 146 </div>
  147 +
144 148 <div class="form-group has-success has-feedback">
145 149 <label class="col-md-5 control-label">售票员2:</label>
146 150 <div class="col-md-7">
147 151 <sa-Select5 name="s2"
148 152 model="ctrl.formData"
149   - cmaps="{'s2.id' : 'id'}"
  153 + cmaps="{'s2.id' : 'id', 's2.jobCode': 'jobCode', 's2.name': 'personnelName'}"
150 154 dcname="s2.id"
151 155 icname="id"
152 156 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ... @@ -164,7 +168,7 @@
164 168 <div class="col-md-7">
165 169 <sa-Select5 name="j3"
166 170 model="ctrl.formData"
167   - cmaps="{'j3.id' : 'id'}"
  171 + cmaps="{'j3.id' : 'id', 'j3.jobCode': 'jobCode', 'j3.name': 'personnelName'}"
168 172 dcname="j3.id"
169 173 icname="id"
170 174 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ... @@ -176,12 +180,13 @@
176 180 </sa-Select5>
177 181 </div>
178 182 </div>
  183 +
179 184 <div class="form-group has-success has-feedback">
180 185 <label class="col-md-5 control-label">售票员3:</label>
181 186 <div class="col-md-7">
182 187 <sa-Select5 name="s3"
183 188 model="ctrl.formData"
184   - cmaps="{'s3.id' : 'id'}"
  189 + cmaps="{'s3.id' : 'id', 's3.jobCode': 'jobCode', 's3.name': 'personnelName'}"
185 190 dcname="s3.id"
186 191 icname="id"
187 192 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/list.html
... ... @@ -71,7 +71,7 @@
71 71 <span ng-bind="$index + 1"></span>
72 72 </td>
73 73 <td>
74   - <!--<a ui-sref="schedulePlanInfoExtFormManage_edit({xlId: info.xlId, xlName: info.xlName, sd: info.scheduleDate, lpId: info.lpId, lpName: info.lpName})" class="btn btn-info btn-sm" > 修改 </a>-->
  74 + <a ui-sref="schedulePlanInfoExtFormManage_edit({xlId: info.xlId, xlName: info.xlName, sd: info.scheduleDate, lpId: info.lpId, lpName: info.lpName})" class="btn btn-info btn-sm" > 修改 </a>
75 75 </td>
76 76 <td>
77 77 <span ng-bind="info.xlName"></span>
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/module.js
... ... @@ -43,6 +43,45 @@ angular.module(&#39;ScheduleApp&#39;).factory(
43 43 var params = currentSearchCondition; // 查询条件
44 44 return service.groupInfo_ext.list(params).$promise;
45 45  
  46 + },
  47 +
  48 + /**
  49 + * 批量保存排班明细。
  50 + * @param rs
  51 + */
  52 + batchUpdatePlanInfo: function(rs) {
  53 + var deferred = $q.defer();
  54 +
  55 + // ajax调用
  56 + var success_counts = 0; // 成功数
  57 + var error_counts = 0; // 失败数
  58 +
  59 + angular.forEach(rs, function(obj) {
  60 + console.log(rs.length);
  61 + queryClass.save(obj,
  62 + function(value) {
  63 + if (value.status == 'ERROR') {
  64 + error_counts ++;
  65 + if (success_counts + error_counts == rs.length) {
  66 + deferred.reject();
  67 + }
  68 + } else {
  69 + success_counts ++;
  70 + if (success_counts + error_counts == rs.length) {
  71 + deferred.resolve();
  72 + }
  73 + }
  74 + },
  75 + function() {
  76 + error_counts ++;
  77 + if (success_counts + error_counts == rs.length) {
  78 + deferred.reject();
  79 + }
  80 + }
  81 + )
  82 + });
  83 +
  84 + return deferred.promise;
46 85 }
47 86  
48 87 };
... ... @@ -154,7 +193,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
154 193 [
155 194 'SchedulePlanReportExtManageService',
156 195 '$stateParams',
157   - function(service, $stateParams) {
  196 + '$state',
  197 + function(service, $stateParams, $state) {
158 198 var self = this;
159 199  
160 200 var SPlanInfo = service.getQueryClass();
... ... @@ -195,7 +235,14 @@ angular.module(&#39;ScheduleApp&#39;).controller(
195 235  
196 236 // 提交方法
197 237 self.submit = function() {
198   - // TODO:保存更新排班明细
  238 + service.batchUpdatePlanInfo(self.formData.planInfos).then(
  239 + function() {
  240 + $state.go("schedulePlanReportExtManage");
  241 + },
  242 + function() {
  243 + alert("保存失败!");
  244 + }
  245 + );
199 246  
200 247 };
201 248  
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/form.html
... ... @@ -110,7 +110,7 @@
110 110 cmaps="{'sheetname' : 'name'}"
111 111 dcname="sheetname"
112 112 icname="name"
113   - dsparams="{{ {type: 'local', ldata: ctrl.sheetnames} | json }}"
  113 + dsparams="{{ {type: 'passdata', ldata: ctrl.sheetnames} | json }}"
114 114 iterobjname="item"
115 115 iterobjexp="item.name"
116 116 searchph="请选择..."
... ...