# GateAB门禁控制模块实现说明 ## 概述 本次实现了一个完整的GateAB门禁控制模块,包含开门控制逻辑和配置参数管理系统。该模块参考了uniapp中的JavaScript实现,并与现有的Android门禁系统完美集成。 ## 实现的文件 ### 1. GateABController.java 主要的AB门控制器类,实现了以下功能: #### 核心功能 - **开门控制**:`openGateAB(callback)` - 实现了完整的开门逻辑 - **配置管理**:自动同步PadSetting配置参数 - **多种开门方式**: - GPIO继电器开门(优先) - UDP控制开门 - 网络接口开门 #### 配置同步机制 - **定时同步**:每1分钟自动同步一次配置 - **实时更新**:从DeviceSelectDataManager的PadSetting获取最新配置 - **完整参数支持**:包含所有uniapp state参数 ### 2. PadSetting类扩展 在`PadApiService.java`中为PadSetting类添加了缺失的字段: ```java @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. 初始化 ```java // 在Activity的onCreate中 GateABController gateController = GateABController.getInstance(); gateController.initialize(this); ``` ### 2. 执行开门 ```java 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. 获取配置 ```java GateABController.GateABConfig config = gateController.getCurrentConfig(); boolean isGpioEnabled = config.gateAbGpio; boolean isAbEnabled = config.gateAbEnable; ``` ### 4. 资源清理 ```java // 在Activity的onDestroy中 gateController.release(); ``` ## 技术特点 ### 1. 单例模式 使用双重检查锁定的单例模式,确保全局唯一实例。 ### 2. 异步处理 开门操作在后台线程执行,避免阻塞UI线程。 ### 3. 回调机制 提供成功和失败的回调接口,便于上层处理结果。 ### 4. 配置同步 每分钟自动同步配置,确保参数实时更新。 ### 5. 错误处理 完整的异常捕获和日志记录,便于问题排查。 ## 与现有系统的集成 ### 1. 继电器控制集成 GateAB控制器内部使用了现有的`RelayController`类: ```java private RelayController relayController = RelayController.getInstance(); ``` ### 2. 配置管理集成 与`DeviceSelectDataManager`的`PadSetting`完全兼容: ```java DeviceSelectDataManager.PadSetting padSetting = deviceDataManager.getPadSetting(); ``` ### 3. 日志系统集成 使用现有的`LogManager`进行日志记录: ```java 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门控制功能。