Commit e0064270ab55557b320ebad94272b5f9e1d5b048

Authored by 潘钊
2 parents 6315b5d4 a433e0a9

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

# Conflicts:
#	src/main/java/com/bsth/data/gpsdata/client/ClientApp.java
#	src/main/java/com/bsth/data/gpsdata/client/GpsBeforeBuffer.java
Showing 44 changed files with 2354 additions and 2361 deletions
src/main/java/com/bsth/controller/forms/ExportController.java
@@ -330,69 +330,22 @@ public class ExportController { @@ -330,69 +330,22 @@ public class ExportController {
330 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd"); 330 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
331 List<Iterator<?>> listI = new ArrayList<Iterator<?>>(); 331 List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
332 ReportUtils ee = new ReportUtils(); 332 ReportUtils ee = new ReportUtils();
333 - List<Turnoutrate> turnoutrate = formsService.turnoutrate(map);  
334 Map<String, Object> map1 = new HashMap<String, Object>(); 333 Map<String, Object> map1 = new HashMap<String, Object>();
335 - List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();  
336 - String xlts="";  
337 - String zsgs="";  
338 - String jh="";  
339 - Float j=0f;  
340 - Float sj=0f;  
341 - Float qz=0f;  
342 - Float ccl=0f;  
343 - Float bcjh=0f;  
344 - String bcsj="";  
345 - Float bczxl=0f;  
346 - String gs="";  
347 - String zhgs="";  
348 334
349 - for (Turnoutrate l : turnoutrate) {  
350 - Map<String, Object> m = new HashMap<String, Object>();  
351 -  
352 - xlts +=l.getGsgs()==""?0:String.valueOf(l.getGsgs());  
353 - zsgs +=l.getFgsgs()==""?0:String.valueOf(l.getFgsgs());  
354 - jh +=l.getXl()==""?0:String.valueOf(l.getXl());  
355 - sj +=l.getCchjh()==""?0f:Float.valueOf(l.getCchjh());  
356 - ccl +=l.getCchsj()==""?0f:Float.valueOf(l.getCchsj());  
357 - bcjh +=l.getCchqz()==""?0f:Float.valueOf(l.getCchqz());  
358 - bcsj +=l.getChl()==""?0:String.valueOf(l.getChl());  
359 - bczxl +=l.getBcjh()==""?0f:Float.valueOf(l.getBcjh());  
360 - gs +=l.getBcsj()==""?0:String.valueOf(l.getBcsj());  
361 - zhgs +=l.getBbzxl()==""?0:String.valueOf(l.getBbzxl());  
362 -  
363 -  
364 - m.put("rq", l.getRq());  
365 - m.put("gs", l.getGs());  
366 - m.put("zhgs", l.getZhgs());  
367 - m.put("xl", l.getXl());  
368 - m.put("cchjh", l.getCchjh());  
369 - m.put("cchsj", l.getCchsj());  
370 - m.put("cchqz", l.getCchqz());  
371 - m.put("chl", l.getChl());  
372 - m.put("bcjh", l.getBcjh());  
373 - m.put("bcsj", l.getBcsj());  
374 - m.put("bbzxl", l.getBbzxl());  
375 - m.put("sm", l.getSm());  
376 - resList.add(m);  
377 -  
378 -  
379 -  
380 - m=new HashMap<String,Object>();  
381 - m.put("total_xlts", xlts);  
382 - m.put("total_zhgs", zsgs);  
383 - m.put("total_jh", jh);  
384 - m.put("total_sj", sj);  
385 - m.put("total_qz", ccl);  
386 - m.put("total_ccl", bcjh);  
387 - m.put("total_bcjh",bcsj);  
388 - m.put("total_bcsj", bczxl);  
389 - m.put("total_bczxl", bczxl);  
390 - m.put("total_gs", zhgs);  
391 -  
392 -  
393 - map1 = m;  
394 - }  
395 - 335 + List<Map<String, Object>> resList = formsService.turnoutrate(map);
  336 + Map<String, Object> m = resList.get(resList.size() - 1);
  337 + map1.put("line", m.get("line"));
  338 + map1.put("jhcc", m.get("jhcc"));
  339 + map1.put("sjcc", m.get("sjcc"));
  340 + map1.put("jhbc", m.get("jhbc"));
  341 + map1.put("sjbc", m.get("sjbc"));
  342 + map1.put("ccl", m.get("ccl"));
  343 + map1.put("zxl", m.get("zxl"));
  344 + map1.put("qz", m.get("qz"));
  345 + map1.put("sm", m.get("sm"));
  346 +
  347 + resList.remove(m);
  348 +
396 try { 349 try {
397 listI.add(resList.iterator()); 350 listI.add(resList.iterator());
398 String path = this.getClass().getResource("/").getPath() + "static/pages/forms/"; 351 String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
src/main/java/com/bsth/controller/forms/MCY_FormsController.java
@@ -94,7 +94,7 @@ public class MCY_FormsController { @@ -94,7 +94,7 @@ public class MCY_FormsController {
94 94
95 // 营运线路出车率统计表 95 // 营运线路出车率统计表
96 @RequestMapping(value = "/turnoutrate", method = RequestMethod.POST) 96 @RequestMapping(value = "/turnoutrate", method = RequestMethod.POST)
97 - public List<Turnoutrate> turnoutrate(@RequestParam Map<String, Object> map) { 97 + public List<Map<String, Object>> turnoutrate(@RequestParam Map<String, Object> map) {
98 98
99 return formsService.turnoutrate(map); 99 return formsService.turnoutrate(map);
100 } 100 }
src/main/java/com/bsth/data/gpsdata/client/ClientApp.java
@@ -133,4 +133,4 @@ public class ClientApp { @@ -133,4 +133,4 @@ public class ClientApp {
133 133
134 gpsBeforeBuffer.init(); 134 gpsBeforeBuffer.init();
135 } 135 }
136 -} 136 -}
  137 +}
137 \ No newline at end of file 138 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/client/GpsBeforeBuffer.java
@@ -100,4 +100,4 @@ public class GpsBeforeBuffer { @@ -100,4 +100,4 @@ public class GpsBeforeBuffer {
100 return -1; 100 return -1;
101 return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0); 101 return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0);
102 } 102 }
103 -} 103 -}
  104 +}
104 \ No newline at end of file 105 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/client/common/ExceptionUtil.java
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 -} 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
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 -} 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
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 -} 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
1 -package com.bsth.data.gpsdata.client.msg;  
2 -  
3 -public interface IMessage extends IMessageIO {  
4 -  
5 - public IMessageBody getMessageBody();  
6 -} 1 +package com.bsth.data.gpsdata.client.msg;
  2 +
  3 +public interface IMessage extends IMessageIO {
  4 +
  5 + public IMessageBody getMessageBody();
  6 +}
src/main/java/com/bsth/data/gpsdata/client/msg/IMessageBody.java
1 -package com.bsth.data.gpsdata.client.msg;  
2 -  
3 -public interface IMessageBody extends IMessageIO {  
4 -  
5 - public String getDeviceId();  
6 -  
7 - public long getTimestamp();  
8 -} 1 +package com.bsth.data.gpsdata.client.msg;
  2 +
  3 +public interface IMessageBody extends IMessageIO {
  4 +
  5 + public String getDeviceId();
  6 +
  7 + public long getTimestamp();
  8 +}
src/main/java/com/bsth/data/gpsdata/client/msg/IMessageIO.java
1 -package com.bsth.data.gpsdata.client.msg;  
2 -  
3 -public interface IMessageIO {  
4 -  
5 - public void read(byte[] bytes);  
6 -  
7 - public byte[] write();  
8 -} 1 +package com.bsth.data.gpsdata.client.msg;
  2 +
  3 +public interface IMessageIO {
  4 +
  5 + public void read(byte[] bytes);
  6 +
  7 + public byte[] write();
  8 +}
