Commit 26f2a3923948e28486c7e9d2b684ecd202e868ae

Authored by 潘钊
1 parent d55360b1

update...

src/main/java/com/bsth/controller/realcontrol/summary/FastAndSlowController.java 0 → 100644
  1 +package com.bsth.controller.realcontrol.summary;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.data.summary.entity.FastAndSlow;
  5 +import org.springframework.web.bind.annotation.RequestMapping;
  6 +import org.springframework.web.bind.annotation.RestController;
  7 +
  8 +/**
  9 + * 快慢误点统计
  10 + * Created by panzhao on 2017/10/24.
  11 + */
  12 +@RestController
  13 +@RequestMapping("/summary/fastAndSlow")
  14 +public class FastAndSlowController extends BaseController<FastAndSlow, Long> {
  15 +}
... ...
src/main/java/com/bsth/data/summary/entity/FastAndSlow.java 0 → 100644
  1 +package com.bsth.data.summary.entity;
  2 +
  3 +import javax.persistence.Column;
  4 +import javax.persistence.Entity;
  5 +import javax.persistence.Id;
  6 +import javax.persistence.Table;
  7 +
  8 +/**
  9 + * 快慢误点
  10 + * Created by panzhao on 2017/10/24.
  11 + */
  12 +@Entity
  13 +@Table(name = "z_calc_fast_slow")
  14 +public class FastAndSlow {
  15 +
  16 + /**
  17 + * 班次ID
  18 + */
  19 + @Id
  20 + @Column(name = "s_id")
  21 + private Long id;
  22 +
  23 + /**
  24 + * 发车站点
  25 + */
  26 + private String stationName;
  27 +
  28 + /**
  29 + * 日期
  30 + */
  31 + @Column(name = "rq")
  32 + private String rq;
  33 +
  34 + /**
  35 + * 上下行
  36 + */
  37 + private int upDown;
  38 +
  39 + /**
  40 + * 计发时间
  41 + * HH:mm
  42 + */
  43 + private String fcsj;
  44 +
  45 + /**
  46 + * 待发时间
  47 + * HH:mm
  48 + */
  49 + private String dfsj;
  50 +
  51 + /**
  52 + * 实际发车时间
  53 + * HH:mm
  54 + */
  55 + private String fcsjActual;
  56 +
  57 + /**
  58 + * 计发快误点
  59 + */
  60 + private int fcsjFast;
  61 +
  62 + /**
  63 + * 计发慢误点
  64 + */
  65 + private int fcsjSlow;
  66 +
  67 + /**
  68 + * 待发快误点
  69 + */
  70 + private int dfsjFast;
  71 +
  72 + /**
  73 + * 待发慢误点
  74 + */
  75 + private int dfsjSlow;
  76 +
  77 + /**
  78 + * 计划终点时间
  79 + */
  80 + private String zdsj;
  81 +
  82 + /**
  83 + * 待发终点时间
  84 + */
  85 + private String zdsjDf;
  86 +
  87 + /**
  88 + * 实际终点时间
  89 + */
  90 + private String zdsjActual;
  91 +
  92 + /**
  93 + * 计发终点快误点
  94 + */
  95 + private int zdsjFast;
  96 +
  97 + /**
  98 + * 计发终点慢误点
  99 + */
  100 + private int zdsjSlow;
  101 +
  102 + /**
  103 + * 待发终点快误点
  104 + */
  105 + private int zdsjDfFast;
  106 +
  107 + /**
  108 + * 待发终点慢误点
  109 + */
  110 + private int zdsjDfSlow;
  111 +
  112 + @Column(name = "line_code")
  113 + private String lineCode;
  114 +
  115 + private Long t;
  116 +
  117 + public String getStationName() {
  118 + return stationName;
  119 + }
  120 +
  121 + public void setStationName(String stationName) {
  122 + this.stationName = stationName;
  123 + }
  124 +
  125 + public String getRq() {
  126 + return rq;
  127 + }
  128 +
  129 + public void setRq(String rq) {
  130 + this.rq = rq;
  131 + }
  132 +
  133 + public int getUpDown() {
  134 + return upDown;
  135 + }
  136 +
  137 + public void setUpDown(int upDown) {
  138 + this.upDown = upDown;
  139 + }
  140 +
  141 + public String getFcsj() {
  142 + return fcsj;
  143 + }
  144 +
  145 + public void setFcsj(String fcsj) {
  146 + this.fcsj = fcsj;
  147 + }
  148 +
  149 + public String getDfsj() {
  150 + return dfsj;
  151 + }
  152 +
  153 + public void setDfsj(String dfsj) {
  154 + this.dfsj = dfsj;
  155 + }
  156 +
  157 + public String getFcsjActual() {
  158 + return fcsjActual;
  159 + }
  160 +
  161 + public void setFcsjActual(String fcsjActual) {
  162 + this.fcsjActual = fcsjActual;
  163 + }
  164 +
  165 + public int getFcsjFast() {
  166 + return fcsjFast;
  167 + }
  168 +
  169 + public void setFcsjFast(int fcsjFast) {
  170 + this.fcsjFast = fcsjFast;
  171 + }
  172 +
  173 + public int getFcsjSlow() {
  174 + return fcsjSlow;
  175 + }
  176 +
  177 + public void setFcsjSlow(int fcsjSlow) {
  178 + this.fcsjSlow = fcsjSlow;
  179 + }
  180 +
  181 + public int getDfsjFast() {
  182 + return dfsjFast;
  183 + }
  184 +
  185 + public void setDfsjFast(int dfsjFast) {
  186 + this.dfsjFast = dfsjFast;
  187 + }
  188 +
  189 + public int getDfsjSlow() {
  190 + return dfsjSlow;
  191 + }
  192 +
  193 + public void setDfsjSlow(int dfsjSlow) {
  194 + this.dfsjSlow = dfsjSlow;
  195 + }
  196 +
  197 + public String getZdsj() {
  198 + return zdsj;
  199 + }
  200 +
  201 + public void setZdsj(String zdsj) {
  202 + this.zdsj = zdsj;
  203 + }
  204 +
  205 + public String getZdsjDf() {
  206 + return zdsjDf;
  207 + }
  208 +
  209 + public void setZdsjDf(String zdsjDf) {
  210 + this.zdsjDf = zdsjDf;
  211 + }
  212 +
  213 + public String getZdsjActual() {
  214 + return zdsjActual;
  215 + }
  216 +
  217 + public void setZdsjActual(String zdsjActual) {
  218 + this.zdsjActual = zdsjActual;
  219 + }
  220 +
  221 + public int getZdsjFast() {
  222 + return zdsjFast;
  223 + }
  224 +
  225 + public void setZdsjFast(int zdsjFast) {
  226 + this.zdsjFast = zdsjFast;
  227 + }
  228 +
  229 + public int getZdsjSlow() {
  230 + return zdsjSlow;
  231 + }
  232 +
  233 + public void setZdsjSlow(int zdsjSlow) {
  234 + this.zdsjSlow = zdsjSlow;
  235 + }
  236 +
  237 + public int getZdsjDfFast() {
  238 + return zdsjDfFast;
  239 + }
  240 +
  241 + public void setZdsjDfFast(int zdsjDfFast) {
  242 + this.zdsjDfFast = zdsjDfFast;
  243 + }
  244 +
  245 + public int getZdsjDfSlow() {
  246 + return zdsjDfSlow;
  247 + }
  248 +
  249 + public void setZdsjDfSlow(int zdsjDfSlow) {
  250 + this.zdsjDfSlow = zdsjDfSlow;
  251 + }
  252 +
  253 + public String getLineCode() {
  254 + return lineCode;
  255 + }
  256 +
  257 + public void setLineCode(String lineCode) {
  258 + this.lineCode = lineCode;
  259 + }
  260 +
  261 + public Long getId() {
  262 + return id;
  263 + }
  264 +
  265 + public void setId(Long id) {
  266 + this.id = id;
  267 + }
  268 +
  269 + public Long getT() {
  270 + return t;
  271 + }
  272 +
  273 + public void setT(Long t) {
  274 + this.t = t;
  275 + }
  276 +}
