/**
 * 统一接口请求基类
 */
export class ApiRequestBase {
  appId?: string;

  /**
   * 签名
   */
  key?: string;

  parkId?: number | string;

  /**
   * 接口业务代码
   */
  serviceCode?: string;

  /**
   * 时间戳(毫秒)
   */
  ts?: string;

  /**
   * 请求唯一标识
   */
  reqId?: string;
}

export type ApiRequest = ApiRequestBase & { [key: string]: any };

/**
 * 统一接口返回值
 */
export class ApiResponse<T = any> {
  constructor(resCode: string | number, resMsg?: string, data?: T) {
    this.resCode = resCode;
    this.resMsg = resMsg;
    this.data = data;
  }

  /**
   * 响应代码 0=成功，其他失败，详见返回码枚举
   */
  resCode: string | number;
  resMsg?: string;
  data?: T;

  static success = new ApiResponse("0");

  static isSuccess(res: ApiResponse) {
    return res.resCode === "0" || res.resCode === 0;
  }

  static successWithData(data: any) {
    return new ApiResponse("0", null, data);
  }

  static successWithResMsg(resMsg: any) {
    return new ApiResponse("0", resMsg);
  }

  static failed(resMsg?: string) {
    return new ApiResponse("-1", resMsg);
  }
}

export class GetConfigInfoResponse {
  /**
   * 平台配置
   */
  config?: string;

  /**
   * 车场配置
   */
  parkConfig?: {
    stcParkId: string;

    /**
     * 第三方车场id
     */
    thirdParkId: any;

    [key: string]: any;
  }[];
}

export class GetParkingPaymentInfoRequest extends ApiRequestBase {
  /**
   * 车牌号
   */
  plateNo?: string;

  /**
   * 入场取票号/无牌车入场的卡号
   */
  cardNo?: string;

  /**
   设备编码(出口) 设备编码仅支持出口有停放车辆,并识别正确的情况不支持无牌车 
   */
  deviceCode?: string;

  /**
   * 免费时长（秒）
   */
  freeTime?: number;

  /**
   * 免费金额（单位:分）
   */
  freeMoney?: number;
}

export class PayParkingFeeRequest extends ApiRequestBase {
  /**
   * 车场账单号，不允许为空
   */
  orderNo: string;

  /**
   * 应付金额
   */
  payableAmount: number;

  /**
   * 缴费时间, 'yyyy-mm-dd hh:mi:ss'
   */
  payTime: string;

  /**
   * 支付金额(不包含减免部分),单位为分，不允许为空
   */
  amount: number;

  /**
   * 收费终端，详见参数枚举1.6.4
   */
  payType: any;

  /**
   * 付款方式，详见参数枚举 1.6.3(针对amount的支付方式)
   */
  payMethod: any;

  /**
   * 减免总金额（单位 分）
   */
  freeMoney: number;

  /**
   * 减免总时长（单位 秒）
   */
  freeTime: number;

  /**
   * 车场是否离线(6.x系统无感支付及后付费用必须传.6.x支持、5.x不支持)：1、表示车辆已经离场
   */
  isCarLeave?: any;

  /**
   * json数组字符串（如果freeMoney或freeTime大于零时， 不能为空）
   */
  freeDetail?: string;

  /**
   * 商户订单号 非必填,主要用与后期本地数据和支付平台直接对账使用.
   */
  outOrderNo?: string;

  /**
   * 支付扩展信息，json对象
   */
  paymentExt?: string;
}

export class SyncChargePilePayRequest extends ApiRequestBase {
  orderNo: string;
  plateNo: string;
  startTime: string;
  endTime: string;
  stationId: string;
  stationName: string;
  deviceId: string;
  deviceName: string;
  spaceNo: string;
  power: number;
  elecMoney: number;
  seviceMoney: number;
  totalMoney: number;
  freeType: number;
  freeMoney: number;
  freeTime: number;
}

export class UnlicensedCarInoutRequest extends ApiRequestBase {
  /**
   * 设备标识 0-设备编码 1-设备Ip
   */
  deviceType: 0 | 1;

  deviceCode: string;
  cardNo: string;
}

export class SigningRequest extends ApiRequestBase {
  plateNo: string;

  /**
   * 是否签约无感支付0：否（解约）；1：是
   */
  signed: 0 | 1;

  /**
   * 无感付款方式，详见参数枚举 1.6.3
   */
  payMethod: number;
  inTime: string;
}

/**
 * 数据上报基类
 */
class DataPushBase {
  appId: string;

  /**
   * 验证码
   */
  key: string;

  parkId: number;

  /**
   * 时间戳
   */
  ts: string;

  /**
   * 每次请求的唯一标识
   */
  reqId: string;
}

export class PostPaymentInput extends DataPushBase {
  plateNo: string;
  orderNo: string;

  /**
   * 应收金额（单位：分）
   */
  money: number;

  /**
   * 进场时间
   */
  entryTime: string;

  /**
   * 停车时长（秒）
   */
  elapsedTime: number;

  /**
   * 固定车类型  详见参数枚举 1.6.2
   */
  carType?: number;

  /**
   * 车辆类型 详见参数枚举1.6.8
   */
  carStyle?: number;

  /**
   * 出口编号
   */
  leaveNodeId?: any;

  /**
   * 车牌颜色 详见参数枚举1.6.11（白、黑、灰等）
   */
  plateColor?: string;
}

