本GPS车辆定位监控系统基于若依框架进行二次开发,实现了完整的车辆定位、监控、告警和管理功能。系统采用前后端分离架构,支持JT808协议,可对接各类GPS终端设备。
基于Netty实现的高性能TCP服务器,支持JT808 V1.53协议:
- 终端管理 :终端登录认证、心跳检测、终端注销
- 位置上报 :实时位置数据接收与存储
- 告警处理 :超速、疲劳驾驶、紧急告警等告警事件处理
- 指令下发 :终端参数查询与设置 2. GPS业务模块
模块 功能描述 设备管理 GPS终端设备的注册、绑定、状态监控 车辆管理 车辆信息维护、设备绑定关系 分组管理 车辆分组、权限分配 位置监控 实时位置展示、历史轨迹回放 告警管理 告警列表、告警处理、告警统计 轨迹管理 轨迹数据存储、轨迹文件导出
一、设计思路 1.1 整体架构设计
本系统采用分层架构设计,将系统划分为表现层、业务层、数据层三个主要层次,各层之间通过接口进行通信,实现高内聚、低耦合的设计目标。
分层架构说明:
表现层 :采用前后端分离模式,前端负责页面展示和用户交互,后端提供RESTful API接口。这种设计使得前端可以独立部署和扩展,同时便于多端接入(Web端、移动端)。
业务层 :采用Spring Boot作为核心框架,按照功能模块进行划分,包括系统管理模块、GPS业务模块、监控中心模块、定时任务模块等。每个模块独立开发、独立部署,便于维护和扩展。
数据层 :采用MySQL作为主数据库存储业务数据,Redis作为缓存层提升系统性能,同时支持读写分离配置以应对高并发场景。
1.2 JT808协议服务设计
JT808协议服务是本系统的核心组件,设计时重点考虑了以下几个问题:
连接管理设计:
系统采用Netty框架构建TCP服务器,利用其高性能的NIO特性支持大量并发连接。每个终端连接建立后,系统会维护一个设备ID与Channel的映射关系,存储在内存Map中,便于快速查找和消息推送。同时引入心跳检测机制,通过IdleStateHandler监控连接状态,超时未收到心跳则自动断开连接,释放资源。
消息处理流程:
消息处理采用责任链模式,数据流经过解码器、业务处理器、编码器三个阶段。解码器负责处理JT808协议的转义字符、校验码验证、消息体解析;业务处理器根据消息类型分发到对应的处理方法;编码器负责将响应消息按照协议格式编码并发送。
协议解析设计:
JT808协议的消息体结构复杂,包含多种附加信息项。设计时将解析逻辑封装在独立的解析器类中,包括消息头解析、位置基本信息解析、状态位解析、告警标志解析、附加信息解析等。每种附加信息项都有对应的解析方法,通过附加信息ID进行路由分发。
遇到的难点
JT808协议解析难点
转义字符处理
JT808协议规定,数据帧以0x7E作为起始和结束标识,因此消息体中出现0x7E或0x7D时需要进行转义处理。转义规则为:0x7E转义为0x7D 0x02,0x7D转义为0x7D 0x01。接收数据时需要还原,发送数据时需要转义。
解决方法:在解码器的第一个阶段进行转义还原,遍历字节数组,遇到0x7D时读取下一个字节进行还原。编码时在最后阶段进行转义处理。注意转义处理要在校验码计算之前完成。
附加信息解析
JT808协议的位置附加信息项种类繁多,每种信息项的格式和长度各不相同。协议文档中对部分信息项的描述不够详细,需要参考实际设备数据进行逆向分析。
解决方法:建立附加信息解析的映射表,根据附加信息ID路由到对应的解析方法。对于不明确的信息项,通过日志记录原始数据,结合多款设备的数据进行分析,逐步完善解析逻辑。