fix(task): 修复工作流切换时完成状态处理逻辑

- 恢复工作流切换时通过 $data['complete_at'] 设置完成状态,确保走统一处理入口
- 修复工作流切换时主任务完成状态校验被跳过的问题
- 修复工作流切换时 $updateMarking['is_update_project'] 未设置的问题
- checkAndAutoSetFlowItem 仅在用户单独提交 complete_at 时调用

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
This commit is contained in:
kuaifan 2026-01-22 07:34:09 +00:00
parent 37de721df9
commit 1ac6bad2bb

View File

@ -684,13 +684,13 @@ class ProjectTask extends AbstractModel
// 判断自动完成
if (!$this->complete_at) {
$flowData['complete_at'] = $this->complete_at;
$this->completeTask(Carbon::now(), $newFlowItem->name);
$data['complete_at'] = date("Y-m-d H:i");
}
} else {
// 判断自动打开
if ($this->complete_at) {
$flowData['complete_at'] = $this->complete_at;
$this->completeTask(null);
$data['complete_at'] = false;
}
}
$flowUserids = $newFlowItem->userids;
@ -740,7 +740,7 @@ class ProjectTask extends AbstractModel
])->save();
}
// 状态
if (Arr::exists($data, 'complete_at') && !Arr::exists($data, 'flow_item_id')) {
if (Arr::exists($data, 'complete_at')) {
// 子任务:主任务已完成时无法修改
if ($mainTask?->complete_at) {
throw new ApiException('主任务已完成,无法修改子任务状态');
@ -750,14 +750,22 @@ class ProjectTask extends AbstractModel
if ($this->complete_at) {
throw new ApiException('任务已完成');
}
$flowItemName = $this->checkAndAutoSetFlowItem('end', -4005);
// 只有用户单独提交 complete_at 时才自动设置工作流状态
if (!Arr::exists($data, 'flow_item_id')) {
$flowItemName = $this->checkAndAutoSetFlowItem('end', -4005);
} else {
$flowItemName = isset($newFlowItem) ? $newFlowItem->name : null;
}
$this->completeTask(Carbon::now(), $flowItemName);
} else {
// 标记未完成
if (!$this->complete_at) {
throw new ApiException('未完成任务');
}
$this->checkAndAutoSetFlowItem('start', -4006);
// 只有用户单独提交 complete_at 时才自动设置工作流状态
if (!Arr::exists($data, 'flow_item_id')) {
$this->checkAndAutoSetFlowItem('start', -4006);
}
$this->completeTask(null);
}
$updateMarking['is_update_project'] = true;