fix: 修复审批详情显示问题

- 修复用户不存在时仍然显示审批人ID的问题
- 即使部分用户不存在,也保留其ID信息显示
- 优化审批人和抄送人的查询逻辑

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-03-01 10:21:15 +08:00
parent 3ebbbefb8d
commit 78a1921f06
+33 -11
View File
@@ -280,20 +280,42 @@ class ApprovalService
// 获取实际审批人的完整用户信息 // 获取实际审批人的完整用户信息
$actualApproverUsers = []; $actualApproverUsers = [];
$actualApproverIdsArray = [];
if (!empty($actualApproverIds)) { if (!empty($actualApproverIds)) {
$actualApproverUsers = User::whereIn('id', $actualApproverIds) $users = User::whereIn('id', $actualApproverIds)->get()->keyBy('id');
->get() foreach ($actualApproverIds as $approverId) {
->keyBy('id') if ($users->has($approverId)) {
->toArray(); $actualApproverUsers[$approverId] = $users->get($approverId)->toArray();
} else {
// 用户不存在,至少保留ID信息
$actualApproverUsers[$approverId] = [
'id' => $approverId,
'name' => '用户' . $approverId . '(不存在)',
'status' => 0,
];
}
$actualApproverIdsArray[] = (int)$approverId;
}
} }
// 获取实际抄送人的完整用户信息 // 获取实际抄送人的完整用户信息
$actualCcUserObjects = []; $actualCcUserObjects = [];
$actualCcUserIdsArray = [];
if (!empty($actualCcUserIds)) { if (!empty($actualCcUserIds)) {
$actualCcUserObjects = User::whereIn('id', $actualCcUserIds) $users = User::whereIn('id', $actualCcUserIds)->get()->keyBy('id');
->get() foreach ($actualCcUserIds as $ccUserId) {
->keyBy('id') if ($users->has($ccUserId)) {
->toArray(); $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'])) { if (in_array($node->type, ['approver', 'and_approve', 'or_approve'])) {
$nodeArray['actual_approvers'] = []; $nodeArray['actual_approvers'] = [];
foreach ($actualApproverIds as $approverId) { foreach ($actualApproverIdsArray as $approverId) {
if (isset($actualApproverUsers[$approverId])) { if (isset($actualApproverUsers[$approverId])) {
$nodeArray['actual_approvers'][] = $actualApproverUsers[$approverId]; $nodeArray['actual_approvers'][] = $actualApproverUsers[$approverId];
} }
@@ -313,7 +335,7 @@ class ApprovalService
// 获取每个实际审批人的审批状态 // 获取每个实际审批人的审批状态
$nodeArray['approver_statuses'] = []; $nodeArray['approver_statuses'] = [];
foreach ($actualApproverIds as $approverId) { foreach ($actualApproverIdsArray as $approverId) {
$record = ApprovalRecord::where('order_id', $orderId) $record = ApprovalRecord::where('order_id', $orderId)
->where('node_id', $node->id) ->where('node_id', $node->id)
->where('approver_id', $approverId) ->where('approver_id', $approverId)
@@ -334,7 +356,7 @@ class ApprovalService
// 为通知节点添加实际抄送人 // 为通知节点添加实际抄送人
if ($node->type === 'notify') { if ($node->type === 'notify') {
$nodeArray['actual_cc_users'] = []; $nodeArray['actual_cc_users'] = [];
foreach ($actualCcUserIds as $ccUserId) { foreach ($actualCcUserIdsArray as $ccUserId) {
if (isset($actualCcUserObjects[$ccUserId])) { if (isset($actualCcUserObjects[$ccUserId])) {
$nodeArray['actual_cc_users'][] = $actualCcUserObjects[$ccUserId]; $nodeArray['actual_cc_users'][] = $actualCcUserObjects[$ccUserId];
} }