50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
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
|
||
}
|