Commit b93c22a4167492adea27a6404d37f32effcedfc3

Authored by yiming
2 parents 20e6b834 79aff31e

Merge remote-tracking branch 'origin/lggj' into lggj

src/main/java/com/bsth/data/pilot80/PilotReport.java
... ... @@ -13,6 +13,7 @@ import com.bsth.entity.realcontrol.LineConfig;
13 13 import com.bsth.entity.realcontrol.ScheduleRealInfo;
14 14 import com.bsth.repository.directive.D80Repository;
15 15 import com.bsth.repository.directive.DC0A4Repository;
  16 +import com.bsth.service.SystemParamService;
16 17 import com.bsth.service.directive.DirectiveService;
17 18 import com.bsth.util.HttpClientUtils;
18 19 import com.bsth.websocket.handler.SendUtils;
... ... @@ -53,6 +54,8 @@ public class PilotReport {
53 54 @Autowired
54 55 GpsStatusManager gpsStatusManager;
55 56  
  57 + @Autowired
  58 + private SystemParamService systemParamService;
56 59 private static ConcurrentHashMap<Integer, D80> d80Maps;
57 60  
58 61 /**
... ... @@ -101,7 +104,7 @@ public class PilotReport {
101 104 //报警请求
102 105 case 0x10:
103 106 try {
104   - String url = "http://58.34.52.130:9103/dataDockingApi/accident/saveAccident?";
  107 + String url = systemParamService.getValue("url.yjbj")+"dataDockingApi/accident/saveAccident?";
105 108 url = url + "accidentTime=" + new Date().getTime() + "&nbbm=" + nbbm;
106 109 logger.info("url===="+url);
107 110 String res = HttpClientUtils.get(url).toString();
... ...
src/main/java/com/bsth/entity/sys/SysUser.java
... ... @@ -3,6 +3,7 @@ package com.bsth.entity.sys;
3 3 import com.fasterxml.jackson.annotation.JsonIgnore;
4 4 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5 5 import org.joda.time.DateTime;
  6 +import org.springframework.format.annotation.DateTimeFormat;
6 7  
7 8 import javax.persistence.*;
8 9 import java.io.Serializable;
... ... @@ -36,10 +37,12 @@ public class SysUser implements Serializable {
36 37  
37 38 @Column(name = "update_date", columnDefinition = "timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
38 39 private Date updateDate;
39   -
  40 +
  41 + @DateTimeFormat(pattern = "yyyy-MM-dd")
40 42 private Date lastLoginDate;
41 43  
42 44 /** 最近密码更新时间 */
  45 + @DateTimeFormat(pattern = "yyyy-MM-dd")
43 46 private Date lastPwdDate;
44 47 /** 密码有效期 */
45 48 private Integer pwdValidPeriod;
... ...
src/main/java/com/bsth/service/zndd/impl/LoggerZnddServiceImpl.java
... ... @@ -217,7 +217,7 @@ public class LoggerZnddServiceImpl extends BaseServiceImpl&lt;LoggerZndd, Integer&gt;
217 217 for(String line : lineArray){
218 218 List<ScheduleRealInfo> schList = dayOfSchedule.findByLineCode(line);
219 219 for(ScheduleRealInfo sc : schList){
220   - if (sc.getStatus() == 0){
  220 + if (sc.getStatus() == 0 || sc.getStatus() == 1){
221 221 xlNames += sc.getXlName()+",";
222 222 break;
223 223 }
... ...
src/main/resources/datatools/config-test.properties
... ... @@ -15,13 +15,13 @@ datatools.kvars_dbdname=lg_control
15 15  
16 16 # 3、上传数据配置信息
17 17 # 上传文件目录配置(根据不同的环境需要修正)
18   -datatools.fileupload_dir=/home/bsth_control_u_d_files
  18 +datatools.fileupload_dir=/Users/xu/resource/project_code/runtime_temp/bsth_control_u_d_files
19 19 # ktr转换文件,中配置的错误输出目录(根据不同的环境需要修正)
20   -datatools.trans_errordir=/home/bsth_control_u_d_files/erroroutput
  20 +datatools.trans_errordir=/Users/xu/resource/project_code/runtime_temp/bsth_control_u_d_files/erroroutput
21 21 # 临时输出文件目录
22   -datatools.trans_tempdir=/home/bsth_control_u_d_files/temp
  22 +datatools.trans_tempdir=/Users/xu/resource/project_code/runtime_temp/bsth_control_u_d_files/temp
23 23 # 模版文件目录
24   -datatools.trans_templatedir=/home/bsth_control_u_d_files/template
  24 +datatools.trans_templatedir=/Users/xu/resource/project_code/runtime_temp/bsth_control_u_d_files/template
25 25  
26 26 ##---------------------------- 导入数据ktr ----------------------------##
27 27 # 车辆信息导入ktr转换
... ... @@ -57,7 +57,7 @@ datatools.schedulerule_datainputktr=/datatools/ktrs/scheduleRuleDataInput.ktr
57 57  
58 58 # 4、数据导出配置信息
59 59 # 导出数据文件目录配置(根据不同的环境需要修正)
60   -datatools.fileoutput_dir=/home/bsth_control_u_d_files
  60 +datatools.fileoutput_dir=/Users/xu/resource/project_code/runtime_temp/bsth_control_u_d_files
61 61  
62 62 ##---------------------------- 导出数据ktr -----------------------------##
63 63 # 车辆信息导出ktr转换
... ...
src/main/resources/static/pages/base/timesmodel/add.html
... ... @@ -38,7 +38,7 @@
38 38  
39 39 <div class="actions">
40 40 <div class="btn-group btn-group-devided" data-toggle="buttons">
41   - <a class="btn btn-circle blue openHaveSkb" href="javascript:;" data-pjax><i class="fa fa-check"></i> 打开现有时刻表明细</a>
  41 + <a class="btn btn-circle blue openHaveSkb" href="javascript:;" data-pjax><i class="fa fa-check"></i> 排班诊断</a>
42 42 </div>
43 43 <div class="btn-group btn-group-devided" data-toggle="buttons">
44 44 <a class="btn btn-circle default" href="/pages/base/timesmodel/index.html" style="float: right;padding: 4px 23px;" data-pjax=""><i class="fa fa-reply"></i> 退出</a>
... ...
src/main/resources/static/pages/base/timesmodel/gantt.html
... ... @@ -50,7 +50,7 @@
50 50 <!-- actions 组件START -->
51 51 <div class="actions">
52 52 <div class="btn-group btn-group-devided countbtn" data-toggle="buttons">
53   - <a class="btn btn-circle blue countAdd" href="javascript:;" data-pjax><i class="fa fa-database"></i> 统计数据</a>
  53 + <a class="btn btn-circle blue countAdd" href="javascript:;" data-pjax><i class="fa fa-database"></i> 排班统计</a>
54 54 </div>
55 55 <div class="btn-group btn-group-devided parambtn" data-toggle="buttons">
56 56 <a class="btn btn-circle blue paramAdd" href="javascript:;" data-pjax><i class="fa fa-list-ol" aria-hidden="true"></i> 重新生成</a>
... ...
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
1   -/**
2   - * @description : (TODO) 表单的导航向导、验证、提交
3   - */
4   -
5   -var SKBFormWizard = function() {
6   -
7   - var bxrcGs = [ {'type':'六工一休','hoursV':6.66, 'minueV':'6:40'},
8   - {'type':'五工一休','hoursV':6.85, 'minueV':'6:51'},
9   - {'type':'四工一休','hoursV':7.14, 'minueV':'7:08'},
10   - {'type':'三工一休','hoursV':7.61, 'minueV':'7:37'},
11   - {'type':'二工一休','hoursV':8.57, 'minueV':'8:34'},
12   - {'type':'一工一休','hoursV':11.42, 'minueV':'11:25'},
13   - {'type':'五工二休','hoursV':7.99, 'minueV':'8:00'},
14   - {'type':'无工休', 'hoursV':5.43, 'minueV':'5:43'}];
15   -
16   - /**
17   - * @description : (TODO) 获取停站时间.
18   - *
19   - * @param [o--当前班次对象;d--班次数组对象;sj--当前班次时间]
20   - *
21   - * @return 返回相邻班次的停站时间.
22   - * */
23   - function gettzsj(o,d,sj) {
24   - // 定义停站时间.
25   - var tzsj = 0;
26   - // 变量班次数组对象.
27   - for(var i = 0 ;i<d.length;i++) {
28   - // 判断是否为同一个路牌.
29   - if(o.lp.lpNo == d[i].lp.lpNo && o.lp.id == d[i].lp.id) {
30   - // 判断是否为当前班次的下一个班次.
31   - if(d[i].fcno - o.fcno ==1){
32   - // 计算停站时间.
33   - tzsj = (strToTime(d[i].fcsj) -strToTime(sj)) / 60000;
34   - continue;
35   - }
36   - }
37   - }
38   - // 返回停站时间.
39   - return tzsj;
40   - }
41   -
42   - /**
43   - * @description : (TODO) 是否切换线路值转换.
44   - *
45   - * @param [d--是否切换线路原始值].
46   - *
47   - * @return 返回一个是否切换线路值的转换.
48   - * */
49   - function isSwitchXlTodm(d) {
50   - var rstr = 0;
51   - if(d)
52   - rstr = 1;
53   - return rstr;
54   - }
55   -
56   - /**
57   - * @description : (TODO) 是否分班值转换.
58   - *
59   - * @param [d--是否分班原始值].
60   - *
61   - * @return 返回一个是否分班值的转换.
62   - * */
63   - function isfbTodm(b) {
64   - var rstr = 0;
65   - if(b)
66   - rstr = 1;
67   - return rstr;
68   - }
69   -
70   - /**
71   - * @description : (TODO) 获取某个班次的到达时间字符串.
72   - *
73   - * @param [tStr--发车时间格式字符串;bcsj--班次历时].
74   - *
75   - * @return 返回一个某个班次的到达时间字符串.
76   - * */
77   - function getddsj(tStr,bcsj) {
78   - // 定义当前时间对象.
79   - var date = new Date();
80   - // 分割字符串.
81   - var _str = tStr.split(':');
82   - // 设值小时.
83   - date.setHours(parseInt(_str[0]));
84   - // 设值分钟.
85   - date.setMinutes(parseInt(_str[1]) + bcsj);
86   - // 返回到达时间字符串.
87   - return getTimeStr(date);
88   - }
89   -
90   - /**
91   - * @description : (TODO) 时间点格式字符串转时间对象.
92   - *
93   - * @param [t--时间点格式字符串]
94   - *
95   - * @return 返回一个时间点格式字符串转时间对象.
96   - * */
97   - var strToTime = function(t) {
98   - // 定义当前时间对象.
99   - var d = new Date;
100   - // 判断是否为空.
101   - if(t) {
102   - // 分割字符串.
103   - var _str = t.split(':');
104   - // 设值小时.
105   - d.setHours(parseInt(_str[0]));
106   - // 设值分钟.
107   - d.setMinutes(parseInt(_str[1]));
108   - }
109   - // 返回一个时间点格式字符串转时间对象.
110   - return d;
111   - }
112   -
113   - /**
114   - * @description : (TODO) 时间对象转时间点格式字符串.
115   - *
116   - * @param [t--时间对象]
117   - *
118   - * @return 返回一个时间对象转时间点格式字符串.
119   - * */
120   - function getTimeStr(t) {
121   - // 定义返回值.
122   - var _str = '';
123   - // 判断是否为空.
124   - if(t) {
125   - // 重新赋值.
126   - _str = ((t.getHours()<10? '0' + t.getHours() : t.getHours()) == '00' ? '24' :(t.getHours()<10? '0' + t.getHours() : t.getHours()))
127   - +':'
128   - +(t.getMinutes()<10? '0' + t.getMinutes() : t.getMinutes());
129   - }
130   - // 返回时间对象转时间点格式字符串.
131   - return _str;
132   - }
133   -
134   - /**
135   - * @description : (TODO) 方向值转换.
136   - *
137   - * @param [d--方向原始值].
138   - *
139   - * @return 返回一个方向值转换.
140   - * */
141   - function dmToDh(t) {
142   - // 定义返回值.
143   - var reslStr = '';
144   - // 上行.
145   - if(t=='0')
146   - reslStr = 'relationshipGraph-up';
147   - // 下行.
148   - else if(t=='1')
149   - reslStr = 'relationshipGraph-down';
150   - // 返回一个方向值转换.
151   - return reslStr;
152   - }
153   -
154   - /**
155   - * @description : (TODO) 获取线路标准详情.
156   - *
157   - * @param [lineId--线路ID;cb--回调函数].
158   - *
159   - * @return 返回线路标准详情.
160   - *
161   - * @status OK.
162   - * */
163   - var getLineInfo = function(lineId,cb) {
164   - // 1、get异步请求.根据线路ID查询详情.
165   - $get('/lineInformation',{'line.id_eq':lineId},function(result) {
166   - // 2、返回线路标准详情.
167   - return cb && cb(result);
168   - });
169   - }
170   -
171   - /**
172   - * @description : (TODO) 获取所有的停车场详情.
173   - *
174   - * @param [cb--回调函数].
175   - *
176   - * @return 返回所有的停车场详情.
177   - *
178   - * @status OK.
179   - * */
180   - var gettccInfo = function (cb) {
181   - // 1、get异步请求.获取所有的停车场详情.
182   - $get('/carpark/all',null, function(cd){
183   - // 2、返回所有的停车场详情.
184   - return cb && cb(cd);
185   - });
186   - }
187   -
188   - /**
189   - * @description : (TODO) 时间格式字符串转时间对象.
190   - *
191   - * @param [time--时间格式字符串].
192   - *
193   - * @return 返回一个时间对象.
194   - *
195   - * @status OK.
196   - * */
197   - var getDateTime = function(time) {
198   - // 1、定义一个时间对象.
199   - var dateTime = new Date();
200   - // 2、判断参数是否为空或者为undefined.
201   - if(time !=null && time !='' && typeof(time) !='undefined') {
202   - // 3、给时间对象重新赋值.
203   - dateTime = new Date(Date.parse(time.replace(/-/g, "/")));
204   - }
205   - // 4、返回时间对象.
206   - return dateTime;
207   - }
208   -
209   - /**
210   - * @description : (TODO) 客流方式填充表单时.根据表单参数封装时间段内的车辆数.
211   - *
212   - * @param : [map--表单参数]
213   - *
214   - * @returns 返回一个根据表单参数封装时间段内的车辆数数组.
215   - *
216   - * @status OK.
217   - * */
218   - function getsjdArr(map) {
219   - // 1、获取营运的开始与结束时间点.
220   - var seMap = getStartAndEndDate(map);
221   - // 2、返回一个根据表单参数封装时间段内的车辆数数组.
222   - return [{'num':0,'time':seMap.s + '-' + map.earlyStartTime},// 早高峰之前时间段内的车辆.
223   - {'num':0,'time':map.earlyStartTime + '-' + map.earlyEndTime}, // 早高峰时间段内的车辆.
224   - {'num':0,'time':map.earlyEndTime + '-' + map.lateStartTime},// 高峰之间时间段内的车辆
225   - {'num':0,'time':map.lateStartTime + '-' + map.lateEndTime},// 晚高峰时间段内的车辆.
226   - {'num':0,'time':map.lateEndTime + '-' + seMap.e}];// 晚高峰之后时间段内的车辆.
227   - }
228   -
229   - /**
230   - * @description : (TODO) 获取最小时间(字符串).
231   - *
232   - * @param [d1--时间1;d2--时间2].
233   - *
234   - * @return 返回一个最小时间(字符串).
235   - *
236   - * @status OK.
237   - * */
238   - function getMinDate(d1,d2) {
239   - // 1、定义返回字符串.
240   - var str = '';
241   - // 2、判断时间大小.
242   - if(strToTime(d1)>strToTime(d2))
243   - str = d2;
244   - else
245   - str = d1;
246   - // 3、返回最小时间(字符串).
247   - return str;
248   - }
249   -
250   - /**
251   - * @description : (TODO) 获取最大时间(字符串).
252   - *
253   - * @param [d1--时间1;d2--时间2].
254   - *
255   - * @return 返回一个最大时间(字符串).
256   - *
257   - * @status OK.
258   - * */
259   - function getMaxDate(d1,d2) {
260   - // 1、定义返回时间字符串.
261   - var str = '';
262   - // 2、判断时间大小.
263   - if(strToTime(d1)>strToTime(d2))
264   - str = d1;
265   - else
266   - str = d2;
267   - // 3、返回一个最大时间(字符串).
268   - return str;
269   - }
270   -
271   - /**
272   - * @description : (TODO) 判断是否这时间段内.
273   - *
274   - * @param [st--开始时间;ed--结束时间;sj--当前判断的时间]
275   - *
276   - * @return 返回一个布尔值.
277   - *
278   - * @status OK.
279   - * */
280   - function issjd(st,ed,sj) {
281   - // 1、定义返回值.
282   - var tag = false;
283   - // 2、判断时间大小.
284   - if(sj<=ed && sj>=st)
285   - // 3、重新赋值返回值.
286   - tag = true;
287   - // 4、返回判断结果布尔值.
288   - return tag;
289   - }
290   -
291   - /**
292   - * @description : (TODO) 获取客流数据.
293   - *
294   - * @params [url--请求地址;data--请求参数;cb--回调函数]
295   - *
296   - * */
297   - function getJSONP(url, data, cb) {
298   - $.ajax({
299   - url : url,
300   - type : "GET",
301   - dataType : 'jsonp',
302   - jsonp : 'jsoncallback',
303   - data : data,
304   - success : cb
305   - });
306   - }
307   -
308   - /**
309   - * 判断某个时间是否在指定时间段内
310   - * @param start 开始时间
311   - * @param end 结束时间
312   - * @param t 指定时间
313   - * @param isWrapTime 是否重新包装时间
314   - */
315   - function issjd_extend(start, end, t, flag) {
316   - var m_start = moment(start);
317   - var m_end = moment(end);
318   - var m_t = moment(t);
319   -
320   - if (flag) {
321   - // 重新构造时间,保留时间的小时,分钟,秒,忽略年月日
322   - var date_wrap_prefix = "2000-01-01 "; // 包装日期的前缀
323   - var date_wrap_format = "YYYY-MM-DD HH:mm:ss"; // 日期格式
324   -
325   - var m_start_wrap = moment(date_wrap_prefix + m_start.format("HH:mm:ss"), date_wrap_format);
326   - var m_end_wrap = moment(date_wrap_prefix + m_end.format("HH:mm:ss"), date_wrap_format);
327   - var m_t_wrap = moment(date_wrap_prefix + m_t.format("HH:mm:ss"), date_wrap_format);
328   -
329   - return m_t_wrap.isAfter(m_start_wrap) && m_t_wrap.isBefore(m_end_wrap);
330   - } else {
331   - return issjd(start, end, t);
332   - // return m_t.isAfter(m_start) && m_t.isBefore(m_end);
333   - }
334   -
335   - }
336   -
337   - /**
338   - * @description : (TODO) 根据获取参数方式来获取表单参数详情html模版页.
339   - *
340   - * @param [n--获取参数方式;map--表单参数;lineId--线路ID;krl--客容量;cb--回调函数]
341   - *
342   - * @return 返回表单参数详情html模版页.
343   - *
344   - * @status OK.
345   - * */
346   - var getHtmlTemp = function(n,map,lineId,krl,cb) {
347   - // 1、定义模版名称.
348   - var tempName = '';
349   - if(n==0)
350   - tempName = 'carnum_temp';
351   - else if(n==1)
352   - tempName = 'bctype_temp';
353   - else if (n==2 || n==3)
354   - tempName = 'fcjx_temp';
355   - // 2、获参数详情模版html内容.
356   - $.get('/pages/base/timesmodel/tepms/'+ tempName + '.html', function(html){
357   - $('#tab3').append(html);
358   - map.lb = 15;// 定义例保时间.
359   - map.workeLunch = 20;// 定义午餐时间.
360   - map.workeDinner = 20;// 定义晚餐时间.
361   - //map.mixstopTime = 8;// 定义最小停站间隙
362   - //map.maxstopTime = 20;// 定义最大停站间隙.
363   - //map.upStopTime = 10;// 定义上行停站时间.
364   - //map.downStopTime = 10;// 定义下行停站时间.
365   - if(n==0) {
366   - // 定义一个周转时间.
367   - var zzsj = parseInt(map.upTravelTime) + 10*2 + parseInt(map.downTravelTime);
368   - // 定义时间对象.
369   - var date = new Date();
370   - // var rq = date.getFullYear() + '-' + (date.getMonth()+1) + '-' + (date.getDate()-7);
371   -
372   - // 减去7天
373   - var m_date = moment(date);
374   - m_date.add(-7, "d");
375   - var rq = m_date.format("YYYY-MM-DD");
376   -
377   - console.log(date);
378   - console.log(date.getDate());
379   - console.log(rq);
380   - // 定义开始时间字符串.
381   - var startDateTime = rq + ' ' + '00:00';
382   - // 定义结束时间自妇产.
383   - var endDateTime = rq + ' ' + '23:59';
384   - // 定义请求参数集合.
385   - var params = {'xlid':lineId,'startDateTime':startDateTime,'endDateTime':endDateTime,'zzsj':zzsj};
386   - /**
387   - * getJSONP请求获取客流数据.
388   - *
389   - * 返回的是一个每次以半小时为间隔作为开始时间点, 在加上周转时间作为结束时间点的 时段段内的客流最大通过量.
390   - * */
391   - getJSONP(
392   - // "http://139.196.13.237:8080/bsth-busfareflow-gj/Crlcxb/selectsjbctgl.do",
393   - "http://180.166.5.82:9816/bsth-busfareflow-gj/Crlcxb/selectsjbctgl.do",
394   - params,function(json){
395   - console.log(json);
396   -
397   - // 定义时段集合,可容量.
398   - var sjdArr = getsjdArr(map),krlInt = parseInt(krl);
399   - console.log("krlInt=" + krlInt);
400   - // 遍历时段集合.
401   - for(var s = 0 ; s<sjdArr.length;s++) {
402   - // 分割时间段.
403   - var strA = sjdArr[s].time.split('-');
404   - // 定义开始时间与结束时间,车辆数.
405   - var st = getDateTime(rq + ' ' + strA[0]),et = getDateTime(rq + ' ' + strA[1]),num = 0;
406   -
407   - console.log("s=" + s + " st=" + st + " et=" + et);
408   -
409   - // 遍历时间段内的客流数据集合.
410   - for(var j = 0 ; j < json.length; j ++) {
411   - // 定义当前客流班次产生的时间.
412   - var dqsj = getDateTime(json[j].sj);
413   - // 判断是否这时间段内.
414   - if(issjd_extend(st, et, dqsj, true)) {
415   - // 车辆数相加.
416   - sjdArr[s].num += Math.ceil(parseInt(json[j].tgl) / krlInt);
417   - // num = num + Math.ceil(parseInt(json[j].tgl)/krlInt);
418   - }
419   - }
420   - // sjdArr[s].num = num;
421   - }
422   -
423   - // 注意:如果为0,设置成 10 17默认值
424   - map.zgfbeforepcs = sjdArr[0].num == 0 ? 10 : sjdArr[0].num;// 早高峰前配车数
425   - map.zgfpcs = sjdArr[2].num == 0 ? 17 : sjdArr[2].num;// 早高峰配车数
426   - map.gfzjpcs = sjdArr[4].num == 0 ? 10 : sjdArr[4].num;// 高峰之间配车数
427   - map.wgfpcs = sjdArr[2].num == 0 ? 17 : sjdArr[2].num ;// 晚高峰配车数
428   - map.wgfafterpcs = (sjdArr[1].num + sjdArr[3].num) == 0 ? 10 : sjdArr[1].num + sjdArr[3].num;// 晚高峰后配车数
429   -
430   - // 注意:高峰 5 低谷 20 其他 10
431   - map.upStopTime = 10;
432   - map.downStopTime = 10;
433   - map.mixstopTime = 5;
434   - map.maxstopTime = 20;
435   -
436   - //alert("dddd");
437   -
438   - // 返回参数详情模版.
439   - return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})});
440   - });
441   - }else if(n==1) {
442   - // 更具站点路由版本获取起点终点站
443   - var iversion = $('#lineVersionSelect').val();
444   - $get('/stationroute/all',{'line.id_eq':lineId,'destroy_eq':0, 'versions_eq': iversion},function(result) {
445   - $.each(result, function(i, d) {
446   - if (d.stationMark == 'B' && d.directions == 0) {
447   - // alert(d.stationName);
448   - map.line.startStationName = d.stationName;
449   - } else if (d.stationMark == 'E' && d.directions == 0) {
450   - // alert(d.stationName);
451   - map.line.endStationName = d.stationName;
452   - }
453   - });
454   -
455   - // return cb && cb({
456   - // 'forminput': template(tempName, {map: map}),
457   - // 'datadisplay': template(tempName + '_config', {map: null})
458   - // });
459   - // 返回参数详情模版.
460   - return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})});
461   - });
462   - }else if (n==2 || n==3) {
463   - // 更具站点路由版本获取起点终点站
464   - var iversion = $('#lineVersionSelect').val();
465   - $get('/stationroute/all',{'line.id_eq':lineId,'destroy_eq':0, 'versions_eq': iversion},function(result) {
466   - $.each(result, function(i, d) {
467   - if (d.stationMark == 'B' && d.directions == 0) {
468   - // alert(d.stationName);
469   - map.line.startStationName = d.stationName;
470   - } else if (d.stationMark == 'E' && d.directions == 0) {
471   - // alert(d.stationName);
472   - map.line.endStationName = d.stationName;
473   - }
474   - });
475   -
476   -
477   - return cb && cb({
478   - 'forminput': template(tempName, {map: map}),
479   - 'datadisplay': template(tempName + '_config', {map: null})
480   - });
481   - });
482   -
483   - }
484   - });
485   - };
486   -
487   - /**
488   - * @description (TODO) 格式化成渲染图形数据格式.
489   - *
490   - * @param [d--查询出的时刻表明细数据.]
491   - *
492   - * @return 返回渲染图形的数据格式.
493   - * */
494   - function formatData(d) {
495   - // 定义返回值.
496   - var resultD = new Array(),lpA = new Array(),rsLpA = new Array();
497   - for(var i =0;i<d.length;i++) {
498   - var obj = {};
499   - var ddsj = getddsj(d[i].fcsj,d[i].bcsj);// 到达时间.
500   - obj.bcType = d[i].bcType;// 班次类型
501   - obj.bcs = d[i].bcs;// 班次数
502   - obj.bcsj = d[i].bcsj;// 班次时间
503   - obj.fcno = d[i].fcno;// 发车序号
504   - obj.fcsj = d[i].fcsj;// 发车时间
505   - obj.ARRIVALTIME = ddsj// 到达时间
506   - obj.jhlc = d[i].jhlc;// 计划里程
507   - obj.lp = d[i].lp==null ? null : d[i].lp.id;// 路牌id
508   - obj.lpType = d[i].lp==null ? null : d[i].lp.lpType;// 路牌类型
509   - // obj.parent = d[i].lp.lpName;// 路牌名称
510   - // obj.parent = parseInt(d[i].lp.lpNo);// 路牌名称
511   - obj.lpName = d[i].lp.lpName;
512   - obj.lpNo = d[i].lp.lpNo;// 路牌编码
513   - obj.tcc = d[i].tcc==null ? null : d[i].tcc.id;// 停车场id
514   - obj.ttinfo = d[i].ttinfo==null ? null : d[i].ttinfo.id;// 时刻表id
515   - obj.xl = d[i].xl==null ? null : d[i].xl.id;// 线路id
516   - obj.xlDir = dmToDh(d[i].xlDir);// 方向【0:relationshipGraph-up 上行;1:relationshipGraph-down 下行】
517   - obj.qdz = d[i].qdz==null ? null : d[i].qdz.id;// 起点站id
518   - obj.zdz = d[i].zdz==null ? null : d[i].zdz.id;//终点站id
519   - obj.isfb = isfbTodm(d[i].isFB);// 是否分班【0:false;1:true】
520   - obj.isSwitchXl = isSwitchXlTodm(d[i].isSwitchXl);// 是否切换线路【0:false;1:true】
521   - obj.STOPTIME = gettzsj(d[i],d,ddsj);// 停站时间.
522   - resultD.push(obj);
523   - if(lpA.indexOf(obj.lpNo)<0) {
524   - lpA.push(obj.lpNo);
525   - rsLpA.push({'lp':obj.lp,'lpNo':obj.lpNo,'lpName':obj.lpName,'lpType':obj.lpType});
526   - }
527   - }
528   - // 返回渲染图形的数据格式.
529   - return {'rsD':resultD,'rsLp':rsLpA};
530   - }
531   -
532   - /**
533   - * @description : (TODO) 获取开始与结束时间字符串.
534   - *
535   - * @param [map--表单配置参数]
536   - *
537   - * @return 返回开始与结束时间字符串集合.
538   - * */
539   - function getStartAndEndDate(map) {
540   - return {'s':getMinDate(map.line.startStationFirstTime,map.line.endStationFirstTime),
541   - 'e':getMaxDate(map.line.startStationEndTime,map.line.endStationEndTime)}
542   - }
543   -
544   - return {
545   - // 启动初始化向导导航
546   - init : function() {
547   - if(!jQuery().bootstrapWizard) {return;}
548   - var form = $('#submit_argus_form');// 表单
549   - var error = $('.alert-danger',form);// 表单异常
550   - var success = $('.alert-success',form);// 表单成功
551   - /** 表单验证 */
552   - form.validate({
553   - errorElement : 'span',// 错误提示元素span对象
554   - errorClass : 'help-block help-block-error',// 错误提示元素class名称
555   - focusInvalid : true,// 验证错误获取焦点
556   - /** 需要验证的表单元素 */
557   - rules : {
558   - 'skbName' : {required : true,},// 时刻表名称,必填项.
559   - 'lineName' : {required : true,},// 线路名称,必填项.
560   - 'lineVersion': {required: true}, // 站点路由版本,必填项,
561   - // 'krl' : {isBaseRes : true,number : true,digits : true,},// 客容量,当选择为客流方式时必填项、整数
562   - 'startStationFirstTime' : {required : true}, // 起始站首班时间,必填项.
563   - 'startStationEndTime' : {required : true}, // 起始站末班时间 ,必填项.
564   - 'endStationFirstTime' : {required : true}, // 终点站首班时间 ,必填项.
565   - 'endStationFirstTime' : {required : true}, // 终点站末班时间 ,必填项.
566   - 'endStationEndTime' : {required : true}, // 终点站末班时间,必填项.
567   - 'earlyStartTime' : {required : true},// 早高峰开始时间,必填项 .
568   - 'earlyEndTime' : {required : true},// 早高峰结束时间,必填项 .
569   - 'lateStartTime' : {required : true},// 晚高峰开始时间,必填项 .
570   - 'lateEndTime' : {required : true},// 晚高峰结束时间,必填项.
571   - 'zgfbeforepcs' : {required : true,number : true,digits : true, isNum0:true},// 早高峰前车辆数,必填项、必须为整数.
572   - 'zgfpcs' : {required : true,number : true,digits : true, isNum0:true, isMax: true},// 早高峰车辆数,必填项、必须为整数.
573   - 'wgfafterpcs' : {required : true,number : true,digits : true, isNum0:true},// 晚高峰后车俩数,必填项、必须为整数.
574   - 'wgfpcs' : {required : true,number : true,digits : true, isNum0:true, isMax: true},// 晚高峰车俩数,必填项、必须为整数.
575   - 'gfzjpcs' : {required : true,number : true,digits : true, isNum0:true},// 高峰中间车辆数,必填项、必须为整数.
576   - 'upTravelTime' : {required : true,number : true},// 上行行驶时间,必填项、必须为整数.
577   - 'downTravelTime' : {required : true,number : true},// 下行行驶时间,必填项、必须为整数.
578   - 'upMileage' : {required : true,number : true},// 上行行驶里程,必填项、必须为整数.
579   - 'downMileage' : {required : true,number : true},// 下行行驶里程,必填项、必须为整数.
580   - 'upStopTime' : {required : true,number : true,digits : true},// 上行停站间隙,必填项、必须为整数.
581   - 'downStopTime' : {required : true,number : true,digits : true},// 下行停站间隙,必填项、必须为整数.
582   - 'maxstopTime' : {required : true,number : true,digits : true},// 最大停站间隙,必填项、必须为整数.
583   - 'mixstopTime' : {required : true,number : true,digits : true},// 最小停站间隙,必填项、必须为整数.
584   - 'earlyUpTime' : {number : true},// 早高峰上行时间,必须为数字.
585   - 'earlyDownTime' : {number : true},// 早高峰下行时间,必须为数字.
586   - 'lateUpTime' : {number : true},// 晚高峰上行时间,必须为数字.
587   - 'lateDownTime' : {number : true},// 晚高峰下行时间,必须为数字.
588   - 'troughUpTime' : {number : true},// 低谷上行时间,必须为数字.
589   - 'troughDownTime' : {number : true},// 低谷下行时间,必须为数字.
590   - 'qjUpTime' : {number : true},// 区间上行时间,必须为数字.
591   - 'qjDownTime' : {number : true},// 区间下行时间,必须为数字.
592   - 'kfsj' : {number : true,digits : true},// 空放行驶时间,必须为数字.
593   - 'workeLunch' : {number : true},// 工作餐午餐时间,必须为数字.
594   - 'workeDinner' : {number : true},// 工作餐晚餐时间,必须为数字.
595   - 'upInTimer' : {number : true},// 上行进场时间,必须为数字.
596   - 'upOutTimer' : {number : true},// 上行出场时间,必须为数字.
597   - 'downInTimer' : {number : true},// 下行进场时间,必须为数字.
598   - 'downOutTimer' : {number : true},// 下行出场时间,必须为数字.
599   - 'upInMileage' : {number : true},// 上行进场里程,必须为数字.
600   - 'upOutMileage' : {number : true},// 上行出场里程,必须为数字.
601   - 'downInMileage' : {number : true},// 下行进场里程,必须为数字.
602   - 'downOutMileage' : {number : true},// 下行出场里程,必须为数字.
603   - 'lb' : {number : true},// 早晚例行保养,必须为数字.
604   - 'clzs':{required : true,number : true,digits : true, isBcType : true},// 车辆总数,必填项、必须为整数.
605   - 'bxrc' : {required : true},// 班型人次,必填项
606   - 'linePlayType' : {required : true},// 线路规划类型,必填项
607   - 'zdzcrl' : {number : true,digits : true},
608   - // 新增时间段字段
609   - 'start1' : {required : true},
610   - 'end1' : {required : true},
611   - 'start2' : {required : true},
612   - 'end2' : {required : true},
613   - 'start3' : {required : true},
614   - 'end3' : {required : true},
615   - 'start4' : {required : true},
616   - 'end4' : {required : true},
617   - 'start5' : {required : true},
618   - 'end5' : {required : true},
619   -
620   - 'gfupStopTime' : {required : true,number : true}, // 高峰上行停站时间,必填项、必须为整数.
621   - 'gfdownStopTime' : {required : true,number : true}, // 高峰下行停站时间,必填项、必须为整数.
622   - 'dgupStopTime' : {required : true,number : true}, // 低谷上行停站时间,必填项、必须为整数.
623   - 'dgdownStopTime' : {required : true,number : true}, // 低谷下行停站时间,必填项、必须为整数.
624   - 'dgmaxfcjx' : {required : true,number : true}, // 低谷最大发车间隙,必填项、必须为整数.
625   - 'dgmaxtzsj' : {required : true,number : true}, // 低谷最大停站时间,必填项、必须为整数.
626   -
627   - // 发车间隙分析用参数
628   - //'fcjx': {required: true}, // 时段发车间隙,TODO:貌似没发启用form验证
629   - 'stt': {required: true}, // 停站类型,TODO:貌似没发启用form验证
630   - 'zgffcjxmin' : {required : true,number : true,digits: true},// 早高峰最小发车间隔.
631   - 'zgffcjxmax' : {required : true,number : true,digits: true},// 早高峰最大发车间隔.
632   - 'wffcjxmin' : {required : true,number : true,digits: true},// 晚高峰最小发车间隔.
633   - 'wffcjxmax' : {required : true,number : true,digits: true},// 晚高峰最大发车间隔.
634   - 'dgfcjxmin' : {required : true,number : true,digits: true},// 低谷最小发车间隔.
635   - 'dgfcjxmax' : {required : true,number : true,digits: true},// 低谷最大发车间隔.
636   - 'gfjypcs': {required : true,number : true,digits: true}, // 高峰建议配车数
637   - 'jbclcount': {required : true,number : true,digits: true} // 建议加班车数
638   - },
639   - messages: {
640   - 'zgfbeforepcs': "未获取客流数据请手动输入",
641   - 'zgfpcs': "未获取客流数据请手动输入",
642   - 'wgfafterpcs': "未获取客流数据请手动输入",
643   - 'wgfpcs': "未获取客流数据请手动输入",
644   - 'gfzjpcs': "未获取客流数据请手动输入"
645   - },
646   -
647   - /**
648   - * 类型:Callback。当未通过验证的表单提交时,可以在该回调函数中处理一些事情。
649   - *
650   - * 参数:该回调函数有两个参数:第一个为一个事件对象,第二个为验证器(validator)
651   - */
652   - invalidHandler : function(event, validator) {
653   - error.show();// 显示表单未通过提示信息
654   - App.scrollTo(error, -200);// 把提示信息放到指定的位置。
655   - },
656   -
657   - /**
658   - * 类型:Callback。
659   - *
660   - * 默认:添加errorClass("has-error")到表单元素。将未通过验证的表单元素设置高亮。
661   - */
662   - highlight : function(element) {
663   - $(element).closest('.form-group').addClass('has-error');// 添加errorClass("has-error")到表单元素
664   - },
665   -
666   - /**
667   - * 类型:Callback。
668   - *
669   - * 默认:移除errorClass("has-error")。与highlight操作相反
670   - */
671   - unhighlight : function(element) {
672   - $(element).closest('.form-group').removeClass('has-error');// 移除errorClass("has-error")
673   - },
674   -
675   - /**
676   - * 类型:String,Callback。
677   - *
678   - * 如果指定它,当验证通过时显示一个消息。
679   - *
680   - * 如果是String类型的,则添加该样式到标签中;
681   - *
682   - * 如果是一个回调函数,则将标签作为其唯一的参数。
683   - */
684   - success : function(label) {
685   - label.closest('.form-group').removeClass('has-error');// 当验证通过时,移除errorClass("has-error")
686   - },
687   -
688   - /**
689   - * 类型:Callback。
690   - *
691   - * 默认:default (native) form submit;当表单通过验证,提交表单。回调函数有个默认参数form
692   - */
693   - submitHandler : function(f) {
694   - // 定义localStorage对象.
695   - var storage = window.localStorage;
696   - // 表单序列化.
697   - var argus = form.serializeJSON();
698   - console.log(argus);
699   - // 获取站点路由.
700   - $get('/stationroute/all',{'line.id_eq':argus.lineName.split('_')[0],'destroy_eq':0, 'versions_eq': argus.lineVersion},function(result) {
701   - // 判断.
702   - if(result) {
703   - // 定义上行起点站,上行终点站,下行起点站,下行终点站.
704   - var upB ='',upE='',downB='',downE='';
705   - for(var r = 0 ; r<result.length;r++) {
706   - if(result[r].directions==0 && result[r].stationMark =='B')
707   - upB = result[r].id;
708   - if(result[r].directions==0 && result[r].stationMark =='E')
709   - upE = result[r].id;
710   - if(result[r].directions==1 && result[r].stationMark =='B')
711   - downB = result[r].id;
712   - if(result[r].directions==1 && result[r].stationMark =='E')
713   - downE = result[r].id;
714   - }
715   - argus.up_s = upB + '_' + upE;
716   - argus.down_s = downB + '_' + downE;
717   - // 获取停车车场.
718   - $get('/carpark/all',{'parkCode_eq':argus.tcc},function(cp) {
719   - var tcc_id = '';
720   - if(cp) {
721   - tcc_id = cp[0].id;
722   - }
723   - argus.tcc_id = tcc_id; // 停车场ID.
724   - argus.skbmc = $('#skbNameSelect').select2('data')[0].text;// 时刻名称.
725   - argus.xlmc = $('#lineSelect').select2('data')[0].text;// 线路名称.
726   - // 获取时刻表明细.
727   - $get('/tidc/all',{'ttinfo.id_eq':parseInt(argus.skbName)},function(data) {
728   - if(data.status=='SUCCESS' && data.data.length>0) {
729   - argus.istidc = 1;
730   - layer.confirm('系统已存在该时刻表【'+
731   - $("#skbNameSelect").select2("data")[0].text +
732   - '】明细,是否使用已有数据渲染模型?', {
733   - btn: ['确定并使用','取消并继续'] //按钮
734   - }, function(){
735   - layer.closeAll();
736   - submit(formatData(data.data),argus);
737   - }, function(){
738   - submit(null,argus);
739   - });
740   - }else {
741   - argus.istidc = 0;
742   - submit(null,argus);
743   - }
744   - });
745   - });
746   - }else {
747   - layer.msg('系统不存在该线路的上、下行起终点站!');
748   - }
749   - });
750   -
751   - // 表单提交.
752   - function submit(p,argus) {
753   - var baseRes2 = $('#submit_argus_form input[name="baseRes"]:checked').val();// 获取参数方式值.
754   - if (baseRes2 == 0) {
755   - // TODO:客流暂时有问题,直接使用现有时刻表打开,日后有机会再改好
756   - var skbId2 = $("#skbNameSelect").val();
757   - var argus2 = {
758   - baseRes:"0",carPark:"FFFFFF68",downInMileage:"0",
759   - downInTimer:"0",downMileage:"3.5",downOutMileage:"0",
760   - downOutTimer:"0",downStopTime:"10",downTravelTime:"7",
761   - down_s:"26922_26928",earlyDownTime:"7",earlyEndTime:"08:30",
762   - earlyStartTime:"06:31",earlyUpTime:"10",endStationEndTime:"22:30",
763   - endStationFirstTime:"05:50",gfzjpcs:"7",istidc:1,kfsj:"",krl:"50",
764   - lateDownTime:"7",lateEndTime:"18:30",lateStartTime:"16:31",
765   - lateUpTime:"10",lb:"15",lineName:"801702_801702_1109路",
766   - linePlayType:"0",maxstopTime:"20",mixstopTime:"8",qjDownTime:"",
767   - qjUpTime:"",skbName:skbId2,skbmc:"2016.4.6双时刻表",
768   - startStationEndTime:"23:00",startStationFirstTime:"06:15",tcc_id:45,troughDownTime:"7",troughUpTime:"10",upInMileage:"0",
769   - upInTimer:"10",upMileage:"3.5",upOutMileage:"0",upOutTimer:"10",upStopTime:"10",upTravelTime:"10",
770   - up_s:"26912_26921",wgfafterpcs:"5",wgfpcs:"10",workeDinner:"20",workeLunch:"20",xlmc:"1109路",zgfbeforepcs:"3",zgfpcs:"10",}
771   - // 获取时刻表明细.
772   - $get('/tidc/all',{'ttinfo.id_eq':parseInt(argus.skbName)},function(data) {
773   - var p = formatData(data.data,argus2);
774   - // TODO:添加parent
775   - for (var ii = 0; ii < p.rsD.length; ii++) {
776   - p.rsD[ii].parent = p.rsD[ii].lpNo;// 路牌名称
777   - }
778   -
779   - argus2.istidc = 1;
780   - var storage = window.localStorage;
781   - storage.setItem("Gantt_AgursData",JSON.stringify(argus2));
782   - storage.setItem('isDoDate',JSON.stringify({'rsD':p.rsD,'rsLP':p.rsLp}));
783   - loadPage('gantt.html');
784   - });
785   - } else {
786   -
787   - // storage.setItem("Gantt_AgursData",JSON.stringify(argus));
788   - // if(p!=null) {
789   - // storage.setItem('isDoDate',JSON.stringify({'rsD':p.rsD,'rsLP':p.rsLp}));
790   - // }else {
791   - // storage.setItem('isDoDate','');
792   - // }
793   - // loadPage('gantt.html');
794   -
795   - // TODO:暂时打开现有时刻表演示
796   - var skbId = $("#skbNameSelect").val();
797   - // var argus = {
798   - // baseRes:"0",czarPark:"FFFFFF68",downInMileage:"0",
799   - // downInTimer:"0",downMileage:"3.5",downOutMileage:"0",
800   - // downOutTimer:"0",downStopTime:"10",downTravelTime:"7",
801   - // down_s:"26922_26928",earlyDownTime:"7",earlyEndTime:"08:30",
802   - // earlyStartTime:"06:31",earlyUpTime:"10",endStationEndTime:"22:30",
803   - // endStationFirstTime:"05:50",gfzjpcs:"7",istidc:1,kfsj:"",krl:"50",
804   - // lateDownTime:"7",lateEndTime:"18:30",lateStartTime:"16:31",
805   - // lateUpTime:"10",lb:"15",lineName:"801702_801702_1109路",
806   - // linePlayType:"0",maxstopTime:"20",mixstopTime:"8",qjDownTime:"",
807   - // qjUpTime:"",skbName:skbId,skbmc:"2016.4.6双时刻表",
808   - // startStationEndTime:"23:00",startStationFirstTime:"06:15",tcc_id:45,troughDownTime:"7",troughUpTime:"10",upInMileage:"0",
809   - // upInTimer:"10",upMileage:"3.5",upOutMileage:"0",upOutTimer:"10",upStopTime:"10",upTravelTime:"10",
810   - // up_s:"26912_26921",wgfafterpcs:"5",wgfpcs:"10",workeDinner:"20",workeLunch:"20",xlmc:"1109路",zgfbeforepcs:"3",zgfpcs:"10",}
811   - // 获取时刻表明细.
812   - $get('/tidc/all',{'ttinfo.id_eq':parseInt(argus.skbName)},function(data) {
813   - var p = formatData(data.data,argus);
814   - argus.istidc = 1;
815   - var storage = window.localStorage;
816   - storage.setItem("Gantt_AgursData",JSON.stringify(argus));
817   - storage.setItem('isDoDate',JSON.stringify({'rsD':p.rsD,'rsLP':p.rsLp}));
818   - loadPage('gantt.html');
819   - });
820   -
821   -
822   - }
823   -
824   -
825   - }
826   - }
827   - });
828   -
829   - // 验证配车数不能为零.
830   - $.validator.addMethod('isNum0', function(value,element) {
831   - // 定义返回值.
832   - var tag = true;
833   - var zgfbeforepcs = $('#zgfbeforepcsInput').val(),// 早高峰前配车数.
834   - zgfpcs = $('#zgfpcsInput').val(),// 早高峰配车数.
835   - gfzjpcs = $('#gfzjpcsInput').val(),// 高峰之间配车数.
836   - wgfpcs = $('#wgfpcsInput').val(),// 晚高峰配车数.
837   - wgfafterpcs = $('#wgfafterpcsInput').val();// 晚高峰后配车数.
838   - // 判断是否为零.
839   - if(parseInt(zgfbeforepcs) == 0 || parseInt(zgfbeforepcs) ==0 ||
840   - parseInt(gfzjpcs) ==0 || parseInt(wgfpcs) ==0 || parseInt(wgfafterpcs) ==0)
841   - tag = false;
842   - return tag;
843   - },function(){return '配车数不能为零!'; });
844   -
845   - // 验证高峰时段内的配车数是否高于其它时段配车数.
846   - $.validator.addMethod('isMax', function(value,element) {
847   - var tag = true;
848   - var zgfbeforepcs = parseInt($('#zgfbeforepcsInput').val()),// 早高峰前配车数.
849   - zgfpcs = parseInt($('#zgfpcsInput').val()),// 早高峰配车数.
850   - gfzjpcs = parseInt($('#gfzjpcsInput').val()),// 高峰之间配车数.
851   - wgfpcs = parseInt($('#wgfpcsInput').val()),// 晚高峰配车数.
852   - wgfafterpcs = parseInt($('#wgfafterpcsInput').val());// 晚高峰后配车数.
853   - // 判断高峰时段内的配车数是否高于其它时段配车数.
854   - if(zgfpcs<zgfbeforepcs || zgfpcs<gfzjpcs || zgfpcs<wgfafterpcs || wgfpcs<zgfbeforepcs || wgfpcs<gfzjpcs || wgfpcs<wgfafterpcs )
855   - tag = false;
856   - return tag;
857   - },function(){return '高峰时段配车数必须高于其它时段配车数!';});
858   -
859   - // 验证客流数据分析时客容量为必填项.
860   - /*$.validator.addMethod("isBaseRes", function(value,element) {
861   - // 定义返回值.
862   - var tag = true;
863   - // 定义选择获取参数方式值
864   - var baseChecked = $('#submit_argus_form input[name="baseRes"]:checked').val();
865   - // 判断
866   - if(baseChecked == '0' && $('#krlInput').val()== '')
867   - tag = false;
868   - return tag;
869   - }, '客流大数据分析,客流总量为必填项!');
870   - */
871   - // 验证配车总数与班型人次搭配
872   - $.validator.addMethod('isBcType', function(value,element) {
873   - // 定义返回值.
874   - var tag = true;
875   - // 定义车辆总数,班型人次.
876   - var clzs = $('#clzsInput').val(),
877   - bxrc = $('#state_tagsinput').val();
878   - // 判断.
879   - if(bxrc=='' || bxrc==null || clzs=='' || clzs==0)
880   - return false;
881   - var bxrcAr = bxrc.split(','),pczs = 0;
882   - for(var s = 0 ; s< bxrcAr.length;s++) {
883   - // 切割单个班型人次.
884   - pczs = pczs + parseInt(bxrcAr[s].split('/')[2]);
885   - }
886   - if(pczs!=clzs)
887   - tag = false;
888   - /**
889   - // 定义首末班次开始结束时间集合.
890   - var map = {'line':{'startStationFirstTime':$('#qdzsbsjInput').val(),
891   - 'startStationEndTime':$('#qdzmbsjInput').val(),
892   - 'endStationFirstTime':$('#zdzsbsjInput').val(),
893   - 'endStationEndTime':$('#zdzmbsjInput').val()}};
894   - // 定义开始~结束时间.
895   - var setMap = getStartAndEndDate(map);
896   - // 定义最大工时.
897   - var maxGs = parseInt( ((strToTime(setMap.e) - strToTime(setMap.s)) / 60000) / 60) * parseInt(clzs);
898   - // 切割班型人次,定义班次人次所用总工时.
899   - var bxrcAr = bxrc.split(','),countGs = 0,countRc = 0;
900   - // 遍历
901   - for(var s = 0 ; s< bxrcAr.length;s++) {
902   - // 切割单个班型人次.
903   - var s1a = bxrcAr[s].split('/');
904   - // 定义人次.
905   - var rs = parseInt(s1a[1]);
906   - // 定义小时系数.
907   - var hoursV = 0.0;
908   - for(var g = 0 ; g < bxrcGs.length; g++) {
909   - // 判断班型是否一致.
910   - if(bxrcGs[g].type == s1a[0]) {
911   - // 重新赋值小时系数.
912   - hoursV = bxrcGs[g].hoursV;
913   - }
914   - }
915   - // 重新计算班次人次所用总工时.
916   - countGs = countGs + parseFloat(hoursV.toFixed(2)) * rs;
917   - countRc = countRc + rs;
918   - }
919   - // 判断
920   - if(parseFloat(countGs.toFixed(2))>maxGs || (bxrcAr.length==1 && countRc > parseInt(clzs)) )
921   - tag = false;
922   - */
923   - return tag;
924   - },function(){return '配车总数与【班型/人次/车辆】搭配不合理!'; });
925   -
926   - /**
927   - * @description : (TODO) 监听获取参数方式值改变事件.
928   - *
929   - * */
930   - /*$('input:radio[name="baseRes"]').on('change',function(v) {
931   - if($(this).val()=='1')
932   - $('#krlGroup').hide();
933   - else if($(this).val()=='0')
934   - $('#krlGroup').show();
935   - });*/
936   -
937   - // 确认提交信息
938   - var displayConfirm = function() {
939   - // 遍历表单元素下的tab4的class名称为form-control-static
940   - $('#tab4 .form-control-static', form).each(function(){
941   - var input = $('[name="'+$(this).attr("data-display")+'"]', form);// 定义input
942   - if (input.is(":radio")) {
943   - input = $('[name="'+$(this).attr("data-display")+'"]:checked', form);
944   - }
945   - if (input.is(":text") || input.is("textarea")) {
946   - $(this).html(input.val());
947   - } else if (input.is("select")) {
948   - $(this).html(input.find('option:selected').text());
949   - } else if (input.is(":radio") && input.is(":checked")) {
950   - $(this).html(input.attr("data-title"));
951   - } else if ($(this).attr("data-display") == 'payment[]') {
952   - var payment = [];
953   - $('[name="payment[]"]:checked', form).each(function(){
954   - payment.push($(this).attr('data-title'));
955   - });
956   - $(this).html(payment.join("<br>"));
957   - }
958   - });
959   - };
960   -
961   - /** 按钮点击时触发 */
962   - var handleTitle = function(tab, navigation, index) {
963   - var total = navigation.find('li').length;// 定义导航条标签个数
964   - var current = index + 1;// 当前标签页
965   - $('.step-title', $('#form-wizard-info')).text((index + 1) + ' - ' + total); // 设置向导标题
966   - jQuery('li', $('#form-wizard-info')).removeClass("done"); // 删除"done"样式
967   - var li_list = navigation.find('li');// 获取导航标签元素集合
968   - for (var i = 0; i < index; i++) {
969   - jQuery(li_list[i]).addClass("done");// 追加done样式
970   - }
971   - /** 如果为第一步隐藏返回按钮,否则显示返回按钮. */
972   - if (current == 1) {
973   - $('#submit_argus_form').find('.button-previous').hide();// 隐藏返回按钮
974   - } else {
975   - $('#submit_argus_form').find('.button-previous').show();// 显示返回按钮
976   - }
977   -
978   - /** 如果为最后一步显示提交按钮,隐藏下一步按钮,否则隐藏提交按钮,显示下一步按钮 */
979   - if (current >= total) {
980   - $('#submit_argus_form').find('.button-next').hide();// 隐藏下一步按钮
981   - $('#submit_argus_form').find('.button-submit').show();// 显示提交按钮
982   - displayConfirm(); // 确认提交信息
983   - } else {
984   - $('#submit_argus_form').find('.button-next').show();// 显示下一步按钮
985   - $('#submit_argus_form').find('.button-submit').hide();// 隐藏提交按钮
986   - }
987   - App.scrollTo($('.page-title'));// 移动到指定位置
988   - };
989   -
990   - // 表单导航向导插件
991   - $('#submit_argus_form').bootstrapWizard({
992   - 'nextSelector': '.button-next',// 下一步元素选择器
993   - 'previousSelector': '.button-previous',// 返回元素选择器
994   - /** 当一个导航标签被点击,返回错误的移动到该选项卡,并显示它的内容. */
995   - onTabClick: function (tab, navigation, index, clickedIndex) {
996   - return false;
997   - success.hide();
998   - error.hide();
999   - if (form.valid() == false) {
1000   - return false;
1001   - }
1002   - handleTitle(tab, navigation, clickedIndex);
1003   - },
1004   - /** 下一步按钮被单击时触发, 返回移动到下一个步骤. */
1005   - onNext: function (tab, navigation, index) {
1006   - success.hide();
1007   - error.hide();
1008   - if (form.valid() == false) {
1009   - return false;
1010   - }
1011   - /*if(index==1) {
1012   - // 初始化客容量值.
1013   - if($('#krlInput').val() == '')
1014   - $('#krlInput').val(50);
1015   - }else */if(index == 2) {
1016   - var baseRes = $('#submit_argus_form input[name="baseRes"]:checked').val(),// 获取参数方式值.
1017   - lineId = $('#lineSelect').val().split('_')[0],// 线路ID.
1018   - krl = 50;
1019   - // krl = $('#krlInput').val();// 客容量
1020   - // 弹出正在加载层
1021   - var i = layer.load(2);
1022   - getLineInfo(lineId,function(r) {
1023   - getHtmlTemp(baseRes,r.content[0],lineId,krl,function(htlMap) {
1024   - $('#tab3').html(htlMap.forminput);
1025   - $('#tab4').html(htlMap.datadisplay);
1026   -
1027   - if (baseRes == 0) { // 客流大数据分析
1028   - $('#linePlayTypeSelect').val(r.content[0].line.linePlayType);
1029   - // 停站类型选择控件
1030   - ComponentsBootstrapTagsinput.init_stoptype();
1031   - // 日期控件
1032   - $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间
1033   - $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间
1034   - $('#zdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站首班时间
1035   - $('#zdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站末班时间
1036   - $('#zgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰开始时间
1037   - $('#zgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰结束时间
1038   - $('#wgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰开始时间
1039   - $('#wgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰结束时间
1040   - // 初始化停车场下拉框.
1041   - gettccInfo(function(cd) {
1042   - var options = '<option value="">请选择...</option><optgroup label="停车场">';
1043   - var $_len = cd.length;
1044   - if($_len>0) {
1045   - $.each(cd, function(i, d){
1046   - options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
1047   - });
1048   -
1049   - }
1050   - options += '</optgroup>';
1051   - $('#carParkSelect').html(options).select2();
1052   - $('#carParkSelect').select2("val",r.content[0].carPark);
1053   - // 关闭弹出加载层
1054   - layer.close(i);
1055   - });
1056   -
1057   - } else if (baseRes == 1) { // 班次/人次/车辆
1058   - $('#linePlayTypeSelect').val(r.content[0].line.linePlayType);
1059   - ComponentsBootstrapTagsinput.init();// 初始化班型人次Input Tag.
1060   - // 停站类型选择控件
1061   - ComponentsBootstrapTagsinput.init_stoptype();
1062   - // 日期控件
1063   - $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间
1064   - $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间
1065   - $('#zdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站首班时间
1066   - $('#zdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站末班时间
1067   - $('#zgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰开始时间
1068   - $('#zgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰结束时间
1069   - $('#wgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰开始时间
1070   - $('#wgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰结束时间
1071   - $('#startInput1').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1072   - $('#endInput1').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1073   - $('#startInput2').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1074   - $('#endInput2').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1075   - $('#startInput3').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1076   - $('#endInput3').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1077   - $('#startInput4').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1078   - $('#endInput4').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1079   - $('#startInput5').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1080   - $('#endInput5').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1081   - // 初始化停车场下拉框.
1082   - gettccInfo(function(cd) {
1083   - var options = '<option value="">请选择...</option><optgroup label="停车场">';
1084   - var $_len = cd.length;
1085   - if($_len>0) {
1086   - $.each(cd, function(i, d){
1087   - options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
1088   - });
1089   -
1090   - }
1091   - options += '</optgroup>';
1092   - $('#carParkSelect').html(options).select2();
1093   - $('#carParkSelect').select2("val",r.content[0].carPark);
1094   - // 关闭弹出加载层
1095   - layer.close(i);
1096   - });
1097   -
1098   - } else if (baseRes == 2 || baseRes == 3) { // 发车间隔分析
1099   - // 上下行首末班日期控件
1100   - $('#startStationFirstTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1101   - $('#startStationEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1102   - $('#endStationFirstTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1103   - $('#endStationEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1104   -
1105   - // 早高峰晚高峰日期控件
1106   - $('#earlyStartTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1107   - $('#earlyEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1108   - $('#lateStartTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1109   - $('#lateEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
1110   -
1111   - // 线路规划类型日期控件
1112   - $('#linePlayType_id').val(r.content[0].line.linePlayType);
1113   -
1114   - // 停车场下拉框控件
1115   - gettccInfo(function(cd) {
1116   - var options = '<option value="">请选择...</option><optgroup label="停车场">';
1117   - var $_len = cd.length;
1118   - if($_len>0) {
1119   - $.each(cd, function(i, d){
1120   - options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
1121   - });
1122   -
1123   - }
1124   - options += '</optgroup>';
1125   - $('#carPark_id').html(options).select2();
1126   - $('#carPark_id').select2("val",r.content[0].carPark);
1127   - // 关闭弹出加载层
1128   - layer.close(i);
1129   - });
1130   -
1131   - // 发车间隙选择控件
1132   - //ComponentsBootstrapTagsinput.init_fcjx();
1133   - // 停站类型选择控件
1134   - ComponentsBootstrapTagsinput.init_stoptype();
1135   -
1136   - // TODO:发车间隔分析参数设置
1137   -
1138   - layer.close(i);
1139   - }
1140   -
1141   - });
1142   - });
1143   - }
1144   - handleTitle(tab, navigation, index);
1145   - },
1146   - /** 上一步按钮被单击时触发,返回移动到前一个步骤 */
1147   - onPrevious: function (tab, navigation, index) {
1148   - success.hide();
1149   - error.hide();
1150   - handleTitle(tab, navigation, index);
1151   - },
1152   - /** 显示选项卡内容 */
1153   - onTabShow: function (tab, navigation, index) {
1154   - var total = navigation.find('li').length;
1155   - var current = index + 1;
1156   - var $percent = (current / total) * 100;
1157   - $('#submit_argus_form').find('.progress-bar').css({
1158   - width: $percent + '%'
1159   - });
1160   -
1161   - }
1162   -
1163   - });
1164   - // 初始化第一步隐藏返回按钮
1165   - $('#submit_argus_form').find('.button-previous').hide();
1166   - }
1167   - }
1168   -}();
  1 +/**
  2 + * @description : (TODO) 表单的导航向导、验证、提交
  3 + */
  4 +
  5 +var SKBFormWizard = function() {
  6 +
  7 + var bxrcGs = [ {'type':'六工一休','hoursV':6.66, 'minueV':'6:40'},
  8 + {'type':'五工一休','hoursV':6.85, 'minueV':'6:51'},
  9 + {'type':'四工一休','hoursV':7.14, 'minueV':'7:08'},
  10 + {'type':'三工一休','hoursV':7.61, 'minueV':'7:37'},
  11 + {'type':'二工一休','hoursV':8.57, 'minueV':'8:34'},
  12 + {'type':'一工一休','hoursV':11.42, 'minueV':'11:25'},
  13 + {'type':'五工二休','hoursV':7.99, 'minueV':'8:00'},
  14 + {'type':'无工休', 'hoursV':5.43, 'minueV':'5:43'}];
  15 +
  16 + /**
  17 + * @description : (TODO) 获取停站时间.
  18 + *
  19 + * @param [o--当前班次对象;d--班次数组对象;sj--当前班次时间]
  20 + *
  21 + * @return 返回相邻班次的停站时间.
  22 + * */
  23 + function gettzsj(o,d,sj) {
  24 + // 定义停站时间.
  25 + var tzsj = 0;
  26 + // 变量班次数组对象.
  27 + for(var i = 0 ;i<d.length;i++) {
  28 + // 判断是否为同一个路牌.
  29 + if(o.lp.lpNo == d[i].lp.lpNo && o.lp.id == d[i].lp.id) {
  30 + // 判断是否为当前班次的下一个班次.
  31 + if(d[i].fcno - o.fcno ==1){
  32 + // 计算停站时间.
  33 + tzsj = (strToTime(d[i].fcsj) -strToTime(sj)) / 60000;
  34 + continue;
  35 + }
  36 + }
  37 + }
  38 + // 返回停站时间.
  39 + return tzsj;
  40 + }
  41 +
  42 + /**
  43 + * @description : (TODO) 是否切换线路值转换.
  44 + *
  45 + * @param [d--是否切换线路原始值].
  46 + *
  47 + * @return 返回一个是否切换线路值的转换.
  48 + * */
  49 + function isSwitchXlTodm(d) {
  50 + var rstr = 0;
  51 + if(d)
  52 + rstr = 1;
  53 + return rstr;
  54 + }
  55 +
  56 + /**
  57 + * @description : (TODO) 是否分班值转换.
  58 + *
  59 + * @param [d--是否分班原始值].
  60 + *
  61 + * @return 返回一个是否分班值的转换.
  62 + * */
  63 + function isfbTodm(b) {
  64 + var rstr = 0;
  65 + if(b)
  66 + rstr = 1;
  67 + return rstr;
  68 + }
  69 +
  70 + /**
  71 + * @description : (TODO) 获取某个班次的到达时间字符串.
  72 + *
  73 + * @param [tStr--发车时间格式字符串;bcsj--班次历时].
  74 + *
  75 + * @return 返回一个某个班次的到达时间字符串.
  76 + * */
  77 + function getddsj(tStr,bcsj) {
  78 + // 定义当前时间对象.
  79 + var date = new Date();
  80 + // 分割字符串.
  81 + var _str = tStr.split(':');
  82 + // 设值小时.
  83 + date.setHours(parseInt(_str[0]));
  84 + // 设值分钟.
  85 + date.setMinutes(parseInt(_str[1]) + bcsj);
  86 + // 返回到达时间字符串.
  87 + return getTimeStr(date);
  88 + }
  89 +
  90 + /**
  91 + * @description : (TODO) 时间点格式字符串转时间对象.
  92 + *
  93 + * @param [t--时间点格式字符串]
  94 + *
  95 + * @return 返回一个时间点格式字符串转时间对象.
  96 + * */
  97 + var strToTime = function(t) {
  98 + // 定义当前时间对象.
  99 + var d = new Date;
  100 + // 判断是否为空.
  101 + if(t) {
  102 + // 分割字符串.
  103 + var _str = t.split(':');
  104 + // 设值小时.
  105 + d.setHours(parseInt(_str[0]));
  106 + // 设值分钟.
  107 + d.setMinutes(parseInt(_str[1]));
  108 + }
  109 + // 返回一个时间点格式字符串转时间对象.
  110 + return d;
  111 + }
  112 +
  113 + /**
  114 + * @description : (TODO) 时间对象转时间点格式字符串.
  115 + *
  116 + * @param [t--时间对象]
  117 + *
  118 + * @return 返回一个时间对象转时间点格式字符串.
  119 + * */
  120 + function getTimeStr(t) {
  121 + // 定义返回值.
  122 + var _str = '';
  123 + // 判断是否为空.
  124 + if(t) {
  125 + // 重新赋值.
  126 + _str = ((t.getHours()<10? '0' + t.getHours() : t.getHours()) == '00' ? '24' :(t.getHours()<10? '0' + t.getHours() : t.getHours()))
  127 + +':'
  128 + +(t.getMinutes()<10? '0' + t.getMinutes() : t.getMinutes());
  129 + }
  130 + // 返回时间对象转时间点格式字符串.
  131 + return _str;
  132 + }
  133 +
  134 + /**
  135 + * @description : (TODO) 方向值转换.
  136 + *
  137 + * @param [d--方向原始值].
  138 + *
  139 + * @return 返回一个方向值转换.
  140 + * */
  141 + function dmToDh(t) {
  142 + // 定义返回值.
  143 + var reslStr = '';
  144 + // 上行.
  145 + if(t=='0')
  146 + reslStr = 'relationshipGraph-up';
  147 + // 下行.
  148 + else if(t=='1')
  149 + reslStr = 'relationshipGraph-down';
  150 + // 返回一个方向值转换.
  151 + return reslStr;
  152 + }
  153 +
  154 + /**
  155 + * @description : (TODO) 获取线路标准详情.
  156 + *
  157 + * @param [lineId--线路ID;cb--回调函数].
  158 + *
  159 + * @return 返回线路标准详情.
  160 + *
  161 + * @status OK.
  162 + * */
  163 + var getLineInfo = function(lineId,cb) {
  164 + // 1、get异步请求.根据线路ID查询详情.
  165 + $get('/lineInformation',{'line.id_eq':lineId},function(result) {
  166 + // 2、返回线路标准详情.
  167 + return cb && cb(result);
  168 + });
  169 + }
  170 +
  171 + /**
  172 + * @description : (TODO) 获取所有的停车场详情.
  173 + *
  174 + * @param [cb--回调函数].
  175 + *
  176 + * @return 返回所有的停车场详情.
  177 + *
  178 + * @status OK.
  179 + * */
  180 + var gettccInfo = function (cb) {
  181 + // 1、get异步请求.获取所有的停车场详情.
  182 + $get('/carpark/all',null, function(cd){
  183 + // 2、返回所有的停车场详情.
  184 + return cb && cb(cd);
  185 + });
  186 + }
  187 +
  188 + /**
  189 + * @description : (TODO) 时间格式字符串转时间对象.
  190 + *
  191 + * @param [time--时间格式字符串].
  192 + *
  193 + * @return 返回一个时间对象.
  194 + *
  195 + * @status OK.
  196 + * */
  197 + var getDateTime = function(time) {
  198 + // 1、定义一个时间对象.
  199 + var dateTime = new Date();
  200 + // 2、判断参数是否为空或者为undefined.
  201 + if(time !=null && time !='' && typeof(time) !='undefined') {
  202 + // 3、给时间对象重新赋值.
  203 + dateTime = new Date(Date.parse(time.replace(/-/g, "/")));
  204 + }
  205 + // 4、返回时间对象.
  206 + return dateTime;
  207 + }
  208 +
  209 + /**
  210 + * @description : (TODO) 客流方式填充表单时.根据表单参数封装时间段内的车辆数.
  211 + *
  212 + * @param : [map--表单参数]
  213 + *
  214 + * @returns 返回一个根据表单参数封装时间段内的车辆数数组.
  215 + *
  216 + * @status OK.
  217 + * */
  218 + function getsjdArr(map) {
  219 + // 1、获取营运的开始与结束时间点.
  220 + var seMap = getStartAndEndDate(map);
  221 + // 2、返回一个根据表单参数封装时间段内的车辆数数组.
  222 + return [{'num':0,'time':seMap.s + '-' + map.earlyStartTime},// 早高峰之前时间段内的车辆.
  223 + {'num':0,'time':map.earlyStartTime + '-' + map.earlyEndTime}, // 早高峰时间段内的车辆.
  224 + {'num':0,'time':map.earlyEndTime + '-' + map.lateStartTime},// 高峰之间时间段内的车辆
  225 + {'num':0,'time':map.lateStartTime + '-' + map.lateEndTime},// 晚高峰时间段内的车辆.
  226 + {'num':0,'time':map.lateEndTime + '-' + seMap.e}];// 晚高峰之后时间段内的车辆.
  227 + }
  228 +
  229 + /**
  230 + * @description : (TODO) 获取最小时间(字符串).
  231 + *
  232 + * @param [d1--时间1;d2--时间2].
  233 + *
  234 + * @return 返回一个最小时间(字符串).
  235 + *
  236 + * @status OK.
  237 + * */
  238 + function getMinDate(d1,d2) {
  239 + // 1、定义返回字符串.
  240 + var str = '';
  241 + // 2、判断时间大小.
  242 + if(strToTime(d1)>strToTime(d2))
  243 + str = d2;
  244 + else
  245 + str = d1;
  246 + // 3、返回最小时间(字符串).
  247 + return str;
  248 + }
  249 +
  250 + /**
  251 + * @description : (TODO) 获取最大时间(字符串).
  252 + *
  253 + * @param [d1--时间1;d2--时间2].
  254 + *
  255 + * @return 返回一个最大时间(字符串).
  256 + *
  257 + * @status OK.
  258 + * */
  259 + function getMaxDate(d1,d2) {
  260 + // 1、定义返回时间字符串.
  261 + var str = '';
  262 + // 2、判断时间大小.
  263 + if(strToTime(d1)>strToTime(d2))
  264 + str = d1;
  265 + else
  266 + str = d2;
  267 + // 3、返回一个最大时间(字符串).
  268 + return str;
  269 + }
  270 +
  271 + /**
  272 + * @description : (TODO) 判断是否这时间段内.
  273 + *
  274 + * @param [st--开始时间;ed--结束时间;sj--当前判断的时间]
  275 + *
  276 + * @return 返回一个布尔值.
  277 + *
  278 + * @status OK.
  279 + * */
  280 + function issjd(st,ed,sj) {
  281 + // 1、定义返回值.
  282 + var tag = false;
  283 + // 2、判断时间大小.
  284 + if(sj<=ed && sj>=st)
  285 + // 3、重新赋值返回值.
  286 + tag = true;
  287 + // 4、返回判断结果布尔值.
  288 + return tag;
  289 + }
  290 +
  291 + /**
  292 + * @description : (TODO) 获取客流数据.
  293 + *
  294 + * @params [url--请求地址;data--请求参数;cb--回调函数]
  295 + *
  296 + * */
  297 + function getJSONP(url, data, cb) {
  298 + $.ajax({
  299 + url : url,
  300 + type : "GET",
  301 + dataType : 'jsonp',
  302 + jsonp : 'jsoncallback',
  303 + data : data,
  304 + success : cb
  305 + });
  306 + }
  307 +
  308 + /**
  309 + * 判断某个时间是否在指定时间段内
  310 + * @param start 开始时间
  311 + * @param end 结束时间
  312 + * @param t 指定时间
  313 + * @param isWrapTime 是否重新包装时间
  314 + */
  315 + function issjd_extend(start, end, t, flag) {
  316 + var m_start = moment(start);
  317 + var m_end = moment(end);
  318 + var m_t = moment(t);
  319 +
  320 + if (flag) {
  321 + // 重新构造时间,保留时间的小时,分钟,秒,忽略年月日
  322 + var date_wrap_prefix = "2000-01-01 "; // 包装日期的前缀
  323 + var date_wrap_format = "YYYY-MM-DD HH:mm:ss"; // 日期格式
  324 +
  325 + var m_start_wrap = moment(date_wrap_prefix + m_start.format("HH:mm:ss"), date_wrap_format);
  326 + var m_end_wrap = moment(date_wrap_prefix + m_end.format("HH:mm:ss"), date_wrap_format);
  327 + var m_t_wrap = moment(date_wrap_prefix + m_t.format("HH:mm:ss"), date_wrap_format);
  328 +
  329 + return m_t_wrap.isAfter(m_start_wrap) && m_t_wrap.isBefore(m_end_wrap);
  330 + } else {
  331 + return issjd(start, end, t);
  332 + // return m_t.isAfter(m_start) && m_t.isBefore(m_end);
  333 + }
  334 +
  335 + }
  336 +
  337 + /**
  338 + * @description : (TODO) 根据获取参数方式来获取表单参数详情html模版页.
  339 + *
  340 + * @param [n--获取参数方式;map--表单参数;lineId--线路ID;krl--客容量;cb--回调函数]
  341 + *
  342 + * @return 返回表单参数详情html模版页.
  343 + *
  344 + * @status OK.
  345 + * */
  346 + var getHtmlTemp = function(n,map,lineId,krl,cb) {
  347 + // 1、定义模版名称.
  348 + var tempName = '';
  349 + if(n==0)
  350 + tempName = 'carnum_temp';
  351 + else if(n==1)
  352 + tempName = 'bctype_temp';
  353 + else if (n==2 || n==3)
  354 + tempName = 'fcjx_temp';
  355 + // 2、获参数详情模版html内容.
  356 + $.get('/pages/base/timesmodel/tepms/'+ tempName + '.html', function(html){
  357 + $('#tab3').append(html);
  358 + map.lb = 15;// 定义例保时间.
  359 + map.workeLunch = 20;// 定义午餐时间.
  360 + map.workeDinner = 20;// 定义晚餐时间.
  361 + //map.mixstopTime = 8;// 定义最小停站间隙
  362 + //map.maxstopTime = 20;// 定义最大停站间隙.
  363 + //map.upStopTime = 10;// 定义上行停站时间.
  364 + //map.downStopTime = 10;// 定义下行停站时间.
  365 + if(n==0) {
  366 + // 定义一个周转时间.
  367 + var zzsj = parseInt(map.upTravelTime) + 10*2 + parseInt(map.downTravelTime);
  368 + // 定义时间对象.
  369 + var date = new Date();
  370 + // var rq = date.getFullYear() + '-' + (date.getMonth()+1) + '-' + (date.getDate()-7);
  371 +
  372 + // 减去7天
  373 + var m_date = moment(date);
  374 + m_date.add(-7, "d");
  375 + var rq = m_date.format("YYYY-MM-DD");
  376 +
  377 + console.log(date);
  378 + console.log(date.getDate());
  379 + console.log(rq);
  380 + // 定义开始时间字符串.
  381 + var startDateTime = rq + ' ' + '00:00';
  382 + // 定义结束时间自妇产.
  383 + var endDateTime = rq + ' ' + '23:59';
  384 + // 定义请求参数集合.
  385 + var params = {'xlid':lineId,'startDateTime':startDateTime,'endDateTime':endDateTime,'zzsj':zzsj};
  386 + /**
  387 + * getJSONP请求获取客流数据.
  388 + *
  389 + * 返回的是一个每次以半小时为间隔作为开始时间点, 在加上周转时间作为结束时间点的 时段段内的客流最大通过量.
  390 + * */
  391 + getJSONP(
  392 + // "http://139.196.13.237:8080/bsth-busfareflow-gj/Crlcxb/selectsjbctgl.do",
  393 + "http://180.166.5.82:9816/bsth-busfareflow-gj/Crlcxb/selectsjbctgl.do",
  394 + params,function(json){
  395 + console.log(json);
  396 +
  397 + // 定义时段集合,可容量.
  398 + var sjdArr = getsjdArr(map),krlInt = parseInt(krl);
  399 + console.log("krlInt=" + krlInt);
  400 + // 遍历时段集合.
  401 + for(var s = 0 ; s<sjdArr.length;s++) {
  402 + // 分割时间段.
  403 + var strA = sjdArr[s].time.split('-');
  404 + // 定义开始时间与结束时间,车辆数.
  405 + var st = getDateTime(rq + ' ' + strA[0]),et = getDateTime(rq + ' ' + strA[1]),num = 0;
  406 +
  407 + console.log("s=" + s + " st=" + st + " et=" + et);
  408 +
  409 + // 遍历时间段内的客流数据集合.
  410 + for(var j = 0 ; j < json.length; j ++) {
  411 + // 定义当前客流班次产生的时间.
  412 + var dqsj = getDateTime(json[j].sj);
  413 + // 判断是否这时间段内.
  414 + if(issjd_extend(st, et, dqsj, true)) {
  415 + // 车辆数相加.
  416 + sjdArr[s].num += Math.ceil(parseInt(json[j].tgl) / krlInt);
  417 + // num = num + Math.ceil(parseInt(json[j].tgl)/krlInt);
  418 + }
  419 + }
  420 + // sjdArr[s].num = num;
  421 + }
  422 +
  423 + // 注意:如果为0,设置成 10 17默认值
  424 + map.zgfbeforepcs = sjdArr[0].num == 0 ? 10 : sjdArr[0].num;// 早高峰前配车数
  425 + map.zgfpcs = sjdArr[2].num == 0 ? 17 : sjdArr[2].num;// 早高峰配车数
  426 + map.gfzjpcs = sjdArr[4].num == 0 ? 10 : sjdArr[4].num;// 高峰之间配车数
  427 + map.wgfpcs = sjdArr[2].num == 0 ? 17 : sjdArr[2].num ;// 晚高峰配车数
  428 + map.wgfafterpcs = (sjdArr[1].num + sjdArr[3].num) == 0 ? 10 : sjdArr[1].num + sjdArr[3].num;// 晚高峰后配车数
  429 +
  430 + // 注意:高峰 5 低谷 20 其他 10
  431 + map.upStopTime = 10;
  432 + map.downStopTime = 10;
  433 + map.mixstopTime = 5;
  434 + map.maxstopTime = 20;
  435 +
  436 + //alert("dddd");
  437 +
  438 + // 返回参数详情模版.
  439 + return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})});
  440 + });
  441 + }else if(n==1) {
  442 + // 更具站点路由版本获取起点终点站
  443 + var iversion = $('#lineVersionSelect').val();
  444 + $get('/stationroute/all',{'line.id_eq':lineId,'destroy_eq':0, 'versions_eq': iversion},function(result) {
  445 + $.each(result, function(i, d) {
  446 + if (d.stationMark == 'B' && d.directions == 0) {
  447 + // alert(d.stationName);
  448 + map.line.startStationName = d.stationName;
  449 + } else if (d.stationMark == 'E' && d.directions == 0) {
  450 + // alert(d.stationName);
  451 + map.line.endStationName = d.stationName;
  452 + }
  453 + });
  454 +
  455 + // return cb && cb({
  456 + // 'forminput': template(tempName, {map: map}),
  457 + // 'datadisplay': template(tempName + '_config', {map: null})
  458 + // });
  459 + // 返回参数详情模版.
  460 + return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})});
  461 + });
  462 + }else if (n==2 || n==3) {
  463 + // 更具站点路由版本获取起点终点站
  464 + var iversion = $('#lineVersionSelect').val();
  465 + $get('/stationroute/all',{'line.id_eq':lineId,'destroy_eq':0, 'versions_eq': iversion},function(result) {
  466 + $.each(result, function(i, d) {
  467 + if (d.stationMark == 'B' && d.directions == 0) {
  468 + // alert(d.stationName);
  469 + map.line.startStationName = d.stationName;
  470 + } else if (d.stationMark == 'E' && d.directions == 0) {
  471 + // alert(d.stationName);
  472 + map.line.endStationName = d.stationName;
  473 + }
  474 + });
  475 +
  476 +
  477 + return cb && cb({
  478 + 'forminput': template(tempName, {map: map}),
  479 + 'datadisplay': template(tempName + '_config', {map: null})
  480 + });
  481 + });
  482 +
  483 + }
  484 + });
  485 + };
  486 +
  487 + /**
  488 + * @description (TODO) 格式化成渲染图形数据格式.
  489 + *
  490 + * @param [d--查询出的时刻表明细数据.]
  491 + *
  492 + * @return 返回渲染图形的数据格式.
  493 + * */
  494 + function formatData(d) {
  495 + // 定义返回值.
  496 + var resultD = new Array(),lpA = new Array(),rsLpA = new Array();
  497 + for(var i =0;i<d.length;i++) {
  498 + var obj = {};
  499 + var ddsj = getddsj(d[i].fcsj,d[i].bcsj);// 到达时间.
  500 + obj.bcType = d[i].bcType;// 班次类型
  501 + obj.bcs = d[i].bcs;// 班次数
  502 + obj.bcsj = d[i].bcsj;// 班次时间
  503 + obj.fcno = d[i].fcno;// 发车序号
  504 + obj.fcsj = d[i].fcsj;// 发车时间
  505 + obj.ARRIVALTIME = ddsj// 到达时间
  506 + obj.jhlc = d[i].jhlc;// 计划里程
  507 + obj.lp = d[i].lp==null ? null : d[i].lp.id;// 路牌id
  508 + obj.lpType = d[i].lp==null ? null : d[i].lp.lpType;// 路牌类型
  509 + // obj.parent = d[i].lp.lpName;// 路牌名称
  510 + // obj.parent = parseInt(d[i].lp.lpNo);// 路牌名称
  511 + obj.lpName = d[i].lp.lpName;
  512 + obj.lpNo = d[i].lp.lpNo;// 路牌编码
  513 + obj.tcc = d[i].tcc==null ? null : d[i].tcc.id;// 停车场id
  514 + obj.ttinfo = d[i].ttinfo==null ? null : d[i].ttinfo.id;// 时刻表id
  515 + obj.xl = d[i].xl==null ? null : d[i].xl.id;// 线路id
  516 + obj.xlDir = dmToDh(d[i].xlDir);// 方向【0:relationshipGraph-up 上行;1:relationshipGraph-down 下行】
  517 + obj.qdz = d[i].qdz==null ? null : d[i].qdz.id;// 起点站id
  518 + obj.zdz = d[i].zdz==null ? null : d[i].zdz.id;//终点站id
  519 + obj.isfb = isfbTodm(d[i].isFB);// 是否分班【0:false;1:true】
  520 + obj.isSwitchXl = isSwitchXlTodm(d[i].isSwitchXl);// 是否切换线路【0:false;1:true】
  521 + obj.STOPTIME = gettzsj(d[i],d,ddsj);// 停站时间.
  522 + resultD.push(obj);
  523 + if(lpA.indexOf(obj.lpNo)<0) {
  524 + lpA.push(obj.lpNo);
  525 + rsLpA.push({'lp':obj.lp,'lpNo':obj.lpNo,'lpName':obj.lpName,'lpType':obj.lpType});
  526 + }
  527 + }
  528 + // 返回渲染图形的数据格式.
  529 + return {'rsD':resultD,'rsLp':rsLpA};
  530 + }
  531 +
  532 + /**
  533 + * @description : (TODO) 获取开始与结束时间字符串.
  534 + *
  535 + * @param [map--表单配置参数]
  536 + *
  537 + * @return 返回开始与结束时间字符串集合.
  538 + * */
  539 + function getStartAndEndDate(map) {
  540 + return {'s':getMinDate(map.line.startStationFirstTime,map.line.endStationFirstTime),
  541 + 'e':getMaxDate(map.line.startStationEndTime,map.line.endStationEndTime)}
  542 + }
  543 +
  544 + return {
  545 + // 启动初始化向导导航
  546 + init : function() {
  547 + if(!jQuery().bootstrapWizard) {return;}
  548 + var form = $('#submit_argus_form');// 表单
  549 + var error = $('.alert-danger',form);// 表单异常
  550 + var success = $('.alert-success',form);// 表单成功
  551 + /** 表单验证 */
  552 + form.validate({
  553 + errorElement : 'span',// 错误提示元素span对象
  554 + errorClass : 'help-block help-block-error',// 错误提示元素class名称
  555 + focusInvalid : true,// 验证错误获取焦点
  556 + /** 需要验证的表单元素 */
  557 + rules : {
  558 + 'skbName' : {required : true,},// 时刻表名称,必填项.
  559 + 'lineName' : {required : true,},// 线路名称,必填项.
  560 + 'lineVersion': {required: true}, // 站点路由版本,必填项,
  561 + // 'krl' : {isBaseRes : true,number : true,digits : true,},// 客容量,当选择为客流方式时必填项、整数
  562 + 'startStationFirstTime' : {required : true}, // 起始站首班时间,必填项.
  563 + 'startStationEndTime' : {required : true}, // 起始站末班时间 ,必填项.
  564 + 'endStationFirstTime' : {required : true}, // 终点站首班时间 ,必填项.
  565 + 'endStationFirstTime' : {required : true}, // 终点站末班时间 ,必填项.
  566 + 'endStationEndTime' : {required : true}, // 终点站末班时间,必填项.
  567 + 'earlyStartTime' : {required : true},// 早高峰开始时间,必填项 .
  568 + 'earlyEndTime' : {required : true},// 早高峰结束时间,必填项 .
  569 + 'lateStartTime' : {required : true},// 晚高峰开始时间,必填项 .
  570 + 'lateEndTime' : {required : true},// 晚高峰结束时间,必填项.
  571 + 'zgfbeforepcs' : {required : true,number : true,digits : true, isNum0:true},// 早高峰前车辆数,必填项、必须为整数.
  572 + 'zgfpcs' : {required : true,number : true,digits : true, isNum0:true, isMax: true},// 早高峰车辆数,必填项、必须为整数.
  573 + 'wgfafterpcs' : {required : true,number : true,digits : true, isNum0:true},// 晚高峰后车俩数,必填项、必须为整数.
  574 + 'wgfpcs' : {required : true,number : true,digits : true, isNum0:true, isMax: true},// 晚高峰车俩数,必填项、必须为整数.
  575 + 'gfzjpcs' : {required : true,number : true,digits : true, isNum0:true},// 高峰中间车辆数,必填项、必须为整数.
  576 + 'upTravelTime' : {required : true,number : true},// 上行行驶时间,必填项、必须为整数.
  577 + 'downTravelTime' : {required : true,number : true},// 下行行驶时间,必填项、必须为整数.
  578 + 'upMileage' : {required : true,number : true},// 上行行驶里程,必填项、必须为整数.
  579 + 'downMileage' : {required : true,number : true},// 下行行驶里程,必填项、必须为整数.
  580 + 'upStopTime' : {required : true,number : true,digits : true},// 上行停站间隙,必填项、必须为整数.
  581 + 'downStopTime' : {required : true,number : true,digits : true},// 下行停站间隙,必填项、必须为整数.
  582 + 'maxstopTime' : {required : true,number : true,digits : true},// 最大停站间隙,必填项、必须为整数.
  583 + 'mixstopTime' : {required : true,number : true,digits : true},// 最小停站间隙,必填项、必须为整数.
  584 + 'earlyUpTime' : {number : true},// 早高峰上行时间,必须为数字.
  585 + 'earlyDownTime' : {number : true},// 早高峰下行时间,必须为数字.
  586 + 'lateUpTime' : {number : true},// 晚高峰上行时间,必须为数字.
  587 + 'lateDownTime' : {number : true},// 晚高峰下行时间,必须为数字.
  588 + 'troughUpTime' : {number : true},// 低谷上行时间,必须为数字.
  589 + 'troughDownTime' : {number : true},// 低谷下行时间,必须为数字.
  590 + 'qjUpTime' : {number : true},// 区间上行时间,必须为数字.
  591 + 'qjDownTime' : {number : true},// 区间下行时间,必须为数字.
  592 + 'kfsj' : {number : true,digits : true},// 空放行驶时间,必须为数字.
  593 + 'workeLunch' : {number : true},// 工作餐午餐时间,必须为数字.
  594 + 'workeDinner' : {number : true},// 工作餐晚餐时间,必须为数字.
  595 + 'upInTimer' : {number : true},// 上行进场时间,必须为数字.
  596 + 'upOutTimer' : {number : true},// 上行出场时间,必须为数字.
  597 + 'downInTimer' : {number : true},// 下行进场时间,必须为数字.
  598 + 'downOutTimer' : {number : true},// 下行出场时间,必须为数字.
  599 + 'upInMileage' : {number : true},// 上行进场里程,必须为数字.
  600 + 'upOutMileage' : {number : true},// 上行出场里程,必须为数字.
  601 + 'downInMileage' : {number : true},// 下行进场里程,必须为数字.
  602 + 'downOutMileage' : {number : true},// 下行出场里程,必须为数字.
  603 + 'lb' : {number : true},// 早晚例行保养,必须为数字.
  604 + 'clzs':{required : true,number : true,digits : true, isBcType : true},// 车辆总数,必填项、必须为整数.
  605 + 'bxrc' : {required : true},// 班型人次,必填项
  606 + 'linePlayType' : {required : true},// 线路规划类型,必填项
  607 + 'zdzcrl' : {number : true,digits : true},
  608 + // 新增时间段字段
  609 + 'start1' : {required : true},
  610 + 'end1' : {required : true},
  611 + 'start2' : {required : true},
  612 + 'end2' : {required : true},
  613 + 'start3' : {required : true},
  614 + 'end3' : {required : true},
  615 + 'start4' : {required : true},
  616 + 'end4' : {required : true},
  617 + 'start5' : {required : true},
  618 + 'end5' : {required : true},
  619 +
  620 + 'gfupStopTime' : {required : true,number : true}, // 高峰上行停站时间,必填项、必须为整数.
  621 + 'gfdownStopTime' : {required : true,number : true}, // 高峰下行停站时间,必填项、必须为整数.
  622 + 'dgupStopTime' : {required : true,number : true}, // 低谷上行停站时间,必填项、必须为整数.
  623 + 'dgdownStopTime' : {required : true,number : true}, // 低谷下行停站时间,必填项、必须为整数.
  624 + 'dgmaxfcjx' : {required : true,number : true}, // 低谷最大发车间隙,必填项、必须为整数.
  625 + 'dgmaxtzsj' : {required : true,number : true}, // 低谷最大停站时间,必填项、必须为整数.
  626 +
  627 + // 发车间隙分析用参数
  628 + //'fcjx': {required: true}, // 时段发车间隙,TODO:貌似没发启用form验证
  629 + 'stt': {required: true}, // 停站类型,TODO:貌似没发启用form验证
  630 + 'zgffcjxmin' : {required : true,number : true,digits: true},// 早高峰最小发车间隔.
  631 + 'zgffcjxmax' : {required : true,number : true,digits: true},// 早高峰最大发车间隔.
  632 + 'wffcjxmin' : {required : true,number : true,digits: true},// 晚高峰最小发车间隔.
  633 + 'wffcjxmax' : {required : true,number : true,digits: true},// 晚高峰最大发车间隔.
  634 + 'dgfcjxmin' : {required : true,number : true,digits: true},// 低谷最小发车间隔.
  635 + 'dgfcjxmax' : {required : true,number : true,digits: true},// 低谷最大发车间隔.
  636 + 'gfjypcs': {required : true,number : true,digits: true}, // 高峰建议配车数
  637 + 'jbclcount': {required : true,number : true,digits: true} // 建议加班车数
  638 + },
  639 + messages: {
  640 + 'zgfbeforepcs': "未获取客流数据请手动输入",
  641 + 'zgfpcs': "未获取客流数据请手动输入",
  642 + 'wgfafterpcs': "未获取客流数据请手动输入",
  643 + 'wgfpcs': "未获取客流数据请手动输入",
  644 + 'gfzjpcs': "未获取客流数据请手动输入"
  645 + },
  646 +
  647 + /**
  648 + * 类型:Callback。当未通过验证的表单提交时,可以在该回调函数中处理一些事情。
  649 + *
  650 + * 参数:该回调函数有两个参数:第一个为一个事件对象,第二个为验证器(validator)
  651 + */
  652 + invalidHandler : function(event, validator) {
  653 + error.show();// 显示表单未通过提示信息
  654 + App.scrollTo(error, -200);// 把提示信息放到指定的位置。
  655 + },
  656 +
  657 + /**
  658 + * 类型:Callback。
  659 + *
  660 + * 默认:添加errorClass("has-error")到表单元素。将未通过验证的表单元素设置高亮。
  661 + */
  662 + highlight : function(element) {
  663 + $(element).closest('.form-group').addClass('has-error');// 添加errorClass("has-error")到表单元素
  664 + },
  665 +
  666 + /**
  667 + * 类型:Callback。
  668 + *
  669 + * 默认:移除errorClass("has-error")。与highlight操作相反
  670 + */
  671 + unhighlight : function(element) {
  672 + $(element).closest('.form-group').removeClass('has-error');// 移除errorClass("has-error")
  673 + },
  674 +
  675 + /**
  676 + * 类型:String,Callback。
  677 + *
  678 + * 如果指定它,当验证通过时显示一个消息。
  679 + *
  680 + * 如果是String类型的,则添加该样式到标签中;
  681 + *
  682 + * 如果是一个回调函数,则将标签作为其唯一的参数。
  683 + */
  684 + success : function(label) {
  685 + label.closest('.form-group').removeClass('has-error');// 当验证通过时,移除errorClass("has-error")
  686 + },
  687 +
  688 + /**
  689 + * 类型:Callback。
  690 + *
  691 + * 默认:default (native) form submit;当表单通过验证,提交表单。回调函数有个默认参数form
  692 + */
  693 + submitHandler : function(f) {
  694 + // 定义localStorage对象.
  695 + var storage = window.localStorage;
  696 + // 表单序列化.
  697 + var argus = form.serializeJSON();
  698 + console.log(argus);
  699 + // 获取站点路由.
  700 + $get('/stationroute/all',{'line.id_eq':argus.lineName.split('_')[0],'destroy_eq':0, 'versions_eq': argus.lineVersion},function(result) {
  701 + // 判断.
  702 + if(result) {
  703 + // 定义上行起点站,上行终点站,下行起点站,下行终点站.
  704 + var upB ='',upE='',downB='',downE='';
  705 + for(var r = 0 ; r<result.length;r++) {
  706 + if(result[r].directions==0 && result[r].stationMark =='B')
  707 + upB = result[r].id;
  708 + if(result[r].directions==0 && result[r].stationMark =='E')
  709 + upE = result[r].id;
  710 + if(result[r].directions==1 && result[r].stationMark =='B')
  711 + downB = result[r].id;
  712 + if(result[r].directions==1 && result[r].stationMark =='E')
  713 + downE = result[r].id;
  714 + }
  715 + argus.up_s = upB + '_' + upE;
  716 + argus.down_s = downB + '_' + downE;
  717 + // 获取停车车场.
  718 + $get('/carpark/all',{'parkCode_eq':argus.tcc},function(cp) {
  719 + var tcc_id = '';
  720 + if(cp) {
  721 + tcc_id = cp[0].id;
  722 + }
  723 + argus.tcc_id = tcc_id; // 停车场ID.
  724 + argus.skbmc = $('#skbNameSelect').select2('data')[0].text;// 时刻名称.
  725 + argus.xlmc = $('#lineSelect').select2('data')[0].text;// 线路名称.
  726 + // 获取时刻表明细.
  727 + $get('/tidc/all',{'ttinfo.id_eq':parseInt(argus.skbName)},function(data) {
  728 + if(data.status=='SUCCESS' && data.data.length>0) {
  729 + argus.istidc = 1;
  730 + layer.confirm('系统已存在该时刻表【'+
  731 + $("#skbNameSelect").select2("data")[0].text +
  732 + '】明细,是否使用已有数据渲染模型?', {
  733 + btn: ['确定并使用','取消并继续'] //按钮
  734 + }, function(){
  735 + layer.closeAll();
  736 + submit(formatData(data.data),argus);
  737 + }, function(){
  738 + submit(null,argus);
  739 + });
  740 + }else {
  741 + argus.istidc = 0;
  742 + submit(null,argus);
  743 + }
  744 + });
  745 + });
  746 + }else {
  747 + layer.msg('系统不存在该线路的上、下行起终点站!');
  748 + }
  749 + });
  750 +
  751 + // 表单提交.
  752 + function submit(p,argus) {
  753 + var baseRes2 = $('#submit_argus_form input[name="baseRes"]:checked').val();// 获取参数方式值.
  754 + if (baseRes2 == 0) {
  755 + // TODO:客流暂时有问题,直接使用现有时刻表打开,日后有机会再改好
  756 + var skbId2 = $("#skbNameSelect").val();
  757 + var argus2 = {
  758 + baseRes:"0",carPark:"FFFFFF68",downInMileage:"0",
  759 + downInTimer:"0",downMileage:"3.5",downOutMileage:"0",
  760 + downOutTimer:"0",downStopTime:"10",downTravelTime:"7",
  761 + down_s:"26922_26928",earlyDownTime:"7",earlyEndTime:"08:30",
  762 + earlyStartTime:"06:31",earlyUpTime:"10",endStationEndTime:"22:30",
  763 + endStationFirstTime:"05:50",gfzjpcs:"7",istidc:1,kfsj:"",krl:"50",
  764 + lateDownTime:"7",lateEndTime:"18:30",lateStartTime:"16:31",
  765 + lateUpTime:"10",lb:"15",lineName:"801702_801702_1109路",
  766 + linePlayType:"0",maxstopTime:"20",mixstopTime:"8",qjDownTime:"",
  767 + qjUpTime:"",skbName:skbId2,skbmc:"2016.4.6双时刻表",
  768 + startStationEndTime:"23:00",startStationFirstTime:"06:15",tcc_id:45,troughDownTime:"7",troughUpTime:"10",upInMileage:"0",
  769 + upInTimer:"10",upMileage:"3.5",upOutMileage:"0",upOutTimer:"10",upStopTime:"10",upTravelTime:"10",
  770 + up_s:"26912_26921",wgfafterpcs:"5",wgfpcs:"10",workeDinner:"20",workeLunch:"20",xlmc:"1109路",zgfbeforepcs:"3",zgfpcs:"10",}
  771 + // 获取时刻表明细.
  772 + $get('/tidc/all',{'ttinfo.id_eq':parseInt(argus.skbName)},function(data) {
  773 + var p = formatData(data.data,argus2);
  774 + // TODO:添加parent
  775 + for (var ii = 0; ii < p.rsD.length; ii++) {
  776 + p.rsD[ii].parent = p.rsD[ii].lpNo;// 路牌名称
  777 + }
  778 +
  779 + argus2.istidc = 1;
  780 + var storage = window.localStorage;
  781 + storage.setItem("Gantt_AgursData",JSON.stringify(argus2));
  782 + storage.setItem('isDoDate',JSON.stringify({'rsD':p.rsD,'rsLP':p.rsLp}));
  783 + loadPage('gantt.html');
  784 + });
  785 + } else {
  786 + storage.setItem("Gantt_AgursData",JSON.stringify(argus));
  787 + if(p!=null) {
  788 + storage.setItem('isDoDate',JSON.stringify({'rsD':p.rsD,'rsLP':p.rsLp}));
  789 + }else {
  790 + storage.setItem('isDoDate','');
  791 + }
  792 + loadPage('gantt.html');
  793 + }
  794 +
  795 +
  796 + }
  797 + }
  798 + });
  799 +
  800 + // 验证配车数不能为零.
  801 + $.validator.addMethod('isNum0', function(value,element) {
  802 + // 定义返回值.
  803 + var tag = true;
  804 + var zgfbeforepcs = $('#zgfbeforepcsInput').val(),// 早高峰前配车数.
  805 + zgfpcs = $('#zgfpcsInput').val(),// 早高峰配车数.
  806 + gfzjpcs = $('#gfzjpcsInput').val(),// 高峰之间配车数.
  807 + wgfpcs = $('#wgfpcsInput').val(),// 晚高峰配车数.
  808 + wgfafterpcs = $('#wgfafterpcsInput').val();// 晚高峰后配车数.
  809 + // 判断是否为零.
  810 + if(parseInt(zgfbeforepcs) == 0 || parseInt(zgfbeforepcs) ==0 ||
  811 + parseInt(gfzjpcs) ==0 || parseInt(wgfpcs) ==0 || parseInt(wgfafterpcs) ==0)
  812 + tag = false;
  813 + return tag;
  814 + },function(){return '配车数不能为零!'; });
  815 +
  816 + // 验证高峰时段内的配车数是否高于其它时段配车数.
  817 + $.validator.addMethod('isMax', function(value,element) {
  818 + var tag = true;
  819 + var zgfbeforepcs = parseInt($('#zgfbeforepcsInput').val()),// 早高峰前配车数.
  820 + zgfpcs = parseInt($('#zgfpcsInput').val()),// 早高峰配车数.
  821 + gfzjpcs = parseInt($('#gfzjpcsInput').val()),// 高峰之间配车数.
  822 + wgfpcs = parseInt($('#wgfpcsInput').val()),// 晚高峰配车数.
  823 + wgfafterpcs = parseInt($('#wgfafterpcsInput').val());// 晚高峰后配车数.
  824 + // 判断高峰时段内的配车数是否高于其它时段配车数.
  825 + if(zgfpcs<zgfbeforepcs || zgfpcs<gfzjpcs || zgfpcs<wgfafterpcs || wgfpcs<zgfbeforepcs || wgfpcs<gfzjpcs || wgfpcs<wgfafterpcs )
  826 + tag = false;
  827 + return tag;
  828 + },function(){return '高峰时段配车数必须高于其它时段配车数!';});
  829 +
  830 + // 验证客流数据分析时客容量为必填项.
  831 + /*$.validator.addMethod("isBaseRes", function(value,element) {
  832 + // 定义返回值.
  833 + var tag = true;
  834 + // 定义选择获取参数方式值
  835 + var baseChecked = $('#submit_argus_form input[name="baseRes"]:checked').val();
  836 + // 判断
  837 + if(baseChecked == '0' && $('#krlInput').val()== '')
  838 + tag = false;
  839 + return tag;
  840 + }, '客流大数据分析,客流总量为必填项!');
  841 + */
  842 + // 验证配车总数与班型人次搭配
  843 + $.validator.addMethod('isBcType', function(value,element) {
  844 + // 定义返回值.
  845 + var tag = true;
  846 + // 定义车辆总数,班型人次.
  847 + var clzs = $('#clzsInput').val(),
  848 + bxrc = $('#state_tagsinput').val();
  849 + // 判断.
  850 + if(bxrc=='' || bxrc==null || clzs=='' || clzs==0)
  851 + return false;
  852 + var bxrcAr = bxrc.split(','),pczs = 0;
  853 + for(var s = 0 ; s< bxrcAr.length;s++) {
  854 + // 切割单个班型人次.
  855 + pczs = pczs + parseInt(bxrcAr[s].split('/')[2]);
  856 + }
  857 + if(pczs!=clzs)
  858 + tag = false;
  859 + /**
  860 + // 定义首末班次开始结束时间集合.
  861 + var map = {'line':{'startStationFirstTime':$('#qdzsbsjInput').val(),
  862 + 'startStationEndTime':$('#qdzmbsjInput').val(),
  863 + 'endStationFirstTime':$('#zdzsbsjInput').val(),
  864 + 'endStationEndTime':$('#zdzmbsjInput').val()}};
  865 + // 定义开始~结束时间.
  866 + var setMap = getStartAndEndDate(map);
  867 + // 定义最大工时.
  868 + var maxGs = parseInt( ((strToTime(setMap.e) - strToTime(setMap.s)) / 60000) / 60) * parseInt(clzs);
  869 + // 切割班型人次,定义班次人次所用总工时.
  870 + var bxrcAr = bxrc.split(','),countGs = 0,countRc = 0;
  871 + // 遍历
  872 + for(var s = 0 ; s< bxrcAr.length;s++) {
  873 + // 切割单个班型人次.
  874 + var s1a = bxrcAr[s].split('/');
  875 + // 定义人次.
  876 + var rs = parseInt(s1a[1]);
  877 + // 定义小时系数.
  878 + var hoursV = 0.0;
  879 + for(var g = 0 ; g < bxrcGs.length; g++) {
  880 + // 判断班型是否一致.
  881 + if(bxrcGs[g].type == s1a[0]) {
  882 + // 重新赋值小时系数.
  883 + hoursV = bxrcGs[g].hoursV;
  884 + }
  885 + }
  886 + // 重新计算班次人次所用总工时.
  887 + countGs = countGs + parseFloat(hoursV.toFixed(2)) * rs;
  888 + countRc = countRc + rs;
  889 + }
  890 + // 判断
  891 + if(parseFloat(countGs.toFixed(2))>maxGs || (bxrcAr.length==1 && countRc > parseInt(clzs)) )
  892 + tag = false;
  893 + */
  894 + return tag;
  895 + },function(){return '配车总数与【班型/人次/车辆】搭配不合理!'; });
  896 +
  897 + /**
  898 + * @description : (TODO) 监听获取参数方式值改变事件.
  899 + *
  900 + * */
  901 + /*$('input:radio[name="baseRes"]').on('change',function(v) {
  902 + if($(this).val()=='1')
  903 + $('#krlGroup').hide();
  904 + else if($(this).val()=='0')
  905 + $('#krlGroup').show();
  906 + });*/
  907 +
  908 + // 确认提交信息
  909 + var displayConfirm = function() {
  910 + // 遍历表单元素下的tab4的class名称为form-control-static
  911 + $('#tab4 .form-control-static', form).each(function(){
  912 + var input = $('[name="'+$(this).attr("data-display")+'"]', form);// 定义input
  913 + if (input.is(":radio")) {
  914 + input = $('[name="'+$(this).attr("data-display")+'"]:checked', form);
  915 + }
  916 + if (input.is(":text") || input.is("textarea")) {
  917 + $(this).html(input.val());
  918 + } else if (input.is("select")) {
  919 + $(this).html(input.find('option:selected').text());
  920 + } else if (input.is(":radio") && input.is(":checked")) {
  921 + $(this).html(input.attr("data-title"));
  922 + } else if ($(this).attr("data-display") == 'payment[]') {
  923 + var payment = [];
  924 + $('[name="payment[]"]:checked', form).each(function(){
  925 + payment.push($(this).attr('data-title'));
  926 + });
  927 + $(this).html(payment.join("<br>"));
  928 + }
  929 + });
  930 + };
  931 +
  932 + /** 按钮点击时触发 */
  933 + var handleTitle = function(tab, navigation, index) {
  934 + var total = navigation.find('li').length;// 定义导航条标签个数
  935 + var current = index + 1;// 当前标签页
  936 + $('.step-title', $('#form-wizard-info')).text((index + 1) + ' - ' + total); // 设置向导标题
  937 + jQuery('li', $('#form-wizard-info')).removeClass("done"); // 删除"done"样式
  938 + var li_list = navigation.find('li');// 获取导航标签元素集合
  939 + for (var i = 0; i < index; i++) {
  940 + jQuery(li_list[i]).addClass("done");// 追加done样式
  941 + }
  942 + /** 如果为第一步隐藏返回按钮,否则显示返回按钮. */
  943 + if (current == 1) {
  944 + $('#submit_argus_form').find('.button-previous').hide();// 隐藏返回按钮
  945 + } else {
  946 + $('#submit_argus_form').find('.button-previous').show();// 显示返回按钮
  947 + }
  948 +
  949 + /** 如果为最后一步显示提交按钮,隐藏下一步按钮,否则隐藏提交按钮,显示下一步按钮 */
  950 + if (current >= total) {
  951 + $('#submit_argus_form').find('.button-next').hide();// 隐藏下一步按钮
  952 + $('#submit_argus_form').find('.button-submit').show();// 显示提交按钮
  953 + displayConfirm(); // 确认提交信息
  954 + } else {
  955 + $('#submit_argus_form').find('.button-next').show();// 显示下一步按钮
  956 + $('#submit_argus_form').find('.button-submit').hide();// 隐藏提交按钮
  957 + }
  958 + App.scrollTo($('.page-title'));// 移动到指定位置
  959 + };
  960 +
  961 + // 表单导航向导插件
  962 + $('#submit_argus_form').bootstrapWizard({
  963 + 'nextSelector': '.button-next',// 下一步元素选择器
  964 + 'previousSelector': '.button-previous',// 返回元素选择器
  965 + /** 当一个导航标签被点击,返回错误的移动到该选项卡,并显示它的内容. */
  966 + onTabClick: function (tab, navigation, index, clickedIndex) {
  967 + return false;
  968 + success.hide();
  969 + error.hide();
  970 + if (form.valid() == false) {
  971 + return false;
  972 + }
  973 + handleTitle(tab, navigation, clickedIndex);
  974 + },
  975 + /** 下一步按钮被单击时触发, 返回移动到下一个步骤. */
  976 + onNext: function (tab, navigation, index) {
  977 + success.hide();
  978 + error.hide();
  979 + if (form.valid() == false) {
  980 + return false;
  981 + }
  982 + /*if(index==1) {
  983 + // 初始化客容量值.
  984 + if($('#krlInput').val() == '')
  985 + $('#krlInput').val(50);
  986 + }else */if(index == 2) {
  987 + var baseRes = $('#submit_argus_form input[name="baseRes"]:checked').val(),// 获取参数方式值.
  988 + lineId = $('#lineSelect').val().split('_')[0],// 线路ID.
  989 + krl = 50;
  990 + // krl = $('#krlInput').val();// 客容量
  991 + // 弹出正在加载层
  992 + var i = layer.load(2);
  993 + getLineInfo(lineId,function(r) {
  994 + getHtmlTemp(baseRes,r.content[0],lineId,krl,function(htlMap) {
  995 + $('#tab3').html(htlMap.forminput);
  996 + $('#tab4').html(htlMap.datadisplay);
  997 +
  998 + if (baseRes == 0) { // 客流大数据分析
  999 + $('#linePlayTypeSelect').val(r.content[0].line.linePlayType);
  1000 + // 停站类型选择控件
  1001 + ComponentsBootstrapTagsinput.init_stoptype();
  1002 + // 日期控件
  1003 + $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间
  1004 + $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间
  1005 + $('#zdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站首班时间
  1006 + $('#zdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站末班时间
  1007 + $('#zgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰开始时间
  1008 + $('#zgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰结束时间
  1009 + $('#wgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰开始时间
  1010 + $('#wgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰结束时间
  1011 + // 初始化停车场下拉框.
  1012 + gettccInfo(function(cd) {
  1013 + var options = '<option value="">请选择...</option><optgroup label="停车场">';
  1014 + var $_len = cd.length;
  1015 + if($_len>0) {
  1016 + $.each(cd, function(i, d){
  1017 + options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
  1018 + });
  1019 +
  1020 + }
  1021 + options += '</optgroup>';
  1022 + $('#carParkSelect').html(options).select2();
  1023 + $('#carParkSelect').select2("val",r.content[0].carPark);
  1024 + // 关闭弹出加载层
  1025 + layer.close(i);
  1026 + });
  1027 +
  1028 + } else if (baseRes == 1) { // 班次/人次/车辆
  1029 + $('#linePlayTypeSelect').val(r.content[0].line.linePlayType);
  1030 + ComponentsBootstrapTagsinput.init();// 初始化班型人次Input Tag.
  1031 + // 停站类型选择控件
  1032 + ComponentsBootstrapTagsinput.init_stoptype();
  1033 + // 日期控件
  1034 + $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间
  1035 + $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间
  1036 + $('#zdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站首班时间
  1037 + $('#zdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站末班时间
  1038 + $('#zgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰开始时间
  1039 + $('#zgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰结束时间
  1040 + $('#wgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰开始时间
  1041 + $('#wgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰结束时间
  1042 + $('#startInput1').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1043 + $('#endInput1').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1044 + $('#startInput2').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1045 + $('#endInput2').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1046 + $('#startInput3').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1047 + $('#endInput3').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1048 + $('#startInput4').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1049 + $('#endInput4').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1050 + $('#startInput5').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1051 + $('#endInput5').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1052 + // 初始化停车场下拉框.
  1053 + gettccInfo(function(cd) {
  1054 + var options = '<option value="">请选择...</option><optgroup label="停车场">';
  1055 + var $_len = cd.length;
  1056 + if($_len>0) {
  1057 + $.each(cd, function(i, d){
  1058 + options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
  1059 + });
  1060 +
  1061 + }
  1062 + options += '</optgroup>';
  1063 + $('#carParkSelect').html(options).select2();
  1064 + $('#carParkSelect').select2("val",r.content[0].carPark);
  1065 + // 关闭弹出加载层
  1066 + layer.close(i);
  1067 + });
  1068 +
  1069 + } else if (baseRes == 2 || baseRes == 3) { // 发车间隔分析
  1070 + // 上下行首末班日期控件
  1071 + $('#startStationFirstTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1072 + $('#startStationEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1073 + $('#endStationFirstTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1074 + $('#endStationEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1075 +
  1076 + // 早高峰晚高峰日期控件
  1077 + $('#earlyStartTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1078 + $('#earlyEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1079 + $('#lateStartTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1080 + $('#lateEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  1081 +
  1082 + // 线路规划类型日期控件
  1083 + $('#linePlayType_id').val(r.content[0].line.linePlayType);
  1084 +
  1085 + // 停车场下拉框控件
  1086 + gettccInfo(function(cd) {
  1087 + var options = '<option value="">请选择...</option><optgroup label="停车场">';
  1088 + var $_len = cd.length;
  1089 + if($_len>0) {
  1090 + $.each(cd, function(i, d){
  1091 + options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
  1092 + });
  1093 +
  1094 + }
  1095 + options += '</optgroup>';
  1096 + $('#carPark_id').html(options).select2();
  1097 + $('#carPark_id').select2("val",r.content[0].carPark);
  1098 + // 关闭弹出加载层
  1099 + layer.close(i);
  1100 + });
  1101 +
  1102 + // 发车间隙选择控件
  1103 + //ComponentsBootstrapTagsinput.init_fcjx();
  1104 + // 停站类型选择控件
  1105 + ComponentsBootstrapTagsinput.init_stoptype();
  1106 +
  1107 + // TODO:发车间隔分析参数设置
  1108 +
  1109 + layer.close(i);
  1110 + }
  1111 +
  1112 + });
  1113 + });
  1114 + }
  1115 + handleTitle(tab, navigation, index);
  1116 + },
  1117 + /** 上一步按钮被单击时触发,返回移动到前一个步骤 */
  1118 + onPrevious: function (tab, navigation, index) {
  1119 + success.hide();
  1120 + error.hide();
  1121 + handleTitle(tab, navigation, index);
  1122 + },
  1123 + /** 显示选项卡内容 */
  1124 + onTabShow: function (tab, navigation, index) {
  1125 + var total = navigation.find('li').length;
  1126 + var current = index + 1;
  1127 + var $percent = (current / total) * 100;
  1128 + $('#submit_argus_form').find('.progress-bar').css({
  1129 + width: $percent + '%'
  1130 + });
  1131 +
  1132 + }
  1133 +
  1134 + });
  1135 + // 初始化第一步隐藏返回按钮
  1136 + $('#submit_argus_form').find('.button-previous').hide();
  1137 + }
  1138 + }
  1139 +}();
... ...
src/main/resources/static/pages/base/timesmodel/js/systemTools.js
... ... @@ -42,7 +42,7 @@ $(&#39;.addBc&#39;).on(&#39;click&#39;,function() {
42 42 var lpData = echartsDrawGTT.getLpData();
43 43 var lpDataCount = echartsDrawGTT.getLpDataCount();
44 44 // 弹出层mobal页面
45   - $.get('/pages/base/timesmodel/fragments/addBc.html', function(m){
  45 + $.get('/pages/base/timesmodel/fragments/addbc.html', function(m){
46 46 $(pjaxContainer).append(m);
47 47 // 规定被选元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。
48 48 $('#addBc_mobal').trigger('addBcMobal.show',[lpData,lpDataCount,echartsDrawGTT]);
... ...
src/main/resources/static/pages/base/timesmodel/tepms/fcjx_temp.html
... ... @@ -237,24 +237,24 @@
237 237 <div class="col-md-6">
238 238 <label class="control-label col-md-5"><span class="required"> * </span>早高峰发车间隔 :</label>
239 239 <div class="col-md-3" style="padding-right: 0px;">
240   - <input type="text" class="form-control" value="20" name="zgffcjxmin" id="zgffcjxmin_id"
  240 + <input type="text" class="form-control" value="8" name="zgffcjxmin" id="zgffcjxmin_id"
241 241 placeholder="最小间隔">
242 242 </div>
243 243 <div class="col-md-1" style="padding-top: 10px; font-size: 85%;">至</div>
244 244 <div class="col-md-3" style="padding-left: 0px;">
245   - <input type="text" class="form-control" value="25" name="zgffcjxmax" id="zgffcjxmax_id"
  245 + <input type="text" class="form-control" value="8" name="zgffcjxmax" id="zgffcjxmax_id"
246 246 placeholder="最大间隔">
247 247 </div>
248 248 </div>
249 249 <div class="col-md-6">
250 250 <label class="control-label col-md-5"><span class="required"> * </span>晚高峰发车间隔 :</label>
251 251 <div class="col-md-3" style="padding-right: 0px;">
252   - <input type="text" class="form-control" value="20" name="wffcjxmin" id="wffcjxmin_id"
  252 + <input type="text" class="form-control" value="8" name="wffcjxmin" id="wffcjxmin_id"
253 253 placeholder="最小间隔">
254 254 </div>
255 255 <div class="col-md-1" style="padding-top: 10px; font-size: 85%;">至</div>
256 256 <div class="col-md-3" style="padding-left: 0px;">
257   - <input type="text" class="form-control" value="25" name="wffcjxmax" id="wffcjxmax_id"
  257 + <input type="text" class="form-control" value="8" name="wffcjxmax" id="wffcjxmax_id"
258 258 placeholder="最大间隔">
259 259 </div>
260 260 </div>
... ... @@ -264,12 +264,12 @@
264 264 <div class="col-md-6">
265 265 <label class="control-label col-md-5"><span class="required"> * </span>低谷发车间隔 :</label>
266 266 <div class="col-md-3" style="padding-right: 0px;">
267   - <input type="text" class="form-control" value="20" name="dgfcjxmin" id="dgfcjxmin_id"
  267 + <input type="text" class="form-control" value="10" name="dgfcjxmin" id="dgfcjxmin_id"
268 268 placeholder="最小间隔">
269 269 </div>
270 270 <div class="col-md-1" style="padding-top: 10px; font-size: 85%;">至</div>
271 271 <div class="col-md-3" style="padding-left: 0px;">
272   - <input type="text" class="form-control" value="25" name="dgfcjxmax" id="dgfcjxmax_id"
  272 + <input type="text" class="form-control" value="20" name="dgfcjxmax" id="dgfcjxmax_id"
273 273 placeholder="最大间隔">
274 274 </div>
275 275 </div>
... ... @@ -284,25 +284,6 @@
284 284  
285 285 <div class="form-group">
286 286 <div class="col-md-6">
287   - <label class="control-label col-md-5">建议套跑路牌数 :</label>
288   - <div class="col-md-5">
289   - <input type="text" class="form-control" name="workeLunch" value="5" id="temp1"
290   - placeholder="请输入建议套跑路牌">
291   - </div>
292   - </div>
293   -
294   - <div class="col-md-6">
295   - <label class="control-label col-md-5">
296   - <span class="required"> * </span> 建议高峰配车数 :</label>
297   - <div class="col-md-5">
298   - <input type="text" class="form-control" value="10" placeholder="车辆数" name="gfjypcs" id="gfjypcsInput" min="1">
299   - </div>
300   - </div>
301   -
302   - </div>
303   -
304   - <div class="form-group">
305   - <div class="col-md-6">
306 287 <label class="control-label col-md-5"><span class="required"> * </span>停站类型 :</label>
307 288 <div class="col-md-5 tagsDiv">
308 289 <div class="row" style="margin-left: 15px;">
... ... @@ -337,13 +318,15 @@
337 318 </div>
338 319  
339 320 </div>
  321 +
340 322 <div class="col-md-6">
341   - <label class="control-label col-md-5">充电时间 :</label>
  323 + <label class="control-label col-md-5">
  324 + <span class="required"> * </span> 建议高峰配车数 :</label>
342 325 <div class="col-md-5">
343   - <input type="text" class="form-control" name="workeDinner" value="20" id="temp2"
344   - placeholder="请输入充电时间">
  326 + <input type="text" class="form-control" value="1" placeholder="车辆数" name="gfjypcs" id="gfjypcsInput" min="1">
345 327 </div>
346 328 </div>
  329 +
347 330 </div>
348 331  
349 332 <!-- 隐藏字段-时间 -->
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/list.html
... ... @@ -192,7 +192,7 @@
192 192 <a ui-sref="ttInfoDetailManage_edit3({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name, rflag : true, lineversion : info.lineVersion})"
193 193 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑 </a>
194 194 <a ng-click="ctrl.toTtInfoDetailAuto(info.id)"
195   - class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 生成 </a>
  195 + class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 排班优化 </a>
196 196 <a ui-sref="ttInfoDetailManage_form({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name})"
197 197 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 导入 </a>
198 198 <a href="javascript:" class="btn btn-info btn-sm" ng-click="ctrl.exportData(info.id)"> 导出 </a>
... ...
src/main/resources/static/pages/zndd_yuan/DKL.html
... ... @@ -182,8 +182,8 @@
182 182 id: 'card4',
183 183 x: 100,
184 184 y: 400,
185   - label: '待发调整',
186   - type: "待发调整",
  185 + label: '待发调整工具',
  186 + type: "待发调整工具",
187 187 nodes: [{
188 188 type: "in",
189 189 level: 0,
... ... @@ -199,13 +199,35 @@
199 199 }
200 200 ],
201 201 titleBarColor: ['#3950e8', '#25f6d0']
202   - },
  202 + },
203 203 {
204 204 id: 'card5',
205 205 x: 100,
206 206 y: 400,
207   - label: '班次取消(烂班)',
208   - type: "班次取消(烂班)",
  207 + label: '班次取消(烂班)工具',
  208 + type: "班次取消(烂班)工具",
  209 + nodes: [{
  210 + type: "in",
  211 + level: 0,
  212 + enumType: 'call',
  213 + color: '#fff',
  214 +
  215 + },
  216 + {
  217 + type: "out",
  218 + level: 0,
  219 + enumType: 'call',
  220 + color: '#3C8CE7',
  221 + }
  222 + ],
  223 + titleBarColor: ['#3950e8', '#25f6d0']
  224 + },
  225 + {
  226 + id: 'card51',
  227 + x: 100,
  228 + y: 400,
  229 + label: '撤销班次取消(烂班)工具',
  230 + type: "撤销班次取消(烂班)工具",
209 231 nodes: [{
210 232 type: "in",
211 233 level: 0,
... ... @@ -226,8 +248,30 @@
226 248 id: 'card6',
227 249 x: 100,
228 250 y: 400,
229   - label: '实发调整',
230   - type: "实发调整",
  251 + label: '实发调整工具',
  252 + type: "实发调整工具",
  253 + nodes: [{
  254 + type: "in",
  255 + level: 0,
  256 + enumType: 'call',
  257 + color: '#fff',
  258 +
  259 + },
  260 + {
  261 + type: "out",
  262 + level: 0,
  263 + enumType: 'call',
  264 + color: '#3C8CE7',
  265 + }
  266 + ],
  267 + titleBarColor: ['#3950e8', '#25f6d0']
  268 + },
  269 + {
  270 + id: 'card7',
  271 + x: 100,
  272 + y: 400,
  273 + label: '实发撤销工具',
  274 + type: "实发撤销工具",
231 275 nodes: [{
232 276 type: "in",
233 277 level: 0,
... ... @@ -248,8 +292,8 @@
248 292 id: 'card7',
249 293 x: 100,
250 294 y: 400,
251   - label: '实发撤销',
252   - type: "实发撤销",
  295 + label: '发车信息微调工具',
  296 + type: "发车信息微调工具",
253 297 nodes: [{
254 298 type: "in",
255 299 level: 0,
... ... @@ -270,8 +314,8 @@
270 314 id: 'card8',
271 315 x: 100,
272 316 y: 400,
273   - label: '新增临加班次',
274   - type: "新增临加班次",
  317 + label: '新增临加班次工具',
  318 + type: "新增临加班次工具",
275 319 nodes: [{
276 320 type: "in",
277 321 level: 0,
... ... @@ -292,8 +336,8 @@
292 336 id: 'card9',
293 337 x: 100,
294 338 y: 400,
295   - label: '调整人车',
296   - type: "调整人车",
  339 + label: '调整人车工具',
  340 + type: "调整人车工具",
297 341 nodes: [{
298 342 type: "in",
299 343 level: 0,
... ... @@ -314,8 +358,8 @@
314 358 id: 'card10',
315 359 x: 100,
316 360 y: 400,
317   - label: '指令重发',
318   - type: "指令重发",
  361 + label: '指令重发工具',
  362 + type: "指令重发工具",
319 363 nodes: [{
320 364 type: "in",
321 365 level: 0,
... ... @@ -336,8 +380,8 @@
336 380 id: 'card11',
337 381 x: 100,
338 382 y: 400,
339   - label: '路牌对调',
340   - type: "路牌对调",
  383 + label: '路牌对调工具',
  384 + type: "路牌对调工具",
341 385 nodes: [{
342 386 type: "in",
343 387 level: 0,
... ... @@ -358,8 +402,8 @@
358 402 id: 'card12',
359 403 x: 100,
360 404 y: 400,
361   - label: '误点调整',
362   - type: "误点调整",
  405 + label: '误点调整工具',
  406 + type: "误点调整工具",
363 407 nodes: [{
364 408 type: "in",
365 409 level: 0,
... ...
src/main/resources/static/real_control_v2/js/main.js
... ... @@ -30,7 +30,7 @@ var gb_main_ep = new EventProxy(),
30 30 //判断如果用户按下了回车键(keycody=13)
31 31 if (keyNum == 13) {
32 32 fired = true;
33   - debugger
  33 +
34 34 let lineCode = gb_schedule_table.TablelineCode;
35 35 document.getElementById("recidress").style.display = 'none';
36 36 recorder.upload("zndd/do/"+lineCode, function (state, e) {
... ...
src/main/resources/static/real_control_v2/js/north/toolbar.js
... ... @@ -37,18 +37,23 @@ var gb_northToolbar = (function () {
37 37 $('.north .north-toolbar .exit-system').on('click', function () {
38 38 //调度员退出时提示未全部完成班次的线路
39 39 //默认只取一个角色
40   - debugger
41 40 if(user.roles[0].codeName == "LG_DDY" || user.roles[0].codeName == "LG_GLY"){
42 41 //提示未完成线路 搜索该用户下所有的线路 判断是否完成
43 42 $.get('/logZndd/LineUserAll', {userId: user.id}, function (rs) {
44   - notify_err(rs+"班次还有未完成");
45   - layer.confirm('班次还有未完成,是否要退出线调?', {
46   - btn: ['确定','取消'] //按钮
47   - }, function(){
  43 + if(rs.length > 0){
  44 + notify_err(rs+"班次还有未完成");
  45 + layer.confirm('班次还有未完成,是否要退出线调?', {
  46 + btn: ['确定','取消'] //按钮
  47 + }, function(){
  48 + gb_sch_websocket.sock().close(1000, '退出线调');
  49 + window.location.href = '/pages/control/lineallot_v2/iframe_wrap.html';
  50 + }, function(){
  51 + });
  52 + }else {
  53 + //关闭websocket 连接
48 54 gb_sch_websocket.sock().close(1000, '退出线调');
49 55 window.location.href = '/pages/control/lineallot_v2/iframe_wrap.html';
50   - }, function(){
51   - });
  56 + }
52 57 })
53 58 }else {
54 59 //关闭websocket 连接
... ...
src/main/resources/static/real_control_v2/js/stationcf/klyj.js
... ... @@ -3,7 +3,7 @@
3 3 */
4 4 var gb_klyj = (function () {
5 5 var $wrap = $('.multi_plat_msg_pop_zndd');
6   - var max = 3;
  6 + var max = 0;
7 7 var dataMap = new Map();
8 8 var popcf = function (data) {
9 9 dataMap.set(data.uuid,data);
... ...
src/main/resources/static/real_control_v2/js/zndd/recorder/recorder.js
... ... @@ -212,7 +212,13 @@
212 212 }
213 213 else if(responseText[1]=="2"){//新增出场班次
214 214 if(schId==''){
215   - notify_err("请选择班次");
  215 + var sch ={
  216 + xlBm : lineCode
  217 + }
  218 + var fun =gb_schedule_context_menu.add_temp_sch_v2;
  219 + fun(sch, function () {
  220 + confirmBtn.trigger('click');
  221 + });
216 222 return;
217 223 }
218 224 var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId];
... ... @@ -229,7 +235,13 @@
229 235 }
230 236 else if(responseText[1]=="3"){//新增班次
231 237 if(schId==''){
232   - notify_err("请选择班次");
  238 + var sch ={
  239 + xlBm : lineCode
  240 + }
  241 + var fun =gb_schedule_context_menu.add_temp_sch_v2;
  242 + fun(sch, function () {
  243 + confirmBtn.trigger('click');
  244 + });
233 245 return;
234 246 }
235 247 var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId];
... ...
src/main/resources/static/real_control_v2/zndd/type/dkl.html
... ... @@ -432,9 +432,9 @@
432 432 gb_common.$post('/realSchedule', data, function (rs) {
433 433 notify_succ('新增临加班次成功');
434 434 cb && cb(rs);
435   - var folder = '/real_control_v2/zndd/yanshi';
  435 + /*var folder = '/real_control_v2/zndd/yanshi';
436 436 open_modal(folder + '/yanshi.html', {
437   - }, {center: true, bgclose: false, modal: true});
  437 + }, {center: true, bgclose: false, modal: true});*/
438 438 }, err);
439 439 }
440 440  
... ...
src/main/resources/static/real_control_v2/zndd/type/fcjg.html
... ... @@ -2,7 +2,7 @@
2 2 <div class="uk-modal-dialog" style="width: 920px;">
3 3 <a href="" class="uk-modal-close uk-close"></a>
4 4 <div class="uk-modal-header">
5   - <h2>新增临加班次</h2></div>
  5 + <h2>发车间隔</h2></div>
6 6 <div class="uk-grid uk-width-3-5" style="float: left">
7 7 <div class="uk-width-5-5">
8 8 <form class="uk-form uk-form-horizontal"> </form>
... ...
src/main/resources/static/real_control_v2/zndd/type/mz.html
... ... @@ -448,7 +448,7 @@
448 448  
449 449 <div class="uk-width-1-1">
450 450 <div class="uk-form-row">
451   - <label class="uk-form-label">车内视频:</label>
  451 + <label class="uk-form-label">车内情况:</label>
452 452 </div>
453 453 </div>
454 454 </div>
... ...