package com.sonic.lion.domain.entity;

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 com.sonic.lion.enums.BizType;
import com.sonic.lion.enums.PayChannel;
import com.sonic.lion.domain.enums.InOrOut;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.Date;

/**
 * t_pay_channel_bill
 * @author 
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_pay_channel_bill")
public class PayChannelBill {

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

    /**
     * 平台代码
     */
    private String platform;

    /**
     * 渠道流水ID
     */
    private String channelBillId;

    /**
     * 流水所属平台账号id
     */
    private Long accountId;

    /**
     * 账号名称(冗余)
     */
    private String accountName;

    /**
     * 渠道流水状态:参看BillStatus
     */
    private Integer status;
    /**
     * 状态说明；如失败和未知原因
     */
    private String statusMsg;

    /**
     * 渠道ID
     */
    @TableField("channel_id")
    private PayChannel payChannel;

    /**
     * 渠道名称(冗余)
     */
    private String channelName;

    /**
     * 渠道提交编号(通道内唯一;如通道没有特别要求默认与主键相同)
     */
    private String submitId;

    /**
     * 渠道流水号(通道返回)
     */
    private String channelSn;

    /**
     * 渠道返回的对账日期
     */
    private LocalDateTime channelSettleDate;

    /**
     * 通道账号 (如:银行卡号,支付宝账号,资金账号；根据des_account_type确定)
     */
    private String desAccountNo;

    /**
     * 通道账号姓名
     */
    private String desAccountName;

    /**
     * 通道账号类型：0平台账号，1非平台账号
     */
    private Integer desAccountType;

    /**
     * 支付方式ID
     */
    private Long paymentTypeId;

    /**
     * 业务类型(参看枚举TradeBizType)
     */
    private BizType bizType;

    /**
     * 业务编号(参看枚举TradeBizType)
     */
    private String bizNum;

    /**
     * 流水类型:1收入,2支出
     */
    private InOrOut inOrOut;

    /**
     * 流水标题或名称
     */
    private String name;

    /**
     * 发生金额(分)
     */
    private Long amount;

    /**
     * 实际交易金额(分)
     */
    private Long occurAmount;

    /**
     * 手续费
     */
    private Long fee;

    /**
     * 记账日(日切相关,对账时使用)
     */
    private LocalDateTime tradeDate;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 最后修改时间
     */
    private Date editTime;

    /**
     * 是否删除
     */
    private Integer isDelete;

    /**
     * 交易确认流水号(通道返回,退款需要使用)
     */
    private String captureChannelSn;
}