Commit 6879321d9f3d3e20dc7051ad44a2984b8c6953ba

Authored by 游瑞烽
2 parents d281dd73 ef08a724

Merge branch 'pudong' of 192.168.168.201:panzhaov5/bsth_control into pudong

src/main/java/com/bsth/controller/schedule/TrafficManageController.java
... ... @@ -111,6 +111,15 @@ public class TrafficManageController {
111 111 }
112 112 }
113 113  
  114 + @RequestMapping(value = "/setJHBCByDate", method = RequestMethod.GET)
  115 + public String setJHBCByDate(@RequestParam("theDate") String theDate) throws Exception {
  116 + try {
  117 + return trManageService.setJHBC(theDate);
  118 + } catch (Exception exp) {
  119 + throw new Exception(exp.getCause());
  120 + }
  121 + }
  122 +
114 123 @RequestMapping(value = "/setSKB", method = RequestMethod.GET)
115 124 public String setSKB(@RequestParam("ids") String ids) throws Exception {
116 125 try {
... ...
src/main/java/com/bsth/data/gpsdata_v2/DataHandleProcess.java
... ... @@ -67,6 +67,8 @@ public class DataHandleProcess {
67 67 //数据均分给线程
68 68 ArrayListMultimap dataListMap = ArrayListMultimap.create();
69 69 int size = deviceList.size(), threadIndex = 0, threadSize = size / POOL_SIZE;
  70 + if(threadSize==0)
  71 + threadSize = size;
70 72 for (int i = 0; i < size; i++) {
71 73 if (i % threadSize == 0)
72 74 threadIndex++;
... ... @@ -78,7 +80,6 @@ public class DataHandleProcess {
78 80  
79 81 logger.info(JSON.toJSONString(ks));
80 82 for (Integer index : ks) {
81   - //logger.info("execute index: " + index);
82 83 threadPool.execute(new SignalHandleThread(dataListMap.get(index), count));
83 84 }
84 85  
... ... @@ -112,20 +113,17 @@ public class DataHandleProcess {
112 113 public void run() {
113 114 try {
114 115 Collections.sort(list, comp);
115   - //logger.info("sort end --" + Thread.currentThread().getName() + " -list size: " + list.size());
116   -
117 116 GpsEntity gps;
118 117 for(int i = 0,len = list.size(); i< len ;i ++){
119 118 gps = list.get(i);
120 119  
121   - //logger.info("run |--" + Thread.currentThread().getName() + " -i: " + i);
122 120 try {
123 121 if (StringUtils.isEmpty(gps.getNbbm()))
124 122 continue;
125 123 if (Math.abs(gps.getTimestamp() - gps.getServerTimestamp()) > 1000 * 60 * 20)
126 124 continue;
127 125  
128   - gpsStateProcess.process(gps);//状态处理
  126 + //gpsStateProcess.process(gps);//状态处理
129 127 stationInsideProcess.process(gps);//场站内外判定
130 128 reverseRouteProcess.process(gps);//反向路由处理
131 129 abnormalStateProcess.process(gps);//超速越界
... ... @@ -134,20 +132,14 @@ public class DataHandleProcess {
134 132 outStationProcess.process(gps);//出站
135 133  
136 134  
137   - //logger.info("put start --" + Thread.currentThread().getName() + " -i: " + i);
138 135 GpsCacheData.putGps(gps);//历史gps缓存
139   - //logger.info("put end --" + Thread.currentThread().getName() + " -i: " + i);
140 136 } catch (Throwable e) {
141 137 logger.error("", e);
142 138 }
143 139 }
144   -
145   - //logger.info("for end --" + Thread.currentThread().getName() + " -list size: " + list.size());
146   -
147 140 } finally {
148 141 if (count != null)
149 142 count.countDown();
150   - //logger.info(Thread.currentThread().getName() + " -countDown : " + count.getCount());
151 143 }
152 144 }
153 145 }
... ...
src/main/java/com/bsth/data/gpsdata_v2/handlers/InStationProcess.java
... ... @@ -164,19 +164,23 @@ public class InStationProcess {
164 164 //将gps转换成下一个班次走向的站内信号(应对只有一个站内信号 即 发出时)
165 165 transformUpDown(gps, next);
166 166  
167   - //下发调度指令
168   - DirectivePushQueue.put6002(next, doneSum, "到站@系统");
169   -
170 167 //套跑 -下发线路切换指令
171 168 if (null != next && !next.getXlBm().equals(sch.getXlBm())) {
172 169 gpsStatusManager.changeLine(next.getClZbh(), next.getXlBm(), "套跑@系统");
173 170 }
174 171  
  172 + /**
  173 + * 注意:
  174 + * 要先发运营指令,再发调度指令
  175 + */
  176 + if(null == next && gps.isService()){
  177 + nonService(sch, "结束@系统");//营运结束
  178 + }
  179 + //下发运营指令
  180 + DirectivePushQueue.put6003(next, "到站@系统");
175 181  
176   - if (null == next && gps.isService())
177   - nonService(sch, "结束@系统");//班次结束
178   - else if (null != next && dayOfSchedule.emptyService(next))
179   - nonService(sch, "空驶@系统");//下一班非营运
  182 + //下发调度指令
  183 + DirectivePushQueue.put6002(next, doneSum, "到站@系统", "");
180 184 }
181 185  
182 186 /**
... ...
src/main/java/com/bsth/data/gpsdata_v2/rfid/handle/RfidSignalHandle.java
... ... @@ -123,7 +123,7 @@ public class RfidSignalHandle {
123 123 logger.info("RFID; 车辆:" + nbbm + " 班次:" + sch.getDfsj() + "到终点, 时间:" + sch.getZdsjActual());
124 124  
125 125 //下发调度指令
126   - DirectivePushQueue.put6002(next, doneSum, "rfid@系统");
  126 + DirectivePushQueue.put6002(next, doneSum, "rfid@系统", "");
127 127  
128 128 //套跑 -下发线路切换指令
129 129 if(null != next && !next.getXlBm().equals(sch.getXlBm())){
... ...
src/main/java/com/bsth/data/gpsdata_v2/status_manager/gps_service_state/ServiceStateHandle.java
... ... @@ -11,6 +11,7 @@ import org.springframework.stereotype.Component;
11 11  
12 12 import java.util.Collection;
13 13 import java.util.concurrent.ConcurrentHashMap;
  14 +import java.util.concurrent.ConcurrentMap;
14 15  
15 16 /**
16 17 * 设备营运状态/上下行 处理
... ... @@ -19,7 +20,7 @@ import java.util.concurrent.ConcurrentHashMap;
19 20 @Component
20 21 public class ServiceStateHandle {
21 22  
22   - private static ConcurrentHashMap<String, StateBean> map;
  23 + private static ConcurrentMap<String, StateBean> map;
23 24  
24 25 @Autowired
25 26 DirectiveService directiveService;
... ...
src/main/java/com/bsth/data/msg_queue/DirectivePushQueue.java
1 1 package com.bsth.data.msg_queue;
2 2  
  3 +import com.bsth.data.schedule.DayOfSchedule;
3 4 import com.bsth.entity.realcontrol.ScheduleRealInfo;
4 5 import com.bsth.service.directive.DirectiveService;
5 6 import org.slf4j.Logger;
... ... @@ -9,7 +10,9 @@ import org.springframework.context.ApplicationContext;
9 10 import org.springframework.context.ApplicationContextAware;
10 11 import org.springframework.stereotype.Component;
11 12  
  13 +import java.util.concurrent.ConcurrentHashMap;
12 14 import java.util.concurrent.ConcurrentLinkedQueue;
  15 +import java.util.concurrent.ConcurrentMap;
13 16  
14 17 /**
15 18 * 到网关的指令推送队列 (系统发送的队列, 用户手动发送的不走这里)
... ... @@ -22,13 +25,23 @@ public class DirectivePushQueue implements ApplicationContextAware {
22 25 static DataPushThread thread;
23 26 static DirectiveService directiveService;
24 27 static long t;
25   - static final int IDLE_TIME = 1000 * 30;
  28 +
  29 + /**
  30 + * 下发运营指令6003的最小间隔时间
  31 + */
  32 + static final int MIN_SEND6003_SPACE = 1000 * 60;
  33 +
  34 + /**
  35 + * 车辆 ——> 上次下发6003的时间
  36 + */
  37 + static ConcurrentMap<String, Long> lastSend6003Map;
26 38  
27 39 static {
28 40 linkedList = new ConcurrentLinkedQueue<>();
  41 + lastSend6003Map = new ConcurrentHashMap<>();
29 42 }
30 43  
31   - public static void put6002(ScheduleRealInfo sch, int finish, String sender){
  44 + public static void put6002(ScheduleRealInfo sch, int finish, String sender, String txtPrefix){
32 45 if(null == sch)
33 46 return;
34 47 QueueData_Directive qd6002 = new QueueData_Directive();
... ... @@ -36,21 +49,36 @@ public class DirectivePushQueue implements ApplicationContextAware {
36 49 qd6002.setFinish(finish);
37 50 qd6002.setSender(sender);
38 51 qd6002.setCode("60_02");
  52 + qd6002.setTxtPrefix(txtPrefix);
39 53  
40 54 linkedList.add(qd6002);
41 55 }
42 56  
43 57 public static void put6003(String nbbm, int state, int upDown, String sender){
  58 + long t = System.currentTimeMillis();
  59 + if(lastSend6003Map.containsKey(nbbm)
  60 + && t - lastSend6003Map.get(nbbm) < MIN_SEND6003_SPACE)
  61 + return; //最短下发间隔
  62 +
44 63 QueueData_Directive qd6003 = new QueueData_Directive();
45 64 qd6003.setNbbm(nbbm);
46 65 qd6003.setState(state);
47 66 qd6003.setUpDown(upDown);
48   - //qd6003.setSch(sch);
49 67 qd6003.setSender(sender);
50   -
51 68 qd6003.setCode("60_03");
52 69  
53 70 linkedList.add(qd6003);
  71 + lastSend6003Map.put(nbbm, t);
  72 + }
  73 +
  74 + public static void put6003(ScheduleRealInfo sch, String sender){
  75 + if(null == sch)
  76 + return;
  77 + int state = 0;//营运状态
  78 + if(DayOfSchedule.emptyService(sch))
  79 + state = 1;
  80 +
  81 + put6003(sch.getClZbh(), state, Integer.parseInt(sch.getXlDir()), sender);
54 82 }
55 83  
56 84 public static void put64(String nbbm, String lineCode, String sender){
... ... @@ -64,10 +92,6 @@ public class DirectivePushQueue implements ApplicationContextAware {
64 92 linkedList.add(qd64);
65 93 }
66 94  
67   - public static boolean isIdle(){
68   - return System.currentTimeMillis() - t > IDLE_TIME;
69   - }
70   -
71 95 public static void start(){
72 96 if(thread != null){
73 97 thread.interrupt();
... ... @@ -108,7 +132,7 @@ public class DirectivePushQueue implements ApplicationContextAware {
108 132 code = qd.getCode();
109 133  
110 134 if(code.equals("60_02")){
111   - directiveService.send60Dispatch(qd.getSch(), qd.getFinish(), qd.getSender());
  135 + directiveService.send60Dispatch(qd.getSch(), qd.getFinish(), qd.getSender(), qd.getTxtPrefix());
112 136 log.info("directive 60_02 sch id: " + qd.getSch().getId());
113 137 }
114 138 else if(code.equals("60_03")){
... ...
src/main/java/com/bsth/data/msg_queue/QueueData_Directive.java
... ... @@ -29,6 +29,8 @@ public class QueueData_Directive {
29 29  
30 30 private String sender;
31 31  
  32 + private String txtPrefix;
  33 +
32 34  
33 35 public ScheduleRealInfo getSch() {
34 36 return sch;
... ... @@ -93,4 +95,12 @@ public class QueueData_Directive {
93 95 public void setLineCode(String lineCode) {
94 96 this.lineCode = lineCode;
95 97 }
  98 +
  99 + public String getTxtPrefix() {
  100 + return txtPrefix;
  101 + }
  102 +
  103 + public void setTxtPrefix(String txtPrefix) {
  104 + this.txtPrefix = txtPrefix;
  105 + }
96 106 }
... ...
src/main/java/com/bsth/data/pilot80/PilotReport.java
... ... @@ -93,7 +93,7 @@ public class PilotReport {
93 93 if (outSch.getJhlc() == null)
94 94 outSch = dayOfSchedule.next(outSch);
95 95 //下发调度指令
96   - DirectivePushQueue.put6002(outSch, dayOfSchedule.doneSum(nbbm), "请出@系统");
  96 + DirectivePushQueue.put6002(outSch, dayOfSchedule.doneSum(nbbm), "请出@系统", "同意出场;");
97 97 }
98 98 break;
99 99 }
... ...
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
... ... @@ -904,6 +904,7 @@ public class DayOfSchedule {
904 904 public List<ScheduleRealInfo> changeCar(ScheduleRealInfo sch, String newClZbh) {
905 905 List<ScheduleRealInfo> ups = new ArrayList<>();
906 906  
  907 + String oldClZbh = sch.getClZbh();
907 908 //变更相关映射信息
908 909 nbbmScheduleMap.remove(sch.getClZbh(), sch);
909 910  
... ... @@ -914,7 +915,7 @@ public class DayOfSchedule {
914 915  
915 916 //重新计算车辆当前执行班次
916 917 reCalcExecPlan(newClZbh);
917   - reCalcExecPlan(sch.getClZbh());
  918 + reCalcExecPlan(oldClZbh);
918 919 //重新分组计划用车
919 920 reCalcLineNbbms();
920 921 return ups;
... ... @@ -935,6 +936,8 @@ public class DayOfSchedule {
935 936 ScheduleRealInfo sch = schAttrCalculator.calcCurrentExecSch(list);
936 937 if(null != sch)
937 938 carExecutePlanMap.put(nbbm, sch);
  939 + else
  940 + carExecutePlanMap.remove(nbbm);
938 941 }
939 942  
940 943 /**
... ...
src/main/java/com/bsth/service/TrafficManageService.java
... ... @@ -70,6 +70,8 @@ public interface TrafficManageService {
70 70 */
71 71 String setJHBC();
72 72  
  73 + String setJHBC(String theDate);
  74 +
73 75 String setLD(String theDate);
74 76  
75 77 String setLD();
... ...
src/main/java/com/bsth/service/directive/DirectiveService.java
... ... @@ -32,7 +32,7 @@ public interface DirectiveService extends BaseService&lt;D60, Integer&gt;{
32 32 * @param @param finish 已完成的班次数
33 33 * @throws
34 34 */
35   - int send60Dispatch(ScheduleRealInfo sch, int finish, String sender);
  35 + int send60Dispatch(ScheduleRealInfo sch, int finish, String sender,String txtPrefix);
36 36  
37 37 /**
38 38 *
... ...
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
... ... @@ -26,6 +26,7 @@ import com.bsth.websocket.handler.RealControlSocketHandler;
26 26 import com.fasterxml.jackson.core.JsonProcessingException;
27 27 import com.fasterxml.jackson.databind.ObjectMapper;
28 28 import com.google.common.base.Splitter;
  29 +import org.apache.commons.lang3.StringEscapeUtils;
29 30 import org.apache.commons.lang3.StringUtils;
30 31 import org.joda.time.format.DateTimeFormat;
31 32 import org.joda.time.format.DateTimeFormatter;
... ... @@ -78,6 +79,8 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
78 79 public int send60Phrase(String nbbm, String text, String sender) {
79 80 D60 d60 = null;
80 81 try {
  82 + text = StringEscapeUtils.unescapeHtml4(text);
  83 + text = text.replaceAll("#", "");
81 84 d60 = create60Data(nbbm, text, (short) 0x00, null);
82 85 } catch (Exception e) {
83 86 logger.error("发送消息短语出现异常", e);
... ... @@ -105,7 +108,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
105 108 }
106 109  
107 110 @Override
108   - public int send60Dispatch(ScheduleRealInfo sch, int finish, String sender) {
  111 + public int send60Dispatch(ScheduleRealInfo sch, int finish, String sender, String txtPrefix) {
109 112 D60 d60 = null;
110 113 try {
111 114 if (sch.isDestroy()) {
... ... @@ -129,8 +132,15 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
129 132 long t = System.currentTimeMillis() + 1000 * 30,
130 133 alarmTime = sch.getDfsjT() < t?t:sch.getDfsjT();
131 134  
  135 + if(StringUtils.isNotEmpty(txtPrefix)){
  136 + text = txtPrefix + text;
  137 + }
  138 + text = StringEscapeUtils.unescapeHtml4(text);
  139 + int state = 0;//营运状态
  140 + if(dayOfSchedule.emptyService(sch))
  141 + state = 1;
132 142 d60 = new DirectiveCreator().createD60_01(sch.getClZbh(), text, Integer.parseInt(sch.getXlDir())
133   - , 0, new Date(alarmTime));
  143 + , state, new Date(alarmTime));
134 144  
135 145 d60.setLineCode(sch.getXlBm());
136 146 } catch (Exception e) {
... ... @@ -170,6 +180,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
170 180 dayOfDirectives.put60(d60, false);
171 181 d60Repository.save(d60);
172 182 }
  183 +
173 184 return code;
174 185 }
175 186  
... ... @@ -196,7 +207,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
196 207 ScheduleRealInfo sch = dayOfSchedule.get(id);
197 208 // 车辆已完成班次
198 209 int finish = dayOfSchedule.doneSum(sch.getClZbh());
199   - return send60Dispatch(sch, finish, sender);
  210 + return send60Dispatch(sch, finish, sender, "");
200 211 }
201 212  
202 213 @Override
... ...
src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
... ... @@ -812,10 +812,26 @@ public class TrafficManageServiceImpl implements TrafficManageService{
812 812 }
813 813  
814 814 /**
  815 + * 上传计划班次 指定日期 yyyy-MM-dd
  816 + * @param theDate
  817 + * @return
  818 + */
  819 + public String setJHBC(String theDate){
  820 + return uploadJHBC(theDate);
  821 + }
  822 +
  823 + /**
  824 + * 上传计划班次
  825 + * @return
  826 + */
  827 + public String setJHBC(){
  828 + return uploadJHBC(null);
  829 + }
  830 + /**
815 831 * 上传线路计划班次表
816 832 */
817   - @Override
818   - public String setJHBC() {
  833 +
  834 + private String uploadJHBC(String theDate) {
819 835 String result = "failure";
820 836 Line line;
821 837 StringBuffer sBuffer =new StringBuffer();
... ... @@ -825,8 +841,8 @@ public class TrafficManageServiceImpl implements TrafficManageService{
825 841 SchedulePlanInfo schedulePlanInfo;
826 842 String xlbm,zbh = "";
827 843 Long lp = 0L;
828   - // 取明天的日期
829   - String tomorrow = sdfnyr.format(DateUtils.addDays(new Date(), +1));
  844 + // 取得计划班次时间
  845 + String tomorrow = theDate == null ? sdfnyr.format(DateUtils.addDays(new Date(), +1)) : theDate;
830 846 // 查询所有班次
831 847 List<SchedulePlanInfo> schedulePlanList = schedulePlanInfoRepository.findLineScheduleBc(tomorrow);
832 848 int j = 0; // 初始化标识
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -2164,6 +2164,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2164 2164  
2165 2165 for (int i = 0; i < list.size(); i++) {
2166 2166 ScheduleRealInfo s=list.get(i);
  2167 + if(s.getBcType().equals("out")){
  2168 + s.setRemark("1");
  2169 + }else if(s.getBcType().equals("in")){
  2170 + s.setRemark("3");
  2171 + }else{
  2172 + s.setRemark("2");
  2173 + }
2167 2174 String[] fcsj= s.getFcsj().split(":");
2168 2175 Long fcsjL=Long.parseLong(fcsj[0])*60+Long.parseLong(fcsj[1]);
2169 2176  
... ... @@ -2190,7 +2197,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2190 2197 }
2191 2198 s.setFcsjT(fscjT);
2192 2199 }
2193   - Collections.sort(list, new ComparableReal());
  2200 + Collections.sort(list, new compareFcsjType());
2194 2201 for (int i = 0; i < list.size(); i++) {
2195 2202 ScheduleRealInfo s = list.get(i);
2196 2203 s.setAdjustExps(i + 1 + "");
... ... @@ -5245,3 +5252,12 @@ class AccountXlbm implements Comparator&lt;Map&lt;String, Object&gt;&gt;{
5245 5252 o2.get("xlNamePy").toString());
5246 5253 }
5247 5254 }
  5255 +
  5256 +class compareFcsjType implements Comparator<ScheduleRealInfo>{
  5257 + @Override
  5258 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  5259 + // TODO Auto-generated method stub
  5260 + return (o1.getFcsjT()+o1.getRemark()).compareTo(o2.getFcsjT()+o2.getRemark());
  5261 + }
  5262 +
  5263 +}
... ...
src/main/java/com/bsth/websocket/dto/WsScheduleRealInfo.java 0 → 100644
  1 +package com.bsth.websocket.dto;
  2 +
  3 +import com.bsth.entity.realcontrol.ChildTaskPlan;
  4 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  5 +
  6 +import javax.persistence.FetchType;
  7 +import javax.persistence.OneToMany;
  8 +import javax.persistence.Transient;
  9 +import java.util.ArrayList;
  10 +import java.util.HashSet;
  11 +import java.util.List;
  12 +import java.util.Set;
  13 +
  14 +/**
  15 + * 精简字段的实际排班 entity
  16 + * webSocket 传输用,去掉了页面不需要的一些字段
  17 + * Created by panzhao on 2017/11/14.
  18 + */
  19 +public class WsScheduleRealInfo {
  20 +
  21 + public static WsScheduleRealInfo getInstance(ScheduleRealInfo sch){
  22 + if(null == sch)
  23 + return null;
  24 + WsScheduleRealInfo wss = new WsScheduleRealInfo();
  25 + wss.id = sch.getId();
  26 + wss.scheduleDateStr = sch.getScheduleDateStr();
  27 + wss.realExecDate = sch.getRealExecDate();
  28 + wss.xlName = sch.getXlName();
  29 + wss.xlBm = sch.getXlBm();
  30 + wss.lpName = sch.getLpName();
  31 + wss.clZbh = sch.getClZbh();
  32 + wss.jGh = sch.getjGh();
  33 + wss.jName = sch.getjName();
  34 + wss.sGh = sch.getsGh();
  35 + wss.sName = sch.getsName();
  36 + wss.xlDir = sch.getXlDir();
  37 + wss.qdzCode = sch.getQdzCode();
  38 + wss.qdzName = sch.getQdzName();
  39 + wss.zdzCode = sch.getZdzCode();
  40 + wss.zdzName = sch.getZdzName();
  41 + wss.fcsj = sch.getFcsj();
  42 + wss.fcsjT = sch.getFcsjT();
  43 + wss.zdsj = sch.getZdsj();
  44 + wss.zdsjT = sch.getZdsjT();
  45 + wss.jhlc = sch.getJhlc();
  46 + wss.jhlcOrig = sch.getJhlcOrig();
  47 + wss.bcsj = sch.getBcsj();
  48 + wss.bcType = sch.getBcType();
  49 + wss.majorStationName = sch.getMajorStationName();
  50 + wss.fcsjActual = sch.getFcsjActual();
  51 + wss.fcsjActualTime = sch.getFcsjActualTime();
  52 + wss.zdsjActual = sch.getZdsjActual();
  53 + wss.zdsjActualTime = sch.getZdsjActualTime();
  54 + wss.status = sch.getStatus();
  55 + wss.adjustExps = sch.getAdjustExps();
  56 + wss.sflj = sch.isSflj();
  57 + wss.late = sch.isLate();
  58 + wss.late2 = sch.isLate2();
  59 + wss.lateMinute = sch.getLateMinute();
  60 + wss.remarks = sch.getRemarks();
  61 + wss.dfsj = sch.getDfsj();
  62 + wss.dfsjT = sch.getDfsjT();
  63 + wss.directiveState = sch.getDirectiveState();
  64 + wss.qdzArrDatejh = sch.getQdzArrDatejh();
  65 + wss.qdzArrDatesj = sch.getQdzArrDatesj();
  66 + wss.cTasks = sch.getcTasks();
  67 + wss.gsName = sch.getGsName();
  68 + wss.gsBm = sch.getGsBm();
  69 + wss.fgsName = sch.getFgsName();
  70 + wss.fgsBm = sch.getFgsBm();
  71 + wss.ccService = sch.isCcService();
  72 + return wss;
  73 + }
  74 +
  75 +
  76 + public static List<WsScheduleRealInfo> getMultiInstance(List<ScheduleRealInfo> list){
  77 + List<WsScheduleRealInfo> rs = new ArrayList<>();
  78 + for(ScheduleRealInfo sch : list){
  79 + rs.add(getInstance(sch));
  80 + }
  81 + return rs;
  82 + }
  83 +
  84 + /** 主键Id */
  85 + private Long id;
  86 +
  87 + /** 排班日期字符串 YYYY-MM-DD */
  88 + private String scheduleDateStr;
  89 +
  90 + /** 真实执行时间 yyyy-MM-dd */
  91 + private String realExecDate;
  92 +
  93 + /** 线路名称 */
  94 + private String xlName;
  95 + /** 线路编码 */
  96 + private String xlBm;
  97 +
  98 + /** 路牌名称 */
  99 + private String lpName;
  100 +
  101 + /** 车辆自编号 */
  102 + private String clZbh;
  103 +
  104 + /** 驾驶员工号 */
  105 + private String jGh;
  106 + /** 驾驶员名字 */
  107 + private String jName;
  108 + /** 售票员工号 */
  109 + private String sGh;
  110 + /** 售票员名字 */
  111 + private String sName;
  112 +
  113 + /** 线路方向 */
  114 + private String xlDir;
  115 + /** 起点站code*/
  116 + private String qdzCode;
  117 + /** 起点站名字 */
  118 + private String qdzName;
  119 +
  120 + /** 终点站code*/
  121 + private String zdzCode;
  122 + /** 终点站名字 */
  123 + private String zdzName;
  124 +
  125 + /** 计划发车时间(格式 HH:mm) */
  126 + private String fcsj;
  127 + /** 计划发车时间戳*/
  128 + @Transient
  129 + private Long fcsjT;
  130 +
  131 + /** 计划终点时间(格式 HH:mm) */
  132 + private String zdsj;
  133 + /** 计划终点时间戳*/
  134 + @Transient
  135 + private Long zdsjT;
  136 +
  137 + /** 计划里程 */
  138 + private Double jhlc;
  139 +
  140 + /** 原始计划里程 (原计调的数据) */
  141 + private Double jhlcOrig;
  142 + /** 班次历时 */
  143 + private Integer bcsj;
  144 +
  145 + /**
  146 + * 班次类型 TODO:正常班次、出场、进场、加油、区间班次、放空班次、放大站班次、两点间空驶
  147 + */
  148 + private String bcType;
  149 +
  150 + //放站班次 站点名称
  151 + private String majorStationName;
  152 +
  153 + /** 实际发车时间*/
  154 + private String fcsjActual;
  155 + /** 实际发车时间戳*/
  156 + @Transient
  157 + private Long fcsjActualTime;
  158 + /**实际终点时间 */
  159 + private String zdsjActual;
  160 + /** 实际终点时间戳*/
  161 + @Transient
  162 + private Long zdsjActualTime;
  163 +
  164 + /**班次状态 0 未执行 1 正在执行 2 已执行 -1 已烂班 */
  165 + private int status;
  166 +
  167 + private String adjustExps;
  168 +
  169 + /** 是否是临加班次 */
  170 + private boolean sflj;
  171 +
  172 + /** 是否误点 (应发未发)*/
  173 + @Transient
  174 + private boolean late;
  175 +
  176 + /** 是否误点 (应发未到) */
  177 + @Transient
  178 + private boolean late2;
  179 + /** 误点停靠时间 */
  180 + @Transient
  181 + private float lateMinute;
  182 +
  183 + /** 备注*/
  184 + private String remarks;
  185 +
  186 + /**待发时间(格式 HH:mm) */
  187 + private String dfsj;
  188 +
  189 + /**待发时间戳 */
  190 + @Transient
  191 + private Long dfsjT;
  192 +
  193 + /** 指令下发状态 60: 已发送, 100: 设备确认收到, 200:驾驶员确认 0:失败 */
  194 + private Integer directiveState = -1;
  195 +
  196 + /** 起点站计划到达时间 */
  197 + @Transient
  198 + private String qdzArrDatejh;
  199 +
  200 + /** 起点站实际到达时间 */
  201 + @Transient
  202 + private String qdzArrDatesj;
  203 +
  204 + /** 子任务 */
  205 + @OneToMany(fetch = FetchType.LAZY, mappedBy = "schedule")
  206 + private Set<ChildTaskPlan> cTasks = new HashSet<>();
  207 +
  208 + /** 关联的公司名称 */
  209 + private String gsName;
  210 + /** 关联的公司编码 */
  211 + private String gsBm;
  212 + /** 关联的分公司名称 */
  213 + private String fgsName;
  214 + /** 关联的分公司编码 */
  215 + private String fgsBm;
  216 +
  217 + /**
  218 + * 换车营运标记 true 表示该主任务由 【中途换车子任务】 级联生成
  219 + */
  220 + private boolean ccService;
  221 +
  222 + public Long getId() {
  223 + return id;
  224 + }
  225 +
  226 + public void setId(Long id) {
  227 + this.id = id;
  228 + }
  229 +
  230 + public String getScheduleDateStr() {
  231 + return scheduleDateStr;
  232 + }
  233 +
  234 + public void setScheduleDateStr(String scheduleDateStr) {
  235 + this.scheduleDateStr = scheduleDateStr;
  236 + }
  237 +
  238 + public String getRealExecDate() {
  239 + return realExecDate;
  240 + }
  241 +
  242 + public void setRealExecDate(String realExecDate) {
  243 + this.realExecDate = realExecDate;
  244 + }
  245 +
  246 + public String getXlName() {
  247 + return xlName;
  248 + }
  249 +
  250 + public void setXlName(String xlName) {
  251 + this.xlName = xlName;
  252 + }
  253 +
  254 + public String getXlBm() {
  255 + return xlBm;
  256 + }
  257 +
  258 + public void setXlBm(String xlBm) {
  259 + this.xlBm = xlBm;
  260 + }
  261 +
  262 + public String getLpName() {
  263 + return lpName;
  264 + }
  265 +
  266 + public void setLpName(String lpName) {
  267 + this.lpName = lpName;
  268 + }
  269 +
  270 + public String getClZbh() {
  271 + return clZbh;
  272 + }
  273 +
  274 + public void setClZbh(String clZbh) {
  275 + this.clZbh = clZbh;
  276 + }
  277 +
  278 + public String getjGh() {
  279 + return jGh;
  280 + }
  281 +
  282 + public void setjGh(String jGh) {
  283 + this.jGh = jGh;
  284 + }
  285 +
  286 + public String getjName() {
  287 + return jName;
  288 + }
  289 +
  290 + public void setjName(String jName) {
  291 + this.jName = jName;
  292 + }
  293 +
  294 + public String getsGh() {
  295 + return sGh;
  296 + }
  297 +
  298 + public void setsGh(String sGh) {
  299 + this.sGh = sGh;
  300 + }
  301 +
  302 + public String getsName() {
  303 + return sName;
  304 + }
  305 +
  306 + public void setsName(String sName) {
  307 + this.sName = sName;
  308 + }
  309 +
  310 + public String getXlDir() {
  311 + return xlDir;
  312 + }
  313 +
  314 + public void setXlDir(String xlDir) {
  315 + this.xlDir = xlDir;
  316 + }
  317 +
  318 + public String getQdzCode() {
  319 + return qdzCode;
  320 + }
  321 +
  322 + public void setQdzCode(String qdzCode) {
  323 + this.qdzCode = qdzCode;
  324 + }
  325 +
  326 + public String getQdzName() {
  327 + return qdzName;
  328 + }
  329 +
  330 + public void setQdzName(String qdzName) {
  331 + this.qdzName = qdzName;
  332 + }
  333 +
  334 + public String getZdzCode() {
  335 + return zdzCode;
  336 + }
  337 +
  338 + public void setZdzCode(String zdzCode) {
  339 + this.zdzCode = zdzCode;
  340 + }
  341 +
  342 + public String getZdzName() {
  343 + return zdzName;
  344 + }
  345 +
  346 + public void setZdzName(String zdzName) {
  347 + this.zdzName = zdzName;
  348 + }
  349 +
  350 + public String getFcsj() {
  351 + return fcsj;
  352 + }
  353 +
  354 + public void setFcsj(String fcsj) {
  355 + this.fcsj = fcsj;
  356 + }
  357 +
  358 + public Long getFcsjT() {
  359 + return fcsjT;
  360 + }
  361 +
  362 + public void setFcsjT(Long fcsjT) {
  363 + this.fcsjT = fcsjT;
  364 + }
  365 +
  366 + public String getZdsj() {
  367 + return zdsj;
  368 + }
  369 +
  370 + public void setZdsj(String zdsj) {
  371 + this.zdsj = zdsj;
  372 + }
  373 +
  374 + public Long getZdsjT() {
  375 + return zdsjT;
  376 + }
  377 +
  378 + public void setZdsjT(Long zdsjT) {
  379 + this.zdsjT = zdsjT;
  380 + }
  381 +
  382 + public Double getJhlc() {
  383 + return jhlc;
  384 + }
  385 +
  386 + public void setJhlc(Double jhlc) {
  387 + this.jhlc = jhlc;
  388 + }
  389 +
  390 + public Double getJhlcOrig() {
  391 + return jhlcOrig;
  392 + }
  393 +
  394 + public void setJhlcOrig(Double jhlcOrig) {
  395 + this.jhlcOrig = jhlcOrig;
  396 + }
  397 +
  398 + public Integer getBcsj() {
  399 + return bcsj;
  400 + }
  401 +
  402 + public void setBcsj(Integer bcsj) {
  403 + this.bcsj = bcsj;
  404 + }
  405 +
  406 + public String getBcType() {
  407 + return bcType;
  408 + }
  409 +
  410 + public void setBcType(String bcType) {
  411 + this.bcType = bcType;
  412 + }
  413 +
  414 + public String getMajorStationName() {
  415 + return majorStationName;
  416 + }
  417 +
  418 + public void setMajorStationName(String majorStationName) {
  419 + this.majorStationName = majorStationName;
  420 + }
  421 +
  422 + public String getFcsjActual() {
  423 + return fcsjActual;
  424 + }
  425 +
  426 + public void setFcsjActual(String fcsjActual) {
  427 + this.fcsjActual = fcsjActual;
  428 + }
  429 +
  430 + public Long getFcsjActualTime() {
  431 + return fcsjActualTime;
  432 + }
  433 +
  434 + public void setFcsjActualTime(Long fcsjActualTime) {
  435 + this.fcsjActualTime = fcsjActualTime;
  436 + }
  437 +
  438 + public String getZdsjActual() {
  439 + return zdsjActual;
  440 + }
  441 +
  442 + public void setZdsjActual(String zdsjActual) {
  443 + this.zdsjActual = zdsjActual;
  444 + }
  445 +
  446 + public Long getZdsjActualTime() {
  447 + return zdsjActualTime;
  448 + }
  449 +
  450 + public void setZdsjActualTime(Long zdsjActualTime) {
  451 + this.zdsjActualTime = zdsjActualTime;
  452 + }
  453 +
  454 + public int getStatus() {
  455 + return status;
  456 + }
  457 +
  458 + public void setStatus(int status) {
  459 + this.status = status;
  460 + }
  461 +
  462 + public String getAdjustExps() {
  463 + return adjustExps;
  464 + }
  465 +
  466 + public void setAdjustExps(String adjustExps) {
  467 + this.adjustExps = adjustExps;
  468 + }
  469 +
  470 + public boolean isSflj() {
  471 + return sflj;
  472 + }
  473 +
  474 + public void setSflj(boolean sflj) {
  475 + this.sflj = sflj;
  476 + }
  477 +
  478 + public boolean isLate() {
  479 + return late;
  480 + }
  481 +
  482 + public void setLate(boolean late) {
  483 + this.late = late;
  484 + }
  485 +
  486 + public boolean isLate2() {
  487 + return late2;
  488 + }
  489 +
  490 + public void setLate2(boolean late2) {
  491 + this.late2 = late2;
  492 + }
  493 +
  494 + public float getLateMinute() {
  495 + return lateMinute;
  496 + }
  497 +
  498 + public void setLateMinute(float lateMinute) {
  499 + this.lateMinute = lateMinute;
  500 + }
  501 +
  502 + public String getRemarks() {
  503 + return remarks;
  504 + }
  505 +
  506 + public void setRemarks(String remarks) {
  507 + this.remarks = remarks;
  508 + }
  509 +
  510 + public String getDfsj() {
  511 + return dfsj;
  512 + }
  513 +
  514 + public void setDfsj(String dfsj) {
  515 + this.dfsj = dfsj;
  516 + }
  517 +
  518 + public Long getDfsjT() {
  519 + return dfsjT;
  520 + }
  521 +
  522 + public void setDfsjT(Long dfsjT) {
  523 + this.dfsjT = dfsjT;
  524 + }
  525 +
  526 + public Integer getDirectiveState() {
  527 + return directiveState;
  528 + }
  529 +
  530 + public void setDirectiveState(Integer directiveState) {
  531 + this.directiveState = directiveState;
  532 + }
  533 +
  534 + public String getQdzArrDatejh() {
  535 + return qdzArrDatejh;
  536 + }
  537 +
  538 + public void setQdzArrDatejh(String qdzArrDatejh) {
  539 + this.qdzArrDatejh = qdzArrDatejh;
  540 + }
  541 +
  542 + public String getQdzArrDatesj() {
  543 + return qdzArrDatesj;
  544 + }
  545 +
  546 + public void setQdzArrDatesj(String qdzArrDatesj) {
  547 + this.qdzArrDatesj = qdzArrDatesj;
  548 + }
  549 +
  550 + public Set<ChildTaskPlan> getcTasks() {
  551 + return cTasks;
  552 + }
  553 +
  554 + public void setcTasks(Set<ChildTaskPlan> cTasks) {
  555 + this.cTasks = cTasks;
  556 + }
  557 +
  558 + public String getGsName() {
  559 + return gsName;
  560 + }
  561 +
  562 + public void setGsName(String gsName) {
  563 + this.gsName = gsName;
  564 + }
  565 +
  566 + public String getGsBm() {
  567 + return gsBm;
  568 + }
  569 +
  570 + public void setGsBm(String gsBm) {
  571 + this.gsBm = gsBm;
  572 + }
  573 +
  574 + public String getFgsName() {
  575 + return fgsName;
  576 + }
  577 +
  578 + public void setFgsName(String fgsName) {
  579 + this.fgsName = fgsName;
  580 + }
  581 +
  582 + public String getFgsBm() {
  583 + return fgsBm;
  584 + }
  585 +
  586 + public void setFgsBm(String fgsBm) {
  587 + this.fgsBm = fgsBm;
  588 + }
  589 +
  590 + public boolean isCcService() {
  591 + return ccService;
  592 + }
  593 +
  594 + public void setCcService(boolean ccService) {
  595 + this.ccService = ccService;
  596 + }
  597 +}
... ...
src/main/java/com/bsth/websocket/handler/SendUtils.java
... ... @@ -7,6 +7,7 @@ import com.bsth.data.gpsdata_v2.entity.GpsEntity;
7 7 import com.bsth.data.safe_driv.SafeDriv;
8 8 import com.bsth.entity.directive.D80;
9 9 import com.bsth.entity.realcontrol.ScheduleRealInfo;
  10 +import com.bsth.websocket.dto.WsScheduleRealInfo;
10 11 import com.fasterxml.jackson.core.JsonProcessingException;
11 12 import com.fasterxml.jackson.databind.ObjectMapper;
12 13 import org.slf4j.Logger;
... ... @@ -38,7 +39,7 @@ public class SendUtils{
38 39  
39 40 Map<String, Object> map = new HashMap<>();
40 41 map.put("fn", "faChe");
41   - map.put("t", sch);
  42 + map.put("t", WsScheduleRealInfo.getInstance(sch));
42 43 map.put("dataStr", sdf.format(new Date()));
43 44  
44 45 ObjectMapper mapper = new ObjectMapper();
... ... @@ -62,7 +63,7 @@ public class SendUtils{
62 63  
63 64 Map<String, Object> map = new HashMap<>();
64 65 map.put("fn", "refreshSch");
65   - map.put("ts", list);
  66 + map.put("ts", WsScheduleRealInfo.getMultiInstance(list));
66 67  
67 68 ObjectMapper mapper = new ObjectMapper();
68 69  
... ... @@ -82,8 +83,8 @@ public class SendUtils{
82 83  
83 84 Map<String, Object> map = new HashMap<>();
84 85 map.put("fn", "zhongDian");
85   - map.put("t", sch);
86   - map.put("nt", nextSch);
  86 + map.put("t", WsScheduleRealInfo.getInstance(sch));
  87 + map.put("nt", WsScheduleRealInfo.getInstance(nextSch));
87 88 map.put("finish", finish);
88 89 map.put("dataStr", sdf.format(new Date()));
89 90  
... ... @@ -123,7 +124,7 @@ public class SendUtils{
123 124  
124 125 Map<String, Object> map = new HashMap<>();
125 126 map.put("fn", "directive");
126   - map.put("t", sch);;
  127 + map.put("t", WsScheduleRealInfo.getInstance(sch));;
127 128  
128 129 ObjectMapper mapper = new ObjectMapper();
129 130  
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/directive_history.html
... ... @@ -17,7 +17,7 @@
17 17 <select name="dType">
18 18 <option value="-1">全部</option>
19 19 <option value="3">消息短语</option>
20   - <option value="0">调度指令</option>
  20 + <option value="0" selected>调度指令</option>
21 21 <option value="1">运营指令</option>
22 22 <option value="2">线路切换指令</option>
23 23 </select>
... ...
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v3/layout.html
... ... @@ -118,15 +118,14 @@
118 118 {{/if}}
119 119 </script>
120 120 <script id="pbv3_park_dropdown-temp" type="text/html">
121   - <li style="text-align: center;">
  121 + <div style="text-align: center;border-bottom: 1px solid #e2e2e2;padding-bottom: 9px;margin-bottom: 9px;">
122 122 <form class="uk-form" data-uk-margin>
123 123 <div class="uk-form-icon">
124 124 <i class="uk-icon-search"></i>
125   - <input type="text" placeholder="搜索" >
  125 + <input type="text" placeholder="搜索" class="park_list_search_input">
126 126 </div>
127 127 </form>
128   - </li>
129   - <li class="uk-nav-divider"></li>
  128 + </div>
130 129 {{each list as p i}}
131 130 <li data-code="{{p.parkCode}}" ><a>{{p.parkName}}</a></li>
132 131 {{/each}}
... ...
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v3/right.html
... ... @@ -649,22 +649,37 @@
649 649 (function (lineCode) {
650 650 //从地图模块获取停车场数据
651 651 var parks = gb_map_spatial_data.carparkArray();
652   - /* //将线路标准停车场排在第一个
653   - var information = gb_data_basic.getLineInformation(lineCode);
654   - if(information){
655   - var index;
656   - for(var i = 0,p; p=parks[i++];){
657   - if(p.parkCode == information.carPark){
658   - index = i - 1;
659   - break;
660   - }
661   - }
662   - parks[index] = parks.splice(0, 1 , parks[index])[0];
663   - }*/
664 652 //渲染
665 653 var htmlStr = template('pbv3_park_dropdown-temp', {list: parks});
666 654 $('.buffer_area_form .parks_list', rightWrap).html(htmlStr);
667 655  
  656 + console.log('parksparks', parks);
  657 + //拼音映射
  658 + var searchData=[];
  659 + for(var i=0,p;p=parks[i++];){
  660 + searchData.push({
  661 + code: p.parkCode,
  662 + name: p.parkName,
  663 + fullChars: pinyin.getFullChars(p.parkName).toUpperCase(),
  664 + camelChars: pinyin.getCamelChars(p.parkName).toUpperCase()
  665 + })
  666 + }
  667 + //搜索
  668 + var listWrap = $('.buffer_area_form .parks_list', rightWrap);
  669 + $('.park_list_search_input', rightWrap).on('input', function () {
  670 + var v = $(this).val();
  671 + if(!v){
  672 + $('li', listWrap).show();
  673 + return;
  674 + }
  675 + v = v.toUpperCase();
  676 + $('li', listWrap).hide();
  677 + for(var i=0,obj;obj=searchData[i++];){
  678 + if(obj.name.indexOf(v)!=-1 || obj.fullChars.indexOf(v)!=-1 || obj.camelChars.indexOf(v)!=-1)
  679 + $('li[data-code="'+obj.code+'"]', listWrap).show();
  680 + }
  681 + });
  682 +
668 683 //停车场点击
669 684 $('.buffer_area_form .parks_list>li', rightWrap).on('click', function () {
670 685 var code = $(this).data('code');
... ...