| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- """入库样本(采集协议 / 科研捐赠)· 特殊标记维护。"""
- from __future__ import annotations
- from typing import Any, Dict, Optional
- from sqlalchemy.orm import Session
- from app.models.models import BizProtocolSample
- from app.models.research_donation import BizResearchDonationSample
- from app.utils.sample_special import (
- apply_inbound_sample_special_mark_fields,
- sample_special_to_dict,
- validate_sample_special_raw,
- )
- def update_inbound_sample_special_mark(
- db: Session,
- *,
- tenant_no: str,
- reception_source: str,
- protocol_sample_id: str,
- is_special: bool,
- special_remark: Optional[str],
- user_id: str,
- ) -> Dict[str, Any]:
- sample_id = (protocol_sample_id or "").strip()
- if not sample_id:
- raise ValueError("缺少样本 ID")
- source = (reception_source or "cell_storage").strip()
- raw = {"is_special": is_special, "special_remark": special_remark or ""}
- validate_sample_special_raw(raw)
- if source == "research_donation":
- sample = (
- db.query(BizResearchDonationSample)
- .filter(
- BizResearchDonationSample.id == sample_id,
- BizResearchDonationSample.tenant_no == tenant_no,
- BizResearchDonationSample.del_flag == 0,
- )
- .first()
- )
- if not sample:
- raise ValueError("捐赠样本不存在")
- else:
- sample = (
- db.query(BizProtocolSample)
- .filter(
- BizProtocolSample.id == sample_id,
- BizProtocolSample.tenant_no == tenant_no,
- BizProtocolSample.del_flag == 0,
- )
- .first()
- )
- if not sample:
- raise ValueError("协议样本不存在")
- apply_inbound_sample_special_mark_fields(sample, raw)
- sample.update_by = user_id
- db.flush()
- return sample_special_to_dict(sample)
|