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

@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Api\V1\Admin\Risk;
use App\Models\BetProvider;
use App\Models\Draw;
use App\Models\RiskPool;
use App\Lottery\ErrorCode;
@@ -21,7 +22,8 @@ final class AdminRiskPoolManualStatusController extends Controller
) {}
public function close(Request $request, Draw $draw, string $number_4d): JsonResponse
{
$pool = $this->updateStatus($draw, $number_4d, true, 'close', 'admin_manual_close');
$providerCode = strtoupper(trim((string) $request->query('provider_code', BetProvider::DEFAULT_CODE)));
$pool = $this->updateStatus($draw, $providerCode, $number_4d, true, 'close', 'admin_manual_close');
if ($pool === null) {
return ApiMessage::errorResponse($request, 'not_found', ErrorCode::ClientHttpError->value, null, 404);
@@ -32,7 +34,8 @@ final class AdminRiskPoolManualStatusController extends Controller
public function recover(Request $request, Draw $draw, string $number_4d): JsonResponse
{
$pool = $this->updateStatus($draw, $number_4d, false, 'recover', 'admin_manual_recover');
$providerCode = strtoupper(trim((string) $request->query('provider_code', BetProvider::DEFAULT_CODE)));
$pool = $this->updateStatus($draw, $providerCode, $number_4d, false, 'recover', 'admin_manual_recover');
if ($pool === null) {
return ApiMessage::errorResponse($request, 'not_found', ErrorCode::ClientHttpError->value, null, 404);
@@ -48,14 +51,16 @@ final class AdminRiskPoolManualStatusController extends Controller
private function updateStatus(
Draw $draw,
string $providerCode,
string $number4d,
bool $soldOut,
string $actionType,
string $reason,
): ?RiskPool {
return DB::transaction(function () use ($draw, $number4d, $soldOut, $actionType, $reason): ?RiskPool {
return DB::transaction(function () use ($draw, $providerCode, $number4d, $soldOut, $actionType, $reason): ?RiskPool {
$pool = RiskPool::query()
->where('draw_id', $draw->id)
->where('provider_code', $providerCode)
->where('normalized_number', $number4d)
->lockForUpdate()
->first();
@@ -76,11 +81,12 @@ final class AdminRiskPoolManualStatusController extends Controller
])->save();
if ($targetStatus === 1) {
$this->riskPoolService->publishManualSoldOut($draw, $number4d);
$this->riskPoolService->publishManualSoldOut($draw, $number4d, $providerCode);
}
RiskPoolLockLog::query()->create([
'draw_id' => $draw->id,
'provider_code' => $providerCode,
'normalized_number' => $number4d,
'ticket_item_id' => null,
'action_type' => $actionType,
@@ -106,6 +112,7 @@ final class AdminRiskPoolManualStatusController extends Controller
$locked = (int) $pool->locked_amount;
return [
'provider_code' => $pool->provider_code ?? BetProvider::DEFAULT_CODE,
'normalized_number' => $pool->normalized_number,
'total_cap_amount' => $cap,
'locked_amount' => $locked,