You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.8 KiB
5.8 KiB
GateAB门禁控制模块实现说明
概述
本次实现了一个完整的GateAB门禁控制模块,包含开门控制逻辑和配置参数管理系统。该模块参考了uniapp中的JavaScript实现,并与现有的Android门禁系统完美集成。
实现的文件
1. GateABController.java
主要的AB门控制器类,实现了以下功能:
核心功能
- 开门控制:
openGateAB(callback)
- 实现了完整的开门逻辑 - 配置管理:自动同步PadSetting配置参数
- 多种开门方式:
- GPIO继电器开门(优先)
- UDP控制开门
- 网络接口开门
配置同步机制
- 定时同步:每1分钟自动同步一次配置
- 实时更新:从DeviceSelectDataManager的PadSetting获取最新配置
- 完整参数支持:包含所有uniapp state参数
2. PadSetting类扩展
在PadApiService.java
中为PadSetting类添加了缺失的字段:
@SerializedName("gate_open_reset")
private boolean gateOpenReset;
@SerializedName("face_detecting")
private boolean faceDetecting;
@SerializedName("gate_ab_no_voice_after_order_check")
private boolean gateAbNoVoiceAfterOrderCheck;
@SerializedName("gate_loop_count_people_lock")
private boolean gateLoopCountPeopleLock;
@SerializedName("gate_loop_count_people_times")
private Object gateLoopCountPeopleTimes;
3. GateABControllerUsageExample.java
使用示例类,演示了如何在实际项目中集成和使用GateAB控制器。
开门逻辑流程
基于JavaScript原始实现,开门逻辑按以下优先级执行:
1. 检查AB门状态 -> 获取配置参数
2. 验证开门条件 -> 检查门是否关闭
3. 选择开门方式:
├─ GPIO继电器开门(第一优先级)
├─ UDP控制开门(第二优先级)
└─ 网络接口开门(第三优先级)
4. 执行开门操作 -> 回调结果
配置参数映射
以下是uniapp state参数与Android PadSetting的完整映射:
uniapp参数 | Android字段 | 类型 | 说明 |
---|---|---|---|
gate_ab_enable | gateAbEnable | boolean | AB门禁开关 |
gate_open_enable | gateOpenEnable | boolean | 核销结束开启门禁 |
gate_ab_enter01_enable | gateAbEnter01Enable | boolean | 进场门内大于0或1人都开门 |
gate_ab_always_check | gateAbAlwaysCheck | boolean | 首页AB门状态是否一直轮询 |
gate_ab_gpio | gateAbGpio | boolean | 是否使用gpio控制AB门 |
gate_ab_udp | gateAbUdp | boolean | 门禁UDP模式开关 |
gate_open_reset | gateOpenReset | boolean | 开门状态返回close |
gate_enter_open_enable | gateEnterOpenEnable | boolean | 进场离线识别后直接开门 |
is_auto_detect | isAutoDetect | boolean | 是否开启靠近自动检测 |
gate_ab_test_on | gateAbTestOn | boolean | 是否在主页显示测试开关 |
face_detecting | faceDetecting | boolean | 人脸检测状态 |
gate_ab_close | gateAbClose | boolean | AB门关闭状态 |
living_control | livingControl | boolean | 是否开启活体检测 |
gate_ab_no_voice_after_order_check | gateAbNoVoiceAfterOrderCheck | boolean | 进场核销开门后5s内不再提示 |
集成方式
1. 初始化
// 在Activity的onCreate中
GateABController gateController = GateABController.getInstance();
gateController.initialize(this);
2. 执行开门
gateController.openGateAB(new GateABController.GateControlCallback() {
@Override
public void onSuccess(String message) {
// 开门成功处理
LogManager.logInfo(TAG, "开门成功: " + message);
}
@Override
public void onError(String errorMessage) {
// 开门失败处理
LogManager.logError(TAG, "开门失败: " + errorMessage);
}
});
3. 获取配置
GateABController.GateABConfig config = gateController.getCurrentConfig();
boolean isGpioEnabled = config.gateAbGpio;
boolean isAbEnabled = config.gateAbEnable;
4. 资源清理
// 在Activity的onDestroy中
gateController.release();
技术特点
1. 单例模式
使用双重检查锁定的单例模式,确保全局唯一实例。
2. 异步处理
开门操作在后台线程执行,避免阻塞UI线程。
3. 回调机制
提供成功和失败的回调接口,便于上层处理结果。
4. 配置同步
每分钟自动同步配置,确保参数实时更新。
5. 错误处理
完整的异常捕获和日志记录,便于问题排查。
与现有系统的集成
1. 继电器控制集成
GateAB控制器内部使用了现有的RelayController
类:
private RelayController relayController = RelayController.getInstance();
2. 配置管理集成
与DeviceSelectDataManager
的PadSetting
完全兼容:
DeviceSelectDataManager.PadSetting padSetting = deviceDataManager.getPadSetting();
3. 日志系统集成
使用现有的LogManager
进行日志记录:
LogManager.logInfo(TAG, "操作信息");
LogManager.logError(TAG, "错误信息", exception);
测试建议
1. 功能测试
- 测试GPIO继电器开门
- 测试UDP控制开门
- 测试网络接口开门
- 测试配置同步机制
2. 边界测试
- 配置为空时的处理
- 网络异常时的处理
- 硬件故障时的处理
3. 性能测试
- 配置同步的内存消耗
- 并发开门请求处理
- 长时间运行稳定性
总结
本次实现完成了以下目标:
- ✅ 开门函数实现:完整实现了参考JavaScript逻辑的
openGateAB()
函数 - ✅ 配置参数存储:将uniapp的state参数完整映射到Android PadSetting
- ✅ 定时同步机制:实现了每1分钟的配置参数同步更新
- ✅ 完整集成:与现有的继电器控制和配置管理系统无缝集成
该模块现在可以直接在Android人脸识别门禁系统中使用,提供可靠的AB门控制功能。