... ...
src/main/java/com/bsth/data/summary/repository/FastAndSlowRepository.java 0 → 100644
  1 +package com.bsth.data.summary.repository;
  2 +
  3 +import com.bsth.data.summary.entity.FastAndSlow;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +/**
  8 + * Created by panzhao on 2017/10/24.
  9 + */
  10 +@Repository
  11 +public interface FastAndSlowRepository extends BaseRepository<FastAndSlow, Long> {
  12 +}
... ...
src/main/java/com/bsth/data/summary/service/FastAndSlowService.java 0 → 100644
  1 +package com.bsth.data.summary.service;
  2 +
  3 +import com.bsth.data.summary.entity.FastAndSlow;
  4 +import com.bsth.service.BaseService;
  5 +
  6 +/**
  7 + * Created by panzhao on 2017/10/24.
  8 + */
  9 +public interface FastAndSlowService extends BaseService<FastAndSlow, Long>{
  10 +}
... ...
src/main/java/com/bsth/data/summary/service/impl/FastAndSlowServiceImpl.java 0 → 100644
  1 +package com.bsth.data.summary.service.impl;
  2 +
  3 +import com.bsth.data.summary.entity.FastAndSlow;
  4 +import com.bsth.data.summary.service.FastAndSlowService;
  5 +import com.bsth.service.impl.BaseServiceImpl;
  6 +import org.springframework.stereotype.Service;
  7 +
  8 +/**
  9 + * Created by panzhao on 2017/10/24.
  10 + */
  11 +@Service
  12 +public class FastAndSlowServiceImpl extends BaseServiceImpl<FastAndSlow, Long> implements FastAndSlowService {
  13 +}
