fix: 完善审批流程调试日志

添加详细的调试日志来追踪审批流程:
1. approve() 方法开始时的参数日志
2. 节点类型和完成状态的日志
3. 下一节点查询和跳过逻辑的日志

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-26 18:19:51 +08:00
parent f36fc69b8d
commit 8b37d6313e
@@ -682,6 +682,8 @@ class BusinessTripService
*/
public function approve(int $userId, int $businessTripId, string $action, string $comment = ''): BusinessTrip
{
error_log("📝 approve() 开始: userId={$userId}, businessTripId={$businessTripId}, action={$action}");
return $this->db->transaction(function () use ($userId, $businessTripId, $action, $comment) {
$businessTrip = BusinessTrip::with(['itineraries', 'approvalOrder'])->findOrFail($businessTripId);
@@ -744,22 +746,28 @@ class BusinessTripService
// 更新审批单状态
if ($action === 'reject') {
// 拒绝:直接结束流程
error_log("❌ 审批拒绝,结束流程");
$approvalOrder->status = ApprovalOrder::STATUS_REJECTED;
$approvalOrder->current_nodes = [];
$businessTrip->status = BusinessTrip::STATUS_REJECTED;
} else {
error_log("✅ 审批同意,检查节点完成状态");
// 同意:检查当前节点是否完成,并处理流程流转
$nodeCompleted = false;
if ($currentNodeId) {
$node = ApprovalNode::find($currentNodeId);
error_log("🔍 当前节点: id={$currentNodeId}, type=" . ($node ? $node->type : 'null'));
if ($node) {
// 根据节点类型判断是否完成
if ($node->type === 'approver') {
// 单人审批:一人通过即完成
error_log("✅ 单人审批节点,一人通过即完成");
$nodeCompleted = true;
} elseif ($node->type === 'or_approve') {
// 或签:一人通过即完成
error_log("✅ 或签节点,一人通过即完成");
$nodeCompleted = true;
} elseif ($node->type === 'and_approve') {
// 会签:需要所有人都通过
@@ -767,6 +775,7 @@ class BusinessTripService
->where('node_id', $currentNodeId)
->where('action', 'approve')
->count();
error_log("🔍 会签节点: approvedCount={$approvedCount}, totalApprovers=" . count($approverIds));
if ($approvedCount >= count($approverIds)) {
$nodeCompleted = true;
}
@@ -774,6 +783,8 @@ class BusinessTripService
}
}
error_log("🔍 nodeCompleted: " . ($nodeCompleted ? 'true' : 'false'));
if ($nodeCompleted) {
// 当前节点完成,查找下一个节点
error_log("✅ 节点 {$currentNodeId} 已完成,查找下一节点");