|
@ -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(); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
} |
|
|
} |