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