diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index 5aca1ff..de76c93 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -1847,7 +1847,8 @@ public class TaskService { } User editor = userService.getUserById(userId); - Department publisherDept = resolvePublisherDeptForTaskUpdate(existTask, task.getPublisherDeptId(), editor, isAdmin); + boolean allowDeptOverride = isAdmin || userId.equals(existTask.getPublisherId()); + Department publisherDept = resolvePublisherDeptForTaskUpdate(existTask, task.getPublisherDeptId(), editor, isAdmin, allowDeptOverride); task.setPublisherDeptId(publisherDept.getId()); task.setId(id); @@ -1975,7 +1976,8 @@ public class TaskService { // 检查部门积分是否充足(管理员跳过积分检查,一级需求部门无明细提交场景跳过) User user = userService.getUserById(userId); - Department publisherDept = resolvePublisherDeptForTaskUpdate(existTask, dto.getPublisherDeptId(), user, isAdmin); + boolean allowDeptOverride = isAdmin || userId.equals(existTask.getPublisherId()); + Department publisherDept = resolvePublisherDeptForTaskUpdate(existTask, dto.getPublisherDeptId(), user, isAdmin, allowDeptOverride); existTask.setPublisherDeptId(publisherDept.getId()); if (!isAdmin && !allowPrimaryTaskWithoutItems && publisherDept.getId() != null) { if (!teamScorePoolService.checkBalance(publisherDept.getId(), totalScoreInt)) { @@ -2097,12 +2099,16 @@ public class TaskService { log.info("流水线任务更新成功: taskId={}, userId={}", id, userId); } - private Department resolvePublisherDeptForTaskUpdate(Task existTask, Long requestedDeptId, User editor, boolean isAdmin) { - if (editor != null && requestedDeptId != null) { - return resolvePublishingDepartment(editor, requestedDeptId, isAdmin); + private Department resolvePublisherDeptForTaskUpdate(Task existTask, Long requestedDeptId, User editor, boolean isAdmin, boolean allowDeptOverride) { + if (allowDeptOverride && editor != null && requestedDeptId != null) { + try { + return resolvePublishingDepartment(editor, requestedDeptId, isAdmin); + } catch (BusinessException ex) { + log.info("任务 {} 指定的发起部门 {} 无法继续使用,改为自动解析: {}", existTask.getId(), requestedDeptId, ex.getMessage()); + } } - if (editor != null && (isAdmin || editor.getId().equals(existTask.getPublisherId()))) { + if (allowDeptOverride && editor != null) { try { return resolvePublishingDepartment(editor, existTask.getPublisherDeptId(), isAdmin); } catch (BusinessException ex) { @@ -2110,6 +2116,10 @@ public class TaskService { } } + if (!allowDeptOverride && requestedDeptId != null && !requestedDeptId.equals(existTask.getPublisherDeptId())) { + log.info("任务 {} 由非发布人编辑,忽略前端传入的发起部门 {},继续沿用任务归属部门", existTask.getId(), requestedDeptId); + } + Department fallbackDept = resolveDisplayPublisherDept(existTask); if (fallbackDept != null) { return fallbackDept; diff --git a/frontend/src/views/CreateTask.vue b/frontend/src/views/CreateTask.vue index 1e46886..ed68d6e 100644 --- a/frontend/src/views/CreateTask.vue +++ b/frontend/src/views/CreateTask.vue @@ -8,17 +8,17 @@