From bc5d9d10541664736b4454649ffb4f0255e165b3 Mon Sep 17 00:00:00 2001 From: imeepos Date: Tue, 15 Jul 2025 19:00:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/material_segment_view_service.rs | 35 ++++++-- .../data/repositories/material_repository.rs | 18 +++- apps/desktop/src-tauri/src/lib.rs | 1 + .../commands/database_commands.rs | 86 +++++++++++++++++++ 4 files changed, 127 insertions(+), 13 deletions(-) diff --git a/apps/desktop/src-tauri/src/business/services/material_segment_view_service.rs b/apps/desktop/src-tauri/src/business/services/material_segment_view_service.rs index 5fa9572..cdaf37b 100644 --- a/apps/desktop/src-tauri/src/business/services/material_segment_view_service.rs +++ b/apps/desktop/src-tauri/src/business/services/material_segment_view_service.rs @@ -33,27 +33,44 @@ impl MaterialSegmentViewService { /// 获取项目的MaterialSegment聚合视图 pub async fn get_project_segment_view(&self, project_id: &str) -> Result { + println!("🔍 开始获取项目片段视图,project_id: {}", project_id); + // 获取项目的所有素材 let materials = self.material_repository.get_by_project_id(project_id)?; - + println!("📁 获取到 {} 个素材", materials.len()); + + // 为每个素材加载片段信息 + let mut materials_with_segments = Vec::new(); + for mut material in materials { + let segments = self.material_repository.get_segments(&material.id)?; + println!("📄 素材 {} ({}) 有 {} 个片段", material.name, material.id, segments.len()); + material.segments = segments; + materials_with_segments.push(material); + } + // 获取所有模特信息 - let models = self.get_project_models(&materials).await?; - + let models = self.get_project_models(&materials_with_segments).await?; + println!("👤 获取到 {} 个模特", models.len()); + // 构建MaterialSegment聚合视图 let mut view = MaterialSegmentView::new(project_id.to_string()); - + // 收集所有片段和相关信息 - let segments_with_details = self.collect_segments_with_details(&materials, &models).await?; - + let segments_with_details = self.collect_segments_with_details(&materials_with_segments, &models).await?; + println!("🎬 收集到 {} 个片段详情", segments_with_details.len()); + // 按AI分类聚合 view.by_classification = self.group_by_classification(&segments_with_details); - + println!("🏷️ 按分类聚合:{} 个分类组", view.by_classification.len()); + // 按模特聚合 view.by_model = self.group_by_model(&segments_with_details); - + println!("👥 按模特聚合:{} 个模特组", view.by_model.len()); + // 计算统计信息 view.stats = self.calculate_stats(&segments_with_details); - + println!("📊 统计信息:总片段数 {}", view.stats.total_segments); + Ok(view) } diff --git a/apps/desktop/src-tauri/src/data/repositories/material_repository.rs b/apps/desktop/src-tauri/src/data/repositories/material_repository.rs index fcd849a..0c649a0 100644 --- a/apps/desktop/src-tauri/src/data/repositories/material_repository.rs +++ b/apps/desktop/src-tauri/src/data/repositories/material_repository.rs @@ -87,6 +87,8 @@ impl MaterialRepository { /// 根据项目ID获取所有素材 pub fn get_by_project_id(&self, project_id: &str) -> Result> { + println!("🔍 查询项目素材,project_id: {}", project_id); + let conn = self.database.get_connection(); let conn = conn.lock().unwrap(); @@ -103,9 +105,12 @@ impl MaterialRepository { let mut materials = Vec::new(); for material in material_iter { - materials.push(material?); + let material = material?; + println!("📄 找到素材: {} ({})", material.name, material.id); + materials.push(material); } + println!("📁 项目 {} 共找到 {} 个素材", project_id, materials.len()); Ok(materials) } @@ -216,9 +221,11 @@ impl MaterialRepository { /// 获取素材的所有片段 pub fn get_segments(&self, material_id: &str) -> Result> { + println!("🔍 查询素材片段,material_id: {}", material_id); + let conn = self.database.get_connection(); let conn = conn.lock().unwrap(); - + let mut stmt = conn.prepare( "SELECT id, material_id, segment_index, start_time, end_time, duration, file_path, file_size, created_at @@ -230,10 +237,13 @@ impl MaterialRepository { })?; let mut segments = Vec::new(); - for segment in segment_iter { - segments.push(segment?); + for (index, segment) in segment_iter.enumerate() { + let segment = segment?; + println!("🎬 找到片段 {}: {} (时长: {:.2}s)", index + 1, segment.id, segment.duration); + segments.push(segment); } + println!("📊 素材 {} 共找到 {} 个片段", material_id, segments.len()); Ok(segments) } diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs index 2a1711d..c3089f2 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/apps/desktop/src-tauri/src/lib.rs @@ -51,6 +51,7 @@ pub fn run() { commands::database_commands::force_release_database_connection, commands::database_commands::get_connection_pool_stats, commands::database_commands::test_connection_pool_init, + commands::database_commands::debug_database_data, commands::material_commands::import_materials, commands::material_commands::import_materials_async, commands::material_commands::select_material_folders, diff --git a/apps/desktop/src-tauri/src/presentation/commands/database_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/database_commands.rs index 686d4ab..0ea18ee 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/database_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/database_commands.rs @@ -70,3 +70,89 @@ pub fn test_connection_pool_init(_state: State) -> Result, project_id: String) -> Result { + let database_guard = state.database.lock().map_err(|e| format!("获取数据库失败: {}", e))?; + let database = database_guard.as_ref().ok_or("数据库未初始化")?; + + let conn = database.get_connection(); + let conn = conn.lock().map_err(|e| format!("获取连接失败: {}", e))?; + + let mut result = String::new(); + + // 检查项目表 + match conn.prepare("SELECT COUNT(*) FROM projects WHERE id = ?1") { + Ok(mut stmt) => { + match stmt.query_row([&project_id], |row| row.get::<_, i64>(0)) { + Ok(count) => result.push_str(&format!("项目记录数: {}\n", count)), + Err(e) => result.push_str(&format!("查询项目失败: {}\n", e)), + } + }, + Err(e) => result.push_str(&format!("准备项目查询失败: {}\n", e)), + } + + // 检查素材表 + match conn.prepare("SELECT COUNT(*) FROM materials WHERE project_id = ?1") { + Ok(mut stmt) => { + match stmt.query_row([&project_id], |row| row.get::<_, i64>(0)) { + Ok(count) => result.push_str(&format!("素材记录数: {}\n", count)), + Err(e) => result.push_str(&format!("查询素材失败: {}\n", e)), + } + }, + Err(e) => result.push_str(&format!("准备素材查询失败: {}\n", e)), + } + + // 检查片段表 + match conn.prepare("SELECT COUNT(*) FROM material_segments ms JOIN materials m ON ms.material_id = m.id WHERE m.project_id = ?1") { + Ok(mut stmt) => { + match stmt.query_row([&project_id], |row| row.get::<_, i64>(0)) { + Ok(count) => result.push_str(&format!("片段记录数: {}\n", count)), + Err(e) => result.push_str(&format!("查询片段失败: {}\n", e)), + } + }, + Err(e) => result.push_str(&format!("准备片段查询失败: {}\n", e)), + } + + // 列出素材详情 + match conn.prepare("SELECT id, name, processing_status, material_type FROM materials WHERE project_id = ?1 LIMIT 5") { + Ok(mut stmt) => { + result.push_str("\n素材详情(前5个):\n"); + match stmt.query_map([&project_id], |row| { + Ok(( + row.get::<_, String>(0)?, + row.get::<_, String>(1)?, + row.get::<_, String>(2)?, + row.get::<_, String>(3)?, + )) + }) { + Ok(rows) => { + for (i, row) in rows.enumerate() { + match row { + Ok((id, name, status, material_type)) => { + result.push_str(&format!(" {}. {} ({}) - 状态: {} - 类型: {}\n", i + 1, name, id, status, material_type)); + + // 查询每个素材的片段数量 + match conn.prepare("SELECT COUNT(*) FROM material_segments WHERE material_id = ?1") { + Ok(mut seg_stmt) => { + match seg_stmt.query_row([&id], |row| row.get::<_, i64>(0)) { + Ok(seg_count) => result.push_str(&format!(" 片段数: {}\n", seg_count)), + Err(e) => result.push_str(&format!(" 查询片段数失败: {}\n", e)), + } + }, + Err(e) => result.push_str(&format!(" 准备片段查询失败: {}\n", e)), + } + }, + Err(e) => result.push_str(&format!(" 解析素材行失败: {}\n", e)), + } + } + }, + Err(e) => result.push_str(&format!("查询素材详情失败: {}\n", e)), + } + }, + Err(e) => result.push_str(&format!("准备素材详情查询失败: {}\n", e)), + } + + Ok(result) +}