Browse Source

fix order_type 1 test

dev
MTing 4 days ago
parent
commit
4bde9065b3
  1. 12
      app/src/main/java/com/ouxuan/oxface/network/OrderVerificationResultHandler.java
  2. 43
      app/src/main/java/com/ouxuan/oxface/network/api/PadApiService.java
  3. 12
      app/src/main/java/com/ouxuan/oxface/orderOX/OrderSelectionActivity.java
  4. 13
      app/src/main/java/com/ouxuan/oxface/orderOX/adapter/OrderSelectionAdapter.java
  5. 52
      app/src/main/java/com/ouxuan/oxface/orderOX/model/OrderVerificationData.java
  6. 130
      app/src/test/java/com/ouxuan/oxface/OrderVerificationDataTest.java

12
app/src/main/java/com/ouxuan/oxface/network/OrderVerificationResultHandler.java

@ -270,6 +270,18 @@ public class OrderVerificationResultHandler {
if (jsonObject.has("card_no")) {
cardNo = jsonObject.get("card_no").getAsString();
}
} else if (info instanceof com.google.gson.JsonElement) {
// 如果info是JsonElement根据类型处理
com.google.gson.JsonElement jsonElement = (com.google.gson.JsonElement) info;
if (jsonElement.isJsonObject()) {
JsonObject jsonObject = jsonElement.getAsJsonObject();
if (jsonObject.has("card_no")) {
cardNo = jsonObject.get("card_no").getAsString();
}
} else if (jsonElement.isJsonPrimitive()) {
// 如果是基本类型直接获取字符串值
cardNo = jsonElement.getAsString();
}
}
}
return cardNo;

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

