fix: 团队统计只计算未删除的活跃用户
All checks were successful
continuous-integration/drone/push Build is passing

- get_accessible_team_member_ids 增加 is_deleted=False 和 is_active=True 过滤
- 避免统计已离职/删除的用户导致数量不准
This commit is contained in:
yuliang_guo
2026-01-31 19:01:01 +08:00
parent 616bb7185e
commit 99c4ac5473

View File

@@ -28,10 +28,17 @@ async def get_accessible_team_member_ids(
current_user: User,
db: AsyncSession
) -> List[int]:
"""获取用户可访问的团队成员ID列表"""
"""获取用户可访问的团队成员ID列表(只返回未删除的用户)"""
if current_user.role in ['admin', 'manager']:
# 管理员查看所有团队成员
stmt = select(UserTeam.user_id).distinct()
# 管理员查看所有团队成员(过滤已删除用户)
stmt = select(UserTeam.user_id).join(
User, UserTeam.user_id == User.id
).where(
and_(
User.is_deleted == False, # noqa: E712
User.is_active == True # noqa: E712
)
).distinct()
result = await db.execute(stmt)
return [row[0] for row in result.all()]
else:
@@ -44,9 +51,15 @@ async def get_accessible_team_member_ids(
if not team_ids:
return []
# 2. 查询这些团队的所有成员
stmt = select(UserTeam.user_id).where(
UserTeam.team_id.in_(team_ids)
# 2. 查询这些团队的所有成员(过滤已删除用户)
stmt = select(UserTeam.user_id).join(
User, UserTeam.user_id == User.id
).where(
and_(
UserTeam.team_id.in_(team_ids),
User.is_deleted == False, # noqa: E712
User.is_active == True # noqa: E712
)
).distinct()
result = await db.execute(stmt)
return [row[0] for row in result.all()]