宠物定位服务器软件设计
1 总体要求............................................................................
总体功能要求..............................................................
软件开发平台要求..........................................................
2 软件开发................................................................................
2.1 软件的需求分析.............................................................
2.2 系统总体框架.................................................................
2.3 软件的设计概要............................................................
2.4 软件的详细设计............................................................
1 总体要求
1.1总体功能要求
该产品主要是一个宠物定位系统的服务器端,所以服务器要能够在外网访问,使得不同的宠物定位设备,能够访问服务器,上传信息,注册信息,并且有效跟踪、监管每一个需要定位的对象(宠物)的实施情况。
开发者应在充分分析需求的基础上,选择采用B/S结构或者C/S结构。
总体的功能需求如下:
宠物定位信号发射器是指内置了GPS模块和移动通信模块的终端,下文称宠物定位器各类的宠物定位器,可以向定位服务器进行注册,包括宠物定位设备的基本信息,定位器的设备型号,定位器的工作模式。
监护人可以通过自己的终端,如:手机,定位接收器手持终端,电脑等向服务器进行注册和定位器信息的访问,也可以定制自己宠物的电子围栏等。
宠物定位器,可以向服务器定时报告宠物定位的信息。
同时服务器可以告知宠物的主人(监护人),该宠物定位器的基本信息,实时的定位信息(地理位置)。
如果遇到特殊情况,比如:宠物定位器信号变弱,信号丢失。服务器要即时向监护人的终端(手机,手持定位接收器)发出警报,告知无法提供技术服务,需要监护人对宠物定位器当前的状态进行检查,定位器设备重启或定位设备进行维修。
服务器可以具有宠物历史定位信息的保存,将历史轨迹告知宠物的主人。
服务器可以具有电子围栏报警功能,当发现宠物超出电子围栏范围向宠物的主人的各类终端发出警报,也可以向具有接受警报功能的定位器发出警报。
服务器可以根据宠物的监护人的需求,以不同形式下发各类,下发方式不限于终端的网络访问,也可以是短信,彩信,电话语音提醒。
1.2软件开发平台要求
数据库管理系统:
MySQL5.6以上版本
网络架构:
完全支持TCP/IP协议
开发工具或技术体系:
为保证软件的上下兼容性,开发时应选择比较通用的开发工具的较新版本进行开发,如J2EE(Java2 Platform Enterprise Edition),Eclipse,NetBeans,Microsoft Visual Studio等。
2 软件开发
2.1软件的需求分析
随着人们物质生活水平的不断提升,养宠物已经成为越来越多的人在面对业余生活时的一种选择。主人像对待“宝贝”一般去溺爱它们的同时,也获得了情感和精神方面的满足。然而养宠物也意味着多了一份责任,不光是闲暇之余人们喜欢带着自家宠物出去遛弯;其实每天定期定时让宠物到户外去活动,也是宠物健康的必要方式。不过,户外的环境毕竟更为复杂,因此主人们常常会担心宠物的安危,害怕它们走丢或发生意外情况。然而,在主人们百般小心的呵护下,宠物丢失的事情也依然时有发生。 有需求的地方,就会有市场,智能宠物定位器的应运而生,让主人能够随时掌握自家宠物的具体位置,再也不用担心它们走丢的问题。可以相信,随着宠物市场的蓬勃发展,会有更多更好的智能宠物定位产品出现,其市场的发展也会越来越红火。
开发这个宠物定位系统,主要是为了方便饲养宠物的主人,可以实时监管自己的宠物。
2.2 系统的总体架构
逻辑架构
功能用例图
2.3 软件的概要设计
2.3.1主人信息管理模块
主人信息管理模块为宠物的主人提供信息注册,账户登录,宠物定位设备绑定,定位设备解绑,主人基本信息修改等功能。
2.3.2宠物定位设备信息管理
宠物定位设备信息管理模块,用于宠物定位设备向服务器进行设备注册,定位设备认证,以及解绑定位设备。
2.3.3宠物定位历史轨迹管理
宠物定位历史轨迹管理,给宠物的主人查询自己的宠物在某一个时段的定位轨迹。用户不仅可以查询历史轨迹的记录,也可以删除历史轨迹的记录。同时因为服务器存储空间数据有限,也会进行定时删除(三个月前的)记录。
2.3.4宠物实时定位管理
宠物实时定位管理,主要用于接收宠物定位设备上发的实时定位信号,并对定位信号判别是否在电子围栏之内。服务器接收到实时信号,需要广播给所有绑定该宠物定位设备的用户终端,告知该宠物的实时定位信息。
用户可以根据自己的实际需要定位宠物的电子围栏。电子围栏可以是以主人当前位置为半径的圆形,不规则的多边形或矩形。
2.3.5特殊警报管理模块
当宠物离开电子围栏范围时,向对应的主人的终端发出电子围栏警报,提醒用户注意宠物动向,防止宠物丢失等意外发生。
当宠物定位设备信号弱,电源储能不足,或定位信号故障时,可以向服务器通知该故障,服务器把定位设备故障实时通知给主人的终端。提醒主人对定位设备进行检查和维修。
2.3.6通信管理模块
通信管理模块是一个中间件,它的功能包括宠物定位设备间的连接通讯,断线重连,设备心跳检测,也负责与电话语音平台,短信平台之间的连接。当需要向用户下发电话语音通知、短信通知时需通过通信管理模块。
2.4 软件的详细设计
总控程序
总控程序是整个服务端的启动Main程序,它主要负责整个系统的启动(配置读取,模块载入)和关闭工作,并对程序的运行进行日志Log记录。当运行总控程序时,它会从配罝文件中读入各种参数Params,并加载所有模块Modules,包括数据库模块Database Module、主人信息管理模块、宠物定位设备信息模块、宠物定位历史轨迹模块、宠物实时定位模块、特殊警报模块、通信管理并将系统的运行情况记录在Log日志中,以备管理员査看6其中,为检测模块是否运行正确,需要运行测试程序,测试程序(TestPmgram)中包含服务中心的一些服 务函数以及测试数据,根据返回值是否正确来判断系统运行情况。
Figure 1总控程序的运行流程图
2.4.1主人信息管理模块
主人信息管理模块负责对宠物主人的权限进行认证,主要判断用户是否是注册了的会员,是否具有享受服务的权利,是否与某用户为好友关系等。服务器服务器再数据的持久层方面使用了Hibernate层,其中用户信息类(User)是服务平台商传递最频繁的公共参数质疑。主人信息管理模块负责对用户信息进行初始化,填写一些基本的信息。
鉴权的过程很简单,主要是在数据库的用户信息表和服务定制表中进行查询,找到用户的当前服务状态,并填充User用户类,返回给系统,系统会根据鉴权借故偶选择不同的服务路径。注意,刚注册的用户需要绑定自己的宠物定位设备才能,查询到自己的宠物定位信息
Figure 2 User类主要数据成员表
类名 | user | |
主要数据成员 | 主要数据成员名 | 说明 |
String userName | 用户名 |
String nickName | 用户昵称 |
String passMD5 | 用户密码密文,md5加密 |
String sex | 用户性别 |
Date birthday | 用户出生日期 |
String address | 用户通讯地址 |
Datetime regDate | 用户注册时间 |
String ip | 用户最后一次登录ip |
unsigned int deviceListID | 用户绑定的定位设备列表 |
2.4.2宠物定位设备信息管理
宠物定位设备信息管理模块负责对定位设备的权限进行认证,主要判断该设备是否是注册了的设备,是否具有享受服务的权利。服务器服务器再数据的持久层方面使用了Hibernate层,其中定位设备信息类(LocatorDevice)是服务平台商传递最频繁的公共参数质疑。宠物定位设备信息管理对设备信息进行初始化。
Figure 3 LocatorDevice类主要数据成员表
类名 | LocatorDevice | |
主要数据成员 | 主要数据成员名 | 说明 |
String deviceName | 设备名称 |
String deviceID | 定位设备的ID号,唯一 |
String deviceToken | 定位设备的token,特别说明该token用于验证登录类似于密码 |
2.4.3宠物定位历史轨迹管理
宠物定位历史轨迹管理模块,包含一个管理器类LocationHistoryManager,首先定义了定位历史数据的基本格式 Location 。当用户需要查询宠物定位设备的历史轨迹时,调用getHistoryByDate 方法来获得定位设备的历史轨迹。
Figure 4 Location 的主要数据成员表
类名 | Location | |
主要数据成员 | 主要数据成员名 | 说明 |
Datetime utctime | 所有的定位服务都是用统一utc时间 |
float latitude | 纬度,格式度分.ddmm.mmmm(度分)格式 |
char latitudeHemisphere | 纬度半球,取值为E(东经)或W(西经) |
float longitude | 经度dddmm.mmmm(度分)格式 |
char longitudeHemisphere | 经度半球E(东经)或W(西经) |
类名 | LocationHistoryManager | |
主要成员函数 | 主要成员函数名 | |
getHistoryByDate() | 获得定位的历史数据,以日期节点 |
addLocationHistory() | 增加定位的历史数据 |
removeLocationHistory() | 删除定位的历史数据 |
2.4.4宠物实时定位管理
宠物实时定位管理模块负责接收定位设备的实时定位数据并存储在数据库和内存当中。首先设计了管理器类 PetRealLocationManager 。用于管理宠物的实时定位信息
Figure 5 PetRealLocationManager 的主要成员函数
类名 | PetRealLocationManager | |
主要成员函数 | 主要成员函数名 | |
AddPetRealLocationByDeviceID | 增加一条宠物的实时定位信息 |
UpdateRealLocationByDeviceID | 更新宠物的实时定位信息 |
SetElectronicFenceByDeviceID | 设置宠物的电子围栏信息 |
ElectronicFence类用于定义宠物的电子围栏类型和基本信息
Figure 6 ElectronicFence 的主要数据成员
类名 | ElectronicFence | 电子围栏 |
主要数据成员 | 主要数据成员名 | 说明 |
int type | 围栏类型 0 圆形, 1 矩形, 2, 多边形 |
int radius | 围栏半径,用于圆形围栏 |
int length | 围栏长, 用于矩形围栏 |
int width | 围栏宽,用于矩形围栏 |
List Polygon | 用于多边形围栏 |
Figure 7 实时定位信息的处理流程
2.4.5特殊警报管理
特殊警报管理模块设计了特殊警报类SpecialAlert。
类名 | SpecialAlert | 特殊警报 |
主要成员函数 | 主要成员函数名 | |
CheckDeviceLocation | 每一帧调用此方法检查设备的当前位置 |
IsLocationOutOfFence | 调用这个方法检查设备是否出了围栏 |
SendFenceAlertToUser | 向用户发围栏警报,告知用户宠物在围栏之外 |
ReciveDeviceAlertFromDevice | 接受定位设备的故障警报 |
SendDeviceAlertToUser | 向用户发送设备故障警报 |
数据库设计
Figure 8 User表结构
名称 | 数据类型 | 说明 |
ID | INTEGER | 用户id |
userName | CHAR(100) | 用户名 |
passMD5 | CHAR(32) | 用户密码 |
sex | CHAR(2) | 用户性别 |
birthday | DATETIME | 用户出生日期 |
address | CHAR(255) | 用户通信地址 |
regDate | DATETIME | 注册日期 |
ip | CHAR(12) | ip地址 |
deviceListID | CHAR(12) | 绑定设备列表id |
Figure 9 LocatorDevice 表结构
名称 | 数据类型 | 说明 |
deviceName | CHAR(100) | 设备 |
deviceID | CHAR(32) | 定位设备的ID号,唯一 |
deviceToken | CHAR(2) | 定位设备的token,特别说明该token用于验证登录类似于密码 |
Figure 10 Location 表结构
名称 | 数据类型 | 说明 |
localtionId | INTEGER | 定位信息id |
utctime | INTEGER | 所有的定位服务都是用统一utc时间 |
latitude | DOUBLE | 纬度,格式度分.ddmm.mmmm(度分)格式 |
latitudeHemisphere | CHAR(1) | 纬度半球,取值为E(东经)或W(西经) |
longitude | DOUBLE | 经度dddmm.mmmm(度分)格式 |
longitudeHemisphere | CHAR(1) | 经度半球E(东经)或W(西经) |
Figure 11 LocationHistory 表结构
名称 | 数据类型 | 说明 |
historyId | INTEGER | 定位历史id |
utctime | INTEGER | 所有的定位服务都是用统一utc时间 |
deviceID | CHAR(32) | 定位设备的ID号,唯一 |
Figure 12 Log表结构
名称 | 数据类型 | 说明 |
LogID | int | 标识(自增) |
UserCode | varchar(50) | 用户代码 |
UserName | varchar(100) | 用户名 |
LoginIP | varchar(20) | 登录IP |
Type | int | 操作类型 |
Operation | varchar(1000) | 操作内容 |
CreateDate | datetime | 操作时间 |
Remark | varchar(500) | 备注 |