package queue import ( "context" "fmt" "qnc-server/app/main/api/internal/svc" "qnc-server/app/main/api/internal/types" "github.com/hibiken/asynq" ) type CronJob struct { ctx context.Context svcCtx *svc.ServiceContext } func NewCronJob(ctx context.Context, svcCtx *svc.ServiceContext) *CronJob { return &CronJob{ ctx: ctx, svcCtx: svcCtx, } } func (l *CronJob) Register() *asynq.ServeMux { redisClientOpt := asynq.RedisClientOpt{Addr: l.svcCtx.Config.CacheRedis[0].Host, Password: l.svcCtx.Config.CacheRedis[0].Pass} scheduler := asynq.NewScheduler(redisClientOpt, nil) // 注册数据清理定时任务(每天凌晨3点) task := asynq.NewTask(types.MsgCleanQueryData, nil, nil) _, err := scheduler.Register(TASKTIME, task) if err != nil { panic(fmt.Sprintf("定时任务注册失败:%v", err)) } // 注册解冻佣金扫描定时任务(每2小时执行一次) unfreezeScanTask := asynq.NewTask(types.MsgUnfreezeCommissionScan, nil, nil) _, err = scheduler.Register("0 */2 * * *", unfreezeScanTask) // 每2小时执行一次(每小时的第0分钟) if err != nil { panic(fmt.Sprintf("解冻佣金扫描定时任务注册失败:%v", err)) } scheduler.Start() fmt.Println("定时任务启动!!!") mux := asynq.NewServeMux() mux.Handle(types.MsgPaySuccessQuery, NewPaySuccessNotifyUserHandler(l.svcCtx)) mux.Handle(types.MsgCleanQueryData, NewCleanQueryDataHandler(l.svcCtx)) mux.Handle(types.MsgAgentProcess, NewAgentProcessHandler(l.svcCtx)) mux.Handle(types.MsgUnfreezeCommission, NewUnfreezeCommissionHandler(l.svcCtx)) mux.Handle(types.MsgUnfreezeCommissionScan, NewUnfreezeCommissionScanHandler(l.svcCtx)) return mux }