围栏
2019-01-23 本文已影响0人
liangtong
围栏描述
在设备满足特定场景前提下,当用户手持安装应用的设备进入/离开勘察工作区域时,程序需要给用户进行响应及提醒。
实际情况中,由于工作场景的不同,围栏个数不确定。比如地铁项目、(跨区的)园区建设项目。
针对某个工程,要求程序的提示不能太过频繁。即当用户在项目围栏边界区域连续触发进入/离开工作区域时,不能重复提醒。且需要考虑用户多设备的情况。
-
进入围栏
- 程序未启动 -> 打开程序,直接打开项目操作详情页,方便用户操作。
- 若参与项目的状态处于「工作中」状态下
- 检查用户针对该项目的最新操作状态,处理异常。
- 若参与项目的状态处于「空闲中」状态下,给用户提示。用户可选择交互动作包括:
- 刷新工程操作页面。
- 进入项目操作页。
-
离开
- 若参与项目的状态处于「工作中」状态下,程序在后台进行「签退」操作。
方案
地理围栏借助于 高德地图 配合后台模式来实现。
程序的提醒频次控制借助于 SQLite 数据库缓存来实现。
后续相关操作借助于 观察者 模式实现。
此处重点说明下程序提醒频次控制的实现思路及流转次序。
缓存数据库中主要存储以下几点信息:
- 标识:用于工程和地理围栏的挂钩。
- 工作状态:用于判断用户针对该工程的操作。
- 触发时机:用于频次控制。
- 其他:用于组织提醒用户内容等。
流转次序如下:
- 若用户是外业见证人员,则在程序启动时,获取用户所参与的项目的总览信息(特别说明包括外业工作状态)。
- 构建并监听项目的地理围栏。
- 触发进入围栏操作时
- 根据地理围栏标识(移动端自行约定),在本地SQLite数据库中进行碰撞,查找缓存中的工程。
- 若能找到工程,则进行以下操作。以兼容用户多设备操作的情况。
- 获取该工程的概况,根据用户对应该工程的操作状态进行响应。
- 更新缓存数据。
- 若不能找到工程,则通知前台可进入项目操作页(针对打开程序时,直接进入项目操作页)。
- 触发离开围栏操作时
- 等待60秒后执行以下操作,防止边界上因为GPS不准确导致提醒不准确。
- 根据地理围栏标识,在本地SQLite数据库中查找缓存中的工程。
- 若能找到工程,则进行以下操作
- 查看设备是否处于该工程下的其他地理围栏中(针对工程多区域现象)。
- 如果设备不处于工程的地理围栏中。则在后台进行「签退」操作。
- 更新缓存数据。