Commit 4a05a1ac5dc1518aafb80820d971d024d12f4136

Authored by 廖磊
2 parents a7203436 fc3393ec

Merge branch 'minhang' of

http://222.66.0.204:8090/panzhaov5/bsth_control into minhang
src/main/java/com/bsth/XDApplication.java
@@ -126,24 +126,25 @@ public class XDApplication implements CommandLineRunner { @@ -126,24 +126,25 @@ public class XDApplication implements CommandLineRunner {
126 ScheduledExecutorService sexec = Application.mainServices; 126 ScheduledExecutorService sexec = Application.mainServices;
127 127
128 /** 线调业务 */ 128 /** 线调业务 */
129 - sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);//抓取GPS数据  
130 - sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);//GPS设备掉离线  
131 sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);//班次更新线程 129 sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);//班次更新线程
132 - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 10, TimeUnit.SECONDS);//班次延迟入库线程  
133 - sexec.scheduleWithFixedDelay(seiPstThread, 60, 60, TimeUnit.SECONDS);//班次修正日志入库  
134 - sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS);//检查班次误点 130 + sexec.scheduleWithFixedDelay(scheduleLateThread, 70, 30, TimeUnit.SECONDS);//检查班次误点
  131 + sexec.scheduleWithFixedDelay(gpsDataLoader, 100, 2, TimeUnit.SECONDS);//抓取GPS数据
  132 +
  133 + sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);//GPS设备掉离线
  134 + sexec.scheduleWithFixedDelay(schedulePstThread, 120, 10, TimeUnit.SECONDS);//班次延迟入库线程
  135 + sexec.scheduleWithFixedDelay(seiPstThread, 160, 60, TimeUnit.SECONDS);//班次修正日志入库
