package com.ectrip.checkincar.model; import org.json.JSONObject; /** 核销结果(模拟核销 / 后台真实核销共用) */ public class VerifyResult { public boolean success; public String message = ""; // 通用/模拟字段(mock 模式使用) public String reservationId = ""; public String visitorName = ""; public String enterDate = ""; public String visitTime = ""; public String plateNo = ""; public String visitorIdCard = ""; public String visitorType = ""; public String verifySerialNo = ""; // 后台真实核销返回的 data 字段(appedit.do 成功时返回) public String licensePlate = ""; public int orderId; public String orderCode = ""; public String driverName = ""; public String driverPhone = ""; public String useStartDate = ""; public String parkingAddress = ""; public int status; public String enterTime = ""; /** true=后台真实核销返回;false=模拟核销 */ public boolean fromServer = false; public static VerifyResult fail(String msg) { VerifyResult r = new VerifyResult(); r.success = false; r.message = msg; return r; } /** * 解析后台 appedit.do 响应。 * 旧版仅返回 {success, info};新版成功时额外返回 data 对象: * {"success":true,"info":"消费成功", * "data":{"licensePlate":"粤A12345","orderId":10001,"orderCode":"202610270001", * "driverName":"张三","driverPhone":"13800138000", * "useStartDate":"2026-10-27","parkingAddress":"停车场A区", * "status":1,"enterTime":"2026-10-27 10:30:00"}} */ public static VerifyResult fromServerJson(String body) { VerifyResult r = new VerifyResult(); r.fromServer = true; try { JSONObject o = new JSONObject(body); r.success = o.optBoolean("success", false); String info = o.optString("info", ""); r.message = info.isEmpty() ? (r.success ? "消费成功" : "核销失败") : info; // 新版:成功时解析 data 对象(旧版无 data 时跳过,字段保持空串) JSONObject data = o.optJSONObject("data"); if (data != null) { r.licensePlate = data.optString("licensePlate", ""); r.orderId = data.optInt("orderId", 0); r.orderCode = data.optString("orderCode", ""); r.driverName = data.optString("driverName", ""); r.driverPhone = data.optString("driverPhone", ""); r.useStartDate = data.optString("useStartDate", ""); r.parkingAddress = data.optString("parkingAddress", ""); r.status = data.optInt("status", 0); r.enterTime = data.isNull("enterTime") ? "" : data.optString("enterTime", ""); // 兼容:如果 data 里有 licensePlate,同步给旧 plateNo 字段 if (!r.licensePlate.isEmpty() && r.plateNo.isEmpty()) { r.plateNo = r.licensePlate; } } return r; } catch (Throwable t) { r.success = false; String snippet = body == null ? "" : (body.length() > 200 ? body.substring(0, 200) + "..." : body); r.message = "响应解析失败:" + snippet; return r; } } /** 手机号脱敏:138****8000 */ public String maskedPhone() { if (driverPhone == null || driverPhone.length() < 7) { return driverPhone == null ? "" : driverPhone; } return driverPhone.substring(0, 3) + "****" + driverPhone.substring(driverPhone.length() - 4); } }