fix: 修复素材匹配时未加载片段信息的关键问题
## 问题根因 MaterialMatchingService中直接调用material_repo.get_by_project_id()方法, 该方法只返回素材基本信息,不包含segments字段,导致: 1. material.segments.is_empty()始终为true 2. 匹配逻辑创建虚拟片段,使用原始素材完整时长 3. 10.042秒的原始素材与1.267秒的模板片段比较,超出692.8% ## 解决方案 将所有调用material_repo.get_by_project_id()的地方改为: MaterialService::get_project_materials() 该方法会: 1. 调用repository.get_by_project_id()获取素材基本信息 2. 为每个素材调用repository.get_segments()加载片段信息 3. 返回包含完整片段信息的素材列表 ## 修改位置 1. match_materials方法 - 主要匹配逻辑 2. can_template_be_fully_matched方法 - 模板匹配检查 3. match_materials_with_used_segments方法 - 批量匹配逻辑 ## 预期效果 - material.segments不再为空 - 匹配逻辑使用真实的切分片段而不是虚拟片段 - 片段时长将是合理的切分后时长(如1-5秒)而不是原始素材时长 - 时长匹配评分将更加准确 这是一个关键修复,解决了匹配逻辑的根本问题。
This commit is contained in:
parent
7909a62e64
commit
92ff1ee962
|
|
@ -186,8 +186,11 @@ impl MaterialMatchingService {
|
|||
.await?
|
||||
.ok_or_else(|| anyhow!("模板不存在: {}", request.template_id))?;
|
||||
|
||||
// 获取项目的所有素材
|
||||
let project_materials = self.material_repo.get_by_project_id(&request.project_id)?;
|
||||
// 获取项目的所有素材(包含片段信息)
|
||||
let project_materials = crate::business::services::material_service::MaterialService::get_project_materials(
|
||||
&self.material_repo,
|
||||
&request.project_id
|
||||
)?;
|
||||
|
||||
// 获取所有素材的分类记录
|
||||
let mut classification_records = HashMap::new();
|
||||
|
|
@ -982,8 +985,11 @@ impl MaterialMatchingService {
|
|||
_ => return false,
|
||||
};
|
||||
|
||||
// 获取项目的所有素材
|
||||
let project_materials = match self.material_repo.get_by_project_id(project_id) {
|
||||
// 获取项目的所有素材(包含片段信息)
|
||||
let project_materials = match crate::business::services::material_service::MaterialService::get_project_materials(
|
||||
&self.material_repo,
|
||||
project_id
|
||||
) {
|
||||
Ok(materials) => materials,
|
||||
Err(_) => return false,
|
||||
};
|
||||
|
|
@ -1048,8 +1054,11 @@ impl MaterialMatchingService {
|
|||
.await?
|
||||
.ok_or_else(|| anyhow!("模板不存在: {}", request.template_id))?;
|
||||
|
||||
// 获取项目的所有素材
|
||||
let project_materials = self.material_repo.get_by_project_id(&request.project_id)?;
|
||||
// 获取项目的所有素材(包含片段信息)
|
||||
let project_materials = crate::business::services::material_service::MaterialService::get_project_materials(
|
||||
&self.material_repo,
|
||||
&request.project_id
|
||||
)?;
|
||||
|
||||
// 获取所有素材的分类记录
|
||||
let mut classification_records = HashMap::new();
|
||||
|
|
|
|||
Loading…
Reference in New Issue