银行存取补充 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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user