Files
zkxw/backend/app/crud/user_display.py
T
zlwuandCursor 5e563a6669 fix: 子表保存改为就地同步,避免整批换 id 打断外键。
协议样本、生产产出和盘点明细按行更新并保留原 id;补齐存储证明质检预填、离职人员显示名,以及样本采集通知模板字段。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-28 10:51:53 +08:00

41 lines
1.2 KiB
Python

"""历史单据上的人员姓名。
用户管理里删除人员只会把 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