Files
lotteryLaravel/app/Console/Commands/SyncAgentUsedCreditCommand.php
kang f1f68d09d3
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
lotterLaravel E2E / e2e-api (push) Has been cancelled
feat(credit): 实时同步代理已用额度,覆盖玩家下注/结算全流程
- PlayerCreditService 在下注占用、输赢结算、撤单释放等关键节点触发 AgentUsedCreditSyncService
- AgentProfileService::present 与 AgentDashboardOverviewBuilder 查询前主动同步 used_credit
- 确保代理链 used_credit(团队已用风险)实时反映下级玩家信用占用状态
2026-06-30 15:15:15 +08:00

43 lines
1.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Console\Commands;
use App\Models\AgentNode;
use App\Models\AgentProfile;
use App\Services\Agent\AgentUsedCreditSyncService;
use Illuminate\Console\Command;
/** 重算代理团队已用风险used_credit修复历史未同步数据。 */
final class SyncAgentUsedCreditCommand extends Command
{
protected $signature = 'lottery:sync-agent-used-credit {--site= : 仅处理指定 admin_sites.code}';
protected $description = '重算代理团队已用风险used_credit = 子树信用玩家 used_credit + frozen_credit 之和)';
public function handle(AgentUsedCreditSyncService $sync): int
{
$siteCode = $this->option('site');
$query = AgentNode::query()->orderBy('id');
if (is_string($siteCode) && $siteCode !== '') {
$query->whereHas('adminSite', static fn ($q) => $q->where('code', $siteCode));
}
$nodes = $query->get();
$updated = 0;
foreach ($nodes as $node) {
$profile = AgentProfile::query()->where('agent_node_id', $node->id)->first();
$before = $profile !== null ? (int) $profile->used_credit : null;
$sync->syncForAgent($node);
$profile?->refresh();
$after = $profile !== null ? (int) $profile->used_credit : null;
if ($before !== $after) {
$updated++;
}
}
$this->info('已处理 '.count($nodes).' 个代理节点,其中 '.$updated.' 个 used_credit 有变更。');
return self::SUCCESS;
}
}