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) { // 一级需求任务明细完善后,进入接单部门审核流程(跳过需求部门审核,因为一级审核已通过)