/**
 * 3.2.1
 * 进场上报
 */
export class PostCarInInfoInput extends DataPushBase {
  /**
   * 出入场唯一记录ID
   */
  trafficId: string;

  /**
   * 车牌号(全)
   */
  plateNo: string;

  /**
   * 入场取票号/无牌车入场的卡号
   */
  cardNo?: string;

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

  /**
   * 卡片类型  详见参数枚举 1.6.2
   */
  carType: number;

  /**
   * 入口名称（6.x系统取值是：通道名称 +“- ”+ 通道id；5.x系统取值是：通道名称（后续也需要调整成6.x一样，对接方需要兼容）
   */
  entryPlace: string;

  /**
   * 出口抓拍图片名称
   */
  imgName: string;

  /**
   * 图片地址
   */
  imgInfo: string;

  /**
   * 场中场标识（0=否 1=是）
   */
  area?: number;

  /**
   * 车牌修正标识（0=否 1=是）
   */
  modifyLpnFlag?: number;

  /**
   * 识别可信度
   */
  recognitionCredibility?: string;

  /**
   * 放行类型 ，详见参数枚举1.6.10
   */
  passType?: number;

  /**
   * 放行说明
   */
  passRemark?: string;

  /**
   * 剩余车位
   */
  freeLots?: number;

  /**
   * 总车位
   */
  totalLots?: number;

  /**
   * 入场数据扩展信息，json对象
   */
  carInExt?: {
    /**
     * 车牌颜色 详见参数枚举1.6.11（白、黑、灰等）
     */
    plateColor?: string;

    /**
     * 车辆品牌（奥迪、宝马、奔驰等）
     */
    vehicleBrand?: string;

    /**
     * 车辆型号（大型车，小型车，摩托车等现只有6x才有此值）
     */
    vehicleModel?: string;

    /**
     * 固定车过期天数
     */
    carExpireDay?: number;

    /**
     * 扩展字符串（6x才存在的参数）
     */
    extInfo?: string;
  };
}

/**
 * 3.2.2
 * 出场上报
 */
export class PostCarOutInfoInput extends DataPushBase {
  /**
   * 出入场唯一记录ID
   */
  trafficId: string;

  /**
   * 车牌号
   */
  plateNo: string;

  /**
   * 入场取票号/无牌车入场的卡号
   */
  cardNo: string;

  /**
   * 入场时间
   */
  entryTime?: string;

  /**
   * 出场时间
   */
  leaveTime?: string;

  /**
   * 卡片类型 详见参数枚举1.6.2
   */
  carType?: number;

  /**
   * 出口名称（6.x系统取值是：通道名称 +“- ”+ 通道id；5.x系统取值是：通道名称（后续也需要调整成6.x一样，对接方需要兼容）
   */
  leavePlace?: string;

  /**
   * 出口抓拍图片名称
   */
  imgName?: string;

  /**
   * 图片信息类型：2=图片URL（可公网访问地址）
   */
  imgType: number;

  /**
   * 图片URL
   */
  imgInfo: string;

  /**
   * 场中场标识（0=否 1=是）
   */
  area: number;

  /**
   * 识别可信度
   */
  recognitionCredibility: string;

  /**
   * 放行类型，详见参数枚举1.6.10
   */
  passType: number;

  /**
   * 放行说明
   */
  passRemark: string;

  /**
   * 剩余车位
   */
  freeLots: number;

  /**
   * 总车位
   */
  totalLots: number;

  /**
   * 支付信息，json对象
   */
  payMentInfo?: {
    /**
     * 应收总金额（单位分）
     */
    totalMoney?: number;

    /**
     * 实收总金额（单位分）
     */
    paidMoney?: number;

    /**
     * 抵扣时长（单位秒）
     */
    freeTime?: number;

    /**
     * 抵扣金额（单位分）
     */
    freeMoney?: number;

    /**
     * 后付费出场（0=否 1=是）
     */
    isPostPay: number;
  };

  /**
   * 车辆扩展信息，json对象（不参与签名）
   */
  carExtInfo?: {
    /**
     * 车牌颜色 详见参数枚举1.6.11（白、黑、灰等）
     */
    plateColor: string;

    /**
     * 车辆品牌（奥迪、宝马、奔驰等）
     */
    vehicleBrand: string;

    /**
     * 车辆型号（大型车，小型车，摩托车等现只有6x才有此值）
     */
    vehicleModel: string;

    /**
     * 扩展字符串（6x才存在的参数）
     */
    extInfo: string;
  };
}

/**
 * 3.2.3缴费记录上报
 */
export class PostPayFeeInfoInput extends DataPushBase {
  /**
   * 车牌号
   */
  plateNo?: string;

  /**
   * 入场取票号/无牌车入场的卡号
   */
  cardNo?: string;

  /**
   * 主账单id
   */
  billId: string;

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

  /**
   * 支付时间
   */
  payTime: string;

  /**
   * 支付来源 详见参数枚举 1.6.5
   * 对应dict表PAY_SOURCE
   */
  paySource: number;

  /**
   * 收费终端，详见参数枚举1.6.4
   * 对应dict表PAY_CHANNEL
   */
  payType: number;

  /**
   * 付款方式，详见参数枚举 1.6.3
   * 对应dict表PAY_METHOD
   */
  payMethod: number;

  /**
   * 应收总金额（单位分）
   */
  totalMoney: number;

