fix: 修复素材查询
This commit is contained in:
parent
0ea1b2cd38
commit
bc5d9d1054
|
|
@ -33,27 +33,44 @@ impl MaterialSegmentViewService {
|
|||
|
||||
/// 获取项目的MaterialSegment聚合视图
|
||||
pub async fn get_project_segment_view(&self, project_id: &str) -> Result<MaterialSegmentView> {
|
||||
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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -87,6 +87,8 @@ impl MaterialRepository {
|
|||
|
||||
/// 根据项目ID获取所有素材
|
||||
pub fn get_by_project_id(&self, project_id: &str) -> Result<Vec<Material>> {
|
||||
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<Vec<MaterialSegment>> {
|
||||
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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -70,3 +70,89 @@ pub fn test_connection_pool_init(_state: State<AppState>) -> Result<String, Stri
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 调试数据库数据
|
||||
#[tauri::command]
|
||||
pub fn debug_database_data(state: State<AppState>, project_id: String) -> Result<String, String> {
|
||||
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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue