# 离场场景配置控制开门功能实现 ## 需求描述 用户需求:"进行离场核销时, 如果pad_config中gate_enter_open_enable为true, 不进行网络核销, 直接执行开门" ## 实现方案 ### 1. 配置项位置 配置项 `gate_enter_open_enable` 位于: ``` pad_config -> extension -> pad_setting -> gate_enter_open_enable ``` ### 2. 配置获取方法 使用现有的 `VenueSceneUtils.getGateConfig()` 方法获取配置: ```java VenueSceneUtils.GateConfig gateConfig = VenueSceneUtils.getGateConfig(context); boolean gateEnterOpenEnable = gateConfig != null && gateConfig.gateEnterOpenEnable; ``` ### 3. 修改的文件 **主要修改文件**:`OXFaceOnlineActivity.java` **修改方法**:`checkResultOnline()` ### 4. 具体实现逻辑 在离场场景下的人脸识别成功后,增加配置检查逻辑: ```java // 判断是进场还是离场场景 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` 或不存在:保持原有的网络校验流程,确保业务安全 修改简洁且安全,具有良好的向后兼容性。