  /**
   * 实收总金额（单位分）
   */
  paidMoney: number;

  /**
   * 抵扣时长（单位秒）
   */
  freeTime: number;

  /**
   * 抵扣金额（单位分）
   */
  freeMoney: number;

  /**
   * 车场订单号
   */
  orderNo?: string;

  /**
   * 支付定单号
   */
  paymentOrderNo?: string;

  /**
   * 车牌颜色 详见参数枚举1.6.11（白、黑、灰等）
   */
  plateColor?: string;

  /**
   * 获取优惠金额，单位分
   * 不能直接从字段freeMoney取
   * @param input
   * @returns
   */
  static getFreeMoney(input: PostPayFeeInfoInput) {
    return (
      ([1010, 1012, 1013, 1014].includes(input.payMethod)
        ? input.paidMoney
        : 0) + input.freeMoney
    );
  }

  /**
   * 获取实收金额，单位分
   * 不能直接从字段paidMoney取
   * @param input
   */
  static getPaidMoney(input: PostPayFeeInfoInput) {
    return [1010, 1012, 1013, 1014].includes(input.payMethod)
      ? 0
      : input.paidMoney;
  }
}

/**
 * 3.2.4空闲车位上报
 */
export class PostFreeParkingSpaceInput extends DataPushBase {
  /**
   * 总剩余车位数
   */
  freeSpaceNum: number;

  /**
   * 总车位数
   */
  totalSpaceNum: number;

  areaInfo: [
    {
      areaCode: string;
      areaName: string;

      /**
       * 区域剩余车位数
       */
      areaFreeSpaceNum: number;
    }
  ];
}

/**
 * 3.2.5设备状态上报
 */
export class PostDeviceStateInput extends DataPushBase {
  deviceCode: any;
  deviceIp: string;
  deviceName: string;
  deviceType: number;
  status: any;
  remark: string;
  statusTime: string;
}

/**
 * 3.2.6修改车牌信息上报
 */
export class PostModifyPlateNoInput extends DataPushBase {
  /**
   * 出入场唯一记录ID
   */
  trafficId: string;
  oldPlateNo: string;
  newPlateNo: string;
  remark: string;
}

/**
 * 3.2.7车场固定车信息上报
 */
export class PostCarCardInfoInput extends DataPushBase {
  /**
   * 卡片id
   */
  cardId: number;

  /**
   * 卡片名称
   */
  cardName: string;

  /**
   * 户主名
   */
  useName?: string;

  /**
   * 用户手机号
   */
  tel?: string;

  /**
   * 房间号
   */
  roomId?: string;

  /**
   * 备注
   */
  remak?: string;

  /**
   * 车位数量
   */
  lotCount?: string;

  /**
   * 未过期车位数量
   */
  validCount?: string;
  carLotList: {
    /**
     * 车位ID
     */
    id: number;

    /**
     * 车位名称
     */
    lotName?: string;

    /**
     * 固定车类型  详见参数枚举 1.6.2
     */
    carType: number;

    /**
     * 车牌类型名称
     */
    carTypeName: string;

    /**
     * 区域名称
     */
    areaName: string;

    /**
     * 区域id
     */
    areaId: string;

    /**
     * 有效期开始时间（没有有效期时为空）
     */
    beginTime?: string;

    /**
     * 有效期结束时间（没有有效期时为空）
     */
    endTime?: string;

    /**
     * 占用车位个数
     */
    lotCount: number;

    /**
     * 卡内余额(充值车：分，计次车：次)
     */
    validValue: number;
  }[];

  plateNoInfo: {
    id: number;

    /**
     * 车牌号
     */
    plateNo: string;

    /**
     * ETC号/卡号
     */
    etcNo: string;
    /**
     * 备注
     */
    remark?: string;
    /**
     * 车牌状态，1=启用，2=禁用
     */
    plateState?: number;
  }[];

  /**
   * 审核状态(0:未审核,1:审核,2:审核不通过)默认为1
   */
  cardState: number;

  /**
   * 操作标识 0=删除 1=新增 2=更新
   */
  operationType: number;

  /**
   * 创建时间，yyyy-MM-dd HH:mm:ss
   */
  createTime: string;
  /**
   * 内部车状态，1=启用，2=注销
   */
  state: number;
  /**
   * 操作人员
   */
  userName: string;
}

/**
 *
 * 进出车位上报
 */
export class PostBusInOutInput extends DataPushBase {
  lotCode: any;
  carList: any;
  data: any;
  /*
  plateNo: string;
  //plateColor: string;
  busNumber: string;
  areaName: string;
  mapName: string;
  stopTime: string;
  stopFlag: string;
  imgName: string;
  */
}

/**
 * 3.2.10车场交班信息上报
 */
export class PostShiftWorkInfoInput extends DataPushBase {
  /**
   * 交班ID （车场自定义）
   */
  exchangeCode: string;

  /**
   * 收费员
   */
  chargeMan: string;

  /**
   * 交班时间，yyyy-MM-dd HH:mm:ss
   *
   * 退机时间
   */
  exchangeTime: string;

  /**
   * 上岗时间，yyyy-MM-dd HH:mm:ss
   *
   * 上机时间
   */
  startTime: string;

  /**
   * 实收金额（单位：分）
   */
  money: number;

  /**
   * 应收金额（单位：分）
   */
  totalMoney: number;
}

/**
 * 3.2.23退款订单上报第三方
 */
