立项配置页初步优化

This commit is contained in:
Cheng Zhou
2026-02-24 16:53:22 +08:00
parent 0693f09b1d
commit 8f3f717e48
124 changed files with 12519 additions and 2954 deletions
+28 -6
View File
@@ -85,16 +85,29 @@ async def list_subjects(
return []
subject_ids = [subject.id for subject in subject_list]
ae_rows = await db.execute(
select(AdverseEvent.subject_id).where(
select(AdverseEvent.subject_id, AdverseEvent.is_sae, AdverseEvent.is_susar).where(
AdverseEvent.study_id == study_id,
AdverseEvent.subject_id.in_(subject_ids),
)
)
ae_subject_ids = {row[0] for row in ae_rows.all() if row[0]}
ae_flags: dict[uuid.UUID, dict[str, bool]] = {}
for row in ae_rows.all():
sid = row[0]
if not sid:
continue
if sid not in ae_flags:
ae_flags[sid] = {"has_ae": True, "has_sae": False, "has_susar": False}
if row[1]:
ae_flags[sid]["has_sae"] = True
if row[2]:
ae_flags[sid]["has_susar"] = True
result: list[SubjectRead] = []
for subject in subject_list:
data = SubjectRead.model_validate(subject)
data.has_ae = subject.id in ae_subject_ids
flags = ae_flags.get(subject.id, {"has_ae": False, "has_sae": False, "has_susar": False})
data.has_ae = flags["has_ae"]
data.has_sae = flags["has_sae"]
data.has_susar = flags["has_susar"]
result.append(data)
return result
@@ -120,12 +133,21 @@ async def get_subject(
await _ensure_subject_active(db, subject)
data = SubjectRead.model_validate(subject)
ae_row = await db.execute(
select(AdverseEvent.id).where(
select(AdverseEvent.is_sae, AdverseEvent.is_susar).where(
AdverseEvent.study_id == study_id,
AdverseEvent.subject_id == subject.id,
).limit(1)
)
)
data.has_ae = ae_row.scalar_one_or_none() is not None
ae_flags = {"has_ae": False, "has_sae": False, "has_susar": False}
for row in ae_row.all():
ae_flags["has_ae"] = True
if row[0]:
ae_flags["has_sae"] = True
if row[1]:
ae_flags["has_susar"] = True
data.has_ae = ae_flags["has_ae"]
data.has_sae = ae_flags["has_sae"]
data.has_susar = ae_flags["has_susar"]
return data