From 20e7ede2d5edbf8eedea0fb5d9e5610721d50a0b Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 26 Jan 2026 18:51:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E7=BA=A7?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E4=BB=BB=E5=8A=A1=E6=98=8E=E7=BB=86=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E5=90=8E=E5=86=8D=E6=AC=A1=E7=BC=96=E8=BE=91=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E9=87=8D=E6=96=B0=E5=90=AF=E5=8A=A8=E4=B8=80=E7=BA=A7?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题描述: - 一级需求任务在明细完善后被再次编辑时,如果approval_status为null - 系统无法识别一级审批已通过,导致任务被重新设为pending_primary_approval - 需求部门负责人需要再次审批并指定明细完善人 解决方案: - 在updatePipelineTask方法中增强判断逻辑 - 通过查询审批日志(approve_primary记录)判断一级审批是否已通过 - 如果已通过,直接进入接单部门审核流程,跳过重复的一级审批 新增方法: - TaskApprovalService.hasPrimaryApprovalPassed() - 检查一级审批是否已通过 --- .../designhub/service/TaskApprovalService.java | 16 ++++++++++++++++ .../com/designhub/service/TaskService.java | 18 +++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/TaskApprovalService.java b/backend/src/main/java/com/designhub/service/TaskApprovalService.java index 3ae710a..bf46c17 100644 --- a/backend/src/main/java/com/designhub/service/TaskApprovalService.java +++ b/backend/src/main/java/com/designhub/service/TaskApprovalService.java @@ -1165,6 +1165,22 @@ public class TaskApprovalService { this.log.error("记录审核日志失败", e); } } + + /** + * 检查一级需求任务的一级审批是否已通过 + * 用于判断任务在明细完善后再次编辑时,是否应该跳过一级审批 + * @param taskId 任务ID + * @return true 如果一级审批已通过 + */ + public boolean hasPrimaryApprovalPassed(Long taskId) { + // 查询是否有 approve_primary 的审批日志记录 + Long count = approvalLogMapper.selectCount( + new LambdaQueryWrapper() + .eq(TaskApprovalLog::getTaskId, taskId) + .eq(TaskApprovalLog::getAction, "approve_primary") + ); + return count != null && count > 0; + } /** * 格式化预估工时显示(基于工作时间配置) diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index ecb7ad6..8f4e5a8 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -1993,10 +1993,22 @@ public class TaskService { // 因为一级审核已经通过了,不需要再次进入一级审核流程 boolean isPrimaryTask = existTask.getIsPrimaryTask() != null && existTask.getIsPrimaryTask() == 1; boolean wasPendingDetailCompletion = "pending_detail_completion".equals(approvalStatus); - boolean isPrimaryTaskDetailCompletion = isPrimaryTask && wasPendingDetailCompletion; - log.info("判断明细完善条件: taskId={}, isPrimaryTask={}, approvalStatus={}, isPrimaryTaskDetailCompletion={}", - id, isPrimaryTask, approvalStatus, isPrimaryTaskDetailCompletion); + // 🔥 增强判断:如果 approvalStatus 为 null 或其他状态,但一级审批已通过(审批日志中有 approve_primary 记录) + // 则应该直接进入接单部门审核流程,而不是重新启动一级审批 + boolean primaryApprovalPassed = false; + if (isPrimaryTask && !wasPendingDetailCompletion) { + // 检查审批日志,判断一级审批是否已通过 + primaryApprovalPassed = taskApprovalService.hasPrimaryApprovalPassed(id); + if (primaryApprovalPassed) { + log.info("一级需求任务一级审批已通过(通过审批日志判断): taskId={}", id); + } + } + + boolean isPrimaryTaskDetailCompletion = isPrimaryTask && (wasPendingDetailCompletion || primaryApprovalPassed); + + log.info("判断明细完善条件: taskId={}, isPrimaryTask={}, approvalStatus={}, wasPendingDetailCompletion={}, primaryApprovalPassed={}, isPrimaryTaskDetailCompletion={}", + id, isPrimaryTask, approvalStatus, wasPendingDetailCompletion, primaryApprovalPassed, isPrimaryTaskDetailCompletion); if (isPrimaryTaskDetailCompletion) { // 一级需求任务明细完善后,进入接单部门审核流程(跳过需求部门审核,因为一级审核已通过)