export class PostRefundNotify extends DataPushBase {
  orderNo: string;
  /**
   * 支付订单号
   */
  payNo: string;
  /**
   * 退款订单号
   */
  refundNo: string;
  /**
   * 0 临停缴费  1 内部车充值退款
   */
  refundType: number;
  paySource: number;
  refundAmount: number;
  remark: string;
}

/**
 * 3.4.1速停车缴费成功推送
 */
export class PostStcPayResultInput extends DataPushBase {
  plateNo: string;
  ttpOrderNo: string;
  payTime: string;
  stcOrderNo: string;
  merOrderNo: string;
  amount: number;
  /**
   * 支付方式{"00": "微信支付","01": "免密支付","02": "VIP支付","03": "停车币","04": "协议扣款","05":"信用付扣款","06":"阿里支付","07": "银联支付","08": "银行协议扣款","09": "一网通支付","005": "微信小程序支付","3501": "智慧通行无感","3502":"Upark无感","3503": "建行无感","3504": "招行无感","3505": "工行无感","3506": "农行无感","3507": "中行无感","3570": "山东高速","97": "优积付","98": "澳门通支付","99": "其它"} 

   */
  payMethod: string;
  attach?: string;
  paymentTag: string;
}

export class GetCarCardInfoRequest extends ApiRequestBase {
  /**
   * 车牌号
   */
  plateNo?: string;

  /**
   * 卡片id
   */
  cardId?: number;

  /**
   * 卡片状态：1：启用，2：注销， 0：全部
  默认是1（只支持6X）
   */
  state?: number;
}

export class GetCarCardInfoResponse {
  /**
   * 卡片id
   */
  cardId?: number;

  /**
   * 卡片名称
   */
  cardName?: string;

  /**
   * 户主名
   */
  useName?: string;

  /**
   * 房间号
   */
  roomId?: string;

  /**
   * 否
   */
  remak?: string;

  /**
   * 车位数量
   */
  lotCount?: string;

  /**
   * 未过期车位数量
   */
  validCount?: string;

  /**
   * 车主电话
   */
  tel?: string;

  /**
   * 车牌号，多个车牌号用，隔开
   */
  fullCarNoStr?: string;

  /**
   * 联系地址
   */
  contact?: string;

  /**
   * 辅助信息
   */
  assist?: string;

  /**
   * 车位信息 array字符串
   */
  carLotList: string;

  /**
   * 车牌列表 json数组字符串
   */
  plateNoInfo: string;

  /**
   * 最后一次更新时间yyyy-MM-dd 00:00:00
   */
  lastUpdateTime: string;

  /**
   * 审核状态(0:未审核,1:审核,2:审核不通过（注销）)默认为1
   */
  cardState: number;
}

export class AddCarCardNoRequest extends ApiRequestBase {
  /**
   * 操作人id
   */
  userId: string;

  /**
   * 操作人姓名
   */
  userName: string;

  /**
   * 车主信息Object字符串
   */
  cardInfo: string;

  /**
   * 车位信息 array字符串
   */
  carLotList: string;

  /**
   * 车牌列表 json数组字符串
   */
  plateNoInfo: string;
}

export class GetParkingNodeRequest extends ApiRequestBase {
  pageIndex: number;
  pageSize: number;
}

export class GetParkingNodeResponse {
  pageIndex: number;
  pageSize: number;
  totalCount: number;
  nodeList: {
    /**
     * 通道编号
     */
    id: any;

    /**
     * 设备Ip
     */
    nodeIp: string;

    /**
     * 设备名称
     */
    nodeName: string;

    /**
     * 使用类别, 详见参数枚举1.6.7
     */
    useType: number;
  }[];
}

export class GetDeviceListRequest extends ApiRequestBase {
  deviceType?: number = 0;
}
export class QueryCarInfoRequest extends ApiRequestBase {
  parkId: any;
  plateNo?: string;
  cardNo?: string;
  startTime?: string;
  endTime?: string;
  pageIndex: number;
  pageSize: number;
}
export class GetFreeSpaceNumRequest extends ApiRequestBase {}

export class GetFreeSpaceNumResponse {
  /**
   * 车场id
   */
  parkId: number;

  /**
   * string
   */
  parkName: string;

  /**
   * 总车位数
   */
  totalNum: number;

  /**
   * 空闲车位数
   */
  freeSpaceNum: number;
}

export class GetDeviceStatusRequest extends ApiRequestBase {
  deviceType?: number = 0;
}

export class GetNodeCarInfoRequest extends ApiRequestBase {
  /**
   * nodeId、nodeIp二选一
   */
  nodeId?: any;

  /**
   * nodeId、nodeIp二选一
   */
  nodeIp?: string;
}

export class GetCarInfoByNodeIdRequest extends ApiRequestBase {
  /**
   * nodeId、nodeIp二选一
   */
  nodeId?: any;

  /**
   * nodeId、nodeIp二选一
   */
  nodeIp?: string;
}

export class GetCarInfoByNodeIdResponse {
  /**
   * 车牌号
   */
  carPlateNum: string;

  /**
   * 抓拍时间
   */
  capTime: string;

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

export class RemoteOpenRequest extends ApiRequestBase {
  nodeId: any;
  plateNo?: string;

  /**
   * 放行类型
   */
  type: number;

  /**
   * 放行说明
   */
  remark?: string;
}

export class ModifyCarInfoRequest extends ApiRequestBase {
  /**
   * 车牌号码 必填
   */
  plateNo?: string;

