oxFaceAndroid
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

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. 配置管理集成

DeviceSelectDataManagerPadSetting完全兼容:

DeviceSelectDataManager.PadSetting padSetting = deviceDataManager.getPadSetting();

3. 日志系统集成

使用现有的LogManager进行日志记录:

LogManager.logInfo(TAG, "操作信息");
LogManager.logError(TAG, "错误信息", exception);

测试建议

1. 功能测试

  • 测试GPIO继电器开门
  • 测试UDP控制开门
  • 测试网络接口开门
  • 测试配置同步机制

2. 边界测试

  • 配置为空时的处理
  • 网络异常时的处理
  • 硬件故障时的处理

3. 性能测试

  • 配置同步的内存消耗
  • 并发开门请求处理
  • 长时间运行稳定性

总结

本次实现完成了以下目标:

  1. 开门函数实现:完整实现了参考JavaScript逻辑的openGateAB()函数
  2. 配置参数存储:将uniapp的state参数完整映射到Android PadSetting
  3. 定时同步机制:实现了每1分钟的配置参数同步更新
  4. 完整集成:与现有的继电器控制和配置管理系统无缝集成

该模块现在可以直接在Android人脸识别门禁系统中使用,提供可靠的AB门控制功能。