135 sexec.scheduleWithFixedDelay(directivesPstThread, 180, 100, TimeUnit.SECONDS);//调度指令延迟入库 136 sexec.scheduleWithFixedDelay(directivesPstThread, 180, 100, TimeUnit.SECONDS);//调度指令延迟入库
136 sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);//线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作) 137 sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);//线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作)
137 - sexec.scheduleWithFixedDelay(sampleTimeDataLoader, 12, 120 * 60, TimeUnit.SECONDS);//到离站预测需要的站点间耗时数据 138 + sexec.scheduleWithFixedDelay(sampleTimeDataLoader, 140, 120 * 60, TimeUnit.SECONDS);//到离站预测需要的站点间耗时数据
138 sexec.scheduleWithFixedDelay(basicDataLoader, 2, 2, TimeUnit.HOURS);//基础数据更新 139 sexec.scheduleWithFixedDelay(basicDataLoader, 2, 2, TimeUnit.HOURS);//基础数据更新
139 DirectivePushQueue.start();//消息队列 -指令,系统下发的 140 DirectivePushQueue.start();//消息队列 -指令,系统下发的
140 WebSocketPushQueue.start();//消息队列 -webSocket ,推送至线调web页面的 141 WebSocketPushQueue.start();//消息队列 -webSocket ,推送至线调web页面的
141 142
142 /** 线调为其他程序提供的数据 --写入数据库 */ 143 /** 线调为其他程序提供的数据 --写入数据库 */
143 - sexec.scheduleWithFixedDelay(fcxxUpdateThread, 60, 40, TimeUnit.SECONDS);//发车信息(发车屏、信息发布) 144 + sexec.scheduleWithFixedDelay(fcxxUpdateThread, 160, 40, TimeUnit.SECONDS);//发车信息(发车屏、信息发布)
144 //线路首末班数据(网关用,班次更新时写入) 145 //线路首末班数据(网关用,班次更新时写入)
145 //com.bsth.data.schedule.f_a_l.FirstAndLastHandler 146 //com.bsth.data.schedule.f_a_l.FirstAndLastHandler
146 - sexec.scheduleWithFixedDelay(schSiginUpdateDBThread, 60, 60 * 30, TimeUnit.SECONDS);//无法自动完成的班次信息(网关用,补信号) 147 + sexec.scheduleWithFixedDelay(schSiginUpdateDBThread, 160, 60 * 30, TimeUnit.SECONDS);//无法自动完成的班次信息(网关用,补信号)
147 148
148 //运管处静态数据提交 149 //运管处静态数据提交
149 log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处"); 150 log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处");
src/main/java/com/bsth/data/gpsdata/arrival/GeoCacheData.java
@@ -33,8 +33,8 @@ public class GeoCacheData { @@ -33,8 +33,8 @@ public class GeoCacheData {
33 33
34 static Logger logger = LoggerFactory.getLogger(GeoCacheData.class); 34 static Logger logger = LoggerFactory.getLogger(GeoCacheData.class);
35 35
36 - //每辆车缓存最后1000条gps  
37 - private static final int CACHE_SIZE = 1000; 36 + //每辆车缓存最后500条gps
  37 + private static final int CACHE_SIZE = 500;
38 private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>(); 38 private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>();
39 39
40 //线路路段走向 40 //线路路段走向
src/main/java/com/bsth/data/gpsdata/arrival/GpsRealAnalyse.java
@@ -41,7 +41,8 @@ public class GpsRealAnalyse { @@ -41,7 +41,8 @@ public class GpsRealAnalyse {
41 @Autowired 41 @Autowired
42 GpsRealData gpsRealData; 42 GpsRealData gpsRealData;
43 43
44 - static ExecutorService threadPool = Executors.newFixedThreadPool(25); 44 + final static int POOL_SIZE = 15;
  45 + static ExecutorService threadPool = Executors.newFixedThreadPool(POOL_SIZE + 1);
45 46
46 public static long st; 47 public static long st;
47 public static CountDownLatch count; 48 public static CountDownLatch count;
@@ -60,19 +61,27 @@ public class GpsRealAnalyse { @@ -60,19 +61,27 @@ public class GpsRealAnalyse {
60 return; 61 return;
61 st = System.currentTimeMillis(); 62 st = System.currentTimeMillis();
62 63
63 - //按线路分组gps 64 + //按设备号分组数据(一个设备号的多条数据,必须在一个线程里跑)
64 ArrayListMultimap multimap = ArrayListMultimap.create(); 65 ArrayListMultimap multimap = ArrayListMultimap.create();
65 for (GpsEntity gps : list) { 66 for (GpsEntity gps : list) {
66 - multimap.put(gps.getLineId(), gps); 67 + multimap.put(gps.getDeviceId(), gps);
67 } 68 }
68 -  
69 - Set<String> ks = multimap.keySet();  
70 - 69 + List<String> deviceList = new ArrayList<>(multimap.keySet());
  70 +
  71 + //数据均分给20个线程
  72 + ArrayListMultimap dataListMap = ArrayListMultimap.create();
  73 + int size = deviceList.size(), threadIndex=0, threadSize = size / POOL_SIZE;
  74 + for(int i = 0; i < size; i++){
  75 + if(i % threadSize == 0)
  76 + threadIndex ++;
  77 + dataListMap.putAll(threadIndex, multimap.get(deviceList.get(i)));
  78 + }
  79 + Set<Integer> ks = dataListMap.keySet();
71 logger.info("analyse gps size: " + list.size() + ", ks: " + ks.size()); 80 logger.info("analyse gps size: " + list.size() + ", ks: " + ks.size());
72 count = new CountDownLatch(ks.size()); 81 count = new CountDownLatch(ks.size());
73 82
74 - for (String lineCode : ks) {  
75 - threadPool.execute(new SignalHandleThread(multimap.get(lineCode), count)); 83 + for (Integer index : ks) {
  84 + threadPool.execute(new SignalHandleThread(dataListMap.get(index), count));
76 } 85 }
77 86
78 //等待子线程结束 87 //等待子线程结束
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
@@ -522,10 +522,16 @@ var SKBFormWizard = function() { @@ -522,10 +522,16 @@ var SKBFormWizard = function() {
522 'dgmaxtzsj' : {required : true,number : true}, // 低谷最大停站时间,必填项、必须为整数. 522 'dgmaxtzsj' : {required : true,number : true}, // 低谷最大停站时间,必填项、必须为整数.
523 523
524 // 发车间隙分析用参数 524 // 发车间隙分析用参数
525 - 'fcjx': {required: true}, // 时段发车间隙,TODO:貌似没发启用form验证 525 + //'fcjx': {required: true}, // 时段发车间隙,TODO:貌似没发启用form验证
526 'stt': {required: true}, // 停站类型,TODO:貌似没发启用form验证 526 'stt': {required: true}, // 停站类型,TODO:貌似没发启用form验证
  527 + 'zgffcjxmin' : {required : true,number : true,digits: true},// 早高峰最小发车间隔.
  528 + 'zgffcjxmax' : {required : true,number : true,digits: true},// 早高峰最大发车间隔.
  529 + 'wffcjxmin' : {required : true,number : true,digits: true},// 晚高峰最小发车间隔.
  530 + 'wffcjxmax' : {required : true,number : true,digits: true},// 晚高峰最大发车间隔.
  531 + 'dgfcjxmin' : {required : true,number : true,digits: true},// 低谷最小发车间隔.
  532 + 'dgfcjxmax' : {required : true,number : true,digits: true},// 低谷最大发车间隔.
527 'gfjypcs': {required : true,number : true,digits: true}, // 高峰建议配车数 533 'gfjypcs': {required : true,number : true,digits: true}, // 高峰建议配车数
528 - 'jblps': {required : true,number : true,digits: true} // 加班车路牌 534 + 'jbclcount': {required : true,number : true,digits: true} // 建议加班车
529 }, 535 },
530 536
531 /** 537 /**
@@ -934,7 +940,7 @@ var SKBFormWizard = function() { @@ -934,7 +940,7 @@ var SKBFormWizard = function() {
934 }); 940 });
935 941
936 // 发车间隙选择控件 942 // 发车间隙选择控件
937 - ComponentsBootstrapTagsinput.init_fcjx(); 943 + //ComponentsBootstrapTagsinput.init_fcjx();
938 // 停站类型选择控件 944 // 停站类型选择控件
939 ComponentsBootstrapTagsinput.init_stoptype(); 945 ComponentsBootstrapTagsinput.init_stoptype();
940 946
src/main/resources/static/pages/base/timesmodel/js/gantt.js
@@ -50,7 +50,7 @@ @@ -50,7 +50,7 @@
50 var CSMap = null,data = null; 50 var CSMap = null,data = null;
51 51
52 // 创建ParameterObj 52 // 创建ParameterObj
53 - var _paramObj = StrategyUtils.getFactory().createParameterObj(map, dataMap); 53 + var _paramObj;
54 54
55 if(map.baseRes== '0') { 55 if(map.baseRes== '0') {
56 CSMap = getMaxCarAndStopSpace0(map,seMap); 56 CSMap = getMaxCarAndStopSpace0(map,seMap);
@@ -62,6 +62,8 @@ @@ -62,6 +62,8 @@
62 map.fcjx = CSMap.fcjx; 62 map.fcjx = CSMap.fcjx;
63 }else if (map.baseRes == '2') { 63 }else if (map.baseRes == '2') {
64 // TODO:之后可能有新的参数加入 64 // TODO:之后可能有新的参数加入
  65 + _paramObj = StrategyUtils.getFactory().createParameterObj(map, dataMap);
  66 +
65 map.clzs = StrategyUtils.calcuClzx(_paramObj); 67 map.clzs = StrategyUtils.calcuClzx(_paramObj);
66 CSMap = getMaxCarAndStopSpace1(map); 68 CSMap = getMaxCarAndStopSpace1(map);
67 69
src/main/resources/static/pages/base/timesmodel/js/strategy/ParameterObj.js
@@ -105,7 +105,6 @@ var ParameterObj = function(formMap, dataMap) { @@ -105,7 +105,6 @@ var ParameterObj = function(formMap, dataMap) {
105 105
106 // 计算各个时段的发车间隙 106 // 计算各个时段的发车间隙
107 var _fcjxIntervalObj_fun = function() { 107 var _fcjxIntervalObj_fun = function() {
108 - var _fcjxes = _formMap.fcjx.split(",");  
109 var _rtn = { 108 var _rtn = {
110 mpeakfcjx : {}, // 早高峰 109 mpeakfcjx : {}, // 早高峰
111 epeakfcjx : {}, // 晚高峰 110 epeakfcjx : {}, // 晚高峰
@@ -114,32 +113,34 @@ var ParameterObj = function(formMap, dataMap) { @@ -114,32 +113,34 @@ var ParameterObj = function(formMap, dataMap) {
114 var _fcjx = []; 113 var _fcjx = [];
115 var i = 0; 114 var i = 0;
116 115
117 - // TODO:这里按照顺序判定发车间隔 116 + // TODO:这里只有3个间隔,以后加其他的
118 // 1、早高峰间隙 117 // 1、早高峰间隙
119 // 2、晚高峰间隙 118 // 2、晚高峰间隙
120 - // 3、早低谷  
121 - // 4、平峰  
122 - // 5、晚低谷  
123 -  
124 - // 至少3个,系统暂时使用3个,有最小间隔,有最大间隔  
125 - if (_fcjxes.length < 3) {  
126 - alert("发车间隙至少3个(早高峰,晚高峰,低谷)");  
127 - throw "发车间隙至少3个(早高峰,晚高峰,低谷)";  
128 - } else {  
129 - for (i = 0; i < 3; i++) {  
130 - _fcjx = _fcjxes[i].split("/");  
131 - if (i == 0) {  
132 - _rtn.mpeakfcjx.min = parseInt(_fcjx[2].split("-")[0]);  
133 - _rtn.mpeakfcjx.max = parseInt(_fcjx[2].split("-")[1]);  
134 - } else if (i == 1) {  
135 - _rtn.epeakfcjx.min = parseInt(_fcjx[2].split("-")[0]);  
136 - _rtn.epeakfcjx.max = parseInt(_fcjx[2].split("-")[1]);  
137 - } else {  
138 - _rtn.troughfcjx.min = parseInt(_fcjx[2].split("-")[0]);  
139 - _rtn.troughfcjx.max = parseInt(_fcjx[2].split("-")[1]);  
140 - }  
141 - } 119 + // 3、低谷
  120 +
  121 + _rtn.mpeakfcjx.min = parseInt(_formMap.zgffcjxmin);
  122 + _rtn.mpeakfcjx.max = parseInt(_formMap.zgffcjxmax);
  123 +
  124 + _rtn.epeakfcjx.min = parseInt(_formMap.wffcjxmin);
  125 + _rtn.epeakfcjx.max = parseInt(_formMap.wffcjxmax);
  126 +
  127 + _rtn.troughfcjx.min = parseInt(_formMap.dgfcjxmin);
  128 + _rtn.troughfcjx.max = parseInt(_formMap.dgfcjxmax);
  129 +
  130 + // 做一些逻辑检查
  131 + if (_rtn.mpeakfcjx.min > _rtn.mpeakfcjx.max) {
  132 + alert("早高峰最小间隔大于最大间隔");
  133 + throw "早高峰最小间隔大于最大间隔";
  134 + }
  135 + if (_rtn.epeakfcjx.min > _rtn.epeakfcjx.max) {
  136 + alert("晚高峰最小间隔大于最大间隔");
  137 + throw "晚高峰最小间隔大于最大间隔";
142 } 138 }
  139 + if (_rtn.troughfcjx.min > _rtn.troughfcjx.max) {
  140 + alert("低谷最小间隔大于最大间隔");
  141 + throw "低谷最小间隔大于最大间隔";
  142 + }
  143 +
143 144
144 return _rtn; 145 return _rtn;
145 }; 146 };
@@ -502,7 +503,7 @@ var ParameterObj = function(formMap, dataMap) { @@ -502,7 +503,7 @@ var ParameterObj = function(formMap, dataMap) {
502 * @returns {Number|*} 503 * @returns {Number|*}
503 */ 504 */
504 getJBLpes: function() { 505 getJBLpes: function() {
505 - return parseInt(_formMap.jblps); 506 + return parseInt(_formMap.jbclcount);
506 }, 507 },
507 508
508 //----------------- 获取关联数据信息 -----------------// 509 //----------------- 获取关联数据信息 -----------------//
src/main/resources/static/pages/base/timesmodel/tepms/fcjx_temp.html
@@ -144,44 +144,55 @@ @@ -144,44 +144,55 @@
144 </div> 144 </div>
145 145
146 <div class="form-group"> 146 <div class="form-group">
147 - <div class="col-md-6 ">  
148 - <label class="control-label col-md-5"><span class="required"> * </span>时段发车间隔 :</label>  
149 - <div class="col-md-5 tagsDiv">  
150 - <div class="row" style="margin-left: 15px;">  
151 - <input type="text" value="" name="fcjx" id="fcjx_tagsinput" style="display: none;">  
152 - </div>  
153 -  
154 - <div class="row" style="margin-top: 10px;">  
155 - <label class="control-label col-md-4">开始时间:</label>  
156 - <div class="col-md-8">  
157 - <input type="text" class="form-control" placeholder="时段开始时间" id="fcjx_tagsinput_starttime">  
158 - </div>  
159 - </div>  
160 -  
161 - <div class="row" style="margin-top: 10px;">  
162 - <label class="control-label col-md-4">结束时间:</label>  
163 - <div class="col-md-8">  
164 - <input type="text" class="form-control" placeholder="时段结束时间" id="fcjx_tagsinput_endtime">  
165 - </div>  
166 - </div>  
167 -  
168 - <div class="row" style="margin-top: 10px;">  
169 - <label class="control-label col-md-4">间隔值:</label>  
170 - <div class="col-md-4">  
171 - <input type="number" class="form-control" placeholder="开始" id="fcjx_tagsinput_fvalue" min="1">  
172 - </div>  
173 - <div class="col-md-4">  
174 - <input type="number" class="form-control" placeholder="结束" id="fcjx_tagsinput_tvalue" min="1">  
175 - </div>  
176 - </div>  
177 -  
178 - <div class="row" style="margin-top: 10px;margin-left: 116px;">  
179 - <a href="javascript:" class="btn red" id="fcjx_tagsinput_add">添加</a>  
180 - </div> 147 + <div class="col-md-6">
  148 + <label class="control-label col-md-5"><span class="required"> * </span>早高峰发车间隔 :</label>
  149 + <div class="col-md-3" style="padding-right: 0px;">
  150 + <input type="text" class="form-control" name="zgffcjxmin" id="zgffcjxmin_id"
  151 + placeholder="最小间隔">
  152 + </div>
  153 + <div class="col-md-1" style="padding-top: 10px; font-size: 85%;">至</div>
  154 + <div class="col-md-3" style="padding-left: 0px;">
  155 + <input type="text" class="form-control" name="zgffcjxmax" id="zgffcjxmax_id"
  156 + placeholder="最大间隔">
181 </div> 157 </div>
182 </div> 158 </div>
  159 + <div class="col-md-6">
  160 + <label class="control-label col-md-5"><span class="required"> * </span>晚高峰发车间隔 :</label>
  161 + <div class="col-md-3" style="padding-right: 0px;">
  162 + <input type="text" class="form-control" name="wffcjxmin" id="wffcjxmin_id"
  163 + placeholder="最小间隔">
  164 + </div>
  165 + <div class="col-md-1" style="padding-top: 10px; font-size: 85%;">至</div>
  166 + <div class="col-md-3" style="padding-left: 0px;">
  167 + <input type="text" class="form-control" name="wffcjxmax" id="wffcjxmax_id"
  168 + placeholder="最大间隔">
  169 + </div>
  170 + </div>
  171 + </div>
183 172
  173 + <div class="form-group">
  174 + <div class="col-md-6">
  175 + <label class="control-label col-md-5"><span class="required"> * </span>低谷发车间隔 :</label>
  176 + <div class="col-md-3" style="padding-right: 0px;">
  177 + <input type="text" class="form-control" name="dgfcjxmin" id="dgfcjxmin_id"
  178 + placeholder="最小间隔">
  179 + </div>
  180 + <div class="col-md-1" style="padding-top: 10px; font-size: 85%;">至</div>
  181 + <div class="col-md-3" style="padding-left: 0px;">
  182 + <input type="text" class="form-control" name="dgfcjxmax" id="dgfcjxmax_id"
  183 + placeholder="最大间隔">
  184 + </div>
  185 + </div>
  186 + <div class="col-md-6">
  187 + <label class="control-label col-md-5"><span class="required"> * </span>建议加班车数 :</label>
  188 + <div class="col-md-5">
  189 + <input type="text" class="form-control" name="jbclcount" id="jbclcount_id"
  190 + placeholder="间隔">
  191 + </div>
  192 + </div>
  193 + </div>
184 194
  195 + <div class="form-group">
185 <div class="col-md-6"> 196 <div class="col-md-6">
186 <label class="control-label col-md-5"><span class="required"> * </span>停站类型 :</label> 197 <label class="control-label col-md-5"><span class="required"> * </span>停站类型 :</label>
187 <div class="col-md-5 tagsDiv"> 198 <div class="col-md-5 tagsDiv">
@@ -218,25 +229,14 @@ @@ -218,25 +229,14 @@
218 229
219 </div> 230 </div>
220 231
221 - </div>  
222 -  
223 - <div class="form-group">  
224 <div class="col-md-6"> 232 <div class="col-md-6">
225 <label class="control-label col-md-5"> 233 <label class="control-label col-md-5">
226 - <span class="required"> * </span> 高峰建议配车数 :</label> 234 + <span class="required"> * </span> 高峰建议配车数 :</label>
227 <div class="col-md-5"> 235 <div class="col-md-5">
228 <input type="text" class="form-control" placeholder="车辆数" name="gfjypcs" id="gfjypcsInput" min="1"> 236 <input type="text" class="form-control" placeholder="车辆数" name="gfjypcs" id="gfjypcsInput" min="1">
229 </div> 237 </div>
230 </div> 238 </div>
231 239
232 - <div class="col-md-6">  
233 - <label class="control-label col-md-5">  
234 - <span class="required"> * </span> 加班车路牌数 :</label>  
235 - <div class="col-md-5">  
236 - <input type="text" class="form-control" placeholder="加班路牌数" name="jblps" id="jblpsInput" min="1">  
237 - </div>  
238 - </div>  
239 -  
240 </div> 240 </div>
241 241
242 <!-- 隐藏字段-时间 --> 242 <!-- 隐藏字段-时间 -->
@@ -412,38 +412,76 @@ @@ -412,38 +412,76 @@
412 412
413 <div class="form-group"> 413 <div class="form-group">
414 <div class="col-md-6"> 414 <div class="col-md-6">
415 - <label class="control-label col-md-5">  
416 - <span class="required"> * </span> 时段发车间隔 :  
417 - </label> 415 + <label class="control-label col-md-5">早高峰最小发车间隔 :</label>
418 <div class="col-md-4"> 416 <div class="col-md-4">
419 - <p class="form-control-static" data-display="fcjx"> </p> 417 + <p class="form-control-static" data-display="zgffcjxmin"> </p>
420 </div> 418 </div>
421 </div> 419 </div>
422 <div class="col-md-6"> 420 <div class="col-md-6">
423 - <label class="control-label col-md-5">  
424 - <span class="required"> * </span> 停站类型 :  
425 - </label> 421 + <label class="control-label col-md-5">早高峰最大发车间隔 :</label>
426 <div class="col-md-4"> 422 <div class="col-md-4">
427 - <p class="form-control-static" data-display="stt"> </p> 423 + <p class="form-control-static" data-display="zgffcjxmax"> </p>
428 </div> 424 </div>
429 </div> 425 </div>
  426 + </div>
430 427
  428 + <div class="form-group">
  429 + <div class="col-md-6">
  430 + <label class="control-label col-md-5">晚高峰最小发车间隔 :</label>
  431 + <div class="col-md-4">
  432 + <p class="form-control-static" data-display="wffcjxmin"> </p>
  433 + </div>
  434 + </div>
  435 + <div class="col-md-6">
  436 + <label class="control-label col-md-5">晚高峰最大发车间隔 :</label>
  437 + <div class="col-md-4">
  438 + <p class="form-control-static" data-display="wffcjxmax"> </p>
  439 + </div>
  440 + </div>
431 </div> 441 </div>
432 442
433 <div class="form-group"> 443 <div class="form-group">
434 <div class="col-md-6"> 444 <div class="col-md-6">
435 - <label class="control-label col-md-5"> 高峰建议配车数 : </label> 445 + <label class="control-label col-md-5">低谷最小发车间隔 :</label>
436 <div class="col-md-4"> 446 <div class="col-md-4">
437 - <p class="form-control-static" data-display="gfjypcs"> </p> 447 + <p class="form-control-static" data-display="dgfcjxmin"> </p>
  448 + </div>
  449 + </div>
  450 + <div class="col-md-6">
  451 + <label class="control-label col-md-5">低谷最大发车间隔 :</label>
  452 + <div class="col-md-4">
  453 + <p class="form-control-static" data-display="dgfcjxmax"> </p>
438 </div> 454 </div>
439 </div> 455 </div>
  456 + </div>
  457 +
  458 + <div class="form-group">
440 <div class="col-md-6"> 459 <div class="col-md-6">
441 - <label class="control-label col-md-5"> 加班车路牌数 : </label> 460 + <label class="control-label col-md-5">
  461 + <span class="required"> * </span> 建议加班车数 :
  462 + </label>
442 <div class="col-md-4"> 463 <div class="col-md-4">
443 - <p class="form-control-static" data-display="jblps"> </p> 464 + <p class="form-control-static" data-display="jbclcount"> </p>
444 </div> 465 </div>
445 </div> 466 </div>
  467 + </div>
446 468
  469 + <div class="form-group">
  470 + <div class="col-md-6">
  471 + <label class="control-label col-md-5">
  472 + <span class="required"> * </span> 停站类型 :
  473 + </label>
  474 + <div class="col-md-4">
  475 + <p class="form-control-static" data-display="stt"> </p>
  476 + </div>
  477 + </div>
  478 +
  479 + <div class="col-md-6">
  480 + <label class="control-label col-md-5"> 高峰建议配车数 : </label>
  481 + <div class="col-md-4">
  482 + <p class="form-control-static" data-display="gfjypcs"> </p>
  483 + </div>
  484 + </div>
447 </div> 485 </div>
448 486
449 </script> 487 </script>
450 \ No newline at end of file 488 \ No newline at end of file