Commit d702d5d6e35ecd6da308b9f6e41d945935f49c93
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 | 1 | package com.bsth.controller.realcontrol; |
| 2 | 2 | |
| 3 | -import com.bsth.data.gpsdata.client.ClientApp; | |
| 4 | 3 | import com.bsth.data.schedule.DayOfSchedule; |
| 5 | 4 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 6 | 5 | import org.slf4j.Logger; |
| ... | ... | @@ -50,27 +49,4 @@ public class anomalyCheckController { |
| 50 | 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 | 46 | //站点编码和名称对照,包括停车场 (K: lineCode_updown_stationCode ,V:站点名称) |
| 47 | 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 | 50 | public static Map<String, Line> nbbm2LineMap; |
| 54 | 51 | ... | ... |
src/main/java/com/bsth/data/car_out_info/CarOutInfoHandler.java
| 1 | 1 | package com.bsth.data.car_out_info; |
| 2 | 2 | |
| 3 | +import com.bsth.Application; | |
| 3 | 4 | import com.bsth.data.BasicData; |
| 4 | 5 | import com.bsth.data.schedule.DayOfSchedule; |
| 5 | 6 | import com.bsth.data.schedule.ScheduleComparator; |
| ... | ... | @@ -12,13 +13,18 @@ import org.springframework.beans.factory.annotation.Autowired; |
| 12 | 13 | import org.springframework.boot.CommandLineRunner; |
| 13 | 14 | import org.springframework.jdbc.core.BatchPreparedStatementSetter; |
| 14 | 15 | import org.springframework.jdbc.core.JdbcTemplate; |
| 16 | +import org.springframework.jdbc.datasource.DataSourceTransactionManager; | |
| 15 | 17 | import org.springframework.stereotype.Component; |
| 16 | 18 | import org.springframework.stereotype.Service; |
| 19 | +import org.springframework.transaction.TransactionDefinition; | |
| 20 | +import org.springframework.transaction.TransactionStatus; | |
| 17 | 21 | import org.springframework.transaction.annotation.Transactional; |
| 22 | +import org.springframework.transaction.support.DefaultTransactionDefinition; | |
| 18 | 23 | |
| 19 | 24 | import java.sql.PreparedStatement; |
| 20 | 25 | import java.sql.SQLException; |
| 21 | 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 | 66 | Set<String> ks = lpScheduleMap.keySet(); |
| 61 | 67 | String prefix = lineCode + "_"; |
| 62 | 68 | for (String k : ks) { |
| 63 | - if (k.indexOf(prefix) != -1) { | |
| 69 | + if (k.startsWith(prefix)) { | |
| 64 | 70 | list.addAll(lpScheduleMap.get(k)); |
| 65 | 71 | } |
| 66 | 72 | } |
| ... | ... | @@ -90,36 +96,48 @@ public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo { |
| 90 | 96 | downArray = nexts(downs); |
| 91 | 97 | |
| 92 | 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 | 143 | private List<ScheduleRealInfo> mergeArray(ScheduleRealInfo[] upArray, ScheduleRealInfo[] downArray) { |
| ... | ... | @@ -190,7 +208,7 @@ public class CarOutInfoHandler implements CommandLineRunner, CarOutInfo { |
| 190 | 208 | bcTypeMap.put("venting", "直放"); |
| 191 | 209 | bcTypeMap.put("major", "放站"); |
| 192 | 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 | 214 | @Component | ... | ... |
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
| 1 | 1 | package com.bsth.data.gpsdata; |
| 2 | 2 | |
| 3 | -import com.bsth.Application; | |
| 4 | 3 | import com.bsth.data.BasicData; |
| 5 | 4 | import com.bsth.data.forecast.ForecastRealServer; |
| 6 | -import com.bsth.data.gpsdata.client.ClientApp; | |
| 7 | -import com.bsth.data.gpsdata.client.GpsBeforeBuffer; | |
| 8 | 5 | import com.bsth.data.gpsdata.thread.GpsDataLoaderThread; |
| 9 | 6 | import com.bsth.data.gpsdata.thread.OfflineMonitorThread; |
| 10 | 7 | import com.bsth.data.schedule.DayOfSchedule; |
| ... | ... | @@ -19,7 +16,7 @@ import org.springframework.stereotype.Component; |
| 19 | 16 | |
| 20 | 17 | import java.util.*; |
| 21 | 18 | import java.util.concurrent.ConcurrentHashMap; |
| 22 | -import java.util.concurrent.TimeUnit; | |
| 19 | +import java.util.concurrent.ConcurrentMap; | |
| 23 | 20 | |
| 24 | 21 | /** |
| 25 | 22 | * @author PanZhao |
| ... | ... | @@ -32,7 +29,7 @@ public class GpsRealData implements CommandLineRunner { |
| 32 | 29 | |
| 33 | 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 | 35 | private static TreeMultimap<String, String> lineCode2Devices; |
| ... | ... | @@ -57,21 +54,13 @@ public class GpsRealData implements CommandLineRunner { |
| 57 | 54 | lineCode2Devices = TreeMultimap.create(); |
| 58 | 55 | } |
| 59 | 56 | |
| 60 | - @Autowired | |
| 61 | - ClientApp clientApp; | |
| 62 | - @Autowired | |
| 63 | - GpsBeforeBuffer gpsBeforeBuffer; | |
| 64 | 57 | @Override |
| 65 | 58 | public void run(String... arg0) throws Exception { |
| 66 | 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 | 23 | private static ArrayListMultimap<String, SignalState> listMultimap = ArrayListMultimap.create(); |
| 24 | 24 | |
| 25 | 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 | 31 | public List<SignalState> get(String idx){ | ... | ... |
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java
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 | 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 | 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
src/main/java/com/bsth/data/gpsdata/client/msg/IMessageBody.java deleted
100644 → 0
src/main/java/com/bsth/data/gpsdata/client/msg/IMessageIO.java deleted
100644 → 0
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 | 27 | |
| 28 | 28 | /** 排班规则id */ |
| 29 | 29 | private String ruleId; |
| 30 | + /** 启用日期 */ | |
| 31 | + private Date qyrq; | |
| 30 | 32 | /** 车辆配置id */ |
| 31 | 33 | private String ccId; |
| 32 | 34 | /** 车辆自编号 */ |
| ... | ... | @@ -249,4 +251,12 @@ public class SchedulePlanRuleResult { |
| 249 | 251 | public void setCreateDate(Date createDate) { |
| 250 | 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<StationRoute, Int |
| 247 | 247 | @Override |
| 248 | 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 | 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 | 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<ScheduleRealInf |
| 1790 | 1790 | List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>(); |
| 1791 | 1791 | List<ScheduleRealInfo> list = null; |
| 1792 | 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 | 1828 | for (int i = 0; i < list.size(); i++) { |
| 1794 | 1829 | ScheduleRealInfo s = list.get(i); |
| 1795 | 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 | 113 | SchedulePlanRuleResult obj = new SchedulePlanRuleResult(); |
| 114 | 114 | obj.setRuleId(rs.getString("rule_id")); |
| 115 | 115 | obj.setCcZbh(rs.getString("cc_zbh")); |
| 116 | + obj.setQyrq(rs.getDate("qyrq")); | |
| 116 | 117 | obj.setGids(rs.getString("gids")); |
| 117 | 118 | obj.setEcids(rs.getString("ecids")); |
| 118 | 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 | 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 | 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 | +} | ... | ... |