lockWallet(); // 变更前余额 $beforeBalance = $wallet->balance; $_balance = abs($changeBalance); if ($changeBalance > 0) { // 收入 $user->wallet()->update([ 'balance' => DB::raw("balance + {$_balance}"), 'total_revenue' => DB::raw("total_revenue + {$_balance}"), ]); } else { // 支出 if ($wallet->balance < $_balance) { throw new BizException('可提现金额不足'); } $user->wallet()->update([ 'balance' => DB::raw("balance - {$_balance}"), 'total_expenses' => DB::raw("total_expenses + {$_balance}"), ]); } $user->walletLogs()->create([ 'loggable_id' => $loggable?->id, 'loggable_type' => $loggable?->getMorphClass(), 'before_balance' => $beforeBalance, 'change_balance' => $changeBalance, 'action' => $action, 'remarks' => $remarks, ]); } }