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.

4.7 KiB

离场场景配置控制开门功能实现

需求描述

用户需求:"进行离场核销时, 如果pad_config中gate_enter_open_enable为true, 不进行网络核销, 直接执行开门"

实现方案

1. 配置项位置

配置项 gate_enter_open_enable 位于:

pad_config -> extension -> pad_setting -> gate_enter_open_enable

2. 配置获取方法

使用现有的 VenueSceneUtils.getGateConfig() 方法获取配置:

VenueSceneUtils.GateConfig gateConfig = VenueSceneUtils.getGateConfig(context);
boolean gateEnterOpenEnable = gateConfig != null && gateConfig.gateEnterOpenEnable;

3. 修改的文件

主要修改文件OXFaceOnlineActivity.java 修改方法checkResultOnline()

4. 具体实现逻辑

在离场场景下的人脸识别成功后,增加配置检查逻辑:

// 判断是进场还是离场场景
if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) {
    // 离场场景:检查gate_enter_open_enable配置
    VenueSceneUtils.GateConfig gateConfig = VenueSceneUtils.getGateConfig(OXFaceOnlineActivity.this);
    if (gateConfig != null && gateConfig.gateEnterOpenEnable) {
        // 如果gate_enter_open_enable为true,直接开门不进行网络核销
        LogManager.logInfo(TAG, "检测到离场场景,gate_enter_open_enable为true,直接开启B门");
        showLoadingStatus("离场验证成功");
        
        // 2秒后隐藏提示并开门
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                hideLoadingStatus();
                
                // 直接开启B门
                if (isUDPInitialized && udpExample != null) {
                    LogManager.logInfo(TAG, "gate_enter_open_enable为true,直接开启B门");
                    udpExample.handleFaceRecognitionSuccess(false);
                }
            }
        }, 2000);
    } else {
        // gate_enter_open_enable为false或配置不存在,按正常流程进行网络校验
        if (isNetworkAvailable()) {
            LogManager.logInfo(TAG, "检测到离场场景,网络可用,执行离场校验");
            performLeaveVerification(base64img);
        } else {
            // 网络不可用处理逻辑...
        }
    }
}

业务流程

配置为 true 时的流程

人脸识别成功 → 获取base64图像 → 检查配置 → gate_enter_open_enable=true → 直接开启B门

配置为 false 时的流程

人脸识别成功 → 获取base64图像 → 检查配置 → gate_enter_open_enable=false → 网络校验 → 校验成功 → 开启B门

用户体验优化

  1. 配置为true时

    • 显示 "离场验证成功" 提示
    • 2秒后自动开门
    • 无需等待网络请求,提升通行速度
  2. 配置为false时

    • 保持原有的网络校验流程
    • 确保业务安全性

配置项说明

  • gate_enter_open_enable: 门禁进入开启使能
  • 类型: boolean
  • 默认值: false
  • 作用: 控制离场时是否跳过网络验证直接开门

日志输出

配置为true时的日志

检测到离场场景,gate_enter_open_enable为true,直接开启B门
gate_enter_open_enable为true,直接开启B门

配置为false时的日志

检测到离场场景,网络可用,执行离场校验
// 后续为正常的网络校验日志

安全考虑

  1. 配置验证:检查配置对象是否为null,避免空指针异常
  2. 向后兼容:如果配置不存在或为false,保持原有的网络校验流程
  3. 日志记录:详细记录配置状态和执行流程,便于问题排查

测试建议

测试场景1:配置为true

  1. 设置 gate_enter_open_enable = true
  2. 进入离场场景
  3. 进行人脸识别
  4. 验证:应直接开门,不进行网络请求

测试场景2:配置为false

  1. 设置 gate_enter_open_enable = false
  2. 进入离场场景
  3. 进行人脸识别
  4. 验证:应进行网络校验,校验成功后开门

测试场景3:配置缺失

  1. 移除或损坏配置信息
  2. 进入离场场景
  3. 进行人脸识别
  4. 验证:应按原有流程进行网络校验(向后兼容)

影响范围

  • 仅影响离场场景:进场场景的逻辑保持不变
  • 不影响网络校验成功的回调:原有的开门逻辑保持不变
  • 不影响其他验证方式:验证码、扫码等方式不受影响

总结

此次修改实现了根据配置项 gate_enter_open_enable 来控制离场时是否跳过网络验证的功能:

  • 配置为 true:离场时直接开门,提升用户通行体验
  • 配置为 false 或不存在:保持原有的网络校验流程,确保业务安全

修改简洁且安全,具有良好的向后兼容性。