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
5.1 KiB
UDP门禁控制逻辑重构说明
重构背景
问题描述
原有的门禁控制逻辑存在问题:在人脸识别成功后立即执行开门操作,而不是等待网络请求(订单核销或离场校验)完成。这导致了业务逻辑不正确,用户可能在未通过验证的情况下就能通过门禁。
预期行为
正确的门禁控制流程应该是:
- 人脸识别成功 → 获取face base64数据
- 根据场景执行网络请求(进场:订单核销,离场:离场校验)
- 网络请求成功后 → 开启B门
- 网络不可用时 → 直接开启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. 配置要求
- ✅ 无需修改配置文件
- ✅ 无需更新数据库
- ✅ 无需变更网络接口
总结
本次重构解决了门禁控制时机不正确的问题,确保门禁只在业务验证成功后才开启。重构后的系统更加安全、可靠,符合实际业务需求。同时保留了网络异常时的容错机制,保障用户体验。
重构遵循了项目规范中的网络状态检测与摄像头控制集成规范,确保了系统的稳定性和可维护性。