新增银行功能:存取金币、流水记录、PC/手机端双入口;迁移 bank_jjb 字段和 bank_logs 表

This commit is contained in:
2026-03-18 20:31:19 +08:00
parent 6c4183e175
commit d7a575d8c8
7 changed files with 605 additions and 2 deletions

View File

@@ -0,0 +1,128 @@
<?php
/**
* 文件功能:银行控制器
*
* 提供存款、取款、余额查询三个接口金币在流通账户jjb
* 与银行账户bank_jjb之间互转所有操作记录到 bank_logs。
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/
namespace App\Http\Controllers;
use App\Models\BankLog;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class BankController extends Controller
{
/**
* 查询银行余额及最近20条流水记录
*/
public function info(): JsonResponse
{
$user = Auth::user();
$logs = BankLog::where('user_id', $user->id)
->latest()
->limit(20)
->get(['type', 'amount', 'balance_after', 'created_at']);
return response()->json([
'status' => 'success',
'jjb' => $user->jjb ?? 0,
'bank_jjb' => $user->bank_jjb ?? 0,
'logs' => $logs,
]);
}
/**
* 存款从流通金币jjb转入银行bank_jjb
*
* 请求参数amount正整数
*/
public function deposit(Request $request): JsonResponse
{
$request->validate([
'amount' => 'required|integer|min:1|max:9999999',
]);
$amount = $request->integer('amount');
$user = Auth::user();
if (($user->jjb ?? 0) < $amount) {
return response()->json([
'status' => 'error',
'message' => '流通金币不足!当前余额 '.($user->jjb ?? 0)." 枚,无法存入 {$amount} 枚。",
]);
}
DB::transaction(function () use ($user, $amount): void {
$user->decrement('jjb', $amount);
$user->increment('bank_jjb', $amount);
BankLog::create([
'user_id' => $user->id,
'type' => 'deposit',
'amount' => $amount,
'balance_after' => $user->fresh()->bank_jjb,
]);
});
$fresh = $user->fresh();
return response()->json([
'status' => 'success',
'message' => "成功存入 {$amount} 枚金币!",
'jjb' => $fresh->jjb,
'bank_jjb' => $fresh->bank_jjb,
]);
}
/**
* 取款从银行bank_jjb转回流通金币jjb
*
* 请求参数amount正整数
*/
public function withdraw(Request $request): JsonResponse
{
$request->validate([
'amount' => 'required|integer|min:1|max:9999999',
]);
$amount = $request->integer('amount');
$user = Auth::user();
if (($user->bank_jjb ?? 0) < $amount) {
return response()->json([
'status' => 'error',
'message' => '银行余额不足!当前存款 '.($user->bank_jjb ?? 0)." 枚,无法取出 {$amount} 枚。",
]);
}
DB::transaction(function () use ($user, $amount): void {
$user->decrement('bank_jjb', $amount);
$user->increment('jjb', $amount);
BankLog::create([
'user_id' => $user->id,
'type' => 'withdraw',
'amount' => $amount,
'balance_after' => $user->fresh()->bank_jjb,
]);
});
$fresh = $user->fresh();
return response()->json([
'status' => 'success',
'message' => "成功取出 {$amount} 枚金币!",
'jjb' => $fresh->jjb,
'bank_jjb' => $fresh->bank_jjb,
]);
}
}