Files
bdrp-server/app/main/api/internal/queue/routes.go

73 lines
2.3 KiB
Go
Raw Normal View History

2026-04-01 15:43:01 +08:00
package queue
import (
"bdrp-server/app/main/api/internal/svc"
"bdrp-server/app/main/api/internal/types"
2026-04-29 11:38:59 +08:00
"context"
"fmt"
"time"
2026-04-01 15:43:01 +08:00
"github.com/hibiken/asynq"
2026-04-29 11:38:59 +08:00
"github.com/zeromicro/go-zero/core/logx"
2026-04-01 15:43:01 +08:00
)
type CronJob struct {
ctx context.Context
svcCtx *svc.ServiceContext
}
2026-04-29 11:38:59 +08:00
const AgentMembershipExpireScanTaskTime = "5 0 * * *"
2026-04-01 15:43:01 +08:00
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)
// 注册清理查询数据任务
task := asynq.NewTask(types.MsgCleanQueryData, nil, nil)
_, err := scheduler.Register(TASKTIME, task)
if err != nil {
panic(fmt.Sprintf("定时任务注册失败:%v", err))
}
2026-04-29 11:38:59 +08:00
// 注册会员到期扫描任务(每天凌晨执行)
expireScanTask := asynq.NewTask(types.MsgAgentMembershipExpireScan, nil, nil)
_, err = scheduler.Register(AgentMembershipExpireScanTaskTime, expireScanTask)
if err != nil {
panic(fmt.Sprintf("会员到期扫描任务注册失败:%v", err))
}
// 启动补偿:服务启动后立即触发一次扫描任务(按日期去重)
client := asynq.NewClient(redisClientOpt)
startupTaskID := fmt.Sprintf("agent_membership_expire_scan_startup_%s", time.Now().Format("20060102"))
_, enqueueErr := client.Enqueue(
asynq.NewTask(types.MsgAgentMembershipExpireScan, nil),
asynq.MaxRetry(1),
asynq.TaskID(startupTaskID),
)
if enqueueErr != nil {
logx.Errorf("启动补偿扫描任务入队失败: %v", enqueueErr)
}
if closeErr := client.Close(); closeErr != nil {
logx.Errorf("关闭启动补偿任务客户端失败: %v", closeErr)
}
2026-04-01 15:43:01 +08:00
scheduler.Start()
fmt.Println("定时任务启动!!!")
mux := asynq.NewServeMux()
mux.Handle(types.MsgPaySuccessQuery, NewPaySuccessNotifyUserHandler(l.svcCtx))
mux.Handle(types.MsgCleanQueryData, NewCleanQueryDataHandler(l.svcCtx))
mux.Handle(types.MsgUnfreezeCommission, NewUnfreezeCommissionHandler(l.svcCtx))
2026-04-29 11:38:59 +08:00
mux.Handle(types.MsgAgentMembershipExpireScan, NewAgentMembershipExpireScanHandler(l.svcCtx))
mux.Handle(types.MsgAgentMembershipExpireHandle, NewAgentMembershipExpireHandleHandler(l.svcCtx))
2026-04-01 15:43:01 +08:00
return mux
}