Commit 0250100648c46e5047ec9dc3c6fd12931722191c

Authored by 徐烜
2 parents 904a133e dacda227

Merge branch 'minhang' of http://222.66.0.204:8090//panzhaov5/bsth_control into minhang

src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java
@@ -260,7 +260,7 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -260,7 +260,7 @@ public class InOutStationSignalHandle extends SignalHandle{
260 //如果当前班次是出场,并且进的是下一个班次的终点 260 //如果当前班次是出场,并且进的是下一个班次的终点
261 if(sch.getBcType().equals("out")){ 261 if(sch.getBcType().equals("out")){
262 ScheduleRealInfo next = dayOfSchedule.next(sch); 262 ScheduleRealInfo next = dayOfSchedule.next(sch);
263 - if(next.getZdzCode().equals(gps.getStopNo())){ 263 + if(next != null && next.getZdzCode().equals(gps.getStopNo())){
264 List<ScheduleRealInfo> halfList = dayOfSchedule.findByNbbm(sch.getClZbh()); 264 List<ScheduleRealInfo> halfList = dayOfSchedule.findByNbbm(sch.getClZbh());
265 //和当前进站信号最匹配的一个班次 265 //和当前进站信号最匹配的一个班次
266 ScheduleRealInfo nearSch = nearScheduleByGpsIn(gps, halfList); 266 ScheduleRealInfo nearSch = nearScheduleByGpsIn(gps, halfList);
src/main/java/com/bsth/data/safe_driv/SafeDriv.java
1 -package com.bsth.data.safe_driv;  
2 -  
3 -/**  
4 - * 安全驾驶  
5 - * Created by panzhao on 2017/4/6.  
6 - */  
7 -public class SafeDriv {  
8 -  
9 - /**  
10 - * 时间  
11 - * 2017-04-06 08:00:00.0  
12 - */  
13 - private String Startime;  
14 -  
15 - /**  
16 - * 时间戳  
17 - */  
18 - private Long ts;  
19 -  
20 - /**  
21 - * 设备编号  
22 - */  
23 - private String sbbh;  
24 -  
25 - /**  
26 - * 线路名称  
27 - */  
28 - private String xlmc;  
29 -  
30 - /**  
31 - * 车辆自编号  
32 - */  
33 - private String clzbh;  
34 -  
35 - /**  
36 - * 车牌号  
37 - */  
38 - private String cph;  
39 -  
40 - /**  
41 - * 检查属性  
42 - * 双脱手 0 单脱手 1 其他为0都是异常  
43 - */  
44 - private String jctype;  
45 -  
46 - /**  
47 - * 异常种类  
48 - * 手部检测: 1  
49 - * 脸部检测: 5  
50 - * 摄像头检测: 2  
51 - * 安全带检测: 3  
52 - * 袖章检测: 4  
53 - */  
54 - private String yczltype;  
55 -  
56 - @Override  
57 - public int hashCode() {  
58 - return ("safe_" + (this.getClzbh() + this.getStartime())).hashCode();  
59 - }  
60 -  
61 - @Override  
62 - public boolean equals(Object obj) {  
63 - SafeDriv s2 = (SafeDriv)obj;  
64 - return (this.getClzbh() + this.getStartime()).equals(s2.getClzbh() + s2.getStartime());  
65 - }  
66 -  
67 - public String getStartime() {  
68 - return Startime;  
69 - }  
70 -  
71 - public void setStartime(String startime) {  
72 - Startime = startime;  
73 - }  
74 -  
75 - public String getSbbh() {  
76 - return sbbh;  
77 - }  
78 -  
79 - public void setSbbh(String sbbh) {  
80 - this.sbbh = sbbh;  
81 - }  
82 -  
83 - public String getXlmc() {  
84 - return xlmc;  
85 - }  
86 -  
87 - public void setXlmc(String xlmc) {  
88 - this.xlmc = xlmc;  
89 - }  
90 -  
91 - public String getClzbh() {  
92 - return clzbh;  
93 - }  
94 -  
95 - public void setClzbh(String clzbh) {  
96 - this.clzbh = clzbh;  
97 - }  
98 -  
99 - public String getCph() {  
100 - return cph;  
101 - }  
102 -  
103 - public void setCph(String cph) {  
104 - this.cph = cph;  
105 - }  
106 -  
107 - public String getJctype() {  
108 - return jctype;  
109 - }  
110 -  
111 - public void setJctype(String jctype) {  
112 - this.jctype = jctype;  
113 - }  
114 -  
115 - public String getYczltype() {  
116 - return yczltype;  
117 - }  
118 -  
119 - public void setYczltype(String yczltype) {  
120 - this.yczltype = yczltype;  
121 - }  
122 -  
123 - public Long getTs() {  
124 - return ts;  
125 - }  
126 -  
127 - public void setTs(Long ts) {  
128 - this.ts = ts;  
129 - }  
130 -} 1 +package com.bsth.data.safe_driv;
  2 +
  3 +/**
  4 + * 安全驾驶
  5 + * Created by panzhao on 2017/4/6.
  6 + */
  7 +public class SafeDriv {
  8 +
  9 + /**
  10 + * 时间
  11 + * 2017-04-06 08:00:00.0
  12 + */
  13 + private String Startime;
  14 +
  15 + /**
  16 + * 时间戳
  17 + */
  18 + private Long ts;
  19 +
  20 + /**
  21 + * 设备编号
  22 + */
  23 + private String sbbh;
  24 +
  25 + /**
  26 + * 线路名称
  27 + */
  28 + private String xlmc;
  29 +
  30 + /**
  31 + * 车辆自编号
  32 + */
  33 + private String clzbh;
  34 +
  35 + /**
  36 + * 车牌号
  37 + */
  38 + private String cph;
  39 +
  40 + /**
  41 + * 检查属性
  42 + * 双脱手 0 单脱手 1 其他为0都是异常
  43 + */
  44 + private String jctype;
  45 +
  46 + /**
  47 + * 异常种类
  48 + * 手部检测: 1
  49 + * 脸部检测: 5
  50 + * 摄像头检测: 2
  51 + * 安全带检测: 3
  52 + * 袖章检测: 4
  53 + */
  54 + private String yczltype;
  55 +
  56 + @Override
  57 + public int hashCode() {
  58 + return ("safe_" + (this.getClzbh() + this.getStartime())).hashCode();
  59 + }
  60 +
  61 + @Override
  62 + public boolean equals(Object obj) {
  63 + SafeDriv s2 = (SafeDriv)obj;
  64 + return (this.getClzbh() + this.getStartime()).equals(s2.getClzbh() + s2.getStartime());
  65 + }
  66 +
  67 + public String getStartime() {
  68 + return Startime;
  69 + }
  70 +
  71 + public void setStartime(String startime) {
  72 + Startime = startime;
  73 + }
  74 +
  75 + public String getSbbh() {
  76 + return sbbh;
  77 + }
  78 +
  79 + public void setSbbh(String sbbh) {
  80 + this.sbbh = sbbh;
  81 + }
  82 +
  83 + public String getXlmc() {
  84 + return xlmc;
  85 + }
  86 +
  87 + public void setXlmc(String xlmc) {
  88 + this.xlmc = xlmc;
  89 + }
  90 +
  91 + public String getClzbh() {
  92 + return clzbh;
  93 + }
  94 +
  95 + public void setClzbh(String clzbh) {
  96 + this.clzbh = clzbh;
  97 + }
  98 +
  99 + public String getCph() {
  100 + return cph;
  101 + }
  102 +
  103 + public void setCph(String cph) {
  104 + this.cph = cph;
  105 + }
  106 +
  107 + public String getJctype() {
  108 + return jctype;
  109 + }
  110 +
  111 + public void setJctype(String jctype) {
  112 + this.jctype = jctype;
  113 + }
  114 +
  115 + public String getYczltype() {
  116 + return yczltype;
  117 + }
  118 +
  119 + public void setYczltype(String yczltype) {
  120 + this.yczltype = yczltype;
  121 + }
  122 +
  123 + public Long getTs() {
  124 + return ts;
  125 + }
  126 +
  127 + public void setTs(Long ts) {
  128 + this.ts = ts;
  129 + }
  130 +}
src/main/java/com/bsth/data/safe_driv/SafeDrivCenter.java
1 -package com.bsth.data.safe_driv;  
2 -  
3 -import com.bsth.Application;  
4 -import com.bsth.websocket.handler.SendUtils;  
5 -import org.joda.time.format.DateTimeFormat;  
6 -import org.joda.time.format.DateTimeFormatter;  
7 -import org.springframework.beans.BeansException;  
8 -import org.springframework.beans.factory.annotation.Autowired;  
9 -import org.springframework.boot.CommandLineRunner;  
10 -import org.springframework.context.ApplicationContext;  
11 -import org.springframework.context.ApplicationContextAware;  
12 -import org.springframework.stereotype.Component;  
13 -  
14 -import java.util.HashMap;  
15 -import java.util.HashSet;  
16 -import java.util.Map;  
17 -import java.util.Set;  
18 -import java.util.concurrent.TimeUnit;  
19 -  
20 -/**  
21 - * 安全驾驶  
22 - * Created by panzhao on 2017/4/6.  
23 - */  
24 -@Component  
25 -public class SafeDrivCenter implements CommandLineRunner,ApplicationContextAware {  
26 -  
27 - private static Set<SafeDriv> data;  
28 -  
29 - @Autowired  
30 - SafeDrivDataLoadThread safeDrivDataLoadThread;  
31 -  
32 - static SendUtils sendUtils;  
33 -  
34 - /**  
35 - * 车辆自编号 和 最新一条数据对照  
36 - */  
37 - private static Map<String, SafeDriv> safeMap;  
38 -  
39 - static {  
40 - data = new HashSet<>();  
41 - safeMap = new HashMap<>();  
42 - }  
43 -  
44 - private static DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");  
45 - public static void put(SafeDriv sd){  
46 - sd.setTs(fmt.parseMillis(sd.getStartime()));  
47 - data.add(sd);  
48 -  
49 - if(sd.getYczltype().indexOf("A") == -1)  
50 - sd.setYczltype("A" + sd.getYczltype());  
51 -  
52 - SafeDriv old = safeMap.get(sd.getClzbh());  
53 - if(old == null || sd.getTs() > old.getTs()){  
54 - //通知客户端  
55 - sendUtils.sendSafeDriv(sd);  
56 - }  
57 -  
58 - safeMap.put(sd.getClzbh(), sd);  
59 - }  
60 -  
61 - @Override  
62 - public void run(String... strings) throws Exception {  
63 - //定时加载安全驾驶数据  
64 - Application.mainServices.scheduleWithFixedDelay(safeDrivDataLoadThread, 60, 5, TimeUnit.SECONDS);  
65 - }  
66 -  
67 - @Override  
68 - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
69 - sendUtils = applicationContext.getBean(SendUtils.class);  
70 - }  
71 -} 1 +package com.bsth.data.safe_driv;
  2 +
  3 +import com.bsth.Application;
  4 +import com.bsth.websocket.handler.SendUtils;
  5 +import org.joda.time.format.DateTimeFormat;
  6 +import org.joda.time.format.DateTimeFormatter;
  7 +import org.springframework.beans.BeansException;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.boot.CommandLineRunner;
  10 +import org.springframework.context.ApplicationContext;
  11 +import org.springframework.context.ApplicationContextAware;
  12 +import org.springframework.stereotype.Component;
  13 +
  14 +import java.util.HashMap;
  15 +import java.util.HashSet;
  16 +import java.util.Map;
  17 +import java.util.Set;
  18 +import java.util.concurrent.TimeUnit;
  19 +
  20 +/**
  21 + * 安全驾驶
  22 + * Created by panzhao on 2017/4/6.
  23 + */
  24 +@Component
  25 +public class SafeDrivCenter implements CommandLineRunner,ApplicationContextAware {
  26 +
  27 + private static Set<SafeDriv> data;
  28 +
  29 + @Autowired
  30 + SafeDrivDataLoadThread safeDrivDataLoadThread;
  31 +
  32 + static SendUtils sendUtils;
  33 +
  34 + /**
  35 + * 车辆自编号 和 最新一条数据对照
  36 + */
  37 + private static Map<String, SafeDriv> safeMap;
  38 +
  39 + static {
  40 + data = new HashSet<>();
  41 + safeMap = new HashMap<>();
  42 + }
  43 +
  44 + private static DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");
  45 + public static void put(SafeDriv sd){
  46 + sd.setTs(fmt.parseMillis(sd.getStartime()));
  47 + data.add(sd);
  48 +
  49 + if(sd.getYczltype().indexOf("A") == -1)
  50 + sd.setYczltype("A" + sd.getYczltype());
  51 +
  52 + SafeDriv old = safeMap.get(sd.getClzbh());
  53 + if(old == null || sd.getTs() > old.getTs()){
  54 + //通知客户端
  55 + sendUtils.sendSafeDriv(sd);
  56 + }
  57 +
  58 + safeMap.put(sd.getClzbh(), sd);
  59 + }
  60 +
  61 + @Override
  62 + public void run(String... strings) throws Exception {
  63 + //定时加载安全驾驶数据
  64 + Application.mainServices.scheduleWithFixedDelay(safeDrivDataLoadThread, 60, 5, TimeUnit.SECONDS);
  65 + }
  66 +
  67 + @Override
  68 + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  69 + sendUtils = applicationContext.getBean(SendUtils.class);
  70 + }
  71 +}
src/main/java/com/bsth/data/safe_driv/SafeDrivDataLoadThread.java
1 -package com.bsth.data.safe_driv;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import org.apache.http.HttpEntity;  
5 -import org.apache.http.client.methods.CloseableHttpResponse;  
6 -import org.apache.http.client.methods.HttpGet;  
7 -import org.apache.http.impl.client.CloseableHttpClient;  
8 -import org.apache.http.impl.client.HttpClients;  
9 -import org.slf4j.Logger;  
10 -import org.slf4j.LoggerFactory;  
11 -import org.springframework.stereotype.Component;  
12 -  
13 -import java.io.BufferedReader;  
14 -import java.io.InputStreamReader;  
15 -import java.util.List;  
16 -  
17 -/**  
18 - * 安全驾驶数据加载线程  
19 - * Created by panzhao on 2017/4/6.  
20 - */  
21 -@Component  
22 -public class SafeDrivDataLoadThread extends Thread{  
23 -  
24 - private final static String url = "http://180.166.5.82:9988//bsth-safedriving/Crlcxb/realtimeInterface.do";  
25 -  
26 - Logger logger = LoggerFactory.getLogger(this.getClass());  
27 -  
28 - @Override  
29 - public void run() {  
30 - List<SafeDriv> list = null;  
31 - CloseableHttpClient httpClient = null;  
32 - CloseableHttpResponse response = null;  
33 - try {  
34 - httpClient = HttpClients.createDefault();  
35 - HttpGet get = new HttpGet(url);  
36 -  
37 - response = httpClient.execute(get);  
38 -  
39 - HttpEntity entity = response.getEntity();  
40 - if (null != entity) {  
41 - BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));  
42 - StringBuffer stringBuffer = new StringBuffer();  
43 - String str = "";  
44 - while ((str = br.readLine()) != null)  
45 - stringBuffer.append(str);  
46 -  
47 -  
48 - list = JSON.parseArray(stringBuffer.toString(), SafeDriv.class);  
49 - /**  
50 - * 模拟数据  
51 -  
52 - SafeDriv sd1 = new SafeDriv();  
53 - sd1.setYczltype("1");  
54 - sd1.setClzbh("W2B-001");  
55 - sd1.setStartime("2017-04-07 08:00:00.0");  
56 -  
57 - SafeDriv sd2 = new SafeDriv();  
58 - sd2.setYczltype("2");  
59 - sd2.setClzbh("W2B-002");  
60 - sd2.setStartime("2017-04-07 08:02:00.0");  
61 -  
62 - SafeDriv sd3 = new SafeDriv();  
63 - sd3.setYczltype("3");  
64 - sd3.setClzbh("W2B-003");  
65 - sd3.setStartime("2017-04-07 08:03:00.0");  
66 -  
67 - SafeDriv sd4 = new SafeDriv();  
68 - sd4.setYczltype("4");  
69 - sd4.setClzbh("W2B-004");  
70 - sd4.setStartime("2017-04-07 08:04:00.0");  
71 -  
72 - SafeDriv sd5 = new SafeDriv();  
73 - sd5.setYczltype("5");  
74 - sd5.setClzbh("W2B-005");  
75 - sd5.setStartime("2017-04-07 08:05:00.0");  
76 -  
77 - list.add(sd1);  
78 - list.add(sd2);  
79 - list.add(sd3);  
80 - list.add(sd4);  
81 - list.add(sd5);  
82 - */  
83 - for(SafeDriv sd : list){  
84 - SafeDrivCenter.put(sd);  
85 - }  
86 - }  
87 -  
88 - httpClient.close();  
89 - response.close();  
90 - } catch (Exception e) {  
91 - logger.error("", e);  
92 - }  
93 - }  
94 -} 1 +package com.bsth.data.safe_driv;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import org.apache.http.HttpEntity;
  5 +import org.apache.http.client.methods.CloseableHttpResponse;
  6 +import org.apache.http.client.methods.HttpGet;
  7 +import org.apache.http.impl.client.CloseableHttpClient;
  8 +import org.apache.http.impl.client.HttpClients;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
  11 +import org.springframework.stereotype.Component;
  12 +
  13 +import java.io.BufferedReader;
  14 +import java.io.InputStreamReader;
  15 +import java.util.List;
  16 +
  17 +/**
  18 + * 安全驾驶数据加载线程
  19 + * Created by panzhao on 2017/4/6.
  20 + */
  21 +@Component
  22 +public class SafeDrivDataLoadThread extends Thread{
  23 +
  24 + private final static String url = "http://180.166.5.82:9988//bsth-safedriving/Crlcxb/realtimeInterface.do";
  25 +
  26 + Logger logger = LoggerFactory.getLogger(this.getClass());
  27 +
  28 + @Override
  29 + public void run() {
  30 + List<SafeDriv> list = null;
  31 + CloseableHttpClient httpClient = null;
  32 + CloseableHttpResponse response = null;
  33 + try {
  34 + httpClient = HttpClients.createDefault();
  35 + HttpGet get = new HttpGet(url);
  36 +
  37 + response = httpClient.execute(get);
  38 +
  39 + HttpEntity entity = response.getEntity();
  40 + if (null != entity) {
  41 + BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));
  42 + StringBuffer stringBuffer = new StringBuffer();
  43 + String str = "";
  44 + while ((str = br.readLine()) != null)
  45 + stringBuffer.append(str);
  46 +
  47 +
  48 + list = JSON.parseArray(stringBuffer.toString(), SafeDriv.class);
  49 + /**
  50 + * 模拟数据
  51 +
  52 + SafeDriv sd1 = new SafeDriv();
  53 + sd1.setYczltype("1");
  54 + sd1.setClzbh("W2B-001");
  55 + sd1.setStartime("2017-04-07 08:00:00.0");
  56 +
  57 + SafeDriv sd2 = new SafeDriv();
  58 + sd2.setYczltype("2");
  59 + sd2.setClzbh("W2B-002");
  60 + sd2.setStartime("2017-04-07 08:02:00.0");
  61 +
  62 + SafeDriv sd3 = new SafeDriv();
  63 + sd3.setYczltype("3");
  64 + sd3.setClzbh("W2B-003");
  65 + sd3.setStartime("2017-04-07 08:03:00.0");
  66 +
  67 + SafeDriv sd4 = new SafeDriv();
  68 + sd4.setYczltype("4");
  69 + sd4.setClzbh("W2B-004");
  70 + sd4.setStartime("2017-04-07 08:04:00.0");
  71 +
  72 + SafeDriv sd5 = new SafeDriv();
  73 + sd5.setYczltype("5");
  74 + sd5.setClzbh("W2B-005");
  75 + sd5.setStartime("2017-04-07 08:05:00.0");
  76 +
  77 + list.add(sd1);
  78 + list.add(sd2);
  79 + list.add(sd3);
  80 + list.add(sd4);
  81 + list.add(sd5);
  82 + */
  83 + for(SafeDriv sd : list){
  84 + SafeDrivCenter.put(sd);
  85 + }
  86 + }
  87 +
  88 + httpClient.close();
  89 + response.close();
  90 + } catch (Exception e) {
  91 + logger.error("", e);
  92 + }
  93 + }
  94 +}
src/main/java/com/bsth/service/gps/GpsService.java
1 package com.bsth.service.gps; 1 package com.bsth.service.gps;
2 2
  3 +import com.bsth.service.gps.entity.GpsOutbound_DTO;
  4 +import com.bsth.service.gps.entity.GpsSpeed_DTO;
  5 +
3 import java.util.List; 6 import java.util.List;
4 import java.util.Map; 7 import java.util.Map;
5 8
@@ -20,4 +23,8 @@ public interface GpsService { @@ -20,4 +23,8 @@ public interface GpsService {
20 Map<String,Object> gpsCompletion(long schId); 23 Map<String,Object> gpsCompletion(long schId);
21 24
22 Map<String,Object> history_v2(String nbbm, long st, long et); 25 Map<String,Object> history_v2(String nbbm, long st, long et);
  26 +
  27 + List<GpsSpeed_DTO> speeds(String nbbm, long st, long et);
  28 +
  29 + List<GpsOutbound_DTO> outbounds(String nbbm, long st, long et);
23 } 30 }
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
@@ -11,8 +11,7 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo; @@ -11,8 +11,7 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo;
11 import com.bsth.repository.CarParkRepository; 11 import com.bsth.repository.CarParkRepository;
12 import com.bsth.repository.StationRepository; 12 import com.bsth.repository.StationRepository;
13 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; 13 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
14 -import com.bsth.service.gps.entity.HistoryGps_DTO;  
15 -import com.bsth.service.gps.entity.Road_DTO; 14 +import com.bsth.service.gps.entity.*;
16 import com.bsth.util.DateUtils; 15 import com.bsth.util.DateUtils;
17 import com.bsth.util.TransGPS; 16 import com.bsth.util.TransGPS;
18 import com.bsth.util.TransGPS.Location; 17 import com.bsth.util.TransGPS.Location;
@@ -192,7 +191,6 @@ public class GpsServiceImpl implements GpsService { @@ -192,7 +191,6 @@ public class GpsServiceImpl implements GpsService {
192 return (int) (Long.parseLong(o1.get("ts").toString()) - Long.parseLong(o2.get("ts").toString())); 191 return (int) (Long.parseLong(o1.get("ts").toString()) - Long.parseLong(o2.get("ts").toString()));
193 } 192 }
194 }); 193 });
195 - ;  
196 return list; 194 return list;
197 } 195 }
198 196
@@ -207,10 +205,10 @@ public class GpsServiceImpl implements GpsService { @@ -207,10 +205,10 @@ public class GpsServiceImpl implements GpsService {
207 inv = inv.substring(0, inv.length() - 1); 205 inv = inv.substring(0, inv.length() - 1);
208 206
209 // 查询到离站数据 207 // 查询到离站数据
210 - Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear/* 30 */, st, et, inv); 208 + Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear, st, et, inv);
211 209
212 String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS from bsth_c_gps_info where days_year=? and device_id in (" 210 String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS from bsth_c_gps_info where days_year=? and device_id in ("
213 - + inv + ") and ts > ? and ts < ?"; 211 + + inv + ") and ts > ? and ts < ? ORDER BY device_id,ts,stop_no";
214 try { 212 try {
215 conn = DBUtils_MS.getConnection(); 213 conn = DBUtils_MS.getConnection();
216 ps = conn.prepareStatement(sql); 214 ps = conn.prepareStatement(sql);
@@ -296,6 +294,9 @@ public class GpsServiceImpl implements GpsService { @@ -296,6 +294,9 @@ public class GpsServiceImpl implements GpsService {
296 prefix = lineId + "_" + updown + "_"; 294 prefix = lineId + "_" + updown + "_";
297 stationName = BasicData.getStationNameByCode(rs.getString("STOP_NO"), prefix); 295 stationName = BasicData.getStationNameByCode(rs.getString("STOP_NO"), prefix);
298 296
  297 + if (StringUtils.isEmpty(stationName))
  298 + continue;
  299 +
299 arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), lineId, 300 arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), lineId,
300 updown, rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"), 301 updown, rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"),
301 rs.getInt("WEEKS_YEAR"), stationName); 302 rs.getInt("WEEKS_YEAR"), stationName);
@@ -444,7 +445,7 @@ public class GpsServiceImpl implements GpsService { @@ -444,7 +445,7 @@ public class GpsServiceImpl implements GpsService {
444 return rs; 445 return rs;
445 } 446 }
446 447
447 - if(sch.isReissue()){ 448 + if (sch.isReissue()) {
448 rs.put("status", ResponseCode.ERROR); 449 rs.put("status", ResponseCode.ERROR);
449 rs.put("msg", "你不能重复这个操作"); 450 rs.put("msg", "你不能重复这个操作");
450 return rs; 451 return rs;
@@ -453,7 +454,7 @@ public class GpsServiceImpl implements GpsService { @@ -453,7 +454,7 @@ public class GpsServiceImpl implements GpsService {
453 String sql = "select * from bsth_gps_template where line_id='" + sch.getXlBm() + "' and up_down=" + sch.getXlDir(); 454 String sql = "select * from bsth_gps_template where line_id='" + sch.getXlBm() + "' and up_down=" + sch.getXlDir();
454 List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); 455 List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
455 456
456 - if(list.size() == 0){ 457 + if (list.size() == 0) {
457 rs.put("status", ResponseCode.ERROR); 458 rs.put("status", ResponseCode.ERROR);
458 rs.put("msg", "缺少模板数据,请联系系统管理员!!"); 459 rs.put("msg", "缺少模板数据,请联系系统管理员!!");
459 return rs; 460 return rs;
@@ -470,21 +471,20 @@ public class GpsServiceImpl implements GpsService { @@ -470,21 +471,20 @@ public class GpsServiceImpl implements GpsService {
470 int diff = (int) (sch.getDfsjT() - Long.parseLong(fs.get("ts").toString()) - 1000 * 70); 471 int diff = (int) (sch.getDfsjT() - Long.parseLong(fs.get("ts").toString()) - 1000 * 70);
471 472
472 String deviceId = BasicData.deviceId2NbbmMap.inverse().get(sch.getClZbh()); 473 String deviceId = BasicData.deviceId2NbbmMap.inverse().get(sch.getClZbh());
473 - for(Map<String, Object> map : list){ 474 + for (Map<String, Object> map : list) {
474 map.put("device_id", deviceId); 475 map.put("device_id", deviceId);
475 map.put("ts", Long.parseLong(map.get("ts").toString()) + diff); 476 map.put("ts", Long.parseLong(map.get("ts").toString()) + diff);
476 } 477 }
477 478
478 - String sqlBefore = "insert into bsth_c_template("  
479 - ,sqlValues = " values("; 479 + String sqlBefore = "insert into bsth_c_template(", sqlValues = " values(";
480 480
481 Set<String> ks = fs.keySet(); 481 Set<String> ks = fs.keySet();
482 - for(String k : ks){ 482 + for (String k : ks) {
483 sqlBefore += (k + ","); 483 sqlBefore += (k + ",");
484 sqlValues += "?,"; 484 sqlValues += "?,";
485 } 485 }
486 sqlBefore = sqlBefore.substring(0, sqlBefore.length() - 1) + ", create_ts)"; 486 sqlBefore = sqlBefore.substring(0, sqlBefore.length() - 1) + ", create_ts)";
487 - sqlValues = sqlValues.substring(0, sqlValues.length() - 1) + ", "+System.currentTimeMillis()+")"; 487 + sqlValues = sqlValues.substring(0, sqlValues.length() - 1) + ", " + System.currentTimeMillis() + ")";
488 sql = sqlBefore + " " + sqlValues; 488 sql = sqlBefore + " " + sqlValues;
489 489
490 Connection conn = DBUtils_MS.getConnection(); 490 Connection conn = DBUtils_MS.getConnection();
@@ -492,9 +492,9 @@ public class GpsServiceImpl implements GpsService { @@ -492,9 +492,9 @@ public class GpsServiceImpl implements GpsService {
492 ps = conn.prepareStatement(sql); 492 ps = conn.prepareStatement(sql);
493 int fsize = ks.size(); 493 int fsize = ks.size();
494 List<Object> vs; 494 List<Object> vs;
495 - for(Map<String, Object> map : list){ 495 + for (Map<String, Object> map : list) {
496 vs = new ArrayList<>(map.values()); 496 vs = new ArrayList<>(map.values());
497 - for(int i = 0; i < fsize; i ++){ 497 + for (int i = 0; i < fsize; i++) {
498 ps.setObject(i + 1, vs.get(i)); 498 ps.setObject(i + 1, vs.get(i));
499 } 499 }
500 ps.addBatch(); 500 ps.addBatch();
@@ -523,30 +523,62 @@ public class GpsServiceImpl implements GpsService { @@ -523,30 +523,62 @@ public class GpsServiceImpl implements GpsService {
523 try { 523 try {
524 //获取历史gps 数据 524 //获取历史gps 数据
525 List<HistoryGps_DTO> list = HistoryGps_DTO.craete(history(new String[]{nbbm}, st, et)); 525 List<HistoryGps_DTO> list = HistoryGps_DTO.craete(history(new String[]{nbbm}, st, et));
526 - if(list!=null && list.size() > 0){ 526 + if (list != null && list.size() > 0) {
527 //获取路段信息 527 //获取路段信息
528 String sql = "select ID, ST_AsText(GROAD_VECTOR) as GROAD_VECTOR,ROAD_CODE,ROAD_NAME,SPEED from bsth_c_road where road_code in(select section_code from bsth_c_sectionroute where line_code=? and destroy=0)"; 528 String sql = "select ID, ST_AsText(GROAD_VECTOR) as GROAD_VECTOR,ROAD_CODE,ROAD_NAME,SPEED from bsth_c_road where road_code in(select section_code from bsth_c_sectionroute where line_code=? and destroy=0)";
529 List<Road_DTO> roads = Road_DTO.craete(jdbcTemplate.queryForList(sql, list.get(0).getLineId())); 529 List<Road_DTO> roads = Road_DTO.craete(jdbcTemplate.queryForList(sql, list.get(0).getLineId()));
530 530
531 //为GPS数据关联路段信息 531 //为GPS数据关联路段信息
532 - for(HistoryGps_DTO gps : list){ 532 + for (HistoryGps_DTO gps : list) {
533 matchRoadToGps(gps, roads); 533 matchRoadToGps(gps, roads);
534 } 534 }
535 } 535 }
536 536
  537 + //超速数据
  538 + List<GpsSpeed_DTO> speedList = speeds(nbbm, st, et);
  539 + //越界数据
  540 + List<GpsOutbound_DTO> outboundList = outbounds(nbbm, st, et);
  541 +
537 rs.put("status", ResponseCode.SUCCESS); 542 rs.put("status", ResponseCode.SUCCESS);
538 - rs.put("list", list);  
539 - }catch (Exception e){ 543 + rs.put("list", removeDuplicate(list));
  544 + rs.put("speedList", speedList);
  545 + rs.put("outboundList", outboundList);
  546 + } catch (Exception e) {
540 logger.error("", e); 547 logger.error("", e);
541 rs.put("status", ResponseCode.ERROR); 548 rs.put("status", ResponseCode.ERROR);
542 } 549 }
543 return rs; 550 return rs;
544 } 551 }
545 552
546 - private void matchRoadToGps(HistoryGps_DTO gps, List<Road_DTO> roads){  
547 - double min = -1,distance; 553 + @Override
  554 + public List<GpsSpeed_DTO> speeds(String nbbm, long st, long et) {
  555 + String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);
  556 + String sql = "select vehicle, line, up_down, lon, lat, speed,timestamp from bsth_c_speeding where vehicle=? and timestamp>? and timestamp<?";
  557 +
  558 + return GpsSpeed_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql, deviceId, st * 1000, et * 1000));
  559 + }
  560 +
  561 + @Override
  562 + public List<GpsOutbound_DTO> outbounds(String nbbm, long st, long et) {
  563 + /**
  564 + * 如果 st 和 et 跨了周分区,也只查询st 分区的数据。
  565 + */
  566 + st = st * 1000;
  567 + et = et * 1000;
  568 + //按周分区
  569 + Calendar weekCal = Calendar.getInstance();
  570 + weekCal.setTimeInMillis(st);
  571 + int weekYear = weekCal.get(Calendar.WEEK_OF_YEAR);
  572 + //设备号
  573 + String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);
  574 + String sql = "select vehicle,line,up_down,lon,lat,timestamp from bsth_c_outbound where weeks_year="+weekYear+" and vehicle=? and timestamp>? and timestamp<?";
  575 + return GpsOutbound_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql, deviceId, st, et));
  576 + }
  577 +
  578 + private void matchRoadToGps(HistoryGps_DTO gps, List<Road_DTO> roads) {
  579 + double min = -1, distance;
548 Road_DTO nearRoad = null; 580 Road_DTO nearRoad = null;
549 - for(Road_DTO road : roads){ 581 + for (Road_DTO road : roads) {
550 distance = GeoUtils.getDistanceFromLine(road.getLineStr(), gps.getPoint()); 582 distance = GeoUtils.getDistanceFromLine(road.getLineStr(), gps.getPoint());
551 583
552 if (min > distance || min == -1) { 584 if (min > distance || min == -1) {
@@ -559,6 +591,20 @@ public class GpsServiceImpl implements GpsService { @@ -559,6 +591,20 @@ public class GpsServiceImpl implements GpsService {
559 gps.setRoadMinDistance(min); 591 gps.setRoadMinDistance(min);
560 } 592 }
561 593
  594 + /**
  595 + * 去重复
  596 + *
  597 + * @param list
  598 + * @return
  599 + */
  600 + private Set<HistoryGps_DTO> removeDuplicate(List<HistoryGps_DTO> list) {
  601 + Set<HistoryGps_DTO> set = new HashSet<>();
  602 + for (HistoryGps_DTO gps : list) {
  603 + set.add(gps);
  604 + }
  605 + return set;
  606 + }
  607 +
562 private void sortGpsList(final Field f, List<GpsEntity> rs) { 608 private void sortGpsList(final Field f, List<GpsEntity> rs) {
563 Collections.sort(rs, new Comparator<GpsEntity>() { 609 Collections.sort(rs, new Comparator<GpsEntity>() {
564 610
src/main/java/com/bsth/service/gps/entity/GpsOutbound.java 0 → 100644
  1 +package com.bsth.service.gps.entity;
  2 +
  3 +/**
  4 + * 越界异常 --ms数据库格式
  5 + * Created by panzhao on 2017/4/9.
  6 + */
  7 +public class GpsOutbound {
  8 +
  9 + private String vehicle;
  10 +
  11 + private String line;
  12 +
  13 + private int up_down;
  14 +
  15 + private float lon;
  16 +
  17 + private float lat;
  18 +
  19 + private long timestamp;
  20 +
  21 + public String location(){
  22 + return lon + "," + lat;
  23 + }
  24 +
  25 + public String getVehicle() {
  26 + return vehicle;
  27 + }
  28 +
  29 + public void setVehicle(String vehicle) {
  30 + this.vehicle = vehicle;
  31 + }
  32 +
  33 + public String getLine() {
  34 + return line;
  35 + }
  36 +
  37 + public void setLine(String line) {
  38 + this.line = line;
  39 + }
  40 +
  41 + public int getUp_down() {
  42 + return up_down;
  43 + }
  44 +
  45 + public void setUp_down(int up_down) {
  46 + this.up_down = up_down;
  47 + }
  48 +
  49 + public float getLon() {
  50 + return lon;
  51 + }
  52 +
  53 + public void setLon(float lon) {
  54 + this.lon = lon;
  55 + }
  56 +
  57 + public float getLat() {
  58 + return lat;
  59 + }
  60 +
  61 + public void setLat(float lat) {
  62 + this.lat = lat;
  63 + }
  64 +
  65 + public long getTimestamp() {
  66 + return timestamp;
  67 + }
  68 +
  69 + public void setTimestamp(long timestamp) {
  70 + this.timestamp = timestamp;
  71 + }
  72 +}
src/main/java/com/bsth/service/gps/entity/GpsOutbound_DTO.java 0 → 100644
  1 +package com.bsth.service.gps.entity;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.alibaba.fastjson.JSONObject;
  5 +import com.bsth.data.BasicData;
  6 +
  7 +import java.util.*;
  8 +
  9 +/**
  10 + * 越界异常 dto
  11 + * Created by panzhao on 2017/4/7.
  12 + */
  13 +public class GpsOutbound_DTO {
  14 +
  15 + public static List<GpsOutbound_DTO> create(List<Map<String, Object>> mapList){
  16 + //默认都是一辆车的数据
  17 + List<GpsOutbound> list = JSONObject.parseArray(JSON.toJSONString(mapList), GpsOutbound.class);
  18 + GpsOutbound outbound;
  19 +
  20 + //排序
  21 + Collections.sort(list, new Comparator<GpsOutbound>() {
  22 + @Override
  23 + public int compare(GpsOutbound o1, GpsOutbound o2) {
  24 + return (int) (o1.getTimestamp() - o2.getTimestamp());
  25 + }
  26 + });
  27 +
  28 + int space = 1000 * 60;
  29 + int size = list.size();
  30 + StringBuffer locations = new StringBuffer("");
  31 +
  32 + List<GpsOutbound_DTO> rsList = new ArrayList<>();
  33 + GpsOutbound_DTO dto = null;
  34 +
  35 + for(int i = 0; i < size; i++){
  36 + outbound = list.get(i);
  37 + locations.append(outbound.location() + ";");
  38 + if(dto == null){
  39 + dto = new GpsOutbound_DTO();
  40 + dto.setDeviceId(outbound.getVehicle());
  41 + dto.setNbbm(BasicData.deviceId2NbbmMap.get(outbound.getVehicle()));
  42 + dto.setSt(outbound.getTimestamp());
  43 + }
  44 + else{
  45 + //越界结束
  46 + if((i < size - 1 && list.get(i + 1).getTimestamp() - outbound.getTimestamp() > space)){
  47 + dto.setEt(outbound.getTimestamp());
  48 + dto.setLocations(locations.toString());
  49 +
  50 + rsList.add(dto);
  51 + dto = null;
  52 + locations = new StringBuffer("");
  53 + continue;
  54 + }
  55 +
  56 + if(i == size - 1)
  57 + rsList.add(dto);
  58 + }
  59 + }
  60 +
  61 + return rsList;
  62 + }
  63 +
  64 + /**
  65 + * 设备号
  66 + */
  67 + private String deviceId;
  68 +
  69 + /**
  70 + * 自编号
  71 + */
  72 + private String nbbm;
  73 +
  74 + /**
  75 + * 越界开始时间
  76 + */
  77 + private long st;
  78 +
  79 + /**
  80 + * 越界结束时间
  81 + */
  82 + private long et;
  83 +
  84 + /**
  85 + * 越界点位集合
  86 + */
  87 + private String locations;
  88 +
  89 + private String abnormalType = "outbound";
  90 +
  91 + public String getDeviceId() {
  92 + return deviceId;
  93 + }
  94 +
  95 + public void setDeviceId(String deviceId) {
  96 + this.deviceId = deviceId;
  97 + }
  98 +
  99 + public String getNbbm() {
  100 + return nbbm;
  101 + }
  102 +
  103 + public void setNbbm(String nbbm) {
  104 + this.nbbm = nbbm;
  105 + }
  106 +
  107 + public long getSt() {
  108 + return st;
  109 + }
  110 +
  111 + public void setSt(long st) {
  112 + this.st = st;
  113 + }
  114 +
  115 + public long getEt() {
  116 + return et;
  117 + }
  118 +
  119 + public void setEt(long et) {
  120 + this.et = et;
  121 + }
  122 +
  123 + public String getLocations() {
  124 + return locations;
  125 + }
  126 +
  127 + public void setLocations(String locations) {
  128 + this.locations = locations;
  129 + }
  130 +
  131 + public String getAbnormalType() {
  132 + return abnormalType;
  133 + }
  134 +
  135 + public void setAbnormalType(String abnormalType) {
  136 + this.abnormalType = abnormalType;
  137 + }
  138 +}
src/main/java/com/bsth/service/gps/entity/GpsSpeed.java 0 → 100644
  1 +package com.bsth.service.gps.entity;
  2 +
  3 +/**
  4 + * 超速异常 -ms数据库格式
  5 + * Created by panzhao on 2017/4/7.
  6 + */
  7 +public class GpsSpeed {
  8 +
  9 + private String vehicle;
  10 +
  11 + private String line;
  12 +
  13 + private int up_down;
  14 +
  15 + private float lon;
  16 +
  17 + private float lat;
  18 +
  19 + private float speed;
  20 +
  21 + private long timestamp;
  22 +
  23 + public String getVehicle() {
  24 + return vehicle;
  25 + }
  26 +
  27 + public void setVehicle(String vehicle) {
  28 + this.vehicle = vehicle;
  29 + }
  30 +
  31 + public String getLine() {
  32 + return line;
  33 + }
  34 +
  35 + public void setLine(String line) {
  36 + this.line = line;
  37 + }
  38 +
  39 + public int getUp_down() {
  40 + return up_down;
  41 + }
  42 +
  43 + public void setUp_down(int up_down) {
  44 + this.up_down = up_down;
  45 + }
  46 +
  47 + public float getLon() {
  48 + return lon;
  49 + }
  50 +
  51 + public void setLon(float lon) {
  52 + this.lon = lon;
  53 + }
  54 +
  55 + public float getLat() {
  56 + return lat;
  57 + }
  58 +
  59 + public void setLat(float lat) {
  60 + this.lat = lat;
  61 + }
  62 +
  63 + public float getSpeed() {
  64 + return speed;
  65 + }
  66 +
  67 + public void setSpeed(float speed) {
  68 + this.speed = speed;
  69 + }
  70 +
  71 + public long getTimestamp() {
  72 + return timestamp;
  73 + }
  74 +
  75 + public void setTimestamp(long timestamp) {
  76 + this.timestamp = timestamp;
  77 + }
  78 +}
src/main/java/com/bsth/service/gps/entity/GpsSpeed_DTO.java 0 → 100644
  1 +package com.bsth.service.gps.entity;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.alibaba.fastjson.JSONObject;
  5 +import com.bsth.data.BasicData;
  6 +
  7 +import java.util.*;
  8 +
  9 +/**
  10 + * 超速异常 dto
  11 + * Created by panzhao on 2017/4/7.
  12 + */
  13 +public class GpsSpeed_DTO {
  14 +
  15 + public static List<GpsSpeed_DTO> create(List<Map<String, Object>> mapList){
  16 + //默认都是一辆车的数据
  17 + List<GpsSpeed> list = JSONObject.parseArray(JSON.toJSONString(mapList), GpsSpeed.class);
  18 + GpsSpeed gs;
  19 + //排序
  20 + Collections.sort(list, new Comparator<GpsSpeed>() {
  21 + @Override
  22 + public int compare(GpsSpeed o1, GpsSpeed o2) {
  23 + return (int) (o1.getTimestamp() - o2.getTimestamp());
  24 + }
  25 + });
  26 +
  27 + int space = 1000 * 60;
  28 + int size = list.size();
  29 +
  30 + List<GpsSpeed_DTO> rsList = new ArrayList<>();
  31 + GpsSpeed_DTO dto = null;
  32 +
  33 + for(int i = 0; i < size; i++){
  34 + gs = list.get(i);
  35 + if(dto == null){
  36 + dto = new GpsSpeed_DTO();
  37 + dto.setDeviceId(gs.getVehicle());
  38 + dto.setNbbm(BasicData.deviceId2NbbmMap.get(gs.getVehicle()));
  39 + dto.setSt(gs.getTimestamp());
  40 + dto.setSpeed(gs.getSpeed());
  41 + }
  42 + else{
  43 + //超速结束
  44 + if((i < size - 1 && list.get(i + 1).getTimestamp() - gs.getTimestamp() > space)){
  45 + dto.setEt(gs.getTimestamp());
  46 + rsList.add(dto);
  47 + dto = null;
  48 + continue;
  49 + }
  50 +
  51 + //记录最大速度
  52 + if(gs.getSpeed() > dto.getSpeed())
  53 + dto.setSpeed(gs.getSpeed());
  54 +
  55 + if(i == size - 1)
  56 + rsList.add(dto);
  57 + }
  58 + }
  59 + return rsList;
  60 + }
  61 +
  62 + /**
  63 + * 设备号
  64 + */
  65 + private String deviceId;
  66 +
  67 + /**
  68 + * 自编号
  69 + */
  70 + private String nbbm;
  71 +
  72 + /**
  73 + * 超速开始时间
  74 + */
  75 + private long st;
  76 +
  77 + /**
  78 + * 超速结束时间
  79 + */
  80 + private long et;
  81 +
  82 + /**
  83 + * 速度
  84 + */
  85 + private float speed;
  86 +
  87 + private String abnormalType = "speed";
  88 +
  89 + public String getDeviceId() {
  90 + return deviceId;
  91 + }
  92 +
  93 + public void setDeviceId(String deviceId) {
  94 + this.deviceId = deviceId;
  95 + }
  96 +
  97 + public String getNbbm() {
  98 + return nbbm;
  99 + }
  100 +
  101 + public void setNbbm(String nbbm) {
  102 + this.nbbm = nbbm;
  103 + }
  104 +
  105 + public long getSt() {
  106 + return st;
  107 + }
  108 +
  109 + public void setSt(long st) {
  110 + this.st = st;
  111 + }
  112 +
  113 + public long getEt() {
  114 + return et;
  115 + }
  116 +
  117 + public void setEt(long et) {
  118 + this.et = et;
  119 + }
  120 +
  121 + public float getSpeed() {
  122 + return speed;
  123 + }
  124 +
  125 + public void setSpeed(float speed) {
  126 + this.speed = speed;
  127 + }
  128 +
  129 + public String getAbnormalType() {
  130 + return abnormalType;
  131 + }
  132 +
  133 + public void setAbnormalType(String abnormalType) {
  134 + this.abnormalType = abnormalType;
  135 + }
  136 +}
src/main/java/com/bsth/service/gps/entity/HistoryGps_DTO.java
@@ -17,12 +17,12 @@ import java.util.Map; @@ -17,12 +17,12 @@ import java.util.Map;
17 */ 17 */
18 public class HistoryGps_DTO { 18 public class HistoryGps_DTO {
19 19
20 - public static List<HistoryGps_DTO> craete(List<Map<String, Object>> mapList){ 20 + public static List<HistoryGps_DTO> craete(List<Map<String, Object>> mapList) {
21 List<HistoryGps_DTO> list = JSONObject.parseArray(JSON.toJSONString(mapList), HistoryGps_DTO.class); 21 List<HistoryGps_DTO> list = JSONObject.parseArray(JSON.toJSONString(mapList), HistoryGps_DTO.class);
22 22
23 GeometryFactory geometryFactory = new GeometryFactory(); 23 GeometryFactory geometryFactory = new GeometryFactory();
24 Point point; 24 Point point;
25 - for(HistoryGps_DTO gps : list){ 25 + for (HistoryGps_DTO gps : list) {
26 point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon())); 26 point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon()));
27 gps.setPoint(point); 27 gps.setPoint(point);
28 } 28 }
@@ -56,11 +56,32 @@ public class HistoryGps_DTO { @@ -56,11 +56,32 @@ public class HistoryGps_DTO {
56 @JsonIgnore 56 @JsonIgnore
57 private Point point; 57 private Point point;
58 58
59 - /** 路段 */ 59 + /**
  60 + * 路段
  61 + */
60 private Road_DTO road; 62 private Road_DTO road;
61 - /** 和路段的最短距离 */ 63 + /**
  64 + * 和路段的最短距离
  65 + */
62 private double roadMinDistance; 66 private double roadMinDistance;
63 67
  68 + @Override
  69 + public int hashCode() {
  70 + return this.toString().hashCode();
  71 + }
  72 +
  73 + @Override
  74 + public boolean equals(Object obj) {
  75 + HistoryGps_DTO g2 = (HistoryGps_DTO) obj;
  76 + return this.toString().equals(g2.toString());
  77 + }
  78 +
  79 +
  80 + @Override
  81 + public String toString() {
  82 + return (this.getDeviceId() + "_" + (inout_stop_info==null?this.getStopNo():inout_stop_info.getStopName()) + "_" + this.getTs() + "_" + this.getLon() + "_" + this.getLat());
  83 + }
  84 +
64 public double getGcj_lon() { 85 public double getGcj_lon() {
65 return gcj_lon; 86 return gcj_lon;
66 } 87 }
src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
@@ -135,9 +135,11 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -135,9 +135,11 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
135 Ylb ylb=ylListBe.get(i); 135 Ylb ylb=ylListBe.get(i);
136 if(map.get("clZbh").toString().equals(ylb.getNbbm())){ 136 if(map.get("clZbh").toString().equals(ylb.getNbbm())){
137 if(ylb.getJzyl()!=null){ 137 if(ylb.getJzyl()!=null){
138 - t.setCzyl(ylb.getJzyl());  
139 - fage=false;  
140 - break; 138 + if(ylb.getJzyl()>0){
  139 + t.setCzyl(ylb.getJzyl());
  140 + fage=false;
  141 + break;
  142 + }
141 } 143 }
142 144
143 } 145 }
@@ -270,7 +272,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -270,7 +272,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
270 for (int i = 0; i < ylListBe.size(); i++) { 272 for (int i = 0; i < ylListBe.size(); i++) {
271 Ylb ylb = ylListBe.get(i); 273 Ylb ylb = ylListBe.get(i);
272 if (map.get("clZbh").toString().equals(ylb.getNbbm())) { 274 if (map.get("clZbh").toString().equals(ylb.getNbbm())) {
273 - if(ylb.getJzyl()>=0){ 275 + if(ylb.getJzyl()>0){
274 t.setCzyl(ylb.getJzyl()); 276 t.setCzyl(ylb.getJzyl());
275 fage = false; 277 fage = false;
276 break; 278 break;
@@ -282,16 +284,18 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -282,16 +284,18 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
282 for (int y = 0; y < clyList.size(); y++) { 284 for (int y = 0; y < clyList.size(); y++) {
283 Cyl cyl = clyList.get(y); 285 Cyl cyl = clyList.get(y);
284 if (map.get("clZbh").toString().equals(cyl.getNbbm())) { 286 if (map.get("clZbh").toString().equals(cyl.getNbbm())) {
285 - if(cyl.getCyl()>=0){  
286 - t.setCzyl(cyl.getCyl());  
287 - fage = false;  
288 - break;  
289 - }else {  
290 - if(cyl.getCxrl()!=null){  
291 - if(cyl.getCxrl()>0){  
292 - t.setCzyl(cyl.getCxrl());  
293 - fage = false;  
294 - break; 287 + if(cyl!=null){
  288 + if(cyl.getCyl()>=0){
  289 + t.setCzyl(cyl.getCyl());
  290 + fage = false;
  291 + break;
  292 + }else {
  293 + if(cyl.getCxrl()!=null){
  294 + if(cyl.getCxrl()>0){
  295 + t.setCzyl(cyl.getCxrl());
  296 + fage = false;
  297 + break;
  298 + }
295 } 299 }
296 } 300 }
297 } 301 }
src/main/resources/static/pages/forms/mould/list.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/listDl.xls
No preview for this file type
src/main/resources/static/real_control_v2/assets/imgs/icon/pause.png 0 → 100644

2.29 KB

src/main/resources/static/real_control_v2/assets/imgs/icon/play.png 0 → 100644

2.36 KB

src/main/resources/static/real_control_v2/js/modal_extend.js
1 -//modal hide remove dom  
2 -$(document).on('hide.uk.modal', '.uk-modal', function () {  
3 - $(this).remove();  
4 -});  
5 -  
6 -$(document).on('show.uk.modal', '.uk-modal.ct_move_modal', function () {  
7 - if($('.uk-modal-dialog', this).hasClass('uk-modal-dialog-blank'))  
8 - return;  
9 -  
10 - /* //临时放过轨迹回放  
11 - if($(this).attr('id')=='map-playback-modal')  
12 - return;*/  
13 -  
14 - //计算居中位置  
15 - var win = $('body');  
16 - var Y = (win.width() - $('.uk-modal-dialog', this).width()) / 2 - 10;  
17 - $('.uk-modal-dialog', this).css('top', '50px').css('left', Y + 'px');  
18 -});  
19 -  
20 -var show_modal = function (id, dom) {  
21 - $(document.body).append(dom);  
22 - return UIkit.modal(id, {  
23 - bgclose: false, modal: false  
24 - }).show();  
25 -};  
26 -  
27 -var open_modal = function (pageUrl, data, opt) {  
28 - $.get(pageUrl, function (dom) {  
29 - open_modal_dom(dom, data, opt);  
30 - });  
31 -};  
32 -  
33 -var open_modal_dom = function (dom, data, opt) {  
34 - if (!$(dom).hasClass('uk-modal')) {  
35 - alert('无效的dom片段!');  
36 - return;  
37 - }  
38 - var id = '#' + $(dom).attr('id');  
39 -  
40 - $(document.body).append(dom);  
41 - UIkit.modal(id, opt).show();  
42 - //move  
43 - if($(id).hasClass('ct_move_modal'))  
44 - modal_move($('.uk-modal-header',id));  
45 -  
46 - if (data)  
47 - $(id).trigger('init', data);  
48 -};  
49 -  
50 -var modal_move = function (m_header) {  
51 - var _moveFlag;  
52 - var _moveObj;  
53 - var _offset;  
54 - var dict= {};  
55 - var win = $('body');  
56 -  
57 - $(m_header).on('mousedown', function (e) {  
58 - console.log('mousedown');  
59 - e.preventDefault();  
60 - _moveFlag = true;  
61 - _moveObj = $(this).parent();  
62 - _offset = [  
63 - e.clientX - parseFloat(_moveObj.css('left')) - 1,  
64 - e.clientY - parseFloat(_moveObj.css('top')) - 1  
65 - ];  
66 - });  
67 -  
68 - $(m_header).parents('.uk-modal').mousemove(function (e) {  
69 - if(!_moveFlag || !_moveObj)  
70 - return;  
71 -  
72 - var X = e.clientX - _offset[0]  
73 - ,Y = e.clientY - _offset[1];  
74 -  
75 - dict.stX = win.scrollLeft();  
76 - dict.stY = win.scrollTop();  
77 -  
78 - //控制元素不被拖出窗口外  
79 - var setRig = win.width() - _moveObj.outerWidth() + dict.stX  
80 - ,setBot = win.height() - _moveObj.outerHeight() + dict.stY;  
81 - X < dict.stX && (X = dict.stX);  
82 - X > setRig && (X = setRig);  
83 - Y < dict.stY && (Y = dict.stY);  
84 - Y > setBot && (Y = setBot);  
85 -  
86 - _moveObj.css({  
87 - left: X  
88 - ,top: Y  
89 - });  
90 - });  
91 - $(window).on('mouseup', function () {  
92 - _moveFlag = false;  
93 - _moveObj = null;  
94 - }); 1 +//modal hide remove dom
  2 +$(document).on('hide.uk.modal', '.uk-modal', function () {
  3 + $(this).remove();
  4 +});
  5 +
  6 +$(document).on('show.uk.modal', '.uk-modal.ct_move_modal', function () {
  7 + if($('.uk-modal-dialog', this).hasClass('uk-modal-dialog-blank'))
  8 + return;
  9 +
  10 + /* //临时放过轨迹回放
  11 + if($(this).attr('id')=='map-playback-modal')
  12 + return;*/
  13 +
  14 + //计算居中位置
  15 + var win = $('body');
  16 + var Y = (win.width() - $('.uk-modal-dialog', this).width()) / 2 - 10;
  17 + $('.uk-modal-dialog', this).css('top', '50px').css('left', Y + 'px');
  18 +});
  19 +
  20 +var show_modal = function (id, dom) {
  21 + $(document.body).append(dom);
  22 + return UIkit.modal(id, {
  23 + bgclose: false, modal: false
  24 + }).show();
  25 +};
  26 +
  27 +var open_modal = function (pageUrl, data, opt) {
  28 + $.get(pageUrl, function (dom) {
  29 + open_modal_dom(dom, data, opt);
  30 + });
  31 +};
  32 +
  33 +var open_modal_dom = function (dom, data, opt) {
  34 + if (!$(dom).hasClass('uk-modal')) {
  35 + alert('无效的dom片段!');
  36 + return;
  37 + }
  38 + var id = '#' + $(dom).attr('id');
  39 +
  40 + $(document.body).append(dom);
  41 + UIkit.modal(id, opt).show();
  42 + //move
  43 + if($(id).hasClass('ct_move_modal'))
  44 + modal_move($('.uk-modal-header',id));
  45 +
  46 + if (data)
  47 + $(id).trigger('init', data);
  48 +};
  49 +
  50 +var modal_move = function (m_header) {
  51 + var _moveFlag;
  52 + var _moveObj;
  53 + var _offset;
  54 + var dict= {};
  55 + var win = $('body');
  56 +
  57 + $(m_header).on('mousedown', function (e) {
  58 + console.log('mousedown');
  59 + e.preventDefault();
  60 + _moveFlag = true;
  61 + _moveObj = $(this).parent();
  62 + _offset = [
  63 + e.clientX - parseFloat(_moveObj.css('left')) - 1,
  64 + e.clientY - parseFloat(_moveObj.css('top')) - 1
  65 + ];
  66 + });
  67 +
  68 + $(m_header).parents('.uk-modal').mousemove(function (e) {
  69 + if(!_moveFlag || !_moveObj)
  70 + return;
  71 +
  72 + var X = e.clientX - _offset[0]
  73 + ,Y = e.clientY - _offset[1];
  74 +
  75 + dict.stX = win.scrollLeft();
  76 + dict.stY = win.scrollTop();
  77 +
  78 + //控制元素不被拖出窗口外
  79 + var setRig = win.width() - _moveObj.outerWidth() + dict.stX
  80 + ,setBot = win.height() - _moveObj.outerHeight() + dict.stY;
  81 + X < dict.stX && (X = dict.stX);
  82 + X > setRig && (X = setRig);
  83 + Y < dict.stY && (Y = dict.stY);
  84 + Y > setBot && (Y = setBot);
  85 +
  86 + _moveObj.css({
  87 + left: X
  88 + ,top: Y
  89 + });
  90 + });
  91 + $(window).on('mouseup', function () {
  92 + _moveFlag = false;
  93 + _moveObj = null;
  94 + });
95 }; 95 };
96 \ No newline at end of file 96 \ No newline at end of file
src/main/resources/static/real_control_v2/js/safe_driv/safeDriv.js
1 -/**  
2 - * 安全驾驶相关  
3 - */  
4 -var gb_safe_driv = (function () {  
5 -  
6 - var codes = {  
7 - 'A1': '手部违规',  
8 - 'A2': '摄像头偏离',  
9 - 'A3': '安全带',  
10 - 'A4': '手臂袖章',  
11 - 'A5': '脸部检测'  
12 - };  
13 -  
14 - var $wrap = $('.safe_driv_pop_wrap');  
15 - var max = 5;  
16 -  
17 - var pop = function (sd) {  
18 - //只有admin用户能收到  
19 - var user = gb_northToolbar.user();  
20 - if(!user || user.userName.indexOf('admin') == -1)  
21 - return;  
22 -  
23 - var htmlStr = '<div class="safe_driv_pop uk-animation-slide-bottom">'+  
24 - ' <span class="title"><i class="uk-icon-times-circle"></i>安全驾驶 '+moment(sd.ts).format('HH:mm')+'</span>'+  
25 - ' <span class="text"> '+sd.clzbh+' 违规驾驶('+codes[sd.yczltype]+')</span><span class="desc">请至安全驾驶监管平台查看图像信息</span>'+  
26 - '</div>';  
27 -  
28 - var items = $wrap.find('.safe_driv_pop'), len = items.length;  
29 - if(len >= max)  
30 - $wrap.find('.safe_driv_pop:lt('+(len - max)+')').remove();  
31 -  
32 - $wrap.append(htmlStr);  
33 - };  
34 -  
35 - $wrap.on('click', '.safe_driv_pop', function () {  
36 - $(this).remove();  
37 - });  
38 -  
39 - return {  
40 - pop: pop  
41 - } 1 +/**
  2 + * 安全驾驶相关
  3 + */
  4 +var gb_safe_driv = (function () {
  5 +
  6 + var codes = {
  7 + 'A1': '手部违规',
  8 + 'A2': '摄像头偏离',
  9 + 'A3': '安全带',
  10 + 'A4': '未戴袖章',
  11 + 'A5': '眨眼/疲劳驾驶',
  12 + 'A6': '打哈欠/打瞌睡',
  13 + 'A7': '与人交谈'
  14 + };
  15 +
  16 + var $wrap = $('.safe_driv_pop_wrap');
  17 + var max = 5;
  18 +
  19 + var pop = function (sd) {
  20 + //只有admin用户能收到
  21 + var user = gb_northToolbar.user();
  22 + if(!user || user.userName.indexOf('admin') == -1)
  23 + return;
  24 +
  25 + var htmlStr = '<div class="safe_driv_pop uk-animation-slide-bottom">'+
  26 + ' <span class="title"><i class="uk-icon-times-circle"></i>安全驾驶 '+moment(sd.ts).format('HH:mm')+'</span>'+
  27 + ' <span class="text"> '+sd.clzbh+' 违规驾驶('+codes[sd.yczltype]+')</span><span class="desc">请至安全驾驶监管平台查看图像信息</span>'+
  28 + '</div>';
  29 +
  30 + var items = $wrap.find('.safe_driv_pop'), len = items.length;
  31 + if(len >= max)
  32 + $wrap.find('.safe_driv_pop:lt('+(len - max)+')').remove();
  33 +
  34 + $wrap.append(htmlStr);
  35 + };
  36 +
  37 + $wrap.on('click', '.safe_driv_pop', function () {
  38 + $(this).remove();
  39 + });
  40 +
  41 + return {
  42 + pop: pop
  43 + }
42 })(); 44 })();
43 \ No newline at end of file 45 \ No newline at end of file
src/main/resources/static/real_control_v2/mapmonitor/css/real.css
@@ -800,4 +800,103 @@ input[type=checkbox].disabled{ @@ -800,4 +800,103 @@ input[type=checkbox].disabled{
800 .cc_info_accordion{ 800 .cc_info_accordion{
801 height: calc(100% - 40px); 801 height: calc(100% - 40px);
802 overflow: auto; 802 overflow: auto;
  803 +}
  804 +
  805 +.map-wrap-tools{
  806 + position: absolute;
  807 + top: 0;
  808 + width: 100%;
  809 + background: #ffffff;
  810 + z-index: 10;
  811 + box-shadow: 3px 1px 8px 0 rgba(0, 0, 0, 0.12), 1px 0px 8px 0 rgba(0, 0, 0, 0.12);
  812 + height: 70px;
  813 + display: none;
  814 +}
  815 +
  816 +.map-container{
  817 + width: 100%;
  818 + height: 100%;
  819 +}
  820 +
  821 +#map-playback2-modal .uk-modal-close{
  822 + z-index: 11;
  823 +}
  824 +
  825 +.map-wrap-tools .ct-progress-bar{
  826 + position: absolute;
  827 + height: 11px;
  828 + width: 100%;
  829 + bottom: 0;
  830 + cursor: pointer;
  831 + /*border-top: 5px solid white;*/
  832 +}
  833 +
  834 +.map-wrap-tools .ct-progress-bar .scale{
  835 + width: 85%;
  836 + height: 6px;
  837 + border-top: 5px solid white;
  838 + background: #2bc2d5;
  839 +}
  840 +
  841 +.map-wrap-tools .btns{
  842 + padding: 5px 10px 0 25px;
  843 +}
  844 +
  845 +.map-wrap-tools .btns>span.ct_btn{
  846 + cursor: pointer;
  847 +}
  848 +
  849 +.map-wrap-tools .btns>.play_btn{
  850 + width: 48px;
  851 + height: 48px;
  852 + display: inline-block;
  853 + background: url("/real_control_v2/assets/imgs/icon/play.png");
  854 + margin-right: 10px;
  855 +}
  856 +
  857 +.map-wrap-tools .btns>.play_btn.play{
  858 + background: url("/real_control_v2/assets/imgs/icon/pause.png");
  859 +}
  860 +
  861 +.map-wrap-tools .btns>.play_btn:hover{
  862 + box-shadow: 0px 0px 8px 0 rgba(220, 35, 35, 0.61), 0px 0px 8px 0 rgba(206, 50, 50, 0.26);
  863 + border-radius: 35px;
  864 +}
  865 +
  866 +.map-wrap-tools .btns>.multi-items{
  867 + display: inline-block;
  868 + vertical-align: top;
  869 + background: #e7e4e4;
  870 + padding: 7px 15px;
  871 + margin: 12px 5px;
  872 + border-radius: 5px;
  873 +}
  874 +
  875 +.map-wrap-tools .btns>.multi-items label{
  876 + margin-right: 10px;
  877 +}
  878 +
  879 +.map-wrap-tools .btns>.multi-items label:last-child{
  880 + margin-right: 0;
  881 +}
  882 +
  883 +.map-wrap-tools .ct_btn.text-panel{
  884 + vertical-align: top;
  885 + display: inline-block;
  886 + margin-top: 8px;
  887 + margin-left: 15px;
  888 + font-size: 13px;
  889 +}
  890 +
  891 +.map-wrap-tools .ct_btn.a.export-excel {
  892 + color: #F44336;
  893 +}
  894 +
  895 +.map-wrap-tools .ct_btn.clock{
  896 + display: inline-block;
  897 + vertical-align: top;
  898 + margin-top: 22px;
  899 + font-size: 22px;
  900 + color: #8b8686;
  901 + margin-right: 10px;
803 } 902 }
804 \ No newline at end of file 903 \ No newline at end of file
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v2/main.html
1 -<div class="uk-modal" id="map-playback2-modal">  
2 - <div class="uk-modal-dialog uk-modal-dialog-blank">  
3 - <button class="uk-modal-close uk-close" type="button"></button>  
4 - <div class="uk-grid uk-flex-middle" data-uk-grid-margin>  
5 - <div class="uk-width-medium-1-10 uk-height-viewport z-depth-viewport">  
6 - <h5 style="color: #868484;text-indent: 5px;">  
7 - 线路配车  
8 - </h5>  
9 - <div class="uk-accordion cc_info_accordion" data-uk-accordion data-uk-observe>  
10 - </div>  
11 -  
12 - </div>  
13 - <div class="uk-width-medium-2-10 uk-height-viewport z-depth-viewport ">  
14 - <form class="uk-form uk-form-horizontal playBackForm">  
15 - <div class="uk-grid">  
16 - <div class="uk-width-1-1">  
17 - <div class="uk-form-row">  
18 - <label class="uk-form-label">车辆编码</label>  
19 - <div class="uk-form-controls">  
20 - <div class="uk-autocomplete uk-form autocomplete-nbbm">  
21 - <input name="nbbm" required/>  
22 - </div>  
23 - </div>  
24 - </div>  
25 - </div>  
26 - </div>  
27 - <div class="uk-grid">  
28 - <div class="uk-width-2-3">  
29 - <div class="uk-form-row">  
30 - <label class="uk-form-label">开始时间</label>  
31 - <div class="uk-form-controls">  
32 - <input name="sDate" type="date" required/>  
33 - </div>  
34 - </div>  
35 - </div>  
36 - <div class="uk-width-1-3" style="padding-left: 15px;">  
37 - <div class="uk-form-row">  
38 - <div class="uk-form-controls" style="margin-left: 0;">  
39 - <input name="sTime" type="time" required/>  
40 - </div>  
41 - </div>  
42 - </div>  
43 - </div>  
44 - <div class="uk-grid">  
45 - <div class="uk-width-2-3">  
46 - <div class="uk-form-row">  
47 - <label class="uk-form-label">结束时间</label>  
48 - <div class="uk-form-controls">  
49 - <input name="eDate" type="date" required/>  
50 - </div>  
51 - </div>  
52 - </div>  
53 - <div class="uk-width-1-3" style="padding-left: 15px;">  
54 - <div class="uk-form-row">  
55 - <div class="uk-form-controls" style="margin-left: 0;">  
56 - <input name="eTime" type="time" required/>  
57 - </div>  
58 - </div>  
59 - </div>  
60 - </div>  
61 - <div class="uk-grid">  
62 - <button class="uk-button uk-button-large uk-button-primary playBackButton" type="submit"><i  
63 - class="uk-icon-search"> </i> 搜索轨迹  
64 - </button>  
65 - </div>  
66 - </form>  
67 - <!-- 异常警报 -->  
68 - <div class="abnormal_table_wrap">  
69 - <div class="abnormal_table_panel"  
70 - style="height: calc(100% - 15px);margin-top: 15px;overflow: auto;">  
71 - <div class="ct_table abnormal_table" style="height: calc(100% - 30px);">  
72 - <div class="ct_table_head">  
73 - <dl>  
74 - <dt>异常状态</dt>  
75 - <dt>开始时间</dt>  
76 - <dt>结束时间</dt>  
77 - <dt>图像</dt>  
78 - </dl>  
79 - </div>  
80 - <div class="ct_table_body">  
81 - <dl>  
82 - <dd>超速(80)</dd>  
83 - <dd>05:00.20</dd>  
84 - <dd>05:00.20</dd>  
85 - <dd></dd>  
86 - </dl>  
87 - <dl>  
88 - <dd>越界</dd>  
89 - <dd>05:00.20</dd>  
90 - <dd>05:00.20</dd>  
91 - <dd></dd>  
92 - </dl>  
93 - <dl>  
94 - <dd>超速(80)</dd>  
95 - <dd>05:00.20</dd>  
96 - <dd>05:00.20</dd>  
97 - <dd></dd>  
98 - </dl>  
99 - <dl>  
100 - <dd>越界</dd>  
101 - <dd>05:00.20</dd>  
102 - <dd>05:00.20</dd>  
103 - <dd></dd>  
104 - </dl>  
105 - <dl>  
106 - <dd>超速(180)</dd>  
107 - <dd>05:00.20</dd>  
108 - <dd>05:00.20</dd>  
109 - <dd></dd>  
110 - </dl>  
111 - <dl>  
112 - <dd>越界</dd>  
113 - <dd>05:00.20</dd>  
114 - <dd>05:00.20</dd>  
115 - <dd></dd>  
116 - </dl>  
117 - <dl>  
118 - <dd>超速(80)</dd>  
119 - <dd>05:00.20</dd>  
120 - <dd>05:00.20</dd>  
121 - <dd></dd>  
122 - </dl>  
123 - <dl>  
124 - <dd>越界</dd>  
125 - <dd>05:00.20</dd>  
126 - <dd>05:00.20</dd>  
127 - <dd></dd>  
128 - </dl>  
129 - <dl>  
130 - <dd>超速(80)</dd>  
131 - <dd>05:00.20</dd>  
132 - <dd>05:00.20</dd>  
133 - <dd></dd>  
134 - </dl>  
135 - <dl>  
136 - <dd>越界</dd>  
137 - <dd>05:00.20</dd>  
138 - <dd>05:00.20</dd>  
139 - <dd></dd>  
140 - </dl>  
141 - <dl>  
142 - <dd>超速(80)</dd>  
143 - <dd>05:00.20</dd>  
144 - <dd>05:00.20</dd>  
145 - <dd></dd>  
146 - </dl>  
147 - <dl>  
148 - <dd>越界</dd>  
149 - <dd>05:00.20</dd>  
150 - <dd>05:00.20</dd>  
151 - <dd></dd>  
152 - </dl>  
153 - <dl>  
154 - <dd>超速(80)</dd>  
155 - <dd>05:00.20</dd>  
156 - <dd>05:00.20</dd>  
157 - <dd></dd>  
158 - </dl>  
159 - <dl>  
160 - <dd>越界</dd>  
161 - <dd>05:00.20</dd>  
162 - <dd>05:00.20</dd>  
163 - <dd></dd>  
164 - </dl>  
165 - <dl>  
166 - <dd>超速(80)</dd>  
167 - <dd>05:00.20</dd>  
168 - <dd>05:00.20</dd>  
169 - <dd></dd>  
170 - </dl>  
171 - <dl>  
172 - <dd>越界</dd>  
173 - <dd>05:00.20</dd>  
174 - <dd>05:00.20</dd>  
175 - <dd></dd>  
176 - </dl>  
177 - <dl>  
178 - <dd>超速(80)</dd>  
179 - <dd>05:00.20</dd>  
180 - <dd>05:00.20</dd>  
181 - <dd></dd>  
182 - </dl>  
183 - <dl>  
184 - <dd>越界</dd>  
185 - <dd>05:00.20</dd>  
186 - <dd>05:00.20</dd>  
187 - <dd></dd>  
188 - </dl>  
189 - <dl>  
190 - <dd>超速(80)</dd>  
191 - <dd>05:00.20</dd>  
192 - <dd>05:00.20</dd>  
193 - <dd></dd>  
194 - </dl>  
195 - <dl>  
196 - <dd>越界</dd>  
197 - <dd>05:00.20</dd>  
198 - <dd>05:00.20</dd>  
199 - <dd></dd>  
200 - </dl>  
201 -  
202 - </div>  
203 - </div>  
204 - </div>  
205 - </div>  
206 - <!-- 路段 和 到离站信息 -->  
207 - <div class="uk-margin uk-grid other_info_table_wrap" data-uk-grid-margin>  
208 - <div class="uk-width-medium-1-1" style="padding-left: 0;">  
209 -  
210 - <ul class="uk-tab" data-uk-tab="{connect:'#real_gps_info_tab_content'}"  
211 - style="padding-left: 12px;">  
212 - <li class="uk-active"><a>行车轨迹</a></li>  
213 - <li><a>到离站信息</a></li>  
214 - </ul>  
215 -  
216 - <ul id="real_gps_info_tab_content" class="uk-switcher uk-margin"  
217 - style="height: calc(100% - 44px);margin-top: 7px;">  
218 - <li class="uk-active" style="height: 100%;">  
219 - <div class="road_table_wrap" style="height: 100%;overflow: auto;">  
220 - <div class="ct_table gps-road-info"  
221 - style="height: calc(100% - 30px);">  
222 - <div class="ct_table_head">  
223 - <dl>  
224 - <dt>时间</dt>  
225 - <dt>速度</dt>  
226 - <dt>所在路段</dt>  
227 - </dl>  
228 - </div>  
229 - <div class="ct_table_body">  
230 - </div>  
231 - </div>  
232 - </div>  
233 - </li>  
234 - <!-- 到离站数据 -->  
235 - <li style="height: 100%;">  
236 - <div class="inout_table_wrap" style="height: 100%;overflow: auto;">  
237 - <div class="ct_table" style="height: calc(100% - 30px);">  
238 - <div class="ct_table_head">  
239 - <dl>  
240 - <dt>站点</dt>  
241 - <dt>到站时间</dt>  
242 - <dt>离站时间</dt>  
243 - <dt>上客</dt>  
244 - <dt>下客</dt>  
245 - </dl>  
246 - </div>  
247 - <div class="ct_table_body">  
248 - </div>  
249 - </div>  
250 - </div>  
251 - </li>  
252 - </ul>  
253 -  
254 - </div>  
255 - </div>  
256 - </div>  
257 - <div class="uk-width-medium-7-10 uk-height-viewport map-wrap">  
258 - </div>  
259 - </div>  
260 - </div>  
261 -  
262 - <script id="cc_info_accordion_cont_temp" type="text/html">  
263 - {{each ccInfo as cc i}}  
264 - <h3 class="uk-accordion-title">{{cc.name}}</h3>  
265 - <div class="uk-accordion-content">  
266 - <ul class="uk-list">  
267 - {{each cc.cars as c j}}  
268 - <li>{{c}}</li>  
269 - {{/each}}  
270 - </ul>  
271 - </div>  
272 - {{/each}}  
273 - </script>  
274 -  
275 - <script id="gps_road_info_cont_temp" type="text/html">  
276 - {{each array as gps i}}  
277 - <dl data-code="{{gps.road.road_CODE}}">  
278 - <dd>{{gps.timeStr}}</dd>  
279 - <dd>{{gps.speed}}</dd>  
280 - <dd>{{gps.road.road_NAME}}</dd>  
281 - </dl>  
282 - {{/each}}  
283 - </script>  
284 -  
285 - <script id="multi_inout_info_cont_temp" type="text/html">  
286 - {{each list as item i}}  
287 - <dl>  
288 - <dd>{{item.stopName}}</dd>  
289 - <dd>{{item.in_time_str}}</dd>  
290 - <dd>{{item.out_time_str}}</dd>  
291 - <dd></dd>  
292 - <dd></dd>  
293 - </dl>  
294 - {{/each}}  
295 - </script>  
296 - <script>  
297 - (function () {  
298 - var modal = '#map-playback2-modal', gpsArray;  
299 -  
300 - $(modal).on('init', function (e, data) {  
301 - try{  
302 - //初始化地图  
303 - map = new BMap.Map($('.map-wrap', modal)[0]);  
304 - //中心点和缩放级别  
305 - map.centerAndZoom(new BMap.Point(gb_map_consts.center_point.lng, gb_map_consts.center_point.lat), 16);  
306 - map.enableScrollWheelZoom();  
307 - }catch (e){  
308 - console.log(e);}  
309 -  
310 - //固定表头  
311 - gb_ct_table.fixedHead($('.road_table_wrap', modal));  
312 - gb_ct_table.fixedHead($('.inout_table_wrap', modal));  
313 - gb_ct_table.fixedHead($('.abnormal_table_panel', modal));  
314 - //线路配车  
315 - ccInfo.init();  
316 -  
317 - //表单初始值  
318 - searchForm.init(data);  
319 - });  
320 -  
321 - /**  
322 - * 线路配车相关  
323 - */  
324 - var ccInfo = (function () {  
325 -  
326 - function init() {  
327 - $.get('/basic/ccInfo', function (rs) {  
328 - var ccInfo = [], lines = gb_data_basic.codeToLine;  
329 - for (var code in lines) {  
330 - ccInfo.push({  
331 - name: lines[code].name,  
332 - cars: carSort(rs[code])  
333 - });  
334 - }  
335 -  
336 - var htmlStr = template('cc_info_accordion_cont_temp', {ccInfo: ccInfo});  
337 - $('.cc_info_accordion', modal).html(htmlStr)  
338 - .find('.uk-list li').on('click', itemClick);  
339 - });  
340 - }  
341 -  
342 - function carSort(list) {  
343 - if (!list)  
344 - return [];  
345 - return list.sort();  
346 - }  
347 -  
348 - function itemClick() {  
349 - $(this).parent().find('li.active').removeClass('active');  
350 - $(this).addClass('active');  
351 - searchForm.setNbbm($(this).text());  
352 - }  
353 -  
354 - return {  
355 - init: init  
356 - };  
357 - })();  
358 -  
359 - /**  
360 - * 搜索表单相关  
361 - */  
362 - var searchForm = (function () {  
363 -  
364 - var f = $('.playBackForm', modal);  
365 -  
366 - var init = function (data) {  
367 - //设置初始值  
368 - if (data.nbbm)  
369 - $('[name=nbbm]', f).val(data.nbbm);  
370 - var st = moment().subtract(2, 'hour');  
371 - if (data.st)  
372 - st = moment(data.st, 'YYYY-MM-DD HH:mm');  
373 - $('[name=sDate]', f).val(st.format('YYYY-MM-DD'));  
374 - $('[name=sTime]', f).val(st.format('HH:mm'));  
375 - var et = moment();  
376 - if (data.et)  
377 - et = moment(data.et, 'YYYY-MM-DD HH:mm');  
378 - $('[name=eDate]', f).val(et.format('YYYY-MM-DD'));  
379 - $('[name=eTime]', f).val(et.format('HH:mm'));  
380 -  
381 - //搜索事件  
382 - $('button[type=submit]', f).on('click', search);  
383 - };  
384 -  
385 - var setNbbm = function (v) {  
386 - $('[name=nbbm]', f).val(v);  
387 - };  
388 -  
389 - var ONE_DAY = 60 * 60 * 24;  
390 - var MIN_SPACE = 60;  
391 - var search = function (e) {  
392 - e.stopPropagation();  
393 - var data = f.serializeJSON();  
394 -  
395 - //校验时间间隔  
396 - var fs = 'YYYY-MM-DDHH:mm';  
397 - var st = parseInt(moment(data.sDate + data.sTime, fs).format('X'));  
398 - var et = parseInt(moment(data.eDate + data.eTime, fs).format('X'));  
399 -  
400 - if (et < st)  
401 - notify_err('结束时间不能小于开始时间');  
402 - else if ((et - st) > ONE_DAY)  
403 - notify_err('最大间隔24小时!');  
404 - else if ((et - st) < MIN_SPACE)  
405 - notify_err('最小间隔1分钟!');  
406 - else {  
407 - $.ajax({  
408 - url: '/gps/history_v2/' + data.nbbm,  
409 - traditional: true,  
410 - data: {st: st, et: et},  
411 - success: function (rs) {  
412 - gpsArray = rs.list;  
413 - if (!rs || rs.length == 0) {  
414 - notify_err('没有搜索到轨迹数据!');  
415 - return;  
416 - }  
417 -  
418 - //排序  
419 - gpsArray.sort(function (a, b) {  
420 - return a.ts - b.ts;  
421 - });  
422 - console.log('gpsArray', gpsArray);  
423 - //行车轨迹  
424 - trailTableObj.showInitData(gpsArray);  
425 - //到离站信息  
426 - inOutStationTableObj.showInitData(gpsArray);  
427 - }  
428 - });  
429 - }  
430 - return false;  
431 - };  
432 - return {  
433 - init: init,  
434 - setNbbm: setNbbm  
435 - };  
436 - })();  
437 -  
438 - /**  
439 - * 行车轨迹表格  
440 - */  
441 - var trailTableObj = (function () {  
442 -  
443 - var showInitData = function (list) {  
444 - var array = [];  
445 - for (var i = 0, gps; gps = list[i++];) {  
446 - //格式化时间  
447 - gps.timeStr = moment(gps.timestamp).format('HH:mm.ss');  
448 - try {  
449 - if (i > 0 && array[array.length - 1].road.road_CODE == gps.road.road_CODE)  
450 - array.pop();  
451 - }  
452 - catch (e) {}  
453 -  
454 - if (gps.road)  
455 - array.push(gps);  
456 - }  
457 -  
458 - var htmlStr = template('gps_road_info_cont_temp', {array: array});  
459 - $('.gps-road-info .ct_table_body', modal).html(htmlStr);  
460 - };  
461 -  
462 - return {  
463 - showInitData: showInitData  
464 - };  
465 - })();  
466 -  
467 - /**  
468 - * 到离站信息表格  
469 - * @type {{}}  
470 - */  
471 - var inOutStationTableObj = (function () {  
472 -  
473 - var data = [];  
474 - var showInitData = function (list) {  
475 - clear();  
476 - data = [];  
477 -  
478 - $.each(list, function (i, gps) {  
479 - if(gps['inout_stop'] == -1)  
480 - return true;  
481 -  
482 - if(gps['inout_stop'] == 1){  
483 - data.push(createIn(gps));  
484 - }  
485 - else if(gps['inout_stop'] == 0){  
486 - matchOut(data[data.length - 1], gps);  
487 - }  
488 - });  
489 -  
490 - //格式化时间  
491 - $.each(data, function () {  
492 - if(this.in_ts)  
493 - this.in_time_str = moment(this.in_ts).format('HH:mm.ss');  
494 - if(this.out_ts)  
495 - this.out_time_str = moment(this.out_ts).format('HH:mm.ss');  
496 - });  
497 -  
498 - console.log('data', data);  
499 - var htmlStr = template('multi_inout_info_cont_temp', {list: data});  
500 - $('.inout_table_wrap .ct_table_body', modal).html(htmlStr);  
501 - };  
502 -  
503 - var add = function (gps) {  
504 -  
505 - /*if (gps.inout_stop == -1)  
506 - return;  
507 -  
508 - var htmlStr = template('', {obj: gps['inout_stop_info']});  
509 - $('.inout_table_wrap .ct_table .ct_table_body', modal).html(htmlStr);*/  
510 - };  
511 -  
512 - var clear = function () {  
513 -  
514 - };  
515 -  
516 - var createIn = function (gps) {  
517 - var info = gps['inout_stop_info'];  
518 - return {  
519 - in_ts: info.ts,  
520 - stopNo: info.stopNo,  
521 - stopName: info.stopName  
522 - }  
523 - };  
524 -  
525 -  
526 - var matchOut = function (info, gps) {  
527 - if(!info)  
528 - return;  
529 - var outInfo = gps['inout_stop_info'];  
530 - if(info.stopName == outInfo.stopName){  
531 - info['out_ts'] = outInfo.ts;  
532 - }  
533 - };  
534 -  
535 - return {  
536 - showInitData: showInitData  
537 - };  
538 - })();  
539 - })();  
540 - </script> 1 +<div class="uk-modal" id="map-playback2-modal">
  2 + <div class="uk-modal-dialog uk-modal-dialog-blank">
  3 + <button class="uk-modal-close uk-close" type="button"></button>
  4 + <div class="uk-grid uk-flex-middle" data-uk-grid-margin>
  5 + <div class="uk-width-medium-1-10 uk-height-viewport z-depth-viewport">
  6 + <h5 style="color: #868484;text-indent: 5px;">
  7 + 线路配车
  8 + </h5>
  9 + <div class="uk-accordion cc_info_accordion" data-uk-accordion data-uk-observe>
  10 + </div>
  11 +
  12 + </div>
  13 + <div class="uk-width-medium-2-10 uk-height-viewport z-depth-viewport ">
  14 + <form class="uk-form uk-form-horizontal playBackForm">
  15 + <div class="uk-grid">
  16 + <div class="uk-width-1-1">
  17 + <div class="uk-form-row">
  18 + <label class="uk-form-label">车辆编码</label>
  19 + <div class="uk-form-controls">
  20 + <div class="uk-autocomplete uk-form autocomplete-nbbm">
  21 + <input name="nbbm" required/>
  22 + </div>
  23 + </div>
  24 + </div>
  25 + </div>
  26 + </div>
  27 + <div class="uk-grid">
  28 + <div class="uk-width-2-3">
  29 + <div class="uk-form-row">
  30 + <label class="uk-form-label">开始时间</label>
  31 + <div class="uk-form-controls">
  32 + <input name="sDate" type="date" required/>
  33 + </div>
  34 + </div>
  35 + </div>
  36 + <div class="uk-width-1-3" style="padding-left: 15px;">
  37 + <div class="uk-form-row">
  38 + <div class="uk-form-controls" style="margin-left: 0;">
  39 + <input name="sTime" type="time" required/>
  40 + </div>
  41 + </div>
  42 + </div>
  43 + </div>
  44 + <div class="uk-grid">
  45 + <div class="uk-width-2-3">
  46 + <div class="uk-form-row">
  47 + <label class="uk-form-label">结束时间</label>
  48 + <div class="uk-form-controls">
  49 + <input name="eDate" type="date" required/>
  50 + </div>
  51 + </div>
  52 + </div>
  53 + <div class="uk-width-1-3" style="padding-left: 15px;">
  54 + <div class="uk-form-row">
  55 + <div class="uk-form-controls" style="margin-left: 0;">
  56 + <input name="eTime" type="time" required/>
  57 + </div>
  58 + </div>
  59 + </div>
  60 + </div>
  61 + <div class="uk-grid">
  62 + <button class="uk-button uk-button-large uk-button-primary playBackButton" type="submit"><i
  63 + class="uk-icon-search"> </i> 搜索轨迹
  64 + </button>
  65 + </div>
  66 + </form>
  67 + <!-- 异常警报 -->
  68 + <div class="abnormal_table_wrap">
  69 + <div class="abnormal_table_panel"
  70 + style="height: calc(100% - 15px);margin-top: 15px;overflow: auto;">
  71 + <div class="ct_table abnormal_table" style="height: calc(100% - 30px);">
  72 + <div class="ct_table_head">
  73 + <dl>
  74 + <dt>异常状态</dt>
  75 + <dt>开始时间</dt>
  76 + <dt>结束时间</dt>
  77 + <dt>图像</dt>
  78 + </dl>
  79 + </div>
  80 + <div class="ct_table_body">
  81 + </div>
  82 + </div>
  83 + </div>
  84 + </div>
  85 + <!-- 路段 和 到离站信息 -->
  86 + <div class="uk-margin uk-grid other_info_table_wrap" data-uk-grid-margin>
  87 + <div class="uk-width-medium-1-1" style="padding-left: 0;">
  88 +
  89 + <ul class="uk-tab" data-uk-tab="{connect:'#real_gps_info_tab_content'}"
  90 + style="padding-left: 12px;">
  91 + <li class="uk-active"><a>行车轨迹</a></li>
  92 + <li><a>到离站信息</a></li>
  93 + </ul>
  94 +
  95 + <ul id="real_gps_info_tab_content" class="uk-switcher uk-margin"
  96 + style="height: calc(100% - 44px);margin-top: 7px;">
  97 + <li class="uk-active" style="height: 100%;">
  98 + <div class="road_table_wrap" style="height: 100%;overflow: auto;">
  99 + <div class="ct_table gps-road-info"
  100 + style="height: calc(100% - 30px);">
  101 + <div class="ct_table_head">
  102 + <dl>
  103 + <dt>时间</dt>
  104 + <dt>速度</dt>
  105 + <dt>所在路段</dt>
  106 + </dl>
  107 + </div>
  108 + <div class="ct_table_body">
  109 + </div>
  110 + </div>
  111 + </div>
  112 + </li>
  113 + <!-- 到离站数据 -->
  114 + <li style="height: 100%;">
  115 + <div class="inout_table_wrap" style="height: 100%;overflow: auto;">
  116 + <div class="ct_table" style="height: calc(100% - 30px);">
  117 + <div class="ct_table_head">
  118 + <dl>
  119 + <dt>站点</dt>
  120 + <dt>到站时间</dt>
  121 + <dt>离站时间</dt>
  122 + <dt>上客</dt>
  123 + <dt>下客</dt>
  124 + </dl>
  125 + </div>
  126 + <div class="ct_table_body">
  127 + </div>
  128 + </div>
  129 + </div>
  130 + </li>
  131 + </ul>
  132 +
  133 + </div>
  134 + </div>
  135 + </div>
  136 + <div class="uk-width-medium-7-10 uk-height-viewport map-wrap" style="padding-left: 0;position: relative;">
  137 + <div class="map-wrap-tools uk-animation-slide-top">
  138 + <div class="btns">
  139 + <span class="ct_btn play_btn"></span>
  140 + <span class="ct_btn clock">
  141 + 08:20.10
  142 + </span>
  143 + <div class="multi-items">
  144 + <form class="uk-form">
  145 + <label>
  146 + <input type="radio" name="playSpeed"> x1
  147 + </label>
  148 + <label>
  149 + <input type="radio" name="playSpeed"> x5
  150 + </label>
  151 + <label>
  152 + <input type="radio" name="playSpeed"> x10
  153 + </label>
  154 + <label>
  155 + <input type="radio" name="playSpeed"> x20
  156 + </label>
  157 + </form>
  158 + </div>
  159 + <div class="multi-items">
  160 + <form class="uk-form">
  161 + <label>
  162 + <input type="checkbox"> 站点
  163 + </label>
  164 + <label>
  165 + <input type="checkbox"> 缓冲区
  166 + </label>
  167 + <label>
  168 + <input type="checkbox"> 站点名称
  169 + </label>
  170 + <label>
  171 + 停车场 <i class="uk-icon-angle-down"></i>
  172 + </label>
  173 + </form>
  174 + </div>
  175 + <span class="ct_btn text-panel">
  176 + <span>约12.58公里,1258个GPS点</span><br>
  177 + <a class="export-excel"><i class="uk-icon-file-excel-o"></i> 导出轨迹</a>
  178 + </span>
  179 + </div>
  180 + <div class="ct-progress-bar" >
  181 + <div class="scale"></div>
  182 + </div>
  183 + </div>
  184 + <div class="map-container"></div>
  185 + </div>
  186 + </div>
  187 + </div>
  188 +
  189 + <script id="cc_info_accordion_cont_temp" type="text/html">
  190 + {{each ccInfo as cc i}}
  191 + <h3 class="uk-accordion-title">{{cc.name}}</h3>
  192 + <div class="uk-accordion-content">
  193 + <ul class="uk-list">
  194 + {{each cc.cars as c j}}
  195 + <li>{{c}}</li>
  196 + {{/each}}
  197 + </ul>
  198 + </div>
  199 + {{/each}}
  200 + </script>
  201 +
  202 + <script id="gps_road_info_cont_temp" type="text/html">
  203 + {{each array as gps i}}
  204 + <dl data-code="{{gps.road.road_CODE}}">
  205 + <dd>{{gps.timeStr}}</dd>
  206 + <dd>{{gps.speed}}</dd>
  207 + <dd>{{gps.road.road_NAME}}</dd>
  208 + </dl>
  209 + {{/each}}
  210 + </script>
  211 +
  212 + <script id="multi_inout_info_cont_temp" type="text/html">
  213 + {{each list as item i}}
  214 + <dl>
  215 + <dd>{{item.stopName}}</dd>
  216 + <dd>{{item.in_time_str}}</dd>
  217 + <dd>{{item.out_time_str}}</dd>
  218 + <dd></dd>
  219 + <dd></dd>
  220 + </dl>
  221 + {{/each}}
  222 + </script>
  223 +
  224 + <script id="abnormal_table_cont_temp" type="text/html">
  225 + {{each array as item i}}
  226 + <dl>
  227 + <dd>
  228 + {{if item.abnormalType == 'speed'}}
  229 + 超速({{item.speed}})
  230 + {{else if item.abnormalType == 'outbound'}}
  231 + 越界
  232 + {{/if}}
  233 + </dd>
  234 + <dd>{{item.st_str}}</dd>
  235 + <dd>{{item.et_str}}</dd>
  236 + <dd></dd>
  237 + </dl>
  238 + {{/each}}
  239 + </script>
  240 + <script>
  241 + (function () {
  242 + var modal = '#map-playback2-modal', gpsArray;
  243 +
  244 + $(modal).on('init', function (e, data) {
  245 + try {
  246 + //初始化地图
  247 + map = new BMap.Map($('.map-container', modal)[0]);
  248 + //中心点和缩放级别
  249 + map.centerAndZoom(new BMap.Point(gb_map_consts.center_point.lng, gb_map_consts.center_point.lat), 16);
  250 + map.enableScrollWheelZoom();
  251 + } catch (e) {
  252 + console.log(e);
  253 + }
  254 +
  255 + //固定表头
  256 + gb_ct_table.fixedHead($('.road_table_wrap', modal));
  257 + gb_ct_table.fixedHead($('.inout_table_wrap', modal));
  258 + gb_ct_table.fixedHead($('.abnormal_table_panel', modal));
  259 + //线路配车
  260 + ccInfo.init();
  261 +
  262 + //表单初始值
  263 + searchForm.init(data);
  264 + });
  265 +
  266 + /**
  267 + * 线路配车相关
  268 + */
  269 + var ccInfo = (function () {
  270 +
  271 + function init() {
  272 + $.get('/basic/ccInfo', function (rs) {
  273 + var ccInfo = [], lines = gb_data_basic.codeToLine;
  274 + for (var code in lines) {
  275 + ccInfo.push({
  276 + name: lines[code].name,
  277 + cars: carSort(rs[code])
  278 + });
  279 + }
  280 +
  281 + var htmlStr = template('cc_info_accordion_cont_temp', {ccInfo: ccInfo});
  282 + $('.cc_info_accordion', modal).html(htmlStr)
  283 + .find('.uk-list li').on('click', itemClick);
  284 + });
  285 + }
  286 +
  287 + function carSort(list) {
  288 + if (!list)
  289 + return [];
  290 + return list.sort();
  291 + }
  292 +
  293 + function itemClick() {
  294 + $(this).parent().find('li.active').removeClass('active');
  295 + $(this).addClass('active');
  296 + searchForm.setNbbm($(this).text());
  297 + }
  298 +
  299 + return {
  300 + init: init
  301 + };
  302 + })();
  303 +
  304 + /**
  305 + * 搜索表单相关
  306 + */
  307 + var searchForm = (function () {
  308 +
  309 + var f = $('.playBackForm', modal);
  310 +
  311 + var init = function (data) {
  312 + //设置初始值
  313 + /*if (data.nbbm)
  314 + $('[name=nbbm]', f).val(data.nbbm);
  315 + var st = moment().subtract(2, 'hour');
  316 + if (data.st)
  317 + st = moment(data.st, 'YYYY-MM-DD HH:mm');
  318 + $('[name=sDate]', f).val(st.format('YYYY-MM-DD'));
  319 + $('[name=sTime]', f).val(st.format('HH:mm'));
  320 + var et = moment();
  321 + if (data.et)
  322 + et = moment(data.et, 'YYYY-MM-DD HH:mm');
  323 + $('[name=eDate]', f).val(et.format('YYYY-MM-DD'));
  324 + $('[name=eTime]', f).val(et.format('HH:mm'));*/
  325 +
  326 +
  327 + $('[name=nbbm]', f).val('W0A-018');
  328 + $('[name=sDate]', f).val('2017-04-06');
  329 + $('[name=sTime]', f).val('04:49');
  330 +
  331 + $('[name=eDate]', f).val('2017-04-06');
  332 + $('[name=eTime]', f).val('09:49');
  333 + //搜索事件
  334 + $('button[type=submit]', f).on('click', search);
  335 + };
  336 +
  337 + var setNbbm = function (v) {
  338 + $('[name=nbbm]', f).val(v);
  339 + };
  340 +
  341 + var ONE_DAY = 60 * 60 * 24;
  342 + var MIN_SPACE = 60;
  343 + var search = function (e) {
  344 + e.stopPropagation();
  345 + var data = f.serializeJSON();
  346 +
  347 + //校验时间间隔
  348 + var fs = 'YYYY-MM-DDHH:mm';
  349 + var st = parseInt(moment(data.sDate + data.sTime, fs).format('X'));
  350 + var et = parseInt(moment(data.eDate + data.eTime, fs).format('X'));
  351 +
  352 + if (et < st)
  353 + notify_err('结束时间不能小于开始时间');
  354 + else if ((et - st) > ONE_DAY)
  355 + notify_err('最大间隔24小时!');
  356 + else if ((et - st) < MIN_SPACE)
  357 + notify_err('最小间隔1分钟!');
  358 + else {
  359 + $.ajax({
  360 + url: '/gps/history_v2/' + data.nbbm,
  361 + traditional: true,
  362 + data: {st: st, et: et},
  363 + success: function (rs) {
  364 + gpsArray = rs.list;
  365 + if (!rs || rs.length == 0) {
  366 + notify_err('没有搜索到轨迹数据!');
  367 + return;
  368 + }
  369 +
  370 + //排序
  371 + gpsArray.sort(function (a, b) {
  372 + return parseInt((a.ts - b.ts) + '' + (a.stop_no - b.stop_no));
  373 + });
  374 + //行车轨迹
  375 + trailTableObj.showInitData(gpsArray);
  376 + //到离站信息
  377 + inOutStationTableObj.showInitData(gpsArray);
  378 + //异常信息
  379 + abnormalTableObj.showInitData(rs['outboundList'], rs['speedList']);
  380 + //show 工具条
  381 + mapTools.show();
  382 + }
  383 + });
  384 + }
  385 + return false;
  386 + };
  387 + return {
  388 + init: init,
  389 + setNbbm: setNbbm
  390 + };
  391 + })();
  392 +
  393 + /**
  394 + * 行车轨迹表格
  395 + */
  396 + var trailTableObj = (function () {
  397 +
  398 + var showInitData = function (list) {
  399 + var array = [];
  400 + for (var i = 0, gps; gps = list[i++];) {
  401 + //格式化时间
  402 + gps.timeStr = moment(gps.timestamp).format('HH:mm.ss');
  403 + try {
  404 + if (i > 0 && array[array.length - 1].road.road_CODE == gps.road.road_CODE)
  405 + array.pop();
  406 + }
  407 + catch (e) {
  408 + }
  409 +
  410 + if (gps.road)
  411 + array.push(gps);
  412 + }
  413 +
  414 + var htmlStr = template('gps_road_info_cont_temp', {array: array});
  415 + $('.gps-road-info .ct_table_body', modal).html(htmlStr);
  416 + };
  417 +
  418 + return {
  419 + showInitData: showInitData
  420 + };
  421 + })();
  422 +
  423 + /**
  424 + * 到离站信息表格
  425 + * @type {{}}
  426 + */
  427 + var inOutStationTableObj = (function () {
  428 +
  429 + var data, f, prev;
  430 + var showInitData = function (list) {
  431 + clear();
  432 + data = [];
  433 +
  434 + $.each(list, function (i, gps) {
  435 +
  436 + prev = data[data.length - 1];
  437 + if (gps['inout_stop'] == -1)
  438 + return true;
  439 +
  440 + if (gps['inout_stop'] == 0) {
  441 + //连续进站信号,取第一个
  442 + if(prev && prev['out_ts'] == null
  443 + && prev['stopName'] == gps['inout_stop_info'].stopName){
  444 + return true;
  445 + }
  446 + data.push(createIn(gps));
  447 + }
  448 + else if (gps['inout_stop'] == 1) {
  449 + f = matchOut(prev, gps);
  450 + if(f)
  451 + data.push(f);
  452 + }
  453 + });
  454 +
  455 + //格式化时间
  456 + $.each(data, function () {
  457 + if (this.in_ts)
  458 + this.in_time_str = moment(this.in_ts).format('HH:mm.ss');
  459 + if (this.out_ts)
  460 + this.out_time_str = moment(this.out_ts).format('HH:mm.ss');
  461 + });
  462 +
  463 + var htmlStr = template('multi_inout_info_cont_temp', {list: data});
  464 + $('.inout_table_wrap .ct_table_body', modal).html(htmlStr);
  465 + };
  466 +
  467 + var add = function (gps) {
  468 +
  469 + };
  470 +
  471 + var clear = function () {
  472 +
  473 + };
  474 +
  475 + var createIn = function (gps) {
  476 + var info = gps['inout_stop_info'];
  477 + return {
  478 + in_ts: info.ts,
  479 + stopNo: info.stopNo,
  480 + stopName: info.stopName
  481 + }
  482 + };
  483 +
  484 +
  485 + var matchOut = function (prevInfo, gps) {
  486 + var oi = gps['inout_stop_info'];
  487 + if(prevInfo && prevInfo.stopName == oi.stopName){
  488 + prevInfo['out_ts'] = oi.ts;
  489 + return null;
  490 + }
  491 + else {
  492 + return {
  493 + out_ts: oi.ts,
  494 + stopNo: oi.stopNo,
  495 + stopName: oi.stopName
  496 + }
  497 + }
  498 + };
  499 +
  500 + return {
  501 + showInitData: showInitData
  502 + };
  503 + })();
  504 +
  505 + /**
  506 + * 异常信息表格
  507 + * @type {{showInitData}}
  508 + */
  509 + var abnormalTableObj = (function () {
  510 +
  511 + var showInitData = function () {
  512 + var array = [];
  513 + for(var i = 0; i < arguments.length; i ++){
  514 + array = array.concat(arguments[i]);
  515 + }
  516 + //格式化时间
  517 + $.each(array, function () {
  518 + if(this.st)
  519 + this.st_str = moment(this.st).format('HH:mm.ss');
  520 + if(this.et)
  521 + this.et_str = moment(this.et).format('HH:mm.ss');
  522 + });
  523 +
  524 + var htmlStr = template('abnormal_table_cont_temp', {array: array});
  525 + $('.abnormal_table .ct_table_body', modal).html(htmlStr);
  526 + };
  527 +
  528 + return {
  529 + showInitData: showInitData
  530 + }
  531 + })();
  532 +
  533 + /**
  534 + * 工具条相关
  535 + */
  536 + var mapTools = (function () {
  537 +
  538 + $('.map-wrap-tools .play_btn', modal).on('click', function () {
  539 + if($(this).hasClass('play')){
  540 + //暂停
  541 + $(this).removeClass('play');
  542 + }
  543 + else {
  544 + //播放
  545 + $(this).addClass('play');
  546 + }
  547 + });
  548 +
  549 + var show = function () {
  550 + $('.map-wrap-tools').show();
  551 + };
  552 +
  553 + return {
  554 + show: show
  555 + }
  556 + })();
  557 + })();
  558 + </script>
541 </div> 559 </div>
542 \ No newline at end of file 560 \ No newline at end of file
src/main/resources/static/real_control_v2/mapmonitor/js/playback.js
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 var gb_map_play_back = (function () { 3 var gb_map_play_back = (function () {
4 4
5 var dom; 5 var dom;
6 - $.get('/real_control_v2/mapmonitor/fragments/playback/main.html', function (rs) { 6 + $.get('/real_control_v2/mapmonitor/fragments/playback_v2/main.html', function (rs) {
7 dom = rs; 7 dom = rs;
8 }); 8 });
9 9
@@ -13,10 +13,11 @@ var gb_map_play_back = (function () { @@ -13,10 +13,11 @@ var gb_map_play_back = (function () {
13 gb_map_imap.call('closeWin', deviceId); 13 gb_map_imap.call('closeWin', deviceId);
14 14
15 //show modal 15 //show modal
16 - var modal = '#map-playback-modal';  
17 - $(document.body).append(dom);  
18 - UIkit.modal(modal, {bgclose: false}).show();  
19 - $(modal).trigger('show_form', {deviceId: deviceId, nbbm: nbbm}); 16 + open_modal_dom(dom, {deviceId: deviceId, nbbm: nbbm});
  17 + //var modal = '#map-playback2-modal';
  18 + //$(document.body).append(dom);
  19 + //UIkit.modal(modal, {bgclose: false}).show();
  20 + //$(modal).trigger('show_form', {deviceId: deviceId, nbbm: nbbm});
20 }; 21 };
21 22
22 //导出excel 23 //导出excel