  /**
   * 入场取票号/无牌车入场的卡号
   */
  cardNo?: string;

  /**
   * 修改后的入场取票号/卡号
   */
  newCardNo?: string;

  /**
   * 车辆类型 详见参数枚举1.6.8
   */
  carStyle?: string;

  /**
   * 车颜色 黑、白、蓝、红等
   */
  carColor?: string;

  /**
   * 备注
   */
  remark?: string;
}

export class AddVirtualTrafficRequest extends ApiRequestBase {
  /**
   * 车牌号
   */
  plateNo?: string;

  /**
   * 入场通道id
   */
  nodeId?: number;

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

  /**
   * 相机识别值
   */
  recogEnable: number;

  /**
   * 免进出场时间（yyyy-MM-dd HH:mm:ss）
   */
  carTime: string;

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

  /**
   * 车型类型
   */
  carStyle: number;

  /**
   * 来源车场
   */
  fromLotCode: string;

  /**
   * 车牌颜色
   */
  plateNoColor: string;
}

/**
 * 2.7.16进出场重新抓拍接口入参
 */
export class RecaptureRequest extends ApiRequestBase {
  /**
   * 唯一记录ID
   */
  uniqCode?: string;
  /**
   * 入场通道id
   */
  nodeId?: number;
  /**
   摄像唯一编号
   */
  cameraId?: string;
}

export class AddCarBlackInfoRequest extends ApiRequestBase {
  /**
   * 车牌号
   */
  plateNo: string;

  /**
   * 原因备注
   */
  remark;

  /**
   * 车场Id
   */
  parkId: any;

  /**
   * 限制类型1进2出3进出
   */
  type: number;
}

export class ModifyCarBlackInfoRequest extends ApiRequestBase {
  /**
   * 车牌号
   */
  plateNo: string;

  /**
   * 原因备注
   */
  remark;

  /**
   * 车场Id
   */
  parkId: any;

  /**
   * 限制类型1进2出3进出
   */
  type: number;
}

export class DelCarBlackInfoRequest extends ApiRequestBase {
  /**
   * 车牌号
   */
  plateNo: string;

  /**
   * 原因备注
   */
  remark;

  /**
   * 车场Id
   */
  parkId: any;
}

export class QueryCarBlackInfoRequest extends ApiRequestBase {
  /**
   * 车场Id
   */
  parkId: any;
  /**
   * 车牌号
   */
  plateNo: string;
  /**
   * 第N页
   */
  pageIndex: number;
  /**
   * 每一页数量
   */
  pageSize: number;
}

export class LockCarplateRequest extends ApiRequestBase {
  plateNo: string;
}

export class UnlockCarplateRequest extends ApiRequestBase {
  plateNo: string;
}

export class QueryCurrentUserRequest extends ApiRequestBase {}

export class QueryCurrentUserResponse {
  /**
   *
   */
  createDate?: string;

  /**
   *
   */
  createId?: string;

  /**
   *
   */
  createSystem?: string;

  /**
   *
   */
  deleted?: number;

  /**
   *
   */
  lotId?: string;

  /**
   *
   */
  merId?: string;

  /**
   *
   */
  merName?: string;

  /**
   *
   */
  password?: string;

  /**
   *
   */
  permissions?: string;

  /**
   *
   */
  realName?: string;

  /**
   *
   */
  remark?: string;

  /**
   *
   */
  sessionId?: string;

  /**
   *
   */
  status?: number;

  /**
   *
   */
  stcId?: string;

  /**
   *
   */
  userAgent?: string;

  /**
   *
   */
  userId?: number;

  /**
   *
   */
  userName?: string;

  /**
   *
   */
  userRole?: string;

  /**
   *
   */
  version?: string;
}

export class QueryRecordByIdRequest extends ApiRequestBase {
  recordId: string;
}

export class QueryRecordByIdResponse {
  /**
   * 抵用券名称
   */
  couponName?: string;

  /**
   * 抵用券Id
   */
  couponId?: string;

  /**
   * 抵扣券类别 1金额 2时间 3全免 4折扣 5访客券
   */
  couponType?: string;

  /**
   * 使用张数
   */
  amount?: number;

  /**
   * 车牌
   */
  carPlateNum?: string;

  /**
   * 抵扣折度
   */
  discountRate?: number;

  /**
   * 图片地址
   */
  imgUrl?: string;

  /**
   * 创建时间
   */
  createTime?: Date;

  /**
   * 商户id
   */
  merId?: string;

  /**
   * 商户名称
   */
  merName?: string;

  /**
   * 记录Id
   */
  recordId?: string;

  /**
   * 备注
   */
  remark?: string;

  /**
   * 发券方式 1扫一扫发放 2输车牌 3固定二维码
   */
  useType?: string;

  /**
   * 发放人
   */
  realName?: string;

  /**
   * 操作人
   */
  userName?: string;

  /**
   * 全免抵扣时长（分钟）
   */
  totalDeduTime?: number;

  /**
   * 抵用金额
   */
  totalMoney?: number;

  /**
   * 抵用时间
   */
  totalTime?: number;
}

export class FindLotRolesRequest extends ApiRequestBase {
  pageIndex: number;
  pageSize: number;
}

export class FindListByLotIdPageRequest extends ApiRequestBase {
  pageIndex: number;
  pageSize: number;
}

export class SaveLogRequest extends ApiRequestBase {
  /**
   * 是否批量操作 0否 1是
   */
  batchOperation?: string;

