Commit 72cae77973bcdb212e6456bdbc004509ca68a823

Authored by 徐烜
2 parents d61b80ad 22f66c51

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

Showing 42 changed files with 275 additions and 2572 deletions

Too many changes to show.

To preserve performance only 42 of 49 files are displayed.

src/main/java/com/bsth/controller/realcontrol/anomalyCheckController.java
1 package com.bsth.controller.realcontrol; 1 package com.bsth.controller.realcontrol;
2 2
3 -import com.bsth.data.gpsdata.client.ClientApp;  
4 import com.bsth.data.schedule.DayOfSchedule; 3 import com.bsth.data.schedule.DayOfSchedule;
5 import com.bsth.entity.realcontrol.ScheduleRealInfo; 4 import com.bsth.entity.realcontrol.ScheduleRealInfo;
6 import org.slf4j.Logger; 5 import org.slf4j.Logger;
@@ -50,10 +49,4 @@ public class anomalyCheckController { @@ -50,10 +49,4 @@ public class anomalyCheckController {
50 dayOfSchedule.replaceByNbbm(nbbm, map.values()); 49 dayOfSchedule.replaceByNbbm(nbbm, map.values());
51 } 50 }
52 } 51 }
53 -  
54 - @RequestMapping(value = "/gpsClientReconn", method = RequestMethod.POST)  
55 - public void gpsClientReconn(){  
56 - ClientApp.pdreconn();  
57 - ClientApp.pfreconn();  
58 - }  
59 } 52 }
src/main/java/com/bsth/data/BasicData.java
@@ -46,9 +46,6 @@ public class BasicData implements CommandLineRunner { @@ -46,9 +46,6 @@ public class BasicData implements CommandLineRunner {
46 //站点编码和名称对照,包括停车场 (K: lineCode_updown_stationCode ,V:站点名称) 46 //站点编码和名称对照,包括停车场 (K: lineCode_updown_stationCode ,V:站点名称)
47 public static Map<String, String> stationCode2NameMap; 47 public static Map<String, String> stationCode2NameMap;
48 48
49 - //线路起终点对照(线路编码_上下行_起终点) 1024_0_B (1024上行起点)  
50 - //public static Map<String, String> lineSEPointMap;  
51 -  
52 //车辆和线路对照 49 //车辆和线路对照
53 public static Map<String, Line> nbbm2LineMap; 50 public static Map<String, Line> nbbm2LineMap;
54 51
src/main/java/com/bsth/data/car_out_info/CarOutInfoHandler.java
1 package com.bsth.data.car_out_info; 1 package com.bsth.data.car_out_info;
2 2
  3 +import com.bsth.Application;
3 import com.bsth.data.BasicData; 4 import com.bsth.data.BasicData;
4 import com.bsth.data.schedule.DayOfSchedule; 5 import com.bsth.data.schedule.DayOfSchedule;
5 import com.bsth.data.schedule.ScheduleComparator; 6 import com.bsth.data.schedule.ScheduleComparator;
@@ -12,13 +13,18 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -12,13 +13,18 @@ import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.boot.CommandLineRunner; 13 import org.springframework.boot.CommandLineRunner;
13 import org.springframework.jdbc.core.BatchPreparedStatementSetter; 14 import org.springframework.jdbc.core.BatchPreparedStatementSetter;
14 import org.springframework.jdbc.core.JdbcTemplate; 15 import org.springframework.jdbc.core.JdbcTemplate;
  16 +import org.springframework.jdbc.datasource.DataSourceTransactionManager;
15 import org.springframework.stereotype.Component; 17 import org.springframework.stereotype.Component;
16 import org.springframework.stereotype.Service; 18 import org.springframework.stereotype.Service;
  19 +import org.springframework.transaction.TransactionDefinition;
  20 +import org.springframework.transaction.TransactionStatus;
17 import org.springframework.transaction.annotation.Transactional; 21 import org.springframework.transaction.annotation.Transactional;
  22 +import org.springframework.transaction.support.DefaultTransactionDefinition;
18 23
19 import java.sql.PreparedStatement; 24 import java.sql.PreparedStatement;
20 import java.sql.SQLException; 25 import java.sql.SQLException;
21 import java.util.*; 26 import java.util.*;
  27 +import java.util.concurrent.TimeUnit;
22 28
23 /** 29 /**
24 * 发车信息表处理程序 30 * 发车信息表处理程序
@@ -60,7 +66,7 @@ public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo { @@ -60,7 +66,7 @@ public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo {
60 Set<String> ks = lpScheduleMap.keySet(); 66 Set<String> ks = lpScheduleMap.keySet();
61 String prefix = lineCode + "_"; 67 String prefix = lineCode + "_";
62 for (String k : ks) { 68 for (String k : ks) {
63 - if (k.indexOf(prefix) != -1) { 69 + if (k.startsWith(prefix)) {
64 list.addAll(lpScheduleMap.get(k)); 70 list.addAll(lpScheduleMap.get(k));
65 } 71 }
66 } 72 }
@@ -90,36 +96,48 @@ public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo { @@ -90,36 +96,48 @@ public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo {
90 downArray = nexts(downs); 96 downArray = nexts(downs);
91 97
92 final List<ScheduleRealInfo> pstArray = mergeArray(upArray, downArray); 98 final List<ScheduleRealInfo> pstArray = mergeArray(upArray, downArray);
93 - //删除  
94 - jdbcTemplate.update("delete from bsth_t_clfcxxb where line_code=?", lineCode);  
95 - //重新写入  
96 - jdbcTemplate.batchUpdate("insert into bsth_t_clfcxxb(rq, line_code, line_name, lp_name, lp_sn, dfsj, nbbm, cph, bc_type, end_station_name, updown, jGh, jName, remarks, sn)" +  
97 - " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new BatchPreparedStatementSetter() {  
98 - @Override  
99 - public void setValues(PreparedStatement ps, int i) throws SQLException {  
100 - ScheduleRealInfo sch = pstArray.get(i);  
101 - ps.setString(1, sch.getScheduleDateStr());  
102 - ps.setString(2, sch.getXlBm());  
103 - ps.setString(3, sch.getXlName());  
104 - ps.setString(4, sch.getLpName());  
105 - ps.setInt(5, sch.getFcno());  
106 - ps.setString(6, sch.getDfsj());  
107 - ps.setString(7, sch.getClZbh());  
108 - ps.setString(8, BasicData.nbbmCompanyPlateMap.get(sch.getClZbh()));  
109 - ps.setString(9, bcTypeMap.containsKey(sch.getBcType()) ? bcTypeMap.get(sch.getBcType()) : sch.getBcType());  
110 - ps.setString(10, sch.getZdzName());  
111 - ps.setInt(11, Integer.parseInt(sch.getXlDir()));  
112 - ps.setString(12, sch.getjGh());  
113 - ps.setString(13, sch.getjName());  
114 - ps.setString(14, sch.getRemarks());  
115 - ps.setInt(15, sch.getFcpSn());  
116 - } 99 + //编程式事务
  100 + DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
  101 + DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  102 + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
  103 + TransactionStatus status = tran.getTransaction(def);
  104 +
  105 + try{
  106 + //删除
  107 + jdbcTemplate.update("delete from bsth_t_clfcxxb where line_code=?", lineCode);
  108 + //重新写入
  109 + jdbcTemplate.batchUpdate("insert into bsth_t_clfcxxb(rq, line_code, line_name, lp_name, lp_sn, dfsj, nbbm, cph, bc_type, end_station_name, updown, jGh, jName, remarks, sn)" +
  110 + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new BatchPreparedStatementSetter() {
  111 + @Override
  112 + public void setValues(PreparedStatement ps, int i) throws SQLException {
  113 + ScheduleRealInfo sch = pstArray.get(i);
  114 + ps.setString(1, sch.getScheduleDateStr());
  115 + ps.setString(2, sch.getXlBm());
  116 + ps.setString(3, sch.getXlName());
  117 + ps.setString(4, /*sch.getLpName()*/"0");
  118 + ps.setInt(5, sch.getFcno()==null?-1:sch.getFcno());
  119 + ps.setString(6, sch.getDfsj().replace(":", ""));
  120 + ps.setString(7, sch.getClZbh().replace("-", ""));
  121 + ps.setString(8, BasicData.nbbmCompanyPlateMap.get(sch.getClZbh()));
  122 + ps.setString(9, bcTypeMap.containsKey(sch.getBcType()) ? bcTypeMap.get(sch.getBcType()) : sch.getBcType());
  123 + ps.setString(10, sch.getZdzName());
  124 + ps.setInt(11, Integer.parseInt(sch.getXlDir()));
  125 + ps.setString(12, sch.getjGh());
  126 + ps.setString(13, sch.getjName());
  127 + ps.setString(14, sch.getRemarks());
  128 + ps.setInt(15, sch.getFcpSn());
  129 + }
117 130
118 - @Override  
119 - public int getBatchSize() {  
120 - return pstArray.size();  
121 - }  
122 - }); 131 + @Override
  132 + public int getBatchSize() {
  133 + return pstArray.size();
  134 + }
  135 + });
  136 +
  137 + tran.commit(status);
  138 + }catch (Exception e){
  139 + tran.rollback(status);
  140 + }
