feat: 实现订单超时自动取消功能,支持钱包余额解冻和 Asynq Scheduler 统一调度
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m58s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m58s
- 新增 expires_at 字段和复合索引,待支付订单 30 分钟超时自动取消 - 实现 cancelOrder/unfreezeWalletForCancel 钱包余额解冻逻辑 - 创建 Asynq 定时任务(order_expire/alert_check/data_cleanup) - 将原有 time.Ticker 轮询迁移至 Asynq Scheduler 统一调度 - 同步 delta specs 到 main specs 并归档变更
This commit is contained in:
24
migrations/000069_add_order_expiration.up.sql
Normal file
24
migrations/000069_add_order_expiration.up.sql
Normal file
@@ -0,0 +1,24 @@
|
||||
-- 添加订单过期时间字段和复合索引
|
||||
DO $$
|
||||
BEGIN
|
||||
-- 添加 expires_at 字段(订单过期时间,NULL 表示不过期)
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name='tb_order'
|
||||
AND column_name='expires_at'
|
||||
) THEN
|
||||
ALTER TABLE tb_order ADD COLUMN expires_at TIMESTAMPTZ;
|
||||
COMMENT ON COLUMN tb_order.expires_at IS '订单过期时间(NULL表示不过期,待支付订单默认30分钟后过期)';
|
||||
END IF;
|
||||
|
||||
-- 创建复合索引:用于定时任务扫描超时待支付订单
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_indexes
|
||||
WHERE tablename='tb_order'
|
||||
AND indexname='idx_order_expires'
|
||||
) THEN
|
||||
CREATE INDEX idx_order_expires ON tb_order (expires_at, payment_status)
|
||||
WHERE expires_at IS NOT NULL AND deleted_at IS NULL;
|
||||
END IF;
|
||||
END
|
||||
$$;
|
||||
Reference in New Issue
Block a user