修复项目删除失败问题

- 改进项目删除逻辑,允许删除已完成项目的所有任务
- 对于已完成或失败的项目,即使有标记为运行中的任务也允许删除
- 解决数据不一致导致的删除失败问题
- 保持对正在处理项目的保护机制
This commit is contained in:
Kris Ka
2025-09-15 15:02:36 +08:00
parent a6f180f535
commit 45efda4e2a

View File

@@ -233,15 +233,25 @@ class ProjectService(BaseService[Project, ProjectCreate, ProjectUpdate, ProjectR
logger.info(f"开始删除项目 {project_id}: {project.name}")
# 检查是否有正在运行的任务
running_tasks = self.db.query(Task).filter(
Task.project_id == project_id,
Task.status == TaskStatus.RUNNING
).count()
if running_tasks > 0:
logger.warning(f"项目 {project_id}{running_tasks} 个正在运行的任务,无法删除")
return False
# 检查是否有正在运行的任务(只对非完成状态的项目进行检查)
if project.status not in ["completed", "failed"]:
running_tasks = self.db.query(Task).filter(
Task.project_id == project_id,
Task.status == TaskStatus.RUNNING
).count()
if running_tasks > 0:
logger.warning(f"项目 {project_id}{running_tasks} 个正在运行的任务,无法删除")
return False
else:
# 对于已完成或失败的项目,记录任务状态但不阻止删除
running_tasks = self.db.query(Task).filter(
Task.project_id == project_id,
Task.status == TaskStatus.RUNNING
).count()
if running_tasks > 0:
logger.info(f"项目 {project_id} 已完成,但仍有 {running_tasks} 个标记为运行中的任务,将一并删除")
# 开始事务(如果还没有开始的话)
if not self.db.in_transaction():