fix: 修复指派模式流水线任务审核通过后状态未正确更新为in_progress的BUG

This commit is contained in:
Your Name 2026-01-08 16:01:35 +08:00
parent 7b92476bc5
commit b7038e8531
2 changed files with 62 additions and 2 deletions

View File

@ -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字段控制可见性

View File

@ -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<TaskItem> taskItems = taskItemMapper.selectList(
new LambdaQueryWrapper<TaskItem>()
.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());
}
}
}
}
}