From 45efda4e2a186c8bec4d3bcf3e99797b28279f7f Mon Sep 17 00:00:00 2001 From: Kris Ka Date: Mon, 15 Sep 2025 15:02:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A1=B9=E7=9B=AE=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 改进项目删除逻辑,允许删除已完成项目的所有任务 - 对于已完成或失败的项目,即使有标记为运行中的任务也允许删除 - 解决数据不一致导致的删除失败问题 - 保持对正在处理项目的保护机制 --- backend/services/project_service.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/backend/services/project_service.py b/backend/services/project_service.py index 6992ce4c..7b833ddb 100644 --- a/backend/services/project_service.py +++ b/backend/services/project_service.py @@ -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():