From b7038e853166ef6eb9e14c041b39f2e010e1a012 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 8 Jan 2026 16:01:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8C=87=E6=B4=BE?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E6=B5=81=E6=B0=B4=E7=BA=BF=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E9=80=9A=E8=BF=87=E5=90=8E=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=9C=AA=E6=AD=A3=E7=A1=AE=E6=9B=B4=E6=96=B0=E4=B8=BAin=5Fprog?= =?UTF-8?q?ress=E7=9A=84BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/TaskApprovalService.java | 19 +++++++- .../com/designhub/service/TaskService.java | 45 +++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/TaskApprovalService.java b/backend/src/main/java/com/designhub/service/TaskApprovalService.java index aa4e712..650c113 100644 --- a/backend/src/main/java/com/designhub/service/TaskApprovalService.java +++ b/backend/src/main/java/com/designhub/service/TaskApprovalService.java @@ -843,8 +843,23 @@ public class TaskApprovalService { // recruitment模式:发布到任务大厅 task.setStatus("pending"); } else if ("assigned".equals(task.getReleaseType()) && task.getReceiverId() != null) { - // assigned模式:如果指定了接收人,状态已经是in_progress(在approveDemandLevel中已设置) - // 这里不需要再次设置 + // assigned模式:如果指定了接收人,主任务直接进入进行中状态 + task.setStatus("in_progress"); + LocalDateTime now = LocalDateTime.now(); + task.setStartTime(now); + task.setActualStartTime(now); + + // 重新计算deadline:从接单时间开始计算 + if (task.getEstimatedHours() != null) { + int hours = task.getEstimatedHours().intValue(); + if (hours > 0) { + task.setDeadline(now.plusHours(hours)); + } + } + + // 更新子任务状态为in_progress(第一组或全部,取决于流水线模式) + taskService.updatePipelineSubTasksForAssigned(task.getId(), dto.getPipelineMode()); + log.info("指派流水线任务已设置为进行中:taskId={}, receiverId={}", task.getId(), task.getReceiverId()); } else { // default模式或其他模式:流水线任务的主任务状态设置为pending // 子任务会根据is_locked字段控制可见性 diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index 2972beb..cdda9cb 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -2422,5 +2422,50 @@ public class TaskService { // TODO: 实现流水线子任务拆分逻辑 // 可以参考createPipelineTask方法中的实现 } + + /** + * 更新指派模式流水线任务的子任务状态为in_progress + * @param taskId 主任务ID + * @param pipelineMode 流水线模式:sequential(顺序)或 parallel(并行) + */ + public void updatePipelineSubTasksForAssigned(Long taskId, String pipelineMode) { + log.info("更新指派流水线任务的子任务状态:taskId={}, mode={}", taskId, pipelineMode); + + List taskItems = taskItemMapper.selectList( + new LambdaQueryWrapper() + .eq(TaskItem::getTaskId, taskId) + .orderByAsc(TaskItem::getGroupNo) + ); + + if (taskItems.isEmpty()) { + log.warn("未找到任务的子任务:taskId={}", taskId); + return; + } + + LocalDateTime now = LocalDateTime.now(); + + if ("parallel".equals(pipelineMode)) { + // 并行模式:所有子任务都进入in_progress状态 + for (TaskItem item : taskItems) { + item.setStatus("in_progress"); + item.setIsLocked(0); + item.setActualStartTime(now); + taskItemMapper.updateById(item); + } + log.info("并行流水线任务的所有子任务已更新为in_progress:count={}", taskItems.size()); + } else { + // 顺序模式:只有第一组进入in_progress状态 + Integer firstGroupNo = taskItems.get(0).getGroupNo(); + for (TaskItem item : taskItems) { + if (item.getGroupNo().equals(firstGroupNo)) { + item.setStatus("in_progress"); + item.setIsLocked(0); + item.setActualStartTime(now); + taskItemMapper.updateById(item); + log.info("顺序流水线任务第一组子任务已更新为in_progress:itemId={}", item.getId()); + } + } + } + } }