Commit 1a61f28ca3768195f32a4b1ca0e8101f29e788b6

Authored by 潘钊
1 parent b49a7d13

优化到离站逻辑

src/main/java/com/bsth/data/arrival/AnalyseData.java
@@ -78,6 +78,9 @@ public class AnalyseData { @@ -78,6 +78,9 @@ public class AnalyseData {
78 && curr.getTs() - prve.getTs() < SHIFT_TIME){ 78 && curr.getTs() - prve.getTs() < SHIFT_TIME){
79 prve.setEnable(false); 79 prve.setEnable(false);
80 } 80 }
  81 +// else if(curr.getInOut()){
  82 +// //curr.getTs() - prve.getTs() < 30000
  83 +// }
81 } 84 }
82 else{ 85 else{
83 //上下行的同名站,新走向的第一个出站信号开始有效 86 //上下行的同名站,新走向的第一个出站信号开始有效
src/main/java/com/bsth/data/arrival/ArrivalData_GPS.java
@@ -51,7 +51,7 @@ public class ArrivalData_GPS implements CommandLineRunner{ @@ -51,7 +51,7 @@ public class ArrivalData_GPS implements CommandLineRunner{
51 @Override 51 @Override
52 public void run(String... arg0) throws Exception { 52 public void run(String... arg0) throws Exception {
53 logger.info("ArrivalData_GPS,30,10"); 53 logger.info("ArrivalData_GPS,30,10");
54 - Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 30, 600, TimeUnit.SECONDS); 54 + Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 40, 20, TimeUnit.SECONDS);
55 } 55 }
56 56
57 @Component 57 @Component
src/main/java/com/bsth/data/arrival/DataLoader.java
@@ -58,7 +58,7 @@ public class DataLoader { @@ -58,7 +58,7 @@ public class DataLoader {
58 PreparedStatement ps = null; 58 PreparedStatement ps = null;
59 ResultSet rs = null; 59 ResultSet rs = null;
60 60
61 - String sql = "select * from bsth_c_arrival_info where weeks_year=? AND create_timestamp > ? AND create_timestamp <=? AND ABS(create_timestamp - ts) < 3600000 order by ts"; 61 + String sql = "select * from bsth_c_arrival_info where weeks_year=? AND create_timestamp > ? AND create_timestamp <=? AND ABS(create_timestamp - ts) < 3600000 order by create_date";
62 try{ 62 try{
63 long t = System.currentTimeMillis(); 63 long t = System.currentTimeMillis();
64 64
src/main/java/com/bsth/data/directive/FirstScheduleCheckThread.java
@@ -8,6 +8,8 @@ import org.slf4j.LoggerFactory; @@ -8,6 +8,8 @@ import org.slf4j.LoggerFactory;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.stereotype.Component; 9 import org.springframework.stereotype.Component;
10 10
  11 +import com.bsth.data.match.Arrival2Schedule;
  12 +import com.bsth.data.match.ExpectArrivalEnd;
11 import com.bsth.data.schedule.DayOfSchedule; 13 import com.bsth.data.schedule.DayOfSchedule;
12 import com.bsth.entity.realcontrol.ScheduleRealInfo; 14 import com.bsth.entity.realcontrol.ScheduleRealInfo;
13 import com.bsth.service.directive.DirectiveService; 15 import com.bsth.service.directive.DirectiveService;
@@ -63,6 +65,26 @@ public class FirstScheduleCheckThread extends Thread{ @@ -63,6 +65,26 @@ public class FirstScheduleCheckThread extends Thread{
63 && Math.abs(first.getDfsjT() - t) < THREE_MINUTES){ 65 && Math.abs(first.getDfsjT() - t) < THREE_MINUTES){
64 66
65 directiveService.send60Dispatch(first, dayOfSchedule.doneSum(first.getClZbh()), "定补@系统"); 67 directiveService.send60Dispatch(first, dayOfSchedule.doneSum(first.getClZbh()), "定补@系统");
  68 + //期望完成出场班次时间
  69 + long endTime;
  70 +
  71 + if(first.getZdsj() != null)
  72 + endTime=first.getZdsjT() - 60000;
  73 + else
  74 + endTime=schList.get(1).getDfsjT() - 60000;
  75 +
  76 + ExpectArrivalEnd ead = new ExpectArrivalEnd()
  77 + ,ead2 = new ExpectArrivalEnd();
  78 + ead.setNbbm(car);
  79 + ead.setEndStation(first.getQdzCode());
  80 + ead.setEndTime(endTime);
  81 +
  82 + ead2.setNbbm(car);
  83 + ead2.setEndStation(first.getZdzCode());
  84 + ead2.setEndTime(endTime);
  85 +
  86 + Arrival2Schedule.addExpect(car, ead);
  87 + Arrival2Schedule.addExpect(car, ead2);
66 } 88 }
67 } 89 }
68 } 90 }
src/main/java/com/bsth/data/directive/GatewayHttpUtils.java
@@ -51,13 +51,13 @@ public class GatewayHttpUtils { @@ -51,13 +51,13 @@ public class GatewayHttpUtils {
51 51
52 post.setEntity(new StringEntity(jsonStr, "utf-8")); 52 post.setEntity(new StringEntity(jsonStr, "utf-8"));
53 53
54 - CloseableHttpResponse response = httpClient.execute(post);  
55 -  
56 - JSONObject json = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));  
57 - if(null != json && json.getInteger("errCode") == 0)  
58 - code = 0;  
59 - else  
60 - logger.error("和网关http通讯失败,rs: " + json); 54 +// CloseableHttpResponse response = httpClient.execute(post);
  55 +//
  56 +// JSONObject json = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
  57 +// if(null != json && json.getInteger("errCode") == 0)
  58 +// code = 0;
  59 +// else
  60 +// logger.error("和网关http通讯失败,rs: " + json);
61 }catch(Exception e){ 61 }catch(Exception e){
62 logger.error("", e); 62 logger.error("", e);
63 }finally { 63 }finally {
src/main/java/com/bsth/data/match/Arrival2Schedule.java
@@ -3,9 +3,7 @@ package com.bsth.data.match; @@ -3,9 +3,7 @@ package com.bsth.data.match;
3 import java.text.SimpleDateFormat; 3 import java.text.SimpleDateFormat;
4 import java.util.ArrayList; 4 import java.util.ArrayList;
5 import java.util.Collections; 5 import java.util.Collections;
6 -import java.util.HashMap;  
7 import java.util.List; 6 import java.util.List;
8 -import java.util.Map;  
9 import java.util.Set; 7 import java.util.Set;
10 8
11 import org.slf4j.Logger; 9 import org.slf4j.Logger;
@@ -15,14 +13,18 @@ import org.springframework.context.ApplicationContext; @@ -15,14 +13,18 @@ import org.springframework.context.ApplicationContext;
15 import org.springframework.context.ApplicationContextAware; 13 import org.springframework.context.ApplicationContextAware;
16 import org.springframework.stereotype.Component; 14 import org.springframework.stereotype.Component;
17 15
  16 +import com.bsth.data.LineConfigData;
18 import com.bsth.data.arrival.ArrivalComparator; 17 import com.bsth.data.arrival.ArrivalComparator;
19 import com.bsth.data.arrival.ArrivalData_GPS; 18 import com.bsth.data.arrival.ArrivalData_GPS;
20 import com.bsth.data.arrival.ArrivalEntity; 19 import com.bsth.data.arrival.ArrivalEntity;
21 import com.bsth.data.schedule.DayOfSchedule; 20 import com.bsth.data.schedule.DayOfSchedule;
22 import com.bsth.data.schedule.ScheduleComparator; 21 import com.bsth.data.schedule.ScheduleComparator;
  22 +import com.bsth.entity.realcontrol.LineConfig;
23 import com.bsth.entity.realcontrol.ScheduleRealInfo; 23 import com.bsth.entity.realcontrol.ScheduleRealInfo;
24 import com.bsth.service.directive.DirectiveService; 24 import com.bsth.service.directive.DirectiveService;
25 import com.bsth.websocket.handler.SendUtils; 25 import com.bsth.websocket.handler.SendUtils;
  26 +import com.google.common.collect.ArrayListMultimap;
  27 +import com.google.common.collect.ListMultimap;
26 28
27 /** 29 /**
28 * 30 *
@@ -38,13 +40,14 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -38,13 +40,14 @@ public class Arrival2Schedule implements ApplicationContextAware {
38 private static DayOfSchedule dayOfSchedule; 40 private static DayOfSchedule dayOfSchedule;
39 private static SendUtils sendUtils; 41 private static SendUtils sendUtils;
40 private static DirectiveService directiveService; 42 private static DirectiveService directiveService;
  43 + private static LineConfigData lineConfigData;
41 private final static int ONE_MINUTE = 1000 * 60; 44 private final static int ONE_MINUTE = 1000 * 60;
42 //定一个4小时的范围,基本能对正常班次进行容错。主要防止早上停车场GPS飘导致完成晚上的进场班次 45 //定一个4小时的范围,基本能对正常班次进行容错。主要防止早上停车场GPS飘导致完成晚上的进场班次
43 private final static int FOUR_HOURS = 1000 * 60 * 60 * 4; 46 private final static int FOUR_HOURS = 1000 * 60 * 60 * 4;
44 47
45 private static Logger logger = LoggerFactory.getLogger(Arrival2Schedule.class); 48 private static Logger logger = LoggerFactory.getLogger(Arrival2Schedule.class);
46 49
47 - private static Map<String, ExpectArrivalEnd> expectMap = new HashMap<>(); 50 + private static ArrayListMultimap<String, ExpectArrivalEnd> expectMap = ArrayListMultimap.create();
48 51
49 /** 52 /**
50 * 53 *
@@ -61,6 +64,8 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -61,6 +64,8 @@ public class Arrival2Schedule implements ApplicationContextAware {
61 64
62 public static class SchMatchThread extends Thread{ 65 public static class SchMatchThread extends Thread{
63 String nbbm; 66 String nbbm;
  67 + LineConfig conf;
  68 +
64 public SchMatchThread(String nbbm){ 69 public SchMatchThread(String nbbm){
65 this.nbbm = nbbm; 70 this.nbbm = nbbm;
66 } 71 }
@@ -73,7 +78,6 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -73,7 +78,6 @@ public class Arrival2Schedule implements ApplicationContextAware {
73 78
74 @Override 79 @Override
75 public void run() { 80 public void run() {
76 -  
77 //班次列表 81 //班次列表
78 List<ScheduleRealInfo> schList = dayOfSchedule.findByNbbm(nbbm); 82 List<ScheduleRealInfo> schList = dayOfSchedule.findByNbbm(nbbm);
79 //进出起终点数据 83 //进出起终点数据
@@ -82,6 +86,7 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -82,6 +86,7 @@ public class Arrival2Schedule implements ApplicationContextAware {
82 if(schList.size() == 0 || arrList.size() == 0) 86 if(schList.size() == 0 || arrList.size() == 0)
83 return; 87 return;
84 88
  89 + conf = lineConfigData.get(schList.get(0).getXlBm());
85 //排序 90 //排序
86 Collections.sort(schList, schComparator); 91 Collections.sort(schList, schComparator);
87 Collections.sort(arrList, arrComparator); 92 Collections.sort(arrList, arrComparator);
@@ -113,8 +118,8 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -113,8 +118,8 @@ public class Arrival2Schedule implements ApplicationContextAware {
113 if(sch.isDestroy()) 118 if(sch.isDestroy())
114 continue; 119 continue;
115 120
116 - //没有里程的不匹配  
117 - if(sch.getBcsj() == null && sch.getJhlc() == null) 121 + //线路配置出站既出场,并且没有里程的不匹配
  122 + if(conf.getOutConfig()==2 && sch.getBcsj() == null && sch.getJhlc() == null)
118 continue; 123 continue;
119 124
120 list.add(sch); 125 list.add(sch);
@@ -194,7 +199,15 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -194,7 +199,15 @@ public class Arrival2Schedule implements ApplicationContextAware {
194 mr = new MatchResult(); 199 mr = new MatchResult();
195 mr.sch = sch; 200 mr.sch = sch;
196 mr.ts = inArr.getTs(); 201 mr.ts = inArr.getTs();
197 - mr.diff = inArr.getTs() - sch.getZdsjT(); 202 + //班次没有里程和运送时间的
  203 + if(sch.getZdsj() == null){
  204 + if(i < schList.size()-1)
  205 + mr.diff = inArr.getTs() - schList.get(i + 1).getDfsjT();
  206 + else
  207 + mr.diff = inArr.getTs() - sch.getDfsjT();
  208 + }
  209 + else
  210 + mr.diff = inArr.getTs() - sch.getZdsjT();
198 mr.success = dayOfSchedule.validEndTime(sch, inArr.getTs()); 211 mr.success = dayOfSchedule.validEndTime(sch, inArr.getTs());
199 if(Math.abs(mr.diff) < FOUR_HOURS && mr.success) 212 if(Math.abs(mr.diff) < FOUR_HOURS && mr.success)
200 mrs.add(mr); 213 mrs.add(mr);
@@ -216,13 +229,8 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -216,13 +229,8 @@ public class Arrival2Schedule implements ApplicationContextAware {
216 public void carOut(MatchResult mr){ 229 public void carOut(MatchResult mr){
217 ScheduleRealInfo sch = mr.sch; 230 ScheduleRealInfo sch = mr.sch;
218 231
219 - if(expectMap.containsKey(nbbm)){  
220 - ExpectArrivalEnd ead = expectMap.get(nbbm);  
221 - if(mr.ts < ead.getEndTime())  
222 - return;  
223 - else  
224 - expectMap.remove(nbbm);  
225 - } 232 + if(!isExpectOut(mr))
  233 + return;
226 //设置发车时间 234 //设置发车时间
227 sch.setFcsjActualAll(mr.ts); 235 sch.setFcsjActualAll(mr.ts);
228 //通知客户端 236 //通知客户端
@@ -231,8 +239,32 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -231,8 +239,32 @@ public class Arrival2Schedule implements ApplicationContextAware {
231 dayOfSchedule.save(sch); 239 dayOfSchedule.save(sch);
232 //车辆当前执行班次 240 //车辆当前执行班次
233 dayOfSchedule.addExecPlan(sch); 241 dayOfSchedule.addExecPlan(sch);
  242 +
234 //期望车辆到达的终点 243 //期望车辆到达的终点
235 - expectMap.put(nbbm, ExpectArrivalEnd.getEndInstance(sch, mr.ts)); 244 + if(sch.getZdsj() != null)
  245 + expectMap.put(nbbm, ExpectArrivalEnd.getEndInstance(sch, mr.ts));
  246 + }
  247 +
  248 + /**
  249 + *
  250 + * @Title: isExpectOut
  251 + * @Description: TODO(是否是一个期望的出站匹配结果)
  252 + */
  253 + private boolean isExpectOut(MatchResult mr){
  254 + ScheduleRealInfo sch = mr.sch;
  255 + String nbbm = sch.getClZbh();
  256 + if(expectMap.containsKey(nbbm)){
  257 + List<ExpectArrivalEnd> eads = expectMap.get(nbbm);
  258 + for(ExpectArrivalEnd ead : eads){
  259 + if(sch.getQdzCode().equals(ead.getEndStation())
  260 + || mr.ts > ead.getEndTime()){
  261 + expectMap.removeAll(nbbm);
  262 + return true;
  263 + }
  264 + }
  265 + return false;
  266 + }
  267 + return true;
236 } 268 }
237 269
238 /** 270 /**
@@ -243,15 +275,8 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -243,15 +275,8 @@ public class Arrival2Schedule implements ApplicationContextAware {
243 public void carInStop(MatchResult mr){ 275 public void carInStop(MatchResult mr){
244 ScheduleRealInfo sch = mr.sch; 276 ScheduleRealInfo sch = mr.sch;
245 String nbbm=sch.getClZbh(); 277 String nbbm=sch.getClZbh();
246 - if(expectMap.containsKey(nbbm)){  
247 - ExpectArrivalEnd ead = expectMap.get(nbbm);  
248 - if(mr.ts < ead.getEndTime()  
249 - && !mr.sch.getZdzCode().equals(ead.getEndStation())){  
250 - return;  
251 - }  
252 - else  
253 - expectMap.remove(nbbm);  
254 - } 278 + if(!isExpectIn(mr))
  279 + return;
255 280
256 //如果是进停车场,并且实达时间差值大于 30 分钟,并且之前还有未完成班次。 281 //如果是进停车场,并且实达时间差值大于 30 分钟,并且之前还有未完成班次。
257 if(sch.getBcType().equals("in") && Math.abs(mr.diff) > (1000 * 60 * 30)){ 282 if(sch.getBcType().equals("in") && Math.abs(mr.diff) > (1000 * 60 * 30)){
@@ -289,6 +314,28 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -289,6 +314,28 @@ public class Arrival2Schedule implements ApplicationContextAware {
289 314
290 /** 315 /**
291 * 316 *
  317 + * @Title: isExpectOut
  318 + * @Description: TODO(是否是一个期望的进站匹配结果)
  319 + */
  320 + private boolean isExpectIn(MatchResult mr){
  321 + ScheduleRealInfo sch = mr.sch;
  322 + String nbbm = sch.getClZbh();
  323 + if(expectMap.containsKey(nbbm)){
  324 + List<ExpectArrivalEnd> eads = expectMap.get(nbbm);
  325 + for(ExpectArrivalEnd ead : eads){
  326 + if(sch.getZdzCode().equals(ead.getEndStation())
  327 + || mr.ts > ead.getEndTime()){
  328 + expectMap.removeAll(nbbm);
  329 + return true;
  330 + }
  331 + }
  332 + return false;
  333 + }
  334 + return true;
  335 + }
  336 +
  337 + /**
  338 + *
292 * @Title: correctFirstSignal 339 * @Title: correctFirstSignal
293 * @Description: TODO(检查并纠正首班出场到离站) 340 * @Description: TODO(检查并纠正首班出场到离站)
294 */ 341 */
@@ -367,6 +414,7 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -367,6 +414,7 @@ public class Arrival2Schedule implements ApplicationContextAware {
367 sendUtils = arg0.getBean(SendUtils.class); 414 sendUtils = arg0.getBean(SendUtils.class);
368 dayOfSchedule = arg0.getBean(DayOfSchedule.class); 415 dayOfSchedule = arg0.getBean(DayOfSchedule.class);
369 directiveService = arg0.getBean(DirectiveService.class); 416 directiveService = arg0.getBean(DirectiveService.class);
  417 + lineConfigData = arg0.getBean(LineConfigData.class);
370 } 418 }
371 419
372 /** 420 /**
@@ -376,6 +424,10 @@ public class Arrival2Schedule implements ApplicationContextAware { @@ -376,6 +424,10 @@ public class Arrival2Schedule implements ApplicationContextAware {
376 * @param @param nbbm 424 * @param @param nbbm
377 */ 425 */
378 public void removeExpect(String nbbm){ 426 public void removeExpect(String nbbm){
379 - expectMap.remove(nbbm); 427 + expectMap.removeAll(nbbm);
  428 + }
  429 +
  430 + public static void addExpect(String nbbm, ExpectArrivalEnd eae){
  431 + expectMap.put(nbbm, eae);
380 } 432 }
381 } 433 }
src/main/java/com/bsth/data/match/ExpectArrivalEnd.java
@@ -5,7 +5,7 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo; @@ -5,7 +5,7 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo;
5 /** 5 /**
6 * 6 *
7 * @ClassName: ExpectArrivalEnd 7 * @ClassName: ExpectArrivalEnd
8 - * @Description: TODO(期望车辆在某个时间段到达某个终点........) 8 + * @Description: TODO(期望车辆在某个时间段到达某个终点或 发出某个起点........)
9 * @author PanZhao 9 * @author PanZhao
10 * @date 2016年11月2日 下午8:04:43 10 * @date 2016年11月2日 下午8:04:43
11 * 11 *
@@ -29,6 +29,7 @@ public class ExpectArrivalEnd { @@ -29,6 +29,7 @@ public class ExpectArrivalEnd {
29 } 29 }
30 return ead; 30 return ead;
31 } 31 }
  32 +
32 33
33 public String getNbbm() { 34 public String getNbbm() {
34 return nbbm; 35 return nbbm;
src/main/java/com/bsth/websocket/handler/RealControlSocketHandler.java
@@ -3,6 +3,7 @@ package com.bsth.websocket.handler; @@ -3,6 +3,7 @@ package com.bsth.websocket.handler;
3 import java.io.IOException; 3 import java.io.IOException;
4 import java.util.ArrayList; 4 import java.util.ArrayList;
5 import java.util.HashMap; 5 import java.util.HashMap;
  6 +import java.util.Iterator;
6 import java.util.List; 7 import java.util.List;
7 import java.util.Map; 8 import java.util.Map;
8 import java.util.Set; 9 import java.util.Set;
@@ -83,7 +84,7 @@ public class RealControlSocketHandler implements WebSocketHandler { @@ -83,7 +84,7 @@ public class RealControlSocketHandler implements WebSocketHandler {
83 default: 84 default:
84 break; 85 break;
85 } 86 }
86 - System.out.println(msg); 87 + logger.info(msg.getPayload().toString());
87 } 88 }
88 89
89 @Override 90 @Override
@@ -145,22 +146,23 @@ public class RealControlSocketHandler implements WebSocketHandler { @@ -145,22 +146,23 @@ public class RealControlSocketHandler implements WebSocketHandler {
145 * @param message 146 * @param message
146 */ 147 */
147 public synchronized void sendMessageToLine(String lineCode, String msg) { 148 public synchronized void sendMessageToLine(String lineCode, String msg) {
148 - //Set<String> uids = BasicData.lineCode2SocketUserMap.get(lineCode);  
149 - //if(null == uids || uids.size() == 0)  
150 - // return;  
151 149
152 TextMessage message = new TextMessage(msg.getBytes()); 150 TextMessage message = new TextMessage(msg.getBytes());
153 151
154 - List<WebSocketSession> sessList = listenMap.get(lineCode); 152 + Iterator<WebSocketSession> iterator = listenMap.get(lineCode).iterator();
155 153
156 - for (WebSocketSession user : sessList) { 154 + WebSocketSession user;
  155 + while(iterator.hasNext()){
  156 + user = iterator.next();
157 try { 157 try {
158 if (user.isOpen()) { 158 if (user.isOpen()) {
159 user.sendMessage(message); 159 user.sendMessage(message);
160 } 160 }
161 - } catch (IOException e) { 161 + } catch (Exception e) {
  162 + logger.error("sendMessageToLine error ...."+msg);
162 logger.error("sendMessageToLine error ....", e); 163 logger.error("sendMessageToLine error ....", e);
163 } 164 }
  165 +
164 } 166 }
165 } 167 }
166 } 168 }
src/main/resources/static/assets/img/bg_9b9dcb65ff.png

