json([ 'distribution_pre' => $request->user()->distributionPreIncomes()->pending()->sum('total_revenue'), 'wallet_balance'=> $request->user()->wallet?->balance ?? 0, ]); } /** * 预收益明细 * * @param Request $request * @return void */ public function distributionLogs(Request $request) { $perPage = PaginatorHelper::resolvePerPage('per_page', 20, 50); $distributionLogs = $request->user()->distributionPreIncomes() ->with('logs') ->pending() ->latest('id') ->simplePaginate($perPage); return DistributionPreIncomeResource::collection($distributionLogs); } /** * 可提明细 * * @param Request $request * @return void */ public function walletLogs(Request $request) { $perPage = PaginatorHelper::resolvePerPage('per_page', 20, 50); $walletLogs = $request->user()->walletLogs() ->latest('id') ->simplePaginate($perPage); return WalletLogResource::collection($walletLogs); } /** * 余额明细 * * @return void */ public function balanceLogs(Request $request) { } /** * 钱包付款 * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse * * @throws \App\Exceptions\BizException */ public function pay(Request $request) { $validated = $request->validate([ 'pay_sn' => ['bail', 'required'], ]); $user = $request->user(); try { DB::transaction(function () use ($user, $validated) { $payLog = PayLog::where('pay_sn', $validated['pay_sn'])->lockForUpdate()->firstOrFail(); $payable = $payLog->payable; switch (get_class($payable)) { case Order::class: (new WalletService())->changeBalance($user, -$payable->total_amount, WalletLog::ACTION_ORDER_PAY, '订单支付扣款', $payable); break; default: throw new BizException('非法操作'); break; } (new PayService())->handleSuccess($payLog); }); } catch (Throwable $e) { try { (new PayService())->handleFailedByPaySerialNumber($validated['pay_sn'], [ 'failed_reason' => $e->getMessage(), ]); } catch (Throwable $e) { report($e); } throw $e; } return response()->noContent(); } }