package com.icloud.server.payutils.dto;


import lombok.Data;
import lombok.experimental.Accessors;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;

/**
 * 商户支付、退款等的通知
 * 在支付系统收到支付渠道的支付、退款的结果后，需要不断的通知到业务系统，直到成功。
 *
 * @author
 */
//@Table("pay_notify_task") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Table(name = "pay_notify_task")
@Data
//@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class PayNotifyTaskDO implements Serializable {

    /**
     * 通知频率，单位为秒。
     *
     * 算上首次的通知，实际是一共 1 + 8 = 9 次。
     */
    public static final Integer[] NOTIFY_FREQUENCY = new Integer[]{
            15, 15, 30, 180,
            1800, 1800, 1800, 3600
    };

    /**
     * 编号，自增
     */
    @Id
    @Column(name = "id")
    private Long id;
    /**
     * 商户编号
     */
    @Column(name = "merchantId")
    private Long merchantId;
    /**
     * 应用编号
     *

     */
    @Column(name = "appId")
    private Long appId;
    /**
     * 通知类型

     */
    @Column(name = "type")
    private Integer type;
    /**
     * 数据编号，根据不同 type 进行关联：

     */
    @Column(name = "type")
    private Long dataId;
    /**
     * 商户订单编号
     */
    @Column(name = "type")
    private String merchantOrderId;
    /**
     * 通知状态
     *
     */
    @Column(name = "type")
    private Integer status;
    /**
     * 下一次通知时间
     */
    @Column(name = "type")
    private Date nextNotifyTime;
    /**
     * 最后一次执行时间
     */
    @Column(name = "type")
    private Date lastExecuteTime;
    /**
     * 当前通知次数
     */
    @Column(name = "type")
    private Integer notifyTimes;
    /**
     * 最大可通知次数
     */
    @Column(name = "type")
    private Integer maxNotifyTimes;
    /**
     * 通知地址
     */
    @Column(name = "type")
    private String notifyUrl;

    @CreationTimestamp
    @Column(name = "create_time")
    private Date createtime;
    /**
     * 最后更新时间
     */

    @UpdateTimestamp
    @Column(name = "update_time")
    private Date updatetime;
    /**
     * 创建者，目前使用 SysUser 的 id 编号
     *
     * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
     */
    @Column(name = "creator")
    private String creator;
    /**
     * 更新者，目前使用 SysUser 的 id 编号
     *
     * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
     */

    @Column(name = "updater")
    private String updater;
    /**
     * 是否删除
     */
    @Column(name = "deleted")
    private Boolean deleted;

}
