feat(ai): AnalysisService 补全 list/get 查询方法
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
use futures::Stream;
|
use futures::Stream;
|
||||||
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set};
|
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter, QueryOrder, QuerySelect, Set};
|
||||||
use sha2::{Digest, Sha256};
|
use sha2::{Digest, Sha256};
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
use erp_core::types::Pagination;
|
||||||
|
|
||||||
use crate::dto::{AnalysisType, GenerateRequest};
|
use crate::dto::{AnalysisType, GenerateRequest};
|
||||||
use crate::entity::ai_analysis;
|
use crate::entity::ai_analysis;
|
||||||
@@ -142,6 +143,51 @@ impl AnalysisService {
|
|||||||
hex::encode(hasher.finalize())
|
hex::encode(hasher.finalize())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 分页查询分析记录
|
||||||
|
pub async fn list_analysis(
|
||||||
|
&self,
|
||||||
|
tenant_id: Uuid,
|
||||||
|
patient_id: Option<Uuid>,
|
||||||
|
analysis_type: Option<String>,
|
||||||
|
pagination: &Pagination,
|
||||||
|
) -> AiResult<(Vec<ai_analysis::Model>, u64)> {
|
||||||
|
let mut query = ai_analysis::Entity::find()
|
||||||
|
.filter(ai_analysis::Column::TenantId.eq(tenant_id))
|
||||||
|
.filter(ai_analysis::Column::DeletedAt.is_null());
|
||||||
|
|
||||||
|
if let Some(pid) = patient_id {
|
||||||
|
query = query.filter(ai_analysis::Column::PatientId.eq(pid));
|
||||||
|
}
|
||||||
|
if let Some(at) = &analysis_type {
|
||||||
|
query = query.filter(ai_analysis::Column::AnalysisType.eq(at.as_str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
let total = query.clone().count(&self.db).await?;
|
||||||
|
let items = query
|
||||||
|
.order_by_desc(ai_analysis::Column::CreatedAt)
|
||||||
|
.offset(pagination.offset())
|
||||||
|
.limit(pagination.limit())
|
||||||
|
.all(&self.db)
|
||||||
|
.await?;
|
||||||
|
Ok((items, total))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 获取单条分析记录
|
||||||
|
pub async fn get_analysis(
|
||||||
|
&self,
|
||||||
|
id: Uuid,
|
||||||
|
tenant_id: Uuid,
|
||||||
|
) -> AiResult<ai_analysis::Model> {
|
||||||
|
let model = ai_analysis::Entity::find_by_id(id)
|
||||||
|
.one(&self.db)
|
||||||
|
.await?
|
||||||
|
.ok_or_else(|| AiError::AnalysisNotFound(id.to_string()))?;
|
||||||
|
if model.tenant_id != tenant_id {
|
||||||
|
return Err(AiError::AnalysisNotFound(id.to_string()));
|
||||||
|
}
|
||||||
|
Ok(model)
|
||||||
|
}
|
||||||
|
|
||||||
async fn create_analysis_record(
|
async fn create_analysis_record(
|
||||||
&self,
|
&self,
|
||||||
id: Uuid,
|
id: Uuid,
|
||||||
|
|||||||
Reference in New Issue
Block a user