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,6 +2,7 @@ package com.bsth.entity.schedule;
2 2
3 import com.bsth.entity.Line; 3 import com.bsth.entity.Line;
4 import com.fasterxml.jackson.annotation.JsonIgnore; 4 import com.fasterxml.jackson.annotation.JsonIgnore;
  5 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5 import org.apache.commons.lang3.BooleanUtils; 6 import org.apache.commons.lang3.BooleanUtils;
6 7
7 import javax.persistence.*; 8 import javax.persistence.*;
@@ -21,6 +22,7 @@ import java.util.List; @@ -21,6 +22,7 @@ import java.util.List;
21 @NamedAttributeNode("xl"), 22 @NamedAttributeNode("xl"),
22 }) 23 })
23 }) 24 })
  25 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
24 public class SchedulePlan extends BEntity { 26 public class SchedulePlan extends BEntity {
25 27
26 /** 主键Id */ 28 /** 主键Id */
src/main/java/com/bsth/entity/schedule/SchedulePlanInfo.java
1 package com.bsth.entity.schedule; 1 package com.bsth.entity.schedule;
2 2
3 import com.bsth.entity.Line; 3 import com.bsth.entity.Line;
4 -import com.bsth.entity.sys.SysUser;  
5 import com.bsth.service.schedule.rules.rerun.RerunRule_input; 4 import com.bsth.service.schedule.rules.rerun.RerunRule_input;
6 import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output; 5 import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output;
7 import org.apache.commons.lang3.StringUtils; 6 import org.apache.commons.lang3.StringUtils;
@@ -20,7 +19,7 @@ import java.util.List; @@ -20,7 +19,7 @@ import java.util.List;
20 */ 19 */
21 @Entity 20 @Entity
22 @Table(name = "bsth_c_s_sp_info") 21 @Table(name = "bsth_c_s_sp_info")
23 -public class SchedulePlanInfo { 22 +public class SchedulePlanInfo extends BEntity {
24 23
25 /** 主键Id */ 24 /** 主键Id */
26 @Id 25 @Id
@@ -138,20 +137,6 @@ public class SchedulePlanInfo { @@ -138,20 +137,6 @@ public class SchedulePlanInfo {
138 private String remark; 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 // @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) 140 // @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
156 // @JoinTable( 141 // @JoinTable(
157 // name = "bsth_c_s_sp_r_info", 142 // name = "bsth_c_s_sp_r_info",
@@ -468,10 +453,10 @@ public class SchedulePlanInfo { @@ -468,10 +453,10 @@ public class SchedulePlanInfo {
468 if (this.ttInfoName != null) ps.setString(34, this.ttInfoName); else ps.setNull(34, Types.VARCHAR); 453 if (this.ttInfoName != null) ps.setString(34, this.ttInfoName); else ps.setNull(34, Types.VARCHAR);
469 if (this.remark != null) ps.setString(35, this.remark); else ps.setNull(35, Types.VARCHAR); 454 if (this.remark != null) ps.setString(35, this.remark); else ps.setNull(35, Types.VARCHAR);
470 if (this.schedulePlan != null) ps.setLong(36, this.schedulePlan.getId()); else ps.setNull(36, Types.BIGINT); 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 public Long getId() { 462 public Long getId() {
@@ -762,38 +747,6 @@ public class SchedulePlanInfo { @@ -762,38 +747,6 @@ public class SchedulePlanInfo {
762 this.remark = remark; 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 public SchedulePlan getSchedulePlan() { 750 public SchedulePlan getSchedulePlan() {
798 return schedulePlan; 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,7 +164,7 @@ public interface SchedulePlanInfoService extends BService<SchedulePlanInfo, Long
164 this.spyGhs.addAll(Arrays.asList(spyGhs_temp.split(","))); 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 this.updateByName = rs.getString("updateUserName"); 168 this.updateByName = rs.getString("updateUserName");
169 this.ttInfoName = rs.getString("ttInfoName"); 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,7 +173,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
173 // 处理search 173 // 处理search
174 console.log("search:" + search); 174 console.log("search:" + search);
175 175
176 - if (dataModelType == 'ajax') { 176 + if (dataModelType == 'ajax' || dataModelType == 'local') {
177 scope[ctrlAs].$$data = []; 177 scope[ctrlAs].$$data = [];
178 for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) { 178 for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
179 var upTerm = search.toUpperCase(); 179 var upTerm = search.toUpperCase();
@@ -400,6 +400,25 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [ @@ -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 * 监控dsparams属性变化 422 * 监控dsparams属性变化
404 */ 423 */
405 attr.$observe("dsparams", function(value) { 424 attr.$observe("dsparams", function(value) {
@@ -411,6 +430,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [ @@ -411,6 +430,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
411 // {type: 'ajax', param: 'ajax查询参数对象', atype: 'ajax查询累西'} 430 // {type: 'ajax', param: 'ajax查询参数对象', atype: 'ajax查询累西'}
412 // {type: 'dic', param: 'dic名字'} 431 // {type: 'dic', param: 'dic名字'}
413 // {type: 'local', param: '本地存储type名字'} 432 // {type: 'local', param: '本地存储type名字'}
  433 + // {type: 'passdata', : 'ldata': '本地存储数据'}
414 434
415 if (obj.type == 'dic') { 435 if (obj.type == 'dic') {
416 dataModelType = 'dic'; 436 dataModelType = 'dic';
@@ -422,6 +442,9 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [ @@ -422,6 +442,9 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
422 } else if (obj.type == 'local') { 442 } else if (obj.type == 'local') {
423 dataModelType = 'local'; 443 dataModelType = 'local';
424 scope[ctrlAs].$$internal_local_data(obj.param); 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 } else { 448 } else {
426 throw new Error("dsparams参数格式异常=" + obj); 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,9 +22,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
22 controllerAs: '$saPlanInfoEditCtrl', 22 controllerAs: '$saPlanInfoEditCtrl',
23 bindToController: true, 23 bindToController: true,
24 controller: function() { 24 controller: function() {
25 - var self = this; 25 + //var self = this;
26 26
27 - // TODO:  
28 }, 27 },
29 28
30 compile: function(tElem, tAttrs) { 29 compile: function(tElem, tAttrs) {
@@ -42,8 +41,20 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -42,8 +41,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
42 var old_cl = {}; // key:{车辆id_车辆自编号},value:所在list下标数组 41 var old_cl = {}; // key:{车辆id_车辆自编号},value:所在list下标数组
43 var old_j = {}; // key:{驾驶员id_姓名_工号}, value:所在list下标数组 42 var old_j = {}; // key:{驾驶员id_姓名_工号}, value:所在list下标数组
44 var old_s = {}; // key:{售票员id_姓名_工号}, value:所在list下标数组 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 return { 59 return {
49 pre: function(scope, element, attr) { 60 pre: function(scope, element, attr) {
@@ -51,33 +62,361 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -51,33 +62,361 @@ angular.module(&#39;ScheduleApp&#39;).directive(
51 }, 62 },
52 post: function(scope, element, attr) { 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 // -------------- 监控function ---------------// 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 scope.$watch( 367 scope.$watch(
56 function() { 368 function() {
57 return scope[ctrlAs].ds; 369 return scope[ctrlAs].ds;
58 }, 370 },
59 function(newValue, oldValue) { 371 function(newValue, oldValue) {
60 if (newValue && newValue.length > 0) { 372 if (newValue && newValue.length > 0) {
  373 +
  374 + var j1 = newValue[0].j;
  375 +
61 angular.forEach(newValue, function(obj, index) { 376 angular.forEach(newValue, function(obj, index) {
62 var k1 = obj.cl + "_" + obj.clZbh; 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 old_cl[k1] = []; 382 old_cl[k1] = [];
68 } 383 }
69 - if (!old_j.k2) { 384 + if (!old_j[k2] && k2) {
70 old_j[k2] = []; 385 old_j[k2] = [];
71 } 386 }
72 - if (!old_s.k3) { 387 + if (!old_s[k3] && k3) {
73 old_s[k3] = []; 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,6 +8,7 @@
8 <tr role="row" class="heading"> 8 <tr role="row" class="heading">
9 <th style="width: 50px;">序号</th> 9 <th style="width: 50px;">序号</th>
10 <th style="width: 80px;">发车时间</th> 10 <th style="width: 80px;">发车时间</th>
  11 + <th style="width: 70px;">车辆</th>
11 <th style="width: 60px;">驾驶员</th> 12 <th style="width: 60px;">驾驶员</th>
12 <th style="width: 60px;">售票员</th> 13 <th style="width: 60px;">售票员</th>
13 <th style="width: 100px;">停车场</th> 14 <th style="width: 100px;">停车场</th>
@@ -25,6 +26,11 @@ @@ -25,6 +26,11 @@
25 </td> 26 </td>
26 <td> 27 <td>
27 <a href="#"> 28 <a href="#">
  29 + <span ng-bind="info.clZbh"></span>
  30 + </a>
  31 + </td>
  32 + <td>
  33 + <a href="#">
28 <span ng-bind="info.jName"></span> 34 <span ng-bind="info.jName"></span>
29 </a> 35 </a>
30 </td> 36 </td>
@@ -34,9 +40,12 @@ @@ -34,9 +40,12 @@
34 </a> 40 </a>
35 </td> 41 </td>
36 <td> 42 <td>
37 - <a href="#"> 43 + <a href="#" ng-if="info.bcType == 'in'">
38 <span ng-bind="info.zdzName"></span> 44 <span ng-bind="info.zdzName"></span>
39 </a> 45 </a>
  46 + <a href="#" ng-if="info.bcType == 'out'">
  47 + <span ng-bind="info.qdzName"></span>
  48 + </a>
40 </td> 49 </td>
41 </tr> 50 </tr>
42 </tbody> 51 </tbody>
src/main/resources/static/pages/scheduleApp/module/common/main.js
@@ -68,11 +68,11 @@ ScheduleApp.factory(&#39;DataStore&#39;, [ @@ -68,11 +68,11 @@ ScheduleApp.factory(&#39;DataStore&#39;, [
68 dataMap.cl = result.data.data; 68 dataMap.cl = result.data.data;
69 angular.forEach(result.data.data, function(obj) { 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,7 +82,7 @@ ScheduleApp.factory(&#39;DataStore&#39;, [
82 }).then(function(result) { 82 }).then(function(result) {
83 // 简拼数据 83 // 简拼数据
84 dataMap.ry = result.data.data; 84 dataMap.ry = result.data.data;
85 - angular.forEach(dataMap.ryInfos, function(obj) { 85 + angular.forEach(result.data.data, function(obj) {
86 // 全拼 86 // 全拼
87 obj["$fullChars"] = pinyin.getFullChars(obj.personnelName + "-" + obj.jobCode); 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,7 +1478,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1478 // 处理search 1478 // 处理search
1479 console.log("search:" + search); 1479 console.log("search:" + search);
1480 1480
1481 - if (dataModelType == 'ajax') { 1481 + if (dataModelType == 'ajax' || dataModelType == 'local') {
1482 scope[ctrlAs].$$data = []; 1482 scope[ctrlAs].$$data = [];
1483 for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) { 1483 for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
1484 var upTerm = search.toUpperCase(); 1484 var upTerm = search.toUpperCase();
@@ -1705,6 +1705,25 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [ @@ -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 * 监控dsparams属性变化 1727 * 监控dsparams属性变化
1709 */ 1728 */
1710 attr.$observe("dsparams", function(value) { 1729 attr.$observe("dsparams", function(value) {
@@ -1716,6 +1735,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [ @@ -1716,6 +1735,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1716 // {type: 'ajax', param: 'ajax查询参数对象', atype: 'ajax查询累西'} 1735 // {type: 'ajax', param: 'ajax查询参数对象', atype: 'ajax查询累西'}
1717 // {type: 'dic', param: 'dic名字'} 1736 // {type: 'dic', param: 'dic名字'}
1718 // {type: 'local', param: '本地存储type名字'} 1737 // {type: 'local', param: '本地存储type名字'}
  1738 + // {type: 'passdata', : 'ldata': '本地存储数据'}
1719 1739
1720 if (obj.type == 'dic') { 1740 if (obj.type == 'dic') {
1721 dataModelType = 'dic'; 1741 dataModelType = 'dic';
@@ -1727,6 +1747,9 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [ @@ -1727,6 +1747,9 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1727 } else if (obj.type == 'local') { 1747 } else if (obj.type == 'local') {
1728 dataModelType = 'local'; 1748 dataModelType = 'local';
1729 scope[ctrlAs].$$internal_local_data(obj.param); 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 } else { 1753 } else {
1731 throw new Error("dsparams参数格式异常=" + obj); 1754 throw new Error("dsparams参数格式异常=" + obj);
1732 } 1755 }
@@ -4302,9 +4325,8 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -4302,9 +4325,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4302 controllerAs: '$saPlanInfoEditCtrl', 4325 controllerAs: '$saPlanInfoEditCtrl',
4303 bindToController: true, 4326 bindToController: true,
4304 controller: function() { 4327 controller: function() {
4305 - var self = this; 4328 + //var self = this;
4306 4329
4307 - // TODO:  
4308 }, 4330 },
4309 4331
4310 compile: function(tElem, tAttrs) { 4332 compile: function(tElem, tAttrs) {
@@ -4322,8 +4344,20 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -4322,8 +4344,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4322 var old_cl = {}; // key:{车辆id_车辆自编号},value:所在list下标数组 4344 var old_cl = {}; // key:{车辆id_车辆自编号},value:所在list下标数组
4323 var old_j = {}; // key:{驾驶员id_姓名_工号}, value:所在list下标数组 4345 var old_j = {}; // key:{驾驶员id_姓名_工号}, value:所在list下标数组
4324 var old_s = {}; // key:{售票员id_姓名_工号}, value:所在list下标数组 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 return { 4362 return {
4329 pre: function(scope, element, attr) { 4363 pre: function(scope, element, attr) {
@@ -4331,33 +4365,361 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -4331,33 +4365,361 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4331 }, 4365 },
4332 post: function(scope, element, attr) { 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 // -------------- 监控function ---------------// 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 scope.$watch( 4670 scope.$watch(
4336 function() { 4671 function() {
4337 return scope[ctrlAs].ds; 4672 return scope[ctrlAs].ds;
4338 }, 4673 },
4339 function(newValue, oldValue) { 4674 function(newValue, oldValue) {
4340 if (newValue && newValue.length > 0) { 4675 if (newValue && newValue.length > 0) {
  4676 +
  4677 + var j1 = newValue[0].j;
  4678 +
4341 angular.forEach(newValue, function(obj, index) { 4679 angular.forEach(newValue, function(obj, index) {
4342 var k1 = obj.cl + "_" + obj.clZbh; 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 old_cl[k1] = []; 4685 old_cl[k1] = [];
4348 } 4686 }
4349 - if (!old_j.k2) { 4687 + if (!old_j[k2] && k2) {
4350 old_j[k2] = []; 4688 old_j[k2] = [];
4351 } 4689 }
4352 - if (!old_s.k3) { 4690 + if (!old_s[k3] && k3) {
4353 old_s[k3] = []; 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,7 +51,7 @@
51 <div class="col-md-7"> 51 <div class="col-md-7">
52 <sa-Select5 name="cl1" 52 <sa-Select5 name="cl1"
53 model="ctrl.formData" 53 model="ctrl.formData"
54 - cmaps="{'cl1.id': 'id'}" 54 + cmaps="{'cl1.id': 'id', 'cl1.zbh': 'insideCode'}"
55 dcname="cl1.id" 55 dcname="cl1.id"
56 icname="id" 56 icname="id"
57 dsparams="{{ {type: 'local', param: 'cl' } | json }}" 57 dsparams="{{ {type: 'local', param: 'cl' } | json }}"
@@ -59,20 +59,21 @@ @@ -59,20 +59,21 @@
59 iterobjexp="item.insideCode" 59 iterobjexp="item.insideCode"
60 searchph="请输拼音..." 60 searchph="请输拼音..."
61 searchexp="this.insideCode" 61 searchexp="this.insideCode"
62 - required > 62 + <!--required -->
  63 + >
63 </sa-Select5> 64 </sa-Select5>
64 </div> 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 </div> 70 </div>
70 <div class="form-group has-success has-feedback"> 71 <div class="form-group has-success has-feedback">
71 <label class="col-md-5 control-label">车辆2:</label> 72 <label class="col-md-5 control-label">车辆2:</label>
72 <div class="col-md-7"> 73 <div class="col-md-7">
73 <sa-Select5 name="cl2" 74 <sa-Select5 name="cl2"
74 model="ctrl.formData" 75 model="ctrl.formData"
75 - cmaps="{'cl2.id': 'id'}" 76 + cmaps="{'cl2.id': 'id', 'cl2.zbh': 'insideCode'}"
76 dcname="cl2.id" 77 dcname="cl2.id"
77 icname="id" 78 icname="id"
78 dsparams="{{ {type: 'local', param: 'cl' } | json }}" 79 dsparams="{{ {type: 'local', param: 'cl' } | json }}"
@@ -90,28 +91,30 @@ @@ -90,28 +91,30 @@
90 <div class="col-md-7"> 91 <div class="col-md-7">
91 <sa-Select5 name="j1" 92 <sa-Select5 name="j1"
92 model="ctrl.formData" 93 model="ctrl.formData"
93 - cmaps="{'j1.id' : 'id'}" 94 + cmaps="{'j1.id' : 'id', 'j1.jobCode': 'jobCode', 'j1.name': 'personnelName'}"
94 dcname="j1.id" 95 dcname="j1.id"
95 icname="id" 96 icname="id"
96 dsparams="{{ {type: 'local', param: 'ry' } | json }}" 97 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
97 iterobjname="item" 98 iterobjname="item"
98 - iterobjexp="item.personnelName" 99 + iterobjexp="item.personnelName + '(' + item.jobCode + ')'"
99 searchph="请输拼音..." 100 searchph="请输拼音..."
100 searchexp="this.personnelName" 101 searchexp="this.personnelName"
101 - required > 102 + <!--required -->
  103 + >
102 </sa-Select5> 104 </sa-Select5>
103 </div> 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 </div> 110 </div>
  111 +
109 <div class="form-group has-success has-feedback"> 112 <div class="form-group has-success has-feedback">
110 <label class="col-md-5 control-label">售票员1:</label> 113 <label class="col-md-5 control-label">售票员1:</label>
111 <div class="col-md-7"> 114 <div class="col-md-7">
112 <sa-Select5 name="s1" 115 <sa-Select5 name="s1"
113 model="ctrl.formData" 116 model="ctrl.formData"
114 - cmaps="{'s1.id' : 'id'}" 117 + cmaps="{'s1.id' : 'id', 's1.jobCode': 'jobCode', 's1.name': 'personnelName'}"
115 dcname="s1.id" 118 dcname="s1.id"
116 icname="id" 119 icname="id"
117 dsparams="{{ {type: 'local', param: 'ry' } | json }}" 120 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
@@ -129,7 +132,7 @@ @@ -129,7 +132,7 @@
129 <div class="col-md-7"> 132 <div class="col-md-7">
130 <sa-Select5 name="j2" 133 <sa-Select5 name="j2"
131 model="ctrl.formData" 134 model="ctrl.formData"
132 - cmaps="{'j2.id' : 'id'}" 135 + cmaps="{'j2.id' : 'id', 'j2.jobCode': 'jobCode', 'j2.name': 'personnelName'}"
133 dcname="j2.id" 136 dcname="j2.id"
134 icname="id" 137 icname="id"
135 dsparams="{{ {type: 'local', param: 'ry' } | json }}" 138 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
@@ -141,12 +144,13 @@ @@ -141,12 +144,13 @@
141 </sa-Select5> 144 </sa-Select5>
142 </div> 145 </div>
143 </div> 146 </div>
  147 +
144 <div class="form-group has-success has-feedback"> 148 <div class="form-group has-success has-feedback">
145 <label class="col-md-5 control-label">售票员2:</label> 149 <label class="col-md-5 control-label">售票员2:</label>
146 <div class="col-md-7"> 150 <div class="col-md-7">
147 <sa-Select5 name="s2" 151 <sa-Select5 name="s2"
148 model="ctrl.formData" 152 model="ctrl.formData"
149 - cmaps="{'s2.id' : 'id'}" 153 + cmaps="{'s2.id' : 'id', 's2.jobCode': 'jobCode', 's2.name': 'personnelName'}"
150 dcname="s2.id" 154 dcname="s2.id"
151 icname="id" 155 icname="id"
152 dsparams="{{ {type: 'local', param: 'ry' } | json }}" 156 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
@@ -164,7 +168,7 @@ @@ -164,7 +168,7 @@
164 <div class="col-md-7"> 168 <div class="col-md-7">
165 <sa-Select5 name="j3" 169 <sa-Select5 name="j3"
166 model="ctrl.formData" 170 model="ctrl.formData"
167 - cmaps="{'j3.id' : 'id'}" 171 + cmaps="{'j3.id' : 'id', 'j3.jobCode': 'jobCode', 'j3.name': 'personnelName'}"
168 dcname="j3.id" 172 dcname="j3.id"
169 icname="id" 173 icname="id"
170 dsparams="{{ {type: 'local', param: 'ry' } | json }}" 174 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
@@ -176,12 +180,13 @@ @@ -176,12 +180,13 @@
176 </sa-Select5> 180 </sa-Select5>
177 </div> 181 </div>
178 </div> 182 </div>
  183 +
179 <div class="form-group has-success has-feedback"> 184 <div class="form-group has-success has-feedback">
180 <label class="col-md-5 control-label">售票员3:</label> 185 <label class="col-md-5 control-label">售票员3:</label>
181 <div class="col-md-7"> 186 <div class="col-md-7">
182 <sa-Select5 name="s3" 187 <sa-Select5 name="s3"
183 model="ctrl.formData" 188 model="ctrl.formData"
184 - cmaps="{'s3.id' : 'id'}" 189 + cmaps="{'s3.id' : 'id', 's3.jobCode': 'jobCode', 's3.name': 'personnelName'}"
185 dcname="s3.id" 190 dcname="s3.id"
186 icname="id" 191 icname="id"
187 dsparams="{{ {type: 'local', param: 'ry' } | json }}" 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,7 +71,7 @@
71 <span ng-bind="$index + 1"></span> 71 <span ng-bind="$index + 1"></span>
72 </td> 72 </td>
73 <td> 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 </td> 75 </td>
76 <td> 76 <td>
77 <span ng-bind="info.xlName"></span> 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,6 +43,45 @@ angular.module(&#39;ScheduleApp&#39;).factory(
43 var params = currentSearchCondition; // 查询条件 43 var params = currentSearchCondition; // 查询条件
44 return service.groupInfo_ext.list(params).$promise; 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,7 +193,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
154 [ 193 [
155 'SchedulePlanReportExtManageService', 194 'SchedulePlanReportExtManageService',
156 '$stateParams', 195 '$stateParams',
157 - function(service, $stateParams) { 196 + '$state',
  197 + function(service, $stateParams, $state) {
158 var self = this; 198 var self = this;
159 199
160 var SPlanInfo = service.getQueryClass(); 200 var SPlanInfo = service.getQueryClass();
@@ -195,7 +235,14 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -195,7 +235,14 @@ angular.module(&#39;ScheduleApp&#39;).controller(
195 235
196 // 提交方法 236 // 提交方法
197 self.submit = function() { 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,7 +110,7 @@
110 cmaps="{'sheetname' : 'name'}" 110 cmaps="{'sheetname' : 'name'}"
111 dcname="sheetname" 111 dcname="sheetname"
112 icname="name" 112 icname="name"
113 - dsparams="{{ {type: 'local', ldata: ctrl.sheetnames} | json }}" 113 + dsparams="{{ {type: 'passdata', ldata: ctrl.sheetnames} | json }}"
114 iterobjname="item" 114 iterobjname="item"
115 iterobjexp="item.name" 115 iterobjexp="item.name"
116 searchph="请选择..." 116 searchph="请选择..."