feat(ai): UsageService 补全 get_overview/get_by_type 聚合方法

This commit is contained in:
iven
2026-04-25 22:53:56 +08:00
parent 2a8c707f6d
commit 48d1a84c77

View File

@@ -1,7 +1,7 @@
use sea_orm::ActiveModelTrait;
use sea_orm::Set;
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, FromQueryResult, QueryFilter, QuerySelect, Set};
use uuid::Uuid;
use crate::entity::ai_analysis;
use crate::entity::ai_usage;
use crate::error::AiResult;
@@ -42,4 +42,46 @@ impl UsageService {
};
Ok(active.insert(&self.db).await?)
}
/// 用量概览
pub async fn get_overview(&self, tenant_id: Uuid) -> AiResult<UsageOverview> {
let result = ai_analysis::Entity::find()
.filter(ai_analysis::Column::TenantId.eq(tenant_id))
.filter(ai_analysis::Column::Status.eq("completed"))
.filter(ai_analysis::Column::DeletedAt.is_null())
.select_only()
.column_as(ai_analysis::Column::Id.count(), "total_count")
.into_model::<UsageOverview>()
.one(&self.db)
.await?
.unwrap_or(UsageOverview { total_count: 0 });
Ok(result)
}
/// 按分析类型统计
pub async fn get_by_type(&self, tenant_id: Uuid) -> AiResult<Vec<TypeCount>> {
let result = ai_analysis::Entity::find()
.filter(ai_analysis::Column::TenantId.eq(tenant_id))
.filter(ai_analysis::Column::Status.eq("completed"))
.filter(ai_analysis::Column::DeletedAt.is_null())
.select_only()
.column(ai_analysis::Column::AnalysisType)
.column_as(ai_analysis::Column::Id.count(), "count")
.group_by(ai_analysis::Column::AnalysisType)
.into_model::<TypeCount>()
.all(&self.db)
.await?;
Ok(result)
}
}
#[derive(Debug, FromQueryResult)]
pub struct UsageOverview {
pub total_count: i64,
}
#[derive(Debug, FromQueryResult)]
pub struct TypeCount {
pub analysis_type: String,
pub count: i64,
}