package cn.superdesk.uniorder.dto.vo.invoice.customer;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @Description: 发票单管理页面
 * ref 积分结算2.1 - 发票申请管理
 * ref 积分结算2.1 - 发票管理
 * ref 客户结算 - 发票申请管理
 * ref 客户结算 - 发票管理
 * @Author: linjinyu
 * @CreateDate: 7/30/20 5:52 PM
 * @UpdateUser: linjinyu
 * @UpdateDate: 7/30/20 5:52 PM
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@Data
public class InvoiceApplyCustomerPageVo implements Serializable {

    private static final long serialVersionUID = 1L;


    @ApiModelProperty("对账单类型 1-一般;2-积分;")
    private Integer accountingOrderType;
    @ApiModelProperty("对账单 创建维度:0-订单;1-商品;2-流水;")
    private Integer dimCreateBy;
    @ApiModelProperty("对账单Id-积分结算2.1 后")
    private Long    accountingOrderId;
    @ApiModelProperty("对账单编号-积分结算2.1 后")
    private String  accountingOrderSn;

    @ApiModelProperty("对账单-申请状态")
    private Integer accountingOrderInvoiceStatus;
    @ApiModelProperty("对账单-申请状态")
    private String  accountingOrderInvoiceStatusName;

    @ApiModelProperty("对账单编号-积分结算2.1 不适用 group_concat(DISTINCT aucu.id) AS accounting_order_ids_str 对账单Id 标记 TODO 可能不能共用字段")
    private String accountingOrderIdsStr;
//	@ApiModelProperty("对账单Sn 标记 TODO 可能不能共用字段")
//	private String accountingOrderSn;

    /****************************************** mark by linjinyu at 20210105 start ******************************************/

    // https://docs.qq.com/sheet/DUlpFQmVQWUJ0ZWtv?tab=BB08J2
    //	1、列表添加:对账单编号字段
    //<!-- group_concat(DISTINCT aucu.accounting_order_sn) AS accounting_order_sns_str -->
    //<result column="accounting_order_sns_str" jdbcType="VARCHAR" property="accountingOrderSnsStr"/>
    @ApiModelProperty("对账单编号-积分结算2.1 不适用 group_concat(DISTINCT aucu.accounting_order_sn) AS accounting_order_sns_str" +
            "早前的逻辑是一个开票申请还能多个对账单,存在这样的老数据,但逻辑已经废除,文档参考:https://docs.qq.com/sheet/DUlpFQmVQWUJ0ZWtv?tab=BB08J2")
    private String accountingOrderSnsStr;


    /****************************************** mark by linjinyu at 20210105   end ******************************************/

    @ApiModelProperty("invoice_apply.id invoiceApplyId")
    private Long   id;
    @ApiModelProperty("invoice_apply.invoice_apply_sn invoiceApplySn 发票申请部分-开票申请编号 // 修改标记 20211201")
    private String invoiceApplySn;


    @ApiModelProperty("发票登记部分-填写税局发票号-新逻辑大概只是记录,逻辑上不用这个")
    private String invoiceNumber;
    @ApiModelProperty("发票种类Id")
    private Long   invoiceType;
    @ApiModelProperty("发票种类名称-程序填充")
    private String invoiceTypeName;
    @ApiModelProperty("开票方式代码")
    private String invoiceMode;
    @ApiModelProperty("开票方式名称-程序填充")
    private String invoiceModeName;

    @ApiModelProperty("发票税率 外键 表.invoice_tax_rate.id(要查证)")
    private String taxRate;

    @Deprecated
    @ApiModelProperty("发票抬头 之前名称 invoiceCompanyName - 弃用 - 代之为 sysEnterpriseExtInvoiceId sys_enterprise_ext_invoice.id")
    private String invoiceTitle;
    @ApiModelProperty("企业信息扩展发票信息.id sysEnterpriseExtInvoiceId")
    private Long   sysEnterpriseExtInvoiceId;
    @ApiModelProperty("企业信息扩展发票信息快照 JSON 字符串")
    private String sysEnterpriseExtInvoiceSnapshot;

    /****************************************** 发票申请部分 start ******************************************/