src/main/java/com/bsth/data/gpsdata/client/pd/codec/MessageDecoder.java
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 -} 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
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 -} 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
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 -} 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
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 -} 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
1 -package com.bsth.data.gpsdata.client.pd.handler;  
2 -  
3 -import com.bsth.data.gpsdata.client.ClientApp;  
4 -import com.bsth.data.gpsdata.client.GpsBeforeBuffer;  
5 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
6 -import com.bsth.data.gpsdata.client.pd.protocol.PdMessage;  
7 -import com.bsth.data.gpsdata.client.pd.protocol.Pd_41_0;  
8 -import com.bsth.data.gpsdata.client.pd.protocol.Pd_42_0;  
9 -import org.apache.mina.core.service.IoHandlerAdapter;  
10 -import org.apache.mina.core.session.IdleStatus;  
11 -import org.apache.mina.core.session.IoSession;  
12 -import org.apache.mina.transport.socket.SocketSessionConfig;  
13 -import org.slf4j.Logger;  
14 -import org.slf4j.LoggerFactory;  
15 -import org.springframework.beans.factory.annotation.Autowired;  
16 -import org.springframework.stereotype.Service;  
17 -  
18 -import java.io.IOException;  
19 -  
20 -  
21 -@Service  
22 -public class PdClientHandler extends IoHandlerAdapter{  
23 -  
24 - private final static Logger log = LoggerFactory.getLogger(PdClientHandler.class);  
25 -  
26 - @Autowired  
27 - GpsBeforeBuffer gpsBeforeBuffer;  
28 -  
29 - @Override  
30 - public void sessionCreated(IoSession session) throws Exception {  
31 - SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig();  
32 - cfg.setSoLinger(0);  
33 - }  
34 -  
35 - @Override  
36 - public void sessionOpened(IoSession session) throws Exception {  
37 -  
38 - }  
39 -  
40 - @Override  
41 - public void sessionClosed(IoSession session) throws Exception {  
42 - String deviceId = (String)session.getAttribute("deviceId");  
43 - if (deviceId != null) {  
44 - //SessionManager.getInstance().unregister(deviceId);  
45 - log.info("连网关设备编号:" + deviceId + "断开连接");  
46 - log.warn(deviceId + "网关设备注销");  
47 -  
48 - ClientApp.dconnect(deviceId);  
49 - } else {  
50 - log.info("连网关设备编号:" + deviceId + "断开连接");  
51 - }  
52 - }  
53 -  
54 - @Override  
55 - public void sessionIdle(IoSession session, IdleStatus status) throws Exception {  
56 - session.closeNow();  
57 - }  
58 -  
59 - @Override  
60 - public void exceptionCaught(IoSession session, Throwable cause) throws Exception {  
61 - if (cause instanceof IOException) session.closeNow();  
62 - log.error("PdClientHandler异常:", cause);  
63 - }  
64 -  
65 - @Override  
66 - public void messageReceived(IoSession session, Object message) throws Exception {  
67 - PdMessage msg = (PdMessage)message;  
68 - IMessageBody body = msg.getMessageBody();  
69 - if (body != null) {  
70 - //String deviceId = body.getDeviceId();  
71 - if (0x31 == msg.getCommandType()) {  
72 - //IoSession regSession = SessionManager.getInstance().getSession(deviceId);  
73 - //if (regSession != null) regSession.closeNow();  
74 - //SessionManager.getInstance().register(deviceId, session);  
75 - log.debug("设备编号:" + body.getDeviceId() + "建立连接");  
76 - }  
77 - else if(0x41 == msg.getCommandType()){  
78 - Pd_41_0 pd41 = (Pd_41_0)msg.getMessageBody();  
79 - gpsBeforeBuffer.put(pd41.getInfo());  
80 - }  
81 - else if(0x42 == msg.getCommandType()){  
82 - Pd_42_0 pd42 = (Pd_42_0)msg.getMessageBody();  
83 - gpsBeforeBuffer.put(pd42.getInfo());  
84 - }  
85 - }  
86 - }  
87 -  
88 - @Override  
89 - public void messageSent(IoSession session, Object message) throws Exception {  
90 -  
91 - }  
92 -} 1 +package com.bsth.data.gpsdata.client.pd.handler;
  2 +
  3 +import com.bsth.data.gpsdata.client.ClientApp;
  4 +import com.bsth.data.gpsdata.client.GpsBeforeBuffer;
  5 +import com.bsth.data.gpsdata.client.msg.IMessageBody;
  6 +import com.bsth.data.gpsdata.client.pd.protocol.PdMessage;
  7 +import com.bsth.data.gpsdata.client.pd.protocol.Pd_41_0;
  8 +import com.bsth.data.gpsdata.client.pd.protocol.Pd_42_0;
  9 +import org.apache.mina.core.service.IoHandlerAdapter;
  10 +import org.apache.mina.core.session.IdleStatus;
  11 +import org.apache.mina.core.session.IoSession;
  12 +import org.apache.mina.transport.socket.SocketSessionConfig;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.stereotype.Service;
  17 +
  18 +import java.io.IOException;
  19 +
  20 +
  21 +@Service
  22 +public class PdClientHandler extends IoHandlerAdapter{
  23 +
  24 + private final static Logger log = LoggerFactory.getLogger(PdClientHandler.class);
  25 +
  26 + @Autowired
  27 + GpsBeforeBuffer gpsBeforeBuffer;
  28 +
  29 + @Override
  30 + public void sessionCreated(IoSession session) throws Exception {
  31 + SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig();
  32 + cfg.setSoLinger(0);
  33 + }
  34 +
  35 + @Override
  36 + public void sessionOpened(IoSession session) throws Exception {
  37 +
  38 + }
  39 +
  40 + @Override
  41 + public void sessionClosed(IoSession session) throws Exception {
  42 + String deviceId = (String)session.getAttribute("deviceId");
  43 + if (deviceId != null) {
  44 + //SessionManager.getInstance().unregister(deviceId);
  45 + log.info("连网关设备编号:" + deviceId + "断开连接");
  46 + log.warn(deviceId + "网关设备注销");
  47 +
  48 + ClientApp.dconnect(deviceId);
  49 + } else {
  50 + log.info("连网关设备编号:" + deviceId + "断开连接");
  51 + }
  52 + }
  53 +
  54 + @Override
  55 + public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
  56 + session.closeNow();
  57 + }
  58 +
  59 + @Override
  60 + public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
  61 + if (cause instanceof IOException) session.closeNow();
  62 + log.error("PdClientHandler异常:", cause);
  63 + }
  64 +
  65 + @Override
  66 + public void messageReceived(IoSession session, Object message) throws Exception {
  67 + PdMessage msg = (PdMessage)message;
  68 + IMessageBody body = msg.getMessageBody();
  69 + if (body != null) {
  70 + //String deviceId = body.getDeviceId();
  71 + if (0x31 == msg.getCommandType()) {
  72 + //IoSession regSession = SessionManager.getInstance().getSession(deviceId);
  73 + //if (regSession != null) regSession.closeNow();
  74 + //SessionManager.getInstance().register(deviceId, session);
  75 + log.debug("设备编号:" + body.getDeviceId() + "建立连接");
  76 + }
  77 + else if(0x41 == msg.getCommandType()){
  78 + Pd_41_0 pd41 = (Pd_41_0)msg.getMessageBody();
  79 + gpsBeforeBuffer.put(pd41.getInfo());
  80 + }
  81 + else if(0x42 == msg.getCommandType()){
  82 + Pd_42_0 pd42 = (Pd_42_0)msg.getMessageBody();
  83 + gpsBeforeBuffer.put(pd42.getInfo());
  84 + }
  85 + }
  86 + }
  87 +
  88 + @Override
  89 + public void messageSent(IoSession session, Object message) throws Exception {
  90 +
  91 + }
  92 +}
src/main/java/com/bsth/data/gpsdata/client/pd/protocol/BasicInfo.java
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 -} 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
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 -} 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
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 -} 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
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 -} 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
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 -} 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
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 -} 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
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 -} 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
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 -} 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
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 -} 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
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 -} 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
1 -package com.bsth.data.gpsdata.client.pf.handler;  
2 -  
3 -import com.bsth.data.gpsdata.client.ClientApp;  
4 -import com.bsth.data.gpsdata.client.GpsBeforeBuffer;  
5 -import com.bsth.data.gpsdata.client.common.Protocol2BizUtil;  
6 -import com.bsth.data.gpsdata.client.msg.IMessageBody;  
7 -import com.bsth.data.gpsdata.client.pd.protocol.BasicInfo;  
8 -import com.bsth.data.gpsdata.client.pf.protocol.PfMessage;  
9 -import org.apache.mina.core.service.IoHandlerAdapter;  
10 -import org.apache.mina.core.session.IdleStatus;  
11 -import org.apache.mina.core.session.IoSession;  
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 -@Service  
20 -public class PfClientHandler extends IoHandlerAdapter{  
21 -  
22 - private final static Logger log = LoggerFactory.getLogger(PfClientHandler.class);  
23 -  
24 - //@Autowired  
25 - //private MessageProcessor processor;  
26 -  
27 - @Autowired  
28 - GpsBeforeBuffer gpsBeforeBuffer;  
29 -  
30 - @Override  
31 - public void sessionCreated(IoSession session) throws Exception {  
32 -  
33 - }  
34 -  
35 - @Override  
36 - public void sessionOpened(IoSession session) throws Exception {  
37 -  
38 - }  
39 -  
40 - @Override  
41 - public void sessionClosed(IoSession session) throws Exception {  
42 - String deviceId = (String)session.getAttribute("deviceId");  
43 - if (deviceId != null) {  
44 - //SessionManager.getInstance().unregister(deviceId);  
45 - log.info("连老网关设备编号:" + deviceId + "断开连接");  
46 - log.warn(deviceId + "老网关设备注销");  
47 - ClientApp.fconnect(deviceId);  
48 - }  
49 - }  
50 -  
51 - @Override  
52 - public void sessionIdle(IoSession session, IdleStatus status) throws Exception {  
53 - session.closeNow();  
54 - }  
55 -  
56 - @Override  
57 - public void exceptionCaught(IoSession session, Throwable cause) throws Exception {  
58 - if (cause instanceof IOException) session.closeNow();  
59 - log.error("PfClientHandler exceptionCaught", cause);  
60 - }  
61 -  
62 - @Override  
63 - public void messageReceived(IoSession session, Object message) throws Exception {  
64 - PfMessage msg = (PfMessage)message;  
65 - IMessageBody body = msg.getMessageBody();  
66 - if (body != null) {  
67 - String deviceId = body.getDeviceId();  
68 - if (0x1 == msg.getCommandType()) {  
69 - log.debug("设备编号:" + body.getDeviceId() + "建立连接");  
70 - }  
71 -  
72 - BasicInfo info = Protocol2BizUtil.getBasicInfoFromMsg(msg);  
73 - gpsBeforeBuffer.put(info);  
74 - }  
75 -  
76 - }  
77 -  
78 - @Override  
79 - public void messageSent(IoSession session, Object message) throws Exception {  
80 -  
81 - }  
82 -} 1 +package com.bsth.data.gpsdata.client.pf.handler;
  2 +
  3 +import com.bsth.data.gpsdata.client.ClientApp;
  4 +import com.bsth.data.gpsdata.client.GpsBeforeBuffer;
  5 +import com.bsth.data.gpsdata.client.common.Protocol2BizUtil;
  6 +import com.bsth.data.gpsdata.client.msg.IMessageBody;
  7 +import com.bsth.data.gpsdata.client.pd.protocol.BasicInfo;
  8 +import com.bsth.data.gpsdata.client.pf.protocol.PfMessage;
  9 +import org.apache.mina.core.service.IoHandlerAdapter;
  10 +import org.apache.mina.core.session.IdleStatus;
  11 +import org.apache.mina.core.session.IoSession;
  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 +@Service
  20 +public class PfClientHandler extends IoHandlerAdapter{
  21 +
  22 + private final static Logger log = LoggerFactory.getLogger(PfClientHandler.class);
  23 +
  24 + //@Autowired
  25 + //private MessageProcessor processor;
  26 +
  27 + @Autowired
  28 + GpsBeforeBuffer gpsBeforeBuffer;
  29 +
  30 + @Override
  31 + public void sessionCreated(IoSession session) throws Exception {
  32 +
  33 + }
  34 +
  35 + @Override
  36 + public void sessionOpened(IoSession session) throws Exception {
  37 +
  38 + }
  39 +
  40 + @Override
  41 + public void sessionClosed(IoSession session) throws Exception {
  42 + String deviceId = (String)session.getAttribute("deviceId");
  43 + if (deviceId != null) {
  44 + //SessionManager.getInstance().unregister(deviceId);
  45 + log.info("连老网关设备编号:" + deviceId + "断开连接");
  46 + log.warn(deviceId + "老网关设备注销");
  47 + ClientApp.fconnect(deviceId);
  48 + }
  49 + }
  50 +
  51 + @Override
  52 + public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
  53 + session.closeNow();
  54 + }
  55 +
  56 + @Override
  57 + public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
  58 + if (cause instanceof IOException) session.closeNow();
  59 + log.error("PfClientHandler exceptionCaught", cause);
  60 + }
  61 +
  62 + @Override
  63 + public void messageReceived(IoSession session, Object message) throws Exception {
  64 + PfMessage msg = (PfMessage)message;
  65 + IMessageBody body = msg.getMessageBody();
  66 + if (body != null) {
  67 + String deviceId = body.getDeviceId();
  68 + if (0x1 == msg.getCommandType()) {
  69 + log.debug("设备编号:" + body.getDeviceId() + "建立连接");
  70 + }
  71 +
  72 + BasicInfo info = Protocol2BizUtil.getBasicInfoFromMsg(msg);
  73 + gpsBeforeBuffer.put(info);
  74 + }
  75 +
  76 + }
  77 +
  78 + @Override
  79 + public void messageSent(IoSession session, Object message) throws Exception {
  80 +
  81 + }
  82 +}
