fix:修复全新生成大纲章节重复问题
This commit is contained in:
+26
-13
@@ -508,23 +508,23 @@ async def _generate_new_outline(
|
|||||||
outline_data = _parse_ai_response(ai_content)
|
outline_data = _parse_ai_response(ai_content)
|
||||||
|
|
||||||
# 全新生成模式:删除旧大纲和关联的所有章节
|
# 全新生成模式:删除旧大纲和关联的所有章节
|
||||||
logger.info(f"全新生成:删除项目 {project.id} 的旧大纲和章节")
|
logger.info(f"全新生成:删除项目 {project.id} 的旧大纲和章节(outline_mode: {project.outline_mode})")
|
||||||
|
|
||||||
from sqlalchemy import delete as sql_delete
|
from sqlalchemy import delete as sql_delete
|
||||||
|
|
||||||
# 无论是一对一还是一对多模式,都删除所有项目的章节
|
# 先删除所有旧章节(无论是一对一还是一对多模式)
|
||||||
# 一对一模式:通过 chapter_number 关联
|
|
||||||
# 一对多模式:通过 outline_id 关联
|
|
||||||
delete_result = await db.execute(
|
delete_result = await db.execute(
|
||||||
sql_delete(Chapter).where(Chapter.project_id == project.id)
|
sql_delete(Chapter).where(Chapter.project_id == project.id)
|
||||||
)
|
)
|
||||||
deleted_chapters_count = delete_result.rowcount
|
deleted_chapters_count = delete_result.rowcount
|
||||||
logger.info(f"全新生成:删除了 {deleted_chapters_count} 个旧章节")
|
logger.info(f"✅ 全新生成:删除了 {deleted_chapters_count} 个旧章节")
|
||||||
|
|
||||||
# 删除旧大纲
|
# 再删除所有旧大纲
|
||||||
await db.execute(
|
delete_outline_result = await db.execute(
|
||||||
delete(Outline).where(Outline.project_id == project.id)
|
sql_delete(Outline).where(Outline.project_id == project.id)
|
||||||
)
|
)
|
||||||
|
deleted_outlines_count = delete_outline_result.rowcount
|
||||||
|
logger.info(f"✅ 全新生成:删除了 {deleted_outlines_count} 个旧大纲")
|
||||||
|
|
||||||
# 保存新大纲
|
# 保存新大纲
|
||||||
outlines = await _save_outlines(
|
outlines = await _save_outlines(
|
||||||
@@ -1118,12 +1118,25 @@ async def new_outline_generator(
|
|||||||
# 解析响应
|
# 解析响应
|
||||||
outline_data = _parse_ai_response(ai_content)
|
outline_data = _parse_ai_response(ai_content)
|
||||||
|
|
||||||
# 删除旧大纲(章节不自动删除,由用户手动管理)
|
# 全新生成模式:删除旧大纲和关联的所有章节
|
||||||
yield await SSEResponse.send_progress("清理旧大纲...", 75)
|
yield await SSEResponse.send_progress("清理旧大纲和章节...", 75)
|
||||||
logger.info(f"删除项目 {project_id} 的旧大纲")
|
logger.info(f"全新生成:删除项目 {project_id} 的旧大纲和章节(outline_mode: {project.outline_mode})")
|
||||||
await db.execute(
|
|
||||||
delete(Outline).where(Outline.project_id == project_id)
|
from sqlalchemy import delete as sql_delete
|
||||||
|
|
||||||
|
# 先删除所有旧章节
|
||||||
|
delete_chapters_result = await db.execute(
|
||||||
|
sql_delete(Chapter).where(Chapter.project_id == project_id)
|
||||||
)
|
)
|
||||||
|
deleted_chapters_count = delete_chapters_result.rowcount
|
||||||
|
logger.info(f"✅ 全新生成:删除了 {deleted_chapters_count} 个旧章节")
|
||||||
|
|
||||||
|
# 再删除所有旧大纲
|
||||||
|
delete_outlines_result = await db.execute(
|
||||||
|
sql_delete(Outline).where(Outline.project_id == project_id)
|
||||||
|
)
|
||||||
|
deleted_outlines_count = delete_outlines_result.rowcount
|
||||||
|
logger.info(f"✅ 全新生成:删除了 {deleted_outlines_count} 个旧大纲")
|
||||||
|
|
||||||
# 保存新大纲
|
# 保存新大纲
|
||||||
yield await SSEResponse.send_progress("💾 保存大纲到数据库...", 80)
|
yield await SSEResponse.send_progress("💾 保存大纲到数据库...", 80)
|
||||||
|
|||||||
Reference in New Issue
Block a user