fix: 修复跨项目移动任务时子任务工作流状态未更新的问题

跨项目移动任务时,子任务的 flow_item_id 和 flow_item_name 没有被正确更新,
  导致子任务在新项目中显示的工作流状态与新项目的工作流不匹配。
This commit is contained in:
kuaifan 2026-01-13 10:50:42 +00:00
parent 22926e19cd
commit 47c53a18fa

View File

@ -1960,11 +1960,51 @@ class ProjectTask extends AbstractModel
$taskUser->save(); $taskUser->save();
} }
} }
// 子任务 // 子任务 - 根据完成状态映射工作流
ProjectTask::whereParentId($this->id)->change([ $subTasks = ProjectTask::whereParentId($this->id)->get();
'project_id' => $projectId, if ($subTasks->isNotEmpty()) {
'column_id' => $columnId, // 获取新项目的工作流状态
]); $newProjectFlow = ProjectFlow::whereProjectId($projectId)->orderByDesc('id')->first();
$startFlowItem = null;
$endFlowItem = null;
if ($newProjectFlow) {
$flowItems = ProjectFlowItem::whereFlowId($newProjectFlow->id)->orderBy('sort')->get();
foreach ($flowItems as $item) {
if ($item->status == 'start' && !$startFlowItem) {
$startFlowItem = $item;
}
if ($item->status == 'end' && !$endFlowItem) {
$endFlowItem = $item;
}
}
}
// 更新每个子任务
foreach ($subTasks as $subTask) {
$subTask->project_id = $projectId;
$subTask->column_id = $columnId;
// 根据完成状态映射工作流
if ($subTask->complete_at) {
// 已完成 -> end 状态
if ($endFlowItem) {
$subTask->flow_item_id = $endFlowItem->id;
$subTask->flow_item_name = $endFlowItem->status . '|' . $endFlowItem->name . '|' . $endFlowItem->color;
} else {
$subTask->flow_item_id = 0;
$subTask->flow_item_name = '';
}
} else {
// 未完成 -> start 状态
if ($startFlowItem) {
$subTask->flow_item_id = $startFlowItem->id;
$subTask->flow_item_name = $startFlowItem->status . '|' . $startFlowItem->name . '|' . $startFlowItem->color;
} else {
$subTask->flow_item_id = 0;
$subTask->flow_item_name = '';
}
}
$subTask->save();
}
}
// //
if ($flowItemId) { if ($flowItemId) {
// 更新任务流程 // 更新任务流程