Commit d702d5d6e35ecd6da308b9f6e41d945935f49c93

Authored by 潘钊
2 parents fac71692 22f66c51

Merge branch 'minhang' into pudong

Showing 42 changed files with 257 additions and 2678 deletions

Too many changes to show.

To preserve performance only 42 of 52 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,27 +49,4 @@ public class anomalyCheckController { @@ -50,27 +49,4 @@ public class anomalyCheckController {
50 dayOfSchedule.replaceByNbbm(nbbm, map.values()); 49 dayOfSchedule.replaceByNbbm(nbbm, map.values());
51 } 50 }
52 } 51 }
53 -  
54 - @Autowired  
55 - ClientApp clientApp;  
56 -  
57 - @RequestMapping(value = "/gpsClientDestroy", method = RequestMethod.POST)  
58 - public void gpsClientReconn(){  
59 - clientApp.destroy();  
60 - }  
61 -  
62 - @RequestMapping(value = "/gpsClientInit", method = RequestMethod.POST)  
63 - public void gpsClientInit(){  
64 - clientApp.init();  
65 - }  
66 -  
67 - @RequestMapping(value = "/pdClose", method = RequestMethod.POST)  
68 - public void pdClose(){  
69 - ClientApp.pdClose();  
70 - }  
71 -  
72 - @RequestMapping(value = "/pfClose", method = RequestMethod.POST)  
73 - public void pfClose(){  
74 - ClientApp.pfClose();  
75 - }  
76 } 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()*/"0");  
105 - ps.setInt(5, sch.getFcno()==null?-1:sch.getFcno());  
106 - ps.setString(6, sch.getDfsj().replace(":", ""));  
107 - ps.setString(7, sch.getClZbh().replace("-", ""));  
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.client.GpsBeforeBuffer;  
8 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread; 5 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread;
9 import com.bsth.data.gpsdata.thread.OfflineMonitorThread; 6 import com.bsth.data.gpsdata.thread.OfflineMonitorThread;
10 import com.bsth.data.schedule.DayOfSchedule; 7 import com.bsth.data.schedule.DayOfSchedule;
@@ -19,7 +16,7 @@ import org.springframework.stereotype.Component; @@ -19,7 +16,7 @@ import org.springframework.stereotype.Component;
19 16
20 import java.util.*; 17 import java.util.*;
21 import java.util.concurrent.ConcurrentHashMap; 18 import java.util.concurrent.ConcurrentHashMap;
22 -import java.util.concurrent.TimeUnit; 19 +import java.util.concurrent.ConcurrentMap;
23 20
24 /** 21 /**
25 * @author PanZhao 22 * @author PanZhao
@@ -32,7 +29,7 @@ public class GpsRealData implements CommandLineRunner { @@ -32,7 +29,7 @@ public class GpsRealData implements CommandLineRunner {
32 29
33 static Logger logger = LoggerFactory.getLogger(GpsRealData.class); 30 static Logger logger = LoggerFactory.getLogger(GpsRealData.class);
34 31
35 - private static ConcurrentHashMap<String, GpsEntity> gpsMap; 32 + private static ConcurrentMap<String, GpsEntity> gpsMap;
36 33
37 //按线路分组设备号 34 //按线路分组设备号
38 private static TreeMultimap<String, String> lineCode2Devices; 35 private static TreeMultimap<String, String> lineCode2Devices;
@@ -57,21 +54,13 @@ public class GpsRealData implements CommandLineRunner { @@ -57,21 +54,13 @@ public class GpsRealData implements CommandLineRunner {
57 lineCode2Devices = TreeMultimap.create(); 54 lineCode2Devices = TreeMultimap.create();
58 } 55 }
59 56
60 - @Autowired  
61 - ClientApp clientApp;  
62 - @Autowired  
63 - GpsBeforeBuffer gpsBeforeBuffer;  
64 @Override 57 @Override
65 public void run(String... arg0) throws Exception { 58 public void run(String... arg0) throws Exception {
66 logger.info("gpsDataLoader,20,3"); 59 logger.info("gpsDataLoader,20,3");
67 - //定时从网关http形式获取GPS数据 --- 已弃用,现socket客户端接入数据  
68 - //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 3, TimeUnit.SECONDS); 60 + //http形式获取GPS数据
  61 + //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 2, TimeUnit.SECONDS);
69 //定时扫描掉离线 62 //定时扫描掉离线
70 - Application.mainServices.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);  
71 -  
72 - //gps 客户端  
73 - //clientApp.init();  
74 - //gpsBeforeBuffer.init(); 63 + //Application.mainServices.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);
75 } 64 }
76 65
77 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/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.*;  
25 -  
26 -/**  
27 - * Created by panzhao on 2017/5/4.  
28 - */  
29 -@Component  
30 -public class ClientApp {  
31 -  
32 - private static NioSocketConnector pdDataConnector;  
33 - private static NioSocketConnector pfDataConnector;  
34 -  
35 - @Autowired  
36 - private PdClientHandler pdClient;  
37 - @Autowired  
38 - private PfClientHandler pfClient;  
39 - @Autowired  
40 - GpsBeforeBuffer gpsBeforeBuffer;  
41 -  
42 - static Logger logger = LoggerFactory.getLogger(ClientApp.class);  
43 - private static ExecutorService exec;  
44 -  
45 - private ScheduledExecutorService sexec;  
46 -  
47 - public static boolean dconnect(String device) {  
48 - boolean flag = false;  
49 - try {  
50 - ConnectFuture con = pdDataConnector.connect(new InetSocketAddress(ConfigUtil.get("gps.server.pd"), Integer.parseInt(ConfigUtil.get("gps.port.pd"))));  
51 - con.awaitUninterruptibly();  
52 - IoSession session = con.getSession();  
53 - session.setAttribute("deviceId", device);  
54 - com.bsth.data.gpsdata.client.pd.protocol.PdMessage msg = new com.bsth.data.gpsdata.client.pd.protocol.PdMessage();  
55 - Pd_31_0 body = new Pd_31_0();  
56 - body.setFunCode((short)0x15);  
57 - body.setLineId(0);  
58 - body.setDeviceId(device);  
59 - msg.setMessageBody(body);  
60 - msg.setVersion((short)1);  
61 - msg.setSerialNo((short)1);  
62 - msg.setCommandType((short)0x31);  
63 - byte[] bytes = msg.write();  
64 - WriteFuture write = session.write(bytes);  
65 - write.awaitUninterruptibly();  
66 - flag = true;  
67 -  
68 - logger.info("dconnect...");  
69 - pdSession = session;  
70 - //SessionManager.getInstance().register(device, session);  
71 - } catch (Exception e) {  
72 - e.printStackTrace();  
73 - }  
74 - return flag;  
75 - }  
76 -  
77 - public static void pdconnect(final String device) {  
78 - exec.submit(new Runnable() {  
79 -  
80 - @Override  
81 - public void run() {  
82 - // TODO Auto-generated method stub  
83 - long now = System.currentTimeMillis();  
84 - boolean flag = false;  
85 - while (!flag) {  
86 - flag = dconnect(device);  
87 - }  
88 - System.out.println("设备编号:" + device + "重连, cost time: " + (System.currentTimeMillis() - now));  
89 - }  
90 - });  
91 - }  
92 -  
93 - public static void pfconnect(final String device) {  
94 - exec.submit(new Runnable() {  
95 -  
96 - @Override  
97 - public void run() {  
98 - // TODO Auto-generated method stub  
99 - long now = System.currentTimeMillis();  
100 - boolean flag = false;  
101 - while (!flag) {  
102 - flag = fconnect(device);  
103 - }  
104 - System.out.println("重连, cost time: " + (System.currentTimeMillis() - now));  
105 - }  
106 - });  
107 - }  
108 -  
109 - public static void pdreconn(){  
110 - pdconnect(ConfigUtil.get("forward.device.name"));  
111 - }  
112 -  
113 - public static void pfreconn(){  
114 - pfconnect(ConfigUtil.get("forward.device.name"));  
115 - }  
116 -  
117 - public void destroy(){  
118 - try {  
119 - logger.warn("socket client destroy!!!");  
120 - exec.shutdownNow();  
121 - sexec.shutdownNow();  
122 -  
123 - pdDataConnector.dispose(true);  
124 - pfDataConnector.dispose(true);  
125 - } catch (Exception e) {  
126 - logger.error("", e);  
127 - }  
128 - }  
129 -  
130 -  
131 - public static void pdClose(){  
132 - pdSession.closeNow();  
133 - }  
134 -  
135 - public static void pfClose(){  
136 - pfSession.closeNow();  
137 - }  
138 -  
139 - public static boolean fconnect(String device) {  
140 - boolean flag = false;  
141 - try {  
142 - ConnectFuture con = pfDataConnector.connect(new InetSocketAddress(ConfigUtil.get("gps.server.pf"), Integer.parseInt(ConfigUtil.get("gps.port.pf"))));  
143 - con.awaitUninterruptibly();  
144 - IoSession session = con.getSession();  
145 - session.setAttribute("deviceId", device);  
146 - flag = true;  
147 -  
148 - logger.info("fconnect...");  
149 - pfSession = session;  
150 - } catch (Exception e) {  
151 - e.printStackTrace();  
152 - }  
153 - return flag;  
154 - }  
155 -  
156 - public void init() {  
157 - logger.warn("socket client init...");  
158 - exec = Executors.newFixedThreadPool(50);  
159 - sexec = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {  
160 - @Override  
161 - public Thread newThread(Runnable r) {  
162 - // TODO Auto-generated method stub  
163 - Thread t = new Thread(r);  
164 - t.setName("SessionCheckExecutor");  
165 - return t;  
166 - }  
167 - });  
168 - sexec.scheduleAtFixedRate(new SessionChecker(), 1, 1, TimeUnit.MINUTES);  
169 - /*******************************浦东********************************/  
170 - pdDataConnector = new NioSocketConnector();  
171 -  
172 - LoggingFilter log = new LoggingFilter();  
173 - log.setMessageReceivedLogLevel(LogLevel.DEBUG);  
174 - pdDataConnector.getFilterChain().addLast("logger", log);  
175 -  
176 - pdDataConnector.getFilterChain().addLast("codec",  
177 - new ProtocolCodecFilter(new PdMessageCodecFactory()));  
178 -  
179 - IoSessionConfig config = pdDataConnector.getSessionConfig();  
180 -  
181 - config.setReadBufferSize(4096);  
182 - config.setWriteTimeout(10000);  
183 - config.setWriterIdleTime(60000);  
184 -  
185 - config.setIdleTime(IdleStatus.BOTH_IDLE, 60);  
186 -  
187 - pdDataConnector.setHandler(pdClient);  
188 -  
189 - pdconnect(ConfigUtil.get("forward.device.name"));  
190 - /*******************************浦东转发********************************/  
191 - pfDataConnector = new NioSocketConnector();  
192 -  
193 - LoggingFilter log1 = new LoggingFilter();  
194 - log1.setMessageReceivedLogLevel(LogLevel.DEBUG);  
195 - pfDataConnector.getFilterChain().addLast("logger", log1);  
196 -  
197 - pfDataConnector.getFilterChain().addLast("codec",  
198 - new ProtocolCodecFilter(new PfMessageCodecFactory()));  
199 -  
200 - IoSessionConfig config1 = pfDataConnector.getSessionConfig();  
201 -  
202 - config1.setReadBufferSize(4096);  
203 - config1.setWriteTimeout(10000);  
204 - config1.setWriterIdleTime(60000);  
205 -  
206 - config1.setIdleTime(IdleStatus.BOTH_IDLE, 60);  
207 -  
208 - pfDataConnector.setHandler(pfClient);  
209 - pfconnect(ConfigUtil.get("forward.device.name"));  
210 - }  
211 -  
212 -  
213 - static IoSession pdSession;  
214 - static IoSession pfSession;  
215 - final class SessionChecker implements Runnable {  
216 -  
217 - @Override  
218 - public void run() {  
219 - // TODO Auto-generated method stub  
220 - try {  
221 -  
222 - if(!pdSession.isActive()){  
223 - logger.warn("浦东设备注销");  
224 - ClientApp.pdreconn();  
225 - }  
226 -  
227 - if(!pfSession.isActive()){  
228 - logger.warn("浦东转发设备注销");  
229 - ClientApp.pfreconn();  
230 - }  
231 - } catch (Exception e) {  
232 - logger.error("SessionChecker异常", e);  
233 - }  
234 - }  
235 - }  
236 -}  
237 \ No newline at end of file 0 \ No newline at end of file
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.slf4j.Logger;  
10 -import org.slf4j.LoggerFactory;  
11 -import org.springframework.beans.factory.annotation.Autowired;  
12 -import org.springframework.stereotype.Component;  
13 -  
14 -import java.util.ArrayList;  
15 -import java.util.LinkedList;  
16 -import java.util.List;  
17 -import java.util.concurrent.TimeUnit;  
18 -  
19 -/**  
20 - * 从 socket client 到 .. 的缓冲  
21 - * Created by panzhao on 2017/5/4.  
22 - */  
23 -@Component  
24 -public class GpsBeforeBuffer {  
25 -  
26 - static LinkedList<GpsEntity> linkedList = new LinkedList<>();  
27 -  
28 - @Autowired  
29 - GpsHandleThread gpsHandleThread;  
30 -  
31 - public void put(BasicInfo basicInfo){  
32 - //放弃补发数据  
33 - byte cacheData = getCacheState(basicInfo.getServiceState());  
34 - if(cacheData == 1)  
35 - return;  
36 - GpsEntity gps = new GpsEntity();  
37 -  
38 - gps.setDeviceId(basicInfo.getDeviceId());  
39 - gps.setTimestamp(basicInfo.getTimestamp());  
40 - gps.setLat(basicInfo.getLat());  
41 - gps.setLon(basicInfo.getLon());  
42 - gps.setDirection((float)basicInfo.getDirection() / 10);  
43 - gps.setValid(basicInfo.getGpsValid());  
44 - gps.setCompanyCode(basicInfo.getCompanyCode());  
45 - gps.setStopNo(basicInfo.getStopNo());  
46 - gps.setUpDown(basicInfo.getUpOrDown());  
47 - gps.setSpeed((float)basicInfo.getSpeedGps() / 10);  
48 - gps.setLineId(String.valueOf(basicInfo.getLineId()));  
49 - gps.setState((int) getService(basicInfo.getServiceState()));  
50 - //没有设备号  
51 - if (StringUtils.isBlank(gps.getDeviceId()))  
52 - return;  
53 -  
54 - String nbbm = BasicData.deviceId2NbbmMap.get(gps.getDeviceId());  
55 - if (StringUtils.isBlank(nbbm))  
56 - gps.setIncomplete(true);  
57 - else  
58 - gps.setNbbm(nbbm);  
59 -  
60 - linkedList.addLast(gps);  
61 - }  
62 -  
63 - public byte getCacheState(long serviceState) {  
64 - return (byte)(((serviceState & 0x00100000) == 0x00100000) ? 1 : 0);  
65 - }  
66 -  
67 - public void init(){  
68 - Application.mainServices.scheduleWithFixedDelay(gpsHandleThread, 20 * 1000, 1200, TimeUnit.MILLISECONDS);  
69 - }  
70 -  
71 - static int idleCount = 0;  
72 - @Component  
73 - public static class GpsHandleThread extends Thread{  
74 -  
75 - List<GpsEntity> list;  
76 -  
77 - @Autowired  
78 - GpsRealAnalyse gpsRealAnalyse;  
79 -  
80 - @Autowired  
81 - ClientApp clientApp;  
82 -  
83 - Logger log = LoggerFactory.getLogger(this.getClass());  
84 -  
85 - @Override  
86 - public void run() {  
87 - list = new ArrayList<>(200);  
88 -  
89 - GpsEntity gps;  
90 - for(int i = 0; i < 4000; i ++){  
91 - gps = linkedList.poll();  
92 - if(gps == null)  
93 - break;  
94 - list.add(gps);  
95 - }  
96 -  
97 - if(list.size() == 0){  
98 - idleCount ++;  
99 - //连续40次没有数据,重建socket连接  
100 - if(idleCount == 40){  
101 - log.info("idleCount == 40");  
102 - idleCount = 0;  
103 - clientApp.destroy();  
104 - clientApp.init();  
105 - }  
106 - }  
107 - gpsRealAnalyse.analyse(list);  
108 - }  
109 - }  
110 -  
111 - /**  
112 - * 获取运营状态  
113 - *  
114 - * @return -1无效 0运营 1未运营  
115 - */  
116 - public static byte getService(long serviceState) {  
117 - if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000)  
118 - return -1;  
119 - return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0);  
120 - }  
121 -}  
122 \ 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.common.ConvertUtil;  
4 -import com.bsth.data.gpsdata.client.pd.protocol.PdMessage;  
5 -import org.apache.mina.core.buffer.IoBuffer;  
6 -import org.apache.mina.core.session.IoSession;  
7 -import org.apache.mina.filter.codec.CumulativeProtocolDecoder;  
8 -import org.apache.mina.filter.codec.ProtocolDecoderOutput;  
9 -import org.slf4j.Logger;  
10 -import org.slf4j.LoggerFactory;  
11 -  
12 -  
13 -public class MessageDecoder extends CumulativeProtocolDecoder {  
14 -  
15 - Logger log = LoggerFactory.getLogger(MessageDecoder.class);  
16 -  
17 - @Override  
18 - protected boolean doDecode(IoSession session, IoBuffer in,  
19 - ProtocolDecoderOutput out) throws Exception {  
20 - // TODO Auto-generated method stub  
21 - while (in.remaining() > 3) {  
22 - in.mark();  
23 - byte head1 = in.get(), head2 = in.get(), lenh = in.get(), lenl = in.get();  
24 - int len = ((lenh & 0xff) << 8) + (lenl & 0xff);  
25 - if ((head1 & 0xff) == 0xfa && (head2 & 0xff) == 0xf5) {  
26 - if (in.remaining() > len) {  
27 - try {  
28 - byte[] bytes = new byte[len + 1];  
29 - in.get(bytes);  
30 - PdMessage msg = new PdMessage();  
31 - msg.read(bytes);  
32 - out.write(msg);  
33 -  
34 - //日志纪录  
35 - log.info("pd client receive: " + ConvertUtil.bytesToHexString(bytes));  
36 - }catch (Exception e){  
37 - log.error("pd message decoder:", e);  
38 - }  
39 - } else {  
40 - in.reset();  
41 - return false;  
42 - }  
43 - }  
44 - }  
45 - return false;  
46 - }  
47 -  
48 - /*private static String toHexString(byte[] bytes) {  
49 - StringBuilder sb = new StringBuilder();  
50 - for (byte b : bytes) {  
51 - sb.append(Integer.toHexString(b & 0xff) + "|");  
52 - }  
53 - return sb.toString();  
54 - }*/  
55 -}  
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 -  
130 - /* Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。  
131 - * @param src byte[] data  
132 -* @return hex string  
133 -*/  
134 - public static String bytesToHexString(byte[] src){  
135 - StringBuilder stringBuilder = new StringBuilder("");  
136 - if (src == null || src.length <= 0) {  
137 - return null;  
138 - }  
139 - for (int i = 0; i < src.length; i++) {  
140 - int v = src[i] & 0xFF;  
141 - String hv = Integer.toHexString(v);  
142 - if (hv.length() < 2) {  
143 - stringBuilder.append(0);  
144 - }  
145 - stringBuilder.append(hv);  
146 - }  
147 - return stringBuilder.toString();  
148 - }  
149 -}  
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 - log.warn("pd sessionIdle");  
56 - session.closeNow();  
57 - }  
58 -  
59 - @Override  
60 - public void exceptionCaught(IoSession session, Throwable cause) throws Exception {  
61 - if (cause instanceof IOException) session.closeNow();  
62 - log.error("PdClientHandler异常:", cause);  
63 - }  
64 -  
65 - @Override  
66 - public void messageReceived(IoSession session, Object message) throws Exception {  
67 - PdMessage msg = (PdMessage)message;  
68 - IMessageBody body = msg.getMessageBody();  
69 - if (body != null) {  
70 - //String deviceId = body.getDeviceId();  
71 - if (0x31 == msg.getCommandType()) {  
72 - //IoSession regSession = SessionManager.getInstance().getSession(deviceId);  
73 - //if (regSession != null) regSession.closeNow();  
74 - //SessionManager.getInstance().register(deviceId, session);  
75 - log.debug("设备编号:" + body.getDeviceId() + "建立连接");  
76 - }  
77 - else if(0x41 == msg.getCommandType()){  
78 - Pd_41_0 pd41 = (Pd_41_0)msg.getMessageBody();  
79 - gpsBeforeBuffer.put(pd41.getInfo());  
80 - }  
81 - else if(0x42 == msg.getCommandType()){  
82 - Pd_42_0 pd42 = (Pd_42_0)msg.getMessageBody();  
83 - gpsBeforeBuffer.put(pd42.getInfo());  
84 - }  
85 - }  
86 - }  
87 -  
88 - @Override  
89 - public void messageSent(IoSession session, Object message) throws Exception {  
90 -  
91 - }  
92 -}  
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.pd.common.ConvertUtil;  
4 -import com.bsth.data.gpsdata.client.pf.protocol.PfMessage;  
5 -import org.apache.mina.core.buffer.IoBuffer;  
6 -import org.apache.mina.core.session.IoSession;  
7 -import org.apache.mina.filter.codec.CumulativeProtocolDecoder;  
8 -import org.apache.mina.filter.codec.ProtocolDecoderOutput;  
9 -import org.slf4j.Logger;  
10 -import org.slf4j.LoggerFactory;  
11 -  
12 -  
13 -public class MessageDecoder extends CumulativeProtocolDecoder {  
14 -  
15 - Logger log = LoggerFactory.getLogger(MessageDecoder.class);  
16 -  
17 - @Override  
18 - protected boolean doDecode(IoSession session, IoBuffer in,  
19 - ProtocolDecoderOutput out) throws Exception {  
20 - // TODO Auto-generated method stub  
21 - while (in.remaining() > 3) {  
22 - in.mark();  
23 - byte head1 = in.get(), head2 = in.get(), lenh = in.get(), lenl = in.get();  
24 - int len = ((lenh & 0xff) << 8) + (lenl & 0xff);  
25 - if ((head1 & 0xff) == 0xfa && (head2 & 0xff) == 0xf5) {  
26 - if (in.remaining() > len) {  
27 - try {  
28 - byte[] bytes = new byte[len + 1];  
29 - in.get(bytes);  
30 - PfMessage msg = new PfMessage();  
31 - msg.read(bytes);  
32 -  
33 - //日志纪录  
34 - log.info("pf client receive: " + ConvertUtil.bytesToHexString(bytes));  
35 - out.write(msg);  
36 - }catch (Exception e){  
37 - log.error("pf message decoder:", e);  
38 - }  
39 - } else {  
40 - in.reset();  
41 - return false;  
42 - }  
43 - }  
44 - }  
45 - return false;  
46 - }  
47 -  
48 - /*private static String toHexString(byte[] bytes) {  
49 - StringBuilder sb = new StringBuilder();  
50 - for (byte b : bytes) {  
51 - sb.append(Integer.toHexString(b & 0xff) + "|");  
52 - }  
53 - return sb.toString();  
54 - }*/  
55 -}  
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 - log.warn("pf sessionIdle");  
53 - session.closeNow();  
54 - }  
55 -  
56 - @Override  
57 - public void exceptionCaught(IoSession session, Throwable cause) throws Exception {  
58 - if (cause instanceof IOException) session.closeNow();  
59 - log.error("PfClientHandler exceptionCaught", cause);  
60 - }  
61 -  
62 - @Override  
63 - public void messageReceived(IoSession session, Object message) throws Exception {  
64 - PfMessage msg = (PfMessage)message;  
65 - IMessageBody body = msg.getMessageBody();  
66 - if (body != null) {  
67 - String deviceId = body.getDeviceId();  
68 - if (0x1 == msg.getCommandType()) {  
69 - log.debug("设备编号:" + body.getDeviceId() + "建立连接");  
70 - }  
71 -  
72 - BasicInfo info = Protocol2BizUtil.getBasicInfoFromMsg(msg);  
73 - gpsBeforeBuffer.put(info);  
74 - }  
75 -  
76 - }  
77 -  
78 - @Override  
79 - public void messageSent(IoSession session, Object message) throws Exception {  
80 -  
81 - }  
82 -}  
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/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/entity/schedule/temp/SchedulePlanRuleResult.java
@@ -27,6 +27,8 @@ public class SchedulePlanRuleResult { @@ -27,6 +27,8 @@ public class SchedulePlanRuleResult {
27 27
28 /** 排班规则id */ 28 /** 排班规则id */
29 private String ruleId; 29 private String ruleId;
  30 + /** 启用日期 */
  31 + private Date qyrq;
30 /** 车辆配置id */ 32 /** 车辆配置id */
31 private String ccId; 33 private String ccId;
32 /** 车辆自编号 */ 34 /** 车辆自编号 */
@@ -249,4 +251,12 @@ public class SchedulePlanRuleResult { @@ -249,4 +251,12 @@ public class SchedulePlanRuleResult {
249 public void setCreateDate(Date createDate) { 251 public void setCreateDate(Date createDate) {
250 this.createDate = createDate; 252 this.createDate = createDate;
251 } 253 }
  254 +
  255 + public Date getQyrq() {
  256 + return qyrq;
  257 + }
  258 +
  259 + public void setQyrq(Date qyrq) {
  260 + this.qyrq = qyrq;
  261 + }
252 } 262 }
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/rules/ScheduleRuleServiceImpl.java
@@ -113,6 +113,7 @@ public class ScheduleRuleServiceImpl implements ScheduleRuleService { @@ -113,6 +113,7 @@ public class ScheduleRuleServiceImpl implements ScheduleRuleService {
113 SchedulePlanRuleResult obj = new SchedulePlanRuleResult(); 113 SchedulePlanRuleResult obj = new SchedulePlanRuleResult();
114 obj.setRuleId(rs.getString("rule_id")); 114 obj.setRuleId(rs.getString("rule_id"));
115 obj.setCcZbh(rs.getString("cc_zbh")); 115 obj.setCcZbh(rs.getString("cc_zbh"));
  116 + obj.setQyrq(rs.getDate("qyrq"));
116 obj.setGids(rs.getString("gids")); 117 obj.setGids(rs.getString("gids"));
117 obj.setEcids(rs.getString("ecids")); 118 obj.setEcids(rs.getString("ecids"));
118 obj.setScheduleDate(rs.getDate("schedule_date")); 119 obj.setScheduleDate(rs.getDate("schedule_date"));
src/main/java/com/bsth/service/schedule/rules/shiftloop/ScheduleRule_input.java
@@ -92,7 +92,7 @@ public class ScheduleRule_input { @@ -92,7 +92,7 @@ public class ScheduleRule_input {
92 scheduleRule1Flat.getRyConfigIds() 92 scheduleRule1Flat.getRyConfigIds()
93 ); 93 );
94 94
95 - System.out.println("rule的md5:" + ruleMd5 + " 车辆:" + scheduleRule1Flat.getCarConfigInfo().getCl().getInsideCode()); 95 +// System.out.println("rule的md5:" + ruleMd5 + " 车辆:" + scheduleRule1Flat.getCarConfigInfo().getCl().getInsideCode());
96 96
97 this.self = scheduleRule1Flat; 97 this.self = scheduleRule1Flat;
98 } 98 }
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 +}