... ...
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
... ... @@ -355,79 +355,84 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
355 355 @Override
356 356 public Map<String, Object> findDirective(String nbbm, int dType, int page, int size) {
357 357 Map<String, Object> rsMap = new HashMap<>();
358   - List<Directive> list = new ArrayList<>();
359   -
360   - switch (dType) {
361   - case -1:
362   - //所有指令
363   - list = new ArrayList<>(dayOfDirectives.all());
364   - break;
365   - case 0:
366   - //调度指令
367   - Collection<D60> dptArray = dayOfDirectives.all60();
368   - for (D60 d60 : dptArray) {
369   - if (d60.isDispatch())
370   - list.add(d60);
371   - }
372   - break;
373   - case 1:
374   - //运营指令
375   - Collection<D60> yyArray = dayOfDirectives.all60();
376   - for (D60 d60 : yyArray) {
377   - if (d60 != null && d60.getData().getDispatchInstruct() == (short) 0x03
378   - && !d60.isDispatch())
379   - list.add(d60);
380   - }
381   - break;
382   - case 2:
383   - //线路切换指令
384   - list.addAll(dayOfDirectives.all64());
385   - break;
386   - case 3:
387   - //消息短语
388   - Collection<D60> dyArray = dayOfDirectives.all60();
389   - for (D60 d60 : dyArray) {
390   - if (d60 != null && d60.getData().getDispatchInstruct() == (short) 0x00
391   - && !d60.isDispatch())
392   - list.add(d60);
393   - }
394   - break;
395   - }
  358 + try{
  359 + List<Directive> list = new ArrayList<>();
  360 +
  361 + switch (dType) {
  362 + case -1:
  363 + //所有指令
  364 + list = new ArrayList<>(dayOfDirectives.all());
  365 + break;
  366 + case 0:
  367 + //调度指令
  368 + Collection<D60> dptArray = dayOfDirectives.all60();
  369 + for (D60 d60 : dptArray) {
  370 + if (d60.isDispatch())
  371 + list.add(d60);
  372 + }
  373 + break;
  374 + case 1:
  375 + //运营指令
  376 + Collection<D60> yyArray = dayOfDirectives.all60();
  377 + for (D60 d60 : yyArray) {
  378 + if (d60 != null && d60.getData().getDispatchInstruct() == (short) 0x03
  379 + && !d60.isDispatch())
  380 + list.add(d60);
  381 + }
  382 + break;
  383 + case 2:
  384 + //线路切换指令
  385 + list.addAll(dayOfDirectives.all64());
  386 + break;
  387 + case 3:
  388 + //消息短语
  389 + Collection<D60> dyArray = dayOfDirectives.all60();
  390 + for (D60 d60 : dyArray) {
  391 + if (d60 != null && d60.getData().getDispatchInstruct() == (short) 0x00
  392 + && !d60.isDispatch())
  393 + list.add(d60);
  394 + }
  395 + break;
  396 + }
396 397  
397   - // 时间倒序
398   - Collections.sort(list, new DayOfDirectives.DComparator());
399   - if (StringUtils.isNotBlank(nbbm)) {
400   - String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);
401   - //按车辆过滤
402   - List<Directive> subList = new ArrayList<>();
403   - for (Directive d : list) {
404   - if (d.getDeviceId().equals(deviceId)) {
405   - subList.add(d);
  398 + // 时间倒序
  399 + Collections.sort(list, new DayOfDirectives.DComparator());
  400 + if (StringUtils.isNotBlank(nbbm)) {
  401 + String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);
  402 + //按车辆过滤
  403 + List<Directive> subList = new ArrayList<>();
  404 + for (Directive d : list) {
  405 + if (d.getDeviceId().equals(deviceId)) {
  406 + subList.add(d);
  407 + }
406 408 }
  409 + list = subList;
407 410 }
408   - list = subList;
409   - }
410 411  
411   - int count = list.size();
412   - // 分页
413   - int s = page * size, e = s + size;
  412 + int count = list.size();
  413 + // 分页
  414 + int s = page * size, e = s + size;
414 415  
415   - if (e > count)
416   - e = count;
  416 + if (e > count)
  417 + e = count;
417 418  
418   - List<Directive> rs = list.subList(s, e);
  419 + List<Directive> rs = list.subList(s, e);
419 420  
420   - // 时间格式化,车辆自编号转换
421   - for (Directive d : rs) {
422   - if (d.getTimeHHmm() == null)
423   - d.setTimeHHmm(fmtHHmm.print(d.getTimestamp()));
424   - if (d.getNbbm() == null)
425   - d.setNbbm(BasicData.deviceId2NbbmMap.get(d.getDeviceId()));
426   - }
  421 + // 时间格式化,车辆自编号转换
  422 + for (Directive d : rs) {
  423 + if (d.getTimeHHmm() == null)
  424 + d.setTimeHHmm(fmtHHmm.print(d.getTimestamp()));
  425 + if (d.getNbbm() == null)
  426 + d.setNbbm(BasicData.deviceId2NbbmMap.get(d.getDeviceId()));
  427 + }
427 428  
428   - rsMap.put("list", rs);
429   - rsMap.put("totalPages", count % size == 0 ? (count / size - 1) : count / size);
430   - rsMap.put("page", page);
  429 + rsMap.put("list", rs);
  430 + rsMap.put("totalPages", count % size == 0 ? (count / size - 1) : count / size);
  431 + rsMap.put("page", page);
  432 + }catch (Exception e){
  433 + logger.error("", e);
  434 + throw e;
  435 + }
431 436 return rsMap;
432 437 }
433 438  
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -246,7 +246,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
246 246  
247 247 schedule.setDfsjAll(dfsj);
248 248 schedule.setDfAuto(false);
249   - schedule.setRemarks(remarks);
  249 + if("1".equals(opType))
  250 + schedule.setRemarks(remarks);
250 251  
251 252 List<ScheduleRealInfo> ts = new ArrayList<>();
252 253 ts.add(schedule);
... ...
src/main/resources/static/pages/summary/fast_and_slow/data.html
1 1 <div class="ct_data_body_wrap">
2 2 <div class="uk-card uk-card-default uk-card-body ct_rq_left">
3   - <ul uk-scrollspy-nav="closest: li; scroll: true; " class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon">
4   - <li><a href="#table_20171010">2017-10-10</a></li>
5   - <li><a href="#table_20171011">2017-10-11</a></li>
6   - <li><a href="#table_20171012">2017-10-12</a></li>
7   - <li><a href="#table_20171013">2017-10-13</a></li>
8   - <li><a href="#table_20171014">2017-10-14</a></li>
9   - <li><a href="#table_20171015">2017-10-15</a></li>
10   - <li><a href="#table_20171016">2017-10-16</a></li>
11   - </ul>
  3 + <ul uk-scrollspy-nav="closest: li; scroll: true; " class="uk-nav uk-nav-default tm-nav uk-nav-parent-icon"></ul>
12 4 </div>
13 5  
14 6 <div class="uk-card uk-card-default uk-card-body ct_right_tables" >
  7 +
  8 + </div>
  9 +
  10 + <script id="fast_and_slow_left_rq_temp" type="text/html">
  11 + {{each listMap as obj k}}
  12 + <li><a href="#table_{{k}}">{{k}}</a></li>
  13 + {{/each}}
  14 + </script>
  15 +
  16 + <script id="fast_and_slow_right_body_temp" type="text/html">
15 17 <div>
16   - <h2 id="table_20171010">table_20171010</h2>
  18 + {{each listMap as obj k}}
  19 + <h2 id="table_{{k}}">{{k}}</h2>