  /**
   * ip地址 例：127.0.0.1 可传可不传
   */
  ipAddress?: string;

  /**
   * 车场Id
   */
  lotId: string;

  /**
   * mdcLogId 发送方系统的日志ID方便捞数据、可传可不传
   */
  mdcLogId?: string;

  /**
   * 操作模块 主功能模块 例：电子抵扣券
   */
  module: string;

  /**
   * 操作内容
   */
  operationContent?: string;

  /**
   * 操作来源 例：云助手、移动岗亭、云平台、抵扣券（直接存文字）例 ：抵扣券
   */
  operationSource: string;

  /**
   * 操作状态 成功true失败false 例：true
   */
  operationStatus: boolean;

  /**
   * 操作时间 不传
   */
  operationTime?: string;

  /**
   * 操作类型 例：新增、删除、更新、导入、审核（直接存文字） 例：新增
   */
  operationType: string;

  /**
   * 操作人 操作人名称
   */
  operator?: string;

  /**
   * 操作人 操作人ID
   */
  operatorId?: string;

  /**
   * 子操作模块 具体功能模块 例：新增抵扣券
   */
  subModule: string;
}

export class FindListByLotIdPageResponse {
  totalItems: number;
  totalPages: number;
  list: {
    /**
     * 创建时间
     */
    createdTime?: string;

    /**
     * 登录名称
     */
    loginName?: string;

    /**
     * 邮箱
     */
    mail?: string;

    /**
     * 名称
     */
    name?: string;

    /**
     * 昵称
     */
    nickname?: string;

    /**
     * 密码
     */
    passwd?: string;

    /**
     * 备注
     */
    remarks?: string;

    /**
     * 用户拥有的角色id
     */
    roleIds?: string;

    /**
     * 用户拥有的角色名称
     */
    roleNames?: string;

    /**
     * 状态
     */
    state?: string;

    /**
     * 手机号码
     */
    tel?: string;

    /**
     * 用户id
     */
    userId?: string;

    /**
     * 用户头像
     */
    userImgAddr?: string;
  }[];
}

export class FindLotRolesResponse {
  totalItems: number;
  totalPages: number;
  list: {
    /**
     * 创建人
     */
    createdBy?: string;

    /**
     * 创建人名称
     */
    createdByName?: string;

    /**
     * 创建时间
     */
    createdTime?: string;

    /**
     * 是否删除
     */
    deleted?: number;

    /**
     * 名称
     */
    name?: string;

    /**
     * 备注
     */
    remarks?: string;

    /**
     * 角色id
     */
    roleId?: string;

    /**
     * 模板id
     */
    tempId?: string;

    /**
     * 更新人
     */
    updatedBy?: string;

    /**
     * 更新人名称
     */
    updatedByName?: string;

    /**
     * 更新时间
     */
    updatedTime?: string;
  }[];
}

export class Recharge3rdByUnityRequest extends ApiRequestBase {
  /**
   * 抵用券id
   */
  couponId: string;
  merId: string;
  password: string;

  /**
   * 抵扣张数
   */
  totalNum: number;
  userName: string;
}

export class QueryLotMer4UnityRequest extends ApiRequestBase {}

export class GetMyBaseInfoRequest extends ApiRequestBase {}

export class GetMyBaseInfoReponse {
  /**
   * 创建时间
   */
  createdTime?: string;

  /**
   * 登录名
   */
  loginName?: string;

  /**
   * 邮箱
   */
  mail?: string;

  /**
   * 名称
   */
  name?: string;

  /**
   * 昵称
   */
  nickname?: string;

  /**
   * 密码
   */
  passwd?: string;

  /**
   * 备注
   */
  remarks?: string;

  /**
   * 角色id
   */
  roleIds?: string;

  /**
   * 角色名称
   */
  roleNames?: string;

  /**
   * 状态
   */
  state?: string;

  /**
   * 电脑
   */
  tel?: string;

  /**
   * 用户id
   */
  userId?: string;

  /**
   * 用户头像
   */
  userImgAddr?: string;
}

export class ModifyCarCardNoRequest extends ApiRequestBase {
  userId: string;
  userName: string;

  /**
   * 车主信息 object字符串
   */
  cardInfo: string;

  /**
   * 车位信息 array字符串
   */
  carLotList: string;

  /**
   * 车牌列表 json数组字符串
   * 单独传递一个id就算是删除车牌
   */
  plateNoInfo: string;
}

export class DelCarCardInfoRequest extends ApiRequestBase {
  /**
   * 卡片Id
   */
  cardId: string;
}

/**
 * 3.2.8车场固定车充值信息上报
 */
export class PostCarCardChargeInfoInput extends DataPushBase {
  /**
   * 卡片id
   */
  cardId: number;
  /**
   * 订单号
   */
  orderNo: string;
  /**
   * 卡片类型
   */
  carType: number;
  /**
   * 支付渠道
   */
  payChannel: number;
  /**
   * 充值方式
   */
  chargeMethod: number;
  /**
   * 充值天数次数钱数
   */
  chargeNumber: number;
  /**
   * 支付金额
   */
  amount: number;
  /**
   * 免费额度
   */
  freeNumber: number;
  /**
   * 充值开始时间
   */
  validFrom: string;
  /**
   * 充值结束时间
   */
  validTo: string;
  /**
   * 创建时间
   */
  createTime: string;
  /**
   * 备注
   */
  remark: string;
  /**
   * 0充值1退款
   */
  rechargeType: number;
  /**
   * 0=删除 1=新增 2=更新
   */
  operationType: number;
  /**
   * 操作人员
   */
  operator: string;
  /**
   * 支付来源
   */
  paySource: string;
}

/**
 * 3.2.30 特殊订单上报
 */
export class PostSpecPayNotifyInput extends DataPushBase {
  /**
   * 车牌号
   */
  carNo?: string;

