银行存取补充 user_currency_logs 流水记录

- CurrencySource 新增 BANK_DEPOSIT / BANK_WITHDRAW 两个来源枚举
- BankController deposit/withdraw 改用 UserCurrencyService::change() 记录 jjb 变动
- AiFinanceService bankExcessGold/raiseWalletTo 补充 UserCurrencyService::change() 调用
- 银行存取双轨记录:bank_logs(银行流水)+ user_currency_logs(金币流水)
This commit is contained in:
pllx
2026-05-28 13:13:34 +08:00
parent ce6d71a4f2
commit dce0a52750
4 changed files with 31 additions and 10 deletions
+1
View File
@@ -17,6 +17,7 @@
/.agents
/.codex
/.hermes
/.reasonix
/auth.json
/node_modules
/public/build
+8
View File
@@ -164,6 +164,12 @@ enum CurrencySource: string
/** 猜谜活动奖励 */
case GAME_REWARD = 'game_reward';
/** 存入银行(jjb → bank_jjb */
case BANK_DEPOSIT = 'bank_deposit';
/** 从银行取款(bank_jjb → jjb */
case BANK_WITHDRAW = 'bank_withdraw';
/**
* 返回该来源的中文名称,用于后台统计展示。
*/
@@ -218,6 +224,8 @@ enum CurrencySource: string
self::MSG_DECORATION_BUY => '消息装扮购买(旧)',
self::AVATAR_FRAME_BUY => '头像框购买',
self::GAME_REWARD => '猜谜活动奖励',
self::BANK_DEPOSIT => '存入银行',
self::BANK_WITHDRAW => '银行取款',
};
}
}
+10 -2
View File
@@ -13,9 +13,12 @@
namespace App\Http\Controllers;
use App\Enums\CurrencySource;
use App\Models\BankLog;
use App\Models\Sysparam;
use App\Models\User;
use App\Models\UserCurrencyLog;
use App\Services\UserCurrencyService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@@ -26,6 +29,9 @@ use Illuminate\Support\Facades\DB;
*/
class BankController extends Controller
{
public function __construct(
private readonly UserCurrencyService $currencyService,
) {}
/**
* 查询银行余额及最近20条流水记录
*/
@@ -107,7 +113,8 @@ class BankController extends Controller
}
DB::transaction(function () use ($user, $amount): void {
$user->decrement('jjb', $amount);
$this->currencyService->change($user, 'gold', -$amount, CurrencySource::BANK_DEPOSIT, "存入银行 {$amount} 金币");
$user->increment('bank_jjb', $amount);
BankLog::create([
@@ -151,7 +158,8 @@ class BankController extends Controller
DB::transaction(function () use ($user, $amount): void {
$user->decrement('bank_jjb', $amount);
$user->increment('jjb', $amount);
$this->currencyService->change($user, 'gold', $amount, CurrencySource::BANK_WITHDRAW, "取出银行存款 {$amount} 金币");
BankLog::create([
'user_id' => $user->id,
+12 -8
View File
@@ -10,10 +10,13 @@
namespace App\Services;
use App\Enums\CurrencySource;
use App\Events\MessageSent;
use App\Jobs\SaveMessageJob;
use App\Models\BankLog;
use App\Models\User;
use App\Models\UserCurrencyLog;
use App\Services\UserCurrencyService;
use Illuminate\Support\Facades\DB;
/**
@@ -41,6 +44,7 @@ class AiFinanceService
*/
public function __construct(
private readonly ChatStateService $chatState,
private readonly UserCurrencyService $currencyService,
) {}
/**
@@ -107,15 +111,15 @@ class AiFinanceService
$depositAmount = $walletGold - self::AVAILABLE_GOLD_RESERVE;
// 只把超过 100 万的部分转入银行,手上保留不高于 100 万的常规活动资金。
$lockedUser->jjb = self::AVAILABLE_GOLD_RESERVE;
$lockedUser->bank_jjb = $bankBefore + $depositAmount;
$lockedUser->save();
$this->currencyService->change($lockedUser, 'gold', -$depositAmount, CurrencySource::BANK_DEPOSIT, "自动存入银行 {$depositAmount} 金币");
$lockedUser->increment('bank_jjb', $depositAmount);
BankLog::create([
'user_id' => $lockedUser->id,
'type' => 'deposit',
'amount' => $depositAmount,
'balance_after' => (int) $lockedUser->bank_jjb,
'balance_after' => (int) $lockedUser->fresh()->bank_jjb,
]);
return array_values(array_filter(
@@ -162,15 +166,15 @@ class AiFinanceService
}
// 优先把银行金币提回手上,保证 AI 的即时可用余额尽量回到目标线。
$lockedUser->jjb = $walletGold + $withdrawAmount;
$lockedUser->bank_jjb = $bankGold - $withdrawAmount;
$lockedUser->save();
$this->currencyService->change($lockedUser, 'gold', $withdrawAmount, CurrencySource::BANK_WITHDRAW, "从银行自动取款 {$withdrawAmount} 金币");
$lockedUser->decrement('bank_jjb', $withdrawAmount);
BankLog::create([
'user_id' => $lockedUser->id,
'type' => 'withdraw',
'amount' => $withdrawAmount,
'balance_after' => (int) $lockedUser->bank_jjb,
'balance_after' => (int) $lockedUser->fresh()->bank_jjb,
]);
return (int) $lockedUser->jjb >= $targetWalletGold;