17 20 <div class="data_table_wrap">
18 21 <table cellspacing="1" class="data_table">
19 22 <col />
... ... @@ -62,158 +65,27 @@
62 65 <td>快</td>
63 66 <td>慢</td>
64 67 </tr>
65   - <tr>
66   - <td>1</td>
67   - <td>金桥路锦绣东路</td>
68   - <td>上行</td>
69   - <td>07:20</td>
70   - <td>07:34</td>
71   - <td>07:40</td>
72   - <td></td>
73   - <td>20</td>
74   - <td></td>
75   - <td>6</td>
76   - <td>08:00</td>
77   - <td>08:10</td>
78   - <td>08:20</td>
79   - <td></td>
80   - <td>10</td>
81   - <td></td>
82   - <td>20</td>
83   - </tr>
84   - <tr>
85   - <td>2</td>
86   - <td>金桥路锦绣东路</td>
87   - <td>上行</td>
88   - <td>07:20</td>
89   - <td>07:34</td>
90   - <td>07:40</td>
91   - <td>20</td>
92   - <td></td>
93   - <td>6</td>
94   - <td></td>
95   - <td>08:00</td>
96   - <td>08:10</td>
97   - <td>08:20</td>
98   - <td>10</td>
99   - <td></td>
100   - <td>20</td>
101   - <td></td>
102   - </tr>
103   - <tr>
104   - <td>3</td>
105   - <td>金桥路浦东大道(庆宁寺)</td>
106   - <td>下行</td>
107   - <td>07:20</td>
108   - <td>07:34</td>
109   - <td>07:40</td>
110   - <td></td>
111   - <td>20</td>
112   - <td></td>
113   - <td>6</td>
114   - <td>08:00</td>
115   - <td>08:10</td>
116   - <td>08:20</td>
117   - <td></td>
118   - <td>10</td>
119   - <td></td>
120   - <td>20</td>
121   - </tr>
122   - <tr>
123   - <td>4</td>
124   - <td>金桥路锦绣东路</td>
125   - <td>上行</td>
126   - <td>07:20</td>
127   - <td>07:34</td>
128   - <td>07:40</td>
129   - <td>20</td>
130   - <td></td>
131   - <td>6</td>
132   - <td></td>
133   - <td>08:00</td>
134   - <td>08:10</td>
135   - <td>08:20</td>
136   - <td>10</td>
137   - <td></td>
138   - <td>20</td>
139   - <td></td>
140   - </tr>
141   - <tr>
142   - <td>5</td>
143   - <td>金桥路浦东大道(庆宁寺)</td>
144   - <td>下行</td>
145   - <td>07:20</td>
146   - <td>07:34</td>
147   - <td>07:40</td>
148   - <td></td>
149   - <td>20</td>
150   - <td></td>
151   - <td>6</td>
152   - <td>08:00</td>
153   - <td>08:10</td>
154   - <td>08:20</td>
155   - <td></td>
156   - <td>10</td>
157   - <td></td>
158   - <td>20</td>
159   - </tr>
160   - <tr>
161   - <td>6</td>
162   - <td>金桥路锦绣东路</td>
163   - <td>上行</td>
164   - <td>07:20</td>
165   - <td>07:34</td>
166   - <td>07:40</td>
167   - <td>20</td>
168   - <td></td>
169   - <td>6</td>
170   - <td></td>
171   - <td>08:00</td>
172   - <td>08:10</td>
173   - <td>08:20</td>
174   - <td>10</td>
175   - <td></td>
176   - <td>20</td>
177   - <td></td>
178   - </tr>
179   - <tr>
180   - <td>7</td>
181   - <td>金桥路浦东大道(庆宁寺)</td>
182   - <td>下行</td>
183   - <td>07:20</td>
184   - <td>07:34</td>
185   - <td>07:40</td>
186   - <td></td>
187   - <td>20</td>
188   - <td></td>
189   - <td>6</td>
190   - <td>08:00</td>
191   - <td>08:10</td>
192   - <td>08:20</td>
193   - <td></td>
194   - <td>10</td>
195   - <td></td>
196   - <td>20</td>
197   - </tr>
198   - <tr>
199   - <td>8</td>
200   - <td>金桥路浦东大道(庆宁寺)</td>
201   - <td>下行</td>
202   - <td>07:20</td>
203   - <td>07:34</td>
204   - <td>07:40</td>
205   - <td>20</td>
206   - <td></td>
207   - <td>6</td>
208   - <td></td>
209   - <td>08:00</td>
210   - <td>08:10</td>
211   - <td>08:20</td>
212   - <td>10</td>
213   - <td></td>
214   - <td>20</td>
215   - <td></td>
216   - </tr>
  68 + {{each listMap[k] as obj i}}
  69 + <tr>
  70 + <td>{{i+1}}</td>
  71 + <td>{{obj.stationName}}</td>
  72 + <td>{{obj.upDown==0?"上行":"下行"}}</td>
  73 + <td>{{obj.fcsj}}</td>
  74 + <td>{{obj.dfsj}}</td>
  75 + <td>{{obj.fcsjActual}}</td>
  76 + <td>{{obj.fcsjFast}}</td>
  77 + <td>{{obj.fcsjSlow}}</td>
  78 + <td>{{obj.dfsjFast}}</td>
  79 + <td>{{obj.dfsjSlow}}</td>
  80 + <td>{{obj.zdsj}}</td>
  81 + <td>{{obj.zdsjDf}}</td>
  82 + <td>{{obj.zdsjActual}}</td>
  83 + <td>{{obj.zdsjFast}}</td>
  84 + <td>{{obj.zdsjSlow}}</td>
  85 + <td>{{obj.zdsjDfFast}}</td>
  86 + <td>{{obj.zdsjDfSlow}}</td>
  87 + </tr>
  88 + {{/each}}
