fix: 修复单人审批完成后的流程流转逻辑
问题: 1. 审批完成后直接移动到下一节点,没有检查节点类型 2. 抄送节点应该跳过并完成流程,而不是进入抄送节点 3. 审批完成后的申请应该进入"审批完成"状态 修复: - 检查节点完成条件:单人审批/或签一人通过即完成 - 检查下一节点类型:抄送节点则跳过并完成 - 没有后续节点则完成流程 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user