17.4 KB | W: | H:

5.9 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
src/main/resources/static/real_control_v2/css/line_schedule.css
@@ -706,3 +706,26 @@ input.i-cbox[type=checkbox]{ @@ -706,3 +706,26 @@ input.i-cbox[type=checkbox]{
706 .sch-tzrc-table.ct_table>.ct_table_body dl.context-menu-active{ 706 .sch-tzrc-table.ct_table>.ct_table_body dl.context-menu-active{
707 background: #e6e6e6; 707 background: #e6e6e6;
708 } 708 }
  709 +
  710 +.search_sch_panel{
  711 + float: right;
  712 +}
  713 +
  714 +.search_sch_panel .uk-form input[type=text]{
  715 + width: 80px;
  716 + background: #fafafa;
  717 + border: 0;
  718 + border-bottom: 1px solid #ddd;
  719 + font-size: 14px;
  720 + height: 20px;
  721 + transition: all .3s ease;
  722 +}
  723 +
  724 +.search_sch_panel .uk-form input.active[type=text]{
  725 + width: 130px;
  726 +}
  727 +
  728 +.search_sch_panel .uk-form input[type=text]::-webkit-input-placeholder{
  729 + font-size: 12px;
  730 + color: #cecece;
  731 +}
src/main/resources/static/real_control_v2/css/sch_autocomp_result.css 0 → 100644
  1 +.uk-autocomplete.sch-search-autocom .uk-dropdown {
  2 + width: 260px;
  3 + max-height: 500px;
  4 + overflow: auto;
  5 +}
  6 +
  7 +.sch-search-results>li {
  8 + position: relative;
  9 + /*line-height: 18px;*/
  10 +}
  11 +
  12 +.sch-search-results>li.uk-active small {
  13 + color: #ebeaea;
  14 +}
  15 +
  16 +.sch-search-results small {
  17 + /*display: block;*/
  18 + color: #9b9797;
  19 + margin-left: 9px;
  20 +}
  21 +
  22 +.sch-search-results small.search-result-desc {
  23 + white-space: nowrap;
  24 + overflow: hidden;
  25 + display: block;
  26 + text-overflow: ellipsis;
  27 + margin-left: 0;
  28 +}
  29 +
  30 +
  31 +/*.sch-search-results div.exec_sch_badge {
  32 + position: absolute;
  33 + top: 8px;
  34 + right: 3px;
  35 + background: #96f396;
  36 + text-indent: 0;
  37 + padding: 0 3px;
  38 + border-radius: 5px;
  39 + color: #7b5d5d;
  40 +}*/
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
@@ -7,6 +7,16 @@ @@ -7,6 +7,16 @@
7 {{else}} 7 {{else}}
8 下行/{{line.endStationName}} 8 下行/{{line.endStationName}}
9 {{/if}} 9 {{/if}}
  10 + <!-- <div class="search_sch_panel">
  11 + <form class="uk-form">
  12 + <div class="uk-autocomplete sch-search-autocom">
  13 + <div class="uk-form-icon">
  14 + <i class="uk-icon-search"></i>
  15 + <input type="text" placeholder="search">
  16 + </div>
  17 + </div>
  18 + </form>
  19 + </div> -->
10 </h3> 20 </h3>
11 <div class="schedule-body"> 21 <div class="schedule-body">
12 <div class="ct_table_wrap"> 22 <div class="ct_table_wrap">
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
@@ -10,7 +10,7 @@ var gb_schedule_table = (function() { @@ -10,7 +10,7 @@ var gb_schedule_table = (function() {
10 return s1.dfsjT - s2.dfsjT; 10 return s1.dfsjT - s2.dfsjT;
11 } 11 }
12 12
13 - var show = function() { 13 + var show = function(cb) {
14 //从服务器获取班次数据 14 //从服务器获取班次数据
15 $.get('/realSchedule/lines', { 15 $.get('/realSchedule/lines', {
16 lines: gb_data_basic.line_idx 16 lines: gb_data_basic.line_idx
@@ -63,6 +63,8 @@ var gb_schedule_table = (function() { @@ -63,6 +63,8 @@ var gb_schedule_table = (function() {
63 gb_ct_table.enableSort($('.ct_table', content), reset_seq_no, gb_schedule_table_dbclick.init); 63 gb_ct_table.enableSort($('.ct_table', content), reset_seq_no, gb_schedule_table_dbclick.init);
64 //dbclick event 64 //dbclick event
65 gb_schedule_table_dbclick.init(); 65 gb_schedule_table_dbclick.init();
  66 +
  67 + cb&&cb();
66 }); 68 });
67 } 69 }
68 70
@@ -189,15 +191,20 @@ var gb_schedule_table = (function() { @@ -189,15 +191,20 @@ var gb_schedule_table = (function() {
189 drag_strat = null; 191 drag_strat = null;
190 }).on('mouseover', seq_nos, function() { 192 }).on('mouseover', seq_nos, function() {
191 if (drag_strat) { 193 if (drag_strat) {
192 - var drag_end = parseInt($(this).text()), 194 + var e = parseInt($(this).text()),
193 dls = $(this).parents('.ct_table_body').find('dl'); 195 dls = $(this).parents('.ct_table_body').find('dl');
194 196
195 reset_drag_active_all(this); 197 reset_drag_active_all(this);
196 - if (drag_end - drag_strat <= 1)  
197 - return;  
198 -  
199 - for (var i = drag_strat; i < drag_end; i++)  
200 - $(dls[i]).addClass('drag-active'); 198 + //向上选中
  199 + if(e <= drag_strat){
  200 + for (var i = drag_strat; i > e-2; i--)
  201 + $(dls[i]).addClass('drag-active');
  202 + }
  203 + //向下选中
  204 + else{
  205 + for (var j = drag_strat; j < e; j++)
  206 + $(dls[j]).addClass('drag-active');
  207 + }
201 } 208 }
202 }).on('click', seq_nos, function() { 209 }).on('click', seq_nos, function() {
203 reset_relevance_active(this); 210 reset_relevance_active(this);
@@ -278,7 +285,7 @@ var gb_schedule_table = (function() { @@ -278,7 +285,7 @@ var gb_schedule_table = (function() {
278 //计算应发未发数量 285 //计算应发未发数量
279 var calc_yfwf_num = function(lineCode){ 286 var calc_yfwf_num = function(lineCode){
280 287
281 - var schArr=line2Schedule[lineCode] 288 + var schArr=gb_common.get_vals(line2Schedule[lineCode]).sort(schedule_sort)
282 ,yfwf_num=0 289 ,yfwf_num=0
283 ,t = new Date().valueOf(); 290 ,t = new Date().valueOf();
284 291
src/main/resources/static/real_control_v2/js/line_schedule/search.js 0 → 100644
  1 +/** 班次搜索 */
  2 +var gb_sch_search = (function() {
  3 +
  4 + //搜索结果模板,和art-template冲突。 用字符串渲染
  5 + var result_template = '<script type="text/autocomplete">' +
  6 + ' <ul class="uk-nav uk-nav-autocomplete uk-autocomplete-results sch-search-results">' +
  7 + ' {{~items}}' +
  8 + ' <li data-value="{{ $item.value }}">' +
  9 + ' <a>' +
  10 + ' {{ $item.value }}' +
  11 + ' <small >执行班次 07:00</small>' +
  12 + ' <small class="search-result-desc">{{{ $item.desc }}}</small>' +
  13 + ' </a>' +
  14 + ' </li>' +
  15 + ' {{/items}}' +
  16 + ' </ul>' +
  17 + '</script>';
  18 +
  19 + var ips = '.search_sch_panel input',
  20 + _input, schArr, lineCode, group_cars;
  21 + $(document)
  22 + .on('focus', ips, function() {
  23 + $(this).addClass('active');
  24 + lineCode = $(this).parents('li.line_schedule').data('id');
  25 + schArr = gb_common.get_vals(gb_schedule_table.findScheduleByLine(lineCode));
  26 +
  27 + group_cars = gb_common.groupBy(schArr, 'clZbh');
  28 + _input = $(this);
  29 + })
  30 + .on('blur', ips, function() {
  31 + if ($(this).val() == '')
  32 + $(this).removeClass('active');
  33 + });
  34 +
  35 + var elements = '.search_sch_panel .sch-search-autocom';
  36 + var init = function() {
  37 + $(elements).each(function() {
  38 + $(this).append(result_template);
  39 + constructor(this);
  40 + });
  41 + };
  42 +
  43 + var constructor = function(e) {
  44 + UIkit.autocomplete(e, {
  45 + minLength: 1,
  46 + delay: 50,
  47 + source: autocomplete_source
  48 + }).on('selectitem.uk.autocomplete', selectitem);
  49 + }
  50 +
  51 + var autocomplete_source = function(release) {
  52 + var rs = [],
  53 + v = _input.val().toUpperCase();
  54 + for (var car in group_cars) {
  55 + if (car.indexOf(v) != -1)
  56 + rs.push({
  57 + value: car,
  58 + desc: '应发未发:0,已完成 8 个班次'
  59 + });
  60 + }
  61 +
  62 + console.log(rs);
  63 + release && release(rs);
  64 + }
  65 +
  66 + var selectitem = function(event, data, acobject){
  67 + var cont='li.line_schedule[data-id='+lineCode+']'
  68 + ,tbodys=$('.line-schedule-table .ct_table_body', cont);
  69 +
  70 + $('.sch-search-autocom input', cont).val(data.value).addClass('active');
  71 + console.log(tbodys);
  72 + }
  73 +
  74 + return {
  75 + init: init
  76 + };
  77 +})();
src/main/resources/static/real_control_v2/js/main.js
@@ -35,7 +35,10 @@ var gb_main_ep = new EventProxy(), @@ -35,7 +35,10 @@ var gb_main_ep = new EventProxy(),
35 35
36 //render schedule table 36 //render schedule table
37 eq.once('render-sch-table', function() { 37 eq.once('render-sch-table', function() {
38 - gb_schedule_table.show(); 38 + gb_schedule_table.show(function(){
  39 + //搜索框
  40 + //gb_sch_search.init();
  41 + });
39 42
40 //嵌入地图页面 43 //嵌入地图页面
41 $('li.map-panel','#main-tab-content').load('/real_control_v2/mapmonitor/real_monitor/real.html'); 44 $('li.map-panel','#main-tab-content').load('/real_control_v2/mapmonitor/real_monitor/real.html');
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
@@ -9,14 +9,7 @@ var gb_sch_websocket = (function() { @@ -9,14 +9,7 @@ var gb_sch_websocket = (function() {
9 9
10 schSock.onopen = function(e) { 10 schSock.onopen = function(e) {
11 console.log('webSocket[realcontrol] onopen'); 11 console.log('webSocket[realcontrol] onopen');
12 - setTimeout(function() {  
13 - //注册线路监听  
14 - var data = {  
15 - operCode: 'register_line',  
16 - idx: gb_data_basic.line_idx  
17 - }  
18 - schSock.send(JSON.stringify(data));  
19 - }, 500); 12 + setTimeout(regListen, 500);
20 }; 13 };
21 //接收消息 14 //接收消息
22 schSock.onmessage = function(e) { 15 schSock.onmessage = function(e) {
@@ -28,9 +21,22 @@ var gb_sch_websocket = (function() { @@ -28,9 +21,22 @@ var gb_sch_websocket = (function() {
28 } 21 }
29 }; 22 };
30 23
  24 + function regListen (){
  25 + //注册线路监听
  26 + var data = {
  27 + operCode: 'register_line',
  28 + idx: gb_data_basic.line_idx
  29 + }
  30 + schSock.send(JSON.stringify(data));
  31 + console.log('regListen....', data);
  32 + }
  33 +
31 //断开 34 //断开
32 schSock.onclose = function(e) { 35 schSock.onclose = function(e) {
33 alert('和服务器连接断开....'); 36 alert('和服务器连接断开....');
  37 + console.log('和服务器连接断开....');
  38 + regListen();
  39 +
34 }; 40 };
35 41
36 //80协议上报 42 //80协议上报
src/main/resources/static/real_control_v2/main.html
@@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
18 <link rel="stylesheet" href="/real_control_v2/css/home.css" /> 18 <link rel="stylesheet" href="/real_control_v2/css/home.css" />
19 <!-- line style --> 19 <!-- line style -->
20 <link rel="stylesheet" href="/real_control_v2/css/line_schedule.css" /> 20 <link rel="stylesheet" href="/real_control_v2/css/line_schedule.css" />
  21 + <link rel="stylesheet" href="/real_control_v2/css/sch_autocomp_result.css" />
21 <!-- custom table --> 22 <!-- custom table -->
22 <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" /> 23 <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" />
23 <!-- jquery contextMenu style --> 24 <!-- jquery contextMenu style -->
@@ -118,6 +119,7 @@ @@ -118,6 +119,7 @@
118 <script src="/real_control_v2/js/line_schedule/sch_table.js"></script> 119 <script src="/real_control_v2/js/line_schedule/sch_table.js"></script>
119 <script src="/real_control_v2/js/line_schedule/context_menu.js"></script> 120 <script src="/real_control_v2/js/line_schedule/context_menu.js"></script>
120 <script src="/real_control_v2/js/line_schedule/dbclick.js"></script> 121 <script src="/real_control_v2/js/line_schedule/dbclick.js"></script>
  122 + <script src="/real_control_v2/js/line_schedule/search.js"></script>
121 123
122 <!-- 字典相关 --> 124 <!-- 字典相关 -->
123 <script src="/assets/js/dictionary.js"></script> 125 <script src="/assets/js/dictionary.js"></script>