217 89 <tr>
218 90 <td rowspan="2">合计:</td>
219 91 <td colspan="8" class="count_col">上行(计划快误点:12 累计时间:50 待发快误点:15 累计时间:70)</td>
... ... @@ -226,442 +98,22 @@
226 98 </table>
227 99 </div>
228 100 <br>
229   - <h2 id="table_20171011">table_20171011</h2>
230   - <div class="data_table_wrap">
231   - <table cellspacing="1" class="data_table">
232   - <col />
233   - <col width="14%"/>
234   - <col width="4%"/>
235   - <col width="6%"/>
236   - <col width="6%"/>
237   - <col width="6%"/>
238   - <col width="5%"/>
239   - <col width="5%"/>
240   - <col width="5%"/>
241   - <col width="5%"/>
242   - <col width="6%"/>
243   - <col width="6%"/>
244   - <col width="6%"/>
245   - <col width="5%"/>
246   - <col width="5%"/>
247   - <col width="5%"/>
248   - <col width="5%"/>
249   - <tr>
250   - <td rowspan="3">序号</td>
251   - <td rowspan="3">发车站点</td>
252   - <td rowspan="3">方向</td>
253   - <td colspan="7">发车时间</td>
254   - <td colspan="7">到达时间</td>
255   - </tr>
256   - <tr>
257   - <td rowspan="2">计划发车<br>时间</td>
258   - <td rowspan="2">待发发车<br>时间</td>
259   - <td rowspan="2">实际发车<br>时间</td>
260   - <td colspan="2">计划</td>
261   - <td colspan="2">待发</td>
262   - <td rowspan="2">计划应到<br>时间</td>
263   - <td rowspan="2">待发应到<br>时间</td>
264   - <td rowspan="2">实际到达<br>时间</td>
265   - <td colspan="2">计划</td>
266   - <td colspan="2">待发</td>
267   - </tr>
268   - <tr>
269   - <td>快</td>
270   - <td>慢</td>
271   - <td>快</td>
272   - <td>慢</td>
273   - <td>快</td>
274   - <td>慢</td>
275   - <td>快</td>
276   - <td>慢</td>
277   - </tr>
278   - <tr>
279   - <td>1</td>
280   - <td>金桥路锦绣东路</td>
281   - <td>上行</td>
282   - <td>07:20</td>
283   - <td>07:34</td>
284   - <td>07:40</td>
285   - <td></td>
286   - <td>20</td>
287   - <td></td>
288   - <td>6</td>
289   - <td>08:00</td>
290   - <td>08:10</td>
291   - <td>08:20</td>
292   - <td></td>
293   - <td>10</td>
294   - <td></td>
295   - <td>20</td>
296   - </tr>
297   - <tr>
298   - <td>2</td>
299   - <td>金桥路锦绣东路</td>
300   - <td>上行</td>
301   - <td>07:20</td>
302   - <td>07:34</td>
303   - <td>07:40</td>
304   - <td>20</td>
305   - <td></td>
306   - <td>6</td>
307   - <td></td>
308   - <td>08:00</td>
309   - <td>08:10</td>
310   - <td>08:20</td>
311   - <td>10</td>
312   - <td></td>
313   - <td>20</td>
314   - <td></td>
315   - </tr>
316   - <tr>
317   - <td>3</td>
318   - <td>金桥路浦东大道(庆宁寺)</td>
319   - <td>下行</td>
320   - <td>07:20</td>
321   - <td>07:34</td>
322   - <td>07:40</td>
323   - <td></td>
324   - <td>20</td>
325   - <td></td>
326   - <td>6</td>
327   - <td>08:00</td>
328   - <td>08:10</td>
329   - <td>08:20</td>
330   - <td></td>
331   - <td>10</td>
332   - <td></td>
333   - <td>20</td>
334   - </tr>
335   - <tr>
336   - <td>4</td>
337   - <td>金桥路锦绣东路</td>
338   - <td>上行</td>
339   - <td>07:20</td>
340   - <td>07:34</td>
341   - <td>07:40</td>
342   - <td>20</td>
343   - <td></td>
344   - <td>6</td>
345   - <td></td>
346   - <td>08:00</td>
347   - <td>08:10</td>
348   - <td>08:20</td>
349   - <td>10</td>
350   - <td></td>
351   - <td>20</td>
352   - <td></td>
353   - </tr>
354   - <tr>
355   - <td>5</td>
356   - <td>金桥路浦东大道(庆宁寺)</td>
357   - <td>下行</td>
358   - <td>07:20</td>
359   - <td>07:34</td>
360   - <td>07:40</td>
361   - <td></td>
362   - <td>20</td>
363   - <td></td>
364   - <td>6</td>
365   - <td>08:00</td>
366   - <td>08:10</td>
367   - <td>08:20</td>
368   - <td></td>
369   - <td>10</td>
370   - <td></td>
371   - <td>20</td>
372   - </tr>
373   - <tr>
374   - <td>6</td>
375   - <td>金桥路锦绣东路</td>
376   - <td>上行</td>
377   - <td>07:20</td>
378   - <td>07:34</td>
379   - <td>07:40</td>
380   - <td>20</td>
381   - <td></td>
382   - <td>6</td>
383   - <td></td>
384   - <td>08:00</td>
385   - <td>08:10</td>
386   - <td>08:20</td>
387   - <td>10</td>
388   - <td></td>
389   - <td>20</td>
390   - <td></td>
391   - </tr>
392   - <tr>
393   - <td>7</td>
394   - <td>金桥路浦东大道(庆宁寺)</td>
395   - <td>下行</td>
396   - <td>07:20</td>
397   - <td>07:34</td>
398   - <td>07:40</td>
399   - <td></td>
400   - <td>20</td>
401   - <td></td>
402   - <td>6</td>
403   - <td>08:00</td>
404   - <td>08:10</td>
405   - <td>08:20</td>
406   - <td></td>
407   - <td>10</td>
408   - <td></td>
409   - <td>20</td>
410   - </tr>
411   - <tr>
412   - <td>8</td>
413   - <td>金桥路浦东大道(庆宁寺)</td>
414   - <td>下行</td>
415   - <td>07:20</td>
416   - <td>07:34</td>
417   - <td>07:40</td>
418   - <td>20</td>
419   - <td></td>
420   - <td>6</td>
421   - <td></td>
422   - <td>08:00</td>
423   - <td>08:10</td>
424   - <td>08:20</td>
425   - <td>10</td>
426   - <td></td>
427   - <td>20</td>
428   - <td></td>
429   - </tr>
430   - <tr>
431   - <td rowspan="2">合计:</td>
432   - <td colspan="8" class="count_col">上行(计划快误点:12 累计时间:50 待发快误点:15 累计时间:70)</td>
433   - <td colspan="8" class="count_col">下行(计划快误点:12 累计时间:50 待发快误点:15 累计时间:70)</td>
434   - </tr>
435   - <tr>
436   - <td colspan="8" class="count_col">上行(计划快误点:12 累计时间:50 待发快误点:15 累计时间:70)</td>
437   - <td colspan="8" class="count_col">下行(计划快误点:12 累计时间:50 待发快误点:15 累计时间:70)</td>
438   - </tr>
439   - </table>
440   - </div>
441   - <br>
442   - <h2 id="table_20171012">table_20171012</h2>
443   - <div class="data_table_wrap">
444   - <table cellspacing="1" class="data_table">
445   - <col />
446   - <col width="14%"/>
447   - <col width="4%"/>
448   - <col width="6%"/>
449   - <col width="6%"/>
450   - <col width="6%"/>
451   - <col width="5%"/>
452   - <col width="5%"/>
453   - <col width="5%"/>
454   - <col width="5%"/>
455   - <col width="6%"/>
456   - <col width="6%"/>
457   - <col width="6%"/>
458   - <col width="5%"/>
459   - <col width="5%"/>
460   - <col width="5%"/>
461   - <col width="5%"/>
462   - <tr>
463   - <td rowspan="3">序号</td>
464   - <td rowspan="3">发车站点</td>
465   - <td rowspan="3">方向</td>
466   - <td colspan="7">发车时间</td>
467   - <td colspan="7">到达时间</td>
468   - </tr>
469   - <tr>
470   - <td rowspan="2">计划发车<br>时间</td>
471   - <td rowspan="2">待发发车<br>时间</td>
472   - <td rowspan="2">实际发车<br>时间</td>
473   - <td colspan="2">计划</td>
474   - <td colspan="2">待发</td>
475   - <td rowspan="2">计划应到<br>时间</td>
476   - <td rowspan="2">待发应到<br>时间</td>
477   - <td rowspan="2">实际到达<br>时间</td>
478   - <td colspan="2">计划</td>
479   - <td colspan="2">待发</td>
480   - </tr>
481   - <tr>
482   - <td>快</td>
483   - <td>慢</td>
484   - <td>快</td>
485   - <td>慢</td>
486   - <td>快</td>
487   - <td>慢</td>
488   - <td>快</td>
489   - <td>慢</td>
490   - </tr>
491   - <tr>
492   - <td>1</td>
493   - <td>金桥路锦绣东路</td>
494   - <td>上行</td>
495   - <td>07:20</td>
496   - <td>07:34</td>
497   - <td>07:40</td>
498   - <td></td>
499   - <td>20</td>
500   - <td></td>
501   - <td>6</td>
502   - <td>08:00</td>
503   - <td>08:10</td>
504   - <td>08:20</td>
505   - <td></td>
506   - <td>10</td>
507   - <td></td>
508   - <td>20</td>
509   - </tr>
510   - <tr>
511   - <td>2</td>
512   - <td>金桥路锦绣东路</td>
513   - <td>上行</td>
514   - <td>07:20</td>
515   - <td>07:34</td>
516   - <td>07:40</td>
517   - <td>20</td>
518   - <td></td>
519   - <td>6</td>
520   - <td></td>
521   - <td>08:00</td>
522   - <td>08:10</td>
523   - <td>08:20</td>
524   - <td>10</td>
525   - <td></td>
526   - <td>20</td>
527   - <td></td>
528   - </tr>
529   - <tr>
530   - <td>3</td>
531   - <td>金桥路浦东大道(庆宁寺)</td>
532   - <td>下行</td>
533   - <td>07:20</td>
534   - <td>07:34</td>
535   - <td>07:40</td>
536   - <td></td>
537   - <td>20</td>
538   - <td></td>
539   - <td>6</td>
540   - <td>08:00</td>
541   - <td>08:10</td>
542   - <td>08:20</td>
543   - <td></td>
544   - <td>10</td>
545   - <td></td>
546   - <td>20</td>
547   - </tr>
548   - <tr>
549   - <td>4</td>
550   - <td>金桥路锦绣东路</td>
551   - <td>上行</td>
552   - <td>07:20</td>
553   - <td>07:34</td>
554   - <td>07:40</td>
555   - <td>20</td>
556   - <td></td>
557   - <td>6</td>
558   - <td></td>
559   - <td>08:00</td>
560   - <td>08:10</td>
561   - <td>08:20</td>
562   - <td>10</td>
563   - <td></td>
564   - <td>20</td>
565   - <td></td>
566   - </tr>
567   - <tr>
568   - <td>5</td>
569   - <td>金桥路浦东大道(庆宁寺)</td>
570   - <td>下行</td>
571   - <td>07:20</td>
572   - <td>07:34</td>
573   - <td>07:40</td>
574   - <td></td>
575   - <td>20</td>
576   - <td></td>
577   - <td>6</td>
578   - <td>08:00</td>
579   - <td>08:10</td>
580   - <td>08:20</td>
581   - <td></td>
582   - <td>10</td>
583   - <td></td>
584   - <td>20</td>
585   - </tr>
586   - <tr>
587   - <td>6</td>
588   - <td>金桥路锦绣东路</td>
589   - <td>上行</td>
590   - <td>07:20</td>
591   - <td>07:34</td>
592   - <td>07:40</td>
593   - <td>20</td>
594   - <td></td>
595   - <td>6</td>
596   - <td></td>
597   - <td>08:00</td>
598   - <td>08:10</td>
599   - <td>08:20</td>
600   - <td>10</td>
601   - <td></td>
602   - <td>20</td>
603   - <td></td>
604   - </tr>
605   - <tr>
606   - <td>7</td>
607   - <td>金桥路浦东大道(庆宁寺)</td>
608   - <td>下行</td>
609   - <td>07:20</td>
610   - <td>07:34</td>
611   - <td>07:40</td>
612   - <td></td>
613   - <td>20</td>
614   - <td></td>
615   - <td>6</td>
616   - <td>08:00</td>
617   - <td>08:10</td>
618   - <td>08:20</td>
619   - <td></td>
620   - <td>10</td>
621   - <td></td>
622   - <td>20</td>
623   - </tr>
624   - <tr>
625   - <td>8</td>
626   - <td>金桥路浦东大道(庆宁寺)</td>
627   - <td>下行</td>
628   - <td>07:20</td>
629   - <td>07:34</td>
630   - <td>07:40</td>
631   - <td>20</td>
632   - <td></td>
633   - <td>6</td>
634   - <td></td>
635   - <td>08:00</td>
636   - <td>08:10</td>
637   - <td>08:20</td>
638   - <td>10</td>
639   - <td></td>
640   - <td>20</td>
641   - <td></td>
642   - </tr>
643   - <tr>
644   - <td rowspan="2">合计:</td>
645   - <td colspan="8" class="count_col">上行(计划快误点:12 累计时间:50 待发快误点:15 累计时间:70)</td>
646   - <td colspan="8" class="count_col">下行(计划快误点:12 累计时间:50 待发快误点:15 累计时间:70)</td>
647   - </tr>
648   - <tr>
649   - <td colspan="8" class="count_col">上行(计划快误点:12 累计时间:50 待发快误点:15 累计时间:70)</td>
650   - <td colspan="8" class="count_col">下行(计划快误点:12 累计时间:50 待发快误点:15 累计时间:70)</td>
651   - </tr>
652   - </table>
653   - </div>
  101 + {{/each}}
