feat: enhance configuration and logging for admin services
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
- Updated .env.example to enable Redis Lua for lottery risk pool and added configuration for agent settlement. - Improved AGENTS.md to clarify site operations and admin roles. - Enhanced PHPUnit configuration with memory limit and cache directory settings. - Refactored AdminReportQueryService and related services to utilize LimitedQuery for better data handling and truncation warnings. - Added logging for draw settlement failures in DrawTickService. - Introduced credit preflight checks and reverse bet hold functionality in PlayerCreditService. - Improved risk pool management with new Redis lock handling in RiskPoolService and TicketPlacementService.
This commit is contained in:
@@ -6,6 +6,7 @@ use App\Models\AdminUser;
|
||||
use App\Support\AdminAgentSettlementScope;
|
||||
use App\Support\AgentSettlementPeriodWindow;
|
||||
use App\Support\CurrencyFormatter;
|
||||
use App\Support\LimitedQuery;
|
||||
use App\Support\PlayerFundingMode;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -53,7 +54,9 @@ final class SettlementCenterLedgerService
|
||||
$periodId = $filters->settlementPeriodId;
|
||||
$range = $this->resolveCreatedRange($periodId, $filters->createdFrom, $filters->createdTo);
|
||||
$settledRange = $this->resolveSettledRange($periodId, $filters->createdFrom, $filters->createdTo);
|
||||
$playerBills = $this->playerBillsMap($admin, $siteCode, $periodId);
|
||||
$playerBillsResult = $this->playerBillsMap($admin, $siteCode, $periodId);
|
||||
$playerBills = $playerBillsResult['map'];
|
||||
$billsTruncated = $playerBillsResult['truncated'];
|
||||
|
||||
$stubQueries = [];
|
||||
if ($this->shouldIncludeLedgerStub($filters, 'credit')) {
|
||||
@@ -130,6 +133,7 @@ final class SettlementCenterLedgerService
|
||||
'page' => $page,
|
||||
'per_page' => $perPage,
|
||||
'ledger_source' => 'settlement_ledger',
|
||||
'truncated' => $billsTruncated || $total > 5000,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -153,8 +157,12 @@ final class SettlementCenterLedgerService
|
||||
): array {
|
||||
$periodId = $filters->settlementPeriodId;
|
||||
$range = $this->resolveCreatedRange($periodId, $filters->createdFrom, $filters->createdTo);
|
||||
$rows = $this->fetchBetFlowCreditRows($admin, $siteCode, $range, $filters);
|
||||
$playerBills = $this->playerBillsMap($admin, $siteCode, $periodId);
|
||||
$fetched = $this->fetchBetFlowCreditRows($admin, $siteCode, $range, $filters);
|
||||
$rows = $fetched['rows'];
|
||||
$sourceTruncated = $fetched['truncated'];
|
||||
$playerBillsResult = $this->playerBillsMap($admin, $siteCode, $periodId);
|
||||
$playerBills = $playerBillsResult['map'];
|
||||
$billsTruncated = $playerBillsResult['truncated'];
|
||||
|
||||
$ticketIds = [];
|
||||
foreach ($rows as $row) {
|
||||
@@ -207,6 +215,7 @@ final class SettlementCenterLedgerService
|
||||
'page' => $page,
|
||||
'per_page' => $perPage,
|
||||
'ledger_source' => 'credit_ledger',
|
||||
'truncated' => $sourceTruncated || $billsTruncated,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -811,7 +820,7 @@ final class SettlementCenterLedgerService
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<int, object>
|
||||
* @return array{map: array<int, object>, truncated: bool}
|
||||
*/
|
||||
private function playerBillsMap(AdminUser $admin, string $siteCode, ?int $periodId): array
|
||||
{
|
||||
@@ -841,8 +850,9 @@ final class SettlementCenterLedgerService
|
||||
|
||||
AdminAgentSettlementScope::applyDirectPlayersToAlias($query, $admin, 'p');
|
||||
|
||||
$limited = LimitedQuery::get($query, 500);
|
||||
$map = [];
|
||||
foreach ($query->limit(500)->get() as $bill) {
|
||||
foreach ($limited['rows'] as $bill) {
|
||||
$pid = (int) $bill->player_id;
|
||||
if (! isset($map[$pid])) {
|
||||
$map[$pid] = $bill;
|
||||
@@ -859,7 +869,10 @@ final class SettlementCenterLedgerService
|
||||
}
|
||||
}
|
||||
|
||||
return $map;
|
||||
return [
|
||||
'map' => $map,
|
||||
'truncated' => $limited['truncated'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -921,7 +934,7 @@ final class SettlementCenterLedgerService
|
||||
|
||||
/**
|
||||
* @param array{0: Carbon, 1: Carbon}|null $range
|
||||
* @return list<object>
|
||||
* @return array{rows: list<object>, truncated: bool}
|
||||
*/
|
||||
private function fetchBetFlowCreditRows(
|
||||
AdminUser $admin,
|
||||
@@ -975,7 +988,12 @@ final class SettlementCenterLedgerService
|
||||
$query->whereBetween('cl.created_at', $range);
|
||||
}
|
||||
|
||||
return $query->limit(5000)->get()->all();
|
||||
$limited = LimitedQuery::get($query, 5000);
|
||||
|
||||
return [
|
||||
'rows' => $limited['rows']->all(),
|
||||
'truncated' => $limited['truncated'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user