diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index 76836f6..465cc55 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -1585,6 +1585,62 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi private void checkResultOnline(LivenessModel livenessModel) { this.currentLivenessModel = livenessModel; + + // 离场网络中断检测逻辑:检测(当前是离场&&当前网络中断){直接执行openGateAB,而不再继续执行后续逻辑} + try { + boolean isLeaveScene = VenueSceneUtils.isLeaveScene(this); + boolean isNetworkAvailable = isNetworkAvailable(); + + if (isLeaveScene && !isNetworkAvailable) { + LogManager.logInfo(TAG, "检测到离场场景且网络中断,直接执行openGateAB开门"); + + // 直接执行AB门开门操作 + if (gateABController != null) { + gateABController.openGateAB(new GateABController.GateControlCallback() { + @Override + public void onSuccess(String message) { + LogManager.logInfo(TAG, "离场网络中断直接开门成功: " + message); + + // 显示简单的成功提示 + runOnUiThread(() -> { + showLoadingStatus("网络中断,直接开门成功"); + + // 3秒后隐藏提示 + new Handler().postDelayed(() -> { + hideLoadingStatus(); + }, 3000); + }); + } + + @Override + public void onError(String errorMessage) { + LogManager.logError(TAG, "离场网络中断直接开门失败: " + errorMessage); + + // 显示错误提示 + runOnUiThread(() -> { + showLoadingStatus("开门失败: " + errorMessage); + + // 3秒后隐藏提示 + new Handler().postDelayed(() -> { + hideLoadingStatus(); + }, 3000); + }); + } + }); + } else { + LogManager.logError(TAG, "gateABController为空,无法执行开门操作"); + } + + // 直接返回,不再继续执行后续逻辑 + return; + } + + LogManager.logInfo(TAG, "继续执行正常的人脸识别流程 - 场景: " + (isLeaveScene ? "离场" : "进场") + ", 网络: " + (isNetworkAvailable ? "可用" : "不可用")); + + } catch (Exception e) { + LogManager.logError(TAG, "离场网络中断检测异常,继续正常流程", e); + } + // 当未检测到人脸UI显示 runOnUiThread(new Runnable() { @Override diff --git a/app/src/main/java/com/ouxuan/oxface/device/GateABController.java b/app/src/main/java/com/ouxuan/oxface/device/GateABController.java index 6100268..0ac85bb 100644 --- a/app/src/main/java/com/ouxuan/oxface/device/GateABController.java +++ b/app/src/main/java/com/ouxuan/oxface/device/GateABController.java @@ -239,6 +239,7 @@ public class GateABController { /** * 开启AB门 * 参考JavaScript实现的openGateAB函数 + * 增加网络中断检测逻辑:当检测到网络中断时,优先执行openDoorGpio * @param callback 开门结果回调 */ public void openGateAB(GateControlCallback callback) { @@ -248,6 +249,18 @@ public class GateABController { @Override public void run() { try { + // 检测网络中断状态,优先执行GPIO开门 + boolean isNetworkAvailable = checkNetworkAvailable(); + if (!isNetworkAvailable) { + LogManager.logInfo(TAG, "检测到网络中断,优先执行GPIO开门"); + openDoorGpio(); + notifyCallback(callback, true, "网络中断时执行GPIO继电器开门"); + return; + } + + // 网络正常,继续原有逻辑 + LogManager.logInfo(TAG, "网络状态正常,继续执行AB门开门逻辑"); + // 先获取AB门总状态 boolean gateAbClose = getGateAbClose(); LogManager.logInfo(TAG, "执行开门...gate_open_enable:" + currentConfig.gateOpenEnable + @@ -311,6 +324,30 @@ public class GateABController { } /** + * 检查网络是否可用 + * @return true表示网络可用,false表示网络中断 + */ + private boolean checkNetworkAvailable() { + try { + // 使用UtilCode库的NetworkUtils检查网络连接状态 + boolean isConnected = com.blankj.utilcode.util.NetworkUtils.isConnected(); + + if (!isConnected) { + LogManager.logWarning(TAG, "网络未连接,检测为网络中断状态"); + return false; + } + + LogManager.logDebug(TAG, "网络连接正常"); + return true; + + } catch (Exception e) { + LogManager.logError(TAG, "检查网络状态失败", e); + // 异常情况下默认为网络不可用(安全做法) + return false; + } + } + + /** * 获取AB门关闭状态 * @return true表示AB门关闭,false表示AB门开启 */ @@ -1189,19 +1226,24 @@ public class GateABController { /** * 人脸识别成功后开门处理 - * 无论进场还是离场,都开启B门 - * @param isEntry true: 进门, false: 出门(参数保留为兼容性,但不影响实际操作) + * 执行openGateAB开启AB门 + * @param isEntry true: 进门, false: 出门(参数保留为兼容性) */ public void handleFaceRecognitionSuccess(boolean isEntry) { - LogManager.logInfo(TAG, "人脸识别成功,准备开B门: " + (isEntry ? "进门场景" : "离场场景")); + LogManager.logInfo(TAG, "人脸识别成功,准备开启AB门: " + (isEntry ? "进门场景" : "离场场景")); - // 无论是进场还是离场,都开启B门 - if (udpController != null && udpController.isInitialized()) { - udpController.openGateB(); - LogManager.logInfo(TAG, "人脸识别成功,已发送B门开启命令"); - } else { - LogManager.logWarning(TAG, "UDP控制器未初始化,无法开启B门"); - } + // 执行AB门开门操作 + openGateAB(new GateControlCallback() { + @Override + public void onSuccess(String message) { + LogManager.logInfo(TAG, "人脸识别成功开门完成: " + message); + } + + @Override + public void onError(String errorMessage) { + LogManager.logError(TAG, "人脸识别成功开门失败: " + errorMessage); + } + }); } /**