Commit ed76fd372d21192d8326a1818e33ba34f01c3b2b

Authored by 潘钊
1 parent 41dbae84

update...

src/main/java/com/bsth/data/forecast/ForecastRealServer.java
1 1 package com.bsth.data.forecast;
2 2  
  3 +import com.bsth.Application;
3 4 import com.bsth.data.forecast.entity.ForecastResult;
4 5 import com.bsth.data.forecast.entity.ForecastResult.ForecastResultItem;
5 6 import com.bsth.data.forecast.entity.SimpleRoute;
... ... @@ -20,6 +21,7 @@ import java.util.ArrayList;
20 21 import java.util.HashMap;
21 22 import java.util.List;
22 23 import java.util.Map;
  24 +import java.util.concurrent.TimeUnit;
23 25  
24 26 /**
25 27 *
... ... @@ -58,7 +60,7 @@ public class ForecastRealServer implements CommandLineRunner {
58 60 @Override
59 61 public void run(String... arg0) throws Exception {
60 62 //2小时更新一次站点间耗时数据
61   - //Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS);
  63 + Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS);
62 64 }
63 65  
64 66 /**
... ...
src/main/java/com/bsth/data/gpsdata/arrival/entity/SignalState.java
... ... @@ -37,8 +37,8 @@ public class SignalState {
37 37 * @return
38 38 */
39 39 public static SignalState reverseSignalSTate(ScheduleRealInfo sch, RouteReverse reverse) {
40   - if(reverse.isVague())
41   - return null;
  40 + /*if(reverse.isVague())
  41 + return null;*/
42 42  
43 43 SignalState state = new SignalState();
44 44 state.setSchId(sch.getId());
... ...
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java
... ... @@ -38,7 +38,7 @@ public class ReverseSignalHandle extends SignalHandle {
38 38 if (isReverse(gps, prev)) {
39 39 RouteReverse reverse = reverseSearch(prevs, gps);
40 40  
41   - if (reverse.getCount() >= 4
  41 + if (reverse.getCount() >= 3
42 42 && reverse.isClose()
43 43 && !GeoCacheData.isEndStation(gps.getLineId(), gps.getUpDown(), reverse.getTurned())) {
44 44 scheduleSignalState.reverseAnalyse(reverse);
... ...
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
... ... @@ -60,7 +60,7 @@ public class GpsDataRecovery implements ApplicationContextAware {
60 60 for (String nbbm : keys) {
61 61 Collections.sort(listMap.get(nbbm), comp);
62 62 threadPool.execute(new RecoveryThread(listMap.get(nbbm), count));
63   - /*if(nbbm.equals("YT-CD008"))
  63 + /*if(nbbm.equals("W9H-003"))
64 64 new RecoveryThread(listMap.get(nbbm), count).run();*/
65 65 }
66 66  
... ...
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
... ... @@ -563,7 +563,7 @@ public class DayOfSchedule implements CommandLineRunner {
563 563 */
564 564 public boolean isFirstOut(ScheduleRealInfo sch){
565 565 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
566   - if(list.get(0).equals(sch) && sch.getBcType().equals("out"))
  566 + if(list.get(0) == sch && sch.getBcType().equals("out"))
567 567 return true;
568 568 return false;
569 569 }
... ...
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
... ... @@ -58,7 +58,7 @@ public class GpsServiceImpl implements GpsService {
58 58  
59 59 int dayOfYear = sCal.get(Calendar.DAY_OF_YEAR);
60 60 /*
61   - * if(dayOfYear != eCal.get(Calendar.DAY_OF_YEAR)){
  61 + * if(dayOfYear != eCal.get(Calendar.DAY_OF_YEAR)){
62 62 * System.out.println("暂时不支持跨天查询..."); return null; }
63 63 */
64 64  
... ... @@ -195,7 +195,7 @@ public class GpsServiceImpl implements GpsService {
195 195 inv = inv.substring(0, inv.length() - 1);
196 196  
197 197 // 查询到离站数据
198   - //Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear/* 30 */, st, et, inv);
  198 + Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear/* 30 */, st, et, inv);
199 199  
200 200 String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS from bsth_c_gps_info where days_year=? and device_id in ("
201 201 + inv + ") and ts > ? and ts < ?";
... ... @@ -239,11 +239,12 @@ public class GpsServiceImpl implements GpsService {
239 239 inOutStop = rs.getInt("INOUT_STOP");
240 240 map.put("inout_stop", inOutStop);
241 241  
242   - /*analyse = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS"));
243   - if (analyse != null) {
244   - map.put("inout_stop_info", analyse);
245   - map.put("inout_stop", analyse.getInOut());
246   - }*/
  242 + arrival = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS"));
  243 + if (arrival != null) {
  244 + map.put("inout_stop_info", arrival);
  245 + map.put("inout_stop", arrival.getInOut());
  246 + }
  247 +
247 248 map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID")));
248 249 map.put("state", 0);
249 250 // 上下行
... ... @@ -272,11 +273,17 @@ public class GpsServiceImpl implements GpsService {
272 273  
273 274 rs = ps.executeQuery();
274 275 ArrivalEntity arr;
275   - int inOut;
  276 + int inOut, updown;
  277 + String prefix, stationName, lineId;
276 278 while (rs.next()) {
277   - arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), rs.getString("LINE_ID"),
278   - rs.getInt("UP_DOWN"), rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"),
279   - rs.getInt("WEEKS_YEAR"), BasicData.stationCode2NameMap.get(rs.getString("STOP_NO")));
  279 + lineId = rs.getString("LINE_ID");
  280 + updown = rs.getInt("UP_DOWN");
  281 + prefix = lineId + "_" + updown + "_";
  282 + stationName = BasicData.getStationNameByCode(rs.getString("STOP_NO"), prefix);
  283 +
  284 + arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), lineId,
  285 + updown, rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"),
  286 + rs.getInt("WEEKS_YEAR"), stationName);
280 287  
281 288 // 设备号_时间戳_进出状态 为key
282 289 // 反转进出状态
... ... @@ -382,7 +389,7 @@ public class GpsServiceImpl implements GpsService {
382 389  
383 390 gpsRealData.remove(device);
384 391 rs.put("status", ResponseCode.SUCCESS);
385   - }catch (Exception e){
  392 + } catch (Exception e) {
386 393 rs.put("status", ResponseCode.ERROR);
387 394 }
388 395 return rs;
... ...
src/main/java/com/bsth/service/realcontrol/impl/ChildTaskPlanServiceImpl.java
... ... @@ -43,7 +43,6 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl&lt;ChildTaskPlan, Lon
43 43 ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId());
44 44 Map<String, Object> rs;
45 45 //保存起终点名称
46   - Map<String, String> map = BasicData.stationCode2NameMap;
47 46 String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
48 47  
49 48 t.setStartStationName(BasicData.getStationNameByCode(t.getStartStation(), prefix));
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -286,6 +286,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
286 286 t.setCreateBy(user);
287 287 t.setSflj(true);
288 288 t.setLate(false);
  289 + t.setDfsj(t.getFcsj());
289 290 t.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + t.getZdsj()).getTime());
290 291  
291 292  
... ... @@ -293,8 +294,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
293 294 t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60);
294 295  
295 296 //起终点名称
296   - t.setQdzName(BasicData.stationCode2NameMap.get(t.getQdzCode()));
297   - t.setZdzName(BasicData.stationCode2NameMap.get(t.getZdzCode()));
  297 + String prefix = t.getXlBm() + "_" + t.getXlDir() + "_";
  298 + t.setQdzName(BasicData.getStationNameByCode(t.getQdzCode(), prefix));
  299 + t.setZdzName(BasicData.getStationNameByCode(t.getZdzCode(), prefix));
298 300  
299 301 //计算班次实际时间
300 302 schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
... ...
src/main/resources/static/index.html
1 1 <!DOCTYPE html>
2 2 <html lang="zh">
3 3 <head>
4   -<meta name="renderer" content="webkit" />
5   -<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
6   -<meta charset="UTF-8">
7   -<title>调度系统</title>
8   -
9   -<meta http-equiv="Pragma" content="no-cache">
10   -<meta http-equiv="Cache-control" content="no-cache">
11   -<meta http-equiv="Cache" content="no-cache">
12   -
13   -<!-- Font Awesome 图标字体 -->
14   -<link href="/metronic_v4.5.4/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
15   -<!-- Bootstrap style -->
16   -<link href="/metronic_v4.5.4/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
17   -<!-- jsTree 数插件 -->
18   -<link href="/metronic_v4.5.4/plugins/jstree/dist/themes/default/style.min.css" rel="stylesheet" type="text/css" />
19   -<!-- MULTI-select 多选下拉框美化 -->
20   -<link href="/metronic_v4.5.4/plugins/jquery-multi-select/css/multi-select.css" rel="stylesheet" type="text/css" />
21   -
22   -<!-- editable -->
23   -<link href="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css" rel="stylesheet" type="text/css" />
24   -<!-- METRONIC style -->
25   -<link href="/metronic_v4.5.4/layout4/css/themes/light.min.css" rel="stylesheet" type="text/css" id="style_color" />
26   -<link href="/metronic_v4.5.4/css/components.css" rel="stylesheet" type="text/css" />
27   -<link href="/metronic_v4.5.4/css/plugins.css" rel="stylesheet" type="text/css" />
28   -<link href="/metronic_v4.5.4/layout4/css/layout.min.css" rel="stylesheet" type="text/css" />
29   -<link href="/metronic_v4.5.4/layout4/css/custom.min.css" rel="stylesheet" type="text/css" />
30   -<!-- select2 下拉框插件 -->
31   -<link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css" />
32   -<link href="/metronic_v4.5.4/plugins/select2/css/select2-bootstrap.min.css" rel="stylesheet" type="text/css" />
33   -<!-- layer 弹层 插件 -->
34   -<link href="/assets/plugins/layer-v2.4/layer/skin/layer.css" rel="stylesheet" type="text/css" />
35   -<!-- fileinput 上传 插件 -->
36   -<link href="/assets/plugins/fileinput/css/fileinput.min.css" rel="stylesheet" type="text/css" />
37   -<!-- iCheck 单选框和复选框 -->
38   -<link href="/metronic_v4.5.4/plugins/icheck/skins/all.css" rel="stylesheet" type="text/css" />
39   -<!-- 日期控件 -->
40   -<link href="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css" />
41   -<!-- table 表格控件 -->
42   -<link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" type="text/css" />
43   -
44   -<!-- handsontable样式 -->
45   -<link rel="stylesheet" href="/assets/bower_components/handsontable/dist/handsontable.full.css"/>
46   -<!-- schedule计划调度AngularJS模块主css -->
47   -<link rel="stylesheet" href="/pages/scheduleApp/module/common/main.css" type="text/css"/>
48   -
49   -<style type="text/css">
50   -.searchForm{
51   -
52   -}
53   -.searchForm .form-group .control-label{
54   - padding-right: 0px;
55   - text-align: right;
56   - margin-top: 7px;
57   -}
58   -.searchForm .form-group>div{
59   - padding-left: 10px;
60   - padding-right: 0px;
61   -}
62   -.searchForm .row>div{
63   - padding-left: 0px;
64   - padding-right: 0px;
65   - padding: 5px 0 5px 0;
66   - width: 270px;
67   - display: inline-block;
68   -}
69   -.searchForm .form-actions{
70   -
71   -}
72   -tr.row-active td {
73   - border-bottom: 1px solid blue!important;
74   - color: blue;
75   -}
76   -.ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection {
77   - font-size: 14px;
78   -}
79   -.ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection{
80   - padding: 6px 26px;
81   -}
82   -.ms-container .ms-list{
83   - height: 306px;
84   -}
85   -.ms-container .ms-selectable, .ms-container .ms-selection{
86   - width: 47%;
87   -}
88   -.ms-container {
89   - width: 470px;
90   - margin: auto;
91   -}
92   -.multi-custom-header-left{
93   - text-align: center;
94   - padding: 7px;
95   - color: #3B3F51;
96   -}
97   -.multi-custom-header-right{
98   - text-align: center;
99   - padding: 7px;
100   - font-weight: bold;
101   - color: #36C6D3;
102   -}
103   -.mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content {
104   - padding: 0 55px 0 0px;
105   -}
106   -.mt-element-list .list-simple.mt-list-container ul > .mt-list-item {
107   - padding: 3.3px 0;
108   -}
109   -
110   -#route-container{
111   - display: none;
112   -}
113   -
114   -.page-content.active{
115   - display: block !important;
116   -}
117   -
118   -.page-header.navbar .page-logo .logo-default {
119   - margin: 0;
120   -}
121   -.page-header.navbar .top-menu .navbar-nav>li.dropdown.open .dropdown-toggle {
122   - background-color: #284a99;
123   -}
124   -.page-header.navbar .page-logo{
125   - padding-right: 10px;
126   -}
127   -
128   -.page-logo .logo-default.logo-default-text{
129   - font-weight: 600;
130   - color: white !important;
131   - margin-top: 19px !important;
132   - font-size: 24px;
133   - text-decoration: none;
134   -}
135   -.page-logo .logo-default.logo-default-text:HOVER{
136   - color: #dedede !important;
137   -}
138   -
139   -</style>
140   -
141   -<!-- ocLazyLoading载入文件的位置 -->
142   -<link id="ng_load_plugins_before" />
  4 + <meta name="renderer" content="webkit"/>
  5 + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  6 + <meta charset="UTF-8">
  7 + <title>调度系统</title>
  8 +
  9 + <meta http-equiv="Pragma" content="no-cache">
  10 + <meta http-equiv="Cache-control" content="no-cache">
  11 + <meta http-equiv="Cache" content="no-cache">
  12 +
  13 + <!-- Font Awesome 图标字体 -->
  14 + <link href="/metronic_v4.5.4/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>
  15 + <!-- Bootstrap style -->
  16 + <link href="/metronic_v4.5.4/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
  17 + <!-- jsTree 数插件 -->
  18 + <link href="/metronic_v4.5.4/plugins/jstree/dist/themes/default/style.min.css" rel="stylesheet" type="text/css"/>
  19 + <!-- MULTI-select 多选下拉框美化 -->
  20 + <link href="/metronic_v4.5.4/plugins/jquery-multi-select/css/multi-select.css" rel="stylesheet" type="text/css"/>
  21 +
  22 + <!-- editable -->
  23 + <link href="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css"
  24 + rel="stylesheet" type="text/css"/>
  25 + <!-- METRONIC style -->
  26 + <link href="/metronic_v4.5.4/layout4/css/themes/light.min.css" rel="stylesheet" type="text/css" id="style_color"/>
  27 + <link href="/metronic_v4.5.4/css/components.css" rel="stylesheet" type="text/css"/>
  28 + <link href="/metronic_v4.5.4/css/plugins.css" rel="stylesheet" type="text/css"/>
  29 + <link href="/metronic_v4.5.4/layout4/css/layout.min.css" rel="stylesheet" type="text/css"/>
  30 + <link href="/metronic_v4.5.4/layout4/css/custom.min.css" rel="stylesheet" type="text/css"/>
  31 + <!-- select2 下拉框插件 -->
  32 + <link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css"/>
  33 + <link href="/metronic_v4.5.4/plugins/select2/css/select2-bootstrap.min.css" rel="stylesheet" type="text/css"/>
  34 + <!-- layer 弹层 插件 -->
  35 + <link href="/assets/plugins/layer-v2.4/layer/skin/layer.css" rel="stylesheet" type="text/css"/>
  36 + <!-- fileinput 上传 插件 -->
  37 + <link href="/assets/plugins/fileinput/css/fileinput.min.css" rel="stylesheet" type="text/css"/>
  38 + <!-- iCheck 单选框和复选框 -->
  39 + <link href="/metronic_v4.5.4/plugins/icheck/skins/all.css" rel="stylesheet" type="text/css"/>
  40 + <!-- 日期控件 -->
  41 + <link href="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/css/bootstrap-datetimepicker.min.css"
  42 + rel="stylesheet" type="text/css"/>
  43 + <!-- table 表格控件 -->
  44 + <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css"
  45 + type="text/css"/>
  46 +
  47 + <!-- handsontable样式 -->
  48 + <link rel="stylesheet" href="/assets/bower_components/handsontable/dist/handsontable.full.css"/>
  49 + <!-- schedule计划调度AngularJS模块主css -->
  50 + <link rel="stylesheet" href="/pages/scheduleApp/module/common/main.css" type="text/css"/>
  51 +
  52 + <style type="text/css">
  53 + .searchForm {
  54 +
  55 + }
  56 +
  57 + .searchForm .form-group .control-label {
  58 + padding-right: 0px;
  59 + text-align: right;
  60 + margin-top: 7px;
  61 + }
  62 +
  63 + .searchForm .form-group > div {
  64 + padding-left: 10px;
  65 + padding-right: 0px;
  66 + }
  67 +
  68 + .searchForm .row > div {
  69 + padding-left: 0px;
  70 + padding-right: 0px;
  71 + padding: 5px 0 5px 0;
  72 + width: 270px;
  73 + display: inline-block;
  74 + }
  75 +
  76 + .searchForm .form-actions {
  77 +
  78 + }
  79 +
  80 + tr.row-active td {
  81 + border-bottom: 1px solid blue !important;
  82 + color: blue;
  83 + }
  84 +
  85 + .ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection {
  86 + font-size: 14px;
  87 + }
  88 +
  89 + .ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection {
  90 + padding: 6px 26px;
  91 + }
  92 +
  93 + .ms-container .ms-list {
  94 + height: 306px;
  95 + }
  96 +
  97 + .ms-container .ms-selectable, .ms-container .ms-selection {
  98 + width: 47%;
  99 + }
  100 +
  101 + .ms-container {
  102 + width: 470px;
  103 + margin: auto;
  104 + }
  105 +
  106 + .multi-custom-header-left {
  107 + text-align: center;
  108 + padding: 7px;
  109 + color: #3B3F51;
  110 + }
  111 +
  112 + .multi-custom-header-right {
  113 + text-align: center;
  114 + padding: 7px;
  115 + font-weight: bold;
  116 + color: #36C6D3;
  117 + }
  118 +
  119 + .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content {
  120 + padding: 0 55px 0 0px;
  121 + }
  122 +
  123 + .mt-element-list .list-simple.mt-list-container ul > .mt-list-item {
  124 + padding: 3.3px 0;
  125 + }
  126 +
  127 + #route-container {
  128 + display: none;
  129 + }
  130 +
  131 + .page-content.active {
  132 + display: block !important;
  133 + }
  134 +
  135 + .page-header.navbar .page-logo .logo-default {
  136 + margin: 0;
  137 + }
  138 +
  139 + .page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle {
  140 + background-color: #284a99;
  141 + }
  142 +
  143 + .page-header.navbar .page-logo {
  144 + padding-right: 10px;
  145 + }
  146 +
  147 + .page-logo .logo-default.logo-default-text {
  148 + font-weight: 600;
  149 + color: white !important;
  150 + margin-top: 19px !important;
  151 + font-size: 24px;
  152 + text-decoration: none;
  153 + }
  154 +
  155 + .page-logo .logo-default.logo-default-text:HOVER {
  156 + color: #dedede !important;
  157 + }
  158 +
  159 + </style>
  160 +
  161 + <!-- ocLazyLoading载入文件的位置 -->
  162 + <link id="ng_load_plugins_before"/>
143 163  
144 164 </head>
145 165 <body class="page-container-bg-solid page-header-fixed page-sidebar-closed-hide-logo page-sidebar-fixed">
146   - <div class="page-header navbar navbar-fixed-top" style="background: linear-gradient(to bottom ,#124e78, #125688);">
147   - <div class="page-header-inner ">
148   - <!-- LOGO -->
149   - <div class="page-logo">
150   - <a href="index.html" class="logo-default logo-default-text" > 闵行公交调度系统 </a>
151   - <div class="menu-toggler sidebar-toggler">
152   - </div>
153   - </div>
154   - <!-- END LOGO -->
155   - <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse" data-target=".navbar-collapse"> </a>
156   - <div class="page-top">
157   - <div class="top-menu">
158   - <ul class="nav navbar-nav pull-right">
159   - <!-- 信息通知区 -->
160   - <li class="dropdown dropdown-extended dropdown-notification dropdown-dark" id="header_notification_bar">
161   - <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">
162   - <i class="fa fa-bell"></i>
163   - <span class="badge badge-success"> 0 </span>
164   - </a>
165   - <ul class="dropdown-menu" style="max-width: 345px;width: 345px;">
166   - <li class="external">
167   - <h3>今日 <span class="bold">0 条</span> 通知</h3>
168   - <a href="javascript:;">查看全部</a>
169   - </li>
170   - <li>
171   - <ul class="dropdown-menu-list scroller" style="height: 250px;" data-handle-color="#637283">
172   - </ul>
173   - </li>
174   - </ul>
175   - </li>
176   - <li class="dropdown dropdown-user dropdown-dark">
177   - <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">
178   - <span id="indexTopUName" class="username username-hide-on-mobile" style="vertical-align: middle;"> <i class="fa fa-user"></i></span>
179   - </a>
180   - <ul class="dropdown-menu dropdown-menu-default">
181   - <li>
182   - <a href="javascript:;">
183   - <i class="fa fa-user"></i> 我的信息 </a>
184   - </li>
185   - <li>
186   - <a href="javascript:;" id="changePWD">
187   - <i class="fa fa-unlock-alt"></i> 修改密码</a>
188   - </li>
189   - <li class="divider"> </li>
190   - <li>
191   - <a href="javascript:;">
192   - <i class="fa fa-lock"></i> 锁屏 </a>
193   - </li>
194   - <li>
195   - <a href="/logout">
196   - <i class="fa fa-key"></i> 注销登陆 </a>
197   - </li>
198   - </ul>
199   - </li>
200   - </ul>
201   - </div>
  166 +<div class="page-header navbar navbar-fixed-top" style="background: linear-gradient(to bottom ,#124e78, #125688);">
  167 + <div class="page-header-inner ">
  168 + <!-- LOGO -->
  169 + <div class="page-logo">
  170 + <a href="index.html" class="logo-default logo-default-text"> 闵行公交调度系统 </a>
  171 + <div class="menu-toggler sidebar-toggler">
202 172 </div>
203 173 </div>
204   - </div>
205   - <div class="page-container">
206   - <div class="page-sidebar-wrapper">
207   - <div class="page-sidebar navbar-collapse collapse">
208   - <ul class="page-sidebar-menu page-sidebar-menu-fixed" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200" id="leftMenuSidebar">
  174 + <!-- END LOGO -->
  175 + <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse"
  176 + data-target=".navbar-collapse"> </a>
  177 + <div class="page-top">
  178 + <div class="top-menu">
  179 + <ul class="nav navbar-nav pull-right">
  180 + <!-- 信息通知区 -->
  181 + <li class="dropdown dropdown-extended dropdown-notification dropdown-dark"
  182 + id="header_notification_bar">
  183 + <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"
  184 + data-close-others="true">
  185 + <i class="fa fa-bell"></i>
  186 + <span class="badge badge-success"> 0 </span>
  187 + </a>
  188 + <ul class="dropdown-menu" style="max-width: 345px;width: 345px;">
  189 + <li class="external">
  190 + <h3>今日 <span class="bold">0 条</span> 通知</h3>
  191 + <a href="javascript:;">查看全部</a>
  192 + </li>
  193 + <li>
  194 + <ul class="dropdown-menu-list scroller" style="height: 250px;"
  195 + data-handle-color="#637283">
  196 + </ul>
  197 + </li>
  198 + </ul>
  199 + </li>
  200 + <li class="dropdown dropdown-user dropdown-dark">
  201 + <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"
  202 + data-close-others="true">
  203 + <span id="indexTopUName" class="username username-hide-on-mobile"
  204 + style="vertical-align: middle;"> <i class="fa fa-user"></i></span>
  205 + </a>
  206 + <ul class="dropdown-menu dropdown-menu-default">
  207 + <li>
  208 + <a href="javascript:;">
  209 + <i class="fa fa-user"></i> 我的信息 </a>
  210 + </li>
  211 + <li>
  212 + <a href="javascript:;" id="changePWD">
  213 + <i class="fa fa-unlock-alt"></i> 修改密码</a>
  214 + </li>
  215 + <li class="divider"></li>
  216 + <li>
  217 + <a href="javascript:;">
  218 + <i class="fa fa-lock"></i> 锁屏 </a>
  219 + </li>
  220 + <li>
  221 + <a href="/logout">
  222 + <i class="fa fa-key"></i> 注销登陆 </a>
  223 + </li>
  224 + </ul>
  225 + </li>
209 226 </ul>
210 227 </div>
211 228 </div>
212   - <div class="page-content-wrapper">
213   - <div id="pjax-container" class="page-content"></div>
214   -
215   - <div id="route-container">
216   - <div ng-app="ScheduleApp">
217   - <div ng-controller="ScheduleAppController">
218   -
219   - <!-- loading widget -->
220   - <div id="loadingWidget" class="flyover mask" loading-widget>
221   - <div class="alert alert-info">
222   - <strong>载入中......</strong>
223   - </div>
224   - </div>
225   -
226   - <div ui-view class="fade-in-up"> </div>
  229 + </div>
  230 +</div>
  231 +<div class="page-container">
  232 + <div class="page-sidebar-wrapper">
  233 + <div class="page-sidebar navbar-collapse collapse">
  234 + <ul class="page-sidebar-menu page-sidebar-menu-fixed" data-keep-expanded="false" data-auto-scroll="true"
  235 + data-slide-speed="200" id="leftMenuSidebar">
  236 + </ul>
  237 + </div>
  238 + </div>
  239 + <div class="page-content-wrapper">
  240 + <div id="pjax-container" class="page-content"></div>
  241 +
  242 + <div id="route-container">
  243 + <div ng-app="ScheduleApp">
  244 + <div ng-controller="ScheduleAppController">
  245 +
  246 + <!-- loading widget -->
  247 + <div id="loadingWidget" class="flyover mask" loading-widget>
  248 + <div class="alert alert-info">
  249 + <strong>载入中......</strong>
227 250 </div>
228 251 </div>
  252 +
  253 + <div ui-view class="fade-in-up"></div>
229 254 </div>
230   - </div>
  255 + </div>
  256 + </div>
231 257 </div>
  258 +</div>
232 259  
233 260 <script id="menu_list_temp" type="text/html">
234   -{{each list as group i}}
235   - <li class="heading">
236   - <h3 class="uppercase">{{group.name}}</h3>
237   - </li>
238   - {{each group.children as dir j}}
239   - <li class="nav-item">
240   - <a href="javascript:;" class="nav-link nav-toggle ">
241   - <i class="{{dir.icon}}"></i>
242   - <span class="title">{{dir.name}}</span>
243   - <span class="arrow"></span>
244   - </a>
245   - <ul class="sub-menu">
246   - {{each dir.children as module s}}
247   - <li class="nav-item ">
248   - {{if module.container=="pjax-container"}}
249   - <a href="/pages/{{module.path}}" class="nav-link " data-pjax>
250   - <span class="title">{{module.name}}</span>
251   - </a>
252   - {{else}}
253   - <a href="{{module.path}}" class="nav-link " data-angularjs>
254   - <span class="title">{{module.name}}</span>
255   - </a>
256   - {{/if}}
257   - </li>
258   - {{/each}}
259   - </ul>
260   - </li>
261   - {{/each}}
262   -{{/each}}
  261 + {{each list as group i}}
  262 + <li class="heading">
  263 + <h3 class="uppercase">{{group.name}}</h3>
  264 + </li>
  265 + {{each group.children as dir j}}
  266 + <li class="nav-item">
  267 + <a href="javascript:;" class="nav-link nav-toggle ">
  268 + <i class="{{dir.icon}}"></i>
  269 + <span class="title">{{dir.name}}</span>
  270 + <span class="arrow"></span>
  271 + </a>
  272 + <ul class="sub-menu">
  273 + {{each dir.children as module s}}
  274 + <li class="nav-item ">
  275 + {{if module.container=="pjax-container"}}
  276 + <a href="/pages/{{module.path}}" class="nav-link " data-pjax>
  277 + <span class="title">{{module.name}}</span>
  278 + </a>
  279 + {{else}}
  280 + <a href="{{module.path}}" class="nav-link " data-angularjs>
  281 + <span class="title">{{module.name}}</span>
  282 + </a>
  283 + {{/if}}
  284 + </li>
  285 + {{/each}}
  286 + </ul>
  287 + </li>
  288 + {{/each}}
  289 + {{/each}}
263 290  
264 291 </script>
265 292 <!-- jQuery -->
... ... @@ -272,24 +299,24 @@ tr.row-active td {
272 299 <script src="/metronic_v4.5.4/scripts/app.min.js" data-exclude=1></script>
273 300 <script src="/metronic_v4.5.4/layout4/scripts/layout.min.js" data-exclude=1></script>
274 301 <!-- 虚拟滚动条 -->
275   -<script src="/metronic_v4.5.4/plugins/jquery-slimscroll/jquery.slimscroll.min.js" ></script>
  302 +<script src="/metronic_v4.5.4/plugins/jquery-slimscroll/jquery.slimscroll.min.js"></script>
276 303 <!-- jsTree 树插件 -->
277   -<script src="/metronic_v4.5.4/plugins/jstree/dist/jstree.min.js" ></script>
  304 +<script src="/metronic_v4.5.4/plugins/jstree/dist/jstree.min.js"></script>
278 305 <!-- bootstrap-hover-dropDown -->
279   -<script src="/metronic_v4.5.4/plugins/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js" ></script>
  306 +<script src="/metronic_v4.5.4/plugins/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js"></script>
280 307 <!-- jquery.validate 表单验证 -->
281 308 <script src="/metronic_v4.5.4/plugins/jquery-validation/js/jquery.validate.min.js"></script>
282 309 <script src="/metronic_v4.5.4/plugins/jquery-validation/js/localization/messages_zh.js"></script>
283 310 <!-- 向导式插件 -->
284 311 <script src="/metronic_v4.5.4//plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js"></script>
285 312 <!-- iCheck 单选框和复选框 -->
286   -<script src="/metronic_v4.5.4/plugins/icheck/icheck.min.js" ></script>
  313 +<script src="/metronic_v4.5.4/plugins/icheck/icheck.min.js"></script>
287 314 <!-- select2 下拉框 -->
288   -<script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js" ></script>
  315 +<script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js"></script>
289 316 <!-- MULTI SELECT 多选下拉框 -->
290   -<script src="/metronic_v4.5.4/plugins/jquery-multi-select/js/jquery.multi-select.js" ></script>
  317 +<script src="/metronic_v4.5.4/plugins/jquery-multi-select/js/jquery.multi-select.js"></script>
291 318 <!-- editable.js -->
292   -<script src="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js" ></script>
  319 +<script src="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js"></script>
293 320 <!-- PJAX -->
294 321 <script src="/assets/plugins/jquery.pjax.js"></script>
295 322 <!-- layer 弹层 -->
... ... @@ -313,7 +340,7 @@ tr.row-active td {
313 340  
314 341 <script src="/assets/plugins/pinyin.js"></script>
315 342 <!-- 日期控件 -->
316   -<script src="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/js/bootstrap-datetimepicker.min.js" ></script>
  343 +<script src="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/js/bootstrap-datetimepicker.min.js"></script>
317 344 <!-- 表格控件 -->
318 345 <!-- 统计图控件 -->
319 346 <!--<script src="/assets/global/getEchart.js"></script>
... ... @@ -322,130 +349,139 @@ tr.row-active td {
322 349 <script src="/assets/js/dictionary.js"></script>
323 350  
324 351 <script data-exclude=1>
325   -//初始打开的片段地址
326   -var initFragment = "^_^initFragment^_^";
327   -//静态文件目录
328   -var dir = '/pages/';
329   -//片段容器
330   -var pjaxContainer = '#pjax-container'
331   - ,angJsContainer = '#route-container';
332   -
333   -$(function(){
334   - $.get('/user/currentUser', function(user){
335   - $('#indexTopUName').text(user.userName);
336   - });
337   -
338   - //带 data-pjax 的链接由pjax加载
339   - $(document).pjax('a[data-pjax]', pjaxContainer);
340   -
341   - //pjax左菜单点击事件
342   - $(document).on('click','#leftMenuSidebar a[data-pjax]', function(){
343   - $('#leftMenuSidebar li.nav-item.active').removeClass('active');
344   - $(this).parent().addClass('active');
345   - showPjax();
346   - });
347   -
348   - //angularjs左菜单点击事件
349   - $(document).on('click','#leftMenuSidebar a[data-angularjs]', function(){
350   - $('#leftMenuSidebar li.nav-item.active').removeClass('active');
351   - $(this).parent().addClass('active');
352   - showAngJs();
353   - });
354   -
355   - //加载左菜单栏
356   - $get('/module/findByCurrentUser', null,
357   - function(ms){
358   - var treeArray = createTreeData(ms);
359   - treeArray.sort(function(a, b){
360   - return a.createDate - b.createDate;
361   - });
362   - var menuHtml = template('menu_list_temp', {list: treeArray});
363   - $('#leftMenuSidebar').html(menuHtml);
364   -
365   - //----------- 检查URL ----------------
366   - var h = location.hash;
367   - if(initFragment && initFragment != ''){
368   - showPjax();
369   - //普通片段
370   - loadPage(initFragment);
371   - //选中菜单
372   - $.each($('#leftMenuSidebar a'), function(i, item){
373   - if(urlPattern($(item).attr('href'), initFragment)){
374   - activeLeftMenu(item);
375   - }
376   - });
377   - }else if(h){
378   - //angularjs片段
379   - showAngJs();
380   - //选中菜单
381   - $.each($('#leftMenuSidebar a'), function(i, item){
382   - if($(item).attr('href') == h){
383   - activeLeftMenu(item);
384   - }
385   - });
386   - }
387   - else{
388   - //加载主页
389   - loadPage('/pages/home.html');
390   - }
391   - });
392   -
393   - //修改密码
394   - $('#changePWD').on('click', function(){
395   - $.get('/pages/permission/user/changePWD.html', function(content){
396   - layer.open({
397   - type: 1,
398   - area: ['600px','360px'],
399   - content: content,
400   - title : '修改密码',
401   - shift: 5,
402   - scrollbar: false,
403   - success: function(){
404   - }
405   - });
406   - });
407   - });
408   -});
409   -
410   - //modal关闭时销毁dom
411   - $(document).on('hidden.bs.modal', '.modal', function(){
412   - $(this).remove();
413   - });
414   -
415   - //pjax加载完成事件
416   - $(document).on('pjax:success', function(){
417   - var dicts = $(pjaxContainer).find('.nt-dictionary');
418   - dictionaryUtils.transformDom(dicts);
419   - });
420   -
421   - function loadPage(url){
422   - $.pjax({url: url, container: pjaxContainer})
423   - }
424   -
425   - function urlPattern(a , b){
426   - var r;
427   - try {
428   - r = a.substring(0, a.lastIndexOf('/')) == b.substring(0, b.lastIndexOf('/'));
429   - } catch (e) {
430   - r = false;
431   - }
432   - return r;
433   - }
434   -
435   - function showPjax(){
436   - $(angJsContainer).removeClass('page-content active').hide();
437   - $(pjaxContainer).addClass('page-content active');
438   - }
439   -
440   - function showAngJs(){
441   - $(pjaxContainer).html('').removeClass('page-content active').hide();
442   - $(angJsContainer).addClass('page-content active');
443   - }
444   -
445   - function activeLeftMenu(item){
446   - $(item).parent('.nav-item').addClass('active').parent('.sub-menu').show().parent().addClass('open');
447   - }
448   -
  352 + //初始打开的片段地址
  353 + var initFragment = "^_^initFragment^_^";
  354 + //静态文件目录
  355 + var dir = '/pages/';
  356 + //片段容器
  357 + var pjaxContainer = '#pjax-container'
  358 + , angJsContainer = '#route-container';
  359 +
  360 + $(function () {
  361 + $.get('/user/currentUser', function (user) {
  362 + $('#indexTopUName').text(user.userName);
  363 + });
  364 +
  365 + //带 data-pjax 的链接由pjax加载
  366 + $(document).pjax('a[data-pjax]', pjaxContainer);
  367 +
  368 + //pjax左菜单点击事件
  369 + $(document).on('click', '#leftMenuSidebar a[data-pjax]', function () {
  370 + setTitle(this);
  371 +
  372 + $('#leftMenuSidebar li.nav-item.active').removeClass('active');
  373 + $(this).parent().addClass('active');
  374 + showPjax();
  375 + });
  376 +
  377 + //angularjs左菜单点击事件
  378 + $(document).on('click', '#leftMenuSidebar a[data-angularjs]', function () {
  379 + setTitle(this);
  380 +
  381 + $('#leftMenuSidebar li.nav-item.active').removeClass('active');
  382 + $(this).parent().addClass('active');
  383 + showAngJs();
  384 + });
  385 +
  386 + //加载左菜单栏
  387 + $get('/module/findByCurrentUser', null,
  388 + function (ms) {
  389 + var treeArray = createTreeData(ms);
  390 + treeArray.sort(function (a, b) {
  391 + return a.createDate - b.createDate;
  392 + });
  393 + var menuHtml = template('menu_list_temp', {list: treeArray});
  394 + $('#leftMenuSidebar').html(menuHtml);
  395 +
  396 + //----------- 检查URL ----------------
  397 + var h = location.hash;
  398 + if (initFragment && initFragment != '') {
  399 + showPjax();
  400 + //普通片段
  401 + loadPage(initFragment);
  402 + //选中菜单
  403 + $.each($('#leftMenuSidebar a'), function (i, item) {
  404 + if (urlPattern($(item).attr('href'), initFragment)) {
  405 + activeLeftMenu(item);
  406 + }
  407 + });
  408 + } else if (h) {
  409 + //angularjs片段
  410 + showAngJs();
  411 + //选中菜单
  412 + $.each($('#leftMenuSidebar a'), function (i, item) {
  413 + if ($(item).attr('href') == h) {
  414 + activeLeftMenu(item);
  415 + }
  416 + });
  417 + }
  418 + else {
  419 + //加载主页
  420 + loadPage('/pages/home.html');
  421 + }
  422 + });
  423 +
  424 + //修改密码
  425 + $('#changePWD').on('click', function () {
  426 + $.get('/pages/permission/user/changePWD.html', function (content) {
  427 + layer.open({
  428 + type: 1,
  429 + area: ['600px', '360px'],
  430 + content: content,
  431 + title: '修改密码',
  432 + shift: 5,
  433 + scrollbar: false,
  434 + success: function () {
  435 + }
  436 + });
  437 + });
  438 + });
  439 + });
  440 +
  441 + //modal关闭时销毁dom
  442 + $(document).on('hidden.bs.modal', '.modal', function () {
  443 + $(this).remove();
  444 + });
  445 +
  446 + //pjax加载完成事件
  447 + $(document).on('pjax:success', function () {
  448 + var dicts = $(pjaxContainer).find('.nt-dictionary');
  449 + dictionaryUtils.transformDom(dicts);
  450 + });
  451 +
  452 + function loadPage(url) {
  453 + $.pjax({url: url, container: pjaxContainer})
  454 + }
  455 +
  456 + function urlPattern(a, b) {
  457 + var r;
  458 + try {
  459 + r = a.substring(0, a.lastIndexOf('/')) == b.substring(0, b.lastIndexOf('/'));
  460 + } catch (e) {
  461 + r = false;
  462 + }
  463 + return r;
  464 + }
  465 +
  466 + function showPjax() {
  467 + $(angJsContainer).removeClass('page-content active').hide();
  468 + $(pjaxContainer).addClass('page-content active');
  469 + }
  470 +
  471 + function showAngJs() {
  472 + $(pjaxContainer).html('').removeClass('page-content active').hide();
  473 + $(angJsContainer).addClass('page-content active');
  474 + }
  475 +
  476 + function activeLeftMenu(item) {
  477 + $(item).parent('.nav-item').addClass('active').parent('.sub-menu').show().parent().addClass('open');
  478 + setTitle(item);
  479 + }
  480 +
  481 + function setTitle(menuItem){
  482 + document.title = $('span.title', menuItem).text();
  483 + }
  484 +
449 485 </script>
450 486 <!-- d3 -->
451 487 <script src="/assets/js/d3.min.js" data-exclude=1></script>
... ... @@ -478,8 +514,10 @@ $(function(){
478 514 <!-- 百度 -->
479 515 <script src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT" data-exclude=1></script>
480 516 <script src="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js" data-exclude=1></script>
481   -<script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js" data-exclude=1></script>
482   -<script type="text/javascript" src="http://api.map.baidu.com/library/RichMarker/1.2/src/RichMarker_min.js " data-exclude=1></script>
  517 +<script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"
  518 + data-exclude=1></script>
  519 +<script type="text/javascript" src="http://api.map.baidu.com/library/RichMarker/1.2/src/RichMarker_min.js "
  520 + data-exclude=1></script>
483 521 <script src="/assets/js/baidu/TextIconOverlay.js" data-exclude=1></script>
484 522 <script src="/assets/js/baidu//MarkerClusterer.js" data-exclude=1></script>
485 523 <!-- 高德 -->
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/add_temp_sch.html
... ... @@ -13,7 +13,8 @@
13 13 <div class="uk-form-row">
14 14 <label class="uk-form-label">班次类型</label>
15 15 <div class="uk-form-controls">
16   - <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}" data-group=ScheduleType></select>
  16 + <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}"
  17 + data-group=ScheduleType></select>
17 18 </div>
18 19 </div>
19 20 </div>
... ... @@ -22,8 +23,8 @@
22 23 <label class="uk-form-label">上下行</label>
23 24 <div class="uk-form-controls">
24 25 <select name="xlDir">
25   - <option value="0">上行</option>
26   - <option value="1">下行</option>
  26 + <option value="0">上行</option>
  27 + <option value="1">下行</option>
27 28 </select>
28 29 </div>
29 30 </div>
... ... @@ -35,7 +36,7 @@
35 36 <label class="uk-form-label">起点站</label>
36 37 <div class="uk-form-controls">
37 38 <select name="qdzCode" required>
38   - </select>
  39 + </select>
39 40 </div>
40 41 </div>
41 42 </div>
... ... @@ -44,7 +45,7 @@
44 45 <label class="uk-form-label">终点站</label>
45 46 <div class="uk-form-controls">
46 47 <select name="zdzCode" required>
47   - </select>
  48 + </select>
48 49 </div>
49 50 </div>
50 51 </div>
... ... @@ -82,7 +83,8 @@
82 83 <div class="uk-form-row">
83 84 <label class="uk-form-label">里程</label>
84 85 <div class="uk-form-controls">
85   - <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false" required>
  86 + <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false"
  87 + required>
86 88 </div>
87 89 </div>
88 90 </div>
... ... @@ -90,7 +92,8 @@
90 92 <div class="uk-grid">
91 93 <div class="uk-width-1-2">
92 94 <div class="uk-form-row">
93   - <label class="uk-form-label">驾驶员 <!--<i class="uk-icon-question-circle" data-uk-tooltip title="如果有驾驶员未提示,请至后台“基础信息 -人员信息”里纠正该员工的“工种”类别 "></i>--></label>
  95 + <label class="uk-form-label">驾驶员
  96 + <!--<i class="uk-icon-question-circle" data-uk-tooltip title="如果有驾驶员未提示,请至后台“基础信息 -人员信息”里纠正该员工的“工种”类别 "></i>--></label>
94 97 <div class="uk-form-controls">
95 98 <div class="uk-autocomplete uk-form jsy-autocom">
96 99 <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required>
... ... @@ -116,101 +119,139 @@
116 119 </script>
117 120  
118 121 <script>
119   - (function() {
  122 + (function () {
120 123 var modal = '#schedule-addsch-modal',
121   - sch, stationRoutes, parks, information;
122   - $(modal).on('init', function(e, data) {
  124 + sch, stationRoutes, parks, information;
  125 +
  126 + var normalInfo = [];
  127 + $(modal).on('init', function (e, data) {
123 128 sch = data.sch;
  129 + //normal 班次里程和耗时
  130 + var list = gb_common.get_vals(gb_schedule_table.findScheduleByLine(sch.xlBm));
  131 + var upPlan = getNormalSch(list, 0)
  132 + , downPlan = getNormalSch(list, 1);
  133 + normalInfo[0] = {time: upPlan.bcsj, mileage: upPlan.jhlc};
  134 + normalInfo[1] = {time: downPlan.bcsj, mileage: downPlan.jhlc};
  135 +
  136 +
124 137 var formHtml = template('schedule-addsch-form-temp', sch);
125 138 $('form', modal).html(formHtml);
126 139 //字典转换
127 140 dictionaryUtils.transformDom($('.nt-dictionary', modal));
128 141  
129 142 //----------- Autocomplete --------------
130   - $.get('/basic/cars', function(rs) {
  143 + $.get('/basic/cars', function (rs) {
131 144 //车辆
132 145 gb_common.carAutocomplete($('.car-autocom', modal), rs);
133 146 });
134   - //$.get('/basic/all_personnel', function(rs) {
135   - //驾驶员
136   - gb_common.personAutocomplete($('.jsy-autocom', modal));
137   - //售票员
138   - gb_common.personAutocomplete($('.spy-autocom', modal));
139   - //});
  147 + //驾驶员
  148 + gb_common.personAutocomplete($('.jsy-autocom', modal));
  149 +
  150 + //售票员
  151 + gb_common.personAutocomplete($('.spy-autocom', modal));
140 152  
141 153 //站点路由
142   - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function(a, b){
143   - return a.stationRouteCode-b.stationRouteCode;
  154 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  155 + return a.stationRouteCode - b.stationRouteCode;
144 156 }), 'directions');
145 157 //停车场
146   - $.get('/basic/parks', function(rs){
147   - parks=rs;
  158 + $.get('/basic/parks', function (rs) {
  159 + parks = rs;
148 160 });
149 161 //线路标准
150   - information=gb_data_basic.getLineInformation(sch.xlBm);
  162 + information = gb_data_basic.getLineInformation(sch.xlBm);
151 163  
152 164 //submit
153 165 var f = $('form', modal).formValidation(gb_form_validation_opts);
154   - f.on('success.form.fv', function(e) {
  166 + f.on('success.form.fv', function (e) {
155 167 disabled_submit_btn(this);
156 168 e.preventDefault();
157 169 var data = $(this).serializeJSON();
158   - data.xlBm=sch.xlBm;
159   - data.xlName=sch.xlName;
160   - data.lpName=sch.lpName;
  170 + data.xlBm = sch.xlBm;
  171 + data.xlName = sch.xlName;
  172 + data.lpName = sch.lpName;
161 173 //拆分驾驶员工号和姓名
162 174 data.jGh = data.jsy.split('/')[0];
163 175 data.jName = data.jsy.split('/')[1];
164 176 delete data.jsy;
165 177 //拆分售票员工号和姓名
166   - if(data.sGh != null){
167   - data.sGh = data.spy.split('/')[0];
168   - data.sName = data.spy.split('/')[1];
169   - delete data.spy;
  178 + if (data.sGh != null) {
  179 + data.sGh = data.spy.split('/')[0];
  180 + data.sName = data.spy.split('/')[1];
  181 + delete data.spy;
170 182 }
171 183  
172   - gb_common.$post('/realSchedule', data, function(rs){
173   - //插入
174   - gb_schedule_table.insertSchedule(rs.t, rs.ts);
175   - $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: rs.t});
176   - UIkit.modal(modal).hide();
177   - notify_succ('新增临加班次成功');
  184 + gb_common.$post('/realSchedule', data, function (rs) {
  185 + //插入
  186 + gb_schedule_table.insertSchedule(rs.t, rs.ts);
  187 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: rs.t});
  188 + UIkit.modal(modal).hide();
  189 + notify_succ('新增临加班次成功');
178 190 });
179 191 });
180 192  
181 193 //班次类型 和 上下行切换
182   - $('[name=bcType],[name=xlDir]', f).on('change', function(){
183   - var bcType_e=$('[name=bcType]', f)
184   - , xlDir_e=$('[name=xlDir]', f);
185   -
186   - var routes=stationRoutes[xlDir_e.val()]
187   - ,lastCode=routes[routes.length-1].stationCode
188   - ,opts='',park_opts='';
189   - //station options
190   - $.each(routes, function(){
191   - opts+='<option value="'+this.stationCode+'">'+this.stationName+'</option>'
192   - });
193   - //park options
194   - for(var code in parks)
195   - park_opts+='<option value="'+code+'">'+parks[code]+'</option>';
196   -
197   - var qdz=$('[name=qdzCode]', f),zdz=$('[name=zdzCode]', f);
198   - switch (bcType_e.val()) {
199   - case 'out':
200   - qdz.html(park_opts).val(information.carPark);
201   - zdz.html(opts);
202   - break;
203   - case 'in':
204   - qdz.html(opts);
205   - zdz.html(park_opts).val(information.carPark);
206   - break;
207   - default:
208   - qdz.html(opts);
209   - zdz.html(opts).val(lastCode);
210   - }
  194 + $('[name=bcType],[name=xlDir]', f).on('change', function () {
  195 + var bcType_e = $('[name=bcType]', f)
  196 + , xlDir_e = $('[name=xlDir]', f);
  197 +
  198 + var routes = stationRoutes[xlDir_e.val()]
  199 + , lastCode = routes[routes.length - 1].stationCode
  200 + , opts = '', park_opts = '';
  201 + //station options
  202 + $.each(routes, function () {
  203 + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
  204 + });
  205 + //park options
  206 + for (var code in parks)
  207 + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';
  208 +
  209 + var qdz = $('[name=qdzCode]', f), zdz = $('[name=zdzCode]', f);
  210 + var time, mileage;
  211 + switch (bcType_e.val()) {
  212 + case 'out':
  213 + qdz.html(park_opts).val(information.carPark);
  214 + zdz.html(opts);
  215 + //出场结束时间
  216 + time = xlDir_e.val() == 0 ? information.upOutTimer : information.downOutTimer;
  217 + mileage = xlDir_e.val() == 0 ? information.upOutMileage : information.downOutMileage;
  218 + break;
  219 + case 'in':
  220 + qdz.html(opts);
  221 + zdz.html(park_opts).val(information.carPark);
  222 + //进场结束时间
  223 + time = xlDir_e.val() == 0 ? information.upInTimer : information.downInTimer;
  224 + mileage = xlDir_e.val() == 0 ? information.upInMileage : information.downInMileage;
  225 + break;
  226 + default:
  227 + qdz.html(opts);
  228 + zdz.html(opts).val(lastCode);
  229 + time = xlDir_e.val() == 0?normalInfo[0].time:normalInfo[1].time;
  230 + mileage = xlDir_e.val() == 0?normalInfo[0].mileage:normalInfo[1].mileage;
  231 + }
  232 +
  233 + setEndTime(time);
  234 + $('[name=jhlc]', f).val(mileage);
211 235 }).trigger('change');
212 236  
  237 +
  238 + function setEndTime(diff) {
  239 + var et = moment($('[name=fcsj]', f).val(), 'HH:mm').add(diff, 'minutes').format('HH:mm');
  240 + $('[name=zdsj]', f).val(et);
  241 + }
213 242 });
  243 +
  244 + function getNormalSch(list, updown) {
  245 + var sch;
  246 + $.each(list, function () {
  247 + if (this.bcType == 'normal' && this.xlDir == updown) {
  248 + sch = this;
  249 + return false;
  250 + }
  251 + });
  252 +
  253 + return sch;
  254 + }
214 255 })();
215 256 </script>
216 257 </div>
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
... ... @@ -28,7 +28,7 @@
28 28 <!--<i class="uk-icon-plus add-temp-sch-icon" title="新增临加班次" data-uk-tooltip></i>-->
29 29 <!--<button class="uk-button uk-button-primary add-temp-sch-icon">临加班次</button>-->
30 30 <!--<a class="uk-button add-temp-sch-icon"><i class="uk-icon-plus"></i> 临加班次</a>-->
31   - <a class="uk-button uk-button-link add-temp-sch-icon" > 临加班次</a>
  31 + <a class="uk-button uk-button-link add-temp-sch-icon"> 临加班次</a>
32 32 </div>
33 33 </div>
34 34 </div>
... ... @@ -152,6 +152,7 @@
152 152 s_t_body = '.sub-task-table .ct_table_body',
153 153 folder = '/real_control_v2/fragments/line_schedule/context_menu',
154 154 sch, schList, lp2SchMap;
  155 +
155 156 $(modal).on('init', function (e, data) {
156 157 sch = data.sch;
157 158  
... ... @@ -175,10 +176,16 @@
175 176  
176 177 //路牌下拉框
177 178 $('[name=lpName]', f).on('change', function () {
178   - var list = lp2SchMap[$(this).val()].sort(gb_schedule_table.schedule_sort),
179   - htmlBody = template('schedule-main-table-temp', {
180   - list: list
181   - });
  179 + var list = [];
  180 +
  181 + try {
  182 + list = lp2SchMap[$(this).val()].sort(gb_schedule_table.schedule_sort);
  183 +
  184 + } catch (e) {
  185 + }
  186 + var htmlBody = template('schedule-main-table-temp', {
  187 + list: list
  188 + });
182 189 $(m_t_body, modal).html(htmlBody);
183 190 $(s_t_body, modal).empty();
184 191 });
... ... @@ -246,20 +253,20 @@
246 253 //检查子任务营运里程
247 254 $('#childTaskTitle .child-task-status', modal).remove();
248 255 var i = 0;
249   - if(sch.cTasks.length == 0)
  256 + if (sch.cTasks.length == 0)
250 257 return;
251   - var sum=0, calcs='';
  258 + var sum = 0, calcs = '';
252 259 $.each(sch.cTasks, function () {
253   - if(this.mileageType=='service'){
  260 + if (this.mileageType == 'service') {
254 261 sum = gb_common.accAdd(sum, this.mileage);
255 262 calcs += (' + ' + this.mileage);
256   - i ++;
  263 + i++;
257 264 }
258 265 });
259 266 //公里与主任务不符合
260   - if(sum != sch.jhlc){
261   - if(i > 1)
262   - calcs += ('='+sum);
  267 + if (sum != sch.jhlc) {
  268 + if (i > 1)
  269 + calcs += ('=' + sum);
263 270 calcs += (' ≠ ' + sch.jhlc);
264 271 calcs = calcs.substr(3);
265 272 var htmlStr = template('sub_task-fail-status-temp', {calcs: calcs});
... ... @@ -289,7 +296,6 @@
289 296 //前端数据更新
290 297 gb_schedule_table.updateSchedule(rs.ts);
291 298 gb_schedule_table.deheteSchedule(rs.delete);
292   - //m_s_table_update();
293 299 $('.main-schedule-table', modal).trigger('refresh');
294 300 });
295 301 }, '确定删除');
... ... @@ -394,6 +400,21 @@
394 400 gb_ct_table.fixedHead($('.ct_table_wrap', modal));
395 401  
396 402 $('.add-temp-sch-icon', modal).on('click', add_temp_sch);
  403 + //临加路牌
  404 + $('.add-temp-lp-icon', modal).on('click', function () {
  405 + var index = 0, max;
  406 + for (var lp in lp2SchMap) {
  407 + if (lp.indexOf('临') != -1) {
  408 + max = lp.substr(lp.indexOf('临') + 1);
  409 + if (!isNaN(max))
  410 + index = parseInt(max);
  411 + }
  412 + }
  413 +
  414 + var lpName = '临' + (index + 1);
  415 + lp2SchMap[lpName] = [];
  416 + $('[name=lpName]', f).append('<option value="' + lpName + '">' + lpName + '</option>').val(lpName).trigger('change');
  417 + });
397 418  
398 419 function sub_task_sort(a, b) {
399 420 return a.id - b.id;
... ...
src/main/resources/static/real_control_v2/js/data/data_gps.js
... ... @@ -3,7 +3,7 @@
3 3 var gb_data_gps = (function() {
4 4  
5 5 //fixed time refresh delay
6   - var delay = 1000 * 60;
  6 + var delay = 1000 * 6;
7 7 //deviceId ——> gps
8 8 var realData = {};
9 9 //refresh after callback
... ...
src/main/resources/static/real_control_v2/js/line_schedule/context_menu.js
1 1 /* line schedule table context menu*/
2 2  
3   -var gb_schedule_context_menu = (function() {
  3 +var gb_schedule_context_menu = (function () {
4 4  
5 5 var modal_opts = {
6 6 center: false,
... ... @@ -8,35 +8,38 @@ var gb_schedule_context_menu = (function() {
8 8 },
9 9 folder = '/real_control_v2/fragments/line_schedule/context_menu';
10 10 var callbackHandler = {
11   - dftz: function(sch) {
  11 + dftz: function (sch) {
12 12 open_modal(folder + '/dftz.html', {
13 13 sch: sch
14 14 }, modal_opts);
15 15 },
16   - multi_tzrc: function(schArray) {
  16 + multi_tzrc: function (schArray) {
17 17 open_modal(folder + '/multi_tzrc.html', {
18 18 list: schArray
19 19 }, modal_opts);
20 20 },
21   - multi_dftz: function(schArray) {
  21 + multi_dftz: function (schArray) {
  22 + var list = schArray.filter(function (sch) {
  23 + return sch.bcType != 'out' && sch.bcType != 'in' && sch.fcsjActual == null;
  24 + });
22 25 open_modal(folder + '/multi_dftz.html', {
23   - list: schArray
  26 + list: list
24 27 }, modal_opts);
25 28 },
26   - jhlb: function(sch) {
  29 + jhlb: function (sch) {
27 30 open_modal(folder + '/jhlb.html', {
28 31 sch: sch
29 32 }, modal_opts);
30 33 },
31   - cxlb: function(sch) {
  34 + cxlb: function (sch) {
32 35 if (!sch.destroy)
33 36 return notify_err('烂掉的班次才能执行此操作!');
34 37  
35 38 var content = '<h3>确定要撤销<span style="color:red;margin: 0 5px;">' + sch.clZbh + '( ' + sch.dfsj + ' )</span>的烂班设置?</h3>'
36   - alt_confirm(content, function() {
  39 + alt_confirm(content, function () {
37 40 gb_common.$post('/realSchedule/revokeDestroy', {
38 41 id: sch.id
39   - }, function(rs) {
  42 + }, function (rs) {
40 43 gb_schedule_table.updateSchedule(rs.t);
41 44 notify_succ('撤销烂班操作成功!');
42 45  
... ... @@ -45,20 +48,20 @@ var gb_schedule_context_menu = (function() {
45 48 });
46 49 }, '确认撤销');
47 50 },
48   - sftz: function(sch) {
  51 + sftz: function (sch) {
49 52 open_modal(folder + '/sftz.html', {
50 53 sch: sch
51 54 }, modal_opts);
52 55 },
53   - cxsf: function(sch) {
  56 + cxsf: function (sch) {
54 57 if (!sch.fcsjActual)
55 58 return notify_err('车辆未实发,无法执行该操作!');
56 59  
57 60 var content = '<h3>确定要撤销<span style="color:red;margin: 0 5px;">' + sch.clZbh + '( ' + sch.dfsj + ' )</span>的实发时间?</h3>'
58   - alt_confirm(content, function() {
  61 + alt_confirm(content, function () {
59 62 gb_common.$post('/realSchedule/revokeRealOutgo', {
60 63 id: sch.id
61   - }, function(rs) {
  64 + }, function (rs) {
62 65 gb_schedule_table.updateSchedule(rs.ts);
63 66 notify_succ('撤销实发操作成功!');
64 67 //calc 应发未发
... ... @@ -66,27 +69,27 @@ var gb_schedule_context_menu = (function() {
66 69 });
67 70 }, '确认撤销实发');
68 71 },
69   - fcxxwt: function(sch) {
  72 + fcxxwt: function (sch) {
70 73 open_modal(folder + '/fcxxwt.html', {
71 74 sch: sch
72 75 }, modal_opts);
73 76 },
74   - lj_zrw: function(sch) {
  77 + lj_zrw: function (sch) {
75 78 open_modal(folder + '/lj_zrw.html', {
76 79 sch: sch
77 80 }, modal_opts);
78 81 },
79   - tzrc: function(sch) {
  82 + tzrc: function (sch) {
80 83 open_modal(folder + '/tzrc.html', {
81 84 sch: sch
82 85 }, modal_opts);
83 86 },
84   - zlcf: function(sch) {
  87 + zlcf: function (sch) {
85 88 var text = sch.clZbh + '重发调度指令? [路牌: ' + sch.lpName + ' 计划时间:' + sch.fcsj + ' 待发时间:' + sch.dfsj + ']';
86   - alt_confirm(text, function() {
  89 + alt_confirm(text, function () {
87 90 //走短语下发
88 91 $.post('/directive/dispatch', {id: sch.id},
89   - function(code) {
  92 + function (code) {
90 93 if (code == 0)
91 94 notify_succ('发送指令成功');
92 95 else
... ... @@ -95,12 +98,12 @@ var gb_schedule_context_menu = (function() {
95 98 }, '确定下发指令');
96 99 },
97 100 jgtz: function (schArray) {
98   - var idArr=[];
99   - $.each(schArray, function(){
100   - idArr.push(this.id);
  101 + var idArr = [];
  102 + $.each(schArray, function () {
  103 + idArr.push(this.id);
101 104 });
102   - var elem = UIkit.modal.prompt('请输入间隔(分钟)',0, function(newValue) {
103   - if (!isNaN(newValue) && newValue>0) {
  105 + var elem = UIkit.modal.prompt('请输入间隔(分钟)', 0, function (newValue) {
  106 + if (!isNaN(newValue) && newValue > 0) {
104 107 gb_common.$post_arr('/realSchedule/spaceAdjust', {ids: idArr, space: newValue}, function (rs) {
105 108 //刷新数据
106 109 gb_schedule_table.updateSchedule(rs.ts);
... ... @@ -120,7 +123,7 @@ var gb_schedule_context_menu = (function() {
120 123 $.contextMenu({
121 124 selector: '.line_schedule .ct_table_body dl:not([class="drag-active"])',
122 125 className: 'schedule-ct-menu',
123   - callback: function(key, options) {
  126 + callback: function (key, options) {
124 127 var $tbody = options.$trigger.parent(),
125 128 id = $('.context-menu-active', $tbody).data('id'),
126 129 lineCode = $tbody.parents('li.line_schedule').data('id'),
... ... @@ -166,13 +169,13 @@ var gb_schedule_context_menu = (function() {
166 169 $.contextMenu({
167 170 selector: '.line_schedule .ct_table_body dl.drag-active',
168 171 className: 'schedule-ct-menu',
169   - callback: function(key, options) {
  172 + callback: function (key, options) {
170 173 var $tbody = options.$trigger.parent(),
171 174 lineCode = $tbody.parents('li.line_schedule').data('id'),
172 175 schArray = [],
173 176 all = gb_schedule_table.findScheduleByLine(lineCode);
174 177  
175   - $tbody.find('dl.drag-active').each(function() {
  178 + $tbody.find('dl.drag-active').each(function () {
176 179 schArray.push(all[$(this).data('id')]);
177 180 });
178 181  
... ...
src/main/resources/static/real_control_v2/js/utils/svg_data_convert.js
... ... @@ -29,7 +29,7 @@ var gb_svg_data_convert = (function() {
29 29 var dIndex = station_indexof(down, upS, j);
30 30 if (dIndex == -1) {
31 31 op.type = 0;
32   - op.id = [upS.stationCode, -1];
  32 + op.id = [get_station_code(upS), -1];
33 33 //占位
34 34 down.splice(j, 0, {});
35 35 } else {
... ... @@ -38,7 +38,7 @@ var gb_svg_data_convert = (function() {
38 38 data.push({
39 39 name: [temp.stationName],
40 40 type: 1,
41   - id: [temp.stationCode]
  41 + id: [get_station_code(temp)]
42 42 });
43 43 }
44 44 //delete
... ...
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
... ... @@ -94,6 +94,7 @@ var gb_sch_websocket = (function () {
94 94 //到达终点
95 95 var zhongDian = function (msg) {
96 96 gb_schedule_table.updateSchedule(msg.t);
  97 + gb_schedule_table.updateSchedule(msg.nt);
97 98 msg.domId = 'zhongDian_' + msg.t.id + '_' + parseInt(Math.random() * 10000);
98 99  
99 100 var $item = $(temps['sys-note-42_1-temp'](msg));
... ...
src/main/resources/static/real_control_v2/mapmonitor/css/real.css
... ... @@ -96,7 +96,7 @@ input[type=checkbox].disabled{
96 96 .real_bottom_panel{
97 97  
98 98 position: absolute !important;
99   - height: 256px;
  99 + height: 192px;
100 100 bottom: 2px !important;
101 101 background: #fff;
102 102 box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
... ...