VerifyResult.java 3.67 KB
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);
    }
}