diff --git a/backend/app/service/BusinessTripService.php b/backend/app/service/BusinessTripService.php index 1525ea0..90add53 100644 --- a/backend/app/service/BusinessTripService.php +++ b/backend/app/service/BusinessTripService.php @@ -725,10 +725,59 @@ class BusinessTripService $approvalOrder->current_nodes = []; $businessTrip->status = BusinessTrip::STATUS_REJECTED; } else { - // 同意:检查是否还有后续节点(简化版:直接通过) - $approvalOrder->status = ApprovalOrder::STATUS_APPROVED; - $approvalOrder->current_nodes = []; - $businessTrip->status = BusinessTrip::STATUS_APPROVED; + // 同意:检查当前节点是否完成,并处理流程流转 + $currentNodeId = $currentNodes[0] ?? null; + $nodeCompleted = false; + + if ($currentNodeId) { + $node = ApprovalNode::find($currentNodeId); + if ($node) { + // 根据节点类型判断是否完成 + if ($node->type === 'approver') { + // 单人审批:一人通过即完成 + $nodeCompleted = true; + } elseif ($node->type === 'or_approve') { + // 或签:一人通过即完成 + $nodeCompleted = true; + } elseif ($node->type === 'and_approve') { + // 会签:需要所有人都通过 + $approvedCount = ApprovalRecord::where('order_id', $approvalOrder->id) + ->where('node_id', $currentNodeId) + ->where('action', 'approve') + ->count(); + $allApprovers = $node->approvers ?? []; + if ($approvedCount >= count($allApprovers)) { + $nodeCompleted = true; + } + } + } + } + + if ($nodeCompleted) { + // 当前节点完成,查找下一个节点 + $nextNode = ApprovalNode::where('flow_id', $approvalOrder->flow_id) + ->where('order', '>', 0) + ->orderBy('order') + ->first(); + + if ($nextNode) { + // 有下一个节点 + if ($nextNode->type === 'notify') { + // 下一个是抄送节点,跳过并完成流程 + $approvalOrder->status = ApprovalOrder::STATUS_APPROVED; + $approvalOrder->current_nodes = []; + $businessTrip->status = BusinessTrip::STATUS_APPROVED; + } else { + // 下一个是审批节点,移动到该节点 + $approvalOrder->current_nodes = [$nextNode->id]; + } + } else { + // 没有下一个节点,流程完成 + $approvalOrder->status = ApprovalOrder::STATUS_APPROVED; + $approvalOrder->current_nodes = []; + $businessTrip->status = BusinessTrip::STATUS_APPROVED; + } + } } $approvalOrder->save();