From 005bd8b7c68693faec6c297059471907d3429e56 Mon Sep 17 00:00:00 2001 From: MTing Date: Fri, 5 Sep 2025 11:19:10 +0800 Subject: [PATCH] add checkorder --- .../com/ouxuan/oxface/OXFaceOnlineActivity.java | 359 +++++++++++++++++++++ .../ouxuan/oxface/network/api/PadApiService.java | 64 ++++ .../ouxuan/oxface/network/utils/NetworkUtils.java | 54 ++++ app/src/main/res/layout/activity_oxface_online.xml | 15 - 4 files changed, 477 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index b1c98fe..f222f55 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -160,6 +160,10 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi private static final int MAX_CLICK_COUNT = 5; private static final long CLICK_INTERVAL = 1000; // 1秒内点击有效 + // 新增订单查验相关变量 + private int modeType = 0; // 1验证码验证 2人脸验证 3扫码验证 4扫码器验证 + private String verifyCode = ""; // 验证码 + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -1437,4 +1441,359 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi return String.format("内存: %d/%d MB (%.1f%%)", usedMemory, maxMemory, memoryUsageRatio * 100); } + + /** + * 查验订单列表 + * 根据modeType和verifyCode等参数获取相应的数据查询参数并发送网络请求 + */ + private void getCheckOrder() { + LogManager.logInfo(TAG, "开始查验订单列表,modeType: " + modeType); + + // 获取设备信息和配置信息 + com.ouxuan.oxface.data.DeviceSelectDataManager deviceDataManager = + com.ouxuan.oxface.data.DeviceSelectDataManager.getInstance(this); + + // 获取token和hardware_id + String token = deviceDataManager.getSessionToken(); + int hardwareId = deviceDataManager.getSelectedHardwareId(); + + // 参数校验 + if (token == null || token.isEmpty()) { + LogManager.logError(TAG, "获取token失败"); + showToast("获取token失败"); + return; + } + + if (hardwareId <= 0) { + LogManager.logError(TAG, "获取hardwareId失败"); + showToast("获取设备ID失败"); + return; + } + + // 根据不同的验证类型调用相应的接口 + if (modeType == 1) { + // 验证码验证 + handleVerificationCodeCheck(token, hardwareId); + } else if (modeType == 2) { + // 人脸验证 + handleFaceCheck(token, hardwareId); + } else if (modeType == 3) { + // 扫码验证 + handleScanCheck(token, hardwareId); + } else if (modeType == 4) { + // 扫码器验证 + handleScannerCheck(token, hardwareId); + } else { + LogManager.logError(TAG, "不支持的验证类型: " + modeType); + showToast("不支持的验证类型"); + } + } + + /** + * 处理验证码验证 + */ + private void handleVerificationCodeCheck(String token, int hardwareId) { + LogManager.logInfo(TAG, "验证码验证,验证码: " + verifyCode); + + if (verifyCode == null || verifyCode.isEmpty()) { + LogManager.logError(TAG, "验证码为空"); + showToast("请输入验证码"); + return; + } + + // 显示加载状态 + showLoadingStatus("正在验证验证码..."); + + // 调用网络请求 + com.ouxuan.oxface.network.utils.NetworkUtils.checkOrder( + token, modeType, hardwareId, verifyCode, null, null, null, + new com.ouxuan.oxface.network.callback.NetworkCallback() { + @Override + public void onSuccess(com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult data) { + LogManager.logInfo(TAG, "验证码验证成功"); + handleCheckOrderSuccess(data, modeType); + } + + @Override + public void onError(int errorCode, String errorMessage) { + LogManager.logError(TAG, "验证码验证失败: " + errorMessage); + handleCheckOrderError(errorCode, errorMessage, modeType); + } + + @Override + public void onException(Throwable throwable) { + LogManager.logError(TAG, "验证码验证异常", throwable); + showToast("网络请求异常: " + throwable.getMessage()); + } + + @Override + public void onComplete() { + hideLoadingStatus(); + } + }); + } + + /** + * 处理人脸验证 + */ + private void handleFaceCheck(String token, int hardwareId) { + LogManager.logInfo(TAG, "人脸验证"); + // 注意:在实际实现中,需要传入人脸base64数据 + // 这里只是示例,实际应用中需要获取当前检测到的人脸base64数据 + String faceBase64 = ""; // 需要从当前检测到的人脸获取base64数据 + + if (faceBase64 == null || faceBase64.isEmpty()) { + LogManager.logError(TAG, "人脸数据为空"); + showToast("未检测到有效的人脸数据"); + return; + } + + // 显示加载状态 + showLoadingStatus("正在进行人脸验证..."); + + // 调用网络请求 + com.ouxuan.oxface.network.utils.NetworkUtils.checkOrder( + token, modeType, hardwareId, null, faceBase64, "face_base64", null, + new com.ouxuan.oxface.network.callback.NetworkCallback() { + @Override + public void onSuccess(com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult data) { + LogManager.logInfo(TAG, "人脸验证成功"); + handleCheckOrderSuccess(data, modeType); + } + + @Override + public void onError(int errorCode, String errorMessage) { + LogManager.logError(TAG, "人脸验证失败: " + errorMessage); + handleCheckOrderError(errorCode, errorMessage, modeType); + } + + @Override + public void onException(Throwable throwable) { + LogManager.logError(TAG, "人脸验证异常", throwable); + showToast("网络请求异常: " + throwable.getMessage()); + } + + @Override + public void onComplete() { + hideLoadingStatus(); + } + }); + } + + /** + * 处理扫码验证 + */ + private void handleScanCheck(String token, int hardwareId) { + LogManager.logInfo(TAG, "扫码验证"); + // 扫码验证通常由用户扫描二维码触发,这里作为示例 + + // 显示加载状态 + showLoadingStatus("正在进行扫码验证..."); + + // 调用网络请求 + com.ouxuan.oxface.network.utils.NetworkUtils.checkOrder( + token, modeType, hardwareId, null, null, null, null, + new com.ouxuan.oxface.network.callback.NetworkCallback() { + @Override + public void onSuccess(com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult data) { + LogManager.logInfo(TAG, "扫码验证成功"); + handleCheckOrderSuccess(data, modeType); + } + + @Override + public void onError(int errorCode, String errorMessage) { + LogManager.logError(TAG, "扫码验证失败: " + errorMessage); + handleCheckOrderError(errorCode, errorMessage, modeType); + } + + @Override + public void onException(Throwable throwable) { + LogManager.logError(TAG, "扫码验证异常", throwable); + showToast("网络请求异常: " + throwable.getMessage()); + } + + @Override + public void onComplete() { + hideLoadingStatus(); + } + }); + } + + /** + * 处理扫码器验证 + */ + private void handleScannerCheck(String token, int hardwareId) { + LogManager.logInfo(TAG, "扫码器验证"); + // 注意:在实际实现中,需要传入解密文本 + String decryptText = ""; // 需要从扫码器获取解密文本 + + // 显示加载状态 + showLoadingStatus("正在进行扫码器验证..."); + + // 调用网络请求 + com.ouxuan.oxface.network.utils.NetworkUtils.checkOrder( + token, modeType, hardwareId, null, null, null, decryptText, + new com.ouxuan.oxface.network.callback.NetworkCallback() { + @Override + public void onSuccess(com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult data) { + LogManager.logInfo(TAG, "扫码器验证成功"); + handleCheckOrderSuccess(data, modeType); + } + + @Override + public void onError(int errorCode, String errorMessage) { + LogManager.logError(TAG, "扫码器验证失败: " + errorMessage); + handleCheckOrderError(errorCode, errorMessage, modeType); + } + + @Override + public void onException(Throwable throwable) { + LogManager.logError(TAG, "扫码器验证异常", throwable); + showToast("网络请求异常: " + throwable.getMessage()); + } + + @Override + public void onComplete() { + hideLoadingStatus(); + } + }); + } + + /** + * 处理订单查验成功响应 + */ + private void handleCheckOrderSuccess(com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult data, int type) { + LogManager.logInfo(TAG, "订单查验成功,类型: " + type); + + if (data == null || data.getResult() == null || data.getResult().isEmpty()) { + LogManager.logWarning(TAG, "返回数据为空"); + showToast("未找到可核销的订单"); + return; + } + + // 清除定时器 + // clearAllTimer(); // 需要实现此方法 + + if (type == 1 || type == 4) { // 验证码验证或扫码器验证 + showToast("操作成功,正在跳转..."); + + com.ouxuan.oxface.network.api.PadApiService.CheckOrderItem firstItem = data.getResult().get(0); + + // 准备订单核销结果页信息 + java.util.Map resultData = new java.util.HashMap<>(); + resultData.put("type", type); + resultData.put("order_no", firstItem.getOrderNo()); + resultData.put("v_code", firstItem.getVCode() != null && !firstItem.getVCode().isEmpty() ? + firstItem.getVCode().get(0) : ""); + resultData.put("order_type", firstItem.getOrderType()); + resultData.put("card_no", firstItem.getInfo() != null ? + (firstItem.getInfo().getUserId() != null ? firstItem.getInfo().getUserId() : "") : ""); + + // 模拟跳转到验证结果页面 + LogManager.logInfo(TAG, "准备跳转到验证结果页面: " + resultData.toString()); + // 这里需要实现实际的页面跳转逻辑 + showToast("验证成功,准备跳转到结果页面"); + + } else if (type == 2) { // 人脸验证 + // 准备订单核销选择页信息 + java.util.Map queryData = new java.util.HashMap<>(); + queryData.put("type", 2); + // queryData.put("face_base64", ret.face_base64); // 需要实际的人脸base64数据 + queryData.put("check_type", "face_base64"); + // if(isOrder.length>0) queryData.put("check_order_res", isOrder); // 需要实际的识别数据 + + // 模拟跳转到订单验证页面 + LogManager.logInfo(TAG, "准备跳转到订单验证页面: " + queryData.toString()); + // 这里需要实现实际的页面跳转逻辑 + showToast("人脸验证成功,准备跳转到订单选择页面"); + + } else if (type == 3) { // 扫码验证 + showToast("操作成功,正在跳转..."); + + // 准备订单核销选择页信息 + java.util.Map queryData = new java.util.HashMap<>(); + queryData.put("type", type); + queryData.put("result", data.getResult()); + + // 模拟跳转到订单验证页面 + LogManager.logInfo(TAG, "准备跳转到订单验证页面: " + queryData.toString()); + // 这里需要实现实际的页面跳转逻辑 + showToast("扫码验证成功,准备跳转到订单选择页面"); + } + } + + /** + * 处理订单查验错误响应 + */ + private void handleCheckOrderError(int errorCode, String errorMessage, int type) { + LogManager.logError(TAG, "订单查验失败,类型: " + type + ", 错误: " + errorMessage); + + if (type == 4) { // 扫码器验证 + showToast(errorMessage != null && !errorMessage.isEmpty() ? errorMessage : "核销码不可用!"); + + // 模拟返回上一页 + LogManager.logInfo(TAG, "扫码器验证失败,准备返回上一页"); + // 这里需要实现实际的页面返回逻辑 + + } else if (type == 3 && "抱歉! 暂无可核销订单".equals(errorMessage)) { + // clearAllTimer(); // 需要实现此方法 + showToast(errorMessage); + + // 准备订单核销选择页信息 + java.util.Map queryData = new java.util.HashMap<>(); + queryData.put("type", type); + queryData.put("result", new java.util.ArrayList<>()); + + // 模拟跳转到订单验证页面 + LogManager.logInfo(TAG, "暂无可核销订单,准备跳转到订单验证页面: " + queryData.toString()); + // 这里需要实现实际的页面跳转逻辑 + + } else if (type == 1) { // 验证码验证 + showToast(errorMessage != null && !errorMessage.isEmpty() ? errorMessage : "验证失败"); + } else { + showToast("验证失败: " + errorMessage); + } + } + + /** + * 显示加载状态 + */ + private void showLoadingStatus(String message) { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (layoutCompareStatus != null) { + layoutCompareStatus.setVisibility(View.VISIBLE); + textCompareStatus.setTextColor(Color.parseColor("#009874")); + textCompareStatus.setText(message); + } + } + }); + } + + /** + * 隐藏加载状态 + */ + private void hideLoadingStatus() { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (layoutCompareStatus != null) { + layoutCompareStatus.setVisibility(View.GONE); + } + } + }); + } + + /** + * 显示Toast消息 + */ + private void showToast(String message) { + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(OXFaceOnlineActivity.this, message, Toast.LENGTH_SHORT).show(); + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/com/ouxuan/oxface/network/api/PadApiService.java b/app/src/main/java/com/ouxuan/oxface/network/api/PadApiService.java index ad8eeef..ade09d6 100644 --- a/app/src/main/java/com/ouxuan/oxface/network/api/PadApiService.java +++ b/app/src/main/java/com/ouxuan/oxface/network/api/PadApiService.java @@ -64,6 +64,28 @@ public interface PadApiService { Call> padSelect(@Body PadSelectRequest selectRequest); /** + * 订单列表接口 (增强版,支持多种验证类型) + * 对应旧接口: /v3/pad/checkOrder + * @param token 访问令牌(必需) + * @param type 验证类型 1验证码验证 2人脸验证 3扫码验证 4扫码器验证 + * @param hardwareId 硬件ID(必需) + * @param vCode 验证码(type=1时必需) + * @param faceBase64 人脸base64数据(type=2时必需) + * @param checkType 检查类型(type=2时必需) + * @param decryptText 解密文本(type=4时必需) + * @return 订单列表响应 + */ + @GET("v3/pad/checkOrder") + Call> checkOrder( + @Query("token") String token, + @Query("type") int type, + @Query("hardware_id") int hardwareId, + @Query("v_code") String vCode, + @Query("face_base64") String faceBase64, + @Query("check_type") String checkType, + @Query("decrypt_text") String decryptText); + + /** * 订单列表接口 * 对应旧接口: /v3/pad/checkOrder * @param token 访问令牌(必需) @@ -800,6 +822,48 @@ public interface PadApiService { } /** + * 订单核销结果模型 + */ + public static class CheckOrderResult { + @SerializedName("result") + private java.util.List result; // 订单项列表 + + // Getters and Setters + public java.util.List getResult() { return result; } + public void setResult(java.util.List result) { this.result = result; } + } + + /** + * 订单项模型 + */ + public static class CheckOrderItem { + @SerializedName("order_no") + private String orderNo; // 订单编号 + + @SerializedName("v_code") + private java.util.List vCode; // 验证码列表 + + @SerializedName("order_type") + private String orderType; // 订单类型 + + @SerializedName("info") + private OrderInfo info; // 订单信息 + + // Getters and Setters + public String getOrderNo() { return orderNo; } + public void setOrderNo(String orderNo) { this.orderNo = orderNo; } + + public java.util.List getVCode() { return vCode; } + public void setVCode(java.util.List vCode) { this.vCode = vCode; } + + public String getOrderType() { return orderType; } + public void setOrderType(String orderType) { this.orderType = orderType; } + + public OrderInfo getInfo() { return info; } + public void setInfo(OrderInfo info) { this.info = info; } + } + + /** * 核销订单请求模型 */ public static class VerifyOrderRequest { diff --git a/app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java b/app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java index e74b42c..cd768b9 100644 --- a/app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java +++ b/app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java @@ -539,6 +539,60 @@ public class NetworkUtils { } /** + * 获取订单列表 (增强版,支持多种验证类型) + * @param token 访问令牌 + * @param type 验证类型 1验证码验证 2人脸验证 3扫码验证 4扫码器验证 + * @param hardwareId 硬件ID + * @param vCode 验证码(type=1时必需) + * @param faceBase64 人脸base64数据(type=2时必需) + * @param checkType 检查类型(type=2时必需) + * @param decryptText 解密文本(type=4时必需) + * @param callback 回调接口 + */ + public static void checkOrder(String token, int type, int hardwareId, String vCode, + String faceBase64, String checkType, String decryptText, + NetworkCallback callback) { + if (padApiService == null) { + callback.onError(-1, "NetworkUtils未初始化,请先调用init()方法"); + return; + } + + callback.onStart(); + padApiService.checkOrder(token, type, hardwareId, vCode, faceBase64, checkType, decryptText) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, + Response> response) { + try { + if (response.isSuccessful() && response.body() != null) { + ApiResponse apiResponse = response.body(); + + if (apiResponse.isSuccess()) { + callback.onSuccess(apiResponse.getData()); + } else { + // 打印详细的错误日志 + logApiError("checkOrder", apiResponse.getCode(), apiResponse.getMessage()); + callback.onError(apiResponse.getCode(), apiResponse.getMessage()); + } + } else { + callback.onError(response.code(), "请求失败: " + response.message()); + } + } catch (Exception e) { + callback.onException(e); + } finally { + callback.onComplete(); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + callback.onException(t); + callback.onComplete(); + } + }); + } + + /** * 获取订单列表 * @param token 访问令牌(必需) * @param page 页码(可选) diff --git a/app/src/main/res/layout/activity_oxface_online.xml b/app/src/main/res/layout/activity_oxface_online.xml index eede8fe..64fb56d 100644 --- a/app/src/main/res/layout/activity_oxface_online.xml +++ b/app/src/main/res/layout/activity_oxface_online.xml @@ -389,19 +389,4 @@ android:layout_marginStart="16dp" android:layout_marginBottom="16dp" /> - -