
export class Package {
    /**
     * 时间戳	4byte	唯一标识，重复发送的包，时间戳需一样。
     */
    ts: number;

    /**
     * 命令码	1byte	规定发送命令标示（回复包同发送包命令码一样)
     * 
     * 'A' | 'C' | 'D' | 'F' | 'n' | 'Z' | 'P' | 'V' ...
     */
    cmd: string;

    /**
     * 总包数
     */
    packageTotal: number;

    /**
     * 包序号	2byte	从0开始（如仅仅1个包，则总包为1，包序号为0
     */
    packageNo: number;

    /**
     * 数据长度	2byte	最大1024。
     */
    dataLength: number;

    /**
     * 数据内容	N byte	依数据长度而定
     */
    data: Buffer;
}

export class CmdData {
    cmd: 'carIn' | 'carOut' | 'carOutMatch' | 'carOutNotMatch' | 'payNotify' | 'doorOpenNotify' | 'carLeaveBack';
    [key: string]: any;
}

export class CarIn extends CmdData {
    /**
     * 序列号
     */
    serial: string;

    /**
     * 通道id
     */
    nodeId: string;

    /**
     * 入场时间
     */
    carInTime: string;

    /**
     * 通道名称
     */
    nodeName: string;

    /**
     * 是否开闸
     */
    isDoorOpen: string;

    /**
     * 车型
     */
    carStyle: string;

    /**
     * 车牌类型
     */
    cardType: string;

    /**
     * 原车牌类型
     */
    cardTypeOrg: string;

    /**
     * 内部车信息
     */
    cardNoInfoBase: string;

    /**
     * 无效卡原因
     */
    invalidCardReason: string;

    /**
     * 凭据类型
     */
    serialType: string;

    result: string[];
    /**
     * 同卡多车车位数
     */
    sameCardLotCount: string;

    /**
     * 同卡多车车牌
     */
    sameCardCarNos: string;

    /**
     * 加速停车收费岗亭图片显示，启用车场服务器缓存图片功能
     */
    cachePictureSecond: string;

}

export class CarOutNotMatch extends CmdData {
    /**
     * 账单标识
     */
    billId: string;

    /**
     * 是否黑名单
     */
    blacklist: string;

    /**
     * 黑名单备注信息
     */
    blacklistRemark?: string;

    /**
     * 缓存数据
     */
    cacheData?: string;

    /**
     * 车品牌
     */
    carBrand?: string;

    /**
     * 模糊匹配列表
     */
    carInList?: string;

    /**
     * 车牌号码
     */
    carNo: string;

    /**
     * 车牌颜色
     */
    carNoColor: string;

    /**
     * 出车时间
     */
    carOutTime: string;

    /**
     * 车型
     */
    carStyle: string;

    /**
     * 卡号id
     */
    cardId: string;

    /**
     * 凭据号
     */
    cardNo: string;

    /**
     * 车牌类型
     */
    cardType: string;

    /**
     * 原车牌类型
     */
    cardTypeOrg: string;

    /**
     * 空车牌匹配时间
     */
    emptyCarNoMatchTime: string;

    /**
     * 
     */
    extInfo?: string;

    /**
     * 当天多次计费封顶类型 0不启用；1启用  这个字段是当天（自然天或24小内）多次进出，达到封顶后，进出不收费
     */
    feeLimit: string;

    /**
     * 封顶费用
     */
    feeLimitFee: string;

    /**
     * 封顶次数
     */
    feeLimitTime: string;

    /**
     * 历史欠费
     */
    followCarFee: string;

    /**
     * 车辆图片
     */
    imgName: string;

    /**
     * 卡无效原因
     */
    invalidCardReason: string;

    /**
     * 是否开闸
     */
    isDoorOpen: string;

    /**
     * 车场id
     */
    lotCode: string;

    /**
     * 主卡号
     */
    mainCardNo: string;

    /**
     * 0:不匹配
     */
    matchValue: string;

    /**
     * 通道id
     */
    nodeId: string;

    /**
     * 原车品牌
     */
    orgCarBrand: string;

    /**
     * 出车时间
     */
    outTime: string;

    /**
     * 车牌颜色
     */
    plateColor: string;

    /**
     * 识别度
     */
    recogEnable: string;

    /**
     * 序列号
     */
    serial: string;

    /**
     * 进出凭据类型
     */
    serialType: string;
}

export class CarOutMatch extends CmdData {
    /**
     * 账单标识
     */
    billId: string;

    /**
     * 是否黑名单
     */
    blacklist: string;

    /**
     * 黑名单备注信息
     */
    blacklistRemark: string;

    /**
     * 缓存数据
     */
    cacheData: string;

    /**
     * 入场信息
     */
    carInList: any;

    /**
     * 进出凭据类型
     */
    carInSerialType: string;

    /**
     * 车牌号码
     */
    carNo: string;

    /**
     * 车牌颜色
     */
    carNoColor: string;

    /**
     * 出车时间
     */
    carOutTime: string;

    /**
     * 车型
     */
    carStyle: string;

    /**
     * 卡号id
     */
    cardId: string;

    /**
     * 凭据号
     */
    cardNo: string;

    /**
     * 车牌类型
     */
    cardType: string;

    /**
     * 原车牌类型
     */
    cardTypeOrg?: string;

    /**
     * etc余额
     */
    etcBalance?: string;

    /**
     * etc卡号
     */
    etcNo?: string;

    /**
     * 
     */
    extInfo?: any;

    /**
     * 
     */
    content?: any;

    /**
     * 
     */
    data?: any;

    /**
     * 快速放行
     */
    fastDoorOpen: string;

    /**
     * 计费信息
     */
    fee: any;

    /**
     * 当天多次计费封顶类型 0不启用；1启用  这个字段是当天（自然天或24小内）多次进出，达到封顶后，进出不收费
     */
    feeLimit: string;

    /**
     * 封顶费用
     */
    feeLimitFee: string;

    /**
     * 封顶次数
     */
    feeLimitTime: string;

    /**
     * 历史欠费
     */
    followCarFee: string;

    /**
     * 图片名
     */
    imgName: string;

    /**
     * 是否开闸
     */
    isDoorOpen: string;

    /**
     * 通道id
     */
    nodeId: string;

    /**
     * 进出记录
     */
    inOutRecord?: any;

    /**
     * 卡无效原因
     */
    invalidCardReason: string;

    /**
     * 车场id
     */
    lotCode: string;

    /**
     * 主卡号
     */
    mainCardNo: string;

    /**
     * 0:不匹配
     */
    matchValue: string;

    /**
     * 出车时间
     */
    outTime: string;

    /**
     * 车牌颜色
     */
    plateColor: string;

    /**
     * 识别度
     */
    recogEnable: string;

    /**
     * 序列号
     */
    serial: string;

    /**
     * 进出凭据类型
     */
    serialType: string;

    /**
     * 停车时长
     */
    timeLong: string;
}

export class DoorOpenNotify extends CmdData {
    /**
     * 序列号
     */
    serial: string;

    /**
     * 放行类型
     */
    abnormal: string;

    /**
     * 通道id
     */
    nodeId: string;

    /**
     * 图片名称
     */
    imgName?: string;

    /**
     * 车牌
     */
    carNo: string;

    /**
     * 凭据号
     */
    cardNo: string;
}