    @ApiModelProperty("发票申请部分(超级前台(适用)|侨城汇(适用))-发票申请人Id-后台帐号")
    private Long   applyUserId;
    @ApiModelProperty("发票申请部分(超级前台(适用)|侨城汇(适用))-发票申请人名称-后台帐号")
    private String applyUserName;
    @ApiModelProperty("发票申请部分(超级前台(适用)|侨城汇(适用))-发票申请时间")
    private Date   applyTime;
    @ApiModelProperty("发票申请部分(超级前台(适用)|侨城汇(适用))-发票申请时间")
    private String applyTimeFormat;

    /****************************************** 发票申请审核部分 start ******************************************/

    @ApiModelProperty("发票申请审核部分(超级前台(适用)|侨城汇(弃用))-审核人Id-后台帐号")
    private Long    auditUserId;
    @ApiModelProperty("发票申请审核部分(超级前台(适用)|侨城汇(弃用))-审核人名称-后台帐号")
    private String  auditUserName;
    @ApiModelProperty("发票申请审核部分(超级前台(适用)|侨城汇(弃用))-审核时间")
    private Date    auditTime;
    @ApiModelProperty("发票申请审核部分(超级前台(适用)|侨城汇(弃用))-审核时间")
    private String  auditTimeFormat;
    @ApiModelProperty("发票申请审核部分(超级前台(适用)|侨城汇(弃用))-审核状态 1-未审核;2-已同意;3-已拒绝;")
    private Integer auditStatus;
    @ApiModelProperty("发票申请审核部分(超级前台(适用)|侨城汇(弃用))-审核状态 1-未审核;2-已同意;3-已拒绝;数据库没记录,通过程序定义的附加产生")
    private String  auditStatusName;

    /****************************************** 开票进展部分 start ******************************************/

    @ApiModelProperty("开票进展部分(超级前台(适用)|侨城汇(适用))-开票进展状态:0-待开票(原:未邮寄);1-已邮寄(弃用);2-已作废;10-开票中;11-已开票;原来的定义:发票状态 0未邮寄 1已邮寄 2已作废")
    private Integer invoiceStatus;
    @ApiModelProperty("开票进展部分(超级前台(适用)|侨城汇(适用))-开票进展状态:0-待开票(原:未邮寄);1-已邮寄(弃用);2-已作废;10-开票中;11-已开票;原来的定义:发票状态 0未邮寄 1已邮寄 2已作废")
    private String  invoiceProgressingStatusName;
    @ApiModelProperty("开票进展部分(超级前台(适用)|侨城汇(适用))-最后更新人-sysUserId")
    private Long    invoiceProgressingUserId;
    @ApiModelProperty("开票进展部分(超级前台(适用)|侨城汇(适用))-最后更新人-sysUserId")
    private String  invoiceProgressingUserName;
    @ApiModelProperty("开票进展部分(超级前台(适用)|侨城汇(适用))-最后更新时间")
    private Date    invoiceProgressingTime;
    @ApiModelProperty("开票进展部分(超级前台(适用)|侨城汇(适用))-最后更新时间")
    private String  invoiceProgressingTimeFormat;

    /****************************************** 开票登记部分 start ******************************************/

    @ApiModelProperty("开票登记部分(超级前台(适用)|侨城汇(积分结算2.1 已适配))-开票登记人Id-后台帐号")
    private Long    makeInvoiceUserId;
    @ApiModelProperty("开票登记部分(超级前台(适用)|侨城汇(积分结算2.1 已适配))-开票登记人名称-后台帐号")
    private String  makeInvoiceUserName;
    @ApiModelProperty("开票登记部分(超级前台(适用)|侨城汇(积分结算2.1 已适配))-开票时间")
    private Date    makeInvoiceTime;
    @ApiModelProperty("开票登记部分(超级前台(适用)|侨城汇(积分结算2.1 已适配))-开票时间")
    private String  makeInvoiceTimeFormat;
    @ApiModelProperty("开票登记部分(超级前台(适用)|侨城汇(积分结算2.1 已适配))-开票状态 0-未开票;1-已开票;2-重新开票;")
    private Integer makeInvoiceStatus;
    @ApiModelProperty("开票登记部分(超级前台(适用)|侨城汇(积分结算2.1 已适配))-开票状态 0-未开票;1-已开票;2-重新开票;数据库没记录,通过程序定义的附加产生")
    private String  makeInvoiceStatusName;

    /****************************************** 运营领票部分 start ******************************************/

