fix: 修复待审批列表查询逻辑
- 检查用户是否在当前节点的审批人列表中 - 排除已经审批过的申请 - 同时修复数据库节点7的审批人配置 问题:待审批列表没有验证用户是否为当前节点审批人 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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':
|
||||
|
||||
Reference in New Issue
Block a user