  /**
   * 入场取票号/无牌车入场的卡号
   */
  cardNo?: string;

  /**
   * 主账单id
   */
  billId?: string;

  /**
   * 入场时间
   */
  comeTime?: string;

  /**
   * 支付时间
   */
  payTime?: string;

  /**
   * 支付来源 详见参数枚举 1.6.5
   */
  paySource?: number;

  /**
   * 收费终端，详见参数枚举1.6.4
   */
  payChannel?: number;

  /**
   * 付款方式，详见参数枚举 1.6.3
   */
  payMethod?: number;

  /**
   * 应收总金额（单位分）
   */
  receivableAmount?: number;

  /**
   * 实收总金额（单位分）
   */
  payinAmount?: number;

  /**
   * 抵扣时长（单位秒）
   */
  freeTime?: number;

  /**
   * 抵扣金额（单位分）
   */
  freeMoney?: number;

  /**
   * 车场订单号
   */
  orderNo?: string;

  /**
   * 支付定单号
   */
  paymentOrderNo?: string;

  /**
   * 车辆扩展信息，json对象
   */
  externJson?: string;

  /**
   * 0-有效账单，1-重复支付无效账单（6x才支持，模板v1.0.1及以上版本才支持此字段）
   */
  effectData?: number;

  /**
   * 0-初始账单，1-修改账单（金额可能发生变化，如后付费）（6x才支持，模板v1.0.2版本才支持此字段---暂未实现）
   */
  modifyFlag?: number;

  /**
   * 订单类型：详细见枚举
   */
  orderType?: number;
}

/**
 * 3.3.1车场进出场压地感上报
 */
export class PostCarCaptureInfoInput extends DataPushBase {
  /**
   * 车牌号
   */
  plateNo: string;

  /**
   * 抓拍场时间：格式yyyy-MM-dd HH:mm:ss
   */
  capTime: string;

  /**
   * 出入口id
   */
  nodeId: string;

  /**
   * IP
   */
  nodeIP: string;

  /**
   * 入口抓拍图片名称
   */
  imgName: string;

  /**
   * 识别可信度
   */
  recognitionCredibility: string;

  /**
   * 进出车流水号
   */
  billId: string;

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

  /**
   * 图片URL；不一定有值，如果无值，根据imgName那么调用2.6.6接口获取
   */
  imgUrl?: string;

  /**
   * 车辆类型 详见参数枚举1.6.8
   */
  carStyle?: string;

  /**
   * 入场数据扩展信息，json object对象
   */
  carInfoExt?: {
    plateColor?: string;
    vehicleBrand?: string;
    vehicleModel?: string;
  };
}

/**
 * 3.3.3车辆后退上报
 */
export class PostCarBackAwayInput extends DataPushBase {
  /**
   * 车牌号
   */
  plateNo: string;

  /**
   * 入场取票号/无牌车入场的卡号
   */
  cardNo: string;

  /**
   * 出入口id
   */
  nodeId: string;

  /**
   * 进出车流水号
   */
  billId: string;

  /**
   * 2：后退（当前默认传2）
   */
  flag: number;
}

export class PayCarCardFeeRequest extends ApiRequestBase {
  userId: string;
  userName: string;
  cardId: number;

  orderNo: string;

  /**
   * 固定车类型 详见参数枚举 1.6.2
   */
  carType: number;

  /**
   * 支付渠道,详见参数枚举 1.6.3
   */
  payChannel: number;

  /**
   * 充值方式,(0 钱(单位:分),1 月,2 天,3 小时,4次)
   */
  chargeMethod: number;

  /**
   * 充值车的充值月数或天数或次数或金额
   */
  chargeNumber: number;

  /**
   * 支付金额（单位：分）
   */
  amount: number;

  /**
   * 免费赠送的月数或天数或次数
   */
  freeNumber: number;

  /**
   * 充值开始时间建议00:00:00(yyyy-MM-dd HH:mm:ss）
   */
  validFrom: string;

  /**
   * 充值结束时间建议23:59:59(yyyy-MM-dd HH:mm:ss）
   */
  validTo: string;
  createTime: string;
  remark: string;
}

export class RefundCarCardFeeRequest extends ApiRequestBase {
  userId: string;
  userName: string;
  cardId: number;
  orderNo: string;
  /**
   * 固定车类型 详见参数枚举 1.6.2
   */
  carType: number;
  /**
   * 支付渠道,详见参数枚举 1.6.3
   */
  payChannel: number;
  /**
   * 支付金额（单位：分）
   */
  amount: number;
  /**
   * 退款方式,(0 钱(单位:分),1 月,2 天,3 小时,4次)
   */
  refundMethod: number;
  /**
   * 充值车的充值月数或天数或次数或金额
   */
  refundNumber: number;
  /**
   * 充值开始时间建议00:00:00(yyyy-MM-dd HH:mm:ss）
   */
  validFrom: string;

