package com.hzs.member.account.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hzs.common.core.annotation.BigDecimalFormat;
import com.hzs.common.core.annotation.Excel;
import com.hzs.common.core.annotation.Transaction;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import lombok.*;

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

/**
 * <p>
 * 会员提现表
 * </p>
 *
 * @author hzs
 * @since 2022-09-06
 */


@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CuMemberWithdrawVO extends CuMemberBaseVO {

    /**
     * 主键
     */
    private Long pkId;
    /**
     * 币种类型
     */
    @Transaction(transactionKey = EnumsPrefixConstants.KEY_ACC)
    private Integer pkAccount;
    /**
     * 充值类型 翻译
     */
    @Excel(name = "钱包类型")
    private String pkAccountVal;
    /**
     * 可提金额
     */
    @Excel(name = "可提金额", scale = 2)
    @BigDecimalFormat()
    private BigDecimal availableAmount;
    /**
     * 提现金额
     */
    @Excel(name = "本次提现", scale = 2)
    @BigDecimalFormat()
    private BigDecimal cashAmount;
    /**
     * 可提余额
     */
    @Excel(name = "可提余额", scale = 2)
    @BigDecimalFormat()
    private BigDecimal availableBalance;

    /**
     * 手续费
     */
    @Excel(name = "手续费", scale = 2)
    @BigDecimalFormat()
    private BigDecimal serviceCharge;

    /**
     * 个人所得税
     */
    @Excel(name = "个税", scale = 2)
    @BigDecimalFormat()
    private BigDecimal incomeTax;

    /**
     * 实发金额
     */
    @Excel(name = "实发金额", scale = 2)
    @BigDecimalFormat()
    private BigDecimal issuedAmount;

    /**
     * 提现金额
     */
    @Excel(name = "本次提现（$）", scale = 2)
    @BigDecimalFormat()
    private BigDecimal settleCashAmount;

    /**
     * 手续费
     */
    @Excel(name = "手续费（$）", scale = 2)
    @BigDecimalFormat()
    private BigDecimal settleServiceCharge;

    /**
     * 个人所得税
     */
    @Excel(name = "个税（$）", scale = 2)
    @BigDecimalFormat()
    private BigDecimal settleIncomeTax;

    /**
     * 实发金额
     */
    @Excel(name = "实发金额（$）", scale = 2)
    @BigDecimalFormat()
    private BigDecimal settleIssuedAmount;

    /**
     * 汇率
     */
    @Excel(name = "汇率", scale = 4)
    @BigDecimalFormat("#0.0000")
    private BigDecimal exchangeRate;


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

    /**
     * 银行名称
     */
    @Excel(name = "银行名称")
    private String bankName;

    /**
     * 支行名称
     */
    @Excel(name = "支行名称")
    private String subBankName;

    /**
     * 银行账户
     */
    @Excel(name = "银行账户")
    private String cardNumber;

    /**
     * 开户姓名
     */
    @Excel(name = "开户姓名")
    private String accountName;

    /**
     * 预留电话
     */
    @Excel(name = "预留电话")
    private String phone;

    /**
     * 提现备注
     */
    @Excel(name = "提现备注")
    private String remarks;

    /**
     * 审核人
     */
    @Excel(name = "审核人")
    private String approveName;
    /**
     * 审核时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date approveTime;

    /**
     * 审核备注
     */
    @Excel(name = "审核备注")
    private String approveRemarks;

    /**
     * 打款人
     */
    @Excel(name = "打款人")
    private String paymentName;


    /**
     * 状态（0=未打款，1=已打款，2=已充正，3=撤消）
     */
    @Transaction(transactionKey = EnumsPrefixConstants.ENU_WITHDRAW_STATUS)
    private Integer status;

    @Excel(name = "打款状态")
    private String statusVal;

    /**
     * 打款人
     */
    private Long payer;

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

    /**
     * 打款备注
     */
    @Excel(name = "打款备注")
    private String payerRemarks;

    /**
     * 审核状态（1=待提交,2=已提交,3=审核中,4=已驳回,5=已完成,6=已归档）
     */
    @Transaction(transactionKey = EnumsPrefixConstants.APPROVE_STATUS)
    private Integer approveState;

    @Excel(name = "审核状态")
    private String approveStateVal;

    /**
     * 单据编号
     */
    @Excel(name = "单据编号")
    private String withdrawCode;


    /**
     * 开始时间
     */
    private String startDate;
    /**
     * 结束时间
     */
    private String endDate;
    /**
     * 审核开始时间
     */
    private String startPaymentTime;
    /**
     * 审核结束时间
     */
    private String endPaymentTime;

    /**
     * 已选取的ID
     */
    private List<Long> pkIds;


    /**
     * 审批业务详情列表
     */
    @JsonIgnore
    private List<ApprovalDetailVO> detailList;

    /**
     * 修改人ID
     */
    private Long pkModified;

    /**
     * 批次
     */
    private String batch;

    /**
     * 查询状态
     */
    private  Integer queryStatus;

    /**
     * 会员编号集合
     */
    private List<String> memberCodeList;

}