    @ApiModelProperty("运营领票部分(超级前台(不适用)|侨城汇(专用))-领票状态:0-未领票;1-已领票;")
    private Integer receiveInvoiceStatus;
    @ApiModelProperty("运营领票部分(超级前台(不适用)|侨城汇(专用))-领票状态:0-未领票;1-已领票;")
    private String  receiveInvoiceStatusName;
    @ApiModelProperty("运营领票部分(超级前台(不适用)|侨城汇(专用))-最后更新人-sysUserId")
    private Long    receiveInvoiceUserId;
    @ApiModelProperty("运营领票部分(超级前台(不适用)|侨城汇(专用))-最后更新人-sysUserId")
    private String  receiveInvoiceUserName;
    @ApiModelProperty("运营领票部分(超级前台(不适用)|侨城汇(专用))-最后更新时间")
    private Date    receiveInvoiceTime;
    @ApiModelProperty("运营领票部分(超级前台(不适用)|侨城汇(专用))-最后更新时间")
    private String  receiveInvoiceTimeFormat;

    /****************************************** 寄票登记部分 start ******************************************/

    @ApiModelProperty("寄票登记部分(超级前台(适用)|侨城汇(适用))-寄票登记人Id-后台帐号")
    private Long    mailTickUserId;
    @ApiModelProperty("寄票登记部分(超级前台(适用)|侨城汇(适用))-寄票登记人名称-后台帐号")
    private String  mailTickUserName;
    @ApiModelProperty("寄票登记部分(超级前台(适用)|侨城汇(适用))-寄票时间")
    private Date    mailTickTime;
    @ApiModelProperty("寄票登记部分(超级前台(适用)|侨城汇(适用))-寄票时间")
    private String  mailTickTimeFormat;
    @ApiModelProperty("寄票登记部分(超级前台(适用)|侨城汇(适用))-寄票状态:0-未寄票;1-已寄票;")
    private Integer mailTickStatus;
    @ApiModelProperty("寄票登记部分(超级前台(适用)|侨城汇(适用))-寄票状态:0-未寄票;1-已寄票;数据库没记录,通过程序定义的附加产生")
    private String  mailTickStatusName;

    @ApiModelProperty("寄票登记部分(超级前台(适用)|侨城汇(适用))-快递公司Id")
    private Long   expressCompanyId;
    @ApiModelProperty("寄票登记部分(超级前台(适用)|侨城汇(适用))-快递公司名称")
    private String expressCompanyName;
    @ApiModelProperty("寄票登记部分(超级前台(适用)|侨城汇(适用))-快递单号")
    private String expressNo;

    /****************************************** 回款登记部分 start ******************************************/

    @ApiModelProperty("回款登记部分(超级前台(适用)|侨城汇(适用))-回款状态:0-未回款;1-部分回款;2全部回款;")
    private Integer backAccountStatus;
    @ApiModelProperty("回款登记部分(超级前台(适用)|侨城汇(适用))-回款状态:0-未回款;1-部分回款;2全部回款;数据库没记录,通过程序定义的附加产生")
    private String  backAccountStatusName;
    @ApiModelProperty("回款登记部分(超级前台(适用)|侨城汇(适用))-回款登记方式记录:0-初始;10-手动;11-流水;")
    private Integer backAccountModeRecord;
    @ApiModelProperty("回款登记部分(超级前台(适用)|侨城汇(适用))-最后更新人-sysUserId")
    private Long    backAccountUserId;
    @ApiModelProperty("回款登记部分(超级前台(适用)|侨城汇(适用))-最后更新人-sysUserId")
    private String  backAccountUserName;
    @ApiModelProperty("回款登记部分(超级前台(适用)|侨城汇(适用))-最后更新时间")
    private Date    backAccountTime;
    @ApiModelProperty("回款登记部分(超级前台(适用)|侨城汇(适用))-最后更新时间")
    private String  backAccountTimeFormat;

    @ApiModelProperty("开票备注")
    private String remark;
    @ApiModelProperty("后台操作人员备注")
    private String remark2;


    private Integer needReviseMark;

    @ApiModelProperty(value = "绑定附件 upload_files.uid")
    private String attachmentUploadFilesUids;


    /****************************************** 差异点 start ******************************************/

    @Deprecated
    @ApiModelProperty("订单类型-订单来源渠道-弃用-mark by linjinyu at 20220516")
    private Integer serviceId;


    /**************************************** mark by linjinyu at 20220516 v2.3 start ****************************************/

    @ApiModelProperty("订单类型-订单来源-引用enum CommonServiceNoEnum")
    private String serviceNo;
    @ApiModelProperty("订单类型-订单来源-引用enum CommonServiceNoEnum")
    private String serviceNoName;

    @ApiModelProperty("操作来源-引用enum CommonSourceFromEnum")
    private String sourceFrom;
    @ApiModelProperty("操作来源-引用enum CommonSourceFromEnum")
    private String sourceFromName;

    /**************************************** mark by linjinyu at 20220516 v2.3   end ****************************************/


    @ApiModelProperty("统一订单 项目ID")
    private Long sysOrgId;
    @ApiModelProperty("统一订单 企业ID")
    private Long sysVirtId;
    @ApiModelProperty("外部系统 项目ID 一般是指 服务之窗 或 企业福利")
    private Long outOrgId;
    @ApiModelProperty("外部系统 企业ID 一般是指 服务之窗 或 企业福利")
    private Long outVirtId;
    /****************************************** 差异点   end ******************************************/


    /****************************************** 差异点 start ******************************************/

    @ApiModelProperty(value = "统计类-对账单数量-未应用")
    private Integer accountingOrderQuantity;
    // 202202302 规范
    @ApiModelProperty("统计类-订单数量 名称 unifiedOrderCountQuantity 改成 orderQuantity")
    private Integer orderQuantity;
    @ApiModelProperty(value = "统计类-订单商品item数量累加")
    private Integer goodsQuantity;
    @ApiModelProperty(value = "统计类-订单商品item的数量累加")
    private Integer goodsItemQuantity;
    @ApiModelProperty("统计类-订单数(订单流水数量) 20220303-产品要求名为: 订单数:取该开票申请明细所有流水的总条数")
    private Integer creditQuantity;

    @ApiModelProperty(value = "创建开票申请时产生-统计类-")
    private BigDecimal orderAmount;
    @ApiModelProperty(value = "创建开票申请时产生-统计类-")
    private BigDecimal orderCostAmount;
    @ApiModelProperty(value = "创建开票申请时产生-统计类-商品销售金额(统一订单)")
    private BigDecimal goodsAmount;
    @ApiModelProperty(value = "创建开票申请时产生-统计类-商品成本金额(统一订单)")
    private BigDecimal goodsCostAmount;


    /****************************************** 差异点   end ******************************************/

    //	@NonNull("开票申请金额")
    @ApiModelProperty("订单金额(开票申请金额): #公式= ∑(销售单价*商品数量)#-新添加 20210712-产品要求名为: 账单金额 20220303-产品要求名为: 订单金额")
    private BigDecimal invoiceApplyAmount;
    //	@NonNull("减免金额")
    @ApiModelProperty("减免金额")
    private BigDecimal freeAmount;
    @ApiModelProperty("微信金额-积分结算2.1-add")
    private BigDecimal unAccountingAmount;
    //	@NonNull("实际金额")
    @ApiModelProperty("开票申请金额(实际金额) 公式 积分结算2.1 (订单金额-减免金额-微信金额=开票申请金额) 20220303-产品要求名为: 开票申请金额")
    private BigDecimal realAmount;

    /****************************************** 回款部分 start ******************************************/
    //	// inva.real_amount as back_money,
//	private BigDecimal backMoney;
    // inva.no_check_count as no_back_money,
    @ApiModelProperty("未回款金额?待查证-要干掉-积分结算2.1-不适用")
    private BigDecimal noBackMoney;
    @ApiModelProperty("最近回款时候?待查证-要干掉-积分结算2.1-不适用")
    private Date       maxBackTime;

    @ApiModelProperty("企业名称-要干掉-积分结算2.1-不适用")
    private String outVirtNamesStr;

    @ApiModelProperty("企业名称")
    private String outVirtName;

    @ApiModelProperty(value = "最近更新时间")
    private Date   updateTime;
    @ApiModelProperty(value = "最近更新时间")
    private String updateTimeFormat;
    @ApiModelProperty(value = "操作人 sysUserId")
    private Long   updateUserId;
    @ApiModelProperty(value = "操作人 sysUserName")
    private String updateUserName;


}
