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

@@ -90,6 +90,7 @@ final class TicketPlacementService
foreach ($riskRedisCompensation as $entry) {
$this->riskPoolService->compensateRedisAcquires(
(int) $entry['draw_id'],
(string) $entry['provider_code'],
$entry['locks'],
);
}
@@ -288,7 +289,7 @@ final class TicketPlacementService
}
try {
$lockedAmount = $this->riskPoolService->acquire((int) $draw->id, $item, $locks);
$lockedAmount = $this->riskPoolService->acquire((int) $draw->id, (string) $evaluated['provider_code'], $item, $locks);
} catch (TicketOperationException $e) {
if ($e->lotteryCode !== ErrorCode::RiskPoolSoldOut->value) {
throw $e;
@@ -319,6 +320,7 @@ final class TicketPlacementService
$successTotalEstimatedPayout += (int) $evaluated['estimated_max_payout'];
$riskRedisCompensation[] = [
'draw_id' => (int) $draw->id,
'provider_code' => (string) $evaluated['provider_code'],
'locks' => $locks,
];
}
@@ -412,7 +414,12 @@ final class TicketPlacementService
'amount' => (int) $combo->estimated_payout,
];
}
$this->riskPoolService->release((int) $order->draw_id, $item, $locks);
$this->riskPoolService->release(
(int) $order->draw_id,
(string) ($item->provider_code ?: \App\Models\BetProvider::DEFAULT_CODE),
$item,
$locks,
);
$item->forceFill([
'status' => 'refunded',
'fail_reason_code' => (string) ErrorCode::BetInsufficientBalance->value,