From 48d1a84c77577f14f46de318afdb7d213008352c Mon Sep 17 00:00:00 2001 From: iven Date: Sat, 25 Apr 2026 22:53:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(ai):=20UsageService=20=E8=A1=A5=E5=85=A8?= =?UTF-8?q?=20get=5Foverview/get=5Fby=5Ftype=20=E8=81=9A=E5=90=88=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/erp-ai/src/service/usage.rs | 46 ++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/crates/erp-ai/src/service/usage.rs b/crates/erp-ai/src/service/usage.rs index 1c20d4b..644631d 100644 --- a/crates/erp-ai/src/service/usage.rs +++ b/crates/erp-ai/src/service/usage.rs @@ -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 { + 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::() + .one(&self.db) + .await? + .unwrap_or(UsageOverview { total_count: 0 }); + Ok(result) + } + + /// 按分析类型统计 + pub async fn get_by_type(&self, tenant_id: Uuid) -> AiResult> { + 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::() + .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, }