654 102 </div>
655   - </div>
656   -
  103 + </script>
657 104 <script>
658 105 (function () {
659   - var wrap = '.ct_data_body_wrap';
  106 + var wrap = '.ct_data_body_wrap',
  107 + listMap;
660 108  
661 109 $(wrap).on('init', function (e, data) {
662 110 e.stopPropagation();
663   - console.log('data init');
  111 + listMap = data.listMap;
664 112  
  113 + //左侧日期list
  114 + $('.ct_rq_left>ul',wrap).html(template('fast_and_slow_left_rq_temp', {listMap: listMap}));
  115 + //右侧
  116 + $('.ct_right_tables',wrap).html(template('fast_and_slow_right_body_temp', {listMap: listMap}));
665 117 });
666 118 })();
667 119 </script>
... ...
src/main/resources/static/pages/summary/fast_and_slow/main.html
... ... @@ -214,7 +214,7 @@
214 214 <button class="uk-button uk-button-text" style="padding: 0 5px;">导出数据</button>
215 215 </div>
216 216 <div class="ct_field ct_field_bottom">
217   - <span uk-icon="icon: question" title="统计 “正常”、“区间”、“放站” 班次" uk-tooltip="pos: bottom"></span>
  217 + <span uk-icon="icon: question" title="快1慢3不算误点,排除进出场班次" uk-tooltip="pos: bottom"></span>
