diff --git a/apps/desktop/src-tauri/src/business/services/material_matching_service.rs b/apps/desktop/src-tauri/src/business/services/material_matching_service.rs index 3141c94..083030b 100644 --- a/apps/desktop/src-tauri/src/business/services/material_matching_service.rs +++ b/apps/desktop/src-tauri/src/business/services/material_matching_service.rs @@ -308,6 +308,44 @@ impl MaterialMatchingService { matching_duration_ms, ).await { Ok(saved_result) => { + // 创建素材使用记录 + println!("📝 创建素材使用记录..."); + let usage_requests: Vec = matching_result.matches + .iter() + .map(|segment_match| { + let usage_context = serde_json::json!({ + "match_score": segment_match.match_score, + "match_reason": segment_match.match_reason, + "material_name": segment_match.material_name, + "model_name": segment_match.model_name + }).to_string(); + + crate::data::models::material_usage::CreateMaterialUsageRecordRequest { + material_segment_id: segment_match.material_segment_id.clone(), + material_id: segment_match.material_segment.material_id.clone(), + project_id: matching_result.project_id.clone(), + template_matching_result_id: saved_result.id.clone(), + template_id: matching_result.template_id.clone(), + binding_id: matching_result.binding_id.clone(), + track_segment_id: segment_match.track_segment_id.clone(), + usage_type: crate::data::models::material_usage::MaterialUsageType::TemplateMatching, + usage_context: Some(usage_context), + } + }) + .collect(); + + if !usage_requests.is_empty() { + match self.material_usage_repo.create_usage_records_batch(usage_requests) { + Ok(usage_records) => { + println!("✅ 成功创建 {} 条素材使用记录", usage_records.len()); + } + Err(e) => { + eprintln!("⚠️ 创建素材使用记录失败: {},但匹配结果已保存", e); + // 不阻断主流程,只记录警告 + } + } + } + return Ok((matching_result, Some(saved_result))); } Err(e) => { @@ -1067,6 +1105,44 @@ impl MaterialMatchingService { 0, // 匹配耗时,这里简化为0 ).await?; + // 创建素材使用记录 + println!("📝 创建素材使用记录..."); + let usage_requests: Vec = matching_result.matches + .iter() + .map(|segment_match| { + let usage_context = serde_json::json!({ + "match_score": segment_match.match_score, + "match_reason": segment_match.match_reason, + "material_name": segment_match.material_name, + "model_name": segment_match.model_name + }).to_string(); + + crate::data::models::material_usage::CreateMaterialUsageRecordRequest { + material_segment_id: segment_match.material_segment_id.clone(), + material_id: segment_match.material_segment.material_id.clone(), + project_id: request.project_id.clone(), + template_matching_result_id: saved.id.clone(), + template_id: request.template_id.clone(), + binding_id: request.binding_id.clone(), + track_segment_id: segment_match.track_segment_id.clone(), + usage_type: crate::data::models::material_usage::MaterialUsageType::TemplateMatching, + usage_context: Some(usage_context), + } + }) + .collect(); + + if !usage_requests.is_empty() { + match self.material_usage_repo.create_usage_records_batch(usage_requests) { + Ok(usage_records) => { + println!("✅ 成功创建 {} 条素材使用记录", usage_records.len()); + } + Err(e) => { + eprintln!("⚠️ 创建素材使用记录失败: {},但匹配结果已保存", e); + // 不阻断主流程,只记录警告 + } + } + } + Some(saved) } else { None diff --git a/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs b/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs index 579e643..bb541ae 100644 --- a/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs +++ b/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs @@ -150,6 +150,7 @@ impl TemplateMatchingResultService { self.repository.create_failed_segment_results(&failed_segment_results)?; } + println!("✅ TemplateMatchingResultService::save_matching_result 完成,ID: {}", matching_result.id); Ok(matching_result) }