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
|
|||
|
|
}
|