package com.ruoyi.system.domain;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.Date;

/**
 * 订单电子发票 pos_order_invoice（与 pos_order 1:1）。
 *
 * <p>记录一笔订单的 ezPay 电子发票：类型/买方/载具/发票号/状态/金额等。
 * 一笔订单至多一行当前发票（uk_order_id）；作废后状态置 3，允许重开（同行覆盖）。
 *
 * @author ruoyi
 * @date 2026-06-16
 */
@Data
@TableName(value = "pos_order_invoice")
public class PosOrderInvoice {

    private static final long serialVersionUID = 1L;

    /** 主键 */
    @TableId(type = IdType.AUTO)
    private Long id;

    /** 关联 pos_order.id */
    private Long orderId;

    /** 冗余 pos_order.dd_id（订单号，便于排查） */
    private String orderNo;

    /** 冗余 pos_store.id（门店） */
    private Long storeId;

    /** 发票选择(下单意图) PAPER个人纸本/PHONE_BARCODE手机条码/CITIZEN自然人凭证/MEMBER会员载具/LOVE_CODE捐赠/COMPANY公司 */
    private String invoiceChoice;

    /** 发票类型 B2C/B2B */
    private String invoiceCategory;

    /** 买方名称（B2C 客户名 / B2B 公司名） */
    private String buyerName;

    /** 买方统一编号（统编 8 码，B2B 必填） */
    private String buyerUbn;

    /** 接收邮箱（B2C 无载具时用） */
    private String buyerEmail;

    /** 载具类型 0手机条码/1自然人凭证/2ezPay会员 */
    private String carrierType;

    /** 载具号码 */
    private String carrierNum;

    /** 捐赠码（开捐赠发票时填，3-7 位；含前导零） */
    private String loveCode;

    /** 捐赠机构名（开票时从 pos_love_org 快照，便于历史展示） */
    private String loveOrgName;

    /** ezPay 发票号（开立成功后填） */
    private String invoiceNumber;

    /** 防伪随机码（ezPay 返回） */
    private String randomNum;

    /** 0未开/1已开/2失败/3作废 */
    private Integer invoiceStatus;

    /** 是否已触发开票 0否1是(出餐开票流程执行过即为1;与 invoiceStatus 独立,管理端发票管理用它筛选已进入开票流程的订单) */
    private Integer issueTriggered;

    /** 含税总额（= amount - freight） */
    private Integer totalAmt;

    /** 销售额（未税） */
    private Integer salesAmt;

    /** 税额 */
    private Integer taxAmt;

    /** 失败原因 */
    private String failReason;

    /** ezPay 交易流水号（InvoiceTransNo） */
    private String invoiceTransNo;

    /** 发票条码码值（PrintFlag=Y 才有，兑奖扫描用） */
    private String invoiceBarCode;

    /** 发票左二维码码值（PrintFlag=Y 才有，含发票核心信息+加密防伪） */
    private String invoiceQrcodeL;

    /** 发票右二维码码值（PrintFlag=Y 才有，含中文商品明细） */
    private String invoiceQrcodeR;

    /** 申请开票时间 */
    private Date applyTime;

    /** 开立成功时间 */
    private Date issueTime;

    /** 作废时间 */
    private Date invalidTime;

    /** 创建时间 */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /** 更新时间 */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /** 创建人 */
    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /** 更新人 */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;
}
