diff --git a/backend/app/service/ApprovalService.php b/backend/app/service/ApprovalService.php index 8e6e74b..e1b531c 100644 --- a/backend/app/service/ApprovalService.php +++ b/backend/app/service/ApprovalService.php @@ -280,20 +280,42 @@ class ApprovalService // 获取实际审批人的完整用户信息 $actualApproverUsers = []; + $actualApproverIdsArray = []; if (!empty($actualApproverIds)) { - $actualApproverUsers = User::whereIn('id', $actualApproverIds) - ->get() - ->keyBy('id') - ->toArray(); + $users = User::whereIn('id', $actualApproverIds)->get()->keyBy('id'); + foreach ($actualApproverIds as $approverId) { + if ($users->has($approverId)) { + $actualApproverUsers[$approverId] = $users->get($approverId)->toArray(); + } else { + // 用户不存在,至少保留ID信息 + $actualApproverUsers[$approverId] = [ + 'id' => $approverId, + 'name' => '用户' . $approverId . '(不存在)', + 'status' => 0, + ]; + } + $actualApproverIdsArray[] = (int)$approverId; + } } // 获取实际抄送人的完整用户信息 $actualCcUserObjects = []; + $actualCcUserIdsArray = []; if (!empty($actualCcUserIds)) { - $actualCcUserObjects = User::whereIn('id', $actualCcUserIds) - ->get() - ->keyBy('id') - ->toArray(); + $users = User::whereIn('id', $actualCcUserIds)->get()->keyBy('id'); + foreach ($actualCcUserIds as $ccUserId) { + if ($users->has($ccUserId)) { + $actualCcUserObjects[$ccUserId] = $users->get($ccUserId)->toArray(); + } else { + // 用户不存在,至少保留ID信息 + $actualCcUserObjects[$ccUserId] = [ + 'id' => $ccUserId, + 'name' => '用户' . $ccUserId . '(不存在)', + 'status' => 0, + ]; + } + $actualCcUserIdsArray[] = (int)$ccUserId; + } } // 处理节点信息,添加实际审批人 @@ -305,7 +327,7 @@ class ApprovalService // 为审批节点添加实际审批人信息 if (in_array($node->type, ['approver', 'and_approve', 'or_approve'])) { $nodeArray['actual_approvers'] = []; - foreach ($actualApproverIds as $approverId) { + foreach ($actualApproverIdsArray as $approverId) { if (isset($actualApproverUsers[$approverId])) { $nodeArray['actual_approvers'][] = $actualApproverUsers[$approverId]; } @@ -313,7 +335,7 @@ class ApprovalService // 获取每个实际审批人的审批状态 $nodeArray['approver_statuses'] = []; - foreach ($actualApproverIds as $approverId) { + foreach ($actualApproverIdsArray as $approverId) { $record = ApprovalRecord::where('order_id', $orderId) ->where('node_id', $node->id) ->where('approver_id', $approverId) @@ -334,7 +356,7 @@ class ApprovalService // 为通知节点添加实际抄送人 if ($node->type === 'notify') { $nodeArray['actual_cc_users'] = []; - foreach ($actualCcUserIds as $ccUserId) { + foreach ($actualCcUserIdsArray as $ccUserId) { if (isset($actualCcUserObjects[$ccUserId])) { $nodeArray['actual_cc_users'][] = $actualCcUserObjects[$ccUserId]; }