Browse Source

add checkorder

main
MTing 1 week ago
parent
commit
005bd8b7c6
  1. 359
      app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java
  2. 64
      app/src/main/java/com/ouxuan/oxface/network/api/PadApiService.java
  3. 54
      app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java
  4. 15
      app/src/main/res/layout/activity_oxface_online.xml

359
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 int MAX_CLICK_COUNT = 5;
private static final long CLICK_INTERVAL = 1000; // 1秒内点击有效 private static final long CLICK_INTERVAL = 1000; // 1秒内点击有效
// 新增订单查验相关变量
private int modeType = 0; // 1验证码验证 2人脸验证 3扫码验证 4扫码器验证
private String verifyCode = ""; // 验证码
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -1437,4 +1441,359 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
return String.format("内存: %d/%d MB (%.1f%%)", return String.format("内存: %d/%d MB (%.1f%%)",
usedMemory, maxMemory, memoryUsageRatio * 100); 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<com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult>() {
@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<com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult>() {
@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<com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult>() {
@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<com.ouxuan.oxface.network.api.PadApiService.CheckOrderResult>() {
@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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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();
}
});
}
} }

64
app/src/main/java/com/ouxuan/oxface/network/api/PadApiService.java

@ -64,6 +64,28 @@ public interface PadApiService {
Call<ApiResponse<PadSelectResponse>> padSelect(@Body PadSelectRequest selectRequest); Call<ApiResponse<PadSelectResponse>> 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<ApiResponse<CheckOrderResult>> 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 * 对应旧接口: /v3/pad/checkOrder
* @param token 访问令牌必需 * @param token 访问令牌必需
@ -800,6 +822,48 @@ public interface PadApiService {
} }
/** /**
* 订单核销结果模型
*/
public static class CheckOrderResult {
@SerializedName("result")
private java.util.List<CheckOrderItem> result; // 订单项列表
// Getters and Setters
public java.util.List<CheckOrderItem> getResult() { return result; }
public void setResult(java.util.List<CheckOrderItem> result) { this.result = result; }
}
/**
* 订单项模型
*/
public static class CheckOrderItem {
@SerializedName("order_no")
private String orderNo; // 订单编号
@SerializedName("v_code")
private java.util.List<String> 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<String> getVCode() { return vCode; }
public void setVCode(java.util.List<String> 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 { public static class VerifyOrderRequest {

54
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<PadApiService.CheckOrderResult> callback) {
if (padApiService == null) {
callback.onError(-1, "NetworkUtils未初始化,请先调用init()方法");
return;
}
callback.onStart();
padApiService.checkOrder(token, type, hardwareId, vCode, faceBase64, checkType, decryptText)
.enqueue(new Callback<ApiResponse<PadApiService.CheckOrderResult>>() {
@Override
public void onResponse(Call<ApiResponse<PadApiService.CheckOrderResult>> call,
Response<ApiResponse<PadApiService.CheckOrderResult>> response) {
try {
if (response.isSuccessful() && response.body() != null) {
ApiResponse<PadApiService.CheckOrderResult> 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<ApiResponse<PadApiService.CheckOrderResult>> call, Throwable t) {
callback.onException(t);
callback.onComplete();
}
});
}
/**
* 获取订单列表 * 获取订单列表
* @param token 访问令牌必需 * @param token 访问令牌必需
* @param page 页码可选 * @param page 页码可选

15
app/src/main/res/layout/activity_oxface_online.xml

@ -389,19 +389,4 @@
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginBottom="16dp" /> android:layout_marginBottom="16dp" />
<!-- 内存信息查询按钮,放在屏幕右下角 -->
<Button
android:id="@+id/button_memory_info"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:text="内存信息"
android:textSize="14sp"
android:textColor="#FFFFFF"
android:background="@drawable/primary_color_rounded_background"
android:minHeight="30dp"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp" />
</RelativeLayout> </RelativeLayout>
Loading…
Cancel
Save