| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- """样本信息列表快捷登记:去重与入库字段规范化。"""
- from __future__ import annotations
- from datetime import datetime
- from typing import Any, Dict, Iterable, List, Optional
- from app.services.sample_info_progress import apply_handle_payload
- def unique_nonempty_ids(ids: Iterable[Optional[str]]) -> List[str]:
- seen = set()
- out: List[str] = []
- for raw in ids:
- s = (raw or "").strip()
- if not s or s in seen:
- continue
- seen.add(s)
- out.append(s)
- return out
- def unique_sample_items(
- items: Optional[Iterable[Dict[str, str]]],
- ) -> List[tuple]:
- """按 sampleCode 去重,保留首次出现的 (sampleCode, protocolId)。"""
- seen = set()
- out: List[tuple] = []
- for it in items or []:
- code = (it.get("sampleCode") or "").strip()
- pid = (it.get("protocolId") or "").strip()
- if not code or code in seen:
- continue
- seen.add(code)
- out.append((code, pid))
- return out
- def apply_quick_storage_payload(
- *,
- handle_time: Optional[datetime],
- handler_user_id: Optional[str],
- attachments: str = "",
- remark: str = "",
- ) -> Dict[str, Any]:
- """快捷登记入库必须填写办理时间;不走生产/质检双门禁。"""
- if handle_time is None:
- raise ValueError("请填写办理时间")
- payload = apply_handle_payload(
- handle_time=handle_time,
- handler_user_id=handler_user_id,
- attachments=attachments,
- remark=remark,
- )
- return {
- "storage_status": "yrk",
- "storage_time": payload["handle_time"],
- "storage_by": payload["handler_user_id"],
- "storage_in_date": payload["legacy_date"],
- "attachments": payload["attachments"],
- "remark": payload["remark"],
- }
|