package com.jeequan.jeepay.core.entity;

import com.jeequan.jeepay.core.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

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

/**
 * <p>
 * 转账对象表
 * </p>
 *
 * @author [mybatis plus generator]
 * @since 2024-04-25
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class TransferSubject  extends BaseModel implements Serializable {

    /**
     * 不可用
     */
    public static final byte STATE_DISABLE = 0;

    /**
     * 启用
     */
    public static final byte STATE_ENABLE = 1;

    /**
     * 初次审核
     */
    public static final byte STATE_REVIEW = 2;

    /**
     * 关闭后二次启用待审核
     */
    public static final byte STATE_ENABLE_REVIEW = 3;

    // 0：已签约；1：审核中；2：未签约；3:已解约4:解约中;5:暂存;6:暂停 ;7；未知
    public static final byte SIGN_STATE_SUCCESS = 0;
    public static final byte SIGN_STATE_AUDITING = 1;
    public static final byte SIGN_STATE_SIGNING = 2;
    public static final byte SIGN_STATE_LOGOUT = 3;
    public static final byte SIGN_STATE_LOGOUT_AUDITING = 4;
    public static final byte SIGN_STATE_ON_HOLD = 5;
    public static final byte SIGN_STATE_ON_PAUSE = 6;
    public static final byte SIGN_STATE_UNKNOWN = 7;

    private static final long serialVersionUID=1L;

    /**
     * 转账接收方
     */
    public static final String SUBJECT_TYPE_RECEIVER = "JS";
    /**
     * 转账发起方
     */
    public static final String SUBJECT_TYPE_SPONSOR = "FQ";
    /**
     * 即可以作为接收方，也可以作为发起方
     */
    public static final String SUBJECT_TYPE_ALL = "ALL";

    /**
     * ID
     */
    private String id;

    /**
     * 下游回调链接
     */
    private String notifyUrl;

    /**
     * 下游申请单号
     */
    private String transSubApplyId;

    /**
     * 转账主体申请单号
     */
    private String transApplyId;

    /**
     * 渠道申请单号
     */
    private String transChannelApplyNo;

    /**
     * 渠道签约ID
     */
    private String transChannelSignNo;

    /**
     * 通道主体编号
     */
    private String transChannelMchNo;

    /**
     * 主体类型.FQ: 发起方; JS: 接收方; ALL: 可发起, 可接收
     */
    private String subjectType;

    /**
     * 应用ID
     */
    private String appId;

    /**
     * 商户号
     */
    private String mchNo;

    /**
     * 服务商号
     */
    private String isvNo;

    /**
     * 代理商号
     */
    private String agentNo;

    /**
     * 顶级代理商号
     */
    private String topAgentNo;

    /**
     * 转账接口代码
     */
    private String transIfCode;

    /**
     * 主体名称
     */
    private String subjectName;

    /**
     * 转账接口实例ID
     */
    private Integer transInterfaceId;

    /**
     * 商户进件号，部分通道需要关联商户
     */
    private String mchApplyId;

    /**
     * 关联的支付接口代码
     */
    private String payIfCode;

    /**
     * 商户进件详细消息（JSON类型）
     */
    private String applyDetailInfo;

    /**
     * 响应提示信息（一般进件异常或提示信息）
     */
    private String applyErrorInfo;

    /**
     * 状态: 0-停用, 1-启用
     */
    private Byte state;

    /**
     * 签约状态 0：已签约；1：审核中；2：未签约；3:已解约4:解约中;5:暂存;6:暂停 ;7；未知
     */
    private Integer signState;

    /**
     * 佣金结算周期（仅服务商配置， 用于代理商的佣金提现周期）
     */
    private Integer settHoldDay;

    /**
     * 进件成功接口返回参数, 用于配置到商户侧的参数信息
     */
    private String succResParameter;

    /**
     * 渠道拓展参数1
     */
    private String channelVar1;

    /**
     * 渠道拓展参数2
     */
    private String channelVar2;

    /**
     * 账户
     */
    private String account;

    /**
     * 账户名称
     */
    private String accountName;

    /**
     * 账户类型 B: 对公，企业；C：对私，个人
     */
    private String accountType;

    /**
     * 账户信息 json
     */
    private String accountMessage;

    /**
     * 联系人姓名
     */
    private String realName;


    /**
     * 联系电话
     */
    private String contactTel;


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

    /**
     * 创建者用户ID
     */
    private Long createdUid;

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

    /**
     * 更新者用户ID
     */
    private Long updatedUid;

    /**
     * 更新时间
     */
    private Date updatedTime;

    /**
     * 最后一次请求上游时间
     */
    private Date lastApplyAt;


}
