修复爆款开头复刻/拆镜复刻软删步骤时未处理生成资源|素材云记录追加资源数据ID

This commit is contained in:
2026-06-24 11:54:37 +08:00
parent ddaa64aef0
commit 9b1a88d131
6 changed files with 182 additions and 24 deletions
@@ -195,6 +195,35 @@ async def create_module_step(
return step
def _clear_project_final_resources_by_deleted_steps(
project: ModuleGenerationProject,
*,
deleted_step_codes: set[str],
config: ModuleGenerationFlowConfig,
) -> list[str]:
"""根据被软删的步骤,清空项目表中对应的最终资源字段。
第 3 步图片生成被软删时,下游第 5 步视频也基于旧图片失效,所以图片、视频、封面都要清空。
第 5 步视频生成被软删时,只清空视频和封面,保留第 3 步图片结果。
"""
cleared_fields: list[str] = []
def clear_field(field_name: str) -> None:
if getattr(project, field_name, None):
cleared_fields.append(field_name)
setattr(project, field_name, None)
if config.image_generate_step_code in deleted_step_codes:
clear_field("final_image_url")
clear_field("final_video_url")
clear_field("final_video_cover_url")
elif config.video_generate_step_code in deleted_step_codes:
clear_field("final_video_url")
clear_field("final_video_cover_url")
return cleared_fields
async def soft_delete_steps_from_index(
db: AsyncSession,
*,
@@ -217,6 +246,13 @@ async def soft_delete_steps_from_index(
.with_for_update()
)
steps = list(result.scalars().all())
deleted_step_codes = {step.step_code for step in steps}
cleared_project_fields = _clear_project_final_resources_by_deleted_steps(
project,
deleted_step_codes=deleted_step_codes,
config=config,
)
for step in steps:
step.is_current = False
step.deleted_at = deleted_at
@@ -245,7 +281,11 @@ async def soft_delete_steps_from_index(
project=project,
event_type=ModuleEventTypeEnum.SOFT_DELETE_STEPS.value,
message=f"软删除第 {start_index} 步及之后的旧子任务",
detail={"step_ids": [step.id for step in steps]},
detail={
"step_ids": [step.id for step in steps],
"step_codes": [step.step_code for step in steps],
"cleared_project_fields": cleared_project_fields,
},
)
return steps