Skip to Content
最佳实践订单超时自动取消

订单超时自动取消

项目访问链接

https://editor.momen.app/tool/dK5wjNzNOkz/WEB?code=TAZbG5fNdqaun&ref=0562398

场景与目标

  • 目标:如果订单在预设时间内未付款,系统将自动把订单状态从“待支付”变更为“已取消”。
  • 适用场景:订单超时取消、会员到期自动降级、会议室预订超时释放、活动报名结束自动封盘等。
  • 核心逻辑:利用 定时触发器 每分钟运行一次后台 行为流,查询符合过期的记录并批量更新其状态。

实现步骤

数据存储

  • 数据模型:创建一个名为 订单 的表。
字段名称类型说明
id整数唯一标识符(系统默认)。
创建时间日期时间记录创建时间,用作“下单时间”(系统默认)。
状态文本可选值:待支付已支付已取消

逻辑配置

进入“行为流”模块,构建自动化逻辑。

定时触发器配置

  1. 在右侧面板的“触发器”部分,点击“添加”并选择 定时触发 (Schedule)
  2. 开始时间 / 结束时间:定义该自动化逻辑的有效时间段。
  3. 设置方式:选择“快捷配置”。
  4. 触发频率:设置为 EVERY_MINUTE(每分钟执行一次,便于测试)。
  5. 在第几秒:指定确切的秒数,例如 31 秒。

资源消耗提示: 定时任务生效后,行为流每执行一次,编辑器右上角的 “自动化执行剩余次数” 就会相应减 1。在配置高频定时任务(如每分钟执行)时,请务必关注剩余额度。

查询过期订单

添加一个 查询数据 节点,用于筛选需要取消的订单。

  1. 节点名称:修改为 查询未支付订单
  2. 数据表:选择 订单
  3. 过滤条件:配置以下逻辑(使用“且”连接):
    • 状态 等于 待支付
    • 创建时间 小于等于 DELTA 公式。
  4. 公式设置:配置 DELTA 函数计算过期阈值:
    • 时间:选择 当前系统时间 (系统)
    • 方法:选择 减少
    • :输入 1(表示 1 分钟超时)。

循环批量更新状态

使用循环节点处理查询到的所有结果。

  1. 添加循环:在查询节点下方连接一个 循环 节点。数据源选择 查询未支付订单 的输出结果。
  2. 更新数据:在循环内部添加一个 更新数据 节点,重命名为 更新订单状态
    • 数据表:选择 订单
    • 参数:将 状态 设置为已取消
    • 过滤id 等于 行为流数据 -> 循环 -> 当前项 -> id

验证

在“数据库”面板中手动操作,观察逻辑是否生效:

  1. 插入测试数据:手动添加两条记录。
    • 记录 A:状态 = 已支付
    • 记录 B:状态 = 待支付,记录其创建时间(例如 08:19:54)。
  2. 第一个执行周期
    • 观察时间。当系统时间到达 08:20:31 时(触发器设定的第 31 秒),记录 B 的创建时间未满 1 分钟。
    • 结果:状态保持 待支付 不变。
  3. 第二个执行周期
    • 当系统时间到达 08:21:31 时,记录 B 的已创建时长已超过 1 分钟。
    • 结果:行为流成功筛选该记录。
  4. 最终状态:刷新数据库。可以看到记录 B 的状态已自动变为 已取消,而记录 A(已支付)不受影响。

⚠️

由于触发器是按固定周期(如每分钟的第 31 秒)运行的,一条记录实际被取消的时间可能在创建后的 1 分钟到 1 分 59 秒之间,这取决于其创建时间点相对于触发周期的位置。

Last updated on