content: /*
   * 支付宝开放平台API
   * 支付宝开放平台v3协议文档
   *
   * The version of the OpenAPI document: 2025-08-26
   * 
   *
   * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
   * https://openapi-generator.tech
   * Do not edit the class manually.
   */
  
  
  package com.alipay.v3.model;
  
  import java.util.Objects;
  import java.util.Arrays;
  import com.alipay.v3.model.InvoiceItem;
  import com.google.gson.TypeAdapter;
  import com.google.gson.annotations.JsonAdapter;
  import com.google.gson.annotations.SerializedName;
  import com.google.gson.stream.JsonReader;
  import com.google.gson.stream.JsonWriter;
  import io.swagger.annotations.ApiModel;
  import io.swagger.annotations.ApiModelProperty;
  import java.io.IOException;
  
  import com.google.gson.Gson;
  import com.google.gson.GsonBuilder;
  import com.google.gson.JsonArray;
  import com.google.gson.JsonDeserializationContext;
  import com.google.gson.JsonDeserializer;
  import com.google.gson.JsonElement;
  import com.google.gson.JsonObject;
  import com.google.gson.JsonParseException;
  import com.google.gson.TypeAdapterFactory;
  import com.google.gson.reflect.TypeToken;
  
  import java.lang.reflect.Type;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Map.Entry;
  import java.util.Set;
  
  import com.alipay.v3.JSON;
  
  /**
   * AlipayEbppInvoiceApplyInvUploadModel
   */
  @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
  public class AlipayEbppInvoiceApplyInvUploadModel {
    public static final String SERIALIZED_NAME_ANTI_FAKE_CODE = "anti_fake_code";
    @SerializedName(SERIALIZED_NAME_ANTI_FAKE_CODE)
    private String antiFakeCode;
  
    public static final String SERIALIZED_NAME_APPLY_ID = "apply_id";
    @SerializedName(SERIALIZED_NAME_APPLY_ID)
    private String applyId;
  
    public static final String SERIALIZED_NAME_BIZ_ERROR_CODE = "biz_error_code";
    @SerializedName(SERIALIZED_NAME_BIZ_ERROR_CODE)
    private String bizErrorCode;
  
    public static final String SERIALIZED_NAME_BIZ_ERROR_MSG = "biz_error_msg";
    @SerializedName(SERIALIZED_NAME_BIZ_ERROR_MSG)
    private String bizErrorMsg;
  
    public static final String SERIALIZED_NAME_BUSINESS_TYPE = "business_type";
    @SerializedName(SERIALIZED_NAME_BUSINESS_TYPE)
    private Integer businessType;
  
    public static final String SERIALIZED_NAME_CHECK_CODE = "check_code";
    @SerializedName(SERIALIZED_NAME_CHECK_CODE)
    private String checkCode;
  
    public static final String SERIALIZED_NAME_CREATE_RESULT = "create_result";
    @SerializedName(SERIALIZED_NAME_CREATE_RESULT)
    private String createResult;
  
    public static final String SERIALIZED_NAME_DEVICE_NO = "device_no";
    @SerializedName(SERIALIZED_NAME_DEVICE_NO)
    private String deviceNo;
  
    public static final String SERIALIZED_NAME_INVOICE_AMOUNT = "invoice_amount";
    @SerializedName(SERIALIZED_NAME_INVOICE_AMOUNT)
    private String invoiceAmount;
  
    public static final String SERIALIZED_NAME_INVOICE_CODE = "invoice_code";
    @SerializedName(SERIALIZED_NAME_INVOICE_CODE)
    private String invoiceCode;
  
    public static final String SERIALIZED_NAME_INVOICE_DATE = "invoice_date";
    @SerializedName(SERIALIZED_NAME_INVOICE_DATE)
    private String invoiceDate;
  
    public static final String SERIALIZED_NAME_INVOICE_FILE_CONTENT = "invoice_file_content";
    @SerializedName(SERIALIZED_NAME_INVOICE_FILE_CONTENT)
    private String invoiceFileContent;
  
    public static final String SERIALIZED_NAME_INVOICE_FILE_TYPE = "invoice_file_type";
    @SerializedName(SERIALIZED_NAME_INVOICE_FILE_TYPE)
    private String invoiceFileType;
  
    public static final String SERIALIZED_NAME_INVOICE_ITEMS = "invoice_items";
    @SerializedName(SERIALIZED_NAME_INVOICE_ITEMS)
    private InvoiceItem invoiceItems;
  
    public static final String SERIALIZED_NAME_INVOICE_KIND = "invoice_kind";
    @SerializedName(SERIALIZED_NAME_INVOICE_KIND)
    private Integer invoiceKind;
  
    public static final String SERIALIZED_NAME_INVOICE_MEMO = "invoice_memo";
    @SerializedName(SERIALIZED_NAME_INVOICE_MEMO)
    private String invoiceMemo;
  
    public static final String SERIALIZED_NAME_INVOICE_NO = "invoice_no";
    @SerializedName(SERIALIZED_NAME_INVOICE_NO)
    private String invoiceNo;
  
    public static final String SERIALIZED_NAME_INVOICE_TYPE = "invoice_type";
    @SerializedName(SERIALIZED_NAME_INVOICE_TYPE)
    private String invoiceType;
  
    public static final String SERIALIZED_NAME_LEVY_TYPE = "levy_type";
    @SerializedName(SERIALIZED_NAME_LEVY_TYPE)
    private String levyType;
  
    public static final String SERIALIZED_NAME_NORMAL_INVOICE_CODE = "normal_invoice_code";
    @SerializedName(SERIALIZED_NAME_NORMAL_INVOICE_CODE)
    private String normalInvoiceCode;
  
    public static final String SERIALIZED_NAME_NORMAL_INVOICE_NO = "normal_invoice_no";
    @SerializedName(SERIALIZED_NAME_NORMAL_INVOICE_NO)
    private String normalInvoiceNo;
  
    public static final String SERIALIZED_NAME_PAYEE_ADDRESS = "payee_address";
    @SerializedName(SERIALIZED_NAME_PAYEE_ADDRESS)
    private String payeeAddress;
  
    public static final String SERIALIZED_NAME_PAYEE_BANK_ACCOUNT_ID = "payee_bank_account_id";
    @SerializedName(SERIALIZED_NAME_PAYEE_BANK_ACCOUNT_ID)
    private String payeeBankAccountId;
  
    public static final String SERIALIZED_NAME_PAYEE_BANK_NAME = "payee_bank_name";
    @SerializedName(SERIALIZED_NAME_PAYEE_BANK_NAME)
    private String payeeBankName;
  
    public static final String SERIALIZED_NAME_PAYEE_CHECKER = "payee_checker";
    @SerializedName(SERIALIZED_NAME_PAYEE_CHECKER)
    private String payeeChecker;
  
    public static final String SERIALIZED_NAME_PAYEE_NAME = "payee_name";
    @SerializedName(SERIALIZED_NAME_PAYEE_NAME)
    private String payeeName;
  
    public static final String SERIALIZED_NAME_PAYEE_OPERATOR = "payee_operator";
    @SerializedName(SERIALIZED_NAME_PAYEE_OPERATOR)
    private String payeeOperator;
  
    public static final String SERIALIZED_NAME_PAYEE_PHONE = "payee_phone";
    @SerializedName(SERIALIZED_NAME_PAYEE_PHONE)
    private String payeePhone;
  
    public static final String SERIALIZED_NAME_PAYEE_RECEIVER = "payee_receiver";
    @SerializedName(SERIALIZED_NAME_PAYEE_RECEIVER)
    private String payeeReceiver;
  
    public static final String SERIALIZED_NAME_PAYEE_REGISTER_NO = "payee_register_no";
    @SerializedName(SERIALIZED_NAME_PAYEE_REGISTER_NO)
    private String payeeRegisterNo;
  
    public static final String SERIALIZED_NAME_PAYER_ADDRESS = "payer_address";
    @SerializedName(SERIALIZED_NAME_PAYER_ADDRESS)
    private String payerAddress;
  
    public static final String SERIALIZED_NAME_PAYER_BANK_ACCOUNT_ID = "payer_bank_account_id";
    @SerializedName(SERIALIZED_NAME_PAYER_BANK_ACCOUNT_ID)
    private String payerBankAccountId;
  
    public static final String SERIALIZED_NAME_PAYER_BANK_NAME = "payer_bank_name";
    @SerializedName(SERIALIZED_NAME_PAYER_BANK_NAME)
    private String payerBankName;
  
    public static final String SERIALIZED_NAME_PAYER_EMAIL = "payer_email";
    @SerializedName(SERIALIZED_NAME_PAYER_EMAIL)
    private String payerEmail;
  
    public static final String SERIALIZED_NAME_PAYER_NAME = "payer_name";
    @SerializedName(SERIALIZED_NAME_PAYER_NAME)
    private String payerName;
  
    public static final String SERIALIZED_NAME_PAYER_PHONE = "payer_phone";
    @SerializedName(SERIALIZED_NAME_PAYER_PHONE)
    private String payerPhone;
  
    public static final String SERIALIZED_NAME_PAYER_REGISTER_NO = "payer_register_no";
    @SerializedName(SERIALIZED_NAME_PAYER_REGISTER_NO)
    private String payerRegisterNo;
  
    public static final String SERIALIZED_NAME_PLATFORM_CODE = "platform_code";
    @SerializedName(SERIALIZED_NAME_PLATFORM_CODE)
    private String platformCode;
  
    public static final String SERIALIZED_NAME_PLATFORM_TID = "platform_tid";
    @SerializedName(SERIALIZED_NAME_PLATFORM_TID)
    private String platformTid;
  
    public static final String SERIALIZED_NAME_PLATFORM_USER_ID = "platform_user_id";
    @SerializedName(SERIALIZED_NAME_PLATFORM_USER_ID)
    private String platformUserId;
  
    public static final String SERIALIZED_NAME_QR_CODE = "qr_code";
    @SerializedName(SERIALIZED_NAME_QR_CODE)
    private String qrCode;
  
    public static final String SERIALIZED_NAME_RECEIVE_MOBILE = "receive_mobile";
    @SerializedName(SERIALIZED_NAME_RECEIVE_MOBILE)
    private String receiveMobile;
  
    public static final String SERIALIZED_NAME_RED_NOTICE_NO = "red_notice_no";
    @SerializedName(SERIALIZED_NAME_RED_NOTICE_NO)
    private String redNoticeNo;
  
    public static final String SERIALIZED_NAME_SERIAL_NO = "serial_no";
    @SerializedName(SERIALIZED_NAME_SERIAL_NO)
    private String serialNo;
  
    public static final String SERIALIZED_NAME_SOURCE = "source";
    @SerializedName(SERIALIZED_NAME_SOURCE)
    private String source;
  
    public static final String SERIALIZED_NAME_SPECIAL_FLAG = "special_flag";
    @SerializedName(SERIALIZED_NAME_SPECIAL_FLAG)
    private String specialFlag;
  
    public static final String SERIALIZED_NAME_SUM_PRICE = "sum_price";
    @SerializedName(SERIALIZED_NAME_SUM_PRICE)
    private String sumPrice;
  
    public static final String SERIALIZED_NAME_SUM_TAX = "sum_tax";
    @SerializedName(SERIALIZED_NAME_SUM_TAX)
    private String sumTax;
  
    public AlipayEbppInvoiceApplyInvUploadModel() { 
    }
  
    public AlipayEbppInvoiceApplyInvUploadModel antiFakeCode(String antiFakeCode) {
      
      this.antiFakeCode = antiFakeCode;
      return this;
    }
  
     /**
     * 发票防伪码/密码
     * @return antiFakeCode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "acbgjjk13jsadjkfdajkadf123", value = "发票防伪码/密码")
  
    public String getAntiFakeCode() {
      return antiFakeCode;
    }
  
  
    public void setAntiFakeCode(String antiFakeCode) {
      this.antiFakeCode = antiFakeCode;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel applyId(String applyId) {
      
      this.applyId = applyId;
      return this;
    }
  
     /**
     * 发票申请ID, 由阿里发票平台生成。 拆单开票后一笔申请可能对应多张发票。 source&#x3D;apply时必填，其他source可为空
     * @return applyId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "12345678", value = "发票申请ID, 由阿里发票平台生成。 拆单开票后一笔申请可能对应多张发票。 source=apply时必填，其他source可为空")
  
    public String getApplyId() {
      return applyId;
    }
  
  
    public void setApplyId(String applyId) {
      this.applyId = applyId;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel bizErrorCode(String bizErrorCode) {
      
      this.bizErrorCode = bizErrorCode;
      return this;
    }
  
     /**
     * 开票失败错误码， 开票失败(create_result&#x3D;fail)时必填
     * @return bizErrorCode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "sys", value = "开票失败错误码， 开票失败(create_result=fail)时必填")
  
    public String getBizErrorCode() {
      return bizErrorCode;
    }
  
  
    public void setBizErrorCode(String bizErrorCode) {
      this.bizErrorCode = bizErrorCode;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel bizErrorMsg(String bizErrorMsg) {
      
      this.bizErrorMsg = bizErrorMsg;
      return this;
    }
  
     /**
     * 开票失败错误信息， 开票失败(create_result&#x3D;fail)时必填
     * @return bizErrorMsg
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "系统异常", value = "开票失败错误信息， 开票失败(create_result=fail)时必填")
  
    public String getBizErrorMsg() {
      return bizErrorMsg;
    }
  
  
    public void setBizErrorMsg(String bizErrorMsg) {
      this.bizErrorMsg = bizErrorMsg;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel businessType(Integer businessType) {
      
      this.businessType = businessType;
      return this;
    }
  
     /**
     * 抬头类型。可选值： 0：个人 1：企业
     * @return businessType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "0", value = "抬头类型。可选值： 0：个人 1：企业")
  
    public Integer getBusinessType() {
      return businessType;
    }
  
  
    public void setBusinessType(Integer businessType) {
      this.businessType = businessType;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel checkCode(String checkCode) {
      
      this.checkCode = checkCode;
      return this;
    }
  
     /**
     * 校验码
     * @return checkCode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "acbgjjk13", value = "校验码")
  
    public String getCheckCode() {
      return checkCode;
    }
  
  
    public void setCheckCode(String checkCode) {
      this.checkCode = checkCode;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel createResult(String createResult) {
      
      this.createResult = createResult;
      return this;
    }
  
     /**
     * 开票结果，枚举值： success: 发票开具成功； fail: 开票失败； source&#x3D;async时必填，传实际的开票结果。其他source可不传，默认为success
     * @return createResult
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "success", value = "开票结果，枚举值： success: 发票开具成功； fail: 开票失败； source=async时必填，传实际的开票结果。其他source可不传，默认为success")
  
    public String getCreateResult() {
      return createResult;
    }
  
  
    public void setCreateResult(String createResult) {
      this.createResult = createResult;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel deviceNo(String deviceNo) {
      
      this.deviceNo = deviceNo;
      return this;
    }
  
     /**
     * 开票分机号/机器编号
     * @return deviceNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "12345678", value = "开票分机号/机器编号")
  
    public String getDeviceNo() {
      return deviceNo;
    }
  
  
    public void setDeviceNo(String deviceNo) {
      this.deviceNo = deviceNo;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceAmount(String invoiceAmount) {
      
      this.invoiceAmount = invoiceAmount;
      return this;
    }
  
     /**
     * 合计含税金额（开票金额），格式为2位小数。 当开红票时，该字段为负数。 开票成功时(create_result&#x3D;success)必填
     * @return invoiceAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "1170.00", value = "合计含税金额（开票金额），格式为2位小数。 当开红票时，该字段为负数。 开票成功时(create_result=success)必填")
  
    public String getInvoiceAmount() {
      return invoiceAmount;
    }
  
  
    public void setInvoiceAmount(String invoiceAmount) {
      this.invoiceAmount = invoiceAmount;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceCode(String invoiceCode) {
      
      this.invoiceCode = invoiceCode;
      return this;
    }
  
     /**
     * 发票代码。 开票成功时(create_result&#x3D;success)必填
     * @return invoiceCode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "123123123412", value = "发票代码。 开票成功时(create_result=success)必填")
  
    public String getInvoiceCode() {
      return invoiceCode;
    }
  
  
    public void setInvoiceCode(String invoiceCode) {
      this.invoiceCode = invoiceCode;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceDate(String invoiceDate) {
      
      this.invoiceDate = invoiceDate;
      return this;
    }
  
     /**
     * 开票日期，格式 yyyy-MM-dd. 开票成功时(create_result&#x3D;success)必填
     * @return invoiceDate
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2020-09-10", value = "开票日期，格式 yyyy-MM-dd. 开票成功时(create_result=success)必填")
  
    public String getInvoiceDate() {
      return invoiceDate;
    }
  
  
    public void setInvoiceDate(String invoiceDate) {
      this.invoiceDate = invoiceDate;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceFileContent(String invoiceFileContent) {
      
      this.invoiceFileContent = invoiceFileContent;
      return this;
    }
  
     /**
     * 发票版式文件数据，base64化的字符串； 电子发票必填
     * @return invoiceFileContent
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "sfsdfhgsgs", value = "发票版式文件数据，base64化的字符串； 电子发票必填")
  
    public String getInvoiceFileContent() {
      return invoiceFileContent;
    }
  
  
    public void setInvoiceFileContent(String invoiceFileContent) {
      this.invoiceFileContent = invoiceFileContent;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceFileType(String invoiceFileType) {
      
      this.invoiceFileType = invoiceFileType;
      return this;
    }
  
     /**
     * 发票板式文件类型。可选值： PDF, OFD。 开电票且开票成功时(create_result&#x3D;success)必填
     * @return invoiceFileType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "PDF", value = "发票板式文件类型。可选值： PDF, OFD。 开电票且开票成功时(create_result=success)必填")
  
    public String getInvoiceFileType() {
      return invoiceFileType;
    }
  
  
    public void setInvoiceFileType(String invoiceFileType) {
      this.invoiceFileType = invoiceFileType;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceItems(InvoiceItem invoiceItems) {
      
      this.invoiceItems = invoiceItems;
      return this;
    }
  
     /**
     * Get invoiceItems
     * @return invoiceItems
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "")
  
    public InvoiceItem getInvoiceItems() {
      return invoiceItems;
    }
  
  
    public void setInvoiceItems(InvoiceItem invoiceItems) {
      this.invoiceItems = invoiceItems;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceKind(Integer invoiceKind) {
      
      this.invoiceKind = invoiceKind;
      return this;
    }
  
     /**
     * 开票发票类型 可选值： 0: 电票； 1：纸质普票； 2：纸质专票； 开票成功时(create_result&#x3D;success)必填
     * @return invoiceKind
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "0", value = "开票发票类型 可选值： 0: 电票； 1：纸质普票； 2：纸质专票； 开票成功时(create_result=success)必填")
  
    public Integer getInvoiceKind() {
      return invoiceKind;
    }
  
  
    public void setInvoiceKind(Integer invoiceKind) {
      this.invoiceKind = invoiceKind;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceMemo(String invoiceMemo) {
      
      this.invoiceMemo = invoiceMemo;
      return this;
    }
  
     /**
     * 发票备注，会显示在票面
     * @return invoiceMemo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "电子发票测试", value = "发票备注，会显示在票面")
  
    public String getInvoiceMemo() {
      return invoiceMemo;
    }
  
  
    public void setInvoiceMemo(String invoiceMemo) {
      this.invoiceMemo = invoiceMemo;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceNo(String invoiceNo) {
      
      this.invoiceNo = invoiceNo;
      return this;
    }
  
     /**
     * 发票号码。 开票成功时(create_result&#x3D;success)必填
     * @return invoiceNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "12345678", value = "发票号码。 开票成功时(create_result=success)必填")
  
    public String getInvoiceNo() {
      return invoiceNo;
    }
  
  
    public void setInvoiceNo(String invoiceNo) {
      this.invoiceNo = invoiceNo;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel invoiceType(String invoiceType) {
      
      this.invoiceType = invoiceType;
      return this;
    }
  
     /**
     * 发票(开票)类型，可选值： blue: 蓝票； red: 红票； 开票成功时(create_result&#x3D;success)必填
     * @return invoiceType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "blue", value = "发票(开票)类型，可选值： blue: 蓝票； red: 红票； 开票成功时(create_result=success)必填")
  
    public String getInvoiceType() {
      return invoiceType;
    }
  
  
    public void setInvoiceType(String invoiceType) {
      this.invoiceType = invoiceType;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel levyType(String levyType) {
      
      this.levyType = levyType;
      return this;
    }
  
     /**
     * 征税方式，0普通征收，1减按征收，2差额征收
     * @return levyType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "0", value = "征税方式，0普通征收，1减按征收，2差额征收")
  
    public String getLevyType() {
      return levyType;
    }
  
  
    public void setLevyType(String levyType) {
      this.levyType = levyType;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel normalInvoiceCode(String normalInvoiceCode) {
      
      this.normalInvoiceCode = normalInvoiceCode;
      return this;
    }
  
     /**
     * 原发票代码。 冲红且开票成功时(create_result&#x3D;success)必填
     * @return normalInvoiceCode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "111100000000", value = "原发票代码。 冲红且开票成功时(create_result=success)必填")
  
    public String getNormalInvoiceCode() {
      return normalInvoiceCode;
    }
  
  
    public void setNormalInvoiceCode(String normalInvoiceCode) {
      this.normalInvoiceCode = normalInvoiceCode;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel normalInvoiceNo(String normalInvoiceNo) {
      
      this.normalInvoiceNo = normalInvoiceNo;
      return this;
    }
  
     /**
     * 原发票号码。 冲红且开票成功时(create_result&#x3D;success)必填
     * @return normalInvoiceNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "00004349", value = "原发票号码。 冲红且开票成功时(create_result=success)必填")
  
    public String getNormalInvoiceNo() {
      return normalInvoiceNo;
    }
  
  
    public void setNormalInvoiceNo(String normalInvoiceNo) {
      this.normalInvoiceNo = normalInvoiceNo;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payeeAddress(String payeeAddress) {
      
      this.payeeAddress = payeeAddress;
      return this;
    }
  
     /**
     * 销方地址。 开票成功时(create_result&#x3D;success)必填
     * @return payeeAddress
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "杭州市西湖区", value = "销方地址。 开票成功时(create_result=success)必填")
  
    public String getPayeeAddress() {
      return payeeAddress;
    }
  
  
    public void setPayeeAddress(String payeeAddress) {
      this.payeeAddress = payeeAddress;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payeeBankAccountId(String payeeBankAccountId) {
      
      this.payeeBankAccountId = payeeBankAccountId;
      return this;
    }
  
     /**
     * 销方银行账号
     * @return payeeBankAccountId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "8888888888888888", value = "销方银行账号")
  
    public String getPayeeBankAccountId() {
      return payeeBankAccountId;
    }
  
  
    public void setPayeeBankAccountId(String payeeBankAccountId) {
      this.payeeBankAccountId = payeeBankAccountId;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payeeBankName(String payeeBankName) {
      
      this.payeeBankName = payeeBankName;
      return this;
    }
  
     /**
     * 销方开户行名称
     * @return payeeBankName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "92523123213412341234", value = "销方开户行名称")
  
    public String getPayeeBankName() {
      return payeeBankName;
    }
  
  
    public void setPayeeBankName(String payeeBankName) {
      this.payeeBankName = payeeBankName;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payeeChecker(String payeeChecker) {
      
      this.payeeChecker = payeeChecker;
      return this;
    }
  
     /**
     * 复核人
     * @return payeeChecker
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "王五", value = "复核人")
  
    public String getPayeeChecker() {
      return payeeChecker;
    }
  
  
    public void setPayeeChecker(String payeeChecker) {
      this.payeeChecker = payeeChecker;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payeeName(String payeeName) {
      
      this.payeeName = payeeName;
      return this;
    }
  
     /**
     * 销方名称。 开票成功时(create_result&#x3D;success)必填
     * @return payeeName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "测试企业", value = "销方名称。 开票成功时(create_result=success)必填")
  
    public String getPayeeName() {
      return payeeName;
    }
  
  
    public void setPayeeName(String payeeName) {
      this.payeeName = payeeName;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payeeOperator(String payeeOperator) {
      
      this.payeeOperator = payeeOperator;
      return this;
    }
  
     /**
     * 开票人。 开票成功时(create_result&#x3D;success)必填
     * @return payeeOperator
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "张三", value = "开票人。 开票成功时(create_result=success)必填")
  
    public String getPayeeOperator() {
      return payeeOperator;
    }
  
  
    public void setPayeeOperator(String payeeOperator) {
      this.payeeOperator = payeeOperator;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payeePhone(String payeePhone) {
      
      this.payeePhone = payeePhone;
      return this;
    }
  
     /**
     * 销方联系电话。 开票成功时(create_result&#x3D;success)必填
     * @return payeePhone
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "18234561212", value = "销方联系电话。 开票成功时(create_result=success)必填")
  
    public String getPayeePhone() {
      return payeePhone;
    }
  
  
    public void setPayeePhone(String payeePhone) {
      this.payeePhone = payeePhone;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payeeReceiver(String payeeReceiver) {
      
      this.payeeReceiver = payeeReceiver;
      return this;
    }
  
     /**
     * 收款人
     * @return payeeReceiver
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "李四", value = "收款人")
  
    public String getPayeeReceiver() {
      return payeeReceiver;
    }
  
  
    public void setPayeeReceiver(String payeeReceiver) {
      this.payeeReceiver = payeeReceiver;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payeeRegisterNo(String payeeRegisterNo) {
      
      this.payeeRegisterNo = payeeRegisterNo;
      return this;
    }
  
     /**
     * 销方税务登记证号。由大写字母或数字组成，长度要求15~20位。 开票成功时(create_result&#x3D;success)必填
     * @return payeeRegisterNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "20150201321123", value = "销方税务登记证号。由大写字母或数字组成，长度要求15~20位。 开票成功时(create_result=success)必填")
  
    public String getPayeeRegisterNo() {
      return payeeRegisterNo;
    }
  
  
    public void setPayeeRegisterNo(String payeeRegisterNo) {
      this.payeeRegisterNo = payeeRegisterNo;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payerAddress(String payerAddress) {
      
      this.payerAddress = payerAddress;
      return this;
    }
  
     /**
     * 购方地址， 专票且开票成功时(create_result&#x3D;success)必填
     * @return payerAddress
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "浙江省杭州市余杭区文一西路xxx号", value = "购方地址， 专票且开票成功时(create_result=success)必填")
  
    public String getPayerAddress() {
      return payerAddress;
    }
  
  
    public void setPayerAddress(String payerAddress) {
      this.payerAddress = payerAddress;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payerBankAccountId(String payerBankAccountId) {
      
      this.payerBankAccountId = payerBankAccountId;
      return this;
    }
  
     /**
     * 购方银行账号， 专票且开票成功时(create_result&#x3D;success)必填
     * @return payerBankAccountId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "123412341234", value = "购方银行账号， 专票且开票成功时(create_result=success)必填")
  
    public String getPayerBankAccountId() {
      return payerBankAccountId;
    }
  
  
    public void setPayerBankAccountId(String payerBankAccountId) {
      this.payerBankAccountId = payerBankAccountId;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payerBankName(String payerBankName) {
      
      this.payerBankName = payerBankName;
      return this;
    }
  
     /**
     * 购方开户行名称， 专票且开票成功时(create_result&#x3D;success)必填
     * @return payerBankName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "招商银行", value = "购方开户行名称， 专票且开票成功时(create_result=success)必填")
  
    public String getPayerBankName() {
      return payerBankName;
    }
  
  
    public void setPayerBankName(String payerBankName) {
      this.payerBankName = payerBankName;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payerEmail(String payerEmail) {
      
      this.payerEmail = payerEmail;
      return this;
    }
  
     /**
     * 购方电子邮箱，需满足邮箱格式。 格式要求：\\\\w+([-+.]\\\\w+)*@\\\\w+([-.]\\\\w+)*\\\\.\\\\w+([-.]\\\\w+)*
     * @return payerEmail
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "mytest@xxx.com", value = "购方电子邮箱，需满足邮箱格式。 格式要求：\\\\w+([-+.]\\\\w+)*@\\\\w+([-.]\\\\w+)*\\\\.\\\\w+([-.]\\\\w+)*")
  
    public String getPayerEmail() {
      return payerEmail;
    }
  
  
    public void setPayerEmail(String payerEmail) {
      this.payerEmail = payerEmail;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payerName(String payerName) {
      
      this.payerName = payerName;
      return this;
    }
  
     /**
     * 购方抬头。 开票成功时(create_result&#x3D;success)必填
     * @return payerName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "张三", value = "购方抬头。 开票成功时(create_result=success)必填")
  
    public String getPayerName() {
      return payerName;
    }
  
  
    public void setPayerName(String payerName) {
      this.payerName = payerName;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payerPhone(String payerPhone) {
      
      this.payerPhone = payerPhone;
      return this;
    }
  
     /**
     * 购方联系电话， 专票且开票成功时(create_result&#x3D;success)必填
     * @return payerPhone
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "18234561212", value = "购方联系电话， 专票且开票成功时(create_result=success)必填")
  
    public String getPayerPhone() {
      return payerPhone;
    }
  
  
    public void setPayerPhone(String payerPhone) {
      this.payerPhone = payerPhone;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel payerRegisterNo(String payerRegisterNo) {
      
      this.payerRegisterNo = payerRegisterNo;
      return this;
    }
  
     /**
     * 购方税务登记证号，由大写字母或数字组成，长度要求15~20位。 开企业抬头时必填， 专票且开票成功时(create_result&#x3D;success)必填
     * @return payerRegisterNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2015020123123", value = "购方税务登记证号，由大写字母或数字组成，长度要求15~20位。 开企业抬头时必填， 专票且开票成功时(create_result=success)必填")
  
    public String getPayerRegisterNo() {
      return payerRegisterNo;
    }
  
  
    public void setPayerRegisterNo(String payerRegisterNo) {
      this.payerRegisterNo = payerRegisterNo;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel platformCode(String platformCode) {
      
      this.platformCode = platformCode;
      return this;
    }
  
     /**
     * 业务平台Code, 由发票中台分配。 用于标识需交付发票的业务平台，source&#x3D;upload时必填，其他source可为空
     * @return platformCode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "TB", value = "业务平台Code, 由发票中台分配。 用于标识需交付发票的业务平台，source=upload时必填，其他source可为空")
  
    public String getPlatformCode() {
      return platformCode;
    }
  
  
    public void setPlatformCode(String platformCode) {
      this.platformCode = platformCode;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel platformTid(String platformTid) {
      
      this.platformTid = platformTid;
      return this;
    }
  
     /**
     * 业务平台发票申请对应的订单号。 用于区分业务平台订单号，source&#x3D;upload时必填，其他source可为空
     * @return platformTid
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "100011101", value = "业务平台发票申请对应的订单号。 用于区分业务平台订单号，source=upload时必填，其他source可为空")
  
    public String getPlatformTid() {
      return platformTid;
    }
  
  
    public void setPlatformTid(String platformTid) {
      this.platformTid = platformTid;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel platformUserId(String platformUserId) {
      
      this.platformUserId = platformUserId;
      return this;
    }
  
     /**
     * 业务平台发票申请对应的订单号。 用于区分业务平台订单号，source&#x3D;upload时必填，其他source可为空
     * @return platformUserId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "12345678", value = "业务平台发票申请对应的订单号。 用于区分业务平台订单号，source=upload时必填，其他source可为空")
  
    public String getPlatformUserId() {
      return platformUserId;
    }
  
  
    public void setPlatformUserId(String platformUserId) {
      this.platformUserId = platformUserId;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel qrCode(String qrCode) {
      
      this.qrCode = qrCode;
      return this;
    }
  
     /**
     * 二维码
     * @return qrCode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "adsf123", value = "二维码")
  
    public String getQrCode() {
      return qrCode;
    }
  
  
    public void setQrCode(String qrCode) {
      this.qrCode = qrCode;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel receiveMobile(String receiveMobile) {
      
      this.receiveMobile = receiveMobile;
      return this;
    }
  
     /**
     * 购方手机号码，用于收票
     * @return receiveMobile
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "13388889999", value = "购方手机号码，用于收票")
  
    public String getReceiveMobile() {
      return receiveMobile;
    }
  
  
    public void setReceiveMobile(String receiveMobile) {
      this.receiveMobile = receiveMobile;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel redNoticeNo(String redNoticeNo) {
      
      this.redNoticeNo = redNoticeNo;
      return this;
    }
  
     /**
     * 红字通知单号； 专票冲红且开票成功时(create_result&#x3D;success)必填
     * @return redNoticeNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "123", value = "红字通知单号； 专票冲红且开票成功时(create_result=success)必填")
  
    public String getRedNoticeNo() {
      return redNoticeNo;
    }
  
  
    public void setRedNoticeNo(String redNoticeNo) {
      this.redNoticeNo = redNoticeNo;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel serialNo(String serialNo) {
      
      this.serialNo = serialNo;
      return this;
    }
  
     /**
     * 开票流水号/序列号，唯一标志一笔开票请求，由于阿里发票中台生成。 source&#x3D;async时必填，其他source可为空
     * @return serialNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "TB1001_1331", value = "开票流水号/序列号，唯一标志一笔开票请求，由于阿里发票中台生成。 source=async时必填，其他source可为空")
  
    public String getSerialNo() {
      return serialNo;
    }
  
  
    public void setSerialNo(String serialNo) {
      this.serialNo = serialNo;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel source(String source) {
      
      this.source = source;
      return this;
    }
  
     /**
     * 发票来源，可选值： apply: 间连开票模式，ISV回传商家基于申请开具的发票； async：直连开票模式，ISV回传开票结果； upload：直接回传，进行归集与交付的发票
     * @return source
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "apply", value = "发票来源，可选值： apply: 间连开票模式，ISV回传商家基于申请开具的发票； async：直连开票模式，ISV回传开票结果； upload：直接回传，进行归集与交付的发票")
  
    public String getSource() {
      return source;
    }
  
  
    public void setSource(String source) {
      this.source = source;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel specialFlag(String specialFlag) {
      
      this.specialFlag = specialFlag;
      return this;
    }
  
     /**
     * 特殊票种标识，可选值： “00”非特殊票种 （默认值） “02”农产品收购 “06”抵扣通行费 “07”其它通行费 “08”成品油销售 “18”成品油专票负数发票
     * @return specialFlag
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "02", value = "特殊票种标识，可选值： “00”非特殊票种 （默认值） “02”农产品收购 “06”抵扣通行费 “07”其它通行费 “08”成品油销售 “18”成品油专票负数发票")
  
    public String getSpecialFlag() {
      return specialFlag;
    }
  
  
    public void setSpecialFlag(String specialFlag) {
      this.specialFlag = specialFlag;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel sumPrice(String sumPrice) {
      
      this.sumPrice = sumPrice;
      return this;
    }
  
     /**
     * 合计金额（不含税），格式为2位小数。 当开红票时，该字段为负数。 开票成功时(create_result&#x3D;success)必填
     * @return sumPrice
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "1000.00", value = "合计金额（不含税），格式为2位小数。 当开红票时，该字段为负数。 开票成功时(create_result=success)必填")
  
    public String getSumPrice() {
      return sumPrice;
    }
  
  
    public void setSumPrice(String sumPrice) {
      this.sumPrice = sumPrice;
    }
  
  
    public AlipayEbppInvoiceApplyInvUploadModel sumTax(String sumTax) {
      
      this.sumTax = sumTax;
      return this;
    }
  
     /**
     * 合计税额，格式为2位小数。 当开红票时，该字段为0或负数。 开票成功时(create_result&#x3D;success)必填
     * @return sumTax
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "170.00", value = "合计税额，格式为2位小数。 当开红票时，该字段为0或负数。 开票成功时(create_result=success)必填")
  
    public String getSumTax() {
      return sumTax;
    }
  
  
    public void setSumTax(String sumTax) {
      this.sumTax = sumTax;
    }
  
    /**
     * A container for additional, undeclared properties.
     * This is a holder for any undeclared properties as specified with
     * the 'additionalProperties' keyword in the OAS document.
     */
    private Map<String, Object> additionalProperties;
  
    /**
     * Set the additional (undeclared) property with the specified name and value.
     * If the property does not already exist, create it otherwise replace it.
     *
     * @param key name of the property
     * @param value value of the property
     * @return the AlipayEbppInvoiceApplyInvUploadModel instance itself
     */
    public AlipayEbppInvoiceApplyInvUploadModel putAdditionalProperty(String key, Object value) {
      if (this.additionalProperties == null) {
          this.additionalProperties = new HashMap<String, Object>();
      }
      this.additionalProperties.put(key, value);
      return this;
    }
  
    /**
     * Return the additional (undeclared) property.
     *
     * @return a map of objects
     */
    public Map<String, Object> getAdditionalProperties() {
      return additionalProperties;
    }
  
    /**
     * Return the additional (undeclared) property with the specified name.
     *
     * @param key name of the property
     * @return an object
     */
    public Object getAdditionalProperty(String key) {
      if (this.additionalProperties == null) {
          return null;
      }
      return this.additionalProperties.get(key);
    }
  
  
    @Override
    public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }
      AlipayEbppInvoiceApplyInvUploadModel alipayEbppInvoiceApplyInvUploadModel = (AlipayEbppInvoiceApplyInvUploadModel) o;
      return Objects.equals(this.antiFakeCode, alipayEbppInvoiceApplyInvUploadModel.antiFakeCode) &&
          Objects.equals(this.applyId, alipayEbppInvoiceApplyInvUploadModel.applyId) &&
          Objects.equals(this.bizErrorCode, alipayEbppInvoiceApplyInvUploadModel.bizErrorCode) &&
          Objects.equals(this.bizErrorMsg, alipayEbppInvoiceApplyInvUploadModel.bizErrorMsg) &&
          Objects.equals(this.businessType, alipayEbppInvoiceApplyInvUploadModel.businessType) &&
          Objects.equals(this.checkCode, alipayEbppInvoiceApplyInvUploadModel.checkCode) &&
          Objects.equals(this.createResult, alipayEbppInvoiceApplyInvUploadModel.createResult) &&
          Objects.equals(this.deviceNo, alipayEbppInvoiceApplyInvUploadModel.deviceNo) &&
          Objects.equals(this.invoiceAmount, alipayEbppInvoiceApplyInvUploadModel.invoiceAmount) &&
          Objects.equals(this.invoiceCode, alipayEbppInvoiceApplyInvUploadModel.invoiceCode) &&
          Objects.equals(this.invoiceDate, alipayEbppInvoiceApplyInvUploadModel.invoiceDate) &&
          Objects.equals(this.invoiceFileContent, alipayEbppInvoiceApplyInvUploadModel.invoiceFileContent) &&
          Objects.equals(this.invoiceFileType, alipayEbppInvoiceApplyInvUploadModel.invoiceFileType) &&
          Objects.equals(this.invoiceItems, alipayEbppInvoiceApplyInvUploadModel.invoiceItems) &&
          Objects.equals(this.invoiceKind, alipayEbppInvoiceApplyInvUploadModel.invoiceKind) &&
          Objects.equals(this.invoiceMemo, alipayEbppInvoiceApplyInvUploadModel.invoiceMemo) &&
          Objects.equals(this.invoiceNo, alipayEbppInvoiceApplyInvUploadModel.invoiceNo) &&
          Objects.equals(this.invoiceType, alipayEbppInvoiceApplyInvUploadModel.invoiceType) &&
          Objects.equals(this.levyType, alipayEbppInvoiceApplyInvUploadModel.levyType) &&
          Objects.equals(this.normalInvoiceCode, alipayEbppInvoiceApplyInvUploadModel.normalInvoiceCode) &&
          Objects.equals(this.normalInvoiceNo, alipayEbppInvoiceApplyInvUploadModel.normalInvoiceNo) &&
          Objects.equals(this.payeeAddress, alipayEbppInvoiceApplyInvUploadModel.payeeAddress) &&
          Objects.equals(this.payeeBankAccountId, alipayEbppInvoiceApplyInvUploadModel.payeeBankAccountId) &&
          Objects.equals(this.payeeBankName, alipayEbppInvoiceApplyInvUploadModel.payeeBankName) &&
          Objects.equals(this.payeeChecker, alipayEbppInvoiceApplyInvUploadModel.payeeChecker) &&
          Objects.equals(this.payeeName, alipayEbppInvoiceApplyInvUploadModel.payeeName) &&
          Objects.equals(this.payeeOperator, alipayEbppInvoiceApplyInvUploadModel.payeeOperator) &&
          Objects.equals(this.payeePhone, alipayEbppInvoiceApplyInvUploadModel.payeePhone) &&
          Objects.equals(this.payeeReceiver, alipayEbppInvoiceApplyInvUploadModel.payeeReceiver) &&
          Objects.equals(this.payeeRegisterNo, alipayEbppInvoiceApplyInvUploadModel.payeeRegisterNo) &&
          Objects.equals(this.payerAddress, alipayEbppInvoiceApplyInvUploadModel.payerAddress) &&
          Objects.equals(this.payerBankAccountId, alipayEbppInvoiceApplyInvUploadModel.payerBankAccountId) &&
          Objects.equals(this.payerBankName, alipayEbppInvoiceApplyInvUploadModel.payerBankName) &&
          Objects.equals(this.payerEmail, alipayEbppInvoiceApplyInvUploadModel.payerEmail) &&
          Objects.equals(this.payerName, alipayEbppInvoiceApplyInvUploadModel.payerName) &&
          Objects.equals(this.payerPhone, alipayEbppInvoiceApplyInvUploadModel.payerPhone) &&
          Objects.equals(this.payerRegisterNo, alipayEbppInvoiceApplyInvUploadModel.payerRegisterNo) &&
          Objects.equals(this.platformCode, alipayEbppInvoiceApplyInvUploadModel.platformCode) &&
          Objects.equals(this.platformTid, alipayEbppInvoiceApplyInvUploadModel.platformTid) &&
          Objects.equals(this.platformUserId, alipayEbppInvoiceApplyInvUploadModel.platformUserId) &&
          Objects.equals(this.qrCode, alipayEbppInvoiceApplyInvUploadModel.qrCode) &&
          Objects.equals(this.receiveMobile, alipayEbppInvoiceApplyInvUploadModel.receiveMobile) &&
          Objects.equals(this.redNoticeNo, alipayEbppInvoiceApplyInvUploadModel.redNoticeNo) &&
          Objects.equals(this.serialNo, alipayEbppInvoiceApplyInvUploadModel.serialNo) &&
          Objects.equals(this.source, alipayEbppInvoiceApplyInvUploadModel.source) &&
          Objects.equals(this.specialFlag, alipayEbppInvoiceApplyInvUploadModel.specialFlag) &&
          Objects.equals(this.sumPrice, alipayEbppInvoiceApplyInvUploadModel.sumPrice) &&
          Objects.equals(this.sumTax, alipayEbppInvoiceApplyInvUploadModel.sumTax)&&
          Objects.equals(this.additionalProperties, alipayEbppInvoiceApplyInvUploadModel.additionalProperties);
    }
  
    @Override
    public int hashCode() {
      return Objects.hash(antiFakeCode, applyId, bizErrorCode, bizErrorMsg, businessType, checkCode, createResult, deviceNo, invoiceAmount, invoiceCode, invoiceDate, invoiceFileContent, invoiceFileType, invoiceItems, invoiceKind, invoiceMemo, invoiceNo, invoiceType, levyType, normalInvoiceCode, normalInvoiceNo, payeeAddress, payeeBankAccountId, payeeBankName, payeeChecker, payeeName, payeeOperator, payeePhone, payeeReceiver, payeeRegisterNo, payerAddress, payerBankAccountId, payerBankName, payerEmail, payerName, payerPhone, payerRegisterNo, platformCode, platformTid, platformUserId, qrCode, receiveMobile, redNoticeNo, serialNo, source, specialFlag, sumPrice, sumTax, additionalProperties);
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("class AlipayEbppInvoiceApplyInvUploadModel {\n");
      sb.append("    antiFakeCode: ").append(toIndentedString(antiFakeCode)).append("\n");
      sb.append("    applyId: ").append(toIndentedString(applyId)).append("\n");
      sb.append("    bizErrorCode: ").append(toIndentedString(bizErrorCode)).append("\n");
      sb.append("    bizErrorMsg: ").append(toIndentedString(bizErrorMsg)).append("\n");
      sb.append("    businessType: ").append(toIndentedString(businessType)).append("\n");
      sb.append("    checkCode: ").append(toIndentedString(checkCode)).append("\n");
      sb.append("    createResult: ").append(toIndentedString(createResult)).append("\n");
      sb.append("    deviceNo: ").append(toIndentedString(deviceNo)).append("\n");
      sb.append("    invoiceAmount: ").append(toIndentedString(invoiceAmount)).append("\n");
      sb.append("    invoiceCode: ").append(toIndentedString(invoiceCode)).append("\n");
      sb.append("    invoiceDate: ").append(toIndentedString(invoiceDate)).append("\n");
      sb.append("    invoiceFileContent: ").append(toIndentedString(invoiceFileContent)).append("\n");
      sb.append("    invoiceFileType: ").append(toIndentedString(invoiceFileType)).append("\n");
      sb.append("    invoiceItems: ").append(toIndentedString(invoiceItems)).append("\n");
      sb.append("    invoiceKind: ").append(toIndentedString(invoiceKind)).append("\n");
      sb.append("    invoiceMemo: ").append(toIndentedString(invoiceMemo)).append("\n");
      sb.append("    invoiceNo: ").append(toIndentedString(invoiceNo)).append("\n");
      sb.append("    invoiceType: ").append(toIndentedString(invoiceType)).append("\n");
      sb.append("    levyType: ").append(toIndentedString(levyType)).append("\n");
      sb.append("    normalInvoiceCode: ").append(toIndentedString(normalInvoiceCode)).append("\n");
      sb.append("    normalInvoiceNo: ").append(toIndentedString(normalInvoiceNo)).append("\n");
      sb.append("    payeeAddress: ").append(toIndentedString(payeeAddress)).append("\n");
      sb.append("    payeeBankAccountId: ").append(toIndentedString(payeeBankAccountId)).append("\n");
      sb.append("    payeeBankName: ").append(toIndentedString(payeeBankName)).append("\n");
      sb.append("    payeeChecker: ").append(toIndentedString(payeeChecker)).append("\n");
      sb.append("    payeeName: ").append(toIndentedString(payeeName)).append("\n");
      sb.append("    payeeOperator: ").append(toIndentedString(payeeOperator)).append("\n");
      sb.append("    payeePhone: ").append(toIndentedString(payeePhone)).append("\n");
      sb.append("    payeeReceiver: ").append(toIndentedString(payeeReceiver)).append("\n");
      sb.append("    payeeRegisterNo: ").append(toIndentedString(payeeRegisterNo)).append("\n");
      sb.append("    payerAddress: ").append(toIndentedString(payerAddress)).append("\n");
      sb.append("    payerBankAccountId: ").append(toIndentedString(payerBankAccountId)).append("\n");
      sb.append("    payerBankName: ").append(toIndentedString(payerBankName)).append("\n");
      sb.append("    payerEmail: ").append(toIndentedString(payerEmail)).append("\n");
      sb.append("    payerName: ").append(toIndentedString(payerName)).append("\n");
      sb.append("    payerPhone: ").append(toIndentedString(payerPhone)).append("\n");
      sb.append("    payerRegisterNo: ").append(toIndentedString(payerRegisterNo)).append("\n");
      sb.append("    platformCode: ").append(toIndentedString(platformCode)).append("\n");
      sb.append("    platformTid: ").append(toIndentedString(platformTid)).append("\n");
      sb.append("    platformUserId: ").append(toIndentedString(platformUserId)).append("\n");
      sb.append("    qrCode: ").append(toIndentedString(qrCode)).append("\n");
      sb.append("    receiveMobile: ").append(toIndentedString(receiveMobile)).append("\n");
      sb.append("    redNoticeNo: ").append(toIndentedString(redNoticeNo)).append("\n");
      sb.append("    serialNo: ").append(toIndentedString(serialNo)).append("\n");
      sb.append("    source: ").append(toIndentedString(source)).append("\n");
      sb.append("    specialFlag: ").append(toIndentedString(specialFlag)).append("\n");
      sb.append("    sumPrice: ").append(toIndentedString(sumPrice)).append("\n");
      sb.append("    sumTax: ").append(toIndentedString(sumTax)).append("\n");
      sb.append("    additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
      sb.append("}");
      return sb.toString();
    }
  
    /**
     * Convert the given object to string with each line indented by 4 spaces
     * (except the first line).
     */
    private String toIndentedString(Object o) {
      if (o == null) {
        return "null";
      }
      return o.toString().replace("\n", "\n    ");
    }
  
  
    public static HashSet<String> openapiFields;
    public static HashSet<String> openapiRequiredFields;
  
    static {
      // a set of all properties/fields (JSON key names)
      openapiFields = new HashSet<String>();
      openapiFields.add("anti_fake_code");
      openapiFields.add("apply_id");
      openapiFields.add("biz_error_code");
      openapiFields.add("biz_error_msg");
      openapiFields.add("business_type");
      openapiFields.add("check_code");
      openapiFields.add("create_result");
      openapiFields.add("device_no");
      openapiFields.add("invoice_amount");
      openapiFields.add("invoice_code");
      openapiFields.add("invoice_date");
      openapiFields.add("invoice_file_content");
      openapiFields.add("invoice_file_type");
      openapiFields.add("invoice_items");
      openapiFields.add("invoice_kind");
      openapiFields.add("invoice_memo");
      openapiFields.add("invoice_no");
      openapiFields.add("invoice_type");
      openapiFields.add("levy_type");
      openapiFields.add("normal_invoice_code");
      openapiFields.add("normal_invoice_no");
      openapiFields.add("payee_address");
      openapiFields.add("payee_bank_account_id");
      openapiFields.add("payee_bank_name");
      openapiFields.add("payee_checker");
      openapiFields.add("payee_name");
      openapiFields.add("payee_operator");
      openapiFields.add("payee_phone");
      openapiFields.add("payee_receiver");
      openapiFields.add("payee_register_no");
      openapiFields.add("payer_address");
      openapiFields.add("payer_bank_account_id");
      openapiFields.add("payer_bank_name");
      openapiFields.add("payer_email");
      openapiFields.add("payer_name");
      openapiFields.add("payer_phone");
      openapiFields.add("payer_register_no");
      openapiFields.add("platform_code");
      openapiFields.add("platform_tid");
      openapiFields.add("platform_user_id");
      openapiFields.add("qr_code");
      openapiFields.add("receive_mobile");
      openapiFields.add("red_notice_no");
      openapiFields.add("serial_no");
      openapiFields.add("source");
      openapiFields.add("special_flag");
      openapiFields.add("sum_price");
      openapiFields.add("sum_tax");
  
      // a set of required properties/fields (JSON key names)
      openapiRequiredFields = new HashSet<String>();
    }
  
   /**
    * Validates the JSON Object and throws an exception if issues found
    *
    * @param jsonObj JSON Object
    * @throws IOException if the JSON Object is invalid with respect to AlipayEbppInvoiceApplyInvUploadModel
    */
    public static void validateJsonObject(JsonObject jsonObj) throws IOException {
        if (jsonObj == null) {
          if (AlipayEbppInvoiceApplyInvUploadModel.openapiRequiredFields.isEmpty()) {
            return;
          } else { // has required fields
            throw new IllegalArgumentException(String.format("The required field(s) %s in AlipayEbppInvoiceApplyInvUploadModel is not found in the empty JSON string", AlipayEbppInvoiceApplyInvUploadModel.openapiRequiredFields.toString()));
          }
        }
        if (jsonObj.get("anti_fake_code") != null && !jsonObj.get("anti_fake_code").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `anti_fake_code` to be a primitive type in the JSON string but got `%s`", jsonObj.get("anti_fake_code").toString()));
        }
        if (jsonObj.get("apply_id") != null && !jsonObj.get("apply_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `apply_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("apply_id").toString()));
        }
        if (jsonObj.get("biz_error_code") != null && !jsonObj.get("biz_error_code").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `biz_error_code` to be a primitive type in the JSON string but got `%s`", jsonObj.get("biz_error_code").toString()));
        }
        if (jsonObj.get("biz_error_msg") != null && !jsonObj.get("biz_error_msg").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `biz_error_msg` to be a primitive type in the JSON string but got `%s`", jsonObj.get("biz_error_msg").toString()));
        }
        if (jsonObj.get("check_code") != null && !jsonObj.get("check_code").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `check_code` to be a primitive type in the JSON string but got `%s`", jsonObj.get("check_code").toString()));
        }
        if (jsonObj.get("create_result") != null && !jsonObj.get("create_result").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `create_result` to be a primitive type in the JSON string but got `%s`", jsonObj.get("create_result").toString()));
        }
        if (jsonObj.get("device_no") != null && !jsonObj.get("device_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `device_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("device_no").toString()));
        }
        if (jsonObj.get("invoice_amount") != null && !jsonObj.get("invoice_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `invoice_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("invoice_amount").toString()));
        }
        if (jsonObj.get("invoice_code") != null && !jsonObj.get("invoice_code").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `invoice_code` to be a primitive type in the JSON string but got `%s`", jsonObj.get("invoice_code").toString()));
        }
        if (jsonObj.get("invoice_date") != null && !jsonObj.get("invoice_date").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `invoice_date` to be a primitive type in the JSON string but got `%s`", jsonObj.get("invoice_date").toString()));
        }
        if (jsonObj.get("invoice_file_content") != null && !jsonObj.get("invoice_file_content").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `invoice_file_content` to be a primitive type in the JSON string but got `%s`", jsonObj.get("invoice_file_content").toString()));
        }
        if (jsonObj.get("invoice_file_type") != null && !jsonObj.get("invoice_file_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `invoice_file_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("invoice_file_type").toString()));
        }
        // validate the optional field `invoice_items`
        if (jsonObj.getAsJsonObject("invoice_items") != null) {
          InvoiceItem.validateJsonObject(jsonObj.getAsJsonObject("invoice_items"));
        }
        if (jsonObj.get("invoice_memo") != null && !jsonObj.get("invoice_memo").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `invoice_memo` to be a primitive type in the JSON string but got `%s`", jsonObj.get("invoice_memo").toString()));
        }
        if (jsonObj.get("invoice_no") != null && !jsonObj.get("invoice_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `invoice_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("invoice_no").toString()));
        }
        if (jsonObj.get("invoice_type") != null && !jsonObj.get("invoice_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `invoice_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("invoice_type").toString()));
        }
        if (jsonObj.get("levy_type") != null && !jsonObj.get("levy_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `levy_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("levy_type").toString()));
        }
        if (jsonObj.get("normal_invoice_code") != null && !jsonObj.get("normal_invoice_code").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `normal_invoice_code` to be a primitive type in the JSON string but got `%s`", jsonObj.get("normal_invoice_code").toString()));
        }
        if (jsonObj.get("normal_invoice_no") != null && !jsonObj.get("normal_invoice_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `normal_invoice_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("normal_invoice_no").toString()));
        }
        if (jsonObj.get("payee_address") != null && !jsonObj.get("payee_address").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payee_address` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payee_address").toString()));
        }
        if (jsonObj.get("payee_bank_account_id") != null && !jsonObj.get("payee_bank_account_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payee_bank_account_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payee_bank_account_id").toString()));
        }
        if (jsonObj.get("payee_bank_name") != null && !jsonObj.get("payee_bank_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payee_bank_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payee_bank_name").toString()));
        }
        if (jsonObj.get("payee_checker") != null && !jsonObj.get("payee_checker").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payee_checker` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payee_checker").toString()));
        }
        if (jsonObj.get("payee_name") != null && !jsonObj.get("payee_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payee_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payee_name").toString()));
        }
        if (jsonObj.get("payee_operator") != null && !jsonObj.get("payee_operator").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payee_operator` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payee_operator").toString()));
        }
        if (jsonObj.get("payee_phone") != null && !jsonObj.get("payee_phone").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payee_phone` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payee_phone").toString()));
        }
        if (jsonObj.get("payee_receiver") != null && !jsonObj.get("payee_receiver").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payee_receiver` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payee_receiver").toString()));
        }
        if (jsonObj.get("payee_register_no") != null && !jsonObj.get("payee_register_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payee_register_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payee_register_no").toString()));
        }
        if (jsonObj.get("payer_address") != null && !jsonObj.get("payer_address").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payer_address` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payer_address").toString()));
        }
        if (jsonObj.get("payer_bank_account_id") != null && !jsonObj.get("payer_bank_account_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payer_bank_account_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payer_bank_account_id").toString()));
        }
        if (jsonObj.get("payer_bank_name") != null && !jsonObj.get("payer_bank_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payer_bank_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payer_bank_name").toString()));
        }
        if (jsonObj.get("payer_email") != null && !jsonObj.get("payer_email").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payer_email` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payer_email").toString()));
        }
        if (jsonObj.get("payer_name") != null && !jsonObj.get("payer_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payer_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payer_name").toString()));
        }
        if (jsonObj.get("payer_phone") != null && !jsonObj.get("payer_phone").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payer_phone` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payer_phone").toString()));
        }
        if (jsonObj.get("payer_register_no") != null && !jsonObj.get("payer_register_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `payer_register_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("payer_register_no").toString()));
        }
        if (jsonObj.get("platform_code") != null && !jsonObj.get("platform_code").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `platform_code` to be a primitive type in the JSON string but got `%s`", jsonObj.get("platform_code").toString()));
        }
        if (jsonObj.get("platform_tid") != null && !jsonObj.get("platform_tid").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `platform_tid` to be a primitive type in the JSON string but got `%s`", jsonObj.get("platform_tid").toString()));
        }
        if (jsonObj.get("platform_user_id") != null && !jsonObj.get("platform_user_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `platform_user_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("platform_user_id").toString()));
        }
        if (jsonObj.get("qr_code") != null && !jsonObj.get("qr_code").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `qr_code` to be a primitive type in the JSON string but got `%s`", jsonObj.get("qr_code").toString()));
        }
        if (jsonObj.get("receive_mobile") != null && !jsonObj.get("receive_mobile").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `receive_mobile` to be a primitive type in the JSON string but got `%s`", jsonObj.get("receive_mobile").toString()));
        }
        if (jsonObj.get("red_notice_no") != null && !jsonObj.get("red_notice_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `red_notice_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("red_notice_no").toString()));
        }
        if (jsonObj.get("serial_no") != null && !jsonObj.get("serial_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `serial_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("serial_no").toString()));
        }
        if (jsonObj.get("source") != null && !jsonObj.get("source").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `source` to be a primitive type in the JSON string but got `%s`", jsonObj.get("source").toString()));
        }
        if (jsonObj.get("special_flag") != null && !jsonObj.get("special_flag").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `special_flag` to be a primitive type in the JSON string but got `%s`", jsonObj.get("special_flag").toString()));
        }
        if (jsonObj.get("sum_price") != null && !jsonObj.get("sum_price").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `sum_price` to be a primitive type in the JSON string but got `%s`", jsonObj.get("sum_price").toString()));
        }
        if (jsonObj.get("sum_tax") != null && !jsonObj.get("sum_tax").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `sum_tax` to be a primitive type in the JSON string but got `%s`", jsonObj.get("sum_tax").toString()));
        }
    }
  
    public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
      @SuppressWarnings("unchecked")
      @Override
      public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
         if (!AlipayEbppInvoiceApplyInvUploadModel.class.isAssignableFrom(type.getRawType())) {
           return null; // this class only serializes 'AlipayEbppInvoiceApplyInvUploadModel' and its subtypes
         }
         final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
         final TypeAdapter<AlipayEbppInvoiceApplyInvUploadModel> thisAdapter
                          = gson.getDelegateAdapter(this, TypeToken.get(AlipayEbppInvoiceApplyInvUploadModel.class));
  
         return (TypeAdapter<T>) new TypeAdapter<AlipayEbppInvoiceApplyInvUploadModel>() {
             @Override
             public void write(JsonWriter out, AlipayEbppInvoiceApplyInvUploadModel value) throws IOException {
               JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject();
               obj.remove("additionalProperties");
               // serialize additonal properties
               if (value.getAdditionalProperties() != null) {
                 for (Map.Entry<String, Object> entry : value.getAdditionalProperties().entrySet()) {
                   if (entry.getValue() instanceof String)
                     obj.addProperty(entry.getKey(), (String) entry.getValue());
                   else if (entry.getValue() instanceof Number)
                     obj.addProperty(entry.getKey(), (Number) entry.getValue());
                   else if (entry.getValue() instanceof Boolean)
                     obj.addProperty(entry.getKey(), (Boolean) entry.getValue());
                   else if (entry.getValue() instanceof Character)
                     obj.addProperty(entry.getKey(), (Character) entry.getValue());
                   else {
                     obj.add(entry.getKey(), gson.toJsonTree(entry.getValue()).getAsJsonObject());
                   }
                 }
               }
               elementAdapter.write(out, obj);
             }
  
             @Override
             public AlipayEbppInvoiceApplyInvUploadModel read(JsonReader in) throws IOException {
               JsonObject jsonObj = elementAdapter.read(in).getAsJsonObject();
               validateJsonObject(jsonObj);
               // store additional fields in the deserialized instance
               AlipayEbppInvoiceApplyInvUploadModel instance = thisAdapter.fromJsonTree(jsonObj);
               for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet()) {
                 if (!openapiFields.contains(entry.getKey())) {
                   if (entry.getValue().isJsonPrimitive()) { // primitive type
                     if (entry.getValue().getAsJsonPrimitive().isString())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsString());
                     else if (entry.getValue().getAsJsonPrimitive().isNumber())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsNumber());
                     else if (entry.getValue().getAsJsonPrimitive().isBoolean())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsBoolean());
                     else
                       throw new IllegalArgumentException(String.format("The field `%s` has unknown primitive type. Value: %s", entry.getKey(), entry.getValue().toString()));
                   } else { // non-primitive type
                     instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), HashMap.class));
                   }
                 }
               }
               return instance;
             }
  
         }.nullSafe();
      }
    }
  
   /**
    * Create an instance of AlipayEbppInvoiceApplyInvUploadModel given an JSON string
    *
    * @param jsonString JSON string
    * @return An instance of AlipayEbppInvoiceApplyInvUploadModel
    * @throws IOException if the JSON string is invalid with respect to AlipayEbppInvoiceApplyInvUploadModel
    */
    public static AlipayEbppInvoiceApplyInvUploadModel fromJson(String jsonString) throws IOException {
      return JSON.getGson().fromJson(jsonString, AlipayEbppInvoiceApplyInvUploadModel.class);
    }
  
   /**
    * Convert an instance of AlipayEbppInvoiceApplyInvUploadModel to an JSON string
    *
    * @return JSON string
    */
    public String toJson() {
      return JSON.getGson().toJson(this);
    }
  }
  
  