src/main/java/com/bsth/data/gpsdata/client/pf/protocol/PfFactory.java
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 -} 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
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 -} 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
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 -} 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/repository/LineRepository.java
@@ -38,4 +38,7 @@ public interface LineRepository extends BaseRepository&lt;Line, Integer&gt; { @@ -38,4 +38,7 @@ public interface LineRepository extends BaseRepository&lt;Line, Integer&gt; {
38 List<Line> findLine(String line); 38 List<Line> findLine(String line);
39 39
40 public Line findByLineCode(String string); 40 public Line findByLineCode(String string);
  41 +
  42 + @Query(value = " SELECT l FROM Line l where l.company like ?1 and l.brancheCompany like ?2 and l.lineCode like ?3")
  43 + public List<Line> findLineBygsBm(String gsBm, String fgsBm, String line);
41 } 44 }
src/main/java/com/bsth/repository/oil/CdlRepository.java
@@ -15,8 +15,6 @@ import com.bsth.repository.BaseRepository; @@ -15,8 +15,6 @@ import com.bsth.repository.BaseRepository;
15 15
16 @Repository 16 @Repository
17 public interface CdlRepository extends BaseRepository<Cdl, Integer>{ 17 public interface CdlRepository extends BaseRepository<Cdl, Integer>{
18 - @Transactional  
19 - @Modifying  
20 @Query(value="SELECT * FROM bsth_c_cdl ",nativeQuery=true) 18 @Query(value="SELECT * FROM bsth_c_cdl ",nativeQuery=true)
21 List<Cdl> obtainCdl(); 19 List<Cdl> obtainCdl();
22 } 20 }
src/main/java/com/bsth/repository/oil/CwjyRepository.java
@@ -20,8 +20,6 @@ public interface CwjyRepository extends BaseRepository&lt;Cwjy, Integer&gt;{ @@ -20,8 +20,6 @@ public interface CwjyRepository extends BaseRepository&lt;Cwjy, Integer&gt;{
20 * @param rq 20 * @param rq
21 * @return 21 * @return
22 */ 22 */
23 - @Transactional  
24 - @Modifying  
25 @Query(value="SELECT a.gsdm as gsdm,a.nbbm as nbbm,b.jsy as jsy,b.jzl as jzl ,b.stationid as stationid," 23 @Query(value="SELECT a.gsdm as gsdm,a.nbbm as nbbm,b.jsy as jsy,b.jzl as jzl ,b.stationid as stationid,"
26 + "b.nylx as nylx,b.yj as yj,b.bz as bz,c.jsy as ldgh FROM bsth_c_cwjy a "+ 24 + "b.nylx as nylx,b.yj as yj,b.bz as bz,c.jsy as ldgh FROM bsth_c_cwjy a "+
27 " left join ( select * from bsth_c_ylxxb b where to_days(b.yyrq)=to_days(?1) and jylx=1) b " + 25 " left join ( select * from bsth_c_ylxxb b where to_days(b.yyrq)=to_days(?1) and jylx=1) b " +
src/main/java/com/bsth/repository/oil/CylRepository.java
@@ -13,8 +13,6 @@ import com.bsth.repository.BaseRepository; @@ -13,8 +13,6 @@ import com.bsth.repository.BaseRepository;
13 13
14 @Repository 14 @Repository
15 public interface CylRepository extends BaseRepository<Cyl, Integer>{ 15 public interface CylRepository extends BaseRepository<Cyl, Integer>{
16 - @Transactional  
17 - @Modifying  
18 @Query(value="SELECT * FROM bsth_c_cyl where nbbm like %?1% and gsdm like %?2%",nativeQuery=true) 16 @Query(value="SELECT * FROM bsth_c_cyl where nbbm like %?1% and gsdm like %?2%",nativeQuery=true)
19 List<Cyl> obtainCyl(String nbbm,String gsdm); 17 List<Cyl> obtainCyl(String nbbm,String gsdm);
20 } 18 }
src/main/java/com/bsth/repository/oil/DlbRepository.java
@@ -18,8 +18,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{ @@ -18,8 +18,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{
18 * @param rq 18 * @param rq
19 * @return 19 * @return
20 */ 20 */
21 - @Transactional  
22 - @Modifying  
23 @Query(value="SELECT a.* FROM bsth_c_dlb a where to_days(?1)-to_days(a.rq)=1" 21 @Query(value="SELECT a.* FROM bsth_c_dlb a where to_days(?1)-to_days(a.rq)=1"
24 + " and jcsx=(select max(b.jcsx) from bsth_c_dlb b where a.nbbm=b.nbbm and " 22 + " and jcsx=(select max(b.jcsx) from bsth_c_dlb b where a.nbbm=b.nbbm and "
25 + " to_days(?1)-to_days(b.rq)=1 ) and ssgsdm like %?2% and fgsdm like %?3% and " 23 + " to_days(?1)-to_days(b.rq)=1 ) and ssgsdm like %?2% and fgsdm like %?3% and "
@@ -30,8 +28,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{ @@ -30,8 +28,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{
30 * @param rq 28 * @param rq
31 * @return 29 * @return
32 */ 30 */
33 - @Transactional  
34 - @Modifying  
35 @Query(value="SELECT * FROM bsth_c_dlb where to_days(?1)=to_days(rq) and ssgsdm like %?2% " 31 @Query(value="SELECT * FROM bsth_c_dlb where to_days(?1)=to_days(rq) and ssgsdm like %?2% "
36 + " and fgsdm like %?3%" 32 + " and fgsdm like %?3%"
37 + " and xlbm like %?4% and nbbm like %?5% order by ?6 asc",nativeQuery=true) 33 + " and xlbm like %?4% and nbbm like %?5% order by ?6 asc",nativeQuery=true)
@@ -53,8 +49,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{ @@ -53,8 +49,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{
53 * @param xlbm 49 * @param xlbm
54 * @return 50 * @return
55 */ 51 */
56 - @Transactional  
57 - @Modifying  
58 @Query(value="select nbbm,count(nbbm) from bsth_c_dlb where to_days(?1)=to_days(rq) and " 52 @Query(value="select nbbm,count(nbbm) from bsth_c_dlb where to_days(?1)=to_days(rq) and "
59 + " ssgsdm like %?2% " 53 + " ssgsdm like %?2% "
60 + " and fgsdm like %?3%" 54 + " and fgsdm like %?3%"
@@ -62,8 +56,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{ @@ -62,8 +56,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{
62 + " group by nbbm,rq,ssgsdm,fgsdm,xlbm",nativeQuery=true) 56 + " group by nbbm,rq,ssgsdm,fgsdm,xlbm",nativeQuery=true)
63 List<Object[]> checkNbmmNum(String rq, String gsbm,String fgsbm,String xlbm,String nbbm); 57 List<Object[]> checkNbmmNum(String rq, String gsbm,String fgsbm,String xlbm,String nbbm);
64 58
65 - @Transactional  
66 - @Modifying  
67 @Query(value="select nbbm,sum(cdl*100) as cdl ,sum(zlc*100) as zlc from bsth_c_dlb where to_days(?1)=to_days(rq) and " 59 @Query(value="select nbbm,sum(cdl*100) as cdl ,sum(zlc*100) as zlc from bsth_c_dlb where to_days(?1)=to_days(rq) and "
68 + " ssgsdm like %?2% " 60 + " ssgsdm like %?2% "
69 + " and fgsdm like %?3%" 61 + " and fgsdm like %?3%"
@@ -81,8 +73,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{ @@ -81,8 +73,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{
81 + " and s.nbbm in ?5 ") 73 + " and s.nbbm in ?5 ")
82 List<Object[]> sumDlb(String rq, String gsbm,String fgsbm,String xlbm,List<String> listNbbm); 74 List<Object[]> sumDlb(String rq, String gsbm,String fgsbm,String xlbm,List<String> listNbbm);
83 75
84 - @Transactional  
85 - @Modifying  
86 @Query(value="select ifnull(cdl,0),ifnull(hd,0),ifnull(sh,0) from bsth_c_dlb " 76 @Query(value="select ifnull(cdl,0),ifnull(hd,0),ifnull(sh,0) from bsth_c_dlb "
87 + " where to_days(?1)=to_days(rq) " 77 + " where to_days(?1)=to_days(rq) "
88 + " and ssgsdm like %?2% " 78 + " and ssgsdm like %?2% "
@@ -92,8 +82,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{ @@ -92,8 +82,6 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{
92 List<Object[]> sumDlb2(String rq, String gsbm,String fgsbm,String xlbm,String nbbm); 82 List<Object[]> sumDlb2(String rq, String gsbm,String fgsbm,String xlbm,String nbbm);
93 83
94 84
95 - @Transactional  
96 - @Modifying  
97 @Query(value="UPDATE bsth_c_dlb SET " + 85 @Query(value="UPDATE bsth_c_dlb SET " +
98 " czcd= ?2,"+ 86 " czcd= ?2,"+
99 " jzcd = ?3, " + 87 " jzcd = ?3, " +
src/main/java/com/bsth/repository/oil/JdlRepository.java
@@ -22,24 +22,16 @@ public interface JdlRepository extends BaseRepository&lt;Jdl, Integer&gt;{ @@ -22,24 +22,16 @@ public interface JdlRepository extends BaseRepository&lt;Jdl, Integer&gt;{
22 "?1,?2,?3,?4,str_to_date(?5,'%Y-%m-%d'),?6,?7,?8,?9,str_to_date(?10,'%Y-%m-%d %H:%i:%s'))", nativeQuery=true) 22 "?1,?2,?3,?4,str_to_date(?5,'%Y-%m-%d'),?6,?7,?8,?9,str_to_date(?10,'%Y-%m-%d %H:%i:%s'))", nativeQuery=true)
23 void insertData(String gsbm, String gsName, String fgsbm, String fgsName, String rq, String nbbm, String jdl, String jdz, String remarks, String createrDate); 23 void insertData(String gsbm, String gsName, String fgsbm, String fgsName, String rq, String nbbm, String jdl, String jdz, String remarks, String createrDate);
24 24
25 - @Transactional  
26 - @Modifying  
27 @Query(value="SELECT * FROM bsth_c_jdl where gs_bm = ?1 and fgs_bm = ?2 and rq = ?3 and nbbm like %?4%",nativeQuery=true) 25 @Query(value="SELECT * FROM bsth_c_jdl where gs_bm = ?1 and fgs_bm = ?2 and rq = ?3 and nbbm like %?4%",nativeQuery=true)
28 List<Jdl> query(String gsbm, String fgsbm, String rq, String nbbm); 26 List<Jdl> query(String gsbm, String fgsbm, String rq, String nbbm);
29 27
30 28
31 - @Transactional  
32 - @Modifying  
33 @Query(value="SELECT * FROM bsth_c_jdl where rq = ?",nativeQuery=true) 29 @Query(value="SELECT * FROM bsth_c_jdl where rq = ?",nativeQuery=true)
34 List<Jdl> JdlList( String rq); 30 List<Jdl> JdlList( String rq);
35 31
36 - @Transactional  
37 - @Modifying  
38 @Query(value="SELECT jdl FROM bsth_c_jdl where gs_bm = ?1 and fgs_bm = ?2 and rq = ?3 and nbbm = ?4 and jdz = ?5",nativeQuery=true) 32 @Query(value="SELECT jdl FROM bsth_c_jdl where gs_bm = ?1 and fgs_bm = ?2 and rq = ?3 and nbbm = ?4 and jdz = ?5",nativeQuery=true)
39 List<Double> queryBySame(String gsbm, String fgsbm, String rq, String nbbm, String jdz); 33 List<Double> queryBySame(String gsbm, String fgsbm, String rq, String nbbm, String jdz);
40 34
41 - @Transactional  
42 - @Modifying  
43 @Query(value="UPDATE bsth_c_jdl set jdl = ?1 where gs_bm = ?2 and fgs_bm = ?3 and rq = ?4 and nbbm = ?5 and jdz = ?6",nativeQuery=true) 35 @Query(value="UPDATE bsth_c_jdl set jdl = ?1 where gs_bm = ?2 and fgs_bm = ?3 and rq = ?4 and nbbm = ?5 and jdz = ?6",nativeQuery=true)
44 void UpdateJdl(String jdl, String gsbm, String fgsbm, String rq, String nbbm, String jdz); 36 void UpdateJdl(String jdl, String gsbm, String fgsbm, String rq, String nbbm, String jdz);
45 37
src/main/java/com/bsth/repository/oil/YlbRepository.java
@@ -19,8 +19,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{ @@ -19,8 +19,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{
19 * @param rq 19 * @param rq
20 * @return 20 * @return
21 */ 21 */
22 - @Transactional  
23 - @Modifying  
24 @Query(value="SELECT a.* FROM bsth_c_ylb a where to_days(?1)-to_days(a.rq)=1" 22 @Query(value="SELECT a.* FROM bsth_c_ylb a where to_days(?1)-to_days(a.rq)=1"
25 + " and jcsx=(select max(b.jcsx) from bsth_c_ylb b where a.nbbm=b.nbbm and " 23 + " and jcsx=(select max(b.jcsx) from bsth_c_ylb b where a.nbbm=b.nbbm and "
26 + " to_days(?1)-to_days(b.rq)=1 ) and ssgsdm like %?2% and fgsdm like %?3% and " 24 + " to_days(?1)-to_days(b.rq)=1 ) and ssgsdm like %?2% and fgsdm like %?3% and "
@@ -32,8 +30,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{ @@ -32,8 +30,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{
32 * 获取当天日期前的最大的日期中最大进出顺序的数据 30 * 获取当天日期前的最大的日期中最大进出顺序的数据
33 * 31 *
34 */ 32 */
35 - @Transactional  
36 - @Modifying  
37 @Query(value="select y.* from (select max(d.id) as id ,d.nbbm from (" 33 @Query(value="select y.* from (select max(d.id) as id ,d.nbbm from ("
38 + " select b.rq,b.nbbm,max(b.jcsx) as jcsx from (" 34 + " select b.rq,b.nbbm,max(b.jcsx) as jcsx from ("
39 + " select max(t.rq) as rq ,t.nbbm from bsth_c_ylb t " 35 + " select max(t.rq) as rq ,t.nbbm from bsth_c_ylb t "
@@ -55,21 +51,15 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{ @@ -55,21 +51,15 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{
55 * @param rq 51 * @param rq
56 * @return 52 * @return
57 */ 53 */
58 - @Transactional  
59 - @Modifying  
60 @Query(value="SELECT * FROM bsth_c_ylb where to_days(?1)=to_days(rq) and ssgsdm like %?2% " 54 @Query(value="SELECT * FROM bsth_c_ylb where to_days(?1)=to_days(rq) and ssgsdm like %?2% "
61 + " and fgsdm like %?3%" 55 + " and fgsdm like %?3%"
62 + " and xlbm like %?4% and nbbm like %?5% order by ?6 asc ",nativeQuery=true) 56 + " and xlbm like %?4% and nbbm like %?5% order by ?6 asc ",nativeQuery=true)
63 List<Ylb> obtainYl(String rq,String gsdm,String fgsdm,String xlbm,String nbbm,String px); 57 List<Ylb> obtainYl(String rq,String gsdm,String fgsdm,String xlbm,String nbbm,String px);
64 58
65 59
66 - @Transactional  
67 - @Modifying  
68 @Query(value="SELECT * FROM bsth_c_ylb where to_days(?1)=to_days(rq) and nbbm =?2 and jsy=?3 ",nativeQuery=true) 60 @Query(value="SELECT * FROM bsth_c_ylb where to_days(?1)=to_days(rq) and nbbm =?2 and jsy=?3 ",nativeQuery=true)
69 List<Ylb> queryListYlb(String rq,String nbbm,String jgh); 61 List<Ylb> queryListYlb(String rq,String nbbm,String jgh);
70 62
71 - @Transactional  
72 - @Modifying  
73 @Query(value="SELECT * FROM bsth_c_ylb where to_days(?1)=to_days(rq) and nbbm =?2 and jsy=?3 and xlbm=?4 order by ?5 asc",nativeQuery=true) 63 @Query(value="SELECT * FROM bsth_c_ylb where to_days(?1)=to_days(rq) and nbbm =?2 and jsy=?3 and xlbm=?4 order by ?5 asc",nativeQuery=true)
74 List<Ylb> checkYlb(String rq,String nbbm,String jgh,String xlbm,String px); 64 List<Ylb> checkYlb(String rq,String nbbm,String jgh,String xlbm,String px);
75 /** 65 /**
@@ -77,8 +67,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{ @@ -77,8 +67,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{
77 * @param rq 67 * @param rq
78 * @return 68 * @return
79 */ 69 */
80 - @Transactional  
81 - @Modifying  
82 @Query(value="select ifnull(jzl,0),ifnull(zlc,0),ifnull(sh,0) from bsth_c_ylb where nbbm=?1 and rq=?2 and xlbm like %?3% and ssgsdm like %?4% and fgsdm like %?5%",nativeQuery=true) 70 @Query(value="select ifnull(jzl,0),ifnull(zlc,0),ifnull(sh,0) from bsth_c_ylb where nbbm=?1 and rq=?2 and xlbm like %?3% and ssgsdm like %?4% and fgsdm like %?5%",nativeQuery=true)
83 List<Object[]> sumLcYl(String nbbm,Date rq,String xlbm,String fgsbm,String gsbm); 71 List<Object[]> sumLcYl(String nbbm,Date rq,String xlbm,String fgsbm,String gsbm);
84 72
@@ -89,8 +77,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{ @@ -89,8 +77,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{
89 * @param xlbm 77 * @param xlbm
90 * @return 78 * @return
91 */ 79 */
92 - @Transactional  
93 - @Modifying  
94 @Query(value="select nbbm,count(nbbm) from bsth_c_ylb where to_days(?1)=to_days(rq) and " 80 @Query(value="select nbbm,count(nbbm) from bsth_c_ylb where to_days(?1)=to_days(rq) and "
95 + " ssgsdm like %?2% " 81 + " ssgsdm like %?2% "
96 + " and fgsdm like %?3%" 82 + " and fgsdm like %?3%"
@@ -124,8 +110,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{ @@ -124,8 +110,6 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{
124 + " and s.nbbm in ?5 ") 110 + " and s.nbbm in ?5 ")
125 List<Object[]> sumYlb(String rq, String gsbm,String fgsbm,String xlbm,List<String> listNbbm); 111 List<Object[]> sumYlb(String rq, String gsbm,String fgsbm,String xlbm,List<String> listNbbm);
126 112
127 - @Transactional  
128 - @Modifying  
129 @Query(value="select ifnull(jzl,0),ifnull(yh,0),ifnull(sh,0) from bsth_c_ylb " 113 @Query(value="select ifnull(jzl,0),ifnull(yh,0),ifnull(sh,0) from bsth_c_ylb "
130 + " where to_days(?1)=to_days(rq) " 114 + " where to_days(?1)=to_days(rq) "
131 + " and ssgsdm like %?2% " 115 + " and ssgsdm like %?2% "
src/main/java/com/bsth/repository/oil/YlxxbRepository.java
@@ -17,23 +17,15 @@ public interface YlxxbRepository extends BaseRepository&lt;Ylxxb, Integer&gt;{ @@ -17,23 +17,15 @@ public interface YlxxbRepository extends BaseRepository&lt;Ylxxb, Integer&gt;{
17 * @param rq 17 * @param rq
18 * @return 18 * @return
19 */ 19 */
20 - @Transactional  
21 - @Modifying  
22 @Query(value="SELECT * FROM bsth_c_ylxxb where to_days(?1)=to_days(yyrq) and nylx=?2 and gsdm like %?3%",nativeQuery=true) 20 @Query(value="SELECT * FROM bsth_c_ylxxb where to_days(?1)=to_days(yyrq) and nylx=?2 and gsdm like %?3%",nativeQuery=true)
23 List<Ylxxb> obtainYlxx(String rq,int nylx,String gsdm); 21 List<Ylxxb> obtainYlxx(String rq,int nylx,String gsdm);
24 22
25 - @Transactional  
26 - @Modifying  
27 @Query(value="SELECT * FROM bsth_c_ylxxb where to_days(?1)=to_days(yyrq) and ssgs=?2",nativeQuery=true) 23 @Query(value="SELECT * FROM bsth_c_ylxxb where to_days(?1)=to_days(yyrq) and ssgs=?2",nativeQuery=true)
28 List<Ylxxb> checkYlxx(String rq,String gs); 24 List<Ylxxb> checkYlxx(String rq,String gs);
29 25
30 - @Transactional  
31 - @Modifying  
32 @Query(value="SELECT * FROM bsth_c_ylxxb where to_days(?1)=to_days(yyrq) and nbbm =?2 and jylx=1",nativeQuery=true) 26 @Query(value="SELECT * FROM bsth_c_ylxxb where to_days(?1)=to_days(yyrq) and nbbm =?2 and jylx=1",nativeQuery=true)
33 List<Ylxxb> obtainYlxx2(String rq,String nbbm); 27 List<Ylxxb> obtainYlxx2(String rq,String nbbm);
34 28
35 - @Transactional  
36 - @Modifying  
37 @Query(value="select * from bsth_c_ylxxb s where s.nbbm = ?1 and " 29 @Query(value="select * from bsth_c_ylxxb s where s.nbbm = ?1 and "
38 + "to_days(s.yyrq) = to_days(?2)",nativeQuery=true) 30 + "to_days(s.yyrq) = to_days(?2)",nativeQuery=true)
39 List<Ylxxb> queryListYlxxb(String clZbh,String date); 31 List<Ylxxb> queryListYlxxb(String clZbh,String date);
src/main/java/com/bsth/service/forms/FormsService.java
@@ -35,7 +35,7 @@ public interface FormsService { @@ -35,7 +35,7 @@ public interface FormsService {
35 35
36 public List<Operationservice> operationservice(Map<String, Object> map); 36 public List<Operationservice> operationservice(Map<String, Object> map);
37 37
38 - public List<Turnoutrate> turnoutrate(Map<String, Object> map); 38 + public List<Map<String, Object>> turnoutrate(Map<String, Object> map);
39 39
40 public List<Executionrate> executionrate(Map<String, Object> map); 40 public List<Executionrate> executionrate(Map<String, Object> map);
41 41
src/main/java/com/bsth/service/forms/impl/FormsServiceImpl.java
@@ -9,14 +9,17 @@ import java.text.SimpleDateFormat; @@ -9,14 +9,17 @@ import java.text.SimpleDateFormat;
9 import java.util.ArrayList; 9 import java.util.ArrayList;
10 import java.util.Date; 10 import java.util.Date;
11 import java.util.HashMap; 11 import java.util.HashMap;
  12 +import java.util.HashSet;
12 import java.util.List; 13 import java.util.List;
13 import java.util.Map; 14 import java.util.Map;
  15 +import java.util.Set;
14 16
15 import org.springframework.beans.factory.annotation.Autowired; 17 import org.springframework.beans.factory.annotation.Autowired;
16 import org.springframework.jdbc.core.JdbcTemplate; 18 import org.springframework.jdbc.core.JdbcTemplate;
17 import org.springframework.jdbc.core.RowMapper; 19 import org.springframework.jdbc.core.RowMapper;
18 import org.springframework.stereotype.Service; 20 import org.springframework.stereotype.Service;
19 21
  22 +import com.bsth.entity.Line;
20 import com.bsth.entity.mcy_forms.Linepasswengerflow; 23 import com.bsth.entity.mcy_forms.Linepasswengerflow;
21 import com.bsth.entity.mcy_forms.Operationservice; 24 import com.bsth.entity.mcy_forms.Operationservice;
22 import com.bsth.entity.mcy_forms.Shifday; 25 import com.bsth.entity.mcy_forms.Shifday;
@@ -27,6 +30,8 @@ import com.bsth.entity.mcy_forms.Vehicleloading; @@ -27,6 +30,8 @@ import com.bsth.entity.mcy_forms.Vehicleloading;
27 import com.bsth.entity.mcy_forms.Waybillday; 30 import com.bsth.entity.mcy_forms.Waybillday;
28 import com.bsth.entity.oil.Ylb; 31 import com.bsth.entity.oil.Ylb;
29 import com.bsth.entity.realcontrol.ScheduleRealInfo; 32 import com.bsth.entity.realcontrol.ScheduleRealInfo;
  33 +import com.bsth.entity.schedule.SchedulePlanInfo;
  34 +import com.bsth.repository.LineRepository;
30 import com.bsth.repository.oil.YlbRepository; 35 import com.bsth.repository.oil.YlbRepository;
31 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; 36 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
32 import com.bsth.data.BasicData; 37 import com.bsth.data.BasicData;
@@ -60,6 +65,10 @@ public class FormsServiceImpl implements FormsService { @@ -60,6 +65,10 @@ public class FormsServiceImpl implements FormsService {
60 65
61 @Autowired 66 @Autowired
62 YlbRepository ylbRepository; 67 YlbRepository ylbRepository;
  68 +
  69 + @Autowired
  70 + LineRepository lineRepository;
  71 +
63 72
64 // 行车路单日报表 73 // 行车路单日报表
65 @Override 74 @Override
@@ -734,11 +743,13 @@ public class FormsServiceImpl implements FormsService { @@ -734,11 +743,13 @@ public class FormsServiceImpl implements FormsService {
734 743
735 // 营运线路出车率统计表 744 // 营运线路出车率统计表
736 @Override 745 @Override
737 - public List<Turnoutrate> turnoutrate(Map<String, Object> map) { 746 + public List<Map<String, Object>> turnoutrate(Map<String, Object> map) {
738 747
739 - List<Turnoutrate> resList = new ArrayList<Turnoutrate>(); 748 + List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
740 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 749 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
741 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日"); 750 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日");
  751 + NumberFormat numberFormat = NumberFormat.getInstance();
  752 + numberFormat.setMaximumFractionDigits(2);
742 Date d = null; 753 Date d = null;
743 Date d1 = null; 754 Date d1 = null;
744 try { 755 try {
@@ -750,68 +761,134 @@ public class FormsServiceImpl implements FormsService { @@ -750,68 +761,134 @@ public class FormsServiceImpl implements FormsService {
750 } 761 }
751 String rq2 = sdf1.format(d); 762 String rq2 = sdf1.format(d);
752 String rq3 = sdf1.format(d1); 763 String rq3 = sdf1.format(d1);
  764 + String company = map.get("gsdmTurn").toString();
  765 + String subCompany = map.get("fgsdmTurn").toString();
  766 + String line = map.get("line").toString();
  767 + String startDate = map.get("startDate").toString();
  768 + String endDate = map.get("endDate").toString();
753 769
754 rq = rq2 + "-" + rq3; 770 rq = rq2 + "-" + rq3;
755 771
756 - String sql = " select b.xlgs, a.gs_bm,a.gs_name, a.fgs_bm,a.fgs_name , a.xl_bm,b.sbc,b.sxl,b.scl,a.jbc ,a.jxl ,a.jcl,a.gslsbm,a.fgsbm,b.warrant_car,a.bc_type from "  
757 - + " (select count(DISTINCT gs_bm) gslsbm, gs_bm, count(DISTINCT fgs_bm) fgsbm,fgs_bm,gs_name,fgs_name ,xl_bm, count(*) as jbc,COUNT(DISTINCT xl_bm) as jxl ,COUNT(DISTINCT cl_zbh) as jcl,bc_type"  
758 - + " from bsth_c_s_sp_info" + " where DATE_FORMAT(schedule_date,'%Y-%m-%d') BETWEEN '"+ map.get("startDate").toString() + "' "  
759 - + " and '" + map.get("endDate").toString() + "' and xl_bm='"+ map.get("line").toString() + "' "  
760 - + " AND gs_bm is not null "  
761 - + " AND bc_type NOT IN ('in', 'out')"  
762 - + " and gs_bm='"+ map.get("gsdmTurn").toString() + "'"  
763 - + " and fgs_bm='"+ map.get("fgsdmTurn").toString() + "'"  
764 -// + " GROUP BY gs_bm,fgs_bm,xl_bm,gs_name,fgs_name,bc_type "  
765 - + " ) a left JOIN ("  
766 - + " SELECT COUNT(*) as xlgs,b.gs_bm,b.fgs_bm,b.xl_bm,b.gs_name,b.fgs_name, b.sbc,b.sxl ,b.scl,t.warrant_car "  
767 - + " from bsth_c_line t RIGHT JOIN (select gs_bm,fgs_bm,xl_bm,gs_name,fgs_name, count(*) as sbc,COUNT(DISTINCT xl_bm) as sxl ,COUNT(DISTINCT cl_zbh) as scl,bc_type from bsth_c_s_sp_info_real "  
768 - + " where DATE_FORMAT(schedule_date,'%Y-%m-%d') BETWEEN '" + map.get("startDate").toString() + "' and '"  
769 - + map.get("endDate").toString() + "' and xl_bm='" + map.get("line").toString()  
770 - + "' AND gs_bm is not null "  
771 - + " AND bc_type NOT IN ('in', 'out')"  
772 -// + " GROUP BY gs_bm,fgs_bm,xl_bm,gs_name,fgs_name,bc_type "  
773 - + " ) b ON t.company=b.gs_bm and t.branche_company = b.fgs_bm) b on "  
774 - + " a.gs_bm=b.gs_bm and a.fgs_bm=b.fgs_bm and a.xl_bm=b.xl_bm ";  
775 - List<Turnoutrate> list = jdbcTemplate.query(sql, new RowMapper<Turnoutrate>() { 772 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, startDate, endDate, company, subCompany);
  773 + List<Line> lineList = lineRepository.findLineBygsBm(company, subCompany, line);
  774 +
  775 + String sql = "select * from bsth_c_s_sp_info where gs_bm = '"+company+"' and fgs_bm = '"+subCompany+"' "
  776 + + "and DATE_FORMAT(schedule_date,'%Y-%m-%d') BETWEEN '"+startDate+"' and '"+endDate+"' ";
  777 + if(line.trim().length() != 0){
  778 + sql += "and xl_bm = '"+line+"' ";
  779 + }
  780 + List<SchedulePlanInfo> planList = jdbcTemplate.query(sql, new RowMapper<SchedulePlanInfo>() {
776 781
777 @Override 782 @Override
778 - public Turnoutrate mapRow(ResultSet arg0, int arg1) throws SQLException {  
779 - Turnoutrate tu = new Turnoutrate();  
780 - NumberFormat numberFormat = NumberFormat.getInstance();  
781 - numberFormat.setMaximumFractionDigits(2);  
782 - int scl = arg0.getString("scl")!=null&&arg0.getString("scl").trim().length()!=0?Integer.parseInt(arg0.getString("scl")):0;  
783 - int jcl = arg0.getString("jcl")!=null&&arg0.getString("jcl").trim().length()!=0?Integer.parseInt(arg0.getString("jcl")):0;  
784 - int sbc = arg0.getString("sbc")!=null&&arg0.getString("sbc").trim().length()!=0?Integer.parseInt(arg0.getString("sbc")):0;  
785 - int jbc = arg0.getString("jbc")!=null&&arg0.getString("jbc").trim().length()!=0?Integer.parseInt(arg0.getString("jbc")):0;  
786 - String result1 = numberFormat.format((float) scl / (float) jcl * 100);  
787 - String result2 = numberFormat.format((float) sbc / (float) jbc * 100);  
788 - tu.setRq(rq);  
789 - if(arg0.getString("gs_name") == null || arg0.getString("gs_name").trim().length() == 0)  
790 - return tu;  
791 - tu.setGs(arg0.getString("gs_name").toString());  
792 - tu.setZhgs(arg0.getString("fgs_name").toString());  
793 -// tu.setXl(arg0.getString("xlgs")!=null&&arg0.getString("xlgs").trim().length()!=0?arg0.getString("xlgs"):"0");  
794 - tu.setXl(arg0.getString("jxl")!=null&&arg0.getString("jxl").trim().length()!=0?arg0.getString("jxl"):"0");  
795 - tu.setXlmc(arg0.getString("sxl")!=null&&arg0.getString("sxl").trim().length()!=0?arg0.getString("sxl"):"0");  
796 - tu.setCchjh("" + jcl);  
797 - tu.setCchsj("" + scl);  
798 - tu.setCchqz(arg0.getString("sxl")!=null&&arg0.getString("sxl").trim().length()!=0?arg0.getString("sxl"):"0");  
799 - tu.setChl(result1 + "%");// 出车率  
800 - tu.setBcjh("" + jbc);  
801 - tu.setBcsj("" + sbc);  
802 - tu.setBbzxl(result2 + "%");// 班次执行率  
803 - tu.setSm(arg0.getString("gs_name").toString());  
804 - tu.setGsgs(arg0.getString("gslsbm").toString());  
805 - tu.setFgsgs(arg0.getString("fgsbm").toString());  
806 - return tu; 783 + public SchedulePlanInfo mapRow(ResultSet arg0, int arg1) throws SQLException {
  784 + SchedulePlanInfo schedule = new SchedulePlanInfo();
  785 + schedule.setGsName(arg0.getString("gs_name"));
  786 + schedule.setFgsName(arg0.getString("fgs_name"));
  787 + schedule.setClZbh(arg0.getString("cl_zbh"));
  788 + schedule.setFcsj(arg0.getString("fcsj"));
  789 + schedule.setBcType(arg0.getString("bc_type"));
  790 + schedule.setXlBm(arg0.getString("xl_bm"));
  791 + schedule.setXlName(arg0.getString("xl_name"));
  792 + schedule.setScheduleDate(arg0.getDate("schedule_date"));
  793 + return schedule;
807 } 794 }
808 795
809 }); 796 });
810 797
811 - for(Turnoutrate t : list){  
812 - if(t.getGs() != null && t.getGs().trim().length() != 0)  
813 - resList.add(t); 798 +
  799 + for(Line line1 : lineList){
  800 + if(line.trim().length() == 0 || line1.getLineCode().equals(line)){
  801 + Map<String, Object> m = new HashMap<String, Object>();
  802 + m.put("rq", rq);
  803 + m.put("line", line1.getName());
  804 + m.put("xlBm", line1.getLineCode());
  805 + m.put("qz", line1.getWarrantCar()!=null?line1.getWarrantCar():0);
  806 + m.put("sm", "");
  807 + resList.add(m);
  808 + }
  809 + }
  810 + for(Map<String, Object> m : resList){
  811 + String xlBm = m.get("xlBm").toString();
  812 + List<ScheduleRealInfo> reals = new ArrayList<ScheduleRealInfo>();
  813 + List<SchedulePlanInfo> plans = new ArrayList<SchedulePlanInfo>();
  814 + for(ScheduleRealInfo schedule : list){
  815 + if(schedule.getXlBm().equals(xlBm)){
  816 + reals.add(schedule);
  817 + }
  818 + }
  819 + for(SchedulePlanInfo schedule : planList){
  820 + if(schedule.getXlBm().equals(xlBm)){
  821 + plans.add(schedule);
  822 + }
  823 + }
  824 + Set<String> jhcc = new HashSet<String>();
  825 + Set<String> sjcc = new HashSet<String>();
  826 + for(SchedulePlanInfo schedule : plans){
  827 + if(!m.containsKey("gsName") && schedule.getGsName()!=null && schedule.getGsName().trim().length()!=0){
  828 + m.put("gsName", schedule.getGsName());
  829 + }
  830 + if(!m.containsKey("fgsName") && schedule.getFgsName()!=null && schedule.getFgsName().trim().length()!=0){
  831 + m.put("fgsName", schedule.getFgsName());
  832 + }
  833 + jhcc.add(schedule.getClZbh() + sdf.format(schedule.getScheduleDate()));
  834 + }
  835 + for(ScheduleRealInfo schedule : reals){
  836 + if(!m.containsKey("gsName") && schedule.getGsName()!=null && schedule.getGsName().trim().length()!=0){
  837 + m.put("gsName", schedule.getGsName());
  838 + }
  839 + if(!m.containsKey("fgsName") && schedule.getFgsName()!=null && schedule.getFgsName().trim().length()!=0){
  840 + m.put("fgsName", schedule.getFgsName());
  841 + }
  842 + sjcc.add(schedule.getClZbh() + sdf.format(schedule.getScheduleDate()));
  843 + }
  844 + m.put("jhcc", jhcc.size());
  845 + m.put("sjcc", sjcc.size());
  846 + if(jhcc.size() != 0 && sjcc.size() != 0){
  847 + m.put("ccl", numberFormat.format(((float)sjcc.size() / jhcc.size())*100)+"%");
  848 + }else{
  849 + m.put("ccl", "--");
  850 + }
  851 + int jhbc = culateMileageService.culateJhbc(reals, "");
  852 + int sjbc = culateMileageService.culateSjbc(reals, "");
  853 + m.put("jhbc", jhbc);
  854 + m.put("sjbc", sjbc);
  855 + if(jhbc != 0 && sjbc != 0){
  856 + m.put("zxl", numberFormat.format(((float)sjbc / jhbc)*100)+"%");
  857 + }else{
  858 + m.put("zxl", "--");
  859 + }
  860 + }
  861 + Map<String, Object> tempMap = new HashMap<String, Object>();
  862 + int jhcc = 0;
  863 + int sjcc = 0;
  864 + int jhbc = 0;
  865 + int sjbc = 0;
  866 + int qz = 0;
  867 + for(Map<String, Object> m : resList){
  868 + jhcc += Integer.valueOf(m.get("jhcc").toString());
  869 + sjcc += Integer.valueOf(m.get("sjcc").toString());
  870 + jhbc += Integer.valueOf(m.get("jhbc").toString());
  871 + sjbc += Integer.valueOf(m.get("sjbc").toString());
  872 + qz += Integer.valueOf(m.get("qz").toString());
  873 + }
  874 + tempMap.put("rq", "分类汇总");
  875 + tempMap.put("line", "共" + resList.size() + "条线路");
  876 + tempMap.put("jhcc", jhcc);
  877 + tempMap.put("sjcc", sjcc);
  878 + tempMap.put("jhbc", jhbc);
  879 + tempMap.put("sjbc", sjbc);
  880 + tempMap.put("qz", qz);
  881 + if(jhcc != 0 && sjcc != 0){
  882 + tempMap.put("ccl", numberFormat.format(((float)sjcc / jhcc)*100)+"%");
  883 + }else{
  884 + tempMap.put("ccl", "--");
  885 + }
  886 + if(jhbc != 0 && sjbc != 0){
  887 + tempMap.put("zxl", numberFormat.format(((float)sjbc / jhbc)*100)+"%");
  888 + }else{
  889 + tempMap.put("zxl", "--");
814 } 890 }
  891 + resList.add(tempMap);
815 892
816 return resList; 893 return resList;
817 } 894 }
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -52,6 +52,7 @@ import com.google.common.base.Splitter; @@ -52,6 +52,7 @@ import com.google.common.base.Splitter;
52 import com.google.common.collect.Lists; 52 import com.google.common.collect.Lists;
53 import org.apache.commons.lang3.StringEscapeUtils; 53 import org.apache.commons.lang3.StringEscapeUtils;
54 import org.apache.commons.lang3.StringUtils; 54 import org.apache.commons.lang3.StringUtils;
  55 +import org.drools.compiler.lang.dsl.DSLMapParser.statement_return;
55 import org.joda.time.format.DateTimeFormat; 56 import org.joda.time.format.DateTimeFormat;
56 import org.joda.time.format.DateTimeFormatter; 57 import org.joda.time.format.DateTimeFormatter;
57 import org.slf4j.Logger; 58 import org.slf4j.Logger;
@@ -812,6 +813,20 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -812,6 +813,20 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
812 // int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName); 813 // int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
813 //计算里程和班次数,并放入Map里 814 //计算里程和班次数,并放入Map里
814 Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId()); 815 Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
  816 +
  817 + map.put("jhlc",Arith.add(culateMieageService.culateJhgl(scheduleRealInfos),culateMieageService.culateJhJccgl(scheduleRealInfos)));
  818 + map.put("remMileage",culateMieageService.culateLbgl(lists));
  819 + map.put("addMileage", culateMieageService.culateLjgl(lists));
  820 + double yygl=Arith.add(culateMieageService.culateSjgl(lists),culateMieageService.culateLjgl(lists));
  821 + map.put("yygl", yygl);
  822 + double ksgl=Arith.add(culateMieageService.culateKsgl(lists),culateMieageService.culateJccgl(lists));
  823 + map.put("ksgl",ksgl);
  824 + map.put("realMileage", Arith.add(yygl ,ksgl));
  825 + map.put("jhbc", culateMieageService.culateJhgl(scheduleRealInfos));
  826 + map.put("cjbc", culateMieageService.culateLbbc(lists));
  827 + map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
  828 + int sjbc =culateMieageService.culateLjbc(lists, "")+culateMieageService.culateSjbc(lists, "");
  829 + map.put("sjbc", sjbc);
815 // map=new HashMap<String,Object>(); 830 // map=new HashMap<String,Object>();
816 Map<String, Object> maps; 831 Map<String, Object> maps;
817 for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) { 832 for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
@@ -842,19 +857,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -842,19 +857,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
842 } 857 }
843 858
844 859
845 - map.put("jhlc",Arith.add(culateMieageService.culateJhgl(scheduleRealInfos),culateMieageService.culateJhJccgl(scheduleRealInfos)));  
846 - map.put("remMileage",culateMieageService.culateLbgl(lists));  
847 - map.put("addMileage", culateMieageService.culateLjgl(lists));  
848 - double yygl=Arith.add(culateMieageService.culateSjgl(lists),culateMieageService.culateLjgl(lists));  
849 - map.put("yygl", yygl);  
850 - double ksgl=Arith.add(culateMieageService.culateKsgl(lists),culateMieageService.culateJccgl(lists));  
851 - map.put("ksgl",ksgl);  
852 - map.put("realMileage", Arith.add(yygl ,ksgl));  
853 - map.put("jhbc", culateMieageService.culateJhgl(scheduleRealInfos));  
854 - map.put("cjbc", culateMieageService.culateLbbc(lists));  
855 - map.put("ljbc", culateMieageService.culateLjbc(lists, ""));  
856 - int sjbc =culateMieageService.culateLjbc(lists, "")+culateMieageService.culateSjbc(lists, "");  
857 - map.put("sjbc", sjbc);  
858 860
859 String path = this.getClass().getResource("/").getPath() + "static/pages/forms/"; 861 String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
860 862
@@ -4141,7 +4143,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4141,7 +4143,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4141 return new ArrayList<Map<String, Object>>(); 4143 return new ArrayList<Map<String, Object>>();
4142 } 4144 }
4143 4145
4144 - public List<ScheduleRealInfo> exportWaybill_pl(List<ScheduleRealInfo> listpl,String date,String jName, String clZbh,String lpName) { 4146 + public void exportWaybill_pl(List<ScheduleRealInfo> listpl,String date,String jName, String clZbh,String lpName) {
4145 ReportUtils ee = new ReportUtils(); 4147 ReportUtils ee = new ReportUtils();
4146 ReportRelatedUtils rru = new ReportRelatedUtils(); 4148 ReportRelatedUtils rru = new ReportRelatedUtils();
4147 List<Iterator<?>> list = new ArrayList<Iterator<?>>(); 4149 List<Iterator<?>> list = new ArrayList<Iterator<?>>();
@@ -4159,6 +4161,21 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4159,6 +4161,21 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4159 // int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName); 4161 // int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4160 // int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName); 4162 // int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4161 Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId()); 4163 Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
  4164 + //计算里程和班次数,并放入Map里
  4165 + map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos),culateMieageService.culateJhJccgl(scheduleRealInfos)));
  4166 + map.put("remMileage",culateMieageService.culateLbgl(lists));
  4167 + map.put("addMileage", culateMieageService.culateLjgl(lists));
  4168 + double yygl=Arith.add(culateMieageService.culateSjgl(lists),culateMieageService.culateLjgl(lists));
  4169 + map.put("yygl", yygl);
  4170 + double ksgl=Arith.add(culateMieageService.culateKsgl(lists),culateMieageService.culateJccgl(lists));
  4171 + map.put("ksgl",ksgl);
  4172 + map.put("realMileage", Arith.add(yygl ,ksgl));
  4173 + map.put("jhbc", culateMieageService.culateJhgl(scheduleRealInfos));
  4174 + map.put("cjbc", culateMieageService.culateLbbc(lists));
  4175 + map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
  4176 + int sjbc =culateMieageService.culateLjbc(lists, "")+culateMieageService.culateSjbc(lists, "");
  4177 + map.put("sjbc", sjbc);
  4178 +
4162 Map<String, Object> maps; 4179 Map<String, Object> maps;
4163 for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) { 4180 for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
4164 maps = new HashMap<String, Object>(); 4181 maps = new HashMap<String, Object>();
@@ -4187,27 +4204,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4187,27 +4204,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4187 } 4204 }
4188 } 4205 }
4189 4206
4190 - //计算里程和班次数,并放入Map里  
4191 - map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos),culateMieageService.culateJhJccgl(scheduleRealInfos)));  
4192 - map.put("remMileage",culateMieageService.culateLbgl(lists));  
4193 - map.put("addMileage", culateMieageService.culateLjgl(lists));  
4194 - double yygl=Arith.add(culateMieageService.culateSjgl(lists),culateMieageService.culateLjgl(lists));  
4195 - map.put("yygl", yygl);  
4196 - double ksgl=Arith.add(culateMieageService.culateKsgl(lists),culateMieageService.culateJccgl(lists));  
4197 - map.put("ksgl",ksgl);  
4198 - map.put("realMileage", Arith.add(yygl ,ksgl));  
4199 - map.put("jhbc", culateMieageService.culateJhgl(scheduleRealInfos));  
4200 - map.put("cjbc", culateMieageService.culateLbbc(lists));  
4201 - map.put("ljbc", culateMieageService.culateLjbc(lists, ""));  
4202 - int sjbc =culateMieageService.culateLjbc(lists, "")+culateMieageService.culateSjbc(lists, "");  
4203 - map.put("sjbc", sjbc);  
4204 - 4207 +
4205 String path = this.getClass().getResource("/").getPath() + "static/pages/forms/"; 4208 String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
4206 4209
4207 list.add(listMap.iterator()); 4210 list.add(listMap.iterator());
4208 ee.excelReplace(list, new Object[]{map}, path + "mould/waybill_minhang.xls", 4211 ee.excelReplace(list, new Object[]{map}, path + "mould/waybill_minhang.xls",
4209 path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls"); 4212 path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
4210 - return scheduleRealInfos; 4213 +// return scheduleRealInfos;
4211 } 4214 }
4212 4215
4213 @Override 4216 @Override
src/main/resources/static/pages/forms/mould/turnoutrate.xls
No preview for this file type
src/main/resources/static/pages/mforms/turnoutrates/turnoutrate.html
@@ -92,20 +92,20 @@ @@ -92,20 +92,20 @@
92 <tbody id="tbody"> 92 <tbody id="tbody">
93 93
94 </tbody> 94 </tbody>
95 - <tr>  
96 - <td colspan="1">分类汇总</td>  
97 - <td><span id="total_gs">&nbsp;</span></td>  
98 - <td><span id="total_zhgs">&nbsp;</span></td>  
99 - <td><span id="total_xlts">&nbsp;</span></td>  
100 - <td><span id="total_jh">&nbsp;</span></td>  
101 - <td><span id="total_sj">&nbsp;</span></td>  
102 - <td><span id="total_qz">&nbsp;</span></td>  
103 - <td><span id="total_ccl">&nbsp;</span></td>  
104 - <td><span id="total_bcjh">&nbsp;</span></td>  
105 - <td><span id="total_bcsj">&nbsp;</span></td>  
106 - <td><span id="total_bczxl">&nbsp;</span></td>  
107 - <td><span id="total_sm">&nbsp;</span></td>  
108 - </tr> 95 +<!-- <tr> -->
  96 +<!-- <td colspan="1">分类汇总</td> -->
  97 +<!-- <td><span id="total_gs">&nbsp;</span></td> -->
  98 +<!-- <td><span id="total_zhgs">&nbsp;</span></td> -->
  99 +<!-- <td><span id="total_xlts">&nbsp;</span></td> -->
  100 +<!-- <td><span id="total_jh">&nbsp;</span></td> -->
  101 +<!-- <td><span id="total_sj">&nbsp;</span></td> -->
  102 +<!-- <td><span id="total_qz">&nbsp;</span></td> -->
  103 +<!-- <td><span id="total_ccl">&nbsp;</span></td> -->
  104 +<!-- <td><span id="total_bcjh">&nbsp;</span></td> -->
  105 +<!-- <td><span id="total_bcsj">&nbsp;</span></td> -->
  106 +<!-- <td><span id="total_bczxl">&nbsp;</span></td> -->
  107 +<!-- <td><span id="total_sm">&nbsp;</span></td> -->
  108 +<!-- </tr> -->
109 </table> 109 </table>
110 </div> 110 </div>
111 </div> 111 </div>
@@ -197,53 +197,53 @@ @@ -197,53 +197,53 @@
197 $("#query").on("click",function(){ 197 $("#query").on("click",function(){
198 198
199 line = $("#line").val(); 199 line = $("#line").val();
200 - startDate1=$("#startDate").val();  
201 - endDate1=$("#endDate").val(); 200 + startDate=$("#startDate").val();
  201 + endDate=$("#endDate").val();
202 gsdmTurn=$("#gsdmTurn").val(); 202 gsdmTurn=$("#gsdmTurn").val();
203 fgsdmTurn=$("#fgsdmTurn").val(); 203 fgsdmTurn=$("#fgsdmTurn").val();
204 - if(startDate1!=''&&endDate1!=''){ 204 + if(startDate!=''&&endDate!=''){
205 $post('/mcy_forms/turnoutrate', 205 $post('/mcy_forms/turnoutrate',
206 - { gsdmTurn:gsdmTurn,fgsdmTurn:fgsdmTurn, line:line,startDate:$("#startDate").val(),endDate:$("#endDate").val(),type:'query'},function(result){ 206 + { gsdmTurn:gsdmTurn,fgsdmTurn:fgsdmTurn, line:line,startDate:startDate,endDate:endDate,type:'query'},function(result){
207 // var result=[]; 207 // var result=[];
208 // 把数据填充到模版中 208 // 把数据填充到模版中
209 var tbodyHtml = template('turnoutrate',{list:result}); 209 var tbodyHtml = template('turnoutrate',{list:result});
210 // 把渲染好的模版html文本追加到表格中 210 // 把渲染好的模版html文本追加到表格中
211 $('#tbody').html(tbodyHtml); 211 $('#tbody').html(tbodyHtml);
212 - line = $("#line").val();  
213 - startDate = $("#startDate").val();  
214 - endDate = $("#endDate").val();  
215 - $("#sDate").text(startDate);  
216 - $("#eDate").text(endDate); 212 + line = $("#line").val();
  213 + startDate = $("#startDate").val();
  214 + endDate = $("#endDate").val();
  215 + $("#sDate").text(startDate);
  216 + $("#eDate").text(endDate);
217 217
218 - var total_xlts = 0,total_jh = 0;  
219 - var total_sj = 0,total_qz = 0,total_ccl = 0,total_bcjh = 0;  
220 - var total_bcjh = 0,total_bcsj = 0,total_bczxl = 0;  
221 - var total_gs=0;  
222 - var total_zhgs=0;  
223 - $.each(result, function(i, obj) {  
224 - total_gs +=Number(obj.gsgs);  
225 - total_zhgs +=Number(obj.fgsgs);  
226 - total_xlts += Number(obj.xl);  
227 - total_jh = Number(obj.cchjh)+Number(total_jh);  
228 - total_sj = Number(obj.cchsj)+Number(total_sj);  
229 - total_qz = Number(obj.cchqz)+Number(total_qz); 218 +// var total_xlts = 0,total_jh = 0;
  219 +// var total_sj = 0,total_qz = 0,total_ccl = 0,total_bcjh = 0;
  220 +// var total_bcjh = 0,total_bcsj = 0,total_bczxl = 0;
  221 +// var total_gs=0;
  222 +// var total_zhgs=0;
  223 +// $.each(result, function(i, obj) {
  224 +// total_gs +=Number(obj.gsgs);
  225 +// total_zhgs +=Number(obj.fgsgs);
  226 +// total_xlts += Number(obj.xl);
  227 +// total_jh = Number(obj.cchjh)+Number(total_jh);
  228 +// total_sj = Number(obj.cchsj)+Number(total_sj);
  229 +// total_qz = Number(obj.cchqz)+Number(total_qz);
230 230
231 - total_ccl =(Number(total_sj)/Number(total_jh))*100;  
232 - total_bcjh = Number(obj.bcjh)+Number(total_bcjh);  
233 - total_bcsj = Number(obj.bcsj)+Number(total_bcsj);  
234 - total_bczxl = (Number(total_bcsj)/Number(total_bcjh))*100; 231 +// total_ccl =(Number(total_sj)/Number(total_jh))*100;
  232 +// total_bcjh = Number(obj.bcjh)+Number(total_bcjh);
  233 +// total_bcsj = Number(obj.bcsj)+Number(total_bcsj);
  234 +// total_bczxl = (Number(total_bcsj)/Number(total_bcjh))*100;
235 235
236 - });  
237 - $("#total_gs").text(total_gs);  
238 - $("#total_zhgs").text(total_zhgs);  
239 - $("#total_xlts").text(total_xlts);  
240 - $("#total_jh").text(total_jh);  
241 - $("#total_sj").text(total_sj);  
242 - $("#total_qz").text(total_qz);  
243 - $("#total_ccl").text(total_ccl.toFixed(2)+'%');  
244 - $("#total_bcjh").text(total_bcjh);  
245 - $("#total_bcsj").text(total_bcsj);  
246 - $("#total_bczxl").text(total_bczxl.toFixed(2)+'%'); 236 +// });
  237 +// $("#total_gs").text(total_gs);
  238 +// $("#total_zhgs").text(total_zhgs);
  239 +// $("#total_xlts").text(total_xlts);
  240 +// $("#total_jh").text(total_jh);
  241 +// $("#total_sj").text(total_sj);
  242 +// $("#total_qz").text(total_qz);
  243 +// $("#total_ccl").text(total_ccl.toFixed(2)+'%');
  244 +// $("#total_bcjh").text(total_bcjh);
  245 +// $("#total_bcsj").text(total_bcsj);
  246 +// $("#total_bczxl").text(total_bczxl.toFixed(2)+'%');
247 247
248 var temp = {}; 248 var temp = {};
249 var today_account = 0; 249 var today_account = 0;
@@ -278,18 +278,23 @@ @@ -278,18 +278,23 @@
278 <script type="text/html" id="turnoutrate"> 278 <script type="text/html" id="turnoutrate">
279 {{each list as obj i}} 279 {{each list as obj i}}
280 <tr> 280 <tr>
281 - <td>{{obj.rq}}</td>  
282 - <td>{{obj.gs}}</td>  
283 - <td>{{obj.zhgs}}</td>  
284 - <td>{{obj.xl}}</td>  
285 - <td>{{obj.cchjh}}</td>  
286 - <td>{{obj.cchsj}}</td>  
287 - <td>{{obj.cchqz}}</td>  
288 - <td>{{obj.chl}}</td>  
289 - <td>{{obj.bcjh}}</td>  
290 - <td>{{obj.bcsj}}</td>  
291 - <td>{{obj.bbzxl}}</td>  
292 - <td>{{obj.gs}}</td> 281 + {{if obj.rq == '分类汇总'}}
  282 + <td colspan='3'>{{obj.rq}}</td>
  283 + {{/if}}
  284 + {{if obj.rq != '分类汇总'}}
  285 + <td>{{obj.rq}}</td>
  286 + <td>{{obj.gsName}}</td>
  287 + <td>{{obj.fgsName}}</td>
  288 + {{/if}}
  289 + <td>{{obj.line}}</td>
  290 + <td>{{obj.jhcc}}</td>
  291 + <td>{{obj.sjcc}}</td>
  292 + <td>{{obj.qz}}</td>
  293 + <td>{{obj.ccl}}</td>
  294 + <td>{{obj.jhbc}}</td>
  295 + <td>{{obj.sjbc}}</td>
  296 + <td>{{obj.zxl}}</td>
  297 + <td>{{obj.sm}}</td>
293 </tr> 298 </tr>
294 {{/each}} 299 {{/each}}
295 {{if list.length == 0}} 300 {{if list.length == 0}}
src/main/resources/static/pages/oil/list_ph.html
@@ -209,7 +209,7 @@ @@ -209,7 +209,7 @@
209 209
210 </td> 210 </td>
211 <td> 211 <td>
212 - {{obj.jsy}} 212 + {{obj.jsy}}/{{obj.name}}
213 </td> 213 </td>
214 <td> 214 <td>
215 215
src/main/resources/static/real_control_v2/js/minute_timer.js
1 -/** 时钟 */  
2 -var gb_minute_timer = (function () {  
3 -  
4 -  
5 - var getServerTime = function (cb) {  
6 - function oncallback(jqXHR) {  
7 - var time = jqXHR && jqXHR.getResponseHeader("Date");  
8 - if (time)  
9 - callback(new Date(time))  
10 - }  
11 -  
12 - if ("function" == typeof callback)  
13 - $.ajax({  
14 - url: "/real_control_v2/assets/imgs/time.gif",  
15 - type: "HEAD"  
16 - }).done(function (data, textStatus, jqXHR) {  
17 - oncallback(jqXHR)  
18 - }).fail(function (jqXHR, textStatus, errorThrown) {  
19 - oncallback(jqXHR)  
20 - })  
21 - };  
22 -  
23 -  
24 - setTimeout(function () {  
25 - getServerTime(function () {  
26 - console.log('cb,,', cb);  
27 - });  
28 - }, 5000);  
29 - 1 +/** 时钟 */
  2 +var gb_minute_timer = (function () {
  3 +
  4 +
  5 + var getServerTime = function (cb) {
  6 + function oncallback(jqXHR) {
  7 + var time = jqXHR && jqXHR.getResponseHeader("Date");
  8 + if (time)
  9 + callback(new Date(time))
  10 + }
  11 +
  12 + if ("function" == typeof callback)
  13 + $.ajax({
  14 + url: "/real_control_v2/assets/imgs/time.gif",
  15 + type: "HEAD"
  16 + }).done(function (data, textStatus, jqXHR) {
  17 + oncallback(jqXHR)
  18 + }).fail(function (jqXHR, textStatus, errorThrown) {
  19 + oncallback(jqXHR)
  20 + })
  21 + };
  22 +
  23 +
  24 + setTimeout(function () {
  25 + getServerTime(function () {
  26 + console.log('cb,,', cb);
  27 + });
  28 + }, 5000);
  29 +
30 })(); 30 })();
31 \ No newline at end of file 31 \ No newline at end of file