  /**
   * 充值结束时间建议23:59:59(yyyy-MM-dd HH:mm:ss）
   */
  validTo: string;
  remark: string;
}

export class AuditCardRechargeRequest extends ApiRequestBase {
  userId: string;
  userName: string;
  /**
   * 审核类型，1:内部车添加，2:内部车充值
   */
  auditType: number;
  cardId: any;
  orderNo: string;
  /**
   * 审核状态，1:通过，2:不通过
   */
  auditStatus: number;
  auditRemark: string;
}
export class RechargeInvoiceRequest extends ApiRequestBase {
  userId?: string;
  userName?: string;
  orderNo: string;
  /**
   * 开票类型 0 未开票 1 电子发票 2 纸质发票
   */
  invoiceState: string;
}
export class ModifyCardStatusRequest extends ApiRequestBase {
  /**
   * 状态, 1=恢复 0=注销
   */
  cardId: any;
  flag: string;
  userId?: string;
  userName?: string;
}
/**
 * 2.4.1用户车位预订
 */
export class ReserveSpaceRequest extends ApiRequestBase {
  /**
   * 车牌号(6位车牌号)
   */
  plateNo?: string;
  /**
   * 取票号 （添加时和车牌二选一（6.x才支持））
   */
  cardNo?: string;
  /**
   * 隐藏参数-文档没有-可自带订单号来操作
   */
  orderNo?: string;
  /**
   * 类型： 0：车位 1：区域
   */
  type: 0 | 1;
  /**
   * 选定的车位/区域ID
   */
  addrId: any;
  /**
   * 预订入场时间
   */
  enterTime: string;
  /**
   * 预约离场时间 若为null，车场默认停车4小时
   */
  leaveTime: string;
  /**
   * 用户名
   */
  userName?: string;
  /**
   * 联系电话
   */
  tel?: string;
  /**
   * 预订失效时间
   */
  failureTime: string;
  /**
   * 0：只允许进出一次1：允许多次进出场(必传)
   */
  flag: "0" | "1";
  /**
   * 是否允许场内预约(非必传)1：允许
   */
  flag2?: string;
  /**
   * 商户名称
   */
  merchantName?: string;
  /**
   * 备注
   */
  remark?: string;
  /**
   * 车牌类型 默认100（标准预约车）6x才需要传此参数--6x必须填写
   */
  cardType: number;
  /**
   * 预约金额
   */
  bookingAmount: number;
  /**
   * 支付方式
   */
  payMethod: number;
  /**
   * 授权方式
   */
  bookingType: string;
}

/**
 * 2.4.2修改预约车有效期
 */
export class ReserveSpaceChangeTimeRequest extends ApiRequestBase {
  orderNo: string;
  enterTime: string;
  leaveTime: string;
  failureTime: string;
  flag?: string;
}
/**
 * 2.4.3车位预订取消接口
 */
export class CancelReserveSpaceRequest extends ApiRequestBase {
  /**
   * 预约订单号
   */
  orderNo: string;
}
/**
 * 2.4.4预订车位查询接口
 */
export class GetReservableInfoRequest extends ApiRequestBase {
  enterTime: string;
  leaveTime?: string;
}

/**
 * 2.5.17 获取计费详情 请求参数
 */
export class GetFeeDetailReq extends ApiRequestBase {
  orderNo: string;
}

/**
 * 2.5.17 获取计费详情 返回参数
 */
export class GetFeeDetailRes {
  /**
   * 计费详情列表
   */
  feeList: {
    /**
     * 开始时段 (yyyy-MM-dd HH:mm:ss)
     */
    st: string;
    /**
     * 结束时段  (yyyy-MM-dd HH:mm:ss)
     */
    et: string;
    /**
     * 区域名称
     */
    an: string;
    /**
     * 总时长(秒)
     */
    tl: number;

    /**
     * 总金额(分)
     */
    tm: number;

    /**
     * 计费规则名称
     */
    fn: string;

    /**
     * 时段明细
     */
    dl: {
      /**
       * 时长(秒 )
       */
      tl: number;

      /**
       * 金额(分)
       */
      tm: number;

      /**
* 计费规则单位时长(秒)
注:若无计费规则,该值为 ‘-’
*/
      fl: number;

      /**
* 计费规则单位金额(分)
注:若无计费规则,该值为 ‘-’
*/
      fm: number;

      /**
       * 备注信息
       */
      rm: string;
    }[];
  }[];
}

/**
 * 3.2.12设备告警信息上报
 */
export class PostDeviceAlarmInfoInput extends DataPushBase {
  /**
   * 设备编码
   */
  deviceCode: string;

  /**
   * 设备Ip
   */
  deviceIp: string;

  /**
   * 设备名称
   */
  deviceName: string;

  /**
   * 设备类型,详见参数枚举1.6.12
   */
  deviceType: number;

  /**
   * 故障类型
   */
  alarmType: number;

  /**
   * 故障类型名称
   */
  alarmName: string;

  /**
   * 设备状态码 1:出现告警 0：恢复
   */
  status: string;

  /**
   * 故障描述
   */
  remark: string;

  /**
   * 故障/恢复时间
   */
  statusTime: string;

  /**
   * 推送告警等级 1：一级响应 P0 2：二级响应 P1 3：三级响应 P2 4：四级响应 P3
   */
  alarmLevel?: string;
}
