伴随着现代物流业的迅速发展和我国公路建设的日益完善, 公路运输业务量正迅猛增加。 然而目前大部分公路物流运输企业(辽宁省)对于信息平台的建设,仅限于客户货单的管理, 系统交互性差, 远不能满足企业的应用需求, 因此, 面向公路物流运输企业的GIS 监管系统成为各企业及科研人员的关注热点。
为了克服公路物流运输企业当前系统存在的缺陷,本文提出一种采用 Flex 和 SuperMap iSever Java 技术来构建面向公路物流运输企业的 GIS 监管系统的解决方案。
1 系统框架
采用Flex 和SuperMap iServer Java 技术的面向公路物流运输企业的GIS 监管系统的框架结构如图1 所示。
表现层: 使用 Flex 技术实现, 接收用户的输入,通过对业务层相关逻辑的调用处理用户输入的数据,并呈现业务逻辑处理的数据结果。
业务层: 分为地图数据相关的业务和普通业务,是系统的核心部分, 用来处理表现层用户输入的数据,完成系统的业务逻辑。 普通业务通过 Flex HTTPService 对象与 J2EE 应用服务器进行通信[1]. 地图数据相关的业务通过 REST 地图服务接口与 SuperMapiServer Java GIS 服务器进行交互。
中间层: 由 J2EE 应用服务器和 SuperMap iServerJava GIS 服务器组成, 使用 Hibernate 将数据层属性数据封装成简单易用的数据访问接口, 使用 SuperMapiSever Java 将地理数据发布为各种能力的 GIS 服务, 供业务逻辑层调用, 完成业务层和数据层之间的通讯[2].
数据层: 负责基础地理数据和属性数据的存取,维护各种数据间的关系, 保障整个系统数据源的安全性。 属性数据采用 Oracle10g 进行存储与管理, 地理数据通过 SuperMap Deskpro .Net 对空间数据进行组织并符号化后形成*.smwu 地图文件。
2 系统结构设计
2.1 系统概述
本系统基于实验室项目, 主要用于公路物流运输企业(辽宁省)日常业务活动的管理。 监控与调度中心向车辆发送指令信息, 车辆向监控与调度中心发回反馈信息和车辆及货物实时数据。 车辆之间根据调度计划通讯协作完成运输计划, 将货物运输到目的地。
鉴于系统用户之间的通讯频率多发的特点, 在系统的设计过程中, 主要对数据通信以及数据处理过程部分进行了阐述。
2.2 系统功能设计
本系统由监控与调度中心子系统和车载终端子系统构成, 子系统之间进行数据通讯, 共同完成运输任务[3].
2.2.1 监控与调度中心子系统
监控与调度中心子系统主要由信息处理中心、数据通讯和资源管理等3个模块组成, 功能结构图如图2所示。
资源管理模块: 用户管理用于系统各级用户信息的增删改查; 车辆管理用于各种运输车辆信息的增删改查, 每辆车对应一个运输任务队列, 但这个队列不由车辆管理部分维护; 货单管理用于客户编辑并提交货单, 编辑时货单要设置优先级; 地物管理用于对地图中数据的增删改查; 安全管理用于用户身份认证和用户系统权限分配。
数据通讯模块采用 Socket 通信, 负责与车载终端子系统的数据交换, 包含数据接收、数据发送和事件管理器等子功能模块。信息处理中心模块包含数据解析器、数据封装器、GIS 网络分析器等子功能模块。 数据解析器解析车辆及所载货物的实时数据; 数据封装器将运输计划标记或调度计划标记及人工指令封装成指令信息; GIS 网络分析器生成运输计划和调度计划。
2.2.2 车载终端子系统
车载终端子系统主要由数据采集、数据处理、数据通讯等 3 个子模块组成, 功能结构图如图 3 所示。
数据采集模块利用移动智能终端提供的定位功能、G-sensor 获取车辆现场位置坐标(经纬度)、运动方向等实时信息[4], 同时由车辆副驾驶员通过车载摄像头查看车辆状况、货物状况、实时遭遇状况, 并通过数据采集入口输入, 提交给数据通讯模块。
数据处理模块包括数据封装器、数据解析器、GIS查询及导航等子功能模块。 数据封装器、数据解析器分别跟监控与调度中心子系统信息处理中心的数据解析器、数据封装器是两对互逆的处理过程; GIS 查询及导航可以查询各车辆的位置并在地图上显示, 同时还可以根据运输计划及调度计划中的路径对运输车辆进行导航。
数据通讯模块采用 Socket 通信, 包含数据接收、数据发送两个模块, 与监控与调度中心子系统进行数据交换的同时, 还可以通过车载终端子系统跟其他车辆进行实时通信, 共同协作完成运输任务。
3 系统实现
本系统的实现采用了事件驱动架构(EDA)技术,事件驱动架构提供了一种动态响应事件的机制。 一个事件驱动系统里有事件消费者和事件产生者, 定义了事件的来源和去向。 事件消费者向事件管理器订阅事件, 事件产生者向事件管理器发布事件。 订阅者根据获得业务事件的信息做出反应, 事件驱动的动作机制帮助系统激活相应的后续事件, 完成业务流程[5].
3.1 监控与调度中心子系统
信息处理中心和数据通讯是监控与调度中心子系统的核心模块, 下面对其实现过程进行阐述。
3.1.1 数据通讯
数据通讯模块依据TCP/IP协议, 进行Socket通信。鉴于该模块必须具备高并发性的特征, 故采用线程池与事件驱动架构相结合的机制, 解决了高并发连接情况下的系统性能问题。数据通讯会接收到来自车载终端子系统大量上传数据的连接请求, 采用多线程处理, 对线程创建的数量不加控制, 会导致大量系统资源的浪费, 降低系统对外界响应效率, 线程本身也可能进入"假死"状态。
同时, 不断创建和销毁线程的开销也很大, 所以本系统引入线程池机制, 利用线程池定制一定量的资源,然后对这些资源进行复用, 避免了频繁的创建和销毁[6].
线程池中的每个线程接收数据后, 形成一个事件,通过事件管理器发布出去, 这时, 线程池中的这个线程就变为空闲线程, 可以去处理新的连接, 事件管理器会自动激活一个事件去处理刚刚发布的数据。 线程池与事件驱动架构相结合的机制从横向和纵向两个维度对连接请求并行处理, 保证了高并发连接情况下的性能问题。 处理流程如图 4 所示。
3.1.2 信息处理中心
信息处理中心模块处理的数据分为两类, 1)数据通讯模块接收的数据; 2)客户提交的货单。数据通讯模块接收的数据的处理流程如图 5 所示。该处理流程中, 数据解析由数据解析器完成, 解析的数据包含两种类型: 1)车载终端对运输计划和调度计划执行的反馈信息; 2)车辆及货物的实时信息。 它们采用定长数据格式, 数据格式如图 6 所示, 其中数据类型中 F 代表是反馈信息, R 代表实时数据, 运输状态中 T 代表在途中, D 代表抵达目的地, 货物状态中 L代表货物良好, S 代表有损毁。 由于数据反映的是车辆及货物的实时状态, 所以加时间戳区分不同时间点的状态信息。 数据解析器的解析过程就是对字符串数据进行切分并进行保存形成解析结果事件的过程。
数据分析由 GIS 网络分析器来完成, 数据解析形成的解析结果事件自动激活 GIS 网络分析器工作, 对事件进行处理。 若解析的结果是车辆及货物实时信息,则更新相应车辆及货物的信息; 若是反馈信息, 除更新对应车辆实体和货物实体的信息之外, 还要分析车辆实时遭遇状况, 若是一般反馈信息, 车辆到达目的地提醒, 则自动生成让车辆原地待命的调度计划指令;若是车辆遭遇抛锚、遭遇车祸, 前方路断, 则向系统管理员发送提示消息, 提示需要人工调度, 人工生成调度计划, 同时形成一个调度事件, 激活数据封装器进行数据封装。
数据封装由数据封装器完成, 用来将 GIS 网络分析器制定的运输计划标记或调度计划标记及人工添加的指令, 封装成运输指令或调度指令, 通过数据通讯模块发送给车载终端子系统。 封装后的指令数据格式如图7 所示, 其中数据类型中Y 代表运输指令, D代表调度指令, 由于指令的发送是实时的, 所以添加时间戳, 标记指令信息的生成时间。
GIS 网络分析器完成对货单的处理, 客户所提交货单的处理流程如图 8 所示。
客户提交货单时, 会自动检查货单优先级是否为时间优先, 若是, 则形成优先货单事件, 激活GIS网络分析的最佳路径分析功能, 规划运输路径, 分配车辆,生成运输计划, 通过数据封装, 将运输计划指令发送给车载终端。 若不是, 则等待 GIS 网络分析器定时获取最新生成的所有货单信息, 逐一进行最佳路径分析,分配车辆, 生成运输计划, 封装后发送出去。 最佳路径分析采用 SuperMap iClient for Flex 网络分析 API 的最佳路径分析接口完成, 分析过程中, 可以设置权值字段, 如时间最少、距离最短等[7].
3.2 车载终端子系统
车载终端子系统采用事件驱动架构实现的流程图如图 9 所示。
数据采集事件和来自监控调度中心子系统的连接请求事件由数据通讯模块数据接收功能来响应, 并根据事件的不同, 分别激活数据封装器和数据解析器处理数据, 解析出来的指令信息保存到本地文件, 供GIS 导航功能导航, 封装好的采集数据, 形成一个封装结果事件, 激活数据通讯模块数据发送功能发送给监控与调度中心子系统, GIS 查询可以通讯数据发送功能发送查询请求, 查询各车辆的位置并在地图上显示, 方便直接与其他车辆进行通讯协作。
4 结语
本文设计面向公路物流运输企业的GIS监管系统,目的是解决公路物流运输企业(辽宁省)现有信息平台功能单一、可交互性差的弊端, 该系统集监控、分析、决策于一体, 提高了公路物流运输的流通效率, 提升了企业在客户心中的满意度。
本系统采用了线程池结合事件驱动架构的方式来保证在车载终端大量接入时的服务器性能, 同时将数据的处理过程封装成一个个独立的处理单元, 如数据封装器、数据解析器, 采用事件驱动架构激活后续事件, 自动完成处理过程。
参考文献:
1 Ahmed T, Orlando D, Hooks J, et al. Flex 4 实战。郭俊风译。北京:清华大学出版社,2012.
2 SuperMap 图书委员会。SuperMap iServer Java 从入门到精通。北京:清华大学出版社,2012.
3 顾健。基于 Web Service 的物流跟踪决策系统的实现[学位论文].苏州:苏州大学,2010.
4 关东升,赵志荣等着。Android 开发案例驱动教程。北京:机械工业出版社,2011.
5 何俊。事件驱动机制下的适时商务智能模型研究[学位论文].合肥:中国科学技术大学,2010.
6 Goetz B, Peierls T, Bloch J, et al. Java 并发编程。韩锴,方妙译。北京:电子工业出版社,2007.
7 SuperMap 图书委员会。SuperMap iClient for Flex 从入门到精通。北京:清华大学出版社,2013.