diff --git a/backend/app/controller/FeishuCardController.php b/backend/app/controller/FeishuCardController.php index 8681f42..c9c2cfe 100644 --- a/backend/app/controller/FeishuCardController.php +++ b/backend/app/controller/FeishuCardController.php @@ -184,13 +184,27 @@ class FeishuCardController extends BaseController try { $approvalService = new ApprovalService(); - // 检查用户是否有权限审批 + // 检查订单状态 $order = \app\model\ApprovalOrder::find($orderId); if (!$order) { error_log('❌ 审批单不存在: order_id=' . $orderId); return $this->errorCard('审批单不存在'); } + // 检查订单是否已经处理过 + if ($order->status === \app\model\ApprovalOrder::STATUS_APPROVED) { + error_log('⚠️ 订单已通过: order_id=' . $orderId); + return $this->infoCard('该申请已通过', '此申请已经被审批通过,无需重复操作。'); + } + if ($order->status === \app\model\ApprovalOrder::STATUS_REJECTED) { + error_log('⚠️ 订单已拒绝: order_id=' . $orderId); + return $this->infoCard('该申请已拒绝', '此申请已经被拒绝,如需重新申请请提交新的申请。'); + } + if ($order->status === \app\model\ApprovalOrder::STATUS_CANCELLED) { + error_log('⚠️ 订单已撤销: order_id=' . $orderId); + return $this->infoCard('该申请已撤销', '此申请已经被撤销。'); + } + error_log('📝 开始审批通过: order_id=' . $orderId . ', user_id=' . $user->id . ', remark=' . $remark); // 执行审批通过 diff --git a/backend/app/service/ApprovalService.php b/backend/app/service/ApprovalService.php index f9c2b81..3c89600 100644 --- a/backend/app/service/ApprovalService.php +++ b/backend/app/service/ApprovalService.php @@ -553,10 +553,23 @@ class ApprovalService $currentNodeIds = $order->current_nodes ?? []; error_log("🔄 自审批自动通过 - 当前节点: " . json_encode($currentNodeIds)); + // 检查订单是否已经结束 + if (empty($currentNodeIds)) { + error_log("❌ 自审批:订单已完成,current_nodes为空"); + if ($order->status === ApprovalOrder::STATUS_APPROVED) { + throw new \Exception('该申请已通过,无需重复操作'); + } else if ($order->status === ApprovalOrder::STATUS_REJECTED) { + throw new \Exception('该申请已被拒绝'); + } else if ($order->status === ApprovalOrder::STATUS_CANCELLED) { + throw new \Exception('该申请已被撤销'); + } + throw new \Exception('该申请已完成,无法重复操作'); + } + $currentNode = ApprovalNode::whereIn('id', $currentNodeIds)->first(); if (!$currentNode) { - error_log("❌ 自审批:当前节点不存在"); + error_log("❌ 自审批:当前节点不存在,IDs: " . json_encode($currentNodeIds)); throw new \Exception('当前节点不存在'); }