123 } 141 }
124 142
125 private List<ScheduleRealInfo> mergeArray(ScheduleRealInfo[] upArray, ScheduleRealInfo[] downArray) { 143 private List<ScheduleRealInfo> mergeArray(ScheduleRealInfo[] upArray, ScheduleRealInfo[] downArray) {
@@ -190,7 +208,7 @@ public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo { @@ -190,7 +208,7 @@ public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo {
190 bcTypeMap.put("venting", "直放"); 208 bcTypeMap.put("venting", "直放");
191 bcTypeMap.put("major", "放站"); 209 bcTypeMap.put("major", "放站");
192 bcTypeMap.put("ldks", "两点间空驶"); 210 bcTypeMap.put("ldks", "两点间空驶");
193 - //Application.mainServices.scheduleWithFixedDelay(updateInfoThread, 60, 40, TimeUnit.SECONDS); 211 + Application.mainServices.scheduleWithFixedDelay(updateInfoThread, 60, 40, TimeUnit.SECONDS);
194 } 212 }
195 213
196 @Component 214 @Component
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
1 package com.bsth.data.gpsdata; 1 package com.bsth.data.gpsdata;
2 2
3 -import com.bsth.Application;  
4 import com.bsth.data.BasicData; 3 import com.bsth.data.BasicData;
5 import com.bsth.data.forecast.ForecastRealServer; 4 import com.bsth.data.forecast.ForecastRealServer;
6 -import com.bsth.data.gpsdata.client.ClientApp;  
7 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread; 5 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread;
8 import com.bsth.data.gpsdata.thread.OfflineMonitorThread; 6 import com.bsth.data.gpsdata.thread.OfflineMonitorThread;
9 import com.bsth.data.schedule.DayOfSchedule; 7 import com.bsth.data.schedule.DayOfSchedule;
@@ -17,7 +15,8 @@ import org.springframework.boot.CommandLineRunner; @@ -17,7 +15,8 @@ import org.springframework.boot.CommandLineRunner;
17 import org.springframework.stereotype.Component; 15 import org.springframework.stereotype.Component;
18 16
19 import java.util.*; 17 import java.util.*;
20 -import java.util.concurrent.TimeUnit; 18 +import java.util.concurrent.ConcurrentHashMap;
  19 +import java.util.concurrent.ConcurrentMap;
21 20
22 /** 21 /**
23 * @author PanZhao 22 * @author PanZhao
@@ -30,7 +29,7 @@ public class GpsRealData implements CommandLineRunner { @@ -30,7 +29,7 @@ public class GpsRealData implements CommandLineRunner {
30 29
31 static Logger logger = LoggerFactory.getLogger(GpsRealData.class); 30 static Logger logger = LoggerFactory.getLogger(GpsRealData.class);
32 31
33 - private static Map<String, GpsEntity> gpsMap; 32 + private static ConcurrentMap<String, GpsEntity> gpsMap;
34 33
35 //按线路分组设备号 34 //按线路分组设备号
36 private static TreeMultimap<String, String> lineCode2Devices; 35 private static TreeMultimap<String, String> lineCode2Devices;
@@ -51,22 +50,17 @@ public class GpsRealData implements CommandLineRunner { @@ -51,22 +50,17 @@ public class GpsRealData implements CommandLineRunner {
51 * 构造函数 50 * 构造函数
52 */ 51 */
53 public GpsRealData() { 52 public GpsRealData() {
54 - gpsMap = new HashMap<>(); 53 + gpsMap = new ConcurrentHashMap<>();
55 lineCode2Devices = TreeMultimap.create(); 54 lineCode2Devices = TreeMultimap.create();
56 } 55 }
57 56
58 - @Autowired  
59 - ClientApp clientApp;  
60 @Override 57 @Override
61 public void run(String... arg0) throws Exception { 58 public void run(String... arg0) throws Exception {
62 logger.info("gpsDataLoader,20,3"); 59 logger.info("gpsDataLoader,20,3");
63 - //定时从网关http形式获取GPS数据 --- 已弃用,现socket客户端接入数据  
64 - //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 3, TimeUnit.SECONDS); 60 + //http形式获取GPS数据
  61 + //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 2, TimeUnit.SECONDS);
65 //定时扫描掉离线 62 //定时扫描掉离线
66 - Application.mainServices.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);  
67 -  
68 - //gps 客户端  
69 - //clientApp.init(); 63 + //Application.mainServices.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);
70 } 64 }
71 65
72 66
src/main/java/com/bsth/data/gpsdata/SignalStateData.java
@@ -23,9 +23,9 @@ public class SignalStateData { @@ -23,9 +23,9 @@ public class SignalStateData {
23 private static ArrayListMultimap<String, SignalState> listMultimap = ArrayListMultimap.create(); 23 private static ArrayListMultimap<String, SignalState> listMultimap = ArrayListMultimap.create();
24 24
25 public void put(SignalState state){ 25 public void put(SignalState state){
26 - listMultimap.put(state.getLineCode(), state); 26 + //listMultimap.put(state.getLineCode(), state);
27 //推送到客户端 27 //推送到客户端
28 - sendUtils.sendSignalState(state); 28 + //sendUtils.sendSignalState(state);
29 } 29 }
30 30
31 public List<SignalState> get(String idx){ 31 public List<SignalState> get(String idx){
src/main/java/com/bsth/data/gpsdata/arrival/GpsRealAnalyse.java
@@ -11,6 +11,8 @@ import org.slf4j.LoggerFactory; @@ -11,6 +11,8 @@ import org.slf4j.LoggerFactory;
11 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.stereotype.Component; 12 import org.springframework.stereotype.Component;
13 13
  14 +import java.util.Collections;
  15 +import java.util.Comparator;
14 import java.util.List; 16 import java.util.List;
15 import java.util.Set; 17 import java.util.Set;
16 import java.util.concurrent.CountDownLatch; 18 import java.util.concurrent.CountDownLatch;
@@ -42,25 +44,26 @@ public class GpsRealAnalyse { @@ -42,25 +44,26 @@ public class GpsRealAnalyse {
42 @Autowired 44 @Autowired
43 GpsRealData gpsRealData; 45 GpsRealData gpsRealData;
44 46
45 - //50个线程  
46 - static ExecutorService threadPool = Executors.newFixedThreadPool(50); 47 + static ExecutorService threadPool = Executors.newFixedThreadPool(100);
47 48
48 public void analyse(List<GpsEntity> list) { 49 public void analyse(List<GpsEntity> list) {
49 //如果正在恢复数据 50 //如果正在恢复数据
50 if (GpsDataRecovery.run) 51 if (GpsDataRecovery.run)
51 return; 52 return;
  53 +
  54 + long t = System.currentTimeMillis();
52 logger.info("analyse gps size: " + list.size()); 55 logger.info("analyse gps size: " + list.size());
53 - //按车辆分组gps 56 + //按线路分组gps
54 ArrayListMultimap multimap = ArrayListMultimap.create(); 57 ArrayListMultimap multimap = ArrayListMultimap.create();
55 for(GpsEntity gps : list){ 58 for(GpsEntity gps : list){
56 - multimap.put(gps.getNbbm(), gps); 59 + multimap.put(gps.getLineId(), gps);
57 } 60 }
58 61
59 Set<String> ks = multimap.keySet(); 62 Set<String> ks = multimap.keySet();
60 CountDownLatch count = new CountDownLatch(ks.size()); 63 CountDownLatch count = new CountDownLatch(ks.size());
61 64
62 - for(String nbbm : ks){  
63 - threadPool.execute(new SignalHandleThread(multimap.get(nbbm), count)); 65 + for(String lineCode : ks){
  66 + threadPool.execute(new SignalHandleThread(multimap.get(lineCode), count));
64 } 67 }
65 68
66 try { 69 try {
@@ -70,11 +73,15 @@ public class GpsRealAnalyse { @@ -70,11 +73,15 @@ public class GpsRealAnalyse {
70 //加入实时gps对照 73 //加入实时gps对照
71 for(GpsEntity gps: list) 74 for(GpsEntity gps: list)
72 gpsRealData.put(gps); 75 gpsRealData.put(gps);
  76 +
  77 + logger.info("time , " + (System.currentTimeMillis() - t));
73 } catch (InterruptedException e) { 78 } catch (InterruptedException e) {
74 logger.error("", e); 79 logger.error("", e);
75 } 80 }
76 } 81 }
77 82
  83 + static GpsComp comp = new GpsComp();
  84 +
78 public class SignalHandleThread implements Runnable { 85 public class SignalHandleThread implements Runnable {
79 86
80 List<GpsEntity> list; 87 List<GpsEntity> list;
@@ -89,6 +96,7 @@ public class GpsRealAnalyse { @@ -89,6 +96,7 @@ public class GpsRealAnalyse {
89 public void run() { 96 public void run() {
90 97
91 try { 98 try {
  99 + Collections.sort(list, comp);
92 for(GpsEntity gps : list){ 100 for(GpsEntity gps : list){
93 //是否有任务 101 //是否有任务
94 boolean task; 102 boolean task;
@@ -119,4 +127,12 @@ public class GpsRealAnalyse { @@ -119,4 +127,12 @@ public class GpsRealAnalyse {
119 } 127 }
120 } 128 }
121 } 129 }
  130 +
  131 + public static class GpsComp implements Comparator<GpsEntity> {
  132 +
  133 + @Override
  134 + public int compare(GpsEntity g1, GpsEntity g2) {
  135 + return g1.getTimestamp().compareTo(g2.getTimestamp());
  136 + }
  137 + }
122 } 138 }
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java
@@ -74,6 +74,8 @@ public class ReverseSignalHandle extends SignalHandle { @@ -74,6 +74,8 @@ public class ReverseSignalHandle extends SignalHandle {
74 74
75 if (prev.getInstation() == 1) { 75 if (prev.getInstation() == 1) {
76 sr = GeoCacheData.getRouteCode(prev); 76 sr = GeoCacheData.getRouteCode(prev);
  77 + if(sr == null)
  78 + return null;
77 79
78 if (sr.getRouteSort() > curr.getRouteSort()) { 80 if (sr.getRouteSort() > curr.getRouteSort()) {
79 if(half){ 81 if(half){
src/main/java/com/bsth/data/gpsdata/client/ClientApp.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client;  
2 -  
3 -import com.bsth.data.gpsdata.client.pd.codec.PdMessageCodecFactory;  
4 -import com.bsth.data.gpsdata.client.pd.handler.PdClientHandler;  
5 -import com.bsth.data.gpsdata.client.pd.protocol.Pd_31_0;  
6 -import com.bsth.data.gpsdata.client.pf.codec.PfMessageCodecFactory;  
7 -import com.bsth.data.gpsdata.client.pf.handler.PfClientHandler;  
8 -import com.bsth.util.ConfigUtil;  
9 -import org.apache.mina.core.future.ConnectFuture;  
10 -import org.apache.mina.core.future.WriteFuture;  
11 -import org.apache.mina.core.session.IdleStatus;  
12 -import org.apache.mina.core.session.IoSession;  
13 -import org.apache.mina.core.session.IoSessionConfig;  
14 -import org.apache.mina.filter.codec.ProtocolCodecFilter;  
15 -import org.apache.mina.filter.logging.LogLevel;  
16 -import org.apache.mina.filter.logging.LoggingFilter;  
17 -import org.apache.mina.transport.socket.nio.NioSocketConnector;  
18 -import org.slf4j.Logger;  
19 -import org.slf4j.LoggerFactory;  
20 -import org.springframework.beans.factory.annotation.Autowired;  
21 -import org.springframework.stereotype.Component;  
22 -  
23 -import java.net.InetSocketAddress;  
24 -import java.util.concurrent.Executors;  
25 -import java.util.concurrent.ScheduledExecutorService;  
26 -import java.util.concurrent.ThreadFactory;  
27 -import java.util.concurrent.TimeUnit;  
28 -  
29 -/**  
30 - * Created by panzhao on 2017/5/4.  
31 - */  
32 -@Component  
33 -public class ClientApp {  
34 -  
35 - private static NioSocketConnector pdDataConnector;  
36 - private static NioSocketConnector pfDataConnector;  
37 -  
38 - @Autowired  
39 - private PdClientHandler pdClient;  
40 - @Autowired  
41 - private PfClientHandler pfClient;  
42 - @Autowired  
43 - GpsBeforeBuffer gpsBeforeBuffer;  
44 -  
45 - static Logger logger = LoggerFactory.getLogger(ClientApp.class);  
46 -  
47 - private ScheduledExecutorService sexec = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {  
48 -  
49 - @Override  
50 - public Thread newThread(Runnable r) {  
51 - // TODO Auto-generated method stub  
52 - Thread t = new Thread(r);  
53 - t.setName("SessionCheckExecutor");  
54 - return t;  
55 - }  
56 - });  
57 -  
58 - public static boolean dconnect(String device) {  
59 - boolean flag = false;  
60 - try {  
61 - ConnectFuture con = pdDataConnector.connect(new InetSocketAddress(ConfigUtil.get("gps.server.pd"), Integer.parseInt(ConfigUtil.get("gps.port.pd"))));  
62 - con.awaitUninterruptibly();  
63 - IoSession session = con.getSession();  
64 - session.setAttribute("deviceId", device);  
65 - com.bsth.data.gpsdata.client.pd.protocol.PdMessage msg = new com.bsth.data.gpsdata.client.pd.protocol.PdMessage();  
66 - Pd_31_0 body = new Pd_31_0();  
67 - body.setFunCode((short)0x15);  
68 - body.setLineId(0);  
69 - body.setDeviceId(device);  
70 - msg.setMessageBody(body);  
71 - msg.setVersion((short)1);  
72 - msg.setSerialNo((short)1);  
73 - msg.setCommandType((short)0x31);  
74 - byte[] bytes = msg.write();  
75 - WriteFuture write = session.write(bytes);  
76 - write.awaitUninterruptibly();  
77 - flag = true;  
78 -  
79 - logger.info("dconnect...");  
80 - pdSession = session;  
81 - //SessionManager.getInstance().register(device, session);  
82 - } catch (Exception e) {  
83 - e.printStackTrace();  
84 - }  
85 - return flag;  
86 - }  
87 -  
88 - public static void pdreconn(){  
89 - dconnect(ConfigUtil.get("forward.device.name"));  
90 - }  
91 -  
92 - public static void pfreconn(){  
93 - fconnect(ConfigUtil.get("forward.device.name"));  
94 - }  
95 -  
96 - public static boolean fconnect(String device) {  
97 - boolean flag = false;  
98 - try {  
99 - ConnectFuture con = pfDataConnector.connect(new InetSocketAddress(ConfigUtil.get("gps.server.pf"), Integer.parseInt(ConfigUtil.get("gps.port.pf"))));  
100 - con.awaitUninterruptibly();  
101 - IoSession session = con.getSession();  
102 - session.setAttribute("deviceId", device);  
103 - flag = true;  
104 -  
105 - logger.info("fconnect...");  
106 - pfSession = session;  
107 - } catch (Exception e) {  
108 - e.printStackTrace();  
109 - }  
110 - return flag;  
111 - }  
112 -  
113 - public void init() {  
114 - //exec = Executors.newFixedThreadPool(4);  
115 - sexec.scheduleAtFixedRate(new SessionChecker(), 1, 1, TimeUnit.MINUTES);  
116 - /*******************************浦东********************************/  
117 - pdDataConnector = new NioSocketConnector();  
118 -  
119 - LoggingFilter log = new LoggingFilter();  
120 - log.setMessageReceivedLogLevel(LogLevel.DEBUG);  
121 - pdDataConnector.getFilterChain().addLast("logger", log);  
122 -  
123 - pdDataConnector.getFilterChain().addLast("codec",  
124 - new ProtocolCodecFilter(new PdMessageCodecFactory()));  
125 -  
126 - IoSessionConfig config = pdDataConnector.getSessionConfig();  
127 -  
128 - config.setReadBufferSize(4096);  
129 - config.setWriteTimeout(10000);  
130 - config.setWriterIdleTime(60000);  
131 -  
132 - config.setIdleTime(IdleStatus.BOTH_IDLE, 60);  
133 -  
134 - pdDataConnector.setHandler(pdClient);  
135 -  
136 - dconnect(ConfigUtil.get("forward.device.name"));  
137 - /*******************************浦东转发********************************/  
138 - pfDataConnector = new NioSocketConnector();  
139 -  
140 - LoggingFilter log1 = new LoggingFilter();  
141 - log1.setMessageReceivedLogLevel(LogLevel.DEBUG);  
142 - pfDataConnector.getFilterChain().addLast("logger", log1);  
143 -  
144 - pfDataConnector.getFilterChain().addLast("codec",  
145 - new ProtocolCodecFilter(new PfMessageCodecFactory()));  
146 -  
147 - IoSessionConfig config1 = pfDataConnector.getSessionConfig();  
148 -  
149 - config1.setReadBufferSize(4096);  
150 - config1.setWriteTimeout(10000);  
151 - config1.setWriterIdleTime(60000);  
152 -  
153 - config1.setIdleTime(IdleStatus.BOTH_IDLE, 60);  
154 -  
155 - pfDataConnector.setHandler(pfClient);  
156 - fconnect(ConfigUtil.get("forward.device.name"));  
157 -  
158 -  
159 - gpsBeforeBuffer.init();  
160 - }  
161 -  
162 -  
163 - static IoSession pdSession;  
164 - static IoSession pfSession;  
165 - final class SessionChecker implements Runnable {  
166 -  
167 - @Override  
168 - public void run() {  
169 - // TODO Auto-generated method stub  
170 - try {  
171 -  
172 - if(!pdSession.isActive()){  
173 - logger.warn("浦东设备注销");  
174 - ClientApp.pdreconn();  
175 - }  
176 -  
177 - if(!pfSession.isActive()){  
178 - logger.warn("浦东转发设备注销");  
179 - ClientApp.pfreconn();  
180 - }  
181 - } catch (Exception e) {  
182 - logger.error("SessionChecker异常", e);  
183 - }  
184 - }  
185 -  
186 - }  
187 -}  
188 \ No newline at end of file 0 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/client/DataMonitor.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client;  
2 -  
3 -/**  
4 - * Created by panzhao on 2017/5/7.  
5 - */  
6 -public class DataMonitor {  
7 -  
8 - public static long lastTimePd;  
9 -  
10 - public static long lastTimePf;  
11 -  
12 -}  
src/main/java/com/bsth/data/gpsdata/client/GpsBeforeBuffer.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client;  
2 -  
3 -import com.bsth.Application;  
4 -import com.bsth.data.BasicData;  
5 -import com.bsth.data.gpsdata.GpsEntity;  
6 -import com.bsth.data.gpsdata.arrival.GpsRealAnalyse;  
7 -import com.bsth.data.gpsdata.client.pd.protocol.BasicInfo;  
8 -import org.apache.commons.lang3.StringUtils;  
9 -import org.springframework.beans.factory.annotation.Autowired;  
10 -import org.springframework.stereotype.Component;  
11 -  
12 -import java.util.ArrayList;  
13 -import java.util.LinkedList;  
14 -import java.util.List;  
15 -import java.util.concurrent.TimeUnit;  
16 -  
17 -/**  
18 - * 从 socket client 到 .. 的缓冲  
19 - * Created by panzhao on 2017/5/4.  
20 - */  
21 -@Component  
22 -public class GpsBeforeBuffer {  
23 -  
24 - static LinkedList<GpsEntity> linkedList = new LinkedList<>();  
25 -  
26 - @Autowired  
27 - GpsHandleThread gpsHandleThread;  
28 -  
29 - public void put(BasicInfo basicInfo){  
30 - //放弃补发数据  
31 - byte cacheData = getCacheState(basicInfo.getServiceState());  
32 - if(cacheData == 1)  
33 - return;  
34 - GpsEntity gps = new GpsEntity();  
35 -  
36 - gps.setDeviceId(basicInfo.getDeviceId());  
37 - gps.setTimestamp(basicInfo.getTimestamp());  
38 - gps.setLat(basicInfo.getLat());  
39 - gps.setLon(basicInfo.getLon());  
40 - gps.setDirection((float)basicInfo.getDirection() / 10);  
41 - gps.setValid(basicInfo.getGpsValid());  
42 - gps.setCompanyCode(basicInfo.getCompanyCode());  
43 - gps.setStopNo(basicInfo.getStopNo());  
44 - gps.setUpDown(basicInfo.getUpOrDown());  
45 - gps.setSpeed((float)basicInfo.getSpeedGps() / 10);  
46 - gps.setLineId(String.valueOf(basicInfo.getLineId()));  
47 - gps.setState((int) getService(basicInfo.getServiceState()));  
48 - //没有设备号  
49 - if (StringUtils.isBlank(gps.getDeviceId()))  
50 - return;  
51 -  
52 - String nbbm = BasicData.deviceId2NbbmMap.get(gps.getDeviceId());  
53 - if (StringUtils.isBlank(nbbm))  
54 - gps.setIncomplete(true);  
55 - else  
56 - gps.setNbbm(nbbm);  
57 -  
58 - linkedList.addLast(gps);  
59 - }  
60 -  
61 - public byte getCacheState(long serviceState) {  
62 - return (byte)(((serviceState & 0x00100000) == 0x00100000) ? 1 : 0);  
63 - }  
64 -  
65 - public void init(){  
66 - Application.mainServices.scheduleWithFixedDelay(gpsHandleThread, 20 * 1000, 1100, TimeUnit.MILLISECONDS);  
67 - }  
68 -  
69 - @Component  
70 - public static class GpsHandleThread extends Thread{  
71 -  
72 - List<GpsEntity> list;  
73 -  
74 - @Autowired  
75 - GpsRealAnalyse gpsRealAnalyse;  
76 -  
77 - @Override  
78 - public void run() {  
79 - list = new ArrayList<>(100);  
80 -  
81 - GpsEntity gps;  
82 - for(int i = 0; i < 2000; i ++){  
83 - gps = linkedList.poll();  
84 - if(gps == null)  
85 - break;  
86 - list.add(gps);  
87 - }  
88 -  
89 - gpsRealAnalyse.analyse(list);  
90 - }  
91 - }  
92 -  
93 - /**  
94 - * 获取运营状态  
95 - *  
96 - * @return -1无效 0运营 1未运营  
97 - */  
98 - public static byte getService(long serviceState) {  
99 - if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000)  
100 - return -1;  
101 - return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0);  
102 - }  
103 -}  
104 \ No newline at end of file 0 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/client/common/ExceptionUtil.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.common;  
2 -  
3 -public class ExceptionUtil {  
4 -  
5 - public static String getTrace(Throwable e) {  
6 - StringBuilder sb = new StringBuilder();  
7 - sb.append(e.toString());  
8 - for (StackTraceElement ste : e.getStackTrace()) {  
9 - sb.append(ste).append("\r\n");  
10 - }  
11 - return sb.toString();  
12 - }  
13 -}  
src/main/java/com/bsth/data/gpsdata/client/common/Protocol2BizUtil.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.common;  
2 -  
3 -//import com.bsth.data.gpsdata.socket_client_001.pd.protocol.BasicInfo;  
4 -//import com.bsth.data.gpsdata.socket_client_001.pf.protocol.PfMessage;  
5 -//import com.bsth.data.gpsdata.socket_client_001.pf.protocol.Pf_1_0;  
6 -  
7 -import com.bsth.data.gpsdata.client.pd.protocol.BasicInfo;  
8 -import com.bsth.data.gpsdata.client.pf.protocol.PfMessage;  
9 -import com.bsth.data.gpsdata.client.pf.protocol.Pf_1_0;  
10 -import org.slf4j.Logger;  
11 -import org.slf4j.LoggerFactory;  
12 -  
13 -public class Protocol2BizUtil {  
14 -  
15 - private final static Logger log = LoggerFactory.getLogger(Protocol2BizUtil.class);  
16 -  
17 - /**  
18 - * 从协议数据中获得基本数据  
19 - */  
20 - public static BasicInfo getBasicInfoFromMsg(PfMessage msg) {  
21 - if (msg == null) return null;  
22 - BasicInfo info = null;  
23 - if (msg.getCommandType() == 0x01) {  
24 - Pf_1_0 pf_1_0 = (Pf_1_0)msg.getMessageBody();  
25 - info = new BasicInfo();  
26 - info.setLineId(pf_1_0.getXldm());  
27 - info.setDeviceId(pf_1_0.getMtd());  
28 - info.setDriverEmpNo(Integer.parseInt(pf_1_0.getDriver().trim()));  
29 - info.setCarparkNo(pf_1_0.getTccbh());  
30 - info.setStopNo(pf_1_0.getZdbh());  
31 - double lon = pf_1_0.getLon()/1000000, lat = pf_1_0.getLat()/1000000;  
32 - info.setCarLon(((long)lon) * 1000000 + (long)((lon - (long)lon) * 600000));  
33 - info.setCarLat(((int)lat) * 1000000 + (int)((lat - (int)lat) * 600000));  
34 - info.setTimestamp(pf_1_0.getFssj().getTime());  
35 - info.setSpeedGps((short)pf_1_0.getSpeed());  
36 - info.setSpeedSensor((short)(pf_1_0.getSpeed()));  
37 - info.setDirection((short)(pf_1_0.getFx()));  
38 - info.setServiceState(0);  
39 - info.setService(pf_1_0.getYyzt() == 0 ? true : false);  
40 - info.setUpOrDown(pf_1_0.getSxxzt() == 0 ? true : false);  
41 -  
42 - info.setLon(Float.parseFloat(String.valueOf(lon)));  
43 - info.setLat(Float.parseFloat(String.valueOf(lat)));  
44 - }  
45 -  
46 - return info;  
47 - }  
48 -}  
src/main/java/com/bsth/data/gpsdata/client/common/ThreadLocalDateUtil.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.common;  
2 -  
3 -import java.text.DateFormat;  
4 -import java.text.ParseException;  
5 -import java.text.SimpleDateFormat;  
6 -import java.util.Date;  
7 -  
8 -public class ThreadLocalDateUtil {  
9 - private static final String date_format = "yyyyMMddHHmmss";  
10 - private static ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>();  
11 -  
12 - public static DateFormat getDateFormat()  
13 - {  
14 - DateFormat df = threadLocal.get();  
15 - if(df==null){  
16 - df = new SimpleDateFormat(date_format);  
17 - threadLocal.set(df);  
18 - }  
19 - return df;  
20 - }  
21 -  
22 - public static String formatDate(Date date) throws ParseException {  
23 - return getDateFormat().format(date);  
24 - }  
25 -  
26 - public static Date parse(String strDate) throws ParseException {  
27 - return getDateFormat().parse(strDate);  
28 - }  
29 -}  
src/main/java/com/bsth/data/gpsdata/client/msg/IMessage.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.msg;  
2 -  
3 -public interface IMessage extends IMessageIO {  
4 -  
5 - public IMessageBody getMessageBody();  
6 -}  
src/main/java/com/bsth/data/gpsdata/client/msg/IMessageBody.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.msg;  
2 -  
3 -public interface IMessageBody extends IMessageIO {  
4 -  
5 - public String getDeviceId();  
6 -  
7 - public long getTimestamp();  
8 -}  
src/main/java/com/bsth/data/gpsdata/client/msg/IMessageIO.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.msg;  
2 -  
3 -public interface IMessageIO {  
4 -  
5 - public void read(byte[] bytes);  
6 -  
7 - public byte[] write();  
8 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/codec/MessageDecoder.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.codec;  
2 -  
3 -import com.bsth.data.gpsdata.client.pd.protocol.PdMessage;  
4 -import org.apache.mina.core.buffer.IoBuffer;  
5 -import org.apache.mina.core.session.IoSession;  
6 -import org.apache.mina.filter.codec.CumulativeProtocolDecoder;  
7 -import org.apache.mina.filter.codec.ProtocolDecoderOutput;  
8 -  
9 -  
10 -public class MessageDecoder extends CumulativeProtocolDecoder {  
11 -  
12 - @Override  
13 - protected boolean doDecode(IoSession session, IoBuffer in,  
14 - ProtocolDecoderOutput out) throws Exception {  
15 - // TODO Auto-generated method stub  
16 - while (in.remaining() > 3) {  
17 - in.mark();  
18 - byte head1 = in.get(), head2 = in.get(), lenh = in.get(), lenl = in.get();  
19 - int len = ((lenh & 0xff) << 8) + (lenl & 0xff);  
20 - if ((head1 & 0xff) == 0xfa && (head2 & 0xff) == 0xf5) {  
21 - if (in.remaining() > len) {  
22 - byte[] bytes = new byte[len + 1];  
23 - in.get(bytes);  
24 - PdMessage msg = new PdMessage();  
25 - msg.read(bytes);  
26 - out.write(msg);  
27 - /*if ("true".equals(ConfigUtil.getProperty("protocolup", "true"))) {  
28 - UpProtocolDataService.getInstance().write(new byte[]{ head1, head2, lenh, lenl });  
29 - UpProtocolDataService.getInstance().write(bytes);  
30 - }*/  
31 - } else {  
32 - in.reset();  
33 - return false;  
34 - }  
35 - }  
36 - }  
37 - return false;  
38 - }  
39 -  
40 - /*private static String toHexString(byte[] bytes) {  
41 - StringBuilder sb = new StringBuilder();  
42 - for (byte b : bytes) {  
43 - sb.append(Integer.toHexString(b & 0xff) + "|");  
44 - }  
45 - return sb.toString();  
46 - }*/  
47 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/codec/MessageEncoder.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.codec;  
2 -  
3 -import org.apache.mina.core.buffer.IoBuffer;  
4 -import org.apache.mina.core.session.IoSession;  
5 -import org.apache.mina.filter.codec.ProtocolEncoderAdapter;  
6 -import org.apache.mina.filter.codec.ProtocolEncoderOutput;  
7 -  
8 -  
9 -public class MessageEncoder extends ProtocolEncoderAdapter {  
10 -  
11 - @Override  
12 - public void encode(IoSession session, Object message,  
13 - ProtocolEncoderOutput out) throws Exception {  
14 - // TODO Auto-generated method stub  
15 - IoBuffer buf = IoBuffer.allocate(1024).setAutoExpand(true);  
16 - buf.put((byte[])message);  
17 - buf.flip();  
18 - out.write(buf);  
19 - /*if ("true".equals(ConfigUtil.getProperty("protocoldown", "true"))) {  
20 - DownProtocolDataService.getInstance().write((byte[])message);  
21 - }*/  
22 - }  
23 -  
24 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/codec/PdMessageCodecFactory.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.codec;  
2 -  
3 -import org.apache.mina.core.session.IoSession;  
4 -import org.apache.mina.filter.codec.ProtocolCodecFactory;  
5 -import org.apache.mina.filter.codec.ProtocolDecoder;  
6 -import org.apache.mina.filter.codec.ProtocolEncoder;  
7 -  
8 -public class PdMessageCodecFactory implements ProtocolCodecFactory {  
9 -  
10 - private ProtocolEncoder encoder;  
11 - private ProtocolDecoder decoder;  
12 -  
13 - public PdMessageCodecFactory() {  
14 - encoder = new MessageEncoder();  
15 - decoder = new MessageDecoder();  
16 - }  
17 -  
18 - @Override  
19 - public ProtocolEncoder getEncoder(IoSession session) throws Exception {  
20 - // TODO Auto-generated method stub  
21 - return encoder;  
22 - }  
23 -  
24 - @Override  
25 - public ProtocolDecoder getDecoder(IoSession session) throws Exception {  
26 - // TODO Auto-generated method stub  
27 - return decoder;  
28 - }  
29 -  
30 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/common/ConvertUtil.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.common;  
2 -  
3 -import com.bsth.data.gpsdata.client.common.ThreadLocalDateUtil;  
4 -import org.slf4j.Logger;  
5 -import org.slf4j.LoggerFactory;  
6 -  
7 -import java.text.ParseException;  
8 -import java.util.Arrays;  
9 -import java.util.Calendar;  
10 -import java.util.Date;  
11 -  
12 -  
13 -public class ConvertUtil {  
14 -  
15 - private final static Logger log = LoggerFactory.getLogger(ConvertUtil.class);  
16 -  
17 - public static int bcd2int(byte[] bytes, int start, int len) {  
18 - if (len > 4 || len == 0)  
19 - throw new IllegalArgumentException("bcd2int 字节数不符合要求");  
20 - String temp = "";  
21 - for (int i = 0;i < len;i++) {  
22 - int val = bytes[start + i] & 0xff;  
23 - if (val < 10) temp += 0;  
24 - temp += Integer.toHexString(val);  
25 - }  
26 - return Integer.parseInt(temp);  
27 - }  
28 -  
29 - public static byte[] int2bcd(int val, int len) {  
30 - if (len > 4 || len == 0)  
31 - throw new IllegalArgumentException("int2bcd 字节数不符合要求");  
32 - byte[] result = new byte[len];  
33 - for (int i = len - 1;i > -1;i--) {  
34 - result[i] = (byte)Integer.parseInt(val%100 + "", 16);  
35 - val = val/100;  
36 - }  
37 - return result;  
38 - }  
39 -  
40 - public static long bcd2long(byte[] bytes, int start, int len) {  
41 - if (len > 8 || len == 0)  
42 - throw new IllegalArgumentException("bcd2long 字节数不符合要求");  
43 - String temp = "";  
44 - for (int i = 0;i < len;i++) {  
45 - int val = bytes[start + i] & 0xff;  
46 - if (val < 10) temp += 0;  
47 - temp += Integer.toHexString(val);  
48 - }  
49 - return Long.parseLong(temp);  
50 - }  
51 -  
52 - public static byte[] long2bcd(long val, int len) {  
53 - if (len > 8 || len == 0)  
54 - throw new IllegalArgumentException("long2bcd 字节数不符合要求");  
55 - byte[] result = new byte[len];  
56 - for (int i = len - 1;i > -1;i--) {  
57 - result[i] = (byte)Integer.parseInt(val%100 + "", 16);  
58 - val = val/100;  
59 - }  
60 - return result;  
61 - }  
62 -  
63 - public static String ascii2string(byte[] bytes, int start, int len) {  
64 - return new String(Arrays.copyOfRange(bytes, start, start + len));  
65 - }  
66 -  
67 - public static byte[] string2ascii(String val, int len) {  
68 - byte[] result = new byte[len];  
69 - byte[] bytes = val.getBytes();  
70 - if (bytes.length > len && len != 0)  
71 - throw new IllegalArgumentException("string2ascii 参数不符合要求");  
72 - if (len != 0)  
73 - for (int i = 0, l = bytes.length;i < l;i++) result[i] = bytes[i];  
74 - else return bytes;  
75 - return result;  
76 - }  
77 -  
78 - public static long bcd2timestamp(byte[] bytes, int start) {  
79 - String temp = "20";  
80 - for (int i = 0;i < 6;i++) {  
81 - int val = bytes[start + i] & 0xff;  
82 - if (val < 10) temp += 0;  
83 - temp += Integer.toHexString(val);  
84 - }  
85 - Date date = null;  
86 - try {  
87 - date = ThreadLocalDateUtil.parse(temp);  
88 - } catch (ParseException e) {  
89 - log.error("协议中时间数据异常:" + temp);  
90 - }  
91 - if (date != null) return date.getTime();  
92 - return -1;  
93 - }  
94 -  
95 - public static byte[] timestamp2bcd(long val) {  
96 - byte[] result = new byte[6];  
97 - Calendar c = Calendar.getInstance();  
98 - c.setTime(new Date(val));  
99 - result[0] = (byte)(Integer.parseInt(c.get(Calendar.YEAR)%100 + "", 16));  
100 - result[1] = (byte)(Integer.parseInt(c.get(Calendar.MONTH) + 1 + "", 16));  
101 - result[2] = (byte)Integer.parseInt(c.get(Calendar.DAY_OF_MONTH) + "", 16);  
102 - result[3] = (byte)Integer.parseInt(c.get(Calendar.HOUR_OF_DAY) + "", 16);  
103 - result[4] = (byte)Integer.parseInt(c.get(Calendar.MINUTE) + "", 16);  
104 - result[5] = (byte)Integer.parseInt(c.get(Calendar.SECOND) + "", 16);  
105 - return result;  
106 - }  
107 -  
108 - public static byte[] int2hex(int val, int len) {  
109 - if (len < 1)  
110 - throw new IllegalArgumentException("int2hex len 参数不符合要求");  
111 - byte[] result = new byte[len];  
112 - for (int i = 0;i < len;i++) {  
113 - result[len - 1 - i] = (byte)(val%100);  
114 - val = val/100;  
115 - }  
116 -  
117 - return result;  
118 - }  
119 -  
120 - public static int bytes2int(byte[] bytes, int start, int len) {  
121 - int val = 0;  
122 - for (int i = 0; i < len; i++) {  
123 - int shift = (len - 1 - i) * 8;  
124 - val += (bytes[start + i] & 0x0000FF) << shift;  
125 - }  
126 -  
127 - return val;  
128 - }  
129 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/handler/PdClientHandler.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.handler;  
2 -  
3 -import com.bsth.data.gpsdata.client.GpsBeforeBuffer;  
4 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
5 -import com.bsth.data.gpsdata.client.pd.protocol.PdMessage;  
6 -import com.bsth.data.gpsdata.client.pd.protocol.Pd_41_0;  
7 -import com.bsth.data.gpsdata.client.pd.protocol.Pd_42_0;  
8 -import org.apache.mina.core.service.IoHandlerAdapter;  
9 -import org.apache.mina.core.session.IdleStatus;  
10 -import org.apache.mina.core.session.IoSession;  
11 -import org.apache.mina.transport.socket.SocketSessionConfig;  
12 -import org.slf4j.Logger;  
13 -import org.slf4j.LoggerFactory;  
14 -import org.springframework.beans.factory.annotation.Autowired;  
15 -import org.springframework.stereotype.Service;  
16 -  
17 -import java.io.IOException;  
18 -  
19 -  
20 -@Service  
21 -public class PdClientHandler extends IoHandlerAdapter{  
22 -  
23 - private final static Logger log = LoggerFactory.getLogger(PdClientHandler.class);  
24 -  
25 - @Autowired  
26 - GpsBeforeBuffer gpsBeforeBuffer;  
27 -  
28 - @Override  
29 - public void sessionCreated(IoSession session) throws Exception {  
30 - SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig();  
31 - cfg.setSoLinger(0);  
32 - }  
33 -  
34 - @Override  
35 - public void sessionOpened(IoSession session) throws Exception {  
36 -  
37 - }  
38 -  
39 - @Override  
40 - public void sessionClosed(IoSession session) throws Exception {  
41 - String deviceId = (String)session.getAttribute("deviceId");  
42 - if (deviceId != null) {  
43 - //SessionManager.getInstance().unregister(deviceId);  
44 - log.info("连网关设备编号:" + deviceId + "断开连接");  
45 - log.warn(deviceId + "网关设备注销");  
46 -  
47 - //ClientApp.dconnect(deviceId);  
48 - } else {  
49 - log.info("连网关设备编号:" + deviceId + "断开连接");  
50 - }  
51 - }  
52 -  
53 - @Override  
54 - public void sessionIdle(IoSession session, IdleStatus status) throws Exception {  
55 - session.closeNow();  
56 - }  
57 -  
58 - @Override  
59 - public void exceptionCaught(IoSession session, Throwable cause) throws Exception {  
60 - if (cause instanceof IOException) session.closeNow();  
61 - log.error("PdClientHandler异常:", cause);  
62 - }  
63 -  
64 - @Override  
65 - public void messageReceived(IoSession session, Object message) throws Exception {  
66 - PdMessage msg = (PdMessage)message;  
67 - IMessageBody body = msg.getMessageBody();  
68 - if (body != null) {  
69 - //String deviceId = body.getDeviceId();  
70 - if (0x31 == msg.getCommandType()) {  
71 - //IoSession regSession = SessionManager.getInstance().getSession(deviceId);  
72 - //if (regSession != null) regSession.closeNow();  
73 - //SessionManager.getInstance().register(deviceId, session);  
74 - log.debug("设备编号:" + body.getDeviceId() + "建立连接");  
75 - }  
76 - else if(0x41 == msg.getCommandType()){  
77 - Pd_41_0 pd41 = (Pd_41_0)msg.getMessageBody();  
78 - gpsBeforeBuffer.put(pd41.getInfo());  
79 - }  
80 - else if(0x42 == msg.getCommandType()){  
81 - Pd_42_0 pd42 = (Pd_42_0)msg.getMessageBody();  
82 - gpsBeforeBuffer.put(pd42.getInfo());  
83 - }  
84 - }  
85 - }  
86 -  
87 - @Override  
88 - public void messageSent(IoSession session, Object message) throws Exception {  
89 -  
90 - }  
91 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/protocol/BasicInfo.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.protocol;  
2 -  
3 -  
4 -import com.bsth.data.gpsdata.client.pd.common.ConvertUtil;  
5 -  
6 -import java.nio.ByteBuffer;  
7 -import java.util.Date;  
8 -  
9 -  
10 -public class BasicInfo {  
11 -  
12 - private int cityCode;  
13 - private short industryCode;  
14 - private short companyCode;  
15 - private String deviceId;  
16 - private int lineId;  
17 - private int driverEmpNo;  
18 - private short carparkSerialNo;  
19 - private String carparkNo;  
20 - private short stopSerialNo;  
21 - private String stopNo;  
22 - // 经度 bcd 5 0121245333表示经度为121度24.5333分  
23 - private long carLon;  
24 - // 维度  
25 - private int carLat;  
26 - private long timestamp;  
27 - // 速度(传感器)bcd 2 保留一位小数 km/h  
28 - private short speedSensor;  
29 - // 速度(gps)bcd 2 保留一位小数 km/h  
30 - private short speedGps;  
31 - // 方向 bcd 2 0-359.5 保留一位小数  
32 - private short direction;  
33 - // 车内温度 bcd 2 第一字节为符号 00为正 01为负 后一字节为温度  
34 - private short inTemp;  
35 - // 营运状态 hex 4高位在前  
36 - // 第一字节位 7 GPS有/无效|6 场外/内|5 起终点站外/内|4 上/下行|3 已知/未知|2站外/站内|1 营运/非营运|0 在线路上/不在  
37 - // 7=1时其它位无效|0=1时3,4,5无效 第二字节6,7无效|3=1时2,4无效 第二字节6,7无效  
38 - // 第二字节位 7 非/标杆点|6 非/中途校时点|5 点/熄火|4 实时/缓存数据|3 门开/关|2 预留|1 非/包车|0预留  
39 - // 1=1时 第一字节0-6无效 6,7无效  
40 - // 后两个字节保留  
41 - private long serviceState;  
42 - // 调控状态  
43 - private long controlState;  
44 - // 累计里程 km 保留两位小数  
45 - private int totalMiles;  
46 - // 水温  
47 - private byte waterTemp;  
48 - // 油耗 (第一个字节 + 第二个字节/10)升/百公里  
49 - private int oilConsumption;  
50 - // 发动机转速 100转/秒  
51 - private int engineSpeed;  
52 - private float lon;  
53 - private float lat;  
54 -  
55 - private boolean inOutStopFlag = false;  
56 -  
57 - public void read(byte[] bytes, int idx) {  
58 - // TODO Auto-generated method stub  
59 - ByteBuffer buf = ByteBuffer.wrap(bytes);  
60 - cityCode = ConvertUtil.bcd2int(bytes, idx, 3); idx += 3;  
61 - industryCode = (short)(bytes[idx] & 0xff); idx++;  
62 - companyCode = (short)(bytes[idx] & 0xff); idx++;  
63 - deviceId = ConvertUtil.ascii2string(bytes, idx, 8); idx += 8;  
64 - lineId = ConvertUtil.bcd2int(bytes, idx, 3); idx += 3;  
65 - driverEmpNo = ConvertUtil.bcd2int(bytes, idx, 4); idx +=4;  
66 - carparkSerialNo = (short)(bytes[idx] & 0xff); idx++;  
67 - carparkNo = ConvertUtil.ascii2string(bytes, idx, 8); idx += 8;  
68 - stopSerialNo = (short)(bytes[idx] & 0xff); idx++;  
69 - stopNo = ConvertUtil.ascii2string(bytes, idx, 8).trim(); idx += 8;  
70 - carLon = ConvertUtil.bcd2long(bytes, idx, 5); lon = (int)(carLon/1000000) + carLon%1000000/600000f; idx += 5;  
71 - carLat = ConvertUtil.bcd2int(bytes, idx, 4); lat = carLat/1000000 + carLat%1000000/600000f; idx += 4;  
72 - timestamp = ConvertUtil.bcd2timestamp(bytes, idx); idx += 6;  
73 - speedSensor = (short)ConvertUtil.bcd2int(bytes, idx, 2); idx += 2;  
74 - speedGps = (short)ConvertUtil.bcd2int(bytes, idx, 2); idx += 2;  
75 - direction = (short)(ConvertUtil.bcd2int(bytes, idx, 2)); idx += 2;  
76 - inTemp = (short)ConvertUtil.bcd2int(bytes, idx, 2); idx += 2;  
77 - serviceState = buf.getInt(idx) & 0xffffffff; idx += 4;  
78 - controlState = buf.getInt(idx) & 0xffffffff; idx += 4;  
79 - totalMiles = ConvertUtil.bcd2int(bytes, idx, 4); idx += 4;  
80 - waterTemp = bytes[idx]; idx++;  
81 - oilConsumption = ConvertUtil.bcd2int(bytes, idx, 4); idx += 4;  
82 - engineSpeed = buf.getShort(idx) & 0xffff; idx += 2;  
83 - }  
84 -  
85 - public byte[] write() {  
86 - ByteBuffer buf = ByteBuffer.allocate(80);  
87 - buf.put(ConvertUtil.int2bcd(cityCode, 3));  
88 - buf.put((byte)industryCode);  
89 - buf.put((byte)companyCode);  
90 - buf.put(ConvertUtil.string2ascii(deviceId, 8));  
91 - buf.put(ConvertUtil.int2bcd(lineId, 3));  
92 - buf.put(ConvertUtil.int2bcd(driverEmpNo, 4));  
93 - buf.put((byte)carparkSerialNo);  
94 - buf.put(ConvertUtil.string2ascii(carparkNo, 8));  
95 - buf.put((byte)stopSerialNo);  
96 - buf.put(ConvertUtil.string2ascii(stopNo, 8));  
97 - buf.put(ConvertUtil.long2bcd(carLon, 5));  
98 - buf.put(ConvertUtil.long2bcd(carLat, 4));  
99 - buf.put(ConvertUtil.timestamp2bcd(timestamp));  
100 - buf.put(ConvertUtil.int2bcd(speedSensor, 2));  
101 - buf.put(ConvertUtil.int2bcd(speedGps, 2));  
102 - buf.put(ConvertUtil.int2bcd(direction, 2));  
103 - buf.put(ConvertUtil.int2bcd(inTemp, 2));  
104 - buf.putInt((int)serviceState);  
105 - buf.putInt((int)controlState);  
106 - buf.put(ConvertUtil.int2bcd(totalMiles, 4));  
107 - buf.put(waterTemp);  
108 - buf.put(ConvertUtil.int2bcd(oilConsumption, 2));  
109 - buf.putShort((short)engineSpeed);  
110 -  
111 - return buf.array();  
112 - }  
113 -  
114 - public String getDeviceId() {  
115 - // TODO Auto-generated method stub  
116 - return deviceId;  
117 - }  
118 -  
119 - public int getCityCode() {  
120 - return cityCode;  
121 - }  
122 -  
123 - public short getIndustryCode() {  
124 - return industryCode;  
125 - }  
126 -  
127 - public short getCompanyCode() {  
128 - return companyCode;  
129 - }  
130 -  
131 - public int getLineId() {  
132 - return lineId;  
133 - }  
134 -  
135 - public int getDriverEmpNo() {  
136 - return driverEmpNo;  
137 - }  
138 -  
139 - public short getCarparkSerialNo() {  
140 - return carparkSerialNo;  
141 - }  
142 -  
143 - public String getCarparkNo() {  
144 - return carparkNo;  
145 - }  
146 -  
147 - public short getStopSerialNo() {  
148 - return stopSerialNo;  
149 - }  
150 -  
151 - public String getStopNo() {  
152 - return stopNo;  
153 - }  
154 -  
155 - public long getCarLon() {  
156 - return carLon;  
157 - }  
158 -  
159 - public int getCarLat() {  
160 - return carLat;  
161 - }  
162 -  
163 - public long getTimestamp() {  
164 - return timestamp;  
165 - }  
166 -  
167 - public short getSpeedSensor() {  
168 - return speedSensor;  
169 - }  
170 -  
171 - public short getSpeedGps() {  
172 - return speedGps;  
173 - }  
174 -  
175 - public short getDirection() {  
176 - return direction;  
177 - }  
178 -  
179 - public short getInTemp() {  
180 - return inTemp;  
181 - }  
182 -  
183 - public long getServiceState() {  
184 - return serviceState;  
185 - }  
186 -  
187 - public long getControlState() {  
188 - return controlState;  
189 - }  
190 -  
191 - public int getTotalMiles() {  
192 - return totalMiles;  
193 - }  
194 -  
195 - public byte getWaterTemp() {  
196 - return waterTemp;  
197 - }  
198 -  
199 - public int getOilConsumption() {  
200 - return oilConsumption;  
201 - }  
202 -  
203 - public int getEngineSpeed() {  
204 - return engineSpeed;  
205 - }  
206 -  
207 - public float getLon() {  
208 - return lon;  
209 - }  
210 -  
211 - public void setLon(float lon) {  
212 - this.lon = lon;  
213 - }  
214 -  
215 - public float getLat() {  
216 - return lat;  
217 - }  
218 -  
219 - public void setLat(float lat) {  
220 - this.lat = lat;  
221 - }  
222 -  
223 - public void setStopNo(String stopNo) {  
224 - this.stopNo = stopNo;  
225 - }  
226 -  
227 - public byte getGpsValid() {  
228 - return (byte)(((serviceState & 0x80000000) == 0x80000000) ? 1 : 0);  
229 - }  
230 -  
231 - /**  
232 - * 获取车辆在场外/内  
233 - * @return -1无效 0场外1场内  
234 - */  
235 - public byte getInOrOutCarpark() {  
236 - if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000  
237 - || (serviceState & 0x01000000) == 0x01000000) return -1;  
238 - return (byte)(((serviceState & 0x40000000) == 0x40000000) ? 1 : 0);  
239 - }  
240 -  
241 - public void setInOrOutCarpark(boolean inOutFlag) {  
242 - if (inOutFlag) serviceState |= 0x40000000;  
243 - else serviceState &= 0xbfffffff;  
244 - }  
245 -  
246 - /**  
247 - * 获取车辆在起终点站外/内  
248 - * @return -1无效 0起终点站外1起终点站内  
249 - */  
250 - public byte getInOrOutStartEnd() {  
251 - if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000  
252 - || (serviceState & 0x01000000) == 0x01000000) return -1;  
253 - return (byte)(((serviceState & 0x20000000) == 0x20000000) ? 1 : 0);  
254 - }  
255 -  
256 - /**  
257 - * 获取车辆线路上下行  
258 - * @return -1无效 0上行 1下行  
259 - */  
260 - public byte getUpOrDown() {  
261 - if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000  
262 - || (serviceState & 0x01000000) == 0x01000000  
263 - || (serviceState & 0x08000000) == 0x08000000) return -1;  
264 - return (byte)(((serviceState & 0x10000000) == 0x10000000) ? 1 : 0);  
265 - }  
266 -  
267 - public void setUpOrDown(boolean upOrDown) {  
268 - if (!upOrDown) serviceState |= 0x10000000;  
269 - else serviceState &= 0xefffffff;  
270 - }  
271 -  
272 - /**  
273 - * 获取车辆在站外/内  
274 - * @return -1无效 0站外 1站内  
275 - */  
276 - public byte getInOrOutStop() {  
277 - if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000  
278 - || (serviceState & 0x01000000) == 0x01000000  
279 - || (serviceState & 0x08000000) == 0x08000000) return -1;  
280 - return (byte)(((serviceState & 0x04000000) == 0x04000000) ? 1 : 0);  
281 - }  
282 -  
283 - public void setInOrOutStop(boolean isInOrOutStop) {  
284 - inOutStopFlag = true;  
285 - if (isInOrOutStop) serviceState |= 0x04000000;  
286 - else serviceState &= 0xfbffffff;  
287 - }  
288 -  
289 - /**  
290 - * 获取运营状态  
291 - * @return -1无效 0运营 1未运营  
292 - */  
293 - public byte getService() {  
294 - if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000) return -1;  
295 - return (byte)(((serviceState & 0x02000000) == 0x02000000) ? 1 : 0);  
296 - }  
297 -  
298 - public void setService(boolean service) {  
299 - if (!service) serviceState |= 0x02000000;  
300 - else serviceState &= 0xfdffffff;  
301 - }  
302 -  
303 - /**  
304 - * 获得车辆状态  
305 - * @return 0点火 1熄火  
306 - */  
307 - public byte getVehicleState() {  
308 - return (byte)(((serviceState & 0x00200000) == 0x00200000) ? 1 : 0);  
309 - }  
310 -  
311 - public void setInOutStopFlag(boolean inOutStopFlag) {  
312 - this.inOutStopFlag = inOutStopFlag;  
313 - }  
314 -  
315 - public boolean getInOutStopFlag() {  
316 - return inOutStopFlag;  
317 - }  
318 -  
319 - public String toString() {  
320 - Date d = new Date();d.setTime(timestamp);  
321 - StringBuilder sb = new StringBuilder();  
322 - sb.append("城市代码:").append(cityCode)  
323 - .append("行业代码:").append(industryCode)  
324 - .append("公司代码:").append(companyCode)  
325 - .append("设备号:").append(deviceId)  
326 - .append("线路编号:").append(lineId)  
327 - .append("驾驶员工号:").append(driverEmpNo)  
328 - .append("停车场序列号:").append(carparkSerialNo)  
329 - .append("停车场编号:").append(carparkNo)  
330 - .append("站点序列号").append(stopSerialNo)  
331 - .append("站点编号:").append(stopNo)  
332 - .append("经度:").append(carLon)  
333 - .append("维度:").append(carLat)  
334 - .append("时间戳:").append(d)  
335 - .append("速度(传感器):").append(speedSensor)  
336 - .append("速度(gps)").append(speedGps)  
337 - .append("方向:").append(direction)  
338 - .append("车内温度:").append(inTemp)  
339 - .append("营运状态:").append(serviceState)  
340 - .append("调控状态:").append(controlState)  
341 - .append("总里程:").append(totalMiles)  
342 - .append("水温:").append(waterTemp)  
343 - .append("油耗:").append(oilConsumption)  
344 - .append("发动机速度:").append(engineSpeed);  
345 -  
346 - return sb.toString();  
347 - }  
348 - /* ----------------------------------------------------- */  
349 -  
350 - public void setCityCode(int cityCode) {  
351 - this.cityCode = cityCode;  
352 - }  
353 -  
354 - public void setIndustryCode(short industryCode) {  
355 - this.industryCode = industryCode;  
356 - }  
357 -  
358 - public void setCompanyCode(short companyCode) {  
359 - this.companyCode = companyCode;  
360 - }  
361 -  
362 - public void setDeviceId(String deviceId) {  
363 - this.deviceId = deviceId;  
364 - }  
365 -  
366 - public void setLineId(int lineId) {  
367 - this.lineId = lineId;  
368 - }  
369 -  
370 - public void setDriverEmpNo(int driverEmpNo) {  
371 - this.driverEmpNo = driverEmpNo;  
372 - }  
373 -  
374 - public void setCarparkSerialNo(short carparkSerialNo) {  
375 - this.carparkSerialNo = carparkSerialNo;  
376 - }  
377 -  
378 - public void setCarparkNo(String carparkNo) {  
379 - this.carparkNo = carparkNo;  
380 - }  
381 -  
382 - public void setStopSerialNo(short stopSerialNo) {  
383 - this.stopSerialNo = stopSerialNo;  
384 - }  
385 -  
386 - public void setCarLon(long carLon) {  
387 - this.carLon = carLon;  
388 - }  
389 -  
390 - public void setCarLat(int carLat) {  
391 - this.carLat = carLat;  
392 - }  
393 -  
394 - public void setTimestamp(long timestamp) {  
395 - this.timestamp = timestamp;  
396 - }  
397 -  
398 - public void setSpeedSensor(short speedSensor) {  
399 - this.speedSensor = speedSensor;  
400 - }  
401 -  
402 - public void setSpeedGps(short speedGps) {  
403 - this.speedGps = speedGps;  
404 - }  
405 -  
406 - public void setDirection(short direction) {  
407 - this.direction = direction;  
408 - }  
409 -  
410 - public void setInTemp(short inTemp) {  
411 - this.inTemp = inTemp;  
412 - }  
413 -  
414 - public void setServiceState(long serviceState) {  
415 - this.serviceState = serviceState;  
416 - }  
417 -  
418 - public void setControlState(long controlState) {  
419 - this.controlState = controlState;  
420 - }  
421 -  
422 - public void setTotalMiles(int totalMiles) {  
423 - this.totalMiles = totalMiles;  
424 - }  
425 -  
426 - public void setWaterTemp(byte waterTemp) {  
427 - this.waterTemp = waterTemp;  
428 - }  
429 -  
430 - public void setOilConsumption(int oilConsumption) {  
431 - this.oilConsumption = oilConsumption;  
432 - }  
433 -  
434 - public void setEngineSpeed(int engineSpeed) {  
435 - this.engineSpeed = engineSpeed;  
436 - }  
437 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/protocol/PdFactory.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.protocol;  
2 -  
3 -  
4 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
5 -  
6 -public class PdFactory {  
7 -  
8 - public static IMessageBody create(int commandType, byte[] data) {  
9 - String pkgName = PdFactory.class.getPackage().getName();  
10 - IMessageBody body = null;  
11 - try {  
12 - Class<?> cls = Class.forName(pkgName + ".Pd_" + Integer.toHexString(commandType).toUpperCase() + "_0");  
13 - body = (IMessageBody)cls.newInstance();  
14 - body.read(data);  
15 - } catch (ClassNotFoundException e) {  
16 - // TODO Auto-generated catch block  
17 - //e.printStackTrace();  
18 - } catch (InstantiationException e) {  
19 - // TODO Auto-generated catch block  
20 - e.printStackTrace();  
21 - } catch (IllegalAccessException e) {  
22 - // TODO Auto-generated catch block  
23 - e.printStackTrace();  
24 - }  
25 - return body;  
26 - }  
27 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/protocol/PdMessage.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.protocol;  
2 -  
3 -  
4 -import com.bsth.data.gpsdata.client.msg.IMessage;  
5 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
6 -  
7 -import java.nio.ByteBuffer;  
8 -import java.util.Arrays;  
9 -  
10 -public class PdMessage implements IMessage {  
11 -  
12 - private short version;  
13 - private short serialNo;  
14 - private short commandType;  
15 - private IMessageBody messageBody;  
16 - private byte checkSum;  
17 -  
18 - public short getVersion() {  
19 - return version;  
20 - }  
21 -  
22 - public void setVersion(short version) {  
23 - this.version = version;  
24 - }  
25 -  
26 - public short getSerialNo() {  
27 - return serialNo;  
28 - }  
29 -  
30 - public void setSerialNo(short serialNo) {  
31 - this.serialNo = serialNo;  
32 - }  
33 -  
34 - public short getCommandType() {  
35 - return commandType;  
36 - }  
37 -  
38 - public void setCommandType(short commandType) {  
39 - this.commandType = commandType;  
40 - }  
41 -  
42 - public IMessageBody getMessageBody() {  
43 - return messageBody;  
44 - }  
45 -  
46 - public void setMessageBody(IMessageBody messageBody) {  
47 - this.messageBody = messageBody;  
48 - }  
49 -  
50 - public byte getCheckSum() {  
51 - return checkSum;  
52 - }  
53 -  
54 - public void setCheckSum(byte checkSum) {  
55 - this.checkSum = checkSum;  
56 - }  
57 -  
58 - public void read(byte[] data) {  
59 - int idx = 0, len = data.length;  
60 - version = (short)(data[idx] & 0xff); idx++;  
61 - serialNo = (short)(data[idx] & 0xff); idx++;  
62 - commandType = (short)(data[idx] & 0xff); idx++;  
63 - byte[] temp = Arrays.copyOfRange(data, idx, len - 1);  
64 - checkSum = data[len - 1];  
65 - byte sum = 0;  
66 - for (int i = 0;i < len - 1;i++) {  
67 - sum += data[i];  
68 - }  
69 - if (sum == checkSum) {  
70 - messageBody = PdFactory.create(commandType, temp);  
71 - }  
72 - }  
73 -  
74 - public byte[] write() {  
75 - byte[] bytes = messageBody.write();  
76 - ByteBuffer buf = ByteBuffer.allocate(bytes.length + 8);  
77 - buf.put(new byte[] { (byte)0xfa, (byte)0xf5 });  
78 - buf.putShort((short)(bytes.length + 3));  
79 - buf.put((byte)version);  
80 - buf.put((byte)serialNo);  
81 - buf.put((byte)commandType);  
82 - buf.put(bytes);  
83 - checkSum = 0;  
84 - checkSum += (byte)version;  
85 - checkSum += (byte)serialNo;  
86 - checkSum += (byte)commandType;  
87 - for (byte b : bytes) {  
88 - checkSum += b;  
89 - }  
90 - buf.put(checkSum);  
91 - return buf.array();  
92 - }  
93 -  
94 - public String toString() {  
95 - StringBuilder sb = new StringBuilder();  
96 - sb.append("报文版本号:").append(version)  
97 - .append("报文序列号:").append(serialNo)  
98 - .append("报文命令字:0x").append(Integer.toHexString(commandType))  
99 - .append("报文主体:(").append(messageBody).append(")")  
100 - .append("报文校验和:").append(checkSum);  
101 -  
102 - return sb.toString();  
103 - }  
104 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/protocol/Pd_31_0.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.protocol;  
2 -  
3 -  
4 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
5 -import com.bsth.data.gpsdata.client.pd.common.ConvertUtil;  
6 -  
7 -import java.nio.ByteBuffer;  
8 -import java.util.Date;  
9 -  
10 -  
11 -public class Pd_31_0 implements IMessageBody {  
12 -  
13 - // bcd 1  
14 - private short funCode;  
15 - // bcd 3  
16 - private int lineId;  
17 - // ascii 8  
18 - private String deviceId;  
19 - // bcd 6 yyMMddhhmmss  
20 - private long timestamp;  
21 - // hex 8  
22 - private String reserved;  
23 -  
24 - @Override  
25 - public void read(byte[] bytes) {  
26 - // TODO Auto-generated method stub  
27 - int idx = 0;  
28 - funCode = (short)(bytes[idx] & 0xff);idx++;  
29 - lineId = ConvertUtil.bcd2int(bytes, idx, 3);idx += 3;  
30 - deviceId = ConvertUtil.ascii2string(bytes, idx, 8);idx += 8;  
31 - timestamp = ConvertUtil.bcd2timestamp(bytes, idx);idx += 6;  
32 - reserved = ConvertUtil.ascii2string(bytes, idx, 8);idx += 8;  
33 - }  
34 -  
35 - @Override  
36 - public byte[] write() {  
37 - // TODO Auto-generated method stub  
38 - ByteBuffer buf = ByteBuffer.allocate(26);  
39 - buf.put((byte)funCode);  
40 - buf.put(ConvertUtil.int2bcd(lineId, 3));  
41 - buf.put(deviceId.getBytes());  
42 - buf.put(ConvertUtil.timestamp2bcd(timestamp));  
43 - buf.put(new byte[]{0,0,0,0,0,0,0,0});  
44 - return buf.array();  
45 - }  
46 -  
47 - public short getFunCode() {  
48 - return funCode;  
49 - }  
50 -  
51 - public int getLineId() {  
52 - return lineId;  
53 - }  
54 -  
55 - public String getDeviceId() {  
56 - return deviceId;  
57 - }  
58 -  
59 - public long getTimestamp() {  
60 - return timestamp;  
61 - }  
62 -  
63 - public String getReserved() {  
64 - return reserved;  
65 - }  
66 -  
67 - public void setFunCode(short funCode) {  
68 - this.funCode = funCode;  
69 - }  
70 -  
71 - public void setLineId(int lineId) {  
72 - this.lineId = lineId;  
73 - }  
74 -  
75 - public void setDeviceId(String deviceId) {  
76 - this.deviceId = deviceId;  
77 - }  
78 -  
79 - public void setTimeStamp(long timestamp) {  
80 - this.timestamp = timestamp;  
81 - }  
82 -  
83 - public void setReserved(String reserved) {  
84 - this.reserved = reserved;  
85 - }  
86 -  
87 - public String toString() {  
88 - Date d = new Date();  
89 - d.setTime(timestamp);  
90 - StringBuilder sb = new StringBuilder();  
91 - sb.append("功能号:").append(Integer.toHexString(funCode))  
92 - .append("线路编号:").append(lineId)  
93 - .append("设备编号:").append(deviceId)  
94 - .append("时间戳:").append(d);  
95 - return sb.toString();  
96 - }  
97 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/protocol/Pd_41_0.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.protocol;  
2 -  
3 -  
4 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
5 -import com.bsth.data.gpsdata.client.pd.common.ConvertUtil;  
6 -  
7 -import java.nio.ByteBuffer;  
8 -  
9 -  
10 -public class Pd_41_0 implements IMessageBody {  
11 -  
12 - private BasicInfo info;  
13 - private short leaveStopDis;  
14 -  
15 - public BasicInfo getInfo() {  
16 - return info;  
17 - }  
18 -  
19 - public void setInfo(BasicInfo info) {  
20 - this.info = info;  
21 - }  
22 -  
23 - public short getLeaveStopDis() {  
24 - return leaveStopDis;  
25 - }  
26 -  
27 - public void setLeaveStopDis(short leaveStopDis) {  
28 - this.leaveStopDis = leaveStopDis;  
29 - }  
30 -  
31 - @Override  
32 - public void read(byte[] bytes) {  
33 - // TODO Auto-generated method stub  
34 - int idx = 0;  
35 - info = new BasicInfo();  
36 - info.read(bytes, idx); idx += 80;  
37 - leaveStopDis = (short) ConvertUtil.bcd2int(bytes, idx, 2); idx += 2;  
38 - }  
39 -  
40 - @Override  
41 - public byte[] write() {  
42 - // TODO Auto-generated method stub  
43 - ByteBuffer buf = ByteBuffer.allocate(82);  
44 - buf.put(info.write());  
45 - buf.put(ConvertUtil.int2bcd(leaveStopDis, 2));  
46 -  
47 - return buf.array();  
48 - }  
49 -  
50 - @Override  
51 - public String getDeviceId() {  
52 - // TODO Auto-generated method stub  
53 - return info.getDeviceId();  
54 - }  
55 -  
56 - public String toString() {  
57 - StringBuilder sb = new StringBuilder();  
58 - sb.append("基本数据:").append(info.toString())  
59 - .append("离站距离:").append(leaveStopDis);  
60 -  
61 - return sb.toString();  
62 - }  
63 -  
64 - @Override  
65 - public long getTimestamp() {  
66 - // TODO Auto-generated method stub  
67 - return info.getTimestamp();  
68 - }  
69 -}  
src/main/java/com/bsth/data/gpsdata/client/pd/protocol/Pd_42_0.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pd.protocol;  
2 -  
3 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
4 -import com.bsth.data.gpsdata.client.pd.common.ConvertUtil;  
5 -  
6 -import java.nio.ByteBuffer;  
7 -  
8 -public class Pd_42_0 implements IMessageBody {  
9 -  
10 - private BasicInfo info;  
11 - // 站间里程 保留两位小数 km  
12 - private short stopBetMiles;  
13 - private short frontDoorUp;  
14 - private short frontDoorDown;  
15 - private short backDoorUp;  
16 - private short backDoorDown;  
17 - // 本站留车人数  
18 - private int stay;  
19 - // 本站刷卡次数  
20 - private short cardCount;  
21 - // 本站刷卡金额  
22 - private int cardMoney;  
23 - // 免费刷卡次数  
24 - private short freeCardCount;  
25 - // 免费刷卡金额  
26 - private int freeCardMoney;  
27 - // 总刷卡次数  
28 - private int totalCardCount;  
29 - // 总数卡金额  
30 - private long totalCardMoney;  
31 - // 总免费刷卡次数  
32 - private int totalFreeCardCount;  
33 - // 总免费刷卡金额  
34 - private long totalFreeCardMoney;  
35 - // 客流站号  
36 - private short passengerStopNo;  
37 -  
38 - @Override  
39 - public void read(byte[] bytes) {  
40 - // TODO Auto-generated method stub  
41 - ByteBuffer buf = ByteBuffer.wrap(bytes);  
42 - int idx = 0;  
43 - info = new BasicInfo();  
44 - info.read(bytes, idx); idx += 80;  
45 - stopBetMiles = (short) ConvertUtil.bcd2int(bytes, idx, 2); idx += 2;  
46 - frontDoorUp = (short)(buf.get(idx) & 0xff); idx++;  
47 - frontDoorDown = (short)(buf.get(idx) & 0xff); idx++;  
48 - backDoorUp = (short)(buf.get(idx) & 0xff); idx++;  
49 - backDoorDown = (short)(buf.get(idx) & 0xff); idx++;  
50 - stay = buf.getShort(idx) & 0xffff; idx += 2;  
51 - cardCount = (short)(buf.get(idx) & 0xff); idx++;  
52 - cardMoney = buf.getShort(idx) & 0xffff; idx += 2;  
53 - freeCardCount = (short)(buf.get(idx) & 0xff); idx++;  
54 - freeCardMoney = buf.getShort(idx) & 0xffff; idx += 2;  
55 - totalCardCount = buf.getShort(idx) & 0xffff; idx += 2;  
56 - totalCardMoney = buf.getInt(idx) & 0xffffffffl; idx += 4;  
57 - totalFreeCardCount = buf.getShort(idx) & 0xffff; idx += 2;  
58 - totalFreeCardMoney = buf.getInt(idx) & 0xffffffffl; idx += 4;  
59 - passengerStopNo = (short)(buf.get(idx) & 0xff); idx++;  
60 - }  
61 -  
62 - @Override  
63 - public byte[] write() {  
64 - // TODO Auto-generated method stub  
65 - ByteBuffer buf = ByteBuffer.allocate(107);  
66 - buf.put(info.write());  
67 - buf.put(ConvertUtil.int2bcd(stopBetMiles, 2));  
68 - buf.put((byte)frontDoorUp);  
69 - buf.put((byte)frontDoorDown);  
70 - buf.put((byte)backDoorUp);  
71 - buf.put((byte)backDoorDown);  
72 - buf.putShort((short)stay);  
73 - buf.put((byte)cardCount);  
74 - buf.putShort((short)cardMoney);  
75 - buf.put((byte)freeCardCount);  
76 - buf.putShort((short)freeCardMoney);  
77 - buf.putShort((short)totalCardCount);  
78 - buf.putInt((int)totalCardMoney);  
79 - buf.putShort((short)totalFreeCardCount);  
80 - buf.putInt((int)totalFreeCardMoney);  
81 - buf.put((byte)passengerStopNo);  
82 -  
83 - return buf.array();  
84 - }  
85 -  
86 - @Override  
87 - public String getDeviceId() {  
88 - // TODO Auto-generated method stub  
89 - return info.getDeviceId();  
90 - }  
91 -  
92 - public BasicInfo getInfo() {  
93 - return info;  
94 - }  
95 -  
96 - public short getStopBetMiles() {  
97 - return stopBetMiles;  
98 - }  
99 -  
100 - public short getFrontDoorUp() {  
101 - return frontDoorUp;  
102 - }  
103 -  
104 - public short getFrontDoorDown() {  
105 - return frontDoorDown;  
106 - }  
107 -  
108 - public short getBackDoorUp() {  
109 - return backDoorUp;  
110 - }  
111 -  
112 - public short getBackDoorDown() {  
113 - return backDoorDown;  
114 - }  
115 -  
116 - public int getStay() {  
117 - return stay;  
118 - }  
119 -  
120 - public short getCardCount() {  
121 - return cardCount;  
122 - }  
123 -  
124 - public int getCardMoney() {  
125 - return cardMoney;  
126 - }  
127 -  
128 - public short getFreeCardCount() {  
129 - return freeCardCount;  
130 - }  
131 -  
132 - public int getFreeCardMoney() {  
133 - return freeCardMoney;  
134 - }  
135 -  
136 - public int getTotalCardCount() {  
137 - return totalCardCount;  
138 - }  
139 -  
140 - public long getTotalCardMoney() {  
141 - return totalCardMoney;  
142 - }  
143 -  
144 - public int getTotalFreeCardCount() {  
145 - return totalFreeCardCount;  
146 - }  
147 -  
148 - public long getTotalFreeCardMoney() {  
149 - return totalFreeCardMoney;  
150 - }  
151 -  
152 - public short getPassengerStopNo() {  
153 - return passengerStopNo;  
154 - }  
155 -  
156 - public String toString() {  
157 - StringBuilder sb = new StringBuilder();  
158 - sb.append("基本数据:").append(info.toString())  
159 - .append("站间距离:").append(stopBetMiles)  
160 - .append("前门上客:").append(frontDoorUp)  
161 - .append("前门下客:").append(frontDoorDown)  
162 - .append("后门上客:").append(backDoorUp)  
163 - .append("后门下客:").append(backDoorDown)  
164 - .append("本站留车人数:").append(stay)  
165 - .append("本站刷卡次数:").append(cardCount)  
166 - .append("本站刷卡金额:").append(cardMoney)  
167 - .append("免费刷卡次数:").append(freeCardCount)  
168 - .append("免费刷卡金额:").append(freeCardMoney)  
169 - .append("总刷卡次数:").append(totalCardCount)  
170 - .append("总数卡金额:").append(totalCardMoney)  
171 - .append("总免费刷卡次数:").append(totalFreeCardCount)  
172 - .append("总免费刷卡金额:").append(totalFreeCardMoney)  
173 - .append("客流站号:").append(passengerStopNo);  
174 -  
175 - return sb.toString();  
176 - }  
177 -  
178 - @Override  
179 - public long getTimestamp() {  
180 - // TODO Auto-generated method stub  
181 - return info.getTimestamp();  
182 - }  
183 -}  
src/main/java/com/bsth/data/gpsdata/client/pf/codec/MessageDecoder.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pf.codec;  
2 -  
3 -import com.bsth.data.gpsdata.client.pf.protocol.PfMessage;  
4 -import org.apache.mina.core.buffer.IoBuffer;  
5 -import org.apache.mina.core.session.IoSession;  
6 -import org.apache.mina.filter.codec.CumulativeProtocolDecoder;  
7 -import org.apache.mina.filter.codec.ProtocolDecoderOutput;  
8 -  
9 -  
10 -public class MessageDecoder extends CumulativeProtocolDecoder {  
11 -  
12 - @Override  
13 - protected boolean doDecode(IoSession session, IoBuffer in,  
14 - ProtocolDecoderOutput out) throws Exception {  
15 - // TODO Auto-generated method stub  
16 - while (in.remaining() > 3) {  
17 - in.mark();  
18 - byte head1 = in.get(), head2 = in.get(), lenh = in.get(), lenl = in.get();  
19 - int len = ((lenh & 0xff) << 8) + (lenl & 0xff);  
20 - if ((head1 & 0xff) == 0xfa && (head2 & 0xff) == 0xf5) {  
21 - if (in.remaining() > len) {  
22 - byte[] bytes = new byte[len + 1];  
23 - in.get(bytes);  
24 - PfMessage msg = new PfMessage();  
25 - msg.read(bytes);  
26 - out.write(msg);  
27 - } else {  
28 - in.reset();  
29 - return false;  
30 - }  
31 - }  
32 - }  
33 - return false;  
34 - }  
35 -  
36 - /*private static String toHexString(byte[] bytes) {  
37 - StringBuilder sb = new StringBuilder();  
38 - for (byte b : bytes) {  
39 - sb.append(Integer.toHexString(b & 0xff) + "|");  
40 - }  
41 - return sb.toString();  
42 - }*/  
43 -}  
src/main/java/com/bsth/data/gpsdata/client/pf/codec/MessageEncoder.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pf.codec;  
2 -  
3 -import org.apache.mina.core.buffer.IoBuffer;  
4 -import org.apache.mina.core.session.IoSession;  
5 -import org.apache.mina.filter.codec.ProtocolEncoderAdapter;  
6 -import org.apache.mina.filter.codec.ProtocolEncoderOutput;  
7 -  
8 -public class MessageEncoder extends ProtocolEncoderAdapter {  
9 -  
10 - @Override  
11 - public void encode(IoSession session, Object message,  
12 - ProtocolEncoderOutput out) throws Exception {  
13 - // TODO Auto-generated method stub  
14 - IoBuffer buf = IoBuffer.allocate(1024).setAutoExpand(true);  
15 - buf.put((byte[])message);  
16 - buf.flip();  
17 - out.write(buf);  
18 - }  
19 -  
20 -}  
src/main/java/com/bsth/data/gpsdata/client/pf/codec/PfMessageCodecFactory.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pf.codec;  
2 -  
3 -import org.apache.mina.core.session.IoSession;  
4 -import org.apache.mina.filter.codec.ProtocolCodecFactory;  
5 -import org.apache.mina.filter.codec.ProtocolDecoder;  
6 -import org.apache.mina.filter.codec.ProtocolEncoder;  
7 -  
8 -public class PfMessageCodecFactory implements ProtocolCodecFactory {  
9 -  
10 - private ProtocolEncoder encoder;  
11 - private ProtocolDecoder decoder;  
12 -  
13 - public PfMessageCodecFactory() {  
14 - encoder = new MessageEncoder();  
15 - decoder = new MessageDecoder();  
16 - }  
17 -  
18 - @Override  
19 - public ProtocolEncoder getEncoder(IoSession session) throws Exception {  
20 - // TODO Auto-generated method stub  
21 - return encoder;  
22 - }  
23 -  
24 - @Override  
25 - public ProtocolDecoder getDecoder(IoSession session) throws Exception {  
26 - // TODO Auto-generated method stub  
27 - return decoder;  
28 - }  
29 -  
30 -}  
src/main/java/com/bsth/data/gpsdata/client/pf/common/ConvertUtil.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pf.common;  
2 -  
3 -import com.bsth.data.gpsdata.client.common.ThreadLocalDateUtil;  
4 -import org.slf4j.Logger;  
5 -import org.slf4j.LoggerFactory;  
6 -  
7 -import java.text.ParseException;  
8 -import java.util.Arrays;  
9 -import java.util.Calendar;  
10 -import java.util.Date;  
11 -  
12 -  
13 -public class ConvertUtil {  
14 -  
15 - private final static Logger log = LoggerFactory.getLogger(ConvertUtil.class);  
16 -  
17 - public static int bcd2int(byte[] bytes, int start, int len) {  
18 - if (len > 4 || len == 0)  
19 - throw new IllegalArgumentException("bcd2int 字节数不符合要求");  
20 - String temp = "";  
21 - for (int i = 0;i < len;i++) {  
22 - int val = bytes[start + i] & 0xff;  
23 - if (val < 10) temp += 0;  
24 - temp += Integer.toHexString(val);  
25 - }  
26 - return Integer.parseInt(temp);  
27 - }  
28 -  
29 - public static byte[] int2bcd(int val, int len) {  
30 - if (len > 4 || len == 0)  
31 - throw new IllegalArgumentException("int2bcd 字节数不符合要求");  
32 - byte[] result = new byte[len];  
33 - for (int i = len - 1;i > -1;i--) {  
34 - result[i] = (byte)Integer.parseInt(val%100 + "", 16);  
35 - val = val/100;  
36 - }  
37 - return result;  
38 - }  
39 -  
40 - public static long bcd2long(byte[] bytes, int start, int len) {  
41 - if (len > 8 || len == 0)  
42 - throw new IllegalArgumentException("bcd2long 字节数不符合要求");  
43 - String temp = "";  
44 - for (int i = 0;i < len;i++) {  
45 - int val = bytes[start + i] & 0xff;  
46 - if (val < 10) temp += 0;  
47 - temp += Integer.toHexString(val);  
48 - }  
49 - return Long.parseLong(temp);  
50 - }  
51 -  
52 - public static byte[] long2bcd(long val, int len) {  
53 - if (len > 8 || len == 0)  
54 - throw new IllegalArgumentException("long2bcd 字节数不符合要求");  
55 - byte[] result = new byte[len];  
56 - for (int i = len - 1;i > -1;i--) {  
57 - result[i] = (byte)Integer.parseInt(val%100 + "", 16);  
58 - val = val/100;  
59 - }  
60 - return result;  
61 - }  
62 -  
63 - public static String ascii2string(byte[] bytes, int start, int len) {  
64 - return new String(Arrays.copyOfRange(bytes, start, start + len));  
65 - }  
66 -  
67 - public static byte[] string2ascii(String val, int len) {  
68 - byte[] result = new byte[len];  
69 - byte[] bytes = val.getBytes();  
70 - if (bytes.length > len && len != 0)  
71 - throw new IllegalArgumentException("string2ascii 参数不符合要求");  
72 - if (len != 0)  
73 - for (int i = 0, l = bytes.length;i < l;i++) result[i] = bytes[i];  
74 - else return bytes;  
75 - return result;  
76 - }  
77 -  
78 - public static long bcd2timestamp(byte[] bytes, int start) {  
79 - String temp = "20";  
80 - for (int i = 0;i < 6;i++) {  
81 - int val = bytes[start + i] & 0xff;  
82 - if (val < 10) temp += 0;  
83 - temp += Integer.toHexString(val);  
84 - }  
85 - Date date = null;  
86 - try {  
87 - date = ThreadLocalDateUtil.parse(temp);  
88 - } catch (ParseException e) {  
89 - log.error("协议中时间数据异常:" + temp);  
90 - }  
91 - if (date != null) return date.getTime();  
92 - return -1;  
93 - }  
94 -  
95 - public static byte[] timestamp2bcd(long val) {  
96 - byte[] result = new byte[6];  
97 - Calendar c = Calendar.getInstance();  
98 - c.setTime(new Date(val));  
99 - result[0] = (byte)(Integer.parseInt(c.get(Calendar.YEAR)%100 + "", 16));  
100 - result[1] = (byte)(Integer.parseInt(c.get(Calendar.MONTH) + 1 + "", 16));  
101 - result[2] = (byte)Integer.parseInt(c.get(Calendar.DAY_OF_MONTH) + "", 16);  
102 - result[3] = (byte)Integer.parseInt(c.get(Calendar.HOUR_OF_DAY) + "", 16);  
103 - result[4] = (byte)Integer.parseInt(c.get(Calendar.MINUTE) + "", 16);  
104 - result[5] = (byte)Integer.parseInt(c.get(Calendar.SECOND) + "", 16);  
105 - return result;  
106 - }  
107 -  
108 - public static byte[] int2hex(int val, int len) {  
109 - if (len < 1)  
110 - throw new IllegalArgumentException("int2hex len 参数不符合要求");  
111 - byte[] result = new byte[len];  
112 - for (int i = 0;i < len;i++) {  
113 - result[len - 1 - i] = (byte)(val%100);  
114 - val = val/100;  
115 - }  
116 -  
117 - return result;  
118 - }  
119 -}  
src/main/java/com/bsth/data/gpsdata/client/pf/handler/PfClientHandler.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pf.handler;  
2 -  
3 -import com.bsth.data.gpsdata.client.GpsBeforeBuffer;  
4 -import com.bsth.data.gpsdata.client.common.Protocol2BizUtil;  
5 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
6 -import com.bsth.data.gpsdata.client.pd.protocol.BasicInfo;  
7 -import com.bsth.data.gpsdata.client.pf.protocol.PfMessage;  
8 -import org.apache.mina.core.service.IoHandlerAdapter;  
9 -import org.apache.mina.core.session.IdleStatus;  
10 -import org.apache.mina.core.session.IoSession;  
11 -import org.slf4j.Logger;  
12 -import org.slf4j.LoggerFactory;  
13 -import org.springframework.beans.factory.annotation.Autowired;  
14 -import org.springframework.stereotype.Service;  
15 -  
16 -import java.io.IOException;  
17 -  
18 -@Service  
19 -public class PfClientHandler extends IoHandlerAdapter{  
20 -  
21 - private final static Logger log = LoggerFactory.getLogger(PfClientHandler.class);  
22 -  
23 - //@Autowired  
24 - //private MessageProcessor processor;  
25 -  
26 - @Autowired  
27 - GpsBeforeBuffer gpsBeforeBuffer;  
28 -  
29 - @Override  
30 - public void sessionCreated(IoSession session) throws Exception {  
31 -  
32 - }  
33 -  
34 - @Override  
35 - public void sessionOpened(IoSession session) throws Exception {  
36 -  
37 - }  
38 -  
39 - @Override  
40 - public void sessionClosed(IoSession session) throws Exception {  
41 - String deviceId = (String)session.getAttribute("deviceId");  
42 - if (deviceId != null) {  
43 - //SessionManager.getInstance().unregister(deviceId);  
44 - log.info("连老网关设备编号:" + deviceId + "断开连接");  
45 - log.warn(deviceId + "老网关设备注销");  
46 - //ClientApp.fconnect(deviceId);  
47 - }  
48 - }  
49 -  
50 - @Override  
51 - public void sessionIdle(IoSession session, IdleStatus status) throws Exception {  
52 - session.closeNow();  
53 - }  
54 -  
55 - @Override  
56 - public void exceptionCaught(IoSession session, Throwable cause) throws Exception {  
57 - if (cause instanceof IOException) session.closeNow();  
58 - log.error("PfClientHandler exceptionCaught", cause);  
59 - }  
60 -  
61 - @Override  
62 - public void messageReceived(IoSession session, Object message) throws Exception {  
63 - PfMessage msg = (PfMessage)message;  
64 - IMessageBody body = msg.getMessageBody();  
65 - if (body != null) {  
66 - String deviceId = body.getDeviceId();  
67 - if (0x1 == msg.getCommandType()) {  
68 - log.debug("设备编号:" + body.getDeviceId() + "建立连接");  
69 - }  
70 -  
71 - BasicInfo info = Protocol2BizUtil.getBasicInfoFromMsg(msg);  
72 - gpsBeforeBuffer.put(info);  
73 - }  
74 -  
75 - }  
76 -  
77 - @Override  
78 - public void messageSent(IoSession session, Object message) throws Exception {  
79 -  
80 - }  
81 -}  
src/main/java/com/bsth/data/gpsdata/client/pf/protocol/PfFactory.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pf.protocol;  
2 -  
3 -  
4 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
5 -  
6 -public class PfFactory {  
7 -  
8 - public static IMessageBody create(int commandType, byte[] data) {  
9 - String pkgName = PfFactory.class.getPackage().getName();  
10 - IMessageBody body = null;  
11 - try {  
12 - Class<?> cls = Class.forName(pkgName + ".Pf_" + Integer.toHexString(commandType).toUpperCase() + "_0");  
13 - body = (IMessageBody)cls.newInstance();  
14 - body.read(data);  
15 - } catch (ClassNotFoundException e) {  
16 - // TODO Auto-generated catch block  
17 - //e.printStackTrace();  
18 - } catch (InstantiationException e) {  
19 - // TODO Auto-generated catch block  
20 - e.printStackTrace();  
21 - } catch (IllegalAccessException e) {  
22 - // TODO Auto-generated catch block  
23 - e.printStackTrace();  
24 - }  
25 - return body;  
26 - }  
27 -}  
src/main/java/com/bsth/data/gpsdata/client/pf/protocol/PfMessage.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pf.protocol;  
2 -  
3 -import com.bsth.data.gpsdata.client.msg.IMessage;  
4 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
5 -  
6 -import java.util.Arrays;  
7 -  
8 -public class PfMessage implements IMessage {  
9 -  
10 - private short version;  
11 - private short serialNo;  
12 - private short commandType;  
13 - private IMessageBody messageBody;  
14 - private byte checkSum;  
15 -  
16 - public short getVersion() {  
17 - return version;  
18 - }  
19 -  
20 - public void setVersion(short version) {  
21 - this.version = version;  
22 - }  
23 -  
24 - public short getSerialNo() {  
25 - return serialNo;  
26 - }  
27 -  
28 - public void setSerialNo(short serialNo) {  
29 - this.serialNo = serialNo;  
30 - }  
31 -  
32 - public short getCommandType() {  
33 - return commandType;  
34 - }  
35 -  
36 - public void setCommandType(short commandType) {  
37 - this.commandType = commandType;  
38 - }  
39 -  
40 - public IMessageBody getMessageBody() {  
41 - return messageBody;  
42 - }  
43 -  
44 - public void setMessageBody(IMessageBody messageBody) {  
45 - this.messageBody = messageBody;  
46 - }  
47 -  
48 - public byte getCheckSum() {  
49 - return checkSum;  
50 - }  
51 -  
52 - public void setCheckSum(byte checkSum) {  
53 - this.checkSum = checkSum;  
54 - }  
55 -  
56 - public void read(byte[] data) {  
57 - int idx = 0, len = data.length;  
58 - //version = (short)(data[idx] & 0xff); idx++;  
59 - //serialNo = (short)(data[idx] & 0xff); idx++;  
60 - commandType = (short)(data[idx] & 0xff); idx++;  
61 - byte[] temp = Arrays.copyOfRange(data, idx, len - 1);  
62 - checkSum = data[len - 1];  
63 - if (0xff == (checkSum & 0xff)) {  
64 - try {  
65 - messageBody = PfFactory.create(commandType, temp);  
66 - } catch (Exception e) {  
67 -  
68 - }  
69 - }  
70 - }  
71 -  
72 - public byte[] write() {  
73 - return null;  
74 - }  
75 -  
76 - public String toString() {  
77 - StringBuilder sb = new StringBuilder();  
78 - //sb.append("报文版本号:").append(version)  
79 - //.append("报文序列号:").append(serialNo)  
80 - sb.append("报文命令字:0x").append(Integer.toHexString(commandType))  
81 - .append("报文主体:(").append(messageBody).append(")")  
82 - .append("报文校验和:").append(checkSum);  
83 -  
84 - return sb.toString();  
85 - }  
86 -}  
src/main/java/com/bsth/data/gpsdata/client/pf/protocol/Pf_1_0.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.client.pf.protocol;  
2 -  
3 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
4 -import com.bsth.data.gpsdata.client.pd.common.ConvertUtil;  
5 -  
6 -import java.nio.ByteBuffer;  
7 -import java.util.Date;  
8 -  
9 -  
10 -public class Pf_1_0 implements IMessageBody {  
11 -  
12 - /** 1、车载终端识别码-byte[8] */  
13 - private String mtd;  
14 - /** 2、司机工号-byte[8] */  
15 - private String driver;  
16 - /** 3、包车状态-byte[1] */  
17 - private int bczt;  
18 - /** 4、线路状态-byte[1] */  
19 - private int xlzt;  
20 - /** 5、线路代码-byte[6] */  
21 - private int xldm;  
22 - /** 6、营运状态-byte[1] */  
23 - private int yyzt;  
24 - /** 7、进出站状态-byte[1] */  
25 - private int jczzt;  
26 - /** 8、站点编号-byte[8] */  
27 - private String zdbh;  
28 - /** 9、进出停车场状态(0:厂内,1:厂外,2:未知)-byte[1] */  
29 - private int jctcczt;  
30 - /** 10、停车场编号-byte[8] */  
31 - private String tccbh;  
32 - /** 11、路段编码-byte[12] */  
33 - private String ldbh;  
34 - /** 12、上下行状态-byte[1] */  
35 - private int sxxzt;  
36 - /** 13、速度-byte[1] */  
37 - private int speed;  
38 - /** 14、初始异常状态-byte[1] */  
39 - private int csyczt;  
40 - /** 15、结束异常状态-byte[1] */  
41 - private int jsyczt;  
42 - /** 16、车辆位置经度(纠偏后)-byte[4] */  
43 - private double lon;  
44 - /** 17、车辆位置维度(纠偏后)-byte[4] */  
45 - private double lat;  
46 - /** 18、方向-byte[2] */  
47 - private int fx;  
48 - /** 19、发送时间-byte[4] */  
49 - private Date fssj;  
50 - /** 20、离下站距离-byte[2] */  
51 - private int lxzjl;  
52 - /** 21、本站留车人数-byte[2] */  
53 - private int bzlcrs;  
54 - /** 22、车辆位置经度(未纠偏)-byte[4] */  
55 - private double lon_old;  
56 - /** 23、车辆位置经度(未纠偏)-byte[4] */  
57 - private double lat_old;  
58 - /** 24、城建X坐标 */  
59 - private double x;  
60 - /** 25、城建Y坐标 */  
61 - private double y;  
62 -  
63 - public String getMtd() {  
64 - return mtd;  
65 - }  
66 -  
67 - public void setMtd(String mtd) {  
68 - this.mtd = mtd;  
69 - }  
70 -  
71 - public String getDriver() {  
72 - return driver;  
73 - }  
74 -  
75 - public void setDriver(String driver) {  
76 - this.driver = driver;  
77 - }  
78 -  
79 - public int getBczt() {  
80 - return bczt;  
81 - }  
82 -  
83 - public void setBczt(int bczt) {  
84 - this.bczt = bczt;  
85 - }  
86 -  
87 - public int getXlzt() {  
88 - return xlzt;  
89 - }  
90 -  
91 - public void setXlzt(int xlzt) {  
92 - this.xlzt = xlzt;  
93 - }  
94 -  
95 - public int getXldm() {  
96 - return xldm;  
97 - }  
98 -  
99 - public void setXldm(int xldm) {  
100 - this.xldm = xldm;  
101 - }  
102 -  
103 - public int getYyzt() {  
104 - return yyzt;  
105 - }  
106 -  
107 - public void setYyzt(int yyzt) {  
108 - this.yyzt = yyzt;  
109 - }  
110 -  
111 - public int getJczzt() {  
112 - return jczzt;  
113 - }  
114 -  
115 - public void setJczzt(int jczzt) {  
116 - this.jczzt = jczzt;  
117 - }  
118 -  
119 - public String getZdbh() {  
120 - return zdbh;  
121 - }  
122 -  
123 - public void setZdbh(String zdbh) {  
124 - this.zdbh = zdbh;  
125 - }  
126 -  
127 - public int getJctcczt() {  
128 - return jctcczt;  
129 - }  
130 -  
131 - public void setJctcczt(int jctcczt) {  
132 - this.jctcczt = jctcczt;  
133 - }  
134 -  
135 - public String getTccbh() {  
136 - return tccbh;  
137 - }  
138 -  
139 - public void setTccbh(String tccbh) {  
140 - this.tccbh = tccbh;  
141 - }  
142 -  
143 - public String getLdbh() {  
144 - return ldbh;  
145 - }  
146 -  
147 - public void setLdbh(String ldbh) {  
148 - this.ldbh = ldbh;  
149 - }  
150 -  
151 - public int getSxxzt() {  
152 - return sxxzt;  
153 - }  
154 -  
155 - public void setSxxzt(int sxxzt) {  
156 - this.sxxzt = sxxzt;  
157 - }  
158 -  
159 - public int getSpeed() {  
160 - return speed;  
161 - }  
162 -  
163 - public void setSpeed(int speed) {  
164 - this.speed = speed;  
165 - }  
166 -  
167 - public int getCsyczt() {  
168 - return csyczt;  
169 - }  
170 -  
171 - public void setCsyczt(int csyczt) {  
172 - this.csyczt = csyczt;  
173 - }  
174 -  
175 - public int getJsyczt() {  
176 - return jsyczt;  
177 - }  
178 -  
179 - public void setJsyczt(int jsyczt) {  
180 - this.jsyczt = jsyczt;  
181 - }  
182 -  
183 - public double getLon() {  
184 - return lon;  
185 - }  
186 -  
187 - public void setLon(double lon) {  
188 - this.lon = lon;  
189 - }  
190 -  
191 - public double getLat() {  
192 - return lat;  
193 - }  
194 -  
195 - public void setLat(double lat) {  
196 - this.lat = lat;  
197 - }  
198 -  
199 - public int getFx() {  
200 - return fx;  
201 - }  
202 -  
203 - public void setFx(int fx) {  
204 - this.fx = fx;  
205 - }  
206 -  
207 - public Date getFssj() {  
208 - return fssj;  
209 - }  
210 -  
211 - public void setFssj(Date fssj) {  
212 - this.fssj = fssj;  
213 - }  
214 -  
215 - public int getLxzjl() {  
216 - return lxzjl;  
217 - }  
218 -  
219 - public void setLxzjl(int lxzjl) {  
220 - this.lxzjl = lxzjl;  
221 - }  
222 -  
223 - public int getBzlcrs() {  
224 - return bzlcrs;  
225 - }  
226 -  
227 - public void setBzlcrs(int bzlcrs) {  
228 - this.bzlcrs = bzlcrs;  
229 - }  
230 -  
231 - public double getLon_old() {  
232 - return lon_old;  
233 - }  
234 -  
235 - public void setLon_old(double lon_old) {  
236 - this.lon_old = lon_old;  
237 - }  
238 -  
239 - public double getLat_old() {  
240 - return lat_old;  
241 - }  
242 -  
243 - public void setLat_old(double lat_old) {  
244 - this.lat_old = lat_old;  
245 - }  
246 -  
247 - public double getX() {  
248 - return x;  
249 - }  
250 -  
251 - public void setX(double x) {  
252 - this.x = x;  
253 - }  
254 -  
255 - public double getY() {  
256 - return y;  
257 - }  
258 -  
259 - public void setY(double y) {  
260 - this.y = y;  
261 - }  
262 -  
263 - public byte[] write() {  
264 - return null;  
265 - }  
266 -  
267 - @Override  
268 - public void read(byte[] bytes) {  
269 - // TODO Auto-generated method stub  
270 - int idx = 0;  
271 - ByteBuffer buf = ByteBuffer.wrap(bytes);  
272 - mtd = ConvertUtil.ascii2string(bytes, idx, 8); idx += 8;  
273 - driver = ConvertUtil.ascii2string(bytes, idx, 8); idx += 8;  
274 - bczt = buf.get(idx); idx++;  
275 - xlzt = buf.get(idx); idx++;  
276 - xldm = Integer.parseInt(ConvertUtil.ascii2string(bytes, idx, 6).trim()); idx += 6;  
277 - yyzt = buf.get(idx); idx++;  
278 - jczzt = buf.get(idx); idx++;  
279 - zdbh = ConvertUtil.ascii2string(bytes, idx, 8).trim(); idx += 8;  
280 - jctcczt = buf.get(idx); idx++;  
281 - tccbh = ConvertUtil.ascii2string(bytes, idx, 8); idx += 8;  
282 - ldbh = ConvertUtil.ascii2string(bytes, idx, 12).trim(); idx += 12;  
283 - sxxzt = buf.get(idx); idx++;  
284 - speed = buf.get(idx)*10; idx++;  
285 - csyczt = buf.get(idx); idx++;  
286 - jsyczt = buf.get(idx); idx++;  
287 - byte flagx = buf.get(idx); idx++;  
288 - if (flagx == 0) x = ConvertUtil.bytes2int(bytes, idx, 3)/100.0;  
289 - else x = -ConvertUtil.bytes2int(bytes, idx, 3)/100.0;  
290 - idx += 3;  
291 - byte flagy = buf.get(idx); idx++;  
292 - if (flagy == 0) y = ConvertUtil.bytes2int(bytes, idx, 3)/100.0;  
293 - else y = -ConvertUtil.bytes2int(bytes, idx, 3)/100.0;  
294 - idx += 3;  
295 - fx = buf.getShort(idx)*(short)10; idx += 2;  
296 - fssj = new Date(ConvertUtil.bytes2int(bytes, idx, 4) * 1000L); idx += 4;  
297 - lxzjl = buf.getShort(idx); idx += 2;  
298 - bzlcrs = buf.getShort(idx); idx += 2;  
299 - lon = ConvertUtil.bytes2int(bytes, idx, 4); idx += 4;  
300 - lat = ConvertUtil.bytes2int(bytes, idx, 4); idx += 4;  
301 - }  
302 -  
303 - @Override  
304 - public String getDeviceId() {  
305 - // TODO Auto-generated method stub  
306 - return mtd;  
307 - }  
308 -  
309 - @Override  
310 - public long getTimestamp() {  
311 - // TODO Auto-generated method stub  
312 - return 0;  
313 - }  
314 -}  
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
@@ -45,11 +45,11 @@ public class GpsDataRecovery implements ApplicationContextAware { @@ -45,11 +45,11 @@ public class GpsDataRecovery implements ApplicationContextAware {
45 public void recovery() { 45 public void recovery() {
46 List<GpsEntity> list = loadData(); 46 List<GpsEntity> list = loadData();
47 47
48 - //按车辆分组数据 48 + //按线路分组数据
49 ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create(); 49 ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create();
50 for (GpsEntity gps : list) { 50 for (GpsEntity gps : list) {
51 - if (gps.getNbbm() != null)  
52 - listMap.put(gps.getNbbm(), gps); 51 + if (gps.getLineId() != null)
  52 + listMap.put(gps.getLineId(), gps);
53 } 53 }
54 54
55 55
@@ -57,9 +57,9 @@ public class GpsDataRecovery implements ApplicationContextAware { @@ -57,9 +57,9 @@ public class GpsDataRecovery implements ApplicationContextAware {
57 57
58 CountDownLatch count = new CountDownLatch(keys.size()); 58 CountDownLatch count = new CountDownLatch(keys.size());
59 GpsComp comp = new GpsComp(); 59 GpsComp comp = new GpsComp();
60 - for (String nbbm : keys) {  
61 - Collections.sort(listMap.get(nbbm), comp);  
62 - threadPool.execute(new RecoveryThread(listMap.get(nbbm), count)); 60 + for (String lineId : keys) {
  61 + Collections.sort(listMap.get(lineId), comp);
  62 + threadPool.execute(new RecoveryThread(listMap.get(lineId), count));
63 /*if(nbbm.equals("W7C-001")) 63 /*if(nbbm.equals("W7C-001"))
64 new RecoveryThread(listMap.get(nbbm), count).run();*/ 64 new RecoveryThread(listMap.get(nbbm), count).run();*/
65 } 65 }
src/main/java/com/bsth/data/schedule/SchModifyLog.java
1 -package com.bsth.data.schedule;  
2 -  
3 -import com.bsth.controller.realcontrol.dto.ChangePersonCar;  
4 -import com.bsth.entity.mcy_forms.Changetochange;  
5 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
6 -import com.bsth.entity.sys.SysUser;  
7 -import com.bsth.repository.form.ChangetochangeRepository;  
8 -import com.bsth.security.util.SecurityUtils;  
9 -import org.apache.commons.lang3.StringUtils;  
10 -import org.joda.time.format.DateTimeFormat;  
11 -import org.joda.time.format.DateTimeFormatter;  
12 -import org.slf4j.Logger;  
13 -import org.slf4j.LoggerFactory;  
14 -import org.springframework.beans.factory.annotation.Autowired;  
15 -import org.springframework.stereotype.Service;  
16 -  
17 -import java.util.Date;  
18 -  
19 -/**  
20 - * 线调实际排班修改日志记录  
21 - * Created by panzhao on 2017/5/7.  
22 - */  
23 -@Service  
24 -public class SchModifyLog {  
25 -  
26 - private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");  
27 -  
28 - Logger log = LoggerFactory.getLogger(this.getClass());  
29 -  
30 - @Autowired  
31 - ChangetochangeRepository changetochangeRepository;  
32 -  
33 - /**  
34 - * 换人换车情况表  
35 - */  
36 - public void saveChangetochange(ScheduleRealInfo sch, ChangePersonCar cpc){  
37 - try {  
38 - String newNbbm = cpc.getClZbh();  
39 - String newJsy = cpc.getJsy();  
40 - String oldJsy = sch.getjGh()+"/"+sch.getjName();  
41 -  
42 - if(newNbbm == null && newJsy == null)  
43 - return;  
44 -  
45 - if(newNbbm != null && newJsy != null  
46 - && newNbbm.equals(sch.getClZbh()) && newJsy.equals(oldJsy))  
47 - return;  
48 -  
49 - Date d = new Date();  
50 - SysUser user = SecurityUtils.getCurrentUser();  
51 - Changetochange cc = new Changetochange();  
52 - cc.setRq(sch.getScheduleDateStr());  
53 - cc.setGs(sch.getGsBm());  
54 - cc.setFgs(sch.getFgsBm());  
55 - cc.setXl(sch.getXlBm());  
56 - cc.setLp(sch.getLpName());  
57 - cc.setFssj(fmtHHmm.print(d.getTime()));  
58 - cc.setXgsj(fmtHHmm.print(d.getTime()));  
59 - if(user != null)  
60 - cc.setXgr(user.getUserName());  
61 -  
62 - cc.setPcch(sch.getClZbh());  
63 - cc.setPcry(oldJsy);  
64 - cc.setJhch(sch.getClZbh());  
65 - cc.setJhgh(sch.getjGh());  
66 -  
67 - if(StringUtils.isNotEmpty(newNbbm))  
68 - cc.setSjch(newNbbm);  
69 - if(StringUtils.isNotEmpty(newJsy))  
70 - cc.setSjgh(newJsy);  
71 -  
72 - changetochangeRepository.save(cc);  
73 - }catch (Exception e){  
74 - log.error("纪录换人换车情况表", e);  
75 - }  
76 - }  
77 -  
78 - public void saveChangetochange(ScheduleRealInfo sch, String nbbm, String jsy){  
79 - ChangePersonCar cpc = new ChangePersonCar();  
80 - cpc.setClZbh(nbbm);  
81 - cpc.setJsy(jsy);  
82 - saveChangetochange(sch, cpc);  
83 - }  
84 -} 1 +package com.bsth.data.schedule;
  2 +
  3 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
  4 +import com.bsth.entity.mcy_forms.Changetochange;
  5 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  6 +import com.bsth.entity.sys.SysUser;
  7 +import com.bsth.repository.form.ChangetochangeRepository;
  8 +import com.bsth.security.util.SecurityUtils;
  9 +import org.apache.commons.lang3.StringUtils;
  10 +import org.joda.time.format.DateTimeFormat;
  11 +import org.joda.time.format.DateTimeFormatter;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.stereotype.Service;
  16 +
  17 +import java.util.Date;
  18 +
  19 +/**
  20 + * 线调实际排班修改日志记录
  21 + * Created by panzhao on 2017/5/7.
  22 + */
  23 +@Service
  24 +public class SchModifyLog {
  25 +
  26 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  27 +
  28 + Logger log = LoggerFactory.getLogger(this.getClass());
  29 +
  30 + @Autowired
  31 + ChangetochangeRepository changetochangeRepository;
  32 +
  33 + /**
  34 + * 换人换车情况表
  35 + */
  36 + public void saveChangetochange(ScheduleRealInfo sch, ChangePersonCar cpc){
  37 + try {
  38 + String newNbbm = cpc.getClZbh();
  39 + String newJsy = cpc.getJsy();
  40 + String oldJsy = sch.getjGh()+"/"+sch.getjName();
  41 +
  42 + if(newNbbm == null && newJsy == null)
  43 + return;
  44 +
  45 + if(newNbbm != null && newJsy != null
  46 + && newNbbm.equals(sch.getClZbh()) && newJsy.equals(oldJsy))
  47 + return;
  48 +
  49 + Date d = new Date();
  50 + SysUser user = SecurityUtils.getCurrentUser();
  51 + Changetochange cc = new Changetochange();
  52 + cc.setRq(sch.getScheduleDateStr());
  53 + cc.setGs(sch.getGsBm());
  54 + cc.setFgs(sch.getFgsBm());
  55 + cc.setXl(sch.getXlBm());
  56 + cc.setLp(sch.getLpName());
  57 + cc.setFssj(fmtHHmm.print(d.getTime()));
  58 + cc.setXgsj(fmtHHmm.print(d.getTime()));
  59 + if(user != null)
  60 + cc.setXgr(user.getUserName());
  61 +
  62 + cc.setPcch(sch.getClZbh());
  63 + cc.setPcry(oldJsy);
  64 + cc.setJhch(sch.getClZbh());
  65 + cc.setJhgh(sch.getjGh());
  66 +
  67 + if(StringUtils.isNotEmpty(newNbbm))
  68 + cc.setSjch(newNbbm);
  69 + if(StringUtils.isNotEmpty(newJsy))
  70 + cc.setSjgh(newJsy);
  71 +
  72 + changetochangeRepository.save(cc);
  73 + }catch (Exception e){
  74 + log.error("纪录换人换车情况表", e);
  75 + }
  76 + }
  77 +
  78 + public void saveChangetochange(ScheduleRealInfo sch, String nbbm, String jsy){
  79 + ChangePersonCar cpc = new ChangePersonCar();
  80 + cpc.setClZbh(nbbm);
  81 + cpc.setJsy(jsy);
  82 + saveChangetochange(sch, cpc);
  83 + }
  84 +}
src/main/java/com/bsth/repository/StationRouteRepository.java
@@ -247,6 +247,9 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int @@ -247,6 +247,9 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int
247 @Override 247 @Override
248 List<StationRoute> findAll(Specification<StationRoute> spec, Sort sort); 248 List<StationRoute> findAll(Specification<StationRoute> spec, Sort sort);
249 249
  250 + @EntityGraph(value = "stationRoute_station", type = EntityGraph.EntityGraphType.FETCH)
  251 + @Override
  252 + List<StationRoute> findAll();
250 253
251 @Query("select new map(sr.station.id as stationid, sr.stationName as stationname) from StationRoute sr where sr.line.id=?1 and sr.directions=?2") 254 @Query("select new map(sr.station.id as stationid, sr.stationName as stationname) from StationRoute sr where sr.line.id=?1 and sr.directions=?2")
252 List<Map<String, Object>> findStations(Integer xlid, Integer xldir); 255 List<Map<String, Object>> findStations(Integer xlid, Integer xldir);
src/main/java/com/bsth/repository/form/ChangetochangeRepository.java
1 -package com.bsth.repository.form;  
2 -  
3 -import com.bsth.entity.mcy_forms.Changetochange;  
4 -import com.bsth.repository.BaseRepository;  
5 -import org.springframework.stereotype.Repository;  
6 -  
7 -/**  
8 - * Created by panzhao on 2017/5/7.  
9 - */  
10 -@Repository  
11 -public interface ChangetochangeRepository extends BaseRepository<Changetochange, Integer>{  
12 -} 1 +package com.bsth.repository.form;
  2 +
  3 +import com.bsth.entity.mcy_forms.Changetochange;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +/**
  8 + * Created by panzhao on 2017/5/7.
  9 + */
  10 +@Repository
  11 +public interface ChangetochangeRepository extends BaseRepository<Changetochange, Integer>{
  12 +}
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -1790,6 +1790,41 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1790,6 +1790,41 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1790 List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>(); 1790 List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
1791 List<ScheduleRealInfo> list = null; 1791 List<ScheduleRealInfo> list = null;
1792 list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line); 1792 list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line);
  1793 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
  1794 + String sqlMinYysj="select start_opt from bsth_c_line_config where line = '"+BasicData.lineId2CodeMap.inverse().get(line) +"'";
  1795 + String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  1796 + String[] minSjs = minfcsj.split(":");
  1797 + Long minSj=Long.parseLong(minSjs[0])*60+Long.parseLong(minSjs[1]);
  1798 +
  1799 + for (int i = 0; i < list.size(); i++) {
  1800 + ScheduleRealInfo s=list.get(i);
  1801 + String[] fcsj= s.getFcsj().split(":");
  1802 + Long fcsjL=Long.parseLong(fcsj[0])*60+Long.parseLong(fcsj[1]);
  1803 +
  1804 + Long fscjT=0L;
  1805 + if(fcsjL<minSj){
  1806 + Calendar calendar = new GregorianCalendar();
  1807 + calendar.setTime(s.getScheduleDate());
  1808 + calendar.add(calendar.DATE,1);
  1809 + s.setScheduleDate(calendar.getTime());
  1810 + try {
  1811 + fscjT = sdf.parse(sdf.format(s.getScheduleDate())+" "+s.getFcsj()).getTime();
  1812 + } catch (ParseException e) {
  1813 + // TODO Auto-generated catch block
  1814 + e.printStackTrace();
  1815 + }
  1816 +
  1817 + }else{
  1818 + try {
  1819 + fscjT =sdf.parse(s.getScheduleDateStr()+" "+s.getFcsj()).getTime();
  1820 + } catch (ParseException e) {
  1821 + // TODO Auto-generated catch block
  1822 + e.printStackTrace();
  1823 + };
  1824 + }
  1825 + s.setFcsjT(fscjT);
  1826 + }
  1827 + Collections.sort(list, new ComparableReal());
1793 for (int i = 0; i < list.size(); i++) { 1828 for (int i = 0; i < list.size(); i++) {
1794 ScheduleRealInfo s = list.get(i); 1829 ScheduleRealInfo s = list.get(i);
1795 s.setAdjustExps(i + 1 + ""); 1830 s.setAdjustExps(i + 1 + "");
src/main/java/com/bsth/service/schedule/utils/Md5Util.java
1 -package com.bsth.service.schedule.utils;  
2 -  
3 -import java.security.MessageDigest;  
4 -  
5 -/**  
6 - * Md5工具。  
7 - */  
8 -public class Md5Util {  
9 - private static MessageDigest md5 = null;  
10 - static {  
11 - try {  
12 - md5 = MessageDigest.getInstance("MD5");  
13 - } catch (Exception exp) {  
14 - exp.printStackTrace();  
15 - }  
16 - }  
17 -  
18 - /**  
19 - * 用于获取一个String的md5值。  
20 - * @param str  
21 - * @return  
22 - */  
23 - public static String getMd5(String str) {  
24 - byte[] bs = md5.digest(str.getBytes());  
25 - StringBuilder s = new StringBuilder();  
26 - for (byte x : bs) {  
27 - if ((x & 0xff) >>4 == 0) {  
28 - s.append("0").append(Integer.toHexString(x & 0xff));  
29 - } else {  
30 - s.append(Integer.toHexString(x & 0xff));  
31 - }  
32 - }  
33 - return s.toString();  
34 - }  
35 -  
36 -} 1 +package com.bsth.service.schedule.utils;
  2 +
  3 +import java.security.MessageDigest;
  4 +
  5 +/**
  6 + * Md5工具。
  7 + */
  8 +public class Md5Util {
  9 + private static MessageDigest md5 = null;
  10 + static {
  11 + try {
  12 + md5 = MessageDigest.getInstance("MD5");
  13 + } catch (Exception exp) {
  14 + exp.printStackTrace();
  15 + }
  16 + }
  17 +
  18 + /**
  19 + * 用于获取一个String的md5值。
  20 + * @param str
  21 + * @return
  22 + */
  23 + public static String getMd5(String str) {
  24 + byte[] bs = md5.digest(str.getBytes());
  25 + StringBuilder s = new StringBuilder();
  26 + for (byte x : bs) {
  27 + if ((x & 0xff) >>4 == 0) {
  28 + s.append("0").append(Integer.toHexString(x & 0xff));
  29 + } else {
  30 + s.append(Integer.toHexString(x & 0xff));
  31 + }
  32 + }
  33 + return s.toString();
  34 + }
  35 +
  36 +}
src/main/java/com/bsth/util/ComparableReal.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import java.util.Comparator;
  4 +import java.util.List;
  5 +
  6 +import com.bsth.entity.realcontrol.ChildTaskPlan;
  7 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  8 +
  9 +public class ComparableReal implements Comparator<ScheduleRealInfo>{
  10 +
  11 + @Override
  12 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  13 + // TODO Auto-generated method stub
  14 + return o1.getFcsjT().compareTo(o2.getFcsjT());
  15 + }
  16 +
  17 +}