diff --git a/backend/app/service/BusinessTripService.php b/backend/app/service/BusinessTripService.php index 2dd001a..bb7fa01 100644 --- a/backend/app/service/BusinessTripService.php +++ b/backend/app/service/BusinessTripService.php @@ -223,8 +223,12 @@ class BusinessTripService // 如果节点完成,移动到下一节点 if ($nodeCompleted) { + // 获取当前节点的 order 值 + $currentOrder = $node->order ?? 0; + + // 查找 order 比当前节点大的后续节点 $nextNodes = ApprovalNode::where('flow_id', $flow->id) - ->where('order', '>', 0) + ->where('order', '>', $currentOrder) ->orderBy('order') ->get(); @@ -234,8 +238,17 @@ class BusinessTripService $approvalOrder->current_nodes = []; $businessTrip->status = BusinessTrip::STATUS_APPROVED; } else { - // 移动到下一节点 - $approvalOrder->current_nodes = $nextNodes->pluck('id')->toArray(); + // 检查第一个后续节点 + $firstNextNode = $nextNodes->first(); + if ($firstNextNode && $firstNextNode->type === 'notify') { + // 下一个是抄送节点,跳过并完成流程 + $approvalOrder->status = ApprovalOrder::STATUS_APPROVED; + $approvalOrder->current_nodes = []; + $businessTrip->status = BusinessTrip::STATUS_APPROVED; + } else { + // 移动到下一节点 + $approvalOrder->current_nodes = $nextNodes->pluck('id')->toArray(); + } } $approvalOrder->save(); @@ -429,9 +442,21 @@ class BusinessTripService ->pluck('order_id') ->toArray(); + error_log("🔍 'approved' query: userId={$userId}, approvedOrderIds=" . json_encode($approvedOrderIds)); + if (empty($approvedOrderIds)) { $query->whereRaw('1 = 0'); // 返回空结果 } else { + // 先检查是否有匹配的 business_trip(不加载关系) + $checkCount = BusinessTrip::whereIn('approval_order_id', $approvedOrderIds)->count(); + error_log("🔍 Matching business_trips count (without relations): {$checkCount}"); + + // 获取匹配的 business_trip IDs + $matchingTrips = BusinessTrip::whereIn('approval_order_id', $approvedOrderIds) + ->pluck('id') + ->toArray(); + error_log("🔍 Matching business_trip IDs: " . json_encode($matchingTrips)); + $query->whereIn('approval_order_id', $approvedOrderIds); } break; @@ -751,24 +776,36 @@ class BusinessTripService if ($nodeCompleted) { // 当前节点完成,查找下一个节点 + error_log("✅ 节点 {$currentNodeId} 已完成,查找下一节点"); + + // 获取当前节点的 order 值 + $currentOrder = $node->order ?? 0; + error_log("📍 当前节点 order: {$currentOrder}"); + + // 查找 order 比当前节点大的下一个节点 $nextNode = ApprovalNode::where('flow_id', $approvalOrder->flow_id) - ->where('order', '>', 0) + ->where('order', '>', $currentOrder) ->orderBy('order') ->first(); + error_log("🔍 下一节点: " . ($nextNode ? "id={$nextNode->id}, type={$nextNode->type}, name={$nextNode->name}, order={$nextNode->order}" : "null")); + if ($nextNode) { // 有下一个节点 if ($nextNode->type === 'notify') { // 下一个是抄送节点,跳过并完成流程 + error_log("⏭️ 跳过抄送节点,完成流程"); $approvalOrder->status = ApprovalOrder::STATUS_APPROVED; $approvalOrder->current_nodes = []; $businessTrip->status = BusinessTrip::STATUS_APPROVED; } else { // 下一个是审批节点,移动到该节点 + error_log("➡️ 移动到下一节点: {$nextNode->id}"); $approvalOrder->current_nodes = [$nextNode->id]; } } else { // 没有下一个节点,流程完成 + error_log("✅ 没有下一节点,流程完成"); $approvalOrder->status = ApprovalOrder::STATUS_APPROVED; $approvalOrder->current_nodes = []; $businessTrip->status = BusinessTrip::STATUS_APPROVED;