package com.jianshui.invoice.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jianshui.common.annotation.Excel;
import com.jianshui.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 开票信息对象 bill_info
 *
 * @author Gong Quanlin
 * @date 2022-03-27
 */
@Data
public class BillInfoDTO
{

    /** 本系统订单号 */
    @Excel(name = "本系统订单号")
    private String systemOrderno;

    /** 客户系统订单号 */
    @Excel(name = "客户系统订单号")
    private String outTradeOrderno;

    /** 流水号 */
    @Excel(name = "流水号")
    private String fpqqlsh;

    /** 发票种类 */
    @Excel(name = "发票种类")
    private String invoiceType;

    /** 购方名称 */
    @Excel(name = "购方名称")
    private String buyerName;

    /** 购方税号 */
    @Excel(name = "购方税号")
    private String buyerTaxnum;

    /** 购方地址 */
    @Excel(name = "购方地址")
    private String buyerAddress;

    /** 购方电话 */
    @Excel(name = "购方电话")
    private String buyerTelephone;

    /** 购货方开户行名称 */
    @Excel(name = "购货方开户行名称")
    private String buyerBank;

    /** 购方开户行及账户 */
    @Excel(name = "购方开户行及账户")
    private String buyerAccount;

    /** 购方邮箱 */
    @Excel(name = "购方邮箱")
    private String buyerEmail;

    /** 购方联系电话 */
    @Excel(name = "购方联系电话")
    private String buyerPhone;

    /** 销方名称 */
    @Excel(name = "销方名称")
    private String sellerName;

    /** 销方税号 */
    @Excel(name = "销方税号")
    private String sellerTaxnum;

    /** 销方地址 */
    @Excel(name = "销方地址")
    private String sellerAddress;

    /** 销方电话 */
    @Excel(name = "销方电话")
    private String sellerTelephone;

    /** 销方开户行及账户 */
    @Excel(name = "销方开户行及账户")
    private String sellerAccount;

    /** 备注 */
    @Excel(name = "备注")
    private String message;

    /** 销方开户行名称 */
    @Excel(name = "销方开户行名称")
    private String sellerBank;

    /** 开票人 */
    @Excel(name = "开票人")
    private String clerk;

    /** 收款人 */
    @Excel(name = "收款人")
    private String payee;

    /** 复核人 */
    @Excel(name = "复核人")
    private String checker;

    /** 红字信息表编号 */
    @Excel(name = "红字信息表编号")
    private String redInvoiceInfoCode;

    /** 开票分机号 */
    @Excel(name = "开票分机号")
    private String fjh;

    /** 开票终端号 */
    @Excel(name = "开票终端号")
    private String terminalNumber;

    /** 开票类型 */
    @Excel(name = "开票类型：1正票 2红票")
    private String kptype;

    /** 原billInfo订单号 */
    @Excel(name = "原billInfo订单号")
    private String originSystemOrderno;

    /** 编码表编号 */
    @Excel(name = "编码表编号")
    private String bmbbh;

    /** 原发票代码 */
    @Excel(name = "原发票代码")
    private String originFpdm;

    /** 原发票号码 */
    @Excel(name = "原发票号码")
    private String originFphm;



    /** 推送方式 */
    @Excel(name = "推送方式")
    private String tsfs;

    /** 清单标志 */
    @Excel(name = "清单标志")
    private String qdbz;

    /** 清单项目名称 */
    @Excel(name = "清单项目名称")
    private String qdxmmc;

    /** 代开标志 */
    @Excel(name = "代开标志")
    private String dkbz;

    /** 成品油标志 */
    @Excel(name = "成品油标志")
    private String cpybz;

    /** 开票状态 */
    @Excel(name = "开票状态")
    private Integer state;

    /** 订单来源 */
    @Excel(name = "订单来源")
    private String source;

    /** 服务公司 */
    @Excel(name = "服务公司")
    private String serviceSupplierKey;

