feat: 实现订单超时自动取消功能,支持钱包余额解冻和 Asynq Scheduler 统一调度
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:
2026-02-28 17:16:15 +08:00
parent 5bb0ff0ddf
commit e661b59bb9
35 changed files with 1157 additions and 314 deletions

View File

@@ -0,0 +1,37 @@
package task
import (
"context"
"github.com/hibiken/asynq"
"go.uber.org/zap"
pollingSvc "github.com/break/junhong_cmp_fiber/internal/service/polling"
)
// DataCleanupHandler 数据清理任务处理器
type DataCleanupHandler struct {
cleanupService *pollingSvc.CleanupService
logger *zap.Logger
}
// NewDataCleanupHandler 创建数据清理处理器
func NewDataCleanupHandler(cleanupService *pollingSvc.CleanupService, logger *zap.Logger) *DataCleanupHandler {
return &DataCleanupHandler{
cleanupService: cleanupService,
logger: logger,
}
}
// HandleDataCleanup 处理数据清理任务
// 由 Asynq Scheduler 每天凌晨 2 点触发,执行定期数据清理
func (h *DataCleanupHandler) HandleDataCleanup(ctx context.Context, _ *asynq.Task) error {
h.logger.Info("开始执行定时数据清理")
if err := h.cleanupService.RunScheduledCleanup(ctx); err != nil {
h.logger.Error("定时数据清理失败", zap.Error(err))
return err
}
return nil
}