Commit 24e0b591148b1d3734f847a1f204f0a7a71fd00f

Authored by 潘钊
1 parent 9977b66b

update...

src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java
... ... @@ -253,20 +253,22 @@ public class InOutStationSignalHandle extends SignalHandle{
253 253 //已完成班次数
254 254 int doneSum = dayOfSchedule.doneSum(sch.getClZbh());
255 255 ScheduleRealInfo next = dayOfSchedule.next(sch);
256   - //通知客户端
257   - sendUtils.sendZdsj(sch, next, doneSum);
258 256 //持久化
259 257 dayOfSchedule.save(sch);
260 258  
261   - //准备执行下一个班次
262   - if (next != null) {
  259 + if(next != null){
263 260 next.setQdzArrDatesj(sch.getZdsjActual());
264 261 dayOfSchedule.addExecPlan(next);
265 262 //进站既进场
266 263 inStationAndInPark(sch, next);
  264 + }
  265 + //通知客户端
  266 + sendUtils.sendZdsj(sch, next, doneSum);
  267 +
  268 + //准备执行下一个班次
  269 + if (next != null) {
267 270 //将gps转换为下一个班次走向的站内信号
268 271 transformUpdown(gps, next);
269   -
270 272 //下发调度指令
271 273 directiveService.send60Dispatch(next, doneSum, "到站@系统");
272 274  
... ...
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
... ... @@ -11,7 +11,10 @@ import com.bsth.data.directive.DirectivesPstThread;
11 11 import com.bsth.data.gpsdata.GpsRealData;
12 12 import com.bsth.data.gpsdata.recovery.GpsDataRecovery;
13 13 import com.bsth.data.schedule.late_adjust.ScheduleLateThread;
14   -import com.bsth.data.schedule.thread.*;
  14 +import com.bsth.data.schedule.thread.CalcOilThread;
  15 +import com.bsth.data.schedule.thread.SchedulePstThread;
  16 +import com.bsth.data.schedule.thread.ScheduleRefreshThread;
  17 +import com.bsth.data.schedule.thread.SubmitToTrafficManage;
15 18 import com.bsth.entity.realcontrol.LineConfig;
16 19 import com.bsth.entity.realcontrol.ScheduleRealInfo;
17 20 import com.bsth.entity.schedule.SchedulePlanInfo;
... ... @@ -146,7 +149,7 @@ public class DayOfSchedule implements CommandLineRunner {
146 149 //入库
147 150 // Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 30, TimeUnit.SECONDS);
148 151 //班次误点扫描
149   -// Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS);
  152 +// Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS);
150 153  
151 154 //每天凌晨2点20提交数据到运管处
152 155 long diff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis();
... ...
src/main/java/com/bsth/data/schedule/late_adjust/LateAdjustHandle.java
... ... @@ -116,17 +116,20 @@ public class LateAdjustHandle implements ApplicationContextAware{
116 116 return;
117 117  
118 118 //进的是班次起点
119   - if(gps.getStopNo().equals(sch.getQdzCode())
  119 + if(gps.getStationName().equals(sch.getQdzName())
120 120 && sch.getLateMinute() > 0){
121 121 //自动调整待发 到达时间 + 停靠时间
122   - long dt = gps.getTimestamp() + (Long.parseLong(String.valueOf(sch.getLateMinute() * 60 * 1000)));
  122 + long dt = (long) (gps.getTimestamp() + (sch.getLateMinute() * 60 * 1000));
123 123 sch.setDfsjAll(dt);
124 124 sch.setDfAuto(true);
  125 + //取消应发未到标记
  126 + sch.setLate2(false);
125 127  
126 128 lateSchMap.remove(sch.getClZbh());
127 129 logger.info("【应发未到】车辆到站 " + sch.getClZbh() + " -" + sch.getDfsj() + " -到站时间:" + gps.getTimestamp() + " -停靠时间:" + sch.getLateMinute() + " -自动设置的待发时间:" + dt);
128 130 }
129 131 }catch (Exception e){
  132 + e.printStackTrace();
130 133 logger.error("", e);
131 134 }
132 135 }
... ...
src/main/java/com/bsth/data/schedule/late_adjust/ScheduleLateThread.java
... ... @@ -44,11 +44,14 @@ public class ScheduleLateThread extends Thread{
44 44 ScheduleRealInfo sch;
45 45 for(int i = 0; i < size; i ++){
46 46 sch = all.get(i);
47   - if(sch.getDfsjT() > t || sch.isLate())
  47 + if(sch.getDfsjT() > t)
48 48 break;
49 49  
  50 + if(sch.isLate())
  51 + continue;
  52 +
50 53 if(sch.getStatus() == 0
51   - && sch.getFcsjActual() == null){
  54 + && StringUtils.isEmpty(sch.getFcsjActual())){
52 55  
53 56 //检查应发未到 当前班次无起点到达时间
54 57 if(StringUtils.isEmpty(sch.getQdzArrDateSJ())){
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -1049,6 +1049,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1049 1049 ScheduleRealInfo next = dayOfSchedule.next(sch);
1050 1050 if (null != next) {
1051 1051 next.setQdzArrDateSJ(zdsjActual);
  1052 + next.setLate2(false);
1052 1053 ts.add(next);
1053 1054 }
1054 1055  
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task/add_sub_task_range_turn.html
... ... @@ -27,8 +27,11 @@
27 27 </div>
28 28 </div>
29 29 </div>
30   - <div class="uk-width-2-4" style="padding-left: 28px;">
31   - <h6 style="color: #a7a5a5;margin-top: 35px;"><i class="uk-icon-question-circle"> </i>
  30 + <div class="uk-width-2-4" style="padding: 20px 0 0 28px;">
  31 + <label>
  32 + <input type="checkbox" id="emptyTurnCbox"> 调头后空驶回起点
  33 + </label>
  34 + <h6 style="color: #a7a5a5;margin-top: 0;"><i class="uk-icon-question-circle"> </i>
32 35 如果“调头站点”在另一个走向不存在,你需要手动选择第二个营运起点</h6>
33 36 </div>
34 37 </div>
... ... @@ -178,7 +181,7 @@
178 181 </div>
179 182 </div>
180 183 <div class="uk-width-7-10 pl5">
181   - <input type="time" name="startDate" value="{{sch.dfsj}}" required disabled>
  184 + <input type="time" name="startDate" value="{{sch.dfsj}}" required >
182 185 </div>
183 186 </div>
184 187 <div class="uk-grid">
... ... @@ -188,7 +191,7 @@
188 191 </div>
189 192 </div>
190 193 <div class="uk-width-7-10 pl5">
191   - <input type="time" name="endDate" value="{{sch.zdsj}}" required>
  194 + <input type="time" name="endDate" value="{{sch.zdsj}}" >
192 195 </div>
193 196 </div>
194 197 </script>
... ... @@ -295,7 +298,7 @@
295 298  
296 299 //营运2
297 300 nsf.html(template('range_turn_child_service-temp', nextData));
298   - disabledField(nsf, 'endDate');
  301 + disabledField(nsf, 'startDate');
299 302 //烂班1
300 303 cdf.html(template('range_turn_child_destroy-temp', currData));
301 304 disabledField(cdf, 'endStation');
... ... @@ -585,6 +588,21 @@
585 588 btmDrawer.data('name', id).data('url', url).trigger('drawer_show');
586 589 }
587 590 }
  591 +
  592 + /**
  593 + * 选择空驶调头
  594 + */
  595 + $('#emptyTurnCbox', modal).on('click', function () {
  596 + if(this.checked){
  597 + //全程烂班
  598 + $('[name=endStation]', ndf).val(nextSch.zdzCode).attr('disabled');
  599 + //空驶回起点
  600 +
  601 + }
  602 + else{
  603 +
  604 + }
  605 + });
588 606 })();
589 607 </script>
590 608 </div>
591 609 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
... ... @@ -100,49 +100,12 @@ var gb_schedule_table = (function () {
100 100 gb_ct_table.enableSort($('.ct_table', content), reset_seq_no, gb_schedule_table_dbclick.init);
101 101 //dbclick event
102 102 gb_schedule_table_dbclick.init();
103   - //点击实发,show detail
104   - fcsjActualCellQtip();
  103 + //双击实发
  104 + gb_schedule_table_dbclick.sfsjCellClick($('dd.fcsjActualCell'));
105 105 cb && cb();
106 106 });
107 107 };
108 108  
109   - function fcsjActualCellQtip() {
110   - //单击实发单元格显示详细信息
111   - $(document).on('click', 'dd.fcsjActualCell', function () {
112   - var that = this;
113   - $(that).qtip({
114   - show: true,
115   - content: {
116   - text: function (e) {
117   - var lineCode = $(that).parents('li.line_schedule').data('id')
118   - , id = $(that).parents('dl').data('id')
119   - , sch = line2Schedule[lineCode][id];
120   - return temps['sfsj_sch-detail-temp'](sch);
121   - }
122   - }
123   - , style: {
124   - classes: 'qtip-dark qtip-rounded qtip-shadow'
125   - },
126   - hide: {
127   - fixed: true,
128   - delay: 300
129   - },
130   - position: {
131   - target: that,
132   - my: 'center left',
133   - at: 'center right'
134   - },
135   - events: {
136   - hidden: function (event, api) {
137   - $(this).qtip('destroy', true);
138   - }
139   - }
140   - });
141   - });
142   -
143   - //双击
144   - gb_schedule_table_dbclick.sfsjCellClick($('dd.fcsjActualCell'));
145   - }
146 109  
147 110 //重置序号
148 111 var reset_seq_no = function (dls) {
... ... @@ -174,16 +137,21 @@ var gb_schedule_table = (function () {
174 137  
175 138 //新增一个班次,附带更新的班次
176 139 var insertSchedule = function (sch, upArr) {
  140 + var xls = {};
  141 + xls[sch.xlBm] = 1;
177 142 line2Schedule[sch.xlBm][sch.id] = sch;
178 143 //update
179 144 if (isArray(upArr)) {
180 145 $.each(upArr, function () {
181 146 line2Schedule[this.xlBm][this.id] = this;
  147 + xls[this.xlBm] = 1;
182 148 });
183 149 }
184 150  
185 151 //重新渲染表格
186   - reRenderTable(sch.xlBm);
  152 + for(var xlBm in xls){
  153 + reRenderTable(sch.xlBm);
  154 + }
187 155 //定位到新添加的班次
188 156 scroToDl(sch);
189 157 };
... ... @@ -350,6 +318,39 @@ var gb_schedule_table = (function () {
350 318 markerLastSch([sch]);
351 319 };
352 320  
  321 + //单击实发单元格显示详细信息
  322 + $(document).on('click', 'dd.fcsjActualCell', function () {
  323 + var that = this;
  324 + $(that).qtip({
  325 + show: true,
  326 + content: {
  327 + text: function (e) {
  328 + var lineCode = $(that).parents('li.line_schedule').data('id')
  329 + , id = $(that).parents('dl').data('id')
  330 + , sch = line2Schedule[lineCode][id];
  331 + return temps['sfsj_sch-detail-temp'](sch);
  332 + }
  333 + }
  334 + , style: {
  335 + classes: 'qtip-dark qtip-rounded qtip-shadow'
  336 + },
  337 + hide: {
  338 + fixed: true,
  339 + delay: 300
  340 + },
  341 + position: {
  342 + target: that,
  343 + my: 'center left',
  344 + at: 'center right'
  345 + },
  346 + events: {
  347 + hidden: function (event, api) {
  348 + $(this).qtip('destroy', true);
  349 + }
  350 + }
  351 + });
  352 + });
  353 +
353 354 //拖拽选中...
354 355 var seq_nos = '.line-schedule-table .ct_table_body>dl>dd.seq_no';
355 356 var drag_strat;
... ... @@ -601,6 +602,14 @@ var gb_schedule_table = (function () {
601 602 return dfCell;
602 603 };
603 604  
  605 +
  606 + /**
  607 + * 刷新页面的所有线路班次
  608 + */
  609 + var refreshAll = function () {
  610 + show();
  611 + };
  612 +
604 613 return {
605 614 show: show,
606 615 findScheduleByLine: findScheduleByLine,
... ... @@ -620,6 +629,7 @@ var gb_schedule_table = (function () {
620 629 addRemarks: addRemarks,
621 630 reLoadAndRefresh: reLoadAndRefresh,
622 631 showLateBadge: showLateBadge,
623   - cancelLateBadge: cancelLateBadge
  632 + cancelLateBadge: cancelLateBadge,
  633 + refreshAll: refreshAll
624 634 };
625 635 })();
... ...
src/main/resources/static/real_control_v2/js/line_schedule/search.js
... ... @@ -78,6 +78,8 @@ var gb_sch_search = (function() {
78 78 //uikit 会记住上一次搜索值,触发keyup以清空该值
79 79 $('.sch-search-autocom input', cont).val('').trigger('keyup').parent().removeClass('active');
80 80 $('.line-schedule-table .ct_table_body dl._search_hide', cont).removeClass('_search_hide');
  81 + //更新滚动条高度
  82 + $('.ct_table_wrap', cont).perfectScrollbar('update');
81 83 }
82 84  
83 85 function execSch(gps) {
... ... @@ -109,6 +111,9 @@ var gb_sch_search = (function() {
109 111 if (car != $(dds[2]).data('nbbm'))
110 112 $(this).addClass('_search_hide');
111 113 });
  114 +
  115 + //滚动条置顶
  116 + $(tbody).parents('.ct_table_wrap')[0].scrollTop = 0;
112 117 }
113 118  
114 119 return {
... ...
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
... ... @@ -13,6 +13,10 @@ var gb_sch_websocket = (function () {
13 13 var new_conn = function () {
14 14 schSock = new SockJS('/sockjs/realcontrol');
15 15 schSock.onopen = function (e) {
  16 + if(reConnCount && reConnCount > 1){
  17 + gb_schedule_table.refreshAll();
  18 + console.log('重新连接,刷新班次');
  19 + }
16 20 reConnCount = 1;
17 21 clearInterval(recInterval);
18 22 console.log('webSocket[realcontrol] onopen');
... ... @@ -101,6 +105,7 @@ var gb_sch_websocket = (function () {
101 105 * @param msg
102 106 */
103 107 var autoWdtz = function (msg) {
  108 + debugger
104 109 var schId = msg.id;
105 110 var minute = msg.minute;
106 111 var lineCode = msg.lineCode;
... ...
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v2/main.html
... ... @@ -169,7 +169,14 @@
169 169 <input type="checkbox" name="stationName"> 站点名称
170 170 </label>
171 171 <label>
172   - <a>停车场 <i class="uk-icon-angle-down"></i></a>
  172 + <div class="uk-button-dropdown" data-uk-dropdown>
  173 + <a>停车场 <i class="uk-icon-angle-down"></i></a>
  174 + <div class="uk-dropdown uk-dropdown-scrollable" style="max-height: 300px;">
  175 + <ul class="uk-nav uk-nav-dropdown parks_list">
  176 +
  177 + </ul>
  178 + </div>
  179 + </div>
173 180 </label>
174 181 </form>
175 182 </div>
... ... @@ -249,6 +256,15 @@
249 256 </dl>
250 257 {{/each}}
251 258 </script>
  259 +
  260 + <script id="pb_park_list_dropdown-temp" type="text/html">
  261 + {{each list as p i}}
  262 + <li data-code="{{p.parkCode}}" ><a>{{p.parkName}}</a></li>
  263 + {{if i == 0}}
  264 + <li class="uk-nav-divider"></li>
  265 + {{/if}}
  266 + {{/each}}
  267 + </script>
252 268 <script>
253 269 (function () {
254 270 var modal = '#map-playback2-modal', gpsArray;
... ... @@ -713,6 +729,8 @@
713 729 var routes;//路段
714 730 var stations;//站点
715 731 var parks;//停车场
  732 + //停车场编码和Polygon对照
  733 + var parkPolygons={};
716 734  
717 735 var initData = function (rs) {
718 736 var gpsArray = rs.list;
... ... @@ -721,13 +739,70 @@
721 739 var lineCode = gpsArray[0].lineId;
722 740 //从地图模块获取站点数据
723 741 stations = gb_map_spatial_data.getStationArray(lineCode);
724   - //从地图模块获取停车场数据
725   - parks = gb_map_spatial_data.carparkArray();
  742 + //停车场下拉菜单
  743 + initDropdownList(lineCode);
  744 +
726 745 //从localStorage 获取路段
727 746 routes = JSON.parse(storage.getItem(lineCode + '_route'));
728 747 routes = [routes.up_bd, routes.down_bd];
729 748 };
730 749  
  750 + /**
  751 + * 初始化停车场下拉菜单
  752 + */
  753 + var initDropdownList = function (lineCode) {
  754 + //从地图模块获取停车场数据
  755 + parks = gb_map_spatial_data.carparkArray();
  756 + console.log('parksparks', parks);
  757 + //将线路标准停车场排在第一个
  758 + var information = gb_data_basic.getLineInformation(lineCode);
  759 + var index;
  760 + for(var i = 0,p; p=parks[i++];){
  761 + if(p.parkCode == information.carPark){
  762 + index = i - 1;
  763 + break;
  764 + }
  765 + }
  766 + parks[index] = parks.splice(0, 1 , parks[index])[0];
  767 + //渲染
  768 + var htmlStr = template('pb_park_list_dropdown-temp', {list: parks});
  769 + $('.buffer_area_form .parks_list', modal).html(htmlStr);
  770 +
  771 + //停车场点击
  772 + $('.buffer_area_form .parks_list>li', modal).on('click', function () {
  773 + var code = $(this).data('code');
  774 +
  775 + if(!parkPolygons[code]){
  776 + var park;
  777 + $.each(parks, function () {
  778 + if(this.parkCode==code){park = this;return false;}
  779 + });
  780 +
  781 + transMultiWGSToBd(park);
  782 + var polygon = new BMap.Polygon(park.bdPoints, {strokeColor: 'red', strokeWeight: 1});
  783 + map.addOverlay(polygon);
  784 + parkPolygons[code] = polygon;
  785 + //中心点
  786 + var ts = park.gCenterPoint.split(' ')
  787 + ,coord = TransGPS.wgsToBD(parseFloat(ts[1]), parseFloat(ts[0]));
  788 + polygon._centerPoint = new BMap.Point(coord.lng, coord.lat);
  789 + //绘制名称label
  790 + var style = {backgroundColor: "rgba(255, 255, 255, 0.69)",color : "red", borderColor: "red", fontSize : "12px", height : "16px", lineHeight : "16px", fontFamily:"微软雅黑"}
  791 + var width = park.parkName.length * 12;
  792 + var label = new BMap.Label(park.parkName, {
  793 + position:polygon._centerPoint,
  794 + offset: new BMap.Size(-(width / 2), -27)
  795 + });
  796 + label.setStyle(style);
  797 + map.addOverlay(label);
  798 + }
  799 +
  800 + //定位到polygon
  801 + var polygon=parkPolygons[code];
  802 + map.panTo(polygon._centerPoint);
  803 + });
  804 + };
  805 +
731 806  
732 807 /**
733 808 * 更新车辆位置
... ... @@ -866,8 +941,10 @@
866 941 map.addOverlay(circle);
867 942 };
868 943  
869   - var drawPolygon = function () {
870   -
  944 + var drawPolygon = function (station) {
  945 + transMultiWGSToBd(station);
  946 + var polygon = new BMap.Polygon(station.bdPoints, {strokeColor: '#000000', strokeWeight: 1});
  947 + map.addOverlay(polygon);
871 948 };
872 949  
873 950 /**
... ... @@ -883,6 +960,7 @@
883 960 trailArray=[];
884 961 trailPolyline = null;
885 962 gpsMarker = null;
  963 + parkPolygons = {};
886 964 };
887 965  
888 966 /**
... ... @@ -1012,6 +1090,18 @@
1012 1090 reset: reset
1013 1091 }
1014 1092 })();
  1093 +
  1094 + function transMultiWGSToBd(obj) {
  1095 + if(!obj._gPoints)
  1096 + return;
  1097 + var bdPoints = [],coord;
  1098 + $.each(obj._gPoints, function () {
  1099 + coord = TransGPS.wgsToBD(this.lat, this.lng);
  1100 + bdPoints.push(new BMap.Point(coord.lng, coord.lat));
  1101 + });
  1102 +
  1103 + obj.bdPoints=bdPoints;
  1104 + }
1015 1105 })();
1016 1106 </script>
1017 1107 </div>
1018 1108 \ No newline at end of file
... ...