fix: 修复待审批列表查询逻辑

- 检查用户是否在当前节点的审批人列表中
- 排除已经审批过的申请
- 同时修复数据库节点7的审批人配置

问题:待审批列表没有验证用户是否为当前节点审批人

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-26 17:34:56 +08:00
parent a1176b1042
commit dc763d874a
+33 -8
View File
@@ -388,16 +388,41 @@ class BusinessTripService
if (empty($pendingOrderIds)) {
$query->whereRaw('1 = 0'); // 返回空结果
} else {
// 获取这些审批单中当前用户待审批的,排除已审批的
$approvedOrderIds = ApprovalRecord::whereIn('order_id', $pendingOrderIds)
->where('approver_id', $userId)
->whereIn('action', ['approve', 'reject'])
->pluck('order_id')
->toArray();
// 获取这些审批单的当前节点
$pendingOrders = ApprovalOrder::whereIn('id', $pendingOrderIds)->get();
$validOrderIds = [];
$pendingOrderIds = array_diff($pendingOrderIds, $approvedOrderIds);
foreach ($pendingOrders as $order) {
$currentNodes = $order->current_nodes ?? [];
$query->whereIn('approval_order_id', $pendingOrderIds);
// 检查用户是否在当前节点的审批人列表中
$isApprover = false;
foreach ($currentNodes as $nodeId) {
$node = ApprovalNode::find($nodeId);
if ($node && in_array($userId, $node->approvers ?? [])) {
$isApprover = true;
break;
}
}
// 如果用户是当前节点审批人,且未审批过,则加入列表
if ($isApprover) {
$hasApproved = ApprovalRecord::where('order_id', $order->id)
->where('approver_id', $userId)
->whereIn('action', ['approve', 'reject'])
->exists();
if (!$hasApproved) {
$validOrderIds[] = $order->id;
}
}
}
if (empty($validOrderIds)) {
$query->whereRaw('1 = 0');
} else {
$query->whereIn('approval_order_id', $validOrderIds);
}
}
break;
case 'approved':