Browse Source

add openB when no network

dev
赵明涛 11 hours ago
parent
commit
402e6993b8
  1. 56
      app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java
  2. 62
      app/src/main/java/com/ouxuan/oxface/device/GateABController.java

56
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) { private void checkResultOnline(LivenessModel livenessModel) {
this.currentLivenessModel = 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显示 // 当未检测到人脸UI显示
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override

62
app/src/main/java/com/ouxuan/oxface/device/GateABController.java

@ -239,6 +239,7 @@ public class GateABController {
/** /**
* 开启AB门 * 开启AB门
* 参考JavaScript实现的openGateAB函数 * 参考JavaScript实现的openGateAB函数
* 增加网络中断检测逻辑当检测到网络中断时优先执行openDoorGpio
* @param callback 开门结果回调 * @param callback 开门结果回调
*/ */
public void openGateAB(GateControlCallback callback) { public void openGateAB(GateControlCallback callback) {
@ -248,6 +249,18 @@ public class GateABController {
@Override @Override
public void run() { public void run() {
try { try {
// 检测网络中断状态优先执行GPIO开门
boolean isNetworkAvailable = checkNetworkAvailable();
if (!isNetworkAvailable) {
LogManager.logInfo(TAG, "检测到网络中断,优先执行GPIO开门");
openDoorGpio();
notifyCallback(callback, true, "网络中断时执行GPIO继电器开门");
return;
}
// 网络正常继续原有逻辑
LogManager.logInfo(TAG, "网络状态正常,继续执行AB门开门逻辑");
// 先获取AB门总状态 // 先获取AB门总状态
boolean gateAbClose = getGateAbClose(); boolean gateAbClose = getGateAbClose();
LogManager.logInfo(TAG, "执行开门...gate_open_enable:" + currentConfig.gateOpenEnable + 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门关闭状态 * 获取AB门关闭状态
* @return true表示AB门关闭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) { 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);
}
});
} }
/** /**

Loading…
Cancel
Save