@ -1055,7 +1055,7 @@ public interface PadApiService {
private String orderType; // 订单类型
@SerializedName("info")
private Object info; // 订单信息可能是字符串或对象
private com.google.gson.JsonElement info; // 订单信息可能是字符串或对象
@SerializedName("success")
private int success; // 成功次数
@ -1088,8 +1088,8 @@ public interface PadApiService {
public String getOrderType() { return orderType; }
public void setOrderType(String orderType) { this.orderType = orderType; }
public Object getInfo() { return info; }
public void setInfo(Object info) { this.info = info; }
public com.google.gson.JsonElement getInfo() { return info; }
public void setInfo(com.google.gson.JsonElement info) { this.info = info; }
public int getSuccess() { return success; }
public void setSuccess(int success) { this.success = success; }
@ -1102,21 +1102,46 @@ public interface PadApiService {
// 辅助方法用于获取字符串类型的info
public String getInfoAsString() {
if (info instanceof String) {
return (String) info;
} else {
return info != null ? info.toString() : "";
if (info != null) {
if (info.isJsonPrimitive()) {
return info.getAsString();
} else if (info.isJsonObject()) {
return info.toString();
}
}
return "";
}
// 辅助方法用于获取对象类型的info需要进一步解析
public com.google.gson.JsonObject getInfoAsJsonObject() {
if (info instanceof com.google.gson.JsonObject) {
return (com.google.gson.JsonObject) info;
if (info != null && info.isJsonObject()) {
return info.getAsJsonObject();
} else {
return null;
}
}
// 从info中提取card_no字段
public String getCardNoFromInfo() {
if (info != null && info.isJsonObject()) {
if (info.getAsJsonObject().has("card_no")) {
return info.getAsJsonObject().get("card_no").getAsString();
}
}
return "";
}
// 从info中提取user_face_id字段
public String getUserFaceIdFromInfo() {
if (info != null && info.isJsonObject()) {
if (info.getAsJsonObject().has("user_face_id")) {
return info.getAsJsonObject().get("user_face_id").getAsString();
}
}
return "";
}
// 已有getInfoAsString方法无需重复定义
}
/**

12
app/src/main/java/com/ouxuan/oxface/orderOX/OrderSelectionActivity.java

@ -290,8 +290,16 @@ public class OrderSelectionActivity extends AppCompatActivity {
// 获取订单类型
int orderType = order.getOrder_type();
// 获取卡号
String cardNo = order.getInfo() != null ? order.getCardNoFromInfo() : "";
// 获取卡号 - 根据订单类型处理info字段
String cardNo = "";
if (order.getOrder_type() == 3) {
// 年月卡 - 从info对象中提取card_no
cardNo = order.getInfo() != null ? order.getCardNoFromInfo() : "";
} else if (order.getOrder_type() == 1) {
// 人次票 - info字段本身就是预订信息但卡号可能在其他地方
// 这里保持空字符串因为人次票可能没有卡号概念
cardNo = "";
}
// 获取用户人脸ID
String userFaceId = order.getInfo() != null ? order.getUserFaceIdFromInfo() : "";

13
app/src/main/java/com/ouxuan/oxface/orderOX/adapter/OrderSelectionAdapter.java

@ -171,10 +171,15 @@ public class OrderSelectionAdapter extends RecyclerView.Adapter<OrderSelectionAd
// 订单编号
addInfoLine(holder, "订单编号:", order.getOrder_no() != null ? order.getOrder_no() : "", order.isMany_enter());
// 预订信息
String bookingInfo = order.getOrder_type() == 1 ?
(order.getProject() != null ? order.getProject() : "") :
getFormattedVenueInfo(order);
// 预订信息 - 根据订单类型处理info字段
String bookingInfo = "";
if (order.getOrder_type() == 1) {
// 人次票 - info字段是字符串直接显示
bookingInfo = order.getInfo() != null ? order.getInfoAsString() : "";
} else {
// 场次票 - 显示场馆信息
bookingInfo = getFormattedVenueInfo(order);
}
addInfoLine(holder, "预订信息:", bookingInfo, false);
// 预订项目

52
app/src/main/java/com/ouxuan/oxface/orderOX/model/OrderVerificationData.java

@ -216,9 +216,15 @@ public class OrderVerificationData {
// 辅助方法用于获取info中的card_no如果info是对象类型
public String getCardNoFromInfo() {
if (info != null && info.isJsonObject()) {
if (info.getAsJsonObject().has("card_no")) {
return info.getAsJsonObject().get("card_no").getAsString();
if (info != null) {
if (info.isJsonObject()) {
if (info.getAsJsonObject().has("card_no")) {
return info.getAsJsonObject().get("card_no").getAsString();
}
} else if (info.isJsonPrimitive()) {
// 如果info是字符串类型对于order_type=1的情况info本身就是预订信息
// 但card_no应该从对象中获取所以这里返回空字符串
return "";
}
}
return "";
@ -226,9 +232,43 @@ public class OrderVerificationData {
// 辅助方法用于获取info中的user_face_id如果info是对象类型
public String getUserFaceIdFromInfo() {
if (info != null && info.isJsonObject()) {
if (info.getAsJsonObject().has("user_face_id")) {
return info.getAsJsonObject().get("user_face_id").getAsString();
if (info != null) {
if (info.isJsonObject()) {
if (info.getAsJsonObject().has("user_face_id")) {
return info.getAsJsonObject().get("user_face_id").getAsString();
}
} else if (info.isJsonPrimitive()) {
// 如果info是字符串类型直接返回空字符串
return "";
}
}
return "";
}
// 辅助方法用于获取info中的kind如果info是对象类型
public String getKindFromInfo() {
if (info != null) {
if (info.isJsonObject()) {
if (info.getAsJsonObject().has("kind")) {
return info.getAsJsonObject().get("kind").getAsString();
}
} else if (info.isJsonPrimitive()) {
// 如果info是字符串类型直接返回该字符串
return info.getAsString();
}
}
return "";
}
// 新增辅助方法用于获取info的字符串表示用于order_type=1的情况
public String getInfoAsString() {
if (info != null) {
if (info.isJsonPrimitive()) {
// 如果info是字符串类型直接返回该字符串
return info.getAsString();
} else if (info.isJsonObject()) {
// 如果info是对象类型返回空字符串因为不应该在这种情况下使用
return "";
}
}
return "";

130
app/src/test/java/com/ouxuan/oxface/OrderVerificationDataTest.java

@ -0,0 +1,130 @@
package com.ouxuan.oxface;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.ouxuan.oxface.orderOX.model.OrderVerificationData;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@RunWith(RobolectricTestRunner.class)
@Config(sdk = 28)
public class OrderVerificationDataTest {
@Test
public void testGetCardNoFromInfo_withJsonObject() {
OrderVerificationData.OrderItem orderItem = new OrderVerificationData.OrderItem();
// 创建一个JsonObject作为info字段
JsonObject infoObject = new JsonObject();
infoObject.addProperty("card_no", "123456");
infoObject.addProperty("rest_number", 10);
orderItem.setInfo(infoObject);
// 验证能正确提取card_no
assertEquals("123456", orderItem.getCardNoFromInfo());
}
@Test
public void testGetCardNoFromInfo_withJsonPrimitive() {
OrderVerificationData.OrderItem orderItem = new OrderVerificationData.OrderItem();
// 创建一个JsonPrimitive作为info字段
JsonPrimitive infoPrimitive = new JsonPrimitive("预订信息内容");
orderItem.setInfo(infoPrimitive);
// 验证返回空字符串
assertEquals("", orderItem.getCardNoFromInfo());
}
@Test
public void testGetInfoAsString_withJsonPrimitive() {
OrderVerificationData.OrderItem orderItem = new OrderVerificationData.OrderItem();
// 创建一个JsonPrimitive作为info字段
JsonPrimitive infoPrimitive = new JsonPrimitive("预订信息内容");
orderItem.setInfo(infoPrimitive);
// 验证能正确获取字符串内容
assertEquals("预订信息内容", orderItem.getInfoAsString());
}
@Test
public void testGetInfoAsString_withJsonObject() {
OrderVerificationData.OrderItem orderItem = new OrderVerificationData.OrderItem();
// 创建一个JsonObject作为info字段
JsonObject infoObject = new JsonObject();
infoObject.addProperty("card_no", "123456");
infoObject.addProperty("rest_number", 10);
orderItem.setInfo(infoObject);
// 验证返回空字符串
assertEquals("", orderItem.getInfoAsString());
}
@Test
public void testOrderType1_withStringInfo() {
// 测试order_type为1时info字段为字符串的情况
String json = "{\n" +
" \"order_no\": \"MC20250313171548535218\",\n" +
" \"order_type\": 1,\n" +
" \"project\": \"测试人次票\",\n" +
" \"info\": \"这是人次票的预订信息\",\n" +
" \"v_code\": [\"2503215744\"]\n" +
"}";
Gson gson = new Gson();
OrderVerificationData.OrderItem orderItem = gson.fromJson(json, OrderVerificationData.OrderItem.class);
// 验证订单类型
assertEquals(1, orderItem.getOrder_type());
// 验证项目名称
assertEquals("测试人次票", orderItem.getProject());
// 验证info字段
assertTrue(orderItem.getInfo() instanceof JsonPrimitive);
assertEquals("这是人次票的预订信息", orderItem.getInfoAsString());
assertEquals("", orderItem.getCardNoFromInfo());
}
@Test
public void testOrderType3_withObjectInfo() {
// 测试order_type为3时info字段为对象的情况
String json = "{\n" +
" \"order_no\": \"MC20250313171548535218\",\n" +
" \"order_type\": 3,\n" +
" \"project\": \"测试年月卡\",\n" +
" \"info\": {\n" +
" \"card_no\": \"250313397\",\n" +
" \"rest_number\": 100,\n" +
" \"status\": 0\n" +
" },\n" +
" \"v_code\": [\"2503215744\"]\n" +
"}";
Gson gson = new Gson();
OrderVerificationData.OrderItem orderItem = gson.fromJson(json, OrderVerificationData.OrderItem.class);
// 验证订单类型
assertEquals(3, orderItem.getOrder_type());
// 验证项目名称
assertEquals("测试年月卡", orderItem.getProject());
// 验证info字段
assertTrue(orderItem.getInfo() instanceof JsonObject);
assertEquals("250313397", orderItem.getCardNoFromInfo());
assertEquals("", orderItem.getInfoAsString());
}
}
Loading…
Cancel
Save