    /** 单据类型 */
    @Excel(name = "单据类型")
    private String billType;

    /** 业务留存字段 */
    @Excel(name = "业务留存字段")
    private String businessRemark;

    /** 不含税金额 */
    @Excel(name = "不含税金额")
    private BigDecimal taxfreeamt;

    /** 开票时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "开票时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date invoicedTime;

    /** 税额 */
    @Excel(name = "税额")
    private BigDecimal tax;

    /** 含税金额 */
    @Excel(name = "含税金额")
    private BigDecimal taxamt;

    /** 删除标志 */
    private Date deletedTime;

    /** 发票明细信息 */
    @TableField(exist = false)
    private List<BillDetail> billDetailList;

    @TableField(exist = false)
    private String searchValue;

    @TableField(exist = false)
    private String remark;

    @TableField(exist = false)
    private Map<String, Object> params;

    /** 回调地址 */
    @Excel(name = "回调地址")
    private String callbackUrl;

    /** 经办人姓名 */
    private String jbrxm;
    /** 经办人证件号码 */
    private String jbrzjhm;
    /** 经办人证件种类代码 */
    private String jbrzjzldm;
    /** 经办人纳税人识别号 */
    private String jrznsrsbh;
    /** 价税合计 */
    private String jshj;
    /** 特定要素类型代码 */
    private String tdyslxdm;
    /** tdywxx字段 */
    private String tdywxx;
    /** ext字段 */
    private String ext;

    /** 全电新增字段  **/
    private String async;

    // TODO: 2023/3/30 后期看看需不需要这部分存库
    @TableField(exist=false)
    @ApiModelProperty(value = "办税人身份证号")
    private String bsrysfzjhm;


    @TableField(exist=false)
    @ApiModelProperty(value = "*地区编码(参考码表)")
    private String dqbm;

    @TableField(exist=false)
    @ApiModelProperty(value = "lzfpkj")
    private String serviceId;

    @TableField(exist=false)
    @ApiModelProperty(value = "放弃享受减按1%征收率原因")
    private String kjlx;

    @TableField(exist=false)
    @ApiModelProperty(value = "出行人")
    private String cxr;

    @TableField(exist=false)
    @ApiModelProperty(value = "出行人证件类型")
    private String cxrzjlx;

    @TableField(exist=false)
    @ApiModelProperty(value = "出行人证件号码")
    private String cxrzjhm;

    @TableField(exist=false)
    @ApiModelProperty(value = "出行日期")
    private String cxrq;

    @TableField(exist=false)
    @ApiModelProperty(value = "出发地")
    private String cfd;

    @TableField(exist=false)
    @ApiModelProperty(value = "到达地")
    private String ddd;

    @TableField(exist=false)
    @ApiModelProperty(value = "交通工具类型")
    private String jtgjlx;

    @TableField(exist=false)
    @ApiModelProperty(value = "等级")
    private String dengj;

    @TableField(exist=false)
    @ApiModelProperty(value = "货物运输服务")
    private String hwysfw;

    @TableField(exist=false)
    @ApiModelProperty(value = "起运地")
    private String qyd;

    @TableField(exist=false)
    @ApiModelProperty(value = "运输工具号牌")
    private String ysgjhp;

    @TableField(exist=false)
    @ApiModelProperty(value = "运输工具种类")
    private String ysgjzl;

    @TableField(exist=false)
    @ApiModelProperty(value = "运输货物名称")
    private String yshwmc;

    @TableField(exist=false)
    @ApiModelProperty(value = "含税标志 1-不含税 2-含税")
    private String hsbz;

    @TableField(exist=false)
    @ApiModelProperty(value = "放弃享受减按1%征收率原因")
    private String kjly;

    @TableField(exist=false)
    @ApiModelProperty(value = "附加信息名称")
    private String fjxxmc;

    @TableField(exist=false)
    @ApiModelProperty(value = "附加信息内容")
    private String fjxxnr;




}