218 218 </div>
219 219 </form>
220 220 </div>
... ... @@ -256,10 +256,6 @@
256 256 $('.ct_cont_body').html(rs);
257 257 });
258 258  
259   - //点击搜索按钮
260   - $('.search', f).on('click', function () {
261   - $('.ct_data_body_wrap').trigger('init');
262   - });
263 259  
264 260 //日期选择框
265 261 var fs='YYYY-MM-DD'
... ... @@ -322,6 +318,43 @@
322 318 }
323 319 $('[name=lineCode_eq]', f).html(opts);
324 320 });
  321 +
  322 + /**
  323 + * 点击搜索
  324 + */
  325 + $('.search', f).on('click', function () {
  326 + var data = f.serializeJSON();
  327 + if(!data.rq)
  328 + return UIkit.notification('你必须选择时间范围!', 'danger');
  329 +
  330 + var sDate = data.rq.substr(0, 10),
  331 + eDate = data.rq.substr(13);
  332 +
  333 + var params = {lineCode_eq: data.lineCode_eq, rq_ge: sDate, rq_le: eDate, order: 't'};
  334 + $.get('/summary/fastAndSlow/all', params, function (rs) {
  335 + //按日期分组
  336 + var listMap = groupBy(rs, 'rq');
  337 + $('.ct_data_body_wrap').trigger('init', {listMap: listMap});
  338 + });
  339 + });
  340 +
  341 + f.on('submit', function (e) {
  342 + return false;
  343 + });
  344 +
  345 + var groupBy = function (list, field) {
  346 + var rs = {},
  347 + key;
  348 + $.each(list, function () {
  349 + key = this[field];
  350 + if (!rs[key])
  351 + rs[key] = [];
  352 +
  353 + rs[key].push(this);
  354 + });
  355 +
  356 + return rs;
  357 + };
