package queue import ( "context" "encoding/json" "fmt" "time" "bdrp-server/app/main/api/internal/service" "bdrp-server/app/main/api/internal/svc" "bdrp-server/app/main/api/internal/types" "github.com/hibiken/asynq" "github.com/zeromicro/go-zero/core/logx" ) type AgentMembershipExpireHandleHandler struct { svcCtx *svc.ServiceContext } func NewAgentMembershipExpireHandleHandler(svcCtx *svc.ServiceContext) *AgentMembershipExpireHandleHandler { return &AgentMembershipExpireHandleHandler{ svcCtx: svcCtx, } } func (l *AgentMembershipExpireHandleHandler) ProcessTask(ctx context.Context, t *asynq.Task) error { var payload types.MsgAgentMembershipExpireHandlePayload if err := json.Unmarshal(t.Payload(), &payload); err != nil { logx.Errorf("解析会员到期处理任务payload失败: %v", err) return err } if payload.AgentID <= 0 { return fmt.Errorf("无效代理ID: %d", payload.AgentID) } now := time.Now() downgraded, err := service.DowngradeExpiredMembership(ctx, l.svcCtx.AgentModel, payload.AgentID, now) if err != nil { logx.Errorf("会员到期处理失败,代理ID: %d, 错误: %v", payload.AgentID, err) return err } if downgraded { logx.Infof("会员到期处理成功,代理ID: %d 已降级为普通代理", payload.AgentID) } else { logx.Infof("会员到期处理跳过,代理ID: %d 当前无需降级", payload.AgentID) } return nil }