From e3067f58cce422bbd26a7729bf59f5f4f34a530f Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 14 二月 2025 14:13:38 +0800
Subject: [PATCH] jtt808初始化
---
server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java | 25 +++
server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java | 2
server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java | 75 +++++-----
server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java | 4
server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java | 4
server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java | 1
server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java | 6
server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java | 11 -
server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java | 42 +++++
server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java | 13 +
server/jtt808_parent/commons/src/main/java/org/yzh/commons/util/Byte2NumberUtils.java | 22 +++
server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/attribute/Battery.java | 119 +++++++++++++++++
server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java | 19 ++
server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java | 5
server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java | 26 ++-
15 files changed, 311 insertions(+), 63 deletions(-)
diff --git a/server/jtt808_parent/commons/src/main/java/org/yzh/commons/util/Byte2NumberUtils.java b/server/jtt808_parent/commons/src/main/java/org/yzh/commons/util/Byte2NumberUtils.java
new file mode 100644
index 0000000..85602b1
--- /dev/null
+++ b/server/jtt808_parent/commons/src/main/java/org/yzh/commons/util/Byte2NumberUtils.java
@@ -0,0 +1,22 @@
+package org.yzh.commons.util;
+
+import org.apache.commons.codec.binary.Hex;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.math.BigInteger;
+import java.util.*;
+
+/**
+ * @author yezhihao
+ * https://gitee.com/yezhihao/jt808-server
+ */
+public class Byte2NumberUtils {
+ public static Integer bytesToInteger(byte[] bArray) {
+ try {
+ return Integer.valueOf(Hex.encodeHexString(bArray),16) ;
+ }catch (Exception e){
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java
index 40c8c67..88cde2e 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/JT808.java
@@ -89,4 +89,5 @@
int 骞冲彴涓嬭娑堟伅淇濈暀 = 0x8F00 - 0x8FFF;
int 鍘傚晢鑷畾涔変笂琛屾秷鎭� = 0xE000 - 0xEFFF;//2019 new
int 鍟嗚嚜瀹氫箟涓嬭娑堟伅 = 0xF000 - 0xFFFF;//2019 new
+ int 缁堢鏍℃椂璇锋眰涓婅 = 0x0F01;//
}
\ No newline at end of file
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java
index a3f2c27..137d42c 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverter.java
@@ -49,7 +49,10 @@
.addSchema(AttributeKey.AlarmTPMS, ProtostarUtil.getRuntimeSchema(AlarmTPMS.class, 0))
.addSchema(AttributeKey.InstallErrorMsg, NumberSchema.DWORD_INT)
- .addSchema(AttributeKey.Battery, NumberSchema.BYTE_BYTE)
+ .addSchema(AttributeKey.Battery, Battery.SCHEMA)
+ .addSchema(AttributeKey.Battery0102, NumberSchema.DWORD_INT)
+ .addSchema(AttributeKey.Battery0304, NumberSchema.DWORD_INT)
+ .addSchema(AttributeKey.Battery0506, NumberSchema.DWORD_INT)
.addSchema(AttributeKey.ExtendLength, NumberSchema.DWORD_INT)
.addSchema(AttributeKey.CarDoorStatus, NumberSchema.DWORD_INT)
.addSchema(AttributeKey.CarWindowStatus, NumberSchema.DWORD_INT)
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java
index 6997e51..41c635c 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeConverterYue.java
@@ -38,6 +38,10 @@
.addSchema(AttributeKey.DriverBehaviorAlarm, NumberSchema.WORD_INT)
.addSchema(AttributeKey.Signal, NumberSchema.DWORD_INT)
+ .addSchema(AttributeKey.Battery, Battery.SCHEMA)
+ .addSchema(AttributeKey.Battery0102, NumberSchema.DWORD_INT)
+ .addSchema(AttributeKey.Battery0304, NumberSchema.DWORD_INT)
+ .addSchema(AttributeKey.Battery0506, NumberSchema.DWORD_INT)
.addSchema(AttributeKey.IoState, NumberSchema.WORD_INT)
.addSchema(AttributeKey.AnalogQuantity, NumberSchema.DWORD_INT)
.addSchema(AttributeKey.SignalStrength, NumberSchema.BYTE_INT)
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java
index 0ed9290..2fb59cf 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/AttributeKey.java
@@ -6,42 +6,45 @@
* https://gitee.com/yezhihao/jt808-server
*/
public interface AttributeKey {
- Long Mileage = 1L; // 0x01 閲岀▼,鏁版嵁绫诲瀷涓篋WORD,鍗曚綅涓�1/10km,瀵瑰簲杞︿笂閲岀▼琛ㄨ鏁�
- Long Fuel = 2L; // 0x02 娌归噺,鏁版嵁绫诲瀷涓篧ORD,鍗曚綅涓�1/10L,瀵瑰簲杞︿笂娌归噺琛ㄨ鏁�
- Long Speed = 3L; // 0x03 琛岄┒璁板綍鍔熻兘鑾峰彇鐨勯�熷害,鏁版嵁绫诲瀷涓篧ORD,鍗曚綅涓�1/10km/h
- Long AlarmEventId = 4L; // 0x04 闇�瑕佷汉宸ョ‘璁ゆ姤璀︿簨浠剁殑ID,鏁版嵁绫诲瀷涓篧ORD,浠�1寮�濮嬭鏁�
- Long TirePressure = 5L; // 0x05 鑳庡帇,鍗曚綅涓篜a,鏍囧畾杞瓙鐨勯『搴忎负浠庤溅澶村紑濮嬩粠宸﹀埌鍙抽『搴忔帓鍒�,澶氫綑鐨勫瓧鑺備负0xFF,琛ㄧず鏃犳晥鏁版嵁
- Long CarriageTemperature = 6L; // 0x06 杞﹀帰娓╁害,鍗曚綅涓烘憚姘忓害,鍙栧�艰寖鍥翠负-32767~+32767,鏈�楂樹綅涓�1琛ㄧず璐熸暟
- Long OverSpeedAlarm = 17L; // 0x11 瓒呴�熸姤璀﹂檮鍔犱俊鎭琛�28
- Long InOutAreaAlarm = 18L; // 0x12 杩涘嚭鍖哄煙/璺嚎鎶ヨ闄勫姞淇℃伅瑙佽〃29
- Long RouteDriveTimeAlarm = 19L; // 0x13 璺琛岄┒鏃堕棿涓嶈冻/杩囬暱鎶ヨ闄勫姞淇℃伅瑙佽〃30
+ Integer Mileage = 1; // 0x01 閲岀▼,鏁版嵁绫诲瀷涓篋WORD,鍗曚綅涓�1/10km,瀵瑰簲杞︿笂閲岀▼琛ㄨ鏁�
+ Integer Fuel = 2; // 0x02 娌归噺,鏁版嵁绫诲瀷涓篧ORD,鍗曚綅涓�1/10L,瀵瑰簲杞︿笂娌归噺琛ㄨ鏁�
+ Integer Speed = 3; // 0x03 琛岄┒璁板綍鍔熻兘鑾峰彇鐨勯�熷害,鏁版嵁绫诲瀷涓篧ORD,鍗曚綅涓�1/10km/h
+ Integer AlarmEventId = 4; // 0x04 闇�瑕佷汉宸ョ‘璁ゆ姤璀︿簨浠剁殑ID,鏁版嵁绫诲瀷涓篧ORD,浠�1寮�濮嬭鏁�
+ Integer TirePressure = 5; // 0x05 鑳庡帇,鍗曚綅涓篜a,鏍囧畾杞瓙鐨勯『搴忎负浠庤溅澶村紑濮嬩粠宸﹀埌鍙抽『搴忔帓鍒�,澶氫綑鐨勫瓧鑺備负0xFF,琛ㄧず鏃犳晥鏁版嵁
+ Integer CarriageTemperature = 6; // 0x06 杞﹀帰娓╁害,鍗曚綅涓烘憚姘忓害,鍙栧�艰寖鍥翠负-32767~+32767,鏈�楂樹綅涓�1琛ㄧず璐熸暟
+ Integer OverSpeedAlarm = 17; // 0x11 瓒呴�熸姤璀﹂檮鍔犱俊鎭琛�28
+ Integer InOutAreaAlarm = 18; // 0x12 杩涘嚭鍖哄煙/璺嚎鎶ヨ闄勫姞淇℃伅瑙佽〃29
+ Integer RouteDriveTimeAlarm = 19; // 0x13 璺琛岄┒鏃堕棿涓嶈冻/杩囬暱鎶ヨ闄勫姞淇℃伅瑙佽〃30
- Long VideoRelatedAlarm = 20L; // 0x14 瑙嗛鐩稿叧鎶ヨ,DWORD,鎸変綅璁剧疆,鏍囧織浣嶅畾涔夎琛�14
- Long VideoMissingStatus = 21L; // 0x15 瑙嗛淇″彿涓㈠け鎶ヨ鐘舵��,DWORD,鎸変綅璁剧疆,bit0~bit31鍒嗗埆琛ㄧず绗�1~32涓�昏緫閫氶亾,鐩稿簲浣嶄负1鍒欒〃绀鸿閫昏緫閫氶亾鍙戠敓瑙嗛淇″彿涓㈠け
- Long VideoObscuredStatus = 22L; // 0x16 瑙嗛淇″彿閬尅鎶ヨ鐘舵��,DWORD,鎸変綅璁剧疆,bit0~bit31鍒嗗埆琛ㄧず绗�1~32涓�昏緫閫氶亾,鐩稿簲浣嶄负1鍒欒〃绀鸿閫昏緫閫氶亾鍙戠敓瑙嗛淇″彿閬尅
- Long StorageFailureStatus = 23L; // 0x17 瀛樺偍鍣ㄦ晠闅滄姤璀︾姸鎬�,WORD,鎸変綅璁剧疆.bit0~bit11鍒嗗埆琛ㄧず绗�1~12涓富瀛樺偍鍣�.bit12~bit15鍒嗗埆琛ㄧず绗�1~4涓伨澶囧瓨鍌ㄨ缃�,鐩稿簲浣嶄负1鍒欒〃绀鸿瀛樺偍鍣ㄥ彂鐢熸晠闅�
- Long DriverBehaviorAlarm = 24L; // 0x18 寮傚父椹鹃┒琛屼负鎶ヨ璇︾粏鎻忚堪,WORD,瀹氫箟瑙佽〃15
+ Integer VideoRelatedAlarm = 20; // 0x14 瑙嗛鐩稿叧鎶ヨ,DWORD,鎸変綅璁剧疆,鏍囧織浣嶅畾涔夎琛�14
+ Integer VideoMissingStatus = 21; // 0x15 瑙嗛淇″彿涓㈠け鎶ヨ鐘舵��,DWORD,鎸変綅璁剧疆,bit0~bit31鍒嗗埆琛ㄧず绗�1~32涓�昏緫閫氶亾,鐩稿簲浣嶄负1鍒欒〃绀鸿閫昏緫閫氶亾鍙戠敓瑙嗛淇″彿涓㈠け
+ Integer VideoObscuredStatus = 22; // 0x16 瑙嗛淇″彿閬尅鎶ヨ鐘舵��,DWORD,鎸変綅璁剧疆,bit0~bit31鍒嗗埆琛ㄧず绗�1~32涓�昏緫閫氶亾,鐩稿簲浣嶄负1鍒欒〃绀鸿閫昏緫閫氶亾鍙戠敓瑙嗛淇″彿閬尅
+ Integer StorageFailureStatus = 23; // 0x17 瀛樺偍鍣ㄦ晠闅滄姤璀︾姸鎬�,WORD,鎸変綅璁剧疆.bit0~bit11鍒嗗埆琛ㄧず绗�1~12涓富瀛樺偍鍣�.bit12~bit15鍒嗗埆琛ㄧず绗�1~4涓伨澶囧瓨鍌ㄨ缃�,鐩稿簲浣嶄负1鍒欒〃绀鸿瀛樺偍鍣ㄥ彂鐢熸晠闅�
+ Integer DriverBehaviorAlarm = 24; // 0x18 寮傚父椹鹃┒琛屼负鎶ヨ璇︾粏鎻忚堪,WORD,瀹氫箟瑙佽〃15
- Long Signal = 37L; // 0x25 鎵╁睍杞﹁締淇″彿鐘舵�佷綅,鍙傛暟椤规牸寮忓拰瀹氫箟瑙佽〃31
- Long IoState = 42L; // 0x2a I0鐘舵�佷綅,鍙傛暟椤规牸寮忓拰瀹氫箟瑙佽〃32
- Long AnalogQuantity = 43L; // 0x2b 妯℃嫙閲�,bit[0~15],AD0L;bit[l6~31],ADl
- Long SignalStrength = 48L; // 0x30 鏁版嵁绫诲瀷涓築YTE,鏃犵嚎閫氫俊缃戠粶淇″彿寮哄害
- Long GnssCount = 49L; // 0x31 鏁版嵁绫诲瀷涓築YTE,GNSS瀹氫綅鍗槦鏁�
- Long AlarmADAS = 100L; // 0x64 楂樼骇椹鹃┒杈呭姪绯荤粺鎶ヨ
- Long AlarmDSM = 101L; // 0x65 椹鹃┒鍛樼姸鎬佺洃娴�
- Long AlarmTPMS = 102L; // 0x66 杞儙姘斿帇鐩戞祴绯荤粺
- Long AlarmBSD = 103L; // 0x67 鐩茬偣鐩戞祴
- Long InstallErrorMsg = 241L; // 0xF1 瀹夎寮傚父淇℃伅,鐢卞巶瀹惰嚜瀹氫箟(绮ゆ爣)
- Long AlgorithmErrorMsg = 242L; // 0xF2 绠楁硶寮傚父淇℃伅,鐢卞巶瀹惰嚜瀹氫箟(绮ゆ爣)
- Long Battery = 0Xe3L; // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
- Long ExtendLength = 0Xf3L; // 0Xf3 n 琛ㄧず鍚庣画鎵╁睍鏁版嵁鎬婚暱搴︺�備负 OBD琛岃溅鏁版嵁椤瑰畾涔夈�傚悗缁畾涔夌殑鏁版嵁椤硅琛� 8-32瀹氫箟(娉ㄦ剰璇ュ畾涔夌殑鏁版嵁椤规瀯鎴愬寘鎷絾涓嶄竴瀹氬叏鏈�)銆�
- Long CarDoorStatus = 0xD0L; // 0xD0 杞﹂棬閿佺姸鎬佷綅锛岃琛� 8-24杞﹂棬閿佺姸鎬佷綅
- Long CarWindowStatus = 0xD1L; // 0xD1 杞︾獥鐘舵�佷綅锛岃琛� 8-25杞︾獥鐘舵�佷綅銆�
- Long SafetyBelt = 0xD2L; // 0xD2瀹夊叏甯︾姸鎬佷綅锛岃琛� 8-26瀹夊叏甯︾姸鎬佷綅銆�
- Long CarAlermStatus = 0xD3L; // 0xD3杞﹁締璀︽儏鐘舵�佷綅锛岃琛� 8-27杞﹁締璀︽儏鐘舵�佷綅銆�
- Long CarFaultStatus = 0xD4L; // 0xD4杞﹁締鏁呴殰鐘舵�佷綅锛岃琛� 8-28杞﹁締鏁呴殰鐘舵�佷綅銆� 銆�
- Long CarGearStatus = 0xD5L; // 0xD5杞﹁締妗d綅鐘舵�侊紝瑙佽〃 8-29杞﹁締妗d綅鐘舵�併��
- Long CarTireStatus = 0xD6L; // 0xD6杞﹁締鑳庡帇鐘舵�併�傦紙姣忎釜杞﹁儙淇℃伅鍗犵敤 5涓瓧鑺傦級瑙佽〃 8-30杞﹁締鑳庡帇鐘舵�併��
- Long Temprature = 0xC0L; // 0xC0锛涙湁绗﹀彿鏁帮紝鍗曚綅 0.1搴︺��
- Long BaseStationExtend = 0xEFL; // 0xEF 鍩虹珯闄勫姞鏁版嵁
+ Integer Signal = 37; // 0x25 鎵╁睍杞﹁締淇″彿鐘舵�佷綅,鍙傛暟椤规牸寮忓拰瀹氫箟瑙佽〃31
+ Integer IoState = 42; // 0x2a I0鐘舵�佷綅,鍙傛暟椤规牸寮忓拰瀹氫箟瑙佽〃32
+ Integer AnalogQuantity = 43; // 0x2b 妯℃嫙閲�,bit[0~15],AD0;bit[l6~31],ADl
+ Integer SignalStrength = 48; // 0x30 鏁版嵁绫诲瀷涓築YTE,鏃犵嚎閫氫俊缃戠粶淇″彿寮哄害
+ Integer GnssCount = 49; // 0x31 鏁版嵁绫诲瀷涓築YTE,GNSS瀹氫綅鍗槦鏁�
+ Integer AlarmADAS = 100; // 0x64 楂樼骇椹鹃┒杈呭姪绯荤粺鎶ヨ
+ Integer AlarmDSM = 101; // 0x65 椹鹃┒鍛樼姸鎬佺洃娴�
+ Integer AlarmTPMS = 102; // 0x66 杞儙姘斿帇鐩戞祴绯荤粺
+ Integer AlarmBSD = 103; // 0x67 鐩茬偣鐩戞祴
+ Integer InstallErrorMsg = 241; // 0xF1 瀹夎寮傚父淇℃伅,鐢卞巶瀹惰嚜瀹氫箟(绮ゆ爣)
+ Integer AlgorithmErrorMsg = 242; // 0xF2 绠楁硶寮傚父淇℃伅,鐢卞巶瀹惰嚜瀹氫箟(绮ゆ爣)
+ Integer Battery = 0Xe3; // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
+ Integer Battery0102 = 0x0102; // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
+ Integer Battery0304 = 0x0304; // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
+ Integer Battery0506 = 0x0506; // 0Xe3 data={0x01,0x02,0x03,0x04,0x05,0x06} 鐢垫睜鐢甸噺鏄� 0x0102锛岀數姹犵數鍘嬫槸0x0304锛屽厖鐢电數鍘嬫槸 0x0506,鐢靛帇鍗曚綅鏄�0.001v锛屼笂浼� 1000琛ㄧず 1v銆�
+ Integer ExtendLength = 0Xf3; // 0Xf3 n 琛ㄧず鍚庣画鎵╁睍鏁版嵁鎬婚暱搴︺�備负 OBD琛岃溅鏁版嵁椤瑰畾涔夈�傚悗缁畾涔夌殑鏁版嵁椤硅琛� 8-32瀹氫箟(娉ㄦ剰璇ュ畾涔夌殑鏁版嵁椤规瀯鎴愬寘鎷絾涓嶄竴瀹氬叏鏈�)銆�
+ Integer CarDoorStatus = 0xD0; // 0xD0 杞﹂棬閿佺姸鎬佷綅锛岃琛� 8-24杞﹂棬閿佺姸鎬佷綅
+ Integer CarWindowStatus = 0xD1; // 0xD1 杞︾獥鐘舵�佷綅锛岃琛� 8-25杞︾獥鐘舵�佷綅銆�
+ Integer SafetyBelt = 0xD2; // 0xD2瀹夊叏甯︾姸鎬佷綅锛岃琛� 8-26瀹夊叏甯︾姸鎬佷綅銆�
+ Integer CarAlermStatus = 0xD3; // 0xD3杞﹁締璀︽儏鐘舵�佷綅锛岃琛� 8-27杞﹁締璀︽儏鐘舵�佷綅銆�
+ Integer CarFaultStatus = 0xD4; // 0xD4杞﹁締鏁呴殰鐘舵�佷綅锛岃琛� 8-28杞﹁締鏁呴殰鐘舵�佷綅銆� 銆�
+ Integer CarGearStatus = 0xD5; // 0xD5杞﹁締妗d綅鐘舵�侊紝瑙佽〃 8-29杞﹁締妗d綅鐘舵�併��
+ Integer CarTireStatus = 0xD6; // 0xD6杞﹁締鑳庡帇鐘舵�併�傦紙姣忎釜杞﹁儙淇℃伅鍗犵敤 5涓瓧鑺傦級瑙佽〃 8-30杞﹁締鑳庡帇鐘舵�併��
+ Integer Temprature = 0xC0; // 0xC0锛涙湁绗﹀彿鏁帮紝鍗曚綅 0.1搴︺��
+ Integer BaseStationExtend = 0xEF; // 0xEF 鍩虹珯闄勫姞鏁版嵁
}
\ No newline at end of file
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/attribute/Battery.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/attribute/Battery.java
new file mode 100644
index 0000000..24e98a9
--- /dev/null
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/commons/transform/attribute/Battery.java
@@ -0,0 +1,119 @@
+package org.yzh.protocol.commons.transform.attribute;
+
+import io.github.yezhihao.protostar.Schema;
+import io.github.yezhihao.protostar.util.ByteBufUtils;
+import io.netty.buffer.ByteBuf;
+import org.yzh.commons.util.Byte2NumberUtils;
+
+import java.util.Arrays;
+
+/**
+ * 鑳庡帇 0x05
+ * length 30
+ */
+
+public class Battery {
+
+ public static final Integer key = 0Xe3;
+
+ public static final Schema<Battery> SCHEMA = new TirePressureSchema();
+
+ private byte[] value;
+ private Integer capacity;//鐢垫睜鐢甸噺
+ private Float voltage;//鐢垫睜鐢靛帇
+ private Float chargeVoltage;//鍏呯數鐢靛帇
+
+ public Integer getCapacity() {
+ return capacity;
+ }
+
+ public void setCapacity(Integer capacity) {
+ this.capacity = capacity;
+ }
+
+ public Float getVoltage() {
+ return voltage;
+ }
+
+ public void setVoltage(Float voltage) {
+ this.voltage = voltage;
+ }
+
+ public Float getChargeVoltage() {
+ return chargeVoltage;
+ }
+
+ public void setChargeVoltage(Float chargeVoltage) {
+ this.chargeVoltage = chargeVoltage;
+ }
+
+ public Battery() {
+ }
+
+ /**
+ * byte[] data={0x01,0x02,0x03,0x04,0x05,0x06}
+ * 鐢垫睜鐢甸噺鏄� 0x0102锛�
+ * 鐢垫睜鐢靛帇鏄�0x0304锛�
+ * 鍏呯數鐢靛帇鏄� 0x0506,
+ * 鐢靛帇鍗曚綅鏄�0.001v锛�
+ * 涓婁紶 1000琛ㄧず 1v銆�
+ * @param value
+ */
+ public Battery(byte[] value) {
+ this.value = value;
+ if(value!=null && value.length>2){
+ this.setCapacity(Byte2NumberUtils.bytesToInteger(new byte[]{value[0],value[1]}));
+ }
+ if(value!=null && value.length>4){
+ try {
+ this.setVoltage((float) (Byte2NumberUtils.bytesToInteger(new byte[]{value[2],value[3]}) * 0.001));
+ }catch (Exception e){
+
+ }
+ }
+ if(value!=null && value.length>6){
+ try {
+ this.setChargeVoltage((float) (Byte2NumberUtils.bytesToInteger(new byte[]{value[4],value[4]}) * 0.001));
+ }catch (Exception e){
+
+ }
+ }
+ }
+
+ public byte[] getValue() {
+ return value;
+ }
+
+ public void setValue(byte[] value) {
+ this.value = value;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder(32);
+ sb.append("Battery{value=").append(Arrays.toString(value));
+ sb.append('}');
+ return sb.toString();
+ }
+
+ private static class TirePressureSchema implements Schema<Battery> {
+
+ private TirePressureSchema() {
+ }
+
+ @Override
+ public Battery readFrom(ByteBuf input) {
+ int len = input.readableBytes();
+ if (len > 30)
+ len = 30;
+ byte[] value = new byte[len];
+ input.readBytes(value);
+ return new Battery(value);
+ }
+
+ @Override
+ public void writeTo(ByteBuf output, Battery message) {
+ ByteBufUtils.writeFixedLength(output, 30, message.value);
+ }
+ }
+}
\ No newline at end of file
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java
index 3a62c73..759a232 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0107.java
@@ -2,6 +2,7 @@
import io.github.yezhihao.netmc.core.model.Response;
import io.github.yezhihao.protostar.annotation.Field;
+import io.github.yezhihao.protostar.annotation.MergeSuperclass;
import io.github.yezhihao.protostar.annotation.Message;
import org.yzh.protocol.basics.JTMessage;
import org.yzh.protocol.commons.JT808;
@@ -10,6 +11,7 @@
* @author yezhihao
* https://gitee.com/yezhihao/jt808-server
*/
+@MergeSuperclass
@Message(JT808.鏌ヨ缁堢灞炴�у簲绛�)
public class T0107 extends JTMessage implements Response {
diff --git a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java
index f9ac306..04e3596 100644
--- a/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java
+++ b/server/jtt808_parent/jtt808-protocol/src/main/java/org/yzh/protocol/t808/T0200.java
@@ -2,6 +2,8 @@
import io.github.yezhihao.protostar.annotation.Field;
import io.github.yezhihao.protostar.annotation.Message;
+import io.swagger.models.auth.In;
+import lombok.Data;
import org.yzh.protocol.basics.JTMessage;
import org.yzh.protocol.commons.JT808;
import org.yzh.protocol.commons.transform.AttributeConverter;
@@ -15,6 +17,7 @@
* https://gitee.com/yezhihao/jt808-server
*/
@Message(JT808.浣嶇疆淇℃伅姹囨姤)
+@Data
public class T0200 extends JTMessage {
/**
@@ -39,7 +42,7 @@
private LocalDateTime deviceTime;
@Field(converter = AttributeConverter.class, desc = "浣嶇疆闄勫姞淇℃伅", version = {-1, 0})
@Field(converter = AttributeConverterYue.class, desc = "浣嶇疆闄勫姞淇℃伅(绮ゆ爣)", version = 1)
- private Map<Long, Object> attributes;
+ private Map<Integer, Object> attributes;
public int getWarnBit() {
return warnBit;
@@ -105,13 +108,7 @@
this.deviceTime = deviceTime;
}
- public Map<Long, Object> getAttributes() {
- return attributes;
- }
- public void setAttributes(Map<Long, Object> attributes) {
- this.attributes = attributes;
- }
@Override
public String toString() {
diff --git a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java
index 7e68d68..da490ec 100644
--- a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java
+++ b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/Elucidator.java
@@ -4,9 +4,20 @@
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.junit.platform.commons.util.StringUtils;
import org.yzh.protocol.JT808Beans;
import org.yzh.protocol.basics.JTMessage;
import org.yzh.protocol.codec.JTMessageAdapter;
+import org.yzh.protocol.codec.JTMessageDecoder;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.ArrayList;
+import java.util.List;
/**
* 瑙g爜鍒嗘瀽
@@ -18,12 +29,37 @@
public static final JTMessageAdapter coder = new JTMessageAdapter("org.yzh.protocol");
public static void main(String[] args) {
- String hex = "0200004c067244400211004600000000000c0400015b197c06c8362e00000000000025020610234801040000083f02020000030200002504000000002a0200002b0400000000300117310100e3060000129d0000f2020000497e";
+ String hex = "0200004c06724440021104ad00000000000c000301e4c49606fcbc04003c00000000250213220412010400001a4e02020000030200002504000000002a0200002b0400000000300115310112e306000012990000f2020000ac7e";
+// String hex = "0201004e0672444002110097019100000000000c0001015b197c06c8362e00000000000025020616592601040000083f02020000030200002504000000002a0200002b0400000000300117310100e306000012990000f2020000187e";
// String hex = "020000d40123456789017fff000004000000080006eeb6ad02633df7013800030063200707192359642f000000400101020a0a02010a1e00640001b2070003640e200707192359000100000061646173200827111111010101652f000000410202020a0000000a1e00c8000516150006c81c20070719235900020000000064736d200827111111020202662900000042031e012c00087a23000a2c2a200707192359000300000074706d732008271111110303030067290000004304041e0190000bde31000d90382007071923590004000000006273642008271111110404049d";
- JTMessage msg = H2019(T0200JSATL12());
+// JTMessage msg = H2019(T0200JSATL12());
- msg = decode(hex);
+// msg = decode(hex);
// hex = encode(msg);
+// System.out.println(decode(hex));
+
+ try (FileInputStream fis = new FileInputStream(new File("C:\\Users\\T14\\Desktop\\member.xlsx"));
+ Workbook workbook = new XSSFWorkbook(fis)) {
+ Sheet sheet = workbook.getSheetAt(0); // 鑾峰彇绗竴涓伐浣滆〃
+ List<String> phoneNumbers = new ArrayList<>();
+ for (Row row : sheet) {
+ Cell cell = row.getCell(1); // 鍋囪鎵嬫満鍙峰湪绗竴鍒�
+ if (cell != null) {
+ if (cell.getCellType() == CellType.NUMERIC){
+ System.out.println(cell.getCellType());
+ phoneNumbers.add( cell.getNumericCellValue()+""); // 娣诲姞鍒板垪琛ㄤ腑
+ }
+ cell.setCellType(CellType.STRING); // 纭繚鍗曞厓鏍肩被鍨嬩负瀛楃涓�
+ String phoneNumber = cell.getStringCellValue(); // 鑾峰彇鍗曞厓鏍煎�间綔涓哄瓧绗︿覆
+ phoneNumbers.add( phoneNumber); // 娣诲姞鍒板垪琛ㄤ腑
+ }
+ }
+ // 杈撳嚭鎵嬫満鍙峰垪琛�
+ phoneNumbers.forEach(System.out::println);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
}
private static String encode(JTMessage message) {
diff --git a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java
index 18a9741..a5a1ff0 100644
--- a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java
+++ b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/JT808Beans.java
@@ -2,6 +2,7 @@
import io.github.yezhihao.protostar.util.KeyValuePair;
import io.netty.buffer.Unpooled;
+import io.swagger.models.auth.In;
import org.yzh.protocol.basics.JTMessage;
import org.yzh.protocol.commons.Action;
import org.yzh.protocol.commons.ShapeAction;
@@ -193,7 +194,7 @@
//浣嶇疆淇℃伅姹囨姤
public static T0200 T0200Attributes() {
T0200 bean = T0200();
- Map<Long, Object> attributes = new TreeMap<>();
+ Map<Integer, Object> attributes = new TreeMap<>();
attributes.put(AttributeKey.Mileage, 11);
attributes.put(AttributeKey.Fuel, 22);
attributes.put(AttributeKey.Speed, 33);
@@ -290,11 +291,11 @@
T0200 bean = T0200();
- Map<Long, Object> attributes = new TreeMap<>();
- attributes.put(Long.valueOf(AlarmADAS.key), alarmADAS);
- attributes.put(Long.valueOf(AlarmDSM.key), alarmDSM);
- attributes.put(Long.valueOf(AlarmTPMS.key), alarmTPMS);
- attributes.put(Long.valueOf(AlarmBSD.key), alarmBSD);
+ Map<Integer, Object> attributes = new TreeMap<>();
+ attributes.put( AlarmADAS.key, alarmADAS);
+ attributes.put( AlarmDSM.key, alarmDSM);
+ attributes.put( AlarmTPMS.key, alarmTPMS);
+ attributes.put( AlarmBSD.key, alarmBSD);
bean.setAttributes(attributes);
return bean;
diff --git a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java
index 572b018..0fda714 100644
--- a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java
+++ b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java
@@ -3,6 +3,7 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.github.yezhihao.protostar.annotation.Field;
import io.github.yezhihao.protostar.annotation.Message;
+import lombok.Data;
import org.yzh.protocol.basics.JTMessage;
import org.yzh.protocol.commons.JT808;
import org.yzh.protocol.commons.transform.AttributeConverter;
@@ -15,8 +16,22 @@
* @author yezhihao
* https://gitee.com/yezhihao/jt808-server
*/
-@JsonIgnoreProperties({"attributes", "alarmList", "dateTime", "messageId", "properties", "protocolVersion", "clientId", "serialNo", "packageTotal", "packageNo", "verified", "bodyLength", "encryption", "subpackage", "version", "reserved"})
+@JsonIgnoreProperties({"attributes",
+ "alarmList",
+ "dateTime",
+ "messageId",
+ "properties",
+ "protocolVersion",
+ "clientId", "serialNo",
+ "packageTotal", "packageNo",
+ "verified",
+ "bodyLength",
+ "encryption",
+ "subpackage",
+ "version",
+ "reserved"})
@Message(JT808.浣嶇疆淇℃伅姹囨姤)
+@Data
public class T0200 extends JTMessage {
@Field(length = 4, desc = "鎶ヨ鏍囧織")
@@ -39,7 +54,7 @@
private LocalDateTime deviceTime;
@Field(converter = AttributeConverter.class, desc = "浣嶇疆闄勫姞淇℃伅", version = {-1, 0})
@Field(converter = AttributeConverterYue.class, desc = "浣嶇疆闄勫姞淇℃伅(绮ゆ爣)", version = 1)
- private Map<Long, Object> attributes;
+ private Map<Integer, Object> attributes;
public int getWarnBit() {
return warnBit;
@@ -105,13 +120,6 @@
this.deviceTime = deviceTime;
}
- public Map<Long, Object> getAttributes() {
- return attributes;
- }
-
- public void setAttributes(Map<Long, Object> attributes) {
- this.attributes = attributes;
- }
public int getAttributeInt(int key) {
if (attributes != null) {
diff --git a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java
index 61cf003..e08f946 100644
--- a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java
+++ b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JT808Endpoint.java
@@ -1,10 +1,12 @@
package org.yzh.web.endpoint;
+import com.alibaba.fastjson.JSONObject;
import io.github.yezhihao.netmc.core.annotation.Async;
import io.github.yezhihao.netmc.core.annotation.AsyncBatch;
import io.github.yezhihao.netmc.core.annotation.Endpoint;
import io.github.yezhihao.netmc.core.annotation.Mapping;
import io.github.yezhihao.netmc.session.Session;
+import org.apache.commons.codec.binary.Hex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,9 +18,14 @@
import org.yzh.web.model.enums.SessionKey;
import org.yzh.web.service.FileService;
+import java.io.ByteArrayInputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
+import java.util.Arrays;
import java.util.List;
+import java.util.Properties;
import static org.yzh.protocol.commons.JT808.*;
@@ -39,6 +46,7 @@
@Mapping(types = 缁堢蹇冭烦, desc = "缁堢蹇冭烦")
public void T0002(JTMessage message, Session session) {
+ log.info("缁堢蹇冭烦========={}", JSONObject.toJSONString(message));
}
@Mapping(types = 缁堢娉ㄩ攢, desc = "缁堢娉ㄩ攢")
@@ -54,6 +62,9 @@
@Mapping(types = 缁堢琛ヤ紶鍒嗗寘璇锋眰, desc = "缁堢琛ヤ紶鍒嗗寘璇锋眰")
public void T8003(T8003 message, Session session) {
+ }
+ @Mapping(types = 缁堢鏍℃椂璇锋眰涓婅, desc = "缁堢鏍℃椂璇锋眰涓婅")
+ public void T0F01(JTMessage message, Session session) {
}
@Mapping(types = 缁堢娉ㄥ唽, desc = "缁堢娉ㄥ唽")
@@ -99,6 +110,7 @@
@Mapping(types = 鏌ヨ缁堢灞炴�у簲绛�, desc = "鏌ヨ缁堢灞炴�у簲绛�")
public void T0107(T0107 message, Session session) {
+ log.info("鏌ヨ缁堢灞炴�у簲绛�========={}", JSONObject.toJSONString(message));
session.response(message);
}
@@ -115,11 +127,24 @@
@AsyncBatch(poolSize = 2, maxElements = 4000, maxWait = 1000)
@Mapping(types = 浣嶇疆淇℃伅姹囨姤, desc = "浣嶇疆淇℃伅姹囨姤")
public void T0200(List<T0200> list) {
+
+ System.out.println(JSONObject.toJSONString(list)
+ );
}
@Mapping(types = 瀹氫綅鏁版嵁鎵归噺涓婁紶, desc = "瀹氫綅鏁版嵁鎵归噺涓婁紶")
public void T0704(T0704 message) {
}
+ public static String bcd2String(byte[] bytes) {
+ StringBuilder temp = new StringBuilder(bytes.length * 2);
+ for (int i = 0; i < bytes.length; i++) {
+ // 楂樺洓浣�
+ temp.append((bytes[i] & 0xf0) >>> 4);
+ // 浣庡洓浣�
+ temp.append(bytes[i] & 0x0f);
+ }
+ return temp.toString().substring(0, 1).equalsIgnoreCase("0") ? temp.toString().substring(1) : temp.toString();
+ }
@Mapping(types = {浣嶇疆淇℃伅鏌ヨ搴旂瓟, 杞﹁締鎺у埗搴旂瓟}, desc = "浣嶇疆淇℃伅鏌ヨ搴旂瓟/杞﹁締鎺у埗搴旂瓟")
public void T0201_0500(T0201_0500 message, Session session) {
diff --git a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java
index 7669668..6f7fb19 100644
--- a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java
+++ b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java
@@ -1,15 +1,24 @@
package org.yzh.web.endpoint;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import io.github.yezhihao.netmc.core.HandlerInterceptor;
import io.github.yezhihao.netmc.session.Session;
+import netscape.javascript.JSObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.yzh.commons.util.Byte2NumberUtils;
import org.yzh.protocol.basics.JTMessage;
import org.yzh.protocol.commons.JT808;
+import org.yzh.protocol.commons.transform.AttributeKey;
+import org.yzh.protocol.commons.transform.attribute.Battery;
import org.yzh.protocol.t808.T0001;
import org.yzh.protocol.t808.T0200;
import org.yzh.web.model.entity.DeviceDO;
import org.yzh.web.model.enums.SessionKey;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
public class JTHandlerInterceptor implements HandlerInterceptor<JTMessage> {
@@ -73,8 +82,16 @@
boolean transform = request.transform();
if (messageId == JT808.浣嶇疆淇℃伅姹囨姤) {
DeviceDO device = SessionKey.getDevice(session);
- if (device != null)
+ if (device != null){
device.setLocation((T0200) request);
+ if(device.getLocation()!=null && device.getLocation().getAttributes()!=null ){
+ Battery battery= (Battery) device.getLocation().getAttributes().get(AttributeKey.Battery);
+ if(battery !=null){
+ device.setBatteryVoltage(battery.getVoltage());
+ }
+ }
+ }
+
return transform;
}
if (!session.isRegistered()) {
diff --git a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java
index 7502fa3..b4d1b34 100644
--- a/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java
+++ b/server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/model/entity/DeviceDO.java
@@ -1,10 +1,12 @@
package org.yzh.web.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
import org.yzh.protocol.t808.T0200;
import java.util.Objects;
+@Data
public class DeviceDO {
@Schema(description = "璁惧id")
@@ -19,6 +21,8 @@
protected int driverId;
@Schema(description = "鍗忚鐗堟湰鍙�")
private int protocolVersion;
+ @Schema(description = "鐢垫睜鐢靛帇")
+ private Float batteryVoltage;
@Schema(description = "瀹炴椂鐘舵��")
private T0200 location;
diff --git a/server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java b/server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java
index 45f5c70..1651ab1 100644
--- a/server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java
+++ b/server/jtt808_parent/jtt808-server/src/test/java/org/yzh/client/JTMessageAdapter.java
@@ -8,6 +8,9 @@
import org.yzh.protocol.codec.JTMessageDecoder;
import org.yzh.protocol.codec.JTMessageEncoder;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
/**
* JT娑堟伅缂栬В鐮侀�傞厤鍣�
* @author yezhihao
@@ -34,4 +37,7 @@
JTMessage message = messageDecoder.decode(input);
return message;
}
+
+ public static void main(String[] args) {
+ }
}
--
Gitblit v1.9.3