user; $deductAmount = $this->calculateDeductAmount($order); $this->processRefund($user, $order, $deductAmount); } /** * 计算扣除金额 */ private function calculateDeductAmount(Order $order): float { $baseAmount = $order->payment_amount + $order->balance_amount - $order->traffic_amount; return match ($order->state) { OrderStatus::ACCEPTED->value => $baseAmount * 0.2, // 已接单扣除20% OrderStatus::DEPARTED->value => $baseAmount * 0.5, // 已出发扣除50% default => 0 }; } /** * 处理退款流程 */ private function processRefund(MemberUser $user, Order $order, float $deductAmount): void { try { $refundAmount = $this->calculateRefundAmount($order, $deductAmount); if ($refundAmount > 0) { // 退还余额 $user->wallet->increment('total_balance', $refundAmount); $user->wallet->increment('available_balance', $refundAmount); // 创建退款记录 $this->createRefundRecord($order, $refundAmount); } } catch (\Exception $e) { Log::error('处理退款失败', [ 'order_id' => $order->id, 'user_id' => $user->id, 'error' => $e->getMessage(), ]); throw $e; } } /** * 创建退款记录 */ private function createRefundRecord(Order $order, float $refundAmount): void { WalletRefundRecord::create([ 'order_id' => $order->id, 'user_id' => $order->user_id, 'amount' => $refundAmount, 'state' => 'success', ]); } }