From 0ceef6c7b789e23dfb2952481cade0e598262a37 Mon Sep 17 00:00:00 2001 From: "iVampireSP.com" Date: Wed, 18 Jan 2023 00:13:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=20=E6=A8=A1=E5=9D=97=20?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8E=A7=E5=88=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Modules/UserController.php | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Modules/UserController.php b/app/Http/Controllers/Modules/UserController.php index 8213aa3..2ef3858 100644 --- a/app/Http/Controllers/Modules/UserController.php +++ b/app/Http/Controllers/Modules/UserController.php @@ -2,10 +2,8 @@ namespace App\Http\Controllers\Modules; -use App\Exceptions\User\BalanceNotEnoughException; use App\Http\Controllers\Controller; use App\Models\Host; -use App\Models\Transaction; use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -53,22 +51,46 @@ public function hosts(User $user): JsonResponse return $this->success($hosts); } - public function reduce(Request $request, User $user): JsonResponse + public function update(Request $request, User $user): JsonResponse { $this->validate($request, [ - 'amount' => 'required|numeric|min:0.01|max:10000', + 'balance' => 'required|numeric|min:-10000|max:10000', 'description' => 'required|string', ]); - $module = auth('module')->user(); - $transaction = new Transaction(); + $module = $request->user('module'); - try { - $transaction->reduceAmountModuleFail($user->id, $module->id, $request->input('amount'), $request->input('description')); - } catch (BalanceNotEnoughException) { - return $this->error('余额不足'); + $balance = $request->input('balance'); + + if ($balance < 0) { + // 使用 bc,取 balance 绝对值 + $balance = bcsub(0, $balance, 4); + + // 如果用户余额不足,抛出异常,使用 bc 函数判断 + if (bccomp($user->balance, $balance, 2) === -1) { + return $this->error('用户余额不足。'); + } + + $user->reduce($balance, $request->description, true); + $module->charge($balance, 'balance', $request->description, [ + 'user_id' => $user->id, + ]); + + } else { + // 如果模块余额不足,抛出异常,使用 bc 函数判断 + if (bccomp($module->balance, $balance, 2) === -1) { + return $this->error('模块余额不足。'); + } + + $module->reduce($balance, $request->description, true, [ + 'user_id' => $user->id, + 'payment' => 'module_balance' + ]); + + $user->charge($balance, 'module_balance', $request->description); } - return $this->success(); + return $this->updated(); } + }