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