diff --git a/backend/internal/api/team_process.go b/backend/internal/api/team_process.go index 30cd63a..394d9b0 100644 --- a/backend/internal/api/team_process.go +++ b/backend/internal/api/team_process.go @@ -486,10 +486,43 @@ func processSingleTeam(idx int, req TeamProcessRequest) (result TeamProcessResul } } + // Step 0: 预检查账户状态(封禁/Token过期检测) + resolvedProxy := database.Instance.ResolveProxy(req.Proxy) + preChecker := invite.NewWithProxy(owner.Token, resolvedProxy) + accountStatus := preChecker.CheckAccountStatus() + + if accountStatus.Status == "banned" { + logger.Error(fmt.Sprintf("%s 母号被封禁,跳过处理: %s", logPrefix, accountStatus.Error), owner.Email, "team") + if database.Instance != nil { + database.Instance.MarkOwnerAsInvalid(owner.Email) + database.Instance.DeleteTeamOwnerByEmail(owner.Email) + logger.Info(fmt.Sprintf("%s 封禁母号已删除: %s", logPrefix, owner.Email), owner.Email, "team") + } + result.Errors = append(result.Errors, "账户被封禁") + result.DurationMs = time.Since(startTime).Milliseconds() + return result + } + + if accountStatus.Status == "token_expired" { + logger.Error(fmt.Sprintf("%s Token已过期,跳过处理", logPrefix), owner.Email, "team") + if database.Instance != nil { + database.Instance.MarkOwnerAsInvalid(owner.Email) + database.Instance.DeleteTeamOwnerByEmail(owner.Email) + logger.Info(fmt.Sprintf("%s Token过期母号已删除: %s", logPrefix, owner.Email), owner.Email, "team") + } + result.Errors = append(result.Errors, "Token已过期") + result.DurationMs = time.Since(startTime).Milliseconds() + return result + } + + if accountStatus.Status == "error" { + logger.Warning(fmt.Sprintf("%s 账户状态检查失败: %s,继续尝试", logPrefix, accountStatus.Error), owner.Email, "team") + } else { + logger.Info(fmt.Sprintf("%s 账户状态正常: %s", logPrefix, accountStatus.PlanType), owner.Email, "team") + } + // Step 1: 获取 Team ID(优先使用已存储的 account_id) var teamID string - // Resolve proxy for inviter - resolvedProxy := database.Instance.ResolveProxy(req.Proxy) inviter := invite.NewWithProxy(owner.Token, resolvedProxy) if owner.AccountID != "" {