325 358 })();
326 359 </script>
327 360 </body>
... ...
src/main/resources/static/real_control_v2/css/main.css
... ... @@ -1736,4 +1736,22 @@ dl.active&gt;dd.disabled{
1736 1736 color: #a6a6a6;
1737 1737 text-indent: 7px;
1738 1738 padding-bottom: 5px;
  1739 +}
  1740 +
  1741 +.cancel_link{
  1742 + font-size: 12px;
  1743 + margin-left: 15px;
  1744 + vertical-align: bottom;
  1745 + color: #8d8d8d;
  1746 + text-decoration: underline;
  1747 + position: absolute;
  1748 + right: 0;
  1749 +}
  1750 +
  1751 +.edit_link{
  1752 + font-size: 12px;
  1753 + margin-left: 15px;
  1754 + vertical-align: bottom;
  1755 + color: #ff2f2f;
  1756 + text-decoration: underline;
1739 1757 }
1740 1758 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/sys_mailbox.html
... ... @@ -20,7 +20,8 @@
20 20 </h5>
21 21 <code>{{t.fcsjActual}}</code>
22 22 <div class="uk-button-group">
23   - <a class="uk-button uk-button-mini uk-button-primary" >确定</a>
  23 + <a class="uk-button uk-button-mini uk-button-primary" data-line="{{t.xlBm}}">确定</a>
  24 + <a class="cancel_link" data-id="{{t.id}}" data-line="{{t.xlBm}}"><i class="uk-icon-remove"></i> 撤销</a>
24 25 </div>
25 26 </div>
26 27 </script>
... ... @@ -38,7 +39,9 @@
38 39 </h5>
39 40 <code>{{t.zdsjActual}}</code>
40 41 <div class="uk-button-group">
41   - <a class="uk-button uk-button-mini uk-button-primary" >确定</a>
  42 + <a class="uk-button uk-button-mini uk-button-primary" data-line="{{t.xlBm}}">确定</a>
  43 + <a class="edit_link" data-type="1" data-id="{{t.id}}" data-line="{{t.xlBm}}">编辑</a>
  44 + <a class="cancel_link" data-type="1" data-id="{{t.id}}" data-line="{{t.xlBm}}"><i class="uk-icon-remove"></i> 撤销</a>
42 45 </div>
43 46 </div>
44 47 </div>
... ...
src/main/resources/static/real_control_v2/js/line_schedule/context_menu.js
... ... @@ -95,7 +95,7 @@ var gb_schedule_context_menu = (function () {
95 95 sch: sch
96 96 }, modal_opts);
97 97 },
98   - cxsf: function (sch) {
  98 + cxsf: function (sch, cb) {
99 99 if (!sch.fcsjActual)
100 100 return notify_err('车辆未实发,无法执行该操作!');
101 101  
... ... @@ -108,6 +108,8 @@ var gb_schedule_context_menu = (function () {
108 108 notify_succ('撤销实发操作成功!');
109 109 //calc 应发未发
110 110 gb_schedule_table.calc_yfwf_num(sch.xlBm);
  111 +
  112 + cb && cb();
111 113 });
112 114 }, '确认撤销实发');
113 115 },
... ... @@ -176,7 +178,7 @@ var gb_schedule_context_menu = (function () {
176 178 sch: sch
177 179 }, modal_opts);
178 180 },
179   - cxzx: function (sch) {
  181 + cxzx: function (sch, cb) {
180 182 if (!sch.zdsjActual && !sch.fcsjActual)
181 183 return notify_err('车辆未执行,无法撤销执行!');
182 184  
... ... @@ -187,6 +189,8 @@ var gb_schedule_context_menu = (function () {
187 189 }, function (rs) {
188 190 gb_schedule_table.updateSchedule(rs.ts);
189 191 notify_succ('撤销执行成功!');
  192 +
  193 + cb && cb();
190 194 });
191 195 }, '确认撤销执行');
192 196 },
... ...
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
... ... @@ -218,9 +218,8 @@ var gb_sch_websocket = (function () {
218 218 $(document).on('click', '.sys-mailbox .sys-note-42 .uk-button-primary', function (e) {
219 219 e.stopPropagation();
220 220 $(this).parents('.sys-note-42').remove();
221   -
222 221 var size = $(this).parents('.sys-mailbox').find('.sys-mail-item').length
223   - , lineCode = $(this).parents('li.line_schedule').data('id');
  222 + , lineCode = $(this).data('line');
224 223  
225 224 $('#badge_untreated_num_' + lineCode).text(size);
226 225 });
... ... @@ -233,7 +232,7 @@ var gb_sch_websocket = (function () {
233 232 var dl = gb_schedule_table.scroToDl(sch);
234 233 //高亮
235 234 gb_schedule_table.reset_drag_active_all(dl);
236   - dl.addClass('relevance-active intimity');
  235 + dl.addClass('relevance-active intimity').find('dd:eq(5)').trigger('click');
237 236 });
238 237  
239 238 //80同意
... ... @@ -295,6 +294,41 @@ var gb_sch_websocket = (function () {
295 294 gb_data_gps.deviceOffline(msg.gps);
296 295 }
297 296  
  297 + /**
  298 + * 信号撤销
  299 + */
  300 + $(document).on('click','.sys-note-42 .cancel_link', function () {
  301 + var id = $(this).data('id'),
  302 + lineCode = $(this).data('line');
  303 +
  304 + var sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
  305 + if(!sch)
  306 + return;
  307 +
  308 + var confirmBtn = $(this).parent().find('.uk-button-primary');
  309 + var type = $(this).data('type');
  310 + var fun = type==1?gb_schedule_context_menu.cxzx:gb_schedule_context_menu.cxsf;
  311 +
  312 + fun(sch, function () {
  313 + confirmBtn.trigger('click');
  314 + });
  315 + });
  316 +
  317 + /**
  318 + * 到站信号修改
  319 + */
  320 + $(document).on('click', '.sys-note-42 .edit_link', function () {
  321 + var id = $(this).data('id'),
  322 + lineCode = $(this).data('line');
  323 +
  324 + var sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
  325 + if(!sch)
  326 + return;
  327 +
  328 + var nextSch = gb_schedule_table.getNextSch(sch);
  329 + gb_schedule_context_menu.dftz(nextSch);
  330 + });
  331 +
298 332 return {
299 333 sock: function () {
300 334 return schSock;
... ...