"""历史单据上的人员姓名。 用户管理里删除人员只会把 sys_user.del_flag 置为 1,账号不能再登录, 也不能再被选为新的负责人。已经写在工单、步骤、协议上的 user_id 仍要显示 nick_name;查不到人时调用方再回退成 id。 选人、校验、登录不要用本模块。 """ from __future__ import annotations from typing import Dict, Iterable, List from sqlalchemy.orm import Session from app.models.models import SysUser def user_display_name_map(db: Session, user_ids: Iterable[str]) -> Dict[str, str]: """按 user_id 取展示名,包含已删除用户。优先昵称,否则账号。""" ids: List[str] = [] seen = set() for raw in user_ids or []: uid = str(raw or "").strip() if not uid or uid in seen: continue seen.add(uid) ids.append(uid) if not ids: return {} rows = ( db.query(SysUser.id, SysUser.nick_name, SysUser.user_no) .filter(SysUser.id.in_(ids)) .all() ) out: Dict[str, str] = {} for row in rows: name = (row.nick_name or "").strip() or (row.user_no or "").strip() if name: out[row.id] = name return out