From fac68333a7726f173d4c7778f7bbc656b816d0cd Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 3 Jan 2026 11:54:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=97=B6=E6=95=88=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=20-=20?= =?UTF-8?q?=E4=BB=8E=E6=8E=A5=E5=8D=95=E6=97=B6=E5=BC=80=E5=A7=8B=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - 任务时效(deadline)应该从设计师接单时开始计算 - 而不是从任务创建或审核通过时计算 修改内容: 1. TaskService.grabTask() - 无论任务之前是否有deadline - 抢单时都重新计算deadline - 从接单时间(now)开始 + estimatedHours - 添加详细日志记录 2. TaskApprovalService.approveReceivingLevel() - 接单部门负责人指定设计师时 - 重新计算deadline - 从指定时间(now)开始 + estimatedHours - 添加详细日志记录 3. TaskApprovalService.approveDemandLevel() - assigned模式下已有正确逻辑 - 从分配时间开始计算deadline - 保持不变 计算逻辑: - deadline = 接单时间 + estimatedHours(小时) - 如果estimatedHours为空或0,不设置deadline - 记录详细日志便于排查 影响范围: - 设计师抢单:✅ 重新计算 - 负责人指派:✅ 重新计算 - 需求部门指定:✅ 已有逻辑 - 发布到大厅:❌ 不设置(等待接单后计算) 示例: - 任务预估8小时 - 设计师12:00接单 - deadline = 12:00 + 8小时 = 20:00 --- .../designhub/service/TaskApprovalService.java | 15 +++++++++++++-- .../java/com/designhub/service/TaskService.java | 7 +++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/TaskApprovalService.java b/backend/src/main/java/com/designhub/service/TaskApprovalService.java index 9fe1e89..463644a 100644 --- a/backend/src/main/java/com/designhub/service/TaskApprovalService.java +++ b/backend/src/main/java/com/designhub/service/TaskApprovalService.java @@ -226,8 +226,19 @@ public class TaskApprovalService { // 普通任务:根据是否指定接收人设置状态 if (assignedReceiverId != null) { task.setStatus("in_progress"); // 指定接单直接进入进行中状态 - task.setStartTime(LocalDateTime.now()); - task.setActualStartTime(LocalDateTime.now()); + 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)); + log.info("任务deadline已重新计算:从指定接单时间 {} 开始,预估 {} 小时,截止时间 {}", + now, hours, task.getDeadline()); + } + } } else { task.setStatus("pending"); // 未指定则发布到大厅 } diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index ea405bc..10bbcdc 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -767,11 +767,14 @@ public class TaskService { } LocalDateTime now = LocalDateTime.now(); - LocalDateTime deadline = task.getDeadline(); - if (deadline == null && task.getEstimatedHours() != null) { + // 重新计算deadline:从接单时间开始计算,无论之前是否有deadline + LocalDateTime deadline = null; + if (task.getEstimatedHours() != null) { int hours = task.getEstimatedHours().intValue(); if (hours > 0) { deadline = now.plusHours(hours); + log.info("任务deadline已重新计算:从接单时间 {} 开始,预估 {} 小时,截止时间 {}", + now, hours, deadline); } }