Commit 26b86228ee30d285d135eff9375090ec449e7263

Authored by ljq
1 parent cad8712b

末二班车、到站时间大于发车时间页面和js,退出线调判断方式、撤销实发的时候撤销实到

src/main/java/com/bsth/XDApplication.java
... ... @@ -275,7 +275,7 @@ public class XDApplication implements CommandLineRunner {
275 275 //sexec.scheduleWithFixedDelay(fcxxUpdateThread, 160, 30, TimeUnit.SECONDS);//发车信息(发车屏、信息发布)
276 276 //线路首末班数据(网关用,班次更新时写入)
277 277 //com.bsth.data.schedule.f_a_l.FirstAndLastHandler
278   - sexec.scheduleWithFixedDelay(schSiginUpdateDBThread, 160, 60 * 30, TimeUnit.SECONDS);//无法自动完成的班次信息(网关用,补信号)
  278 + //sexec.scheduleWithFixedDelay(schSiginUpdateDBThread, 160, 60 * 30, TimeUnit.SECONDS);//无法自动完成的班次信息(网关用,补信号)
279 279  
280 280 //运管处静态数据提交
281 281 //log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处");
... ...
src/main/java/com/bsth/data/zndd/AutomaticSch.java
... ... @@ -429,14 +429,14 @@ public class AutomaticSch {
429 429 /**
430 430 *每辆车倒数第二个班次执行之前3分钟提示
431 431 */
432   - public void TowdescSch(){
  432 + public void TowdescSch(int snt){ //snt开关用于控制执行方法 0末二班车 1发车时间小于到站时间
433 433 logger.warn("末二班车执行方法开始");
434 434 try {
435 435 //获取所有线路
436 436 Map<String, String> lineMap = BasicData.lineCode2NameMap;
437 437 //findByNbbm车辆索引获取的班次
438 438 Map<String, List<ScheduleRealInfo>> groupedByCity = new HashMap<>();
439   - if(System.currentTimeMillis() < DateUtils.getTimestamp() + (1000 * 60 * 60 * 20)){
  439 + if(snt == 0 && System.currentTimeMillis() < DateUtils.getTimestamp() + (1000 * 60 * 60 * 20)){
440 440 logger.info("未到晚上8点----"+(DateUtils.getTimestamp() + (1000 * 60 * 60 * 20)));
441 441 return;
442 442 }
... ... @@ -462,19 +462,37 @@ public class AutomaticSch {
462 462 //判断倒数第二个班次是否快要发车
463 463 for (String key : mapType.keySet()) {
464 464 List<ScheduleRealInfo> carList = mapType.get(key);
465   - Collections.sort(carList, new ScheduleComparator.FCSJ());
466   - //倒数第二个班次保证数量超过两条
467   - ScheduleRealInfo scht = carList.size() >= 2 ? carList.get(carList.size() - 2) : null;
468   - if (scht == null)
469   - continue;
470   -
471   - if (scht.getDfsjT() > DateUtils.getTimestamp() + (1000 * 60 * 60 * 20) &&
472   - scht.getDfsjT() - System.currentTimeMillis() < (1000* 60 * 4) &&
473   - scht.getDfsjT() - System.currentTimeMillis() >= (1000* 60 *3)) {
474   - //推送一下
475   - ts(addStationPeople(scht,"DESCTWO",0l));
476   -
477   - LogerWait("末二班车推送",scht);
  465 + if (snt == 1) {
  466 + for (int i = 0; i < carList.size(); i++) {
  467 + ScheduleRealInfo sr = carList.get(i);
  468 + //2.到达时间大于发车时间
  469 + if (i < carList.size() - 1) {
  470 + ScheduleRealInfo src = carList.get(i + 1);
  471 + if (sr.getZdsjActual() != null && src.getFcsjActual() != null && sr.getStatus() != -1 && src.getStatus() != -1) {
  472 + if (src.getFcsjActualTime() < sr.getZdsjActualTime()) {
  473 + ts(addStationPeople(src, "FCSJXZD", 0l));
  474 + LogerWait("班次发车时间小于到站时间", src);
  475 + }
  476 + }
  477 + }
  478 + }
  479 + }
  480 + if (snt == 0) {
  481 + //倒数第二班方法
  482 + Collections.sort(carList, new ScheduleComparator.FCSJ());
  483 + //倒数第二个班次保证数量超过两条
  484 + ScheduleRealInfo scht = carList.size() >= 2 ? carList.get(carList.size() - 2) : null;
  485 + if (scht == null)
  486 + continue;
  487 +
  488 + if (scht.getDfsjT() > DateUtils.getTimestamp() + (1000 * 60 * 60 * 20) &&
  489 + scht.getDfsjT() - System.currentTimeMillis() < (1000 * 60 * 4) &&
  490 + scht.getDfsjT() - System.currentTimeMillis() >= (1000 * 60 * 3)) {
  491 + //推送一下
  492 + ts(addStationPeople(scht, "DESCTWO", 0l));
  493 +
  494 + LogerWait("末二班车推送", scht);
  495 + }
478 496 }
479 497 }
480 498 }
... ... @@ -484,6 +502,47 @@ public class AutomaticSch {
484 502 }
485 503 }
486 504  
  505 + //班次发车时间小于到站时间
  506 + public void FCSJXZD(){
  507 + /* logger.warn("到达时间大于发车时间方法开始");
  508 + //获取所有线路
  509 +
  510 + //findByNbbm车辆索引获取的
  511 + try {
  512 + //两种检测 1、当前班次的实发 小于 实到 2.下一班次的实发 小于 上一班次的实到
  513 +
  514 + for (Map.Entry<String, String> t : lineMap.entrySet()) {
  515 + List<ScheduleRealInfo> srList = dayOfSchedule.findByLineCode(t.getKey());
  516 + for (int i = 0; i < srList.size(); i++) {
  517 + ScheduleRealInfo sr = srList.get(i);
  518 + *//* //1.当前班次的实发 小于 实到
  519 + if (sr.getFcsjActual() != null && sr.getZdsjActual() != null && sr.getStatus() != -1) {
  520 + //提示
  521 + if (sr.getFcsjActualTime() > sr.getZdsjActualTime()) {
  522 + ts(addStationPeople(sr, "FCSJXZD", 0l));
  523 +
  524 + LogerWait("班次发车时间小于到站时间", sr);
  525 + }
  526 +
  527 + }*//*
  528 + //2.到达时间大于发车时间
  529 + if (i < srList.size() -1){
  530 + ScheduleRealInfo src = srList.get(i + 1);
  531 + if (sr.getZdsjActual() != null && src.getFcsjActual() != null && sr.getStatus() != -1 && src.getStatus() != -1){
  532 + if (src.getFcsjActualTime() < sr.getZdsjActualTime()){
  533 + ts(addStationPeople(sr, "FCSJXZD", 0l));
  534 + LogerWait("班次发车时间小于到站时间", sr);
  535 + }
  536 + }
  537 + }
  538 + }
  539 + }
  540 + }catch (Exception e){
  541 + logger.error("班次发车时间小于到站时间执行方法出错"+ e);
  542 + }*/
  543 +
  544 + }
  545 +
487 546  
488 547  
489 548 public void ts(Map m) throws ParseException {
... ...
src/main/java/com/bsth/data/zndd/OutEntrance.java
... ... @@ -80,6 +80,9 @@ public class OutEntrance {
80 80 @Autowired
81 81 BasicData basicData;
82 82  
  83 + @Autowired
  84 + ZnddMessage znddMessage;
  85 +
83 86 //调度屏小程序接口。
84 87 @RequestMapping(value = "/OutCar", method = RequestMethod.POST)
85 88 public Map OutCarOutCar(@RequestParam Map m,@RequestBody StationSignsLogger ssLogger) {
... ... @@ -320,14 +323,14 @@ public class OutEntrance {
320 323 return rtn;
321 324 }
322 325  
323   -/*
  326 +
324 327 //大客流消息测试接口
325 328 @RequestMapping(value="/znMeeage",method = RequestMethod.GET)
326 329 public Map znddMessagejk(@RequestParam Map m){
327 330 Map rtn = new HashMap<>();
328 331 try {
329 332 List<ScheduleRealInfo> sr = dayOfSchedule.findByBcType(m.get("nbbm").toString(),"normal");
330   - ZnddMessage.saveSch(sr.get(Integer.parseInt(m.get("num").toString())));
  333 + znddMessage.saveSch(sr.get(Integer.parseInt(m.get("num").toString())));
331 334 rtn.put("status",ResponseCode.SUCCESS);
332 335 } catch (Exception e) {
333 336 rtn.put("err",ResponseCode.ERROR);
... ... @@ -335,7 +338,7 @@ public class OutEntrance {
335 338 }
336 339 return rtn;
337 340 }
338   -*/
  341 +
339 342  
340 343  
341 344  
... ...
src/main/java/com/bsth/data/zndd/ZnddMessage.java 0 → 100644
  1 +package com.bsth.data.zndd;
  2 +
  3 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  4 +import org.slf4j.Logger;
  5 +import org.slf4j.LoggerFactory;
  6 +import org.springframework.web.bind.annotation.RequestMapping;
  7 +import org.springframework.web.bind.annotation.RequestMethod;
  8 +import org.springframework.web.bind.annotation.RestController;
  9 +
  10 +import java.text.SimpleDateFormat;
  11 +import java.util.*;
  12 +
  13 +@RestController
  14 +@RequestMapping("/znddmessage")
  15 +public class ZnddMessage {
  16 +
  17 + static List<Map> LISTMAPALL= new ArrayList<>(); //返回给前台的班次情况
  18 +
  19 + Logger logger = LoggerFactory.getLogger(this.getClass());
  20 +
  21 +
  22 + public void saveSch(ScheduleRealInfo sch){
  23 + Map m = new HashMap();
  24 + m.put("sch",sch);
  25 + //防止重复的
  26 + for (Map mm : LISTMAPALL){
  27 + ScheduleRealInfo sr = (ScheduleRealInfo) mm.get("sch");
  28 + if (sr.getClZbh().equals(sch.getClZbh())){
  29 + return;
  30 + }
  31 + }
  32 + LISTMAPALL.add(m);
  33 + handleAll();
  34 + }
  35 +
  36 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  37 +
  38 + @RequestMapping(value="/messagelist",method = RequestMethod.GET)
  39 + public List<Map> listAll(){
  40 +
  41 + handleAll();
  42 + return LISTMAPALL;
  43 + }
  44 +
  45 + //新的请求处理一下
  46 + public void handleAll(){
  47 + for (Map m : LISTMAPALL){
  48 + ScheduleRealInfo sr = (ScheduleRealInfo) m.get("sch");
  49 + //1.离线 2.实发时间为空 3.已过待发时间还没发车的
  50 + long time = System.currentTimeMillis();//正常大客流添加班次也是在上下5分钟浮动,实际时间+10分钟
  51 + //超过待发时间 实发时间还是null的
  52 + // if (sr.getFcsjT() + (1000 * 60 * 10) < time && sr.getFcsjT() + (1000 * 60 * 10) > time) { //实际使用 //测试注释
  53 + MessageStatus(sr, m);
  54 + m.put("sch", sr);
  55 + if (m.get("uuid") == null)
  56 + m.put("uuid",AutomaticSch.UUID());
  57 + // }
  58 +
  59 + if (sr.getMessageDKL() == 10){
  60 + LISTMAPALL.remove(m);
  61 + return;
  62 + }
  63 + }
  64 + }
  65 +
  66 +
  67 + public void MessageStatus(ScheduleRealInfo sch, Map map){
  68 +
  69 + switch (sch.getMessageDKL()) {
  70 + case 0:
  71 + jsy(sch,map);
  72 + break;
  73 + case 1:
  74 + ts_car(sch,map);
  75 + break;
  76 + case 2:
  77 +
  78 + break;
  79 + case 3:
  80 +
  81 + break;
  82 + case 4:
  83 +
  84 + break;
  85 +
  86 + }
  87 + }
  88 +
  89 +
  90 + //下发驾驶员
  91 + public void jsy(ScheduleRealInfo sch, Map map){
  92 + try {
  93 + //暂无
  94 + sch.setMessageDKL(sch.getMessageDKL()+1);
  95 + if (map.get("j_sj") == null)
  96 + map.put("j_sj",sdf.format(new Date()));
  97 +
  98 + MessageStatus(sch, map);//继续下一项
  99 + }catch (Exception e){
  100 + logger.info("下发驾驶员异常---",e);
  101 + }finally {
  102 + logger.info("驾驶员下发成功");
  103 + }
  104 + }
  105 +
  106 + //下发车辆
  107 + public void ts_car(ScheduleRealInfo sch, Map map){
  108 + try {
  109 + //暂无
  110 + sch.setMessageDKL(sch.getMessageDKL()+1);
  111 + if (map.get("car_sj") == null)
  112 + map.put("car_sj",sdf.format(new Date()));
  113 +
  114 + MessageStatus(sch, map);//继续下一项
  115 + }catch (Exception e){
  116 + logger.info("下发车辆异常---",e);
  117 + }finally {
  118 + logger.info("下发车辆成功");
  119 + }
  120 + }
  121 +
  122 +}
... ...
src/main/java/com/bsth/data/zndd/ZnddTwoThread.java
... ... @@ -97,12 +97,19 @@ public class ZnddTwoThread extends Thread{
97 97 new Thread() {
98 98 @Override
99 99 public void run() {
100   - automaticSch.TowdescSch();
  100 + automaticSch.TowdescSch(0);
101 101 logger.info("末二班车执行完毕");
102 102 }
103 103 }.start();//启动线程
104   -
105   -
  104 + }
  105 + if (zs.getType().equals("fcsjxzd")) {
  106 + new Thread() {
  107 + @Override
  108 + public void run() {
  109 + automaticSch.TowdescSch(1);
  110 + logger.info("到达时间大于发车时间执行完毕");
  111 + }
  112 + }.start();//启动线程
106 113 }
107 114 }
108 115 }
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -1750,6 +1750,18 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1750 1750 } else {
1751 1751 //日志记录
1752 1752 ScheduleModifyLogger.cxsf(sch);
  1753 + //环线有可能把实到补上,实到存在的情况下 把实到也撤销掉
  1754 + if (!sch.getZdsjActual().isEmpty()) {
  1755 + sch.clearZdsjActual();
  1756 + //清除路牌下一班起点到达时间
  1757 + ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
  1758 + if (null != next) {
  1759 + next.setQdzArrDatesj(null);
  1760 + ts.add(next);
  1761 + }
  1762 + //重新计算车辆执行班次
  1763 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1764 + }
1753 1765  
1754 1766 sch.clearFcsjActual();
1755 1767 rs.put("status", ResponseCode.SUCCESS);
... ...
src/main/java/com/bsth/service/zndd/impl/LoggerZnddServiceImpl.java
... ... @@ -250,8 +250,7 @@ public class LoggerZnddServiceImpl extends BaseServiceImpl&lt;LoggerZndd, Integer&gt;
250 250 return sch;
251 251 }
252 252  
253   -
254   -
  253 + //退出线调提示
255 254 public String LineUserAll(@RequestParam Integer userId){
256 255 String xlNames ="";
257 256 RealControAuthority rcay = realControAuthorityService.findByUserId(userId);
... ... @@ -260,7 +259,8 @@ public class LoggerZnddServiceImpl extends BaseServiceImpl&lt;LoggerZndd, Integer&gt;
260 259 for(String line : lineArray){
261 260 List<ScheduleRealInfo> schList = dayOfSchedule.findByLineCode(line);
262 261 for(ScheduleRealInfo sc : schList){
263   - if (sc.getStatus() == 0 || sc.getStatus() == 1){
  262 + //去除烂班、发车时间和实到时间都为null的时候
  263 + if (sc.getStatus() != -1 && (sc.getFcsjActual() == null || sc.getZdsjActual() == null)){
264 264 xlNames += sc.getXlName()+",";
265 265 break;
266 266 }
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/layout.html
... ... @@ -40,6 +40,7 @@
40 40 <span class="tl-xxsd">消息收到</span>
41 41 <span class="tl-xxrd">消息阅读</span>
42 42 <span class="tl-wfyd">无发有到</span>
  43 + <span class="tl-wd" style="width: 125px">实到-实发大于实到</span>
43 44 </div>
44 45 <div class="ct_title">
45 46 图例(RFID)
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
... ... @@ -156,6 +156,14 @@
156 156 </dd>
157 157 </script>
158 158  
  159 + <script id="line-schedule-dzsj-temp" type="text/html">
  160 + <dd class="{{if ddtype== 0}}>
  161 + tl-wd
  162 + {{/if}}">
  163 + {{qdzArrDatesj ? qdzArrDatesj : ''}}
  164 + </dd>
  165 + </script>
  166 +
159 167 <script id="line-schedule-sfsj-temp" type="text/html">
160 168 <dd data-uk-observe class="
161 169 {{if status==-1}}
... ...
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
... ... @@ -374,7 +374,8 @@ var gb_schedule_table = (function () {
374 374 //车辆双击
375 375 gb_schedule_table_dbclick.carCellClick($newDds3);
376 376 $(dds[4]).text(sch.qdzArrDatejh ? sch.qdzArrDatejh : '');
377   - $(dds[5]).text(sch.qdzArrDatesj ? sch.qdzArrDatesj : '');
  377 + var dzsjDd = $(temps['line-schedule-dzsj-temp'](sch));
  378 + $(dds[5]).replaceWith(dzsjDd);
378 379  
379 380 //计发时间
380 381 var d5html = temps['line-schedule-fcsj-temp'](sch);
... ...
src/main/resources/static/real_control_v2/js/zndd/data_zndd.js
... ... @@ -23,12 +23,12 @@ var gb_dataZndd = (function (){
23 23 //时间格式化
24 24 data.types = codes[data.type];
25 25  
26   - /* if (data.type == 'SFTZ_1' && sf_tz(data.lineCode) == false){
  26 + if (data.type == 'SFTZ_1' && sf_tz(data.lineCode) == false){
27 27 return
28 28 }
29   -*/
30 29  
31   - if ((data.type == 'WD' || data.type == 'MZ' || data.type == 'FCJG' || data.type == 'DJG') && ycsf_sx(data.lineCode) == false){
  30 +
  31 + if ((data.type == 'WD' || data.type == 'FCJG' || data.type == 'DJG') && ycsf_sx(data.lineCode) == false){
32 32 return
33 33 }
34 34  
... ... @@ -42,11 +42,18 @@ var gb_dataZndd = (function (){
42 42 configureDkl();
43 43 return;
44 44 }
45   -
46   - if (data.type == 'DESCTWO'){
  45 + //末二班车
  46 + if (data.type == 'DESCTWO' && mo_two(data.lineCode) == false){
47 47 configurecell();
48 48 return;
49 49 }
  50 + //到站时间大于发车时间
  51 + if (data.type == 'FCSJXZD' && zdsj_sx(data.lineCode) == false){
  52 + var sch =data.sch;
  53 + sch.ddtype = 0;
  54 + gb_schedule_table.updateSchedule(sch);
  55 + return;
  56 + }
50 57  
51 58  
52 59 configure();
... ... @@ -131,19 +138,30 @@ var gb_dataZndd = (function (){
131 138 }
132 139 return false;
133 140 }
  141 + //末二班车、1009路,浦东33路、1096路
  142 + function mo_two(){
  143 + var t =['60019','80302','80301'];
134 144  
  145 + for (var lines in t){
  146 + if(line == t[lines])
  147 + return true;
  148 + }
  149 + return false;
  150 + }
135 151  
  152 + //实发时间大于到站时间
  153 + //定制15线、申港3路、临港7路、新临专线、中运量3号线
  154 + function zdsj_sx(){
  155 + var t =['230608','60033','210810','200828','230718'];
136 156  
  157 + for (var lines in t){
  158 + if(line == t[lines])
  159 + return true;
  160 + }
  161 + return false;
  162 + }
137 163  
138   - /* //演示-----大客流
139   - $(".ys_dkl").click(function (){
140   - folder = '/real_control_v2/zndd/yanshi';
141   - open_modal(folder + '/yanshi.html', {
142   - }, {center: true, bgclose: false, modal: true});
143   -
144   - });
145 164  
146   -*/
147 165  
148 166 //发车信息微调
149 167 $pop.on('click', '.fcxxwts', function () {
... ...