白 天, 郭书宇, 赵 为, 邱宇东, 张 杰
(吉林大学 a. 计算机科学与技术学院; b. 教育部符号计算与知识工程重点实验室, c. 软件学院, 长春 130012)
近年来, 随计算机互联网技术的快速发展, 各行各业都已经融入计算机互联网技术, 推进“互联网+政务服务”工作也成为了党中央、 国务院做出的重大决策部署。当前各地区各部门积极推进网上政务服务平台建设, 开展网上办事, 有效优化了政府服务、 方便了企业和群众, 为大众创业、 万众创新营造了良好环境[1]。传统的市政设施巡检方式和信息管理亟待转型。在传统的市政工程模式中, 没有系统的工作流程, 巡检员使用自己便利的方式进行信息交流沟通和数据传递, 如打电话、 发短信等, 导致巡检过程中问题上报信息不准确、 不及时, 数据存储方式陈旧, 不利于后期管理的信息统一处理[2,3]; 后台工作流程复杂, 没有规定的任务派发、 打印单据机制, 直接导致了工作效率的低下。笔者提出的“智慧”市政信息管理系统, 利用Android设备的便携性、 移动性, 统一问题上报的路径, 使用图像信息解决一些无法用文字描述信息的毛病, 并结合定位信息增强了信息的准确性, 便于维修员的快速查找和前往目的地进行维修[4]; 管理员通过此系统浏览Web网页能直接对所有工程信息进行查看和管理, 能直接对每个任务进行派发和打印单据, 极大简化了工作流程[5,6]。另外, 此系统还包含微信公众平台使市民参与到市政设施的维护工作, 市民们可随时将身边的问题上报到系统中, 为市民发现问题提供了一个信息出口。
系统主要由移动端, 浏览器端, 服务器端和微信公众号4个部分组成[7,8]。
移动设备以Android操作系统核心, 基于Java编程。工作流程如下: 进入移动设备app, 首页地图会自动获取GPS(Global Positioning System)信息, 选择问题上传, 表单会自动填充地理信息和经纬度, 点击拍照添加图片信息, 另外需手动选择问题类型和输入附加的问题描述等, 点击上传, 一个完整的工程信息会上传到后台服务器; 在工程列表界面, 点击每个工程可查看对应的详细信息; 在某个工程维修完成后, 需在移动设备端对其进行维修后的上传, 方法大致和发现问题上传类似[9]。
浏览器端主要使用JSP(Java Server Pages)、 html5、 JavaScript等技术开发, 可在浏览器上查看更详细的工程信息, 并可以对每个工程指派维修人员; 另外还有打印工程对应的流水单和任务派发单的功能。后台服务器端用于处理移动设备端上传信息, 将信息存储到数据库等, 另外处理浏览器端的业务逻辑。微信公众号用于市民发现问题上报[10]。系统总体流程图如图1所示。
图1 系统主要功能框图Fig.1 The diagram of the system main functions
本系统采用的是GPS和Network定位的结合[11]。GPS, 需要GPS硬件支持, 直接和卫星交互获取当前经纬度, 目前大部分的智能手机都支持GPS模块。通过GPS方式准确度是最高的, GPS利用卫星通信的通道, 在没有网络连接的情况下也能用, 不过GPS定位也有相应的缺点: 1) 耗电高; 2) 从GPS模块启动到获取第一次定位数据, 可能需要比较长的时间; 3) 室内使用效率低。Network定位: 包括基站定位和wi-fi定位。利用手机基站信息、 wi-fi信息等发送到指定的位置服务器; 位置服务器接收后, 直接返回粗略的经纬度和精度信息。对应的provider字段是LocationManager.NETWORK_PROVIDER, 是一种低精度, 低耗电的初略定位方式。主要流程如图2所示。
GPS定位详细步骤如下。
1) 调用函数获取一个LocationManager实例。
2) 调用getLastKnowLocation()方法获取当前的位置信息, 返回的Location对象中, 包含了可确定位置的信息, 如经度、 纬度和速度等。
3) 设定监听位置变化: locationManager.requestLocationUpdates(provider,2000,10,locationListener); 其中第1个参数是定位的方法, GPS定位或网络定位; 第2个参数是产生位置改变事件的时间间隔, 单位为μs; 第3个参数是距离条件, 单位是m; 第4个参数是回调函数, 在满足条件后的位置改变事件的处理函数。
4) 在AndroidManifest.xml文件中加入用户许可。
Network定位详细步骤如下。
1) 向百度获取网络定位服务apk(AndroidPackage), 并集成至system/app目录下, 有时需同步获取其运行时需要的库, 并集成与指定目录, 一般是system/lib目录下, 其包名为: com.amap.android.location。
2) 配置Config.xml文件(frameworks/base/core/res/res/values)。
3) 网络服务binder的逻辑在LocationManagerService.java中loadProviderLocked方法中。
定位界面如图3所示。
图2 定位实现流程图 图3 定位地图界面 Fig.2 Positioning flow chart Fig.3 Location map interface
该系统的拍照功能直接通过调用移动设备的相机功能实现。内部类android.view.SurfaceHolder提供了SurfaceView, 这个类可以实现照相功能, SurfaceView还可以进行视频音频的播放。在该类的基础上, 通过Camera类提供的内部方法, 对相机的参数进行一些相应的设置, 以达到拍照时想要的效果, Camera内部还定义了若干个接口完成一些相应的操作。主要流程如图4所示。拍照功能详细步骤如下。
1) 调用Camera的open方法打开摄像头。
2) 调用getParammeters获取相机的参数: Parameters param=MainActivity.this.camera.getParameters();
3) 调用setParammeters将设置的参数传递到相机: camera.setParameters(param);
4) 在拍照的时候必然需要先进行预览全景, 在预览的某一时刻进行拍照。主要代码如下。
MainActivity.this.camera.setPreviewDisplay(MainActivity.this.sufh);
MainActivity.this.camera.startPreview();
5) 图片保存。拍照界面如图5所示。
图4 拍照功能实现流程图 图5 拍照界面 Fig.4 Camera function flow chart Fig.5 Camera interface
2.3.1 服务器搭建
该系统的后台服务器使用Apache的Tomcat服务器, 使用JavaEE中的SSH框架进行开发。Tomcat由Apache、 Sun和其他一些公司及个人共同开发而成, 具有处理HTML页面的功能, 另外它还提供Servlet和JSP(Java Server Pages)容器, 已经成为目前比较流行的Web 应用服务器。SSH在J2EE项目中表示了3种框架, 即Spring+Struts+Hibernate。Struts对经典MVC(Model View Controller)模式提供了对应的组件。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架, 用于解决开发过程中的一些复杂性问题。Hibernate是一个对象关系映射框架, 用于完成数据的持久化。
Tomcat服务器搭建环境步骤如下。
1) 前期Java环境。
2) 在Tomcat官网找到对应版本的下载文件。
3) 添加系统环境变量, 变量名: Path; 变量值: %CATALINA_HOME%in等。其中CATALINA_HOME为Tomcat安装地址。
2.3.2 移动端工程上传
Android SDK附带了Apache的HttpClient API。Apache HttpClient是一个完善的HTTP客户端, 它提供了对HTTP协议的全面支持, 可使用HTTP GET和POST进行访问。具体步骤如下。
1) 配置Android中的单元测试。所有配置信息均在AndroidManifest.xml中完成。
2) 获取Android上下文环境。继承android.test.AndroidTestCase类。
3) 使用了HttpPost, URL后面并没有附带参数信息, 参数信息被包装成一个由NameValuePair类型组成的集合的形式, 然后经过UrlEncodedFormEntity处理后调用HttpPost的setEntity方法进行参数设置, 最后由HttpClient执行。
4) 多部件POST请求。需用到一个HttpMime开源项目, 该组件是专门处理与MIME类型有关的操作, 需把其中的HttpMime.jar包放到项目中。
5) 服务端使用apache开源项目FileUpload进行处理, 所以需要commons-fileupload和commons-io这两个项目的jar包。
6) 在系统启动时就创建一个HttpClient; 重写了onLowMemory()和onTerminate()方法, 在内存不足和应用结束时关闭连接, 释放资源。当实例化DefaultHttpClient时, 传入一个ClientConnectionManager实例, 负责管理HttpClient的HTTP连接。
该系统采用的是MySQL数据库进行数据的存储。MySQL是一个关系型数据库管理系统, 是目前最流行的关系型数据库管理系统之一。系统最关键的一张表是工程信息表, 该表中的字段对应了移动设备端上传问题的各种信息和维修完成上传的信息等。建表的SQL语言如下。
CREATE TABLE ‘project_inf’(//工程表‘pro_id’int(11) NOT NULL auto_increment,‘pro_address’ varchar(255) default NULL,‘findpic’ varchar(255) default NULL,‘find_time’ datetime default NULL,‘findvideo’ varchar(255) default NULL,‘pro_finder’ varchar(255) default NULL,‘pro_lat’ decimal(17,7) default NULL,‘pro_lon’ decimal(17,7) default NULL,‘pro_state’ int(11) default NULL,‘project_material’ varchar(255) default NULL,‘service_desc’ varchar(255) default NULL,‘service_pic’ varchar(255) default NULL,‘service_time’ datetime default NULL,‘service_video’ varchar(255) default NULL,‘pro_desc’ varchar(255) default NULL,‘pro_type’ varchar(255) default NULL,‘emp_id’ int(11) default NULL,PRIMARY KEY(‘pro_id’),KEY ‘FKC7FFDDBB2C2C58AA’ (‘emp_id’),
CONSTRAINT ‘FKC7FFDDBB2C2C58AA’ FOREIGN KEY (‘emp_id’) REFERENCES ‘employee_inf’ (‘emp_id’)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
浏览器端的设计主要由后台服务器中的业务逻辑和前端网页开发组成。后台服务器主要由实体类层、 DAO层、 Service层、 Action层等组成。业务逻辑层体现在Service层代码中, 具体实现方法在DAO层中实现, Action层为具体的各个功能实现, 前端网页的跳转由配置文件Struts.xml设定。前端网页的功能主要有: 工程列表的查看、 每个工程对应详细信息、 任务派发、 工程对应流水单和任务单的打印。工程详细信息界面和任务单界面如图6和图7所示。
图6 工程详细信息界面 图7 任务单界面 Fig.6 Engineering details interface Fig.7 Task list interface
图8 CPU使用率 Fig.8 CPU usage
本系统使用的是Android Device Monitor工具。该工具集成在Android Studio中, 使用该工具主要是测试程序中线程的状态和使用情况, 切换到Threads选项卡后就可看到当前程序运行时的状态、 耗时和累计使用时间。经过测试, 在内存为2 GByte, CPU(Model View Controller)是骁龙808的手机上内存消耗与UI渲染没有超过性能标准。所有的线程都是用于异步网络操作, 由OkHttp框架封装的比较稳定。如图8所示, CPU利用率一直维持在约20%下, 占用资源少, 实用性高。
功能应用测试: 登录界面如图9a所示, 用户使用在浏览器端注册了的账号登录, 登录后进入到主界面菜单。选择“发现”按钮进行工程上报, 如图9b所示。当某个用户上传一个问题后, 其他用户可收到推送消息。如果一个工程在被指派维修人员完成后, 需进行维修后的上传, 和问题上报相似。在工程列表栏可以看到所有的工程列表, 如图9c所示。在联系人栏, 有模糊搜索功能, 可看到市政公司所有员工的电话信息等, 可进行直接拨号。在用户信息界面, 可看到自己的个人信息等。设置界面, 有退出登录, 清除缓存等功能。
a 登录界面 b 上传界面 c 工程列表界面图9 系统测试界面和结果Fig.9 The system test interface and results
在系统实现完成后, 经某市政公司的实际应用半年, 已产生几百条工程数据, 实现了工程信息的统一化管理, 极大地提高了工作效率。工程列表如图10所示。
图10 工程列表Fig.10 Engineering list
为更好地满足市政工程这一传统行业与互联网行业的结合, 设计了用于市政设施问题上报和维修的移动设备和后台信息管理的浏览器端进行显示与统一的系统, 实现了问题的及时上报、 后台数据精确长久存储、 浏览器端多元化展示等功能。测试结果表明, 此系统采用当下流行的移动设备, 优势明显且系统占用资源较少, 拥有较强的移动性和稳定性, 可简化市政公司的工作流程和提高工作效率, 市场应用价值高。