feat(risk): 支持按开注商隔离风险池并新增经营报表
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
lotterLaravel E2E / e2e-api (push) Has been cancelled

This commit is contained in:
2026-07-10 10:23:30 +08:00
parent d4779660c8
commit 2ea3e810a0
31 changed files with 610 additions and 58 deletions

View File

@@ -20,6 +20,7 @@ final class AdminRiskPoolLockLogQueryService
{
$action = trim((string) $request->query('action_type', ''));
$number = trim((string) $request->query('normalized_number', ''));
$providerCode = strtoupper(trim((string) $request->query('provider_code', '')));
$ticketItemId = (int) $request->integer('ticket_item_id', 0);
$q = RiskPoolLockLog::query()
@@ -36,6 +37,10 @@ final class AdminRiskPoolLockLogQueryService
$q->where('normalized_number', $number);
}
if ($providerCode !== '') {
$q->where('provider_code', $providerCode);
}
if ($ticketItemId > 0) {
$q->where('ticket_item_id', $ticketItemId);
}
@@ -50,6 +55,7 @@ final class AdminRiskPoolLockLogQueryService
{
$action = trim((string) $request->query('action_type', ''));
$number = trim((string) $request->query('normalized_number', ''));
$providerCode = strtoupper(trim((string) $request->query('provider_code', '')));
$ticketItemId = (int) $request->integer('ticket_item_id', 0);
$bindings = ['draw_id' => $draw->id];
@@ -65,6 +71,11 @@ final class AdminRiskPoolLockLogQueryService
$bindings['normalized_number'] = $number;
}
if ($providerCode !== '') {
$filters .= ' AND l.provider_code = :provider_code';
$bindings['provider_code'] = $providerCode;
}
if ($ticketItemId > 0) {
$filters .= ' AND l.ticket_item_id = :ticket_item_id';
$bindings['ticket_item_id'] = $ticketItemId;
@@ -86,6 +97,7 @@ final class AdminRiskPoolLockLogQueryService
$aggregateSql = <<<SQL
SELECT
COALESCE(NULLIF(ti.provider_code, ''), l.provider_code) AS provider_code,
l.ticket_item_id AS ticket_item_id,
ti.ticket_no AS ticket_no,
ti.play_code AS play_code,
@@ -101,7 +113,7 @@ SELECT
FROM risk_pool_lock_logs l
INNER JOIN ticket_items ti ON ti.id = l.ticket_item_id
WHERE {$filters}
GROUP BY l.ticket_item_id, ti.ticket_no, ti.play_code, ti.original_number, ti.combination_count, ti.player_id
GROUP BY COALESCE(NULLIF(ti.provider_code, ''), l.provider_code), l.ticket_item_id, ti.ticket_no, ti.play_code, ti.original_number, ti.combination_count, ti.player_id
SQL;
$countSql = "SELECT COUNT(*) AS aggregate_count FROM ({$aggregateSql}) AS grouped";