diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index f3fac74..bae55f6 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -48,6 +48,8 @@ import com.ouxuan.oxface.orderOX.VerificationCodeActivity; import com.ouxuan.oxface.utils.LogManager; import com.ouxuan.oxface.network.OrderVerificationManager; import com.ouxuan.oxface.network.OrderVerificationResultHandler; +import com.ouxuan.oxface.network.LeaveVerificationManager; +import com.ouxuan.oxface.utils.VenueSceneUtils; import java.util.List; @@ -175,6 +177,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 网络请求管理器 private OrderVerificationManager orderVerificationManager; private OrderVerificationResultHandler orderVerificationResultHandler; + private LeaveVerificationManager leaveVerificationManager; // 摄像头暂停管理相关 private Handler cameraTimeoutHandler; @@ -197,6 +200,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 初始化网络请求管理器 initNetworkManagers(); + // 初始化离场校验管理器 + initLeaveVerificationManager(); + initView(); // 初始化并注册广播接收器 @@ -230,6 +236,81 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } /** + * 初始化离场校验管理器 + */ + private void initLeaveVerificationManager() { + // 初始化离场校验管理器 + leaveVerificationManager = new LeaveVerificationManager(this, new LeaveVerificationManager.LeaveVerificationListener() { + @Override + public void onLeaveVerificationStart() { + showLoadingStatus("正在进行离场校验..."); + } + + @Override + public void onLeaveVerificationSuccess(com.ouxuan.oxface.network.api.PadApiService.CheckLeaveResult result) { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (layoutCompareStatus != null) { + layoutCompareStatus.setVisibility(View.VISIBLE); + textCompareStatus.setTextColor(Color.parseColor("#009874")); + textCompareStatus.setText(result != null && result.getMessage() != null ? + result.getMessage() : "离场成功"); + + // 3秒后隐藏状态提示 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + if (layoutCompareStatus != null) { + layoutCompareStatus.setVisibility(View.GONE); + } + } + }, 3000); + } + } + }); + } + + @Override + public void onLeaveVerificationError(int errorCode, String errorMessage) { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (layoutCompareStatus != null) { + layoutCompareStatus.setVisibility(View.VISIBLE); + textCompareStatus.setTextColor(Color.parseColor("#fec133")); + textCompareStatus.setText(errorMessage != null ? errorMessage : "离场失败"); + + // 3秒后隐藏状态提示 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + if (layoutCompareStatus != null) { + layoutCompareStatus.setVisibility(View.GONE); + } + } + }, 3000); + } + } + }); + } + + @Override + public void onLeaveVerificationComplete() { + // 离场校验完成后恢复摄像头 + resumeCamera(); + } + + @Override + public void showToast(String message) { + OXFaceOnlineActivity.this.showToast(message); + } + }); + + LogManager.logInfo(TAG, "离场校验管理器初始化完成"); + } + + /** * 初始化网络请求管理器 */ private void initNetworkManagers() { @@ -1140,8 +1221,16 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 设置模式为2(人脸验证) modeType = OrderVerificationManager.TYPE_FACE_VERIFICATION; - // 自动调用订单核销方法 - getCheckOrder(); + // 判断是进场还是离场场景 + if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { + // 离场场景:调用离场校验 + LogManager.logInfo(TAG, "检测到离场场景,执行离场校验"); + performLeaveVerification(base64img); + } else { + // 进场场景:调用原有的订单核销方法 + LogManager.logInfo(TAG, "检测到进场场景,执行订单核销"); + getCheckOrder(); + } // 处理完成后重置标志 needSendFaceImage = false; @@ -1726,6 +1815,26 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } /** + * 执行离场校验 + * @param faceBase64 人脸base64数据 + */ + private void performLeaveVerification(String faceBase64) { + LogManager.logInfo(TAG, "开始执行离场校验"); + + // 在离场校验开始时暂停摄像头 + pauseCameraWithTimeout(); + + // 调用离场校验管理器执行人脸离场校验 + if (leaveVerificationManager != null) { + leaveVerificationManager.performFaceLeaveVerification(faceBase64); + } else { + LogManager.logError(TAG, "离场校验管理器未初始化"); + showToast("离场校验服务未初始化"); + resumeCamera(); + } + } + + /** * 强制恢复摄像头并关闭所有对话框(超时后调用) */ private void forceResumeAndCloseAllDialogs() { diff --git a/app/src/main/java/com/ouxuan/oxface/network/LeaveVerificationManager.java b/app/src/main/java/com/ouxuan/oxface/network/LeaveVerificationManager.java new file mode 100644 index 0000000..c58d2b0 --- /dev/null +++ b/app/src/main/java/com/ouxuan/oxface/network/LeaveVerificationManager.java @@ -0,0 +1,435 @@ +package com.ouxuan.oxface.network; + +import android.content.Context; +import android.util.Log; + +import com.ouxuan.oxface.data.DeviceSelectDataManager; +import com.ouxuan.oxface.network.api.PadApiService; +import com.ouxuan.oxface.network.callback.NetworkCallback; +import com.ouxuan.oxface.network.utils.NetworkUtils; +import com.ouxuan.oxface.utils.LogManager; +import com.ouxuan.oxface.utils.VenueSceneUtils; + +/** + * 离场校验管理器 + * 负责处理离场校验的网络请求和结果处理 + */ +public class LeaveVerificationManager { + + private static final String TAG = "LeaveVerificationManager"; + + private Context context; + private LeaveVerificationListener listener; + + /** + * 离场校验监听器接口 + */ + public interface LeaveVerificationListener { + /** + * 离场校验开始 + */ + void onLeaveVerificationStart(); + + /** + * 离场校验成功 + * @param result 校验结果 + */ + void onLeaveVerificationSuccess(PadApiService.CheckLeaveResult result); + + /** + * 离场校验失败 + * @param errorCode 错误代码 + * @param errorMessage 错误消息 + */ + void onLeaveVerificationError(int errorCode, String errorMessage); + + /** + * 离场校验完成(无论成功或失败) + */ + void onLeaveVerificationComplete(); + + /** + * 显示Toast消息 + * @param message 消息内容 + */ + void showToast(String message); + } + + public LeaveVerificationManager(Context context, LeaveVerificationListener listener) { + this.context = context; + this.listener = listener; + } + + /** + * 执行人脸离场校验 + * @param faceBase64 人脸base64数据 + */ + public void performFaceLeaveVerification(String faceBase64) { + LogManager.logInfo(TAG, "开始执行人脸离场校验"); + Log.d(TAG, "performFaceLeaveVerification - faceBase64长度: " + (faceBase64 != null ? faceBase64.length() : 0)); + + try { + // 获取设备信息 + DeviceSelectDataManager dataManager = DeviceSelectDataManager.getInstance(context); + String token = dataManager.getSessionToken(); + int hardwareId = dataManager.getSelectedHardwareId(); + + if (token.isEmpty()) { + LogManager.logError(TAG, "离场校验失败:token为空"); + if (listener != null) { + listener.onLeaveVerificationError(-1, "设备未授权,请重新登录"); + } + return; + } + + if (hardwareId <= 0) { + LogManager.logError(TAG, "离场校验失败:hardwareId无效"); + if (listener != null) { + listener.onLeaveVerificationError(-1, "设备ID无效,请重新选择设备"); + } + return; + } + + LogManager.logInfo(TAG, "离场校验参数 - hardwareId: " + hardwareId + ", token长度: " + token.length()); + + // 通知开始校验 + if (listener != null) { + listener.onLeaveVerificationStart(); + } + + // 调用离场校验接口(type=2表示人脸验证) + NetworkUtils.checkLeave(token, 2, hardwareId, null, null, + new NetworkCallback() { + @Override + public void onStart() { + LogManager.logInfo(TAG, "离场校验网络请求开始"); + Log.d(TAG, "离场校验网络请求开始"); + } + + @Override + public void onSuccess(PadApiService.CheckLeaveResult result) { + LogManager.logInfo(TAG, "离场校验成功"); + Log.d(TAG, "离场校验成功 - message: " + (result != null ? result.getMessage() : "null")); + + // 播放离场成功音频 + VenueSceneUtils.playAudio("离场成功"); + + // 执行门禁控制 + VenueSceneUtils.openDoorAfterDetect(); + + if (listener != null) { + listener.onLeaveVerificationSuccess(result); + listener.showToast(result != null && result.getMessage() != null ? + result.getMessage() : "离场成功"); + } + } + + @Override + public void onError(int errorCode, String errorMessage) { + LogManager.logError(TAG, "离场校验失败 - code: " + errorCode + ", message: " + errorMessage); + Log.e(TAG, "离场校验失败 - code: " + errorCode + ", message: " + errorMessage); + + // 处理特殊错误码 + handleLeaveVerificationError(errorCode, errorMessage); + + if (listener != null) { + listener.onLeaveVerificationError(errorCode, errorMessage); + } + } + + @Override + public void onException(Throwable throwable) { + LogManager.logError(TAG, "离场校验网络异常", throwable); + Log.e(TAG, "离场校验网络异常: " + throwable.getMessage(), throwable); + + if (listener != null) { + listener.onLeaveVerificationError(-1, "网络请求异常: " + throwable.getMessage()); + } + } + + @Override + public void onComplete() { + LogManager.logInfo(TAG, "离场校验网络请求完成"); + Log.d(TAG, "离场校验网络请求完成"); + + if (listener != null) { + listener.onLeaveVerificationComplete(); + } + } + }); + + } catch (Exception e) { + LogManager.logError(TAG, "执行离场校验时发生异常", e); + Log.e(TAG, "执行离场校验时发生异常: " + e.getMessage(), e); + + if (listener != null) { + listener.onLeaveVerificationError(-1, "系统异常: " + e.getMessage()); + listener.onLeaveVerificationComplete(); + } + } + } + + /** + * 执行验证码离场校验 + * @param verifyCode 验证码 + */ + public void performCodeLeaveVerification(String verifyCode) { + LogManager.logInfo(TAG, "开始执行验证码离场校验"); + Log.d(TAG, "performCodeLeaveVerification - verifyCode: " + verifyCode); + + try { + // 获取设备信息 + DeviceSelectDataManager dataManager = DeviceSelectDataManager.getInstance(context); + String token = dataManager.getSessionToken(); + int hardwareId = dataManager.getSelectedHardwareId(); + + if (token.isEmpty()) { + LogManager.logError(TAG, "离场校验失败:token为空"); + if (listener != null) { + listener.onLeaveVerificationError(-1, "设备未授权,请重新登录"); + } + return; + } + + if (hardwareId <= 0) { + LogManager.logError(TAG, "离场校验失败:hardwareId无效"); + if (listener != null) { + listener.onLeaveVerificationError(-1, "设备ID无效,请重新选择设备"); + } + return; + } + + LogManager.logInfo(TAG, "验证码离场校验参数 - hardwareId: " + hardwareId + ", verifyCode: " + verifyCode); + + // 通知开始校验 + if (listener != null) { + listener.onLeaveVerificationStart(); + } + + // 调用离场校验接口(type=1表示验证码验证) + NetworkUtils.checkLeave(token, 1, hardwareId, verifyCode, null, + new NetworkCallback() { + @Override + public void onStart() { + LogManager.logInfo(TAG, "验证码离场校验网络请求开始"); + Log.d(TAG, "验证码离场校验网络请求开始"); + } + + @Override + public void onSuccess(PadApiService.CheckLeaveResult result) { + LogManager.logInfo(TAG, "验证码离场校验成功"); + Log.d(TAG, "验证码离场校验成功 - message: " + (result != null ? result.getMessage() : "null")); + + // 播放离场成功音频 + VenueSceneUtils.playAudio("离场成功"); + + // 执行门禁控制 + VenueSceneUtils.openDoorAfterDetect(); + + if (listener != null) { + listener.onLeaveVerificationSuccess(result); + listener.showToast(result != null && result.getMessage() != null ? + result.getMessage() : "离场成功"); + } + } + + @Override + public void onError(int errorCode, String errorMessage) { + LogManager.logError(TAG, "验证码离场校验失败 - code: " + errorCode + ", message: " + errorMessage); + Log.e(TAG, "验证码离场校验失败 - code: " + errorCode + ", message: " + errorMessage); + + // 处理特殊错误码 + handleLeaveVerificationError(errorCode, errorMessage); + + if (listener != null) { + listener.onLeaveVerificationError(errorCode, errorMessage); + } + } + + @Override + public void onException(Throwable throwable) { + LogManager.logError(TAG, "验证码离场校验网络异常", throwable); + Log.e(TAG, "验证码离场校验网络异常: " + throwable.getMessage(), throwable); + + if (listener != null) { + listener.onLeaveVerificationError(-1, "网络请求异常: " + throwable.getMessage()); + } + } + + @Override + public void onComplete() { + LogManager.logInfo(TAG, "验证码离场校验网络请求完成"); + Log.d(TAG, "验证码离场校验网络请求完成"); + + if (listener != null) { + listener.onLeaveVerificationComplete(); + } + } + }); + + } catch (Exception e) { + LogManager.logError(TAG, "执行验证码离场校验时发生异常", e); + Log.e(TAG, "执行验证码离场校验时发生异常: " + e.getMessage(), e); + + if (listener != null) { + listener.onLeaveVerificationError(-1, "系统异常: " + e.getMessage()); + listener.onLeaveVerificationComplete(); + } + } + } + + /** + * 执行扫码器离场校验 + * @param decryptText 解密文本 + */ + public void performScannerLeaveVerification(String decryptText) { + LogManager.logInfo(TAG, "开始执行扫码器离场校验"); + Log.d(TAG, "performScannerLeaveVerification - decryptText: " + decryptText); + + try { + // 获取设备信息 + DeviceSelectDataManager dataManager = DeviceSelectDataManager.getInstance(context); + String token = dataManager.getSessionToken(); + int hardwareId = dataManager.getSelectedHardwareId(); + + if (token.isEmpty()) { + LogManager.logError(TAG, "离场校验失败:token为空"); + if (listener != null) { + listener.onLeaveVerificationError(-1, "设备未授权,请重新登录"); + } + return; + } + + if (hardwareId <= 0) { + LogManager.logError(TAG, "离场校验失败:hardwareId无效"); + if (listener != null) { + listener.onLeaveVerificationError(-1, "设备ID无效,请重新选择设备"); + } + return; + } + + LogManager.logInfo(TAG, "扫码器离场校验参数 - hardwareId: " + hardwareId + ", decryptText长度: " + + (decryptText != null ? decryptText.length() : 0)); + + // 通知开始校验 + if (listener != null) { + listener.onLeaveVerificationStart(); + } + + // 调用离场校验接口(type=4表示扫码器验证) + NetworkUtils.checkLeave(token, 4, hardwareId, null, decryptText, + new NetworkCallback() { + @Override + public void onStart() { + LogManager.logInfo(TAG, "扫码器离场校验网络请求开始"); + Log.d(TAG, "扫码器离场校验网络请求开始"); + } + + @Override + public void onSuccess(PadApiService.CheckLeaveResult result) { + LogManager.logInfo(TAG, "扫码器离场校验成功"); + Log.d(TAG, "扫码器离场校验成功 - message: " + (result != null ? result.getMessage() : "null")); + + // 播放离场成功音频 + VenueSceneUtils.playAudio("离场成功"); + + // 执行门禁控制 + VenueSceneUtils.openDoorAfterDetect(); + + if (listener != null) { + listener.onLeaveVerificationSuccess(result); + listener.showToast(result != null && result.getMessage() != null ? + result.getMessage() : "离场成功"); + } + } + + @Override + public void onError(int errorCode, String errorMessage) { + LogManager.logError(TAG, "扫码器离场校验失败 - code: " + errorCode + ", message: " + errorMessage); + Log.e(TAG, "扫码器离场校验失败 - code: " + errorCode + ", message: " + errorMessage); + + // 处理特殊错误码 + handleLeaveVerificationError(errorCode, errorMessage); + + if (listener != null) { + listener.onLeaveVerificationError(errorCode, errorMessage); + } + } + + @Override + public void onException(Throwable throwable) { + LogManager.logError(TAG, "扫码器离场校验网络异常", throwable); + Log.e(TAG, "扫码器离场校验网络异常: " + throwable.getMessage(), throwable); + + if (listener != null) { + listener.onLeaveVerificationError(-1, "网络请求异常: " + throwable.getMessage()); + } + } + + @Override + public void onComplete() { + LogManager.logInfo(TAG, "扫码器离场校验网络请求完成"); + Log.d(TAG, "扫码器离场校验网络请求完成"); + + if (listener != null) { + listener.onLeaveVerificationComplete(); + } + } + }); + + } catch (Exception e) { + LogManager.logError(TAG, "执行扫码器离场校验时发生异常", e); + Log.e(TAG, "执行扫码器离场校验时发生异常: " + e.getMessage(), e); + + if (listener != null) { + listener.onLeaveVerificationError(-1, "系统异常: " + e.getMessage()); + listener.onLeaveVerificationComplete(); + } + } + } + + /** + * 处理离场校验特殊错误码 + * @param errorCode 错误代码 + * @param errorMessage 错误消息 + */ + private void handleLeaveVerificationError(int errorCode, String errorMessage) { + try { + switch (errorCode) { + case 902: + // 订单超期需要扫码补缴 + LogManager.logInfo(TAG, "处理902错误 - 订单超期需要扫码补缴"); + VenueSceneUtils.playAudio("订单超期需要扫码补缴"); + if (listener != null) { + listener.showToast(errorMessage != null ? errorMessage : "订单超期,需要扫码补缴"); + } + break; + + case 302: + // 跳转到验证结果页面 + LogManager.logInfo(TAG, "处理302错误 - 跳转到验证结果页面"); + // 这里可以添加页面跳转逻辑 + break; + + case 502: + // 服务器错误,特殊处理 + LogManager.logInfo(TAG, "处理502错误 - 服务器暂时不可用"); + if (listener != null) { + listener.showToast("服务器暂时不可用,请稍后再试"); + } + break; + + default: + // 其他错误 + LogManager.logInfo(TAG, "处理其他错误 - code: " + errorCode); + if (listener != null) { + listener.showToast(errorMessage != null ? errorMessage : "离场失败"); + } + break; + } + } catch (Exception e) { + LogManager.logError(TAG, "处理离场校验错误时发生异常", e); + Log.e(TAG, "处理离场校验错误时发生异常: " + e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ouxuan/oxface/utils/VenueSceneUtils.java b/app/src/main/java/com/ouxuan/oxface/utils/VenueSceneUtils.java new file mode 100644 index 0000000..00cd537 --- /dev/null +++ b/app/src/main/java/com/ouxuan/oxface/utils/VenueSceneUtils.java @@ -0,0 +1,176 @@ +package com.ouxuan.oxface.utils; + +import android.content.Context; +import android.util.Log; + +import com.ouxuan.oxface.data.DeviceSelectDataManager; +import com.ouxuan.oxface.network.api.PadApiService; + +/** + * 场所场景工具类 + * 用于判断当前是进场还是离场场景,以及相关的控制功能 + */ +public class VenueSceneUtils { + + private static final String TAG = "VenueSceneUtils"; + + // 场景类型常量 + public static final String SCENE_VENUE_ENTER = "venue_enter"; // 进场场景 + public static final String SCENE_VENUE_LEAVE = "venue_leave"; // 离场场景 + public static final String SCENE_DEFAULT = "default"; // 默认场景 + + /** + * 判断当前是否为离场场景 + * @param context 上下文 + * @return true表示离场场景,false表示进场场景 + */ + public static boolean isLeaveScene(Context context) { + try { + DeviceSelectDataManager dataManager = DeviceSelectDataManager.getInstance(context); + PadApiService.PadConfig padConfig = dataManager.getPadConfig(); + + if (padConfig != null) { + String padUseScene = padConfig.getPadUseScene(); + boolean isLeave = SCENE_VENUE_LEAVE.equals(padUseScene); + + LogManager.logInfo(TAG, "场景判断 - pad_use_scene: " + padUseScene + ", 是否离场: " + isLeave); + Log.d(TAG, "场景判断 - pad_use_scene: " + padUseScene + ", 是否离场: " + isLeave); + + return isLeave; + } else { + LogManager.logWarning(TAG, "无法获取PadConfig,默认为进场场景"); + Log.w(TAG, "无法获取PadConfig,默认为进场场景"); + return false; + } + } catch (Exception e) { + LogManager.logError(TAG, "判断场景类型时发生异常,默认为进场场景", e); + Log.e(TAG, "判断场景类型时发生异常,默认为进场场景: " + e.getMessage(), e); + return false; + } + } + + /** + * 获取当前场景类型描述 + * @param context 上下文 + * @return 场景描述字符串 + */ + public static String getSceneDescription(Context context) { + return isLeaveScene(context) ? "离场场景" : "进场场景"; + } + + /** + * 获取pad使用场景配置值 + * @param context 上下文 + * @return pad_use_scene配置值 + */ + public static String getPadUseScene(Context context) { + try { + DeviceSelectDataManager dataManager = DeviceSelectDataManager.getInstance(context); + PadApiService.PadConfig padConfig = dataManager.getPadConfig(); + + if (padConfig != null) { + String padUseScene = padConfig.getPadUseScene(); + Log.d(TAG, "获取pad_use_scene: " + padUseScene); + return padUseScene != null ? padUseScene : SCENE_DEFAULT; + } else { + Log.w(TAG, "无法获取PadConfig,返回默认场景"); + return SCENE_DEFAULT; + } + } catch (Exception e) { + Log.e(TAG, "获取pad_use_scene时发生异常: " + e.getMessage(), e); + return SCENE_DEFAULT; + } + } + + /** + * 播放音频提示 + * 根据用户确认信息,暂时只输出日志 + * @param audioType 音频类型(如:离场成功、订单超期需要扫码补缴等) + */ + public static void playAudio(String audioType) { + try { + LogManager.logInfo(TAG, "播放音频: " + audioType); + Log.d(TAG, "playAudio() - 音频类型: " + audioType); + + // 根据用户确认,暂时只输出日志,后续可扩展实际音频播放逻辑 + // 可以在这里添加实际的音频播放实现 + } catch (Exception e) { + LogManager.logError(TAG, "播放音频时发生异常", e); + Log.e(TAG, "播放音频时发生异常: " + e.getMessage(), e); + } + } + + /** + * 门禁控制 - 检测后开门 + * 根据用户确认信息,暂时只输出日志 + */ + public static void openDoorAfterDetect() { + try { + LogManager.logInfo(TAG, "执行门禁控制 - 检测后开门"); + Log.d(TAG, "openDoorAfterDetect() - 门禁控制,检测后开门"); + + // 根据用户确认,暂时只输出日志,后续可扩展实际门禁控制逻辑 + // 可以在这里添加实际的门禁控制实现 + } catch (Exception e) { + LogManager.logError(TAG, "门禁控制时发生异常", e); + Log.e(TAG, "门禁控制时发生异常: " + e.getMessage(), e); + } + } + + /** + * 获取门禁相关配置 + * @param context 上下文 + * @return 门禁配置信息,如果获取失败返回null + */ + public static GateConfig getGateConfig(Context context) { + try { + DeviceSelectDataManager dataManager = DeviceSelectDataManager.getInstance(context); + PadApiService.PadConfig padConfig = dataManager.getPadConfig(); + + if (padConfig != null) { + GateConfig gateConfig = new GateConfig(); + gateConfig.gateEnterOpenEnable = padConfig.getExtension() != null && + padConfig.getExtension().getPadSetting() != null && + padConfig.getExtension().getPadSetting().isGateEnterOpenEnable(); + + gateConfig.gateAbGpio = padConfig.getExtension() != null && + padConfig.getExtension().getPadSetting() != null && + padConfig.getExtension().getPadSetting().isGateAbGpio(); + + gateConfig.gateAbUdp = padConfig.getExtension() != null && + padConfig.getExtension().getPadSetting() != null && + padConfig.getExtension().getPadSetting().isGateAbUdp(); + + Log.d(TAG, "门禁配置 - EnterOpenEnable: " + gateConfig.gateEnterOpenEnable + + ", AbGpio: " + gateConfig.gateAbGpio + + ", AbUdp: " + gateConfig.gateAbUdp); + + return gateConfig; + } else { + Log.w(TAG, "无法获取PadConfig,门禁配置返回null"); + return null; + } + } catch (Exception e) { + Log.e(TAG, "获取门禁配置时发生异常: " + e.getMessage(), e); + return null; + } + } + + /** + * 门禁配置信息类 + */ + public static class GateConfig { + public boolean gateEnterOpenEnable = false; // 门禁进入开启使能 + public boolean gateAbGpio = false; // 门禁AB GPIO + public boolean gateAbUdp = false; // 门禁AB UDP + + @Override + public String toString() { + return "GateConfig{" + + "gateEnterOpenEnable=" + gateEnterOpenEnable + + ", gateAbGpio=" + gateAbGpio + + ", gateAbUdp=" + gateAbUdp + + '}'; + } + } +} \ No newline at end of file