本项目采用前后端分离方式实现 后端基于SpringBoot搭建,采用jersey+redis+mybatis+mysql架构实现 前后端通信方式为restful请求和webSocket推送,数据传输格式为json,解决了跨域访问问题 前端基于Cordova搭建,实现基于vue.js实现的单页面html5应用,代码位于cordova文件夹内,其中需要前端修改的代码位于www文件夹中,其余文件均 为Cordova自动生成
后端代码及模块介绍:
后端主要功能模块分为设备(基站)管理、任务及巡检、用户管理三部分。代码组织架构依然按照SpringMVC的组织架构,核心包包括controller、service、entity、repository, 除此之外还包括:后台运行程序包backend、通用类包common、工具类包utils、SpringBoot配置文件包config、前端视图对象包vo、webSocket包
Controller: 负责接收前端请求,并返回前端需要的数据,只包含最简单的逻辑; 采用jersey构建基于restful的请求接口,主要采用GET和POST请求; 数据传输格式json,json工具类采用fastJson;
这里需要重点讲的是功能较为复杂的有两个接口分别是TaskController和UserController
TaskController 管理所有任务Task相关接口,这里需要理清几个概念:任务、巡检、值守、故障,已经它们与用户、基站的关系 任务Task:按照 管理者发布任务→工程人员接受任务→执行任务→完成并提交任务→管理者结束任务 的流程执行;任务的类型目前分为巡检任务、抢修任务、值守任务, 后续会根据需求新增更多任务类型,巡检和抢修的内容相同所以并称巡检使用同一个类Inspect,值守任务单独为一个类Watch; 巡检Inspect:一条巡检数据代表用户的一次巡检的过程,与唯一基站绑定,巡检有两个状态正在执行和结束,巡检类型分为自主巡检、任务巡检(其中包括普通巡检和抢修); 故障TroubleShoot:一条数据代表一条故障信息,故障是在巡检过程中发现并提交的,包括未解决和已解决两个状态,由于用户重点关注,且内容较多(包括图片、语音),所以 从巡检中剥离出来单独成表; 值守Watch:一条值守数据代表一次值守的过程,值守不一定与基站绑定(可选项),值守有两个状态正在执行和结束,目前值守没有类型之分; 通过上述说明,可以总结出,任务及巡检模块满足如下规则: 1、巡检与任务非强关联,即一对0~N关系,自主巡检不与任务关联、任务巡检与任务关联,且一次基站巡检可以选择性的完成提交一个或多个对应的任务; 2、值守与任务属于一对一关系、与用户属于一对一关系、与设备可能没关系,如果有则属于一对一关系; 3、巡检与设备属于一对一关系、与用户属于一对一关系、与故障属于一对多关系; 4、任务与用户属于一对一关系,任务发布时可以不选执行者,此时工程人员可以主动接任务(抢单); 5、任务和设备属于一对一关系,巡检任务必选设备,值守任务可选设备; 6、具备批量发布任务功能, 即发布时可同时选择多个设备、多个用户,后台会自动将任务拆分成多个; 除此之外,TaskController还包括巡检、值守历史查询及导入导出。
UserController 管理所有用户User相关接口,这里同样需要了解几个概念:用户权限、用户归属设备组、用户巡检设备类型 用户接口除了包括用户的注册登录认证模块外,还包括用户的其他关联属性的配置,其中主要就是与设备和巡检的关联 用户权限Role:由于前后端分离,Restful请求无状态(无Session),所以目前采用前端自行根据用户的roleId属性值做前端分权,后端暂未做分权处理;超级管理员 负责为用户分配权限;目前权限分为三个级别:超级管理员、管理员(任务发布人)、普通用户(工程人员); 设备(基站)组FacilityGroup:顾名思义设备组包括多个设备,可以配置多个设备组,主要用于分域功能;管理员可以配置设备组并为工程人员分配设备组, 设备组与用户属于一对一关系,管理员归属设备组默认为全基站; 巡检设备类型InspectDeviceType:基站其实由多种不同的设备组成,包括比如供电设备、基建设备、网络设备等等,不同用户需要巡检的设备类型是不同的; 用户与设备巡检类型属于多对多关系;管理员为工程人员分配设备巡检类型,并配置设备巡检类型,其中设备巡检类型包括巡检项目和子模块两个选项。
Service 用于执行程序的大部分业务逻辑,功能与Controller对应。
Repository 数据访问相关类,其中包括:基于Mybatis的数据库访问对象包dao、基于Mina+RXTX的串口数据通信包serial、基于VertX的异步数据通信包。
Entity 实体,包括:告警、设备、设备组、巡检、巡检设备类型、巡检设备类型目录、巡检设备类型子模块、基站信息、角色、任务、故障、用户、值守。
Backend 后台运行线程包,其中包括: 初始化启动类ServiceManager,这里将其放在BsmsApplication启动之后,负责创建数据表、启动后台运行线程、初始化VertX; 目前系统包括三个后台线程: 1、设备信息同步线程,实时检测从网管发送过来的基站列表是否发生变化,若变化则更新数据; 2、缓存初始化线程,为webSocket中实时请求的数据创建了Redis缓存,包括设备组、用户、任务数据,并指定时间检测缓存是否被清除,若被清除,重新创建缓存; 3、定时器线程,用于每天凌晨1点检测当前时间是否为1号,若为1号则创建月表,具体实现见代码。
Config springBoot自定义组件配置文件,springBoot将原来spring中xml文件的配置挪到了java文件中,并用@Configuration注解; 其中JerseyConfig的配置是在BsmsApplication中完成的,其实springBoot已经默认配置了restful(通过@RestController进行注解即可),可以考虑更换。
WebSocket 包括告警实时推送和任务实时推送;
Common 存放了一些通用的功能,包括excel导出类、filter、security、servlet;
Utils 各种工具类
Vo 针对前端需求,提供的专用视图对象,主要是几个统计相关的类