From d15baa97f52d3a53a2e29fd4521d215a3add16bc Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 22 Jan 2026 11:35:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8E=A5=E5=8D=95=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E9=A9=B3=E5=9B=9E=E4=BB=BB=E5=8A=A1=E6=97=B6=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E9=9C=80=E6=B1=82=E9=83=A8=E9=97=A8=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E8=B4=9F=E8=B4=A3=E4=BA=BA=E5=88=99=E9=80=80=E5=9B=9E=E7=BB=99?= =?UTF-8?q?=E5=8F=91=E8=B5=B7=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/TaskApprovalService.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/TaskApprovalService.java b/backend/src/main/java/com/designhub/service/TaskApprovalService.java index ea4db7b..89f870a 100644 --- a/backend/src/main/java/com/designhub/service/TaskApprovalService.java +++ b/backend/src/main/java/com/designhub/service/TaskApprovalService.java @@ -645,17 +645,25 @@ public class TaskApprovalService { Task task = getTaskForApproval(taskId, "pending_receiving_approval"); validateApprover(task, approverId, "receiving_leader"); - // 退回给需求部门负责人 + // 退回给需求部门负责人,如果没有负责人则退回给发起人 Department demandDept = departmentMapper.selectById(task.getPublisherDeptId()); - if (demandDept == null || demandDept.getLeaderId() == null) { - throw new BusinessException(ResultCode.PARAM_ERROR, "需求部门负责人不存在"); + Long targetApproverId = null; + String targetApproverRole = "demand_leader"; + + if (demandDept != null && demandDept.getLeaderId() != null) { + targetApproverId = demandDept.getLeaderId(); + } else { + // 一级需求部门可能没有负责人,退回给发起人 + targetApproverId = task.getPublisherId(); + targetApproverRole = "publisher"; + log.warn("需求部门{}没有负责人,任务退回给发起人{}", task.getPublisherDeptId(), task.getPublisherId()); } task.setApprovalStatus("rejected_by_receiving"); task.setStatus("draft"); task.setRejectReason(reason); // 保存驳回原因 - task.setCurrentApproverId(demandDept.getLeaderId()); - task.setCurrentApproverRole("demand_leader"); + task.setCurrentApproverId(targetApproverId); + task.setCurrentApproverRole(targetApproverRole); taskMapper.updateById(task); logApproval(taskId, approverId, 2, "reject", reason); @@ -670,8 +678,8 @@ public class TaskApprovalService { ); log.info("已通知任务发起人: publisherId={}", task.getPublisherId()); - // 2. 如果需求部门负责人不是发起人,也通知需求部门负责人 - if (!demandDept.getLeaderId().equals(task.getPublisherId())) { + // 2. 如果需求部门负责人存在且不是发起人,也通知需求部门负责人 + if (demandDept != null && demandDept.getLeaderId() != null && !demandDept.getLeaderId().equals(task.getPublisherId())) { notificationService.sendNotification( demandDept.getLeaderId(), "任务已被驳回",