diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index 0d4060d..ddcdd2e 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -1793,6 +1793,36 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi private void checkResultOnline(LivenessModel livenessModel) { this.currentLivenessModel = livenessModel; + // 判断是进场还是离场场景 + if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { + // 离场场景:检查gate_open_enable配置(0922沟通后确认使用gate_open_enable字段) + VenueSceneUtils.GateConfig gateConfig = VenueSceneUtils.getGateConfig(OXFaceOnlineActivity.this); + // 修改为判断gateOpenEnable字段,而不是gateEnterOpenEnable + if (gateConfig != null && gateConfig.gateOpenEnable) { + // 如果 gate_open_enable 为 true,直接开门不进行网络核销 + LogManager.logInfo(TAG, "检测到离场场景,gate_open_enable为true,直接开启B门"); + showLoadingStatus("门已打开,请直接离场"); + + // 直接开启B门 + if (gateABController != null) { + LogManager.logInfo(TAG, "gate_open_enable为true,直接开启B门"); + gateABController.handleFaceRecognitionSuccess(false); // 参数保留兼容性,实际都开B门 + + } + pauseCamera(); + // 5秒后隐藏提示并恢复摄像头 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + hideLoadingStatus(); + resumeCamera(); + } + }, 5000); + + return; + } + } + // 离场网络中断检测逻辑:检测(当前是离场&&当前网络中断){直接执行openGateAB,而不再继续执行后续逻辑} try { boolean isLeaveScene = VenueSceneUtils.isLeaveScene(this); @@ -1970,30 +2000,13 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 判断是进场还是离场场景 if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { - // 离场场景:检查gate_enter_open_enable配置 + // 离场场景:检查gate_open_enable配置(0922沟通后确认使用gate_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("门已打开,请直接离场"); - - // 直接开启B门 - if (gateABController != null) { - LogManager.logInfo(TAG, "gate_enter_open_enable为true,直接开启B门"); - gateABController.handleFaceRecognitionSuccess(false); // 参数保留兼容性,实际都开B门 - - } - pauseCamera(); - // 2秒后隐藏提示并开门 - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - hideLoadingStatus(); - resumeCamera(); - } - }, 5000); + // 修改为判断gateOpenEnable字段,而不是gateEnterOpenEnable + if (gateConfig != null && gateConfig.gateOpenEnable) { + // 如果 gate_open_enable 为 true,直接开门不进行网络核销,该逻辑已转移 } else { - // gate_enter_open_enable 为 false 或配置不存在,按正常流程进行网络校验 + // gate_open_enable 为 false 或配置不存在,按正常流程进行网络校验 if (isNetworkAvailable()) { LogManager.logInfo(TAG, "检测到离场场景,网络可用,执行离场校验"); performLeaveVerification(base64img); diff --git a/app/src/main/java/com/ouxuan/oxface/utils/VenueSceneUtils.java b/app/src/main/java/com/ouxuan/oxface/utils/VenueSceneUtils.java index 9a03b18..3b2143e 100644 --- a/app/src/main/java/com/ouxuan/oxface/utils/VenueSceneUtils.java +++ b/app/src/main/java/com/ouxuan/oxface/utils/VenueSceneUtils.java @@ -179,6 +179,11 @@ public class VenueSceneUtils { gateConfig.gateEnterOpenEnable = padConfig.getExtension() != null && padConfig.getExtension().getPadSetting() != null && padConfig.getExtension().getPadSetting().isGateEnterOpenEnable(); + + // 新增获取gateOpenEnable配置 + gateConfig.gateOpenEnable = padConfig.getExtension() != null && + padConfig.getExtension().getPadSetting() != null && + padConfig.getExtension().getPadSetting().isGateOpenEnable(); gateConfig.gateAbEnable = padConfig.getExtension() != null && padConfig.getExtension().getPadSetting() != null && @@ -193,6 +198,7 @@ public class VenueSceneUtils { padConfig.getExtension().getPadSetting().isGateAbUdp(); Log.d(TAG, "门禁配置 - EnterOpenEnable: " + gateConfig.gateEnterOpenEnable + + ", OpenEnable: " + gateConfig.gateOpenEnable + ", AbGpio: " + gateConfig.gateAbGpio + ", AbUdp: " + gateConfig.gateAbUdp + ", AbEnable: " + gateConfig.gateAbEnable); @@ -212,7 +218,8 @@ public class VenueSceneUtils { * 门禁配置信息类 */ public static class GateConfig { - public boolean gateEnterOpenEnable = false; // 门禁进入开启使能 + public boolean gateEnterOpenEnable = false; // 门禁进入开启使能(保留但不使用) + public boolean gateOpenEnable = false; // 门禁开启使能(新增) public boolean gateAbGpio = false; // 门禁AB GPIO public boolean gateAbUdp = false; // 门禁AB UDP public boolean gateAbEnable = false; // ab门总开关 @@ -221,6 +228,7 @@ public class VenueSceneUtils { public String toString() { return "GateConfig{" + "gateEnterOpenEnable=" + gateEnterOpenEnable + + ", gateOpenEnable=" + gateOpenEnable + ", gateAbGpio=" + gateAbGpio + ", gateAbUdp=" + gateAbUdp + ", gateAbEnable=" + gateAbEnable + diff --git a/离场场景配置控制开门功能说明.md b/离场场景配置控制开门功能说明.md index a876348..4f503c9 100644 --- a/离场场景配置控制开门功能说明.md +++ b/离场场景配置控制开门功能说明.md @@ -2,15 +2,15 @@ ## 需求描述 -用户需求:"进行离场核销时, 如果pad_config中gate_enter_open_enable为true, 不进行网络核销, 直接执行开门" +用户需求:"进行离场核销时, 如果pad_config中gate_open_enable为true, 不进行网络核销, 直接执行开门" ## 实现方案 ### 1. 配置项位置 -配置项 `gate_enter_open_enable` 位于: +配置项 `gate_open_enable` 位于: ``` -pad_config -> extension -> pad_setting -> gate_enter_open_enable +pad_config -> extension -> pad_setting -> gate_open_enable ``` ### 2. 配置获取方法 @@ -18,7 +18,7 @@ pad_config -> extension -> pad_setting -> gate_enter_open_enable 使用现有的 `VenueSceneUtils.getGateConfig()` 方法获取配置: ```java VenueSceneUtils.GateConfig gateConfig = VenueSceneUtils.getGateConfig(context); -boolean gateEnterOpenEnable = gateConfig != null && gateConfig.gateEnterOpenEnable; +boolean gateOpenEnable = gateConfig != null && gateConfig.gateOpenEnable; ``` ### 3. 修改的文件 @@ -33,28 +33,30 @@ boolean gateEnterOpenEnable = gateConfig != null && gateConfig.gateEnterOpenEnab ```java // 判断是进场还是离场场景 if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { - // 离场场景:检查gate_enter_open_enable配置 + // 离场场景:检查gate_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("离场验证成功"); + if (gateConfig != null && gateConfig.gateOpenEnable) { + // 如果gate_open_enable为true,直接开门不进行网络核销 + LogManager.logInfo(TAG, "检测到离场场景,gate_open_enable为true,直接开启B门"); + showLoadingStatus("门已打开,请直接离场"); - // 2秒后隐藏提示并开门 + // 直接开启B门 + if (gateABController != null) { + LogManager.logInfo(TAG, "gate_open_enable为true,直接开启B门"); + gateABController.handleFaceRecognitionSuccess(false); + } + + pauseCamera(); + // 5秒后隐藏提示并恢复摄像头 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); - } + resumeCamera(); } - }, 2000); + }, 5000); } else { - // gate_enter_open_enable为false或配置不存在,按正常流程进行网络校验 + // gate_open_enable为false或配置不存在,按正常流程进行网络校验 if (isNetworkAvailable()) { LogManager.logInfo(TAG, "检测到离场场景,网络可用,执行离场校验"); performLeaveVerification(base64img); @@ -69,19 +71,19 @@ if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { ### 配置为 true 时的流程 ``` -人脸识别成功 → 获取base64图像 → 检查配置 → gate_enter_open_enable=true → 直接开启B门 +人脸识别成功 → 获取base64图像 → 检查配置 → gate_open_enable=true → 直接开启B门 ``` ### 配置为 false 时的流程 ``` -人脸识别成功 → 获取base64图像 → 检查配置 → gate_enter_open_enable=false → 网络校验 → 校验成功 → 开启B门 +人脸识别成功 → 获取base64图像 → 检查配置 → gate_open_enable=false → 网络校验 → 校验成功 → 开启B门 ``` ## 用户体验优化 1. **配置为true时**: - - 显示 "离场验证成功" 提示 - - 2秒后自动开门 + - 显示 "门已打开,请直接离场" 提示 + - 5秒后自动开门并恢复摄像头 - 无需等待网络请求,提升通行速度 2. **配置为false时**: @@ -90,7 +92,7 @@ if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { ## 配置项说明 -- **gate_enter_open_enable**: 门禁进入开启使能 +- **gate_open_enable**: 门禁开启使能 - **类型**: boolean - **默认值**: false - **作用**: 控制离场时是否跳过网络验证直接开门 @@ -99,8 +101,8 @@ if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { ### 配置为true时的日志 ``` -检测到离场场景,gate_enter_open_enable为true,直接开启B门 -gate_enter_open_enable为true,直接开启B门 +检测到离场场景,gate_open_enable为true,直接开启B门 +gate_open_enable为true,直接开启B门 ``` ### 配置为false时的日志 @@ -118,13 +120,13 @@ gate_enter_open_enable为true,直接开启B门 ## 测试建议 ### 测试场景1:配置为true -1. 设置 `gate_enter_open_enable = true` +1. 设置 `gate_open_enable = true` 2. 进入离场场景 3. 进行人脸识别 4. 验证:应直接开门,不进行网络请求 ### 测试场景2:配置为false -1. 设置 `gate_enter_open_enable = false` +1. 设置 `gate_open_enable = false` 2. 进入离场场景 3. 进行人脸识别 4. 验证:应进行网络校验,校验成功后开门 @@ -143,7 +145,7 @@ gate_enter_open_enable为true,直接开启B门 ## 总结 -此次修改实现了根据配置项 `gate_enter_open_enable` 来控制离场时是否跳过网络验证的功能: +此次修改实现了根据配置项 `gate_open_enable` 来控制离场时是否跳过网络验证的功能: - 配置为 `true`:离场时直接开门,提升用户通行体验 - 配置为 `false` 或不存在:保持原有的网络校验流程,确保业务安全