协议样本、生产产出和盘点明细按行更新并保留原 id;补齐存储证明质检预填、离职人员显示名,以及样本采集通知模板字段。 Co-authored-by: Cursor <cursoragent@cursor.com>
41 lines
1.2 KiB
Python
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
|