diff --git a/crates/erp-health/src/service/patient_service.rs b/crates/erp-health/src/service/patient_service.rs index 8df6c95..fbe836a 100644 --- a/crates/erp-health/src/service/patient_service.rs +++ b/crates/erp-health/src/service/patient_service.rs @@ -428,42 +428,44 @@ pub async fn get_health_summary( find_patient(&state.db, tenant_id, patient_id).await?; use crate::entity::{vital_signs, lab_report, appointment, follow_up_task}; + use sea_orm::QueryOrder; - // 最新体征 - let latest_vitals = vital_signs::Entity::find() - .filter(vital_signs::Column::TenantId.eq(tenant_id)) - .filter(vital_signs::Column::PatientId.eq(patient_id)) - .filter(vital_signs::Column::DeletedAt.is_null()) - .order_by_desc(vital_signs::Column::RecordDate) - .one(&state.db) - .await?; + // 4 个查询并行执行 + let (latest_vitals_res, latest_lab_res, upcoming_res, pending_follow_ups_res) = tokio::join!( + // 最新体征 + vital_signs::Entity::find() + .filter(vital_signs::Column::TenantId.eq(tenant_id)) + .filter(vital_signs::Column::PatientId.eq(patient_id)) + .filter(vital_signs::Column::DeletedAt.is_null()) + .order_by_desc(vital_signs::Column::RecordDate) + .one(&state.db), + // 最新化验 + lab_report::Entity::find() + .filter(lab_report::Column::TenantId.eq(tenant_id)) + .filter(lab_report::Column::PatientId.eq(patient_id)) + .filter(lab_report::Column::DeletedAt.is_null()) + .order_by_desc(lab_report::Column::ReportDate) + .one(&state.db), + // 待处理预约数 + appointment::Entity::find() + .filter(appointment::Column::TenantId.eq(tenant_id)) + .filter(appointment::Column::PatientId.eq(patient_id)) + .filter(appointment::Column::Status.eq("pending")) + .filter(appointment::Column::DeletedAt.is_null()) + .count(&state.db), + // 待办随访数 + follow_up_task::Entity::find() + .filter(follow_up_task::Column::TenantId.eq(tenant_id)) + .filter(follow_up_task::Column::PatientId.eq(patient_id)) + .filter(follow_up_task::Column::Status.eq("pending")) + .filter(follow_up_task::Column::DeletedAt.is_null()) + .count(&state.db), + ); - // 最新化验 - let latest_lab = lab_report::Entity::find() - .filter(lab_report::Column::TenantId.eq(tenant_id)) - .filter(lab_report::Column::PatientId.eq(patient_id)) - .filter(lab_report::Column::DeletedAt.is_null()) - .order_by_desc(lab_report::Column::ReportDate) - .one(&state.db) - .await?; - - // 待处理预约数 - let upcoming = appointment::Entity::find() - .filter(appointment::Column::TenantId.eq(tenant_id)) - .filter(appointment::Column::PatientId.eq(patient_id)) - .filter(appointment::Column::Status.eq("pending")) - .filter(appointment::Column::DeletedAt.is_null()) - .count(&state.db) - .await?; - - // 待办随访数 - let pending_follow_ups = follow_up_task::Entity::find() - .filter(follow_up_task::Column::TenantId.eq(tenant_id)) - .filter(follow_up_task::Column::PatientId.eq(patient_id)) - .filter(follow_up_task::Column::Status.eq("pending")) - .filter(follow_up_task::Column::DeletedAt.is_null()) - .count(&state.db) - .await?; + let latest_vitals = latest_vitals_res?; + let latest_lab = latest_lab_res?; + let upcoming = upcoming_res?; + let pending_follow_ups = pending_follow_ups_res?; Ok(serde_json::json!({ "patient_id": patient_id,