package cn.iocoder.yudao.module.pay.dal.dataobject.notify; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO; import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; import cn.iocoder.yudao.module.pay.dal.dataobject.transfer.PayTransferDO; import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum; import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDateTime; /** * 支付通知 * 在支付系统收到支付渠道的支付、退款的结果后,需要不断的通知到业务系统,直到成功。 * * @author 芋道源码 */ @TableName("pay_notify_task") @KeySequence("pay_notify_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data public class PayNotifyTaskDO extends TenantBaseDO { /** * 通知频率,单位为秒。 * * 算上首次的通知,实际是一共 1 + 8 = 9 次。 */ public static final Integer[] NOTIFY_FREQUENCY = new Integer[]{ 15, 15, 30, 180, 1800, 1800, 1800, 3600 }; /** * 编号,自增 */ @TableId private Long id; /** * 应用编号 * * 关联 {@link PayAppDO#getId()} */ private Long appId; /** * 通知类型 * * 枚举 {@link PayNotifyTypeEnum} */ private Integer type; /** * 数据编号,根据不同 type 进行关联: * * 1. {@link PayNotifyTypeEnum#ORDER} 时,关联 {@link PayOrderDO#getId()} * 2. {@link PayNotifyTypeEnum#REFUND} 时,关联 {@link PayRefundDO#getId()} * 3. {@link PayNotifyTypeEnum#TRANSFER} 时,关联 {@link PayTransferDO#getId()} */ private Long dataId; /** * 商户订单编号 */ private String merchantOrderId; /** * 商户退款编号 */ private String merchantRefundId; /** * 商户转账编号 */ private String merchantTransferId; /** * 通知状态 * * 枚举 {@link PayNotifyStatusEnum} */ private Integer status; /** * 下一次通知时间 */ private LocalDateTime nextNotifyTime; /** * 最后一次执行时间 */ private LocalDateTime lastExecuteTime; /** * 当前通知次数 */ private Integer notifyTimes; /** * 最大可通知次数 */ private Integer maxNotifyTimes; /** * 通知地址 */ private String notifyUrl; }