基于交通运输部 JT/T 809-2019 道路运输车辆卫星定位系统平台数据交换协议 实现的出租车调度系统,支持车辆动态信息交互、实时监控调度、跨平台数据对接等功能。适用于网约车平台、出租车公司及交通监管部门的车辆调度场景。
- 完整支持809协议2019版报文格式
- 支持身份认证(0x1001)、车辆注册(0x1200)、实时定位上报(0x1202)等核心指令
- 实现数据加密(DES/3DES/AES可选)与校验和验证
- 支持主链路(监管平台→企业平台)和从链路(企业平台→监管平台)双向通信
├── src
│ ├── communication # 通信层(TCP长连接管理)
│ ├── protocol_parser # 协议解析(消息头/体构造、CRC校验)
│ ├── business_logic # 业务处理(车辆状态机、调度算法)
│ ├── security # 安全模块(加密算法实现)
│ └── config # 配置管理(接入码、平台ID等)
├── test # 协议模拟测试工具
└── docs # 协议文档与数据字典
-
环境要求
JDK 1.8+、Maven 3.6+、MySQL 5.7+
-
编译部署
git clone https://gitee.com/your-repo/taxi-809.git mvn clean package cp target/taxi-scheduler.jar /opt/app
-
配置修改
# application.properties jtt809.access_code=3101150001 # 接入码(需向监管平台申请) jtt809.platform_id=000012345678 # 12位企业平台编号 jtt809.encrypt_type=aes # 加密方式(none/des/aes) jtt809.server_port=2121 # 主链路服务端口
-
启动主链路服务
java -jar taxi-scheduler.jar --mode=server
- 监听监管平台连接请求
- 自动完成身份认证(RSA交换会话密钥)
-
上报车辆定位
// 示例代码:构造1202报文 JT809MessageBuilder builder = new JT809MessageBuilder() .setMsgId(0x1202) .addParam("vehicle_no", "沪A12345") .addParam("lng", 121.4737) .addParam("lat", 31.2304) .addParam("speed", 45.2); byte[] packet = builder.buildEncryptedPacket();
-
处理调度指令
@Jt809Handler(msgId = 0x1300) public void handleDispatchCommand(Channel channel, byte[] packet) { DispatchOrder order = ProtocolParser.parse(packet); // 推送至司机终端APP pushToDriver(order.getDriverId(), order.toJson()); }
消息结构示例(十六进制)
5B 00 00 00 38 00 00 1B 1A 10 01 00 00 00 00 00 00 00 00 31 30 30 31
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5D
- 起始符
5B+ 数据头(消息长度、报文序列号、业务类型等) - 数据体(动态长度,加密后二进制数据)
- 校验码(CRC16-CCITT) + 结束符
5D
sequenceDiagram
企业平台->>监管平台: 主链路连接请求(0x1001)
监管平台-->>企业平台: 返回应答(0x1002)
企业平台->>监管平台: 车辆注册信息(0x1200)
监管平台->>企业平台: 下发调度指令(0x1300)
企业平台-->>监管平台: 指令执行结果(0x1301)
- 身份认证:通过RSA交换会话密钥
- 数据加密:支持DES(默认)/AES两种模式
// 加密示例 byte[] encrypted = CryptoUtils.aesEncrypt( plainText.getBytes(), sessionKey.getBytes(), "CBC/PKCS5Padding" );
- 完整性校验:每包数据包含CRC校验码
Q1:如何处理消息重发?
A:实现报文序列号校验,在protocol_parser模块维护已处理消息ID的缓存窗口
Q2:如何调试协议报文?
A:使用test目录下的模拟工具:
java -jar simulator.jar -mode client -type 0x1202- Fork 本仓库并创建特性分支(如
Feat_encrypt_optimize) - 提交代码时需附带协议单元测试
- 提交 Pull Request 时描述具体协议功能点
提示:实际部署前需向当地交通委申请正式接入码,测试阶段可使用
0000000000作为临时接入码
完整协议文档参考《JT/T 809-2019 道路运输车辆卫星定位系统平台数据交换》第四章