Commit e17bae2bb8c672b38b891b8ad26ec5fac20f65f6

Authored by 王通
1 parent 0e3171c4

1.互联网公交实时GPS接口开放

src/main/java/com/bsth/StartCommand.java
1   -package com.bsth;
2   -
3   -
4   -import com.bsth.server_rs.gps.buffer.GpsRefreshThread;
5   -import com.bsth.server_rs.schedule.real.thread.ExecSchDataRefreshThread;
6   -import com.bsth.server_rs.schedule.real.thread.SchInOutDataRefreshThread;
7   -import com.bsth.server_rs.thread.RfidCardInfoPersistenceThread;
8   -import org.springframework.beans.factory.annotation.Autowired;
9   -import org.springframework.boot.CommandLineRunner;
10   -import org.springframework.stereotype.Component;
11   -
12   -import java.util.concurrent.ScheduledExecutorService;
13   -import java.util.concurrent.TimeUnit;
14   -
15   -
16   -/**
17   - * 随应用启动运行
18   - * @author PanZhao
19   - *
20   - */
21   -@Component
22   -public class StartCommand implements CommandLineRunner{
23   -
24   -
25   - @Autowired
26   - RfidCardInfoPersistenceThread rfidCardInfoPersistenceThread;
27   - @Autowired
28   - SchInOutDataRefreshThread schInOutDataRefreshThread;
29   - @Autowired
30   - ExecSchDataRefreshThread execSchDataRefreshThread;
31   - @Autowired
32   - GpsRefreshThread gpsRefreshThread;
33   -
34   - @Override
35   - public void run(String... arg0){
36   -
37   - try {
38   - ScheduledExecutorService sexec = Application.mainServices;
39   - //定时将人车卡数据入库
40   - sexec.scheduleWithFixedDelay(rfidCardInfoPersistenceThread, 120, 60 * 10, TimeUnit.SECONDS);
41   - //定时从调度系统刷新进出场数据
42   - sexec.scheduleWithFixedDelay(schInOutDataRefreshThread, 40, 60, TimeUnit.SECONDS);
43   - //定时从调度系统刷新车辆正在的执行班次
44   - sexec.scheduleWithFixedDelay(execSchDataRefreshThread, 20, 60, TimeUnit.SECONDS);
45   - //定时刷新实时gps缓存
46   - Application.mainServices.scheduleWithFixedDelay(gpsRefreshThread, 10, 7, TimeUnit.SECONDS);
47   -
48   -
49   - } catch (Exception e) {
50   - e.printStackTrace();
51   - }
52   - }
53   -}
  1 +package com.bsth;
  2 +
  3 +
  4 +import com.bsth.server_rs.gps.buffer.BasicDataRefreshThread;
  5 +import com.bsth.server_rs.gps.buffer.GpsRefreshThread;
  6 +import com.bsth.server_rs.schedule.real.thread.ExecSchDataRefreshThread;
  7 +import com.bsth.server_rs.schedule.real.thread.SchInOutDataRefreshThread;
  8 +import com.bsth.server_rs.thread.RfidCardInfoPersistenceThread;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.boot.CommandLineRunner;
  11 +import org.springframework.stereotype.Component;
  12 +
  13 +import java.util.concurrent.ScheduledExecutorService;
  14 +import java.util.concurrent.TimeUnit;
  15 +
  16 +
  17 +/**
  18 + * 随应用启动运行
  19 + * @author PanZhao
  20 + *
  21 + */
  22 +@Component
  23 +public class StartCommand implements CommandLineRunner{
  24 +
  25 +
  26 + @Autowired
  27 + RfidCardInfoPersistenceThread rfidCardInfoPersistenceThread;
  28 + @Autowired
  29 + SchInOutDataRefreshThread schInOutDataRefreshThread;
  30 + @Autowired
  31 + ExecSchDataRefreshThread execSchDataRefreshThread;
  32 + @Autowired
  33 + GpsRefreshThread gpsRefreshThread;
  34 + @Autowired
  35 + BasicDataRefreshThread basicDataRefreshThread;
  36 +
  37 + @Override
  38 + public void run(String... arg0){
  39 +
  40 + try {
  41 + ScheduledExecutorService sexec = Application.mainServices;
  42 + //定时将人车卡数据入库
  43 + sexec.scheduleWithFixedDelay(rfidCardInfoPersistenceThread, 120, 60 * 10, TimeUnit.SECONDS);
  44 + //定时从调度系统刷新进出场数据
  45 + sexec.scheduleWithFixedDelay(schInOutDataRefreshThread, 40, 60, TimeUnit.SECONDS);
  46 + //定时从调度系统刷新车辆正在的执行班次
  47 + sexec.scheduleWithFixedDelay(execSchDataRefreshThread, 20, 60, TimeUnit.SECONDS);
  48 + //定时刷新实时gps缓存
  49 + Application.mainServices.scheduleWithFixedDelay(gpsRefreshThread, 10, 7, TimeUnit.SECONDS);
  50 + //定时刷新基础信息
  51 + Application.mainServices.scheduleWithFixedDelay(basicDataRefreshThread, 30, 30, TimeUnit.MINUTES);
  52 +
  53 + } catch (Exception e) {
  54 + e.printStackTrace();
  55 + }
  56 + }
  57 +}
... ...
src/main/java/com/bsth/server_rs/gps/GpsRestService.java
... ... @@ -62,10 +62,10 @@ public class GpsRestService {
62 62 public List<Map<String, Object>> gpsReport() {
63 63 List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
64 64 Collection<GpsEntity> gpss = GpsRealDataBuffer.all();
65   - Set<String> devices = BasicDataBuffer.getAllDevice();
  65 + Set<Integer> lines = BasicDataBuffer.getAllLine();
66 66 for (GpsEntity gps : gpss) {
67 67 String device = gps.getDeviceId();
68   - if (devices.contains(device)) {
  68 + if (lines.contains(Integer.parseInt(gps.getLineId()))) {
69 69 Map<String, Object> map = new HashMap<String, Object>();
70 70 map.put("vehicleNumberPlate", BasicDataBuffer.getPlateByDevice(device));
71 71 try {
... ...
src/main/java/com/bsth/server_rs/gps/buffer/BasicDataBuffer.java
1   -package com.bsth.server_rs.gps.buffer;
2   -
3   -import java.util.HashMap;
4   -import java.util.Map;
5   -import java.util.Set;
6   -
7   -import org.springframework.stereotype.Component;
8   -
9   -import com.bsth.server_rs.gps.entity.LineInfo;
10   -
11   -/**
12   - * Created by panzhao on 2017/3/30.
13   - */
14   -@Component
15   -public class BasicDataBuffer {
16   -
17   - private static Map<Integer, LineInfo> LINEID_INFO = new HashMap<Integer, LineInfo>();
18   -
19   - private static Map<String, String> DEVICE_PLATE = new HashMap<String, String>();
20   -
21   - public static void putLine(Integer lineId, LineInfo info) {
22   - LINEID_INFO.put(lineId, info);
23   - }
24   -
25   - public static void putCar(String deviceId, String plateNo) {
26   - DEVICE_PLATE.put(deviceId, plateNo);
27   - }
28   -
29   - public static String getPlateByDevice(String deviceId) {
30   - return DEVICE_PLATE.get(deviceId);
31   - }
32   -
33   - public static Set<String> getAllDevice() {
34   - return DEVICE_PLATE.keySet();
35   - }
36   -
37   - public static LineInfo getLineById(Integer lineId) {
38   - return LINEID_INFO.get(lineId);
39   - }
40   -}
  1 +package com.bsth.server_rs.gps.buffer;
  2 +
  3 +import java.util.HashMap;
  4 +import java.util.Map;
  5 +import java.util.Set;
  6 +
  7 +import org.springframework.stereotype.Component;
  8 +
  9 +import com.bsth.server_rs.gps.entity.LineInfo;
  10 +
  11 +/**
  12 + * Created by panzhao on 2017/3/30.
  13 + */
  14 +@Component
  15 +public class BasicDataBuffer {
  16 +
  17 + private static Map<Integer, LineInfo> LINEID_INFO = new HashMap<Integer, LineInfo>();
  18 +
  19 + private static Map<String, String> DEVICE_PLATE = new HashMap<String, String>();
  20 +
  21 + public static void putLine(Integer lineId, LineInfo info) {
  22 + LINEID_INFO.put(lineId, info);
  23 + }
  24 +
  25 + public static void putCar(String deviceId, String plateNo) {
  26 + DEVICE_PLATE.put(deviceId, plateNo);
  27 + }
  28 +
  29 + public static String getPlateByDevice(String deviceId) {
  30 + return DEVICE_PLATE.get(deviceId);
  31 + }
  32 +
  33 + public static Set<Integer> getAllLine() {
  34 + return LINEID_INFO.keySet();
  35 + }
  36 +
  37 + public static LineInfo getLineById(Integer lineId) {
  38 + return LINEID_INFO.get(lineId);
  39 + }
  40 +}
... ...
src/main/java/com/bsth/server_rs/gps/buffer/BasicDataRefreshThread.java
1   -package com.bsth.server_rs.gps.buffer;
2   -
3   -import java.sql.ResultSet;
4   -import java.sql.SQLException;
5   -import java.util.ArrayList;
6   -import java.util.List;
7   -import java.util.Map;
8   -
9   -import org.slf4j.Logger;
10   -import org.slf4j.LoggerFactory;
11   -import org.springframework.beans.factory.annotation.Autowired;
12   -import org.springframework.jdbc.core.JdbcTemplate;
13   -import org.springframework.jdbc.core.RowMapper;
14   -import org.springframework.stereotype.Component;
15   -
16   -import com.bsth.server_rs.gps.entity.LineInfo;
17   -import com.bsth.server_rs.gps.entity.Point;
18   -import com.bsth.server_rs.gps.entity.StopInfo;
19   -
20   -/**
21   - * Created by panzhao on 2017/3/30.
22   - */
23   -@Component
24   -public class BasicDataRefreshThread extends Thread{
25   -
26   - Logger logger = LoggerFactory.getLogger(this.getClass());
27   -
28   - @Autowired
29   - private JdbcTemplate jdbcTemplate;
30   -
31   - @Override
32   - public void run() {
33   - try {
34   - String qline = "select a.id,line_code,name,start_station_name,start_station_first_time,start_station_end_time,end_station_name,end_station_first_time,end_station_end_time,company,branche_company,length,telephone,speed_limit,shanghai_linecode,line_play_type,up_travel_time,down_travel_time from bsth_c_line a left join bsth_c_line_information b on a.id = b.line where a.destroy = 0";
35   - String qstop = "select b.id,b.station_cod,b.station_name,b.road_coding,b.g_lonx,b.g_laty,b.shapes_type,b.radius,AsText(b.g_polygon_grid) as g_polygon_grid,a.line,a.line_code,a.directions,a.distances from bsth_c_stationroute a join bsth_c_station b on a.station = b.id where a.destroy = 0 order by a.line,a.directions,a.station_route_code";
36   - String qcar = "select equipment_code device_id, car_plate plate_no from bsth_c_cars a where a.supplier_name = 3";
37   -
38   - List<LineInfo> lines = jdbcTemplate.query(qline, new RowMapperLineInfo());
39   - List<StopInfo> stops = jdbcTemplate.query(qstop, new RowMapperStopInfo());
40   - List<Map<String, Object>> cars = jdbcTemplate.queryForList(qcar);
41   -
42   - // 缓存线路基本信息
43   - for (LineInfo line : lines) {
44   - BasicDataBuffer.putLine(line.getLineId(), line);
45   - }
46   -
47   - // 线路信息中添加上下行站点信息
48   - int oldId = -1;
49   - LineInfo line = null;
50   - for (StopInfo stop : stops) {
51   - if (stop.getLineCode() != oldId) {
52   - oldId = stop.getLineCode();
53   - line = BasicDataBuffer.getLineById(oldId);
54   - }
55   - if (line != null) {
56   - if (stop.getDirections() == 0) line.getStopsUp().add(stop);
57   - else line.getStopsDown().add(stop);
58   - }
59   - }
60   -
61   - for (Map<String, Object> car : cars) {
62   - BasicDataBuffer.putCar((String)car.get("device_id"), (String)car.get("plate_no"));
63   - }
64   - }catch (Exception e){
65   - logger.error("", e);
66   - }
67   - }
68   -
69   - final class RowMapperLineInfo implements RowMapper<LineInfo> {
70   -
71   - @Override
72   - public LineInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
73   - // TODO Auto-generated method stub
74   - LineInfo line = new LineInfo();
75   - line.setId(rs.getInt("id"));
76   - line.setInUse(rs.getInt("in_use"));
77   - line.setLineId(rs.getInt("line_code"));
78   - line.setLineName(rs.getString("name"));
79   - //line.setStartStation(rs.getInt("start_station"));
80   - line.setStartStationName(rs.getString("start_station_name"));
81   - line.setStartStationFirstTime(rs.getString("start_station_first_time"));
82   - line.setStartStationEndTime(rs.getString("start_station_end_time"));
83   - //line.setEndStation(rs.getInt("end_station"));
84   - line.setEndStationName(rs.getString("end_station_name"));
85   - line.setEndStationFirstTime(rs.getString("end_station_first_time"));
86   - line.setEndStationEndTime(rs.getString("end_station_end_time"));
87   - line.setCompany(rs.getString("company"));
88   - line.setBrancheCompany(rs.getString("branche_company"));
89   - line.setTelephone(rs.getString("telephone"));
90   - line.setLinePlayType(rs.getInt("line_play_type"));
91   - return line;
92   - }
93   -
94   - }
95   -
96   - final class RowMapperStopInfo implements RowMapper<StopInfo> {
97   -
98   - @Override
99   - public StopInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
100   - // TODO Auto-generated method stub
101   - StopInfo stop = new StopInfo();
102   - stop.setId(rs.getInt("id"));
103   - stop.setStationCod(rs.getString("station_cod"));
104   - stop.setStationName(rs.getString("station_name"));
105   - //stop.setStationType(rs.getString("station_type"));
106   - stop.setRoadCoding(rs.getString("road_coding"));
107   - float lon = rs.getFloat("g_lonx");
108   - float lat = rs.getFloat("g_laty");
109   - stop.setPoint(new Point(lon, lat));
110   - stop.setLineId(rs.getInt("line"));
111   - stop.setLineCode(rs.getInt("line_code"));
112   - stop.setDirections(rs.getInt("directions"));
113   - stop.setShapesType(rs.getString("shapes_type"));
114   - stop.setRadius(rs.getInt("radius"));
115   - stop.setPoints(new ArrayList<Point>());
116   - stop.setDistances(rs.getDouble("distances")*1000);
117   - return stop;
118   - }
119   -
120   - }
121   -}
  1 +package com.bsth.server_rs.gps.buffer;
  2 +
  3 +import java.sql.ResultSet;
  4 +import java.sql.SQLException;
  5 +import java.util.ArrayList;
  6 +import java.util.List;
  7 +import java.util.Map;
  8 +
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
  11 +import org.springframework.beans.factory.InitializingBean;
  12 +import org.springframework.beans.factory.annotation.Autowired;
  13 +import org.springframework.jdbc.core.JdbcTemplate;
  14 +import org.springframework.jdbc.core.RowMapper;
  15 +import org.springframework.stereotype.Component;
  16 +
  17 +import com.bsth.server_rs.gps.entity.LineInfo;
  18 +import com.bsth.server_rs.gps.entity.Point;
  19 +import com.bsth.server_rs.gps.entity.StopInfo;
  20 +
  21 +/**
  22 + * Created by panzhao on 2017/3/30.
  23 + */
  24 +@Component
  25 +public class BasicDataRefreshThread extends Thread implements InitializingBean {
  26 +
  27 + Logger logger = LoggerFactory.getLogger(this.getClass());
  28 +
  29 + @Autowired
  30 + private JdbcTemplate jdbcTemplate;
  31 +
  32 + @Override
  33 + public void run() {
  34 + loadBasicData();
  35 + }
  36 +
  37 + private void loadBasicData() {
  38 + try {
  39 + String qline = "select a.id,in_use,line_code,name,start_station_name,start_station_first_time,start_station_end_time,end_station_name,end_station_first_time,end_station_end_time,company,branche_company,length,telephone,speed_limit,shanghai_linecode,line_play_type,up_travel_time,down_travel_time from bsth_c_line a left join bsth_c_line_information b on a.id = b.line where a.destroy = 0 and a.nature = 'hlwgj'";
  40 + String qstop = "select b.id,b.station_cod,b.station_name,b.road_coding,b.g_lonx,b.g_laty,b.shapes_type,b.radius,AsText(b.g_polygon_grid) as g_polygon_grid,a.line,a.line_code,a.directions,a.distances from bsth_c_stationroute a join bsth_c_station b on a.station = b.id where a.destroy = 0 order by a.line,a.directions,a.station_route_code";
  41 + String qcar = "select equipment_code device_id, car_plate plate_no from bsth_c_cars";
  42 +
  43 + List<LineInfo> lines = jdbcTemplate.query(qline, new RowMapperLineInfo());
  44 + List<StopInfo> stops = jdbcTemplate.query(qstop, new RowMapperStopInfo());
  45 + List<Map<String, Object>> cars = jdbcTemplate.queryForList(qcar);
  46 +
  47 + // 缓存线路基本信息
  48 + for (LineInfo line : lines) {
  49 + BasicDataBuffer.putLine(line.getLineId(), line);
  50 + }
  51 +
  52 + // 线路信息中添加上下行站点信息
  53 + int oldId = -1;
  54 + LineInfo line = null;
  55 + for (StopInfo stop : stops) {
  56 + if (stop.getLineCode() != oldId) {
  57 + oldId = stop.getLineCode();
  58 + line = BasicDataBuffer.getLineById(oldId);
  59 + }
  60 + if (line != null) {
  61 + if (stop.getDirections() == 0) line.getStopsUp().add(stop);
  62 + else line.getStopsDown().add(stop);
  63 + }
  64 + }
  65 +
  66 + for (Map<String, Object> car : cars) {
  67 + BasicDataBuffer.putCar((String)car.get("device_id"), (String)car.get("plate_no"));
  68 + }
  69 +
  70 + logger.info("基础数据加载成功");
  71 + }catch (Exception e){
  72 + logger.error("基础数据加载失败", e);
  73 + }
  74 + }
  75 +
  76 + final class RowMapperLineInfo implements RowMapper<LineInfo> {
  77 +
  78 + @Override
  79 + public LineInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
  80 + // TODO Auto-generated method stub
  81 + LineInfo line = new LineInfo();
  82 + line.setId(rs.getInt("id"));
  83 + line.setInUse(rs.getInt("in_use"));
  84 + line.setLineId(rs.getInt("line_code"));
  85 + line.setLineName(rs.getString("name"));
  86 + //line.setStartStation(rs.getInt("start_station"));
  87 + line.setStartStationName(rs.getString("start_station_name"));
  88 + line.setStartStationFirstTime(rs.getString("start_station_first_time"));
  89 + line.setStartStationEndTime(rs.getString("start_station_end_time"));
  90 + //line.setEndStation(rs.getInt("end_station"));
  91 + line.setEndStationName(rs.getString("end_station_name"));
  92 + line.setEndStationFirstTime(rs.getString("end_station_first_time"));
  93 + line.setEndStationEndTime(rs.getString("end_station_end_time"));
  94 + line.setCompany(rs.getString("company"));
  95 + line.setBrancheCompany(rs.getString("branche_company"));
  96 + line.setTelephone(rs.getString("telephone"));
  97 + line.setLinePlayType(rs.getInt("line_play_type"));
  98 + return line;
  99 + }
  100 +
  101 + }
  102 +
  103 + final class RowMapperStopInfo implements RowMapper<StopInfo> {
  104 +
  105 + @Override
  106 + public StopInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
  107 + // TODO Auto-generated method stub
  108 + StopInfo stop = new StopInfo();
  109 + stop.setId(rs.getInt("id"));
  110 + stop.setStationCod(rs.getString("station_cod"));
  111 + stop.setStationName(rs.getString("station_name"));
  112 + //stop.setStationType(rs.getString("station_type"));
  113 + stop.setRoadCoding(rs.getString("road_coding"));
  114 + float lon = rs.getFloat("g_lonx");
  115 + float lat = rs.getFloat("g_laty");
  116 + stop.setPoint(new Point(lon, lat));
  117 + stop.setLineId(rs.getInt("line"));
  118 + stop.setLineCode(rs.getInt("line_code"));
  119 + stop.setDirections(rs.getInt("directions"));
  120 + stop.setShapesType(rs.getString("shapes_type"));
  121 + stop.setRadius(rs.getInt("radius"));
  122 + stop.setPoints(new ArrayList<Point>());
  123 + stop.setDistances(rs.getDouble("distances")*1000);
  124 + return stop;
  125 + }
  126 +
  127 + }
  128 +
  129 + @Override
  130 + public void afterPropertiesSet() throws Exception {
  131 + // TODO Auto-generated method stub
  132 + loadBasicData();
  133 + }
  134 +}
... ...