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.1 KiB

UDP门禁控制逻辑重构说明

重构背景

问题描述

原有的门禁控制逻辑存在问题:在人脸识别成功后立即执行开门操作,而不是等待网络请求(订单核销或离场校验)完成。这导致了业务逻辑不正确,用户可能在未通过验证的情况下就能通过门禁。

预期行为

正确的门禁控制流程应该是:

  1. 人脸识别成功 → 获取face base64数据
  2. 根据场景执行网络请求(进场:订单核销,离场:离场校验)
  3. 网络请求成功后 → 开启B门
  4. 网络不可用时 → 直接开启B门(容错机制)

重构内容

1. 架构调整

  • 移除位置: 从 checkResultOnline() 方法中移除人脸识别成功后的立即开门逻辑
  • 新增位置: 将开门逻辑移至网络请求成功的回调中

2. 具体修改点

2.1 人脸识别成功处理逻辑(移除开门)

文件: OXFaceOnlineActivity.java
方法: checkResultOnline()
修改: 移除了网络可用时的立即开门逻辑,只保留网络不可用时的容错开门机制

// 修改前:人脸识别成功后立即开门
if (isNetworkAvailable()) {
    performLeaveVerification(base64img);
    // 立即开门(错误)
    udpExample.handleFaceRecognitionSuccess(false);
}

// 修改后:人脸识别成功后只执行网络请求
if (isNetworkAvailable()) {
    performLeaveVerification(base64img);
    // 不再立即开门,等待网络请求完成
}

2.2 离场校验成功回调(新增开门)

文件: OXFaceOnlineActivity.java
方法: initLeaveVerificationManager() -> onLeaveVerificationSuccess()
修改: 在离场校验成功后执行开门操作

@Override
public void onLeaveVerificationSuccess(CheckLeaveResult result) {
    // 显示成功状态
    showSuccessStatus(result);
    
    // 新增:离场校验成功后开启B门
    if (isUDPInitialized && udpExample != null) {
        LogManager.logInfo(TAG, "离场校验成功,开启B门");
        udpExample.handleFaceRecognitionSuccess(false);
    }
}

2.3 订单核销成功回调(新增开门)

文件: OXFaceOnlineActivity.java
方法: initNetworkManagers() -> onVerificationSuccess()
修改: 在订单核销成功后执行开门操作

@Override
public void onVerificationSuccess(CheckOrderResult data, int verificationType) {
    // 新增:订单核销成功后开启B门
    if (isUDPInitialized && udpExample != null) {
        LogManager.logInfo(TAG, "订单核销成功,开启B门");
        udpExample.handleFaceRecognitionSuccess(true);
    }
    
    // 然后处理原有的页面跳转逻辑
    orderVerificationResultHandler.handleVerificationSuccess(data, verificationType);
}

3. 网络异常容错机制

保留了网络不可用时的直接开门机制,确保在网络异常情况下用户仍能正常通行:

// 网络不可用时,直接开启门禁(不进行网络校验)
if (isUDPInitialized && udpExample != null) {
    LogManager.logInfo(TAG, "网络不可用,直接开启B门");
    udpExample.handleFaceRecognitionSuccess(false);
}

重构优势

1. 业务逻辑正确性

  • 确保门禁只在验证成功后开启
  • 防止未授权用户通过门禁
  • 符合安全要求和业务规范

2. 系统可靠性

  • 网络请求与门禁控制正确解耦
  • 保留网络异常时的容错机制
  • 完整的错误处理和日志记录

3. 代码可维护性

  • 逻辑清晰,职责分离
  • 易于调试和问题排查
  • 符合项目架构规范

测试建议

1. 功能测试

  • 进场场景:人脸识别 → 订单核销成功 → B门开启
  • 离场场景:人脸识别 → 离场校验成功 → B门开启
  • 网络异常:人脸识别 → 网络不可用 → 直接开启B门

2. 异常测试

  • 网络请求失败:验证门禁不会开启
  • 服务器错误:验证系统能正确处理错误
  • 超时情况:验证超时机制正常工作

3. 日志验证

关键日志信息应包含:

LogManager: 订单核销成功,开启B门
LogManager: 离场校验成功,开启B门
LogManager: 网络不可用,直接开启B门
OxUDPUsageExample: 人脸识别成功,已发送B门开启命令
OxUDP: 执行开启B门命令

影响范围

1. 直接影响

  • OXFaceOnlineActivity: 门禁控制逻辑调整
  • 网络请求回调: 新增开门逻辑

2. 兼容性

  • 不影响现有的网络请求逻辑
  • 不影响UI显示和用户体验
  • 保持与现有UDP门禁系统的兼容性

3. 配置要求

  • 无需修改配置文件
  • 无需更新数据库
  • 无需变更网络接口

总结

本次重构解决了门禁控制时机不正确的问题,确保门禁只在业务验证成功后才开启。重构后的系统更加安全、可靠,符合实际业务需求。同时保留了网络异常时的容错机制,保障用户体验。

重构遵循了项目规范中的网络状态检测与摄像头控制集成规范,确保了系统的稳定性和可维护性。