feat: 拆分开奖与结算审核流程,新增手动结果录入、重开和派彩审批接口
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\Settlement;
|
||||
|
||||
use App\Models\AdminUser;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Support\ApiResponse;
|
||||
use App\Models\SettlementBatch;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Admin\SettlementBatchReviewRequest;
|
||||
use App\Services\Settlement\SettlementBatchWorkflowService;
|
||||
|
||||
final class AdminSettlementBatchApproveController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SettlementBatchWorkflowService $service) {}
|
||||
|
||||
public function __invoke(SettlementBatchReviewRequest $request, SettlementBatch $batch): JsonResponse
|
||||
{
|
||||
$admin = $request->user();
|
||||
if (! $admin instanceof AdminUser) {
|
||||
return ApiResponse::error(trans('admin.unauthenticated'), ErrorCode::AdminUnauthenticated->value, null, 401);
|
||||
}
|
||||
|
||||
try {
|
||||
$updated = $this->service->approve($batch, $admin, $request->validated('remark') ?? null);
|
||||
} catch (\RuntimeException) {
|
||||
return ApiResponse::error(trans('api.client_error'), ErrorCode::ClientHttpError->value, null, 409);
|
||||
}
|
||||
|
||||
return ApiResponse::success([
|
||||
'id' => (int) $updated->id,
|
||||
'status' => $updated->status,
|
||||
'review_status' => $updated->review_status,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\Settlement;
|
||||
|
||||
use App\Models\SettlementBatch;
|
||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||
|
||||
final class AdminSettlementBatchExportController
|
||||
{
|
||||
public function __invoke(SettlementBatch $batch): StreamedResponse
|
||||
{
|
||||
$batch->load(['draw:id,draw_no']);
|
||||
$filename = 'settlement-'.$batch->id.'-'.($batch->draw?->draw_no ?? 'draw').'.csv';
|
||||
|
||||
return response()->streamDownload(function () use ($batch): void {
|
||||
$out = fopen('php://output', 'w');
|
||||
fputcsv($out, ['ticket_no', 'play_code', 'player_id', 'matched_prize_tier', 'win_amount', 'jackpot_amount', 'match_detail']);
|
||||
$batch->details()->with('ticketItem')->orderBy('id')->chunk(200, function ($rows) use ($out): void {
|
||||
foreach ($rows as $row) {
|
||||
fputcsv($out, [
|
||||
$row->ticketItem?->ticket_no,
|
||||
$row->ticketItem?->play_code,
|
||||
$row->ticketItem?->player_id,
|
||||
$row->matched_prize_tier,
|
||||
(int) $row->win_amount,
|
||||
(int) $row->jackpot_allocation_amount,
|
||||
json_encode($row->match_detail_json, JSON_UNESCAPED_UNICODE),
|
||||
]);
|
||||
}
|
||||
});
|
||||
fclose($out);
|
||||
}, $filename, ['Content-Type' => 'text/csv; charset=UTF-8']);
|
||||
}
|
||||
}
|
||||
@@ -46,6 +46,9 @@ final class AdminSettlementBatchIndexController extends Controller
|
||||
'result_batch_id' => (int) $b->result_batch_id,
|
||||
'settle_version' => (int) $b->settle_version,
|
||||
'status' => $b->status,
|
||||
'review_status' => $b->review_status,
|
||||
'reviewed_at' => $b->reviewed_at?->toIso8601String(),
|
||||
'paid_at' => $b->paid_at?->toIso8601String(),
|
||||
'total_ticket_count' => (int) $b->total_ticket_count,
|
||||
'total_win_count' => (int) $b->total_win_count,
|
||||
'total_payout_amount' => (int) $b->total_payout_amount,
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\Settlement;
|
||||
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Support\ApiResponse;
|
||||
use App\Models\SettlementBatch;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Settlement\SettlementBatchWorkflowService;
|
||||
|
||||
final class AdminSettlementBatchPayoutController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SettlementBatchWorkflowService $service) {}
|
||||
|
||||
public function __invoke(SettlementBatch $batch): JsonResponse
|
||||
{
|
||||
try {
|
||||
$updated = $this->service->payout($batch);
|
||||
} catch (\RuntimeException) {
|
||||
return ApiResponse::error(trans('api.client_error'), ErrorCode::ClientHttpError->value, null, 409);
|
||||
}
|
||||
|
||||
return ApiResponse::success([
|
||||
'id' => (int) $updated->id,
|
||||
'status' => $updated->status,
|
||||
'paid_at' => $updated->paid_at?->toIso8601String(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\Settlement;
|
||||
|
||||
use App\Models\AdminUser;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Support\ApiResponse;
|
||||
use App\Models\SettlementBatch;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Admin\SettlementBatchReviewRequest;
|
||||
use App\Services\Settlement\SettlementBatchWorkflowService;
|
||||
|
||||
final class AdminSettlementBatchRejectController extends Controller
|
||||
{
|
||||
public function __construct(private readonly SettlementBatchWorkflowService $service) {}
|
||||
|
||||
public function __invoke(SettlementBatchReviewRequest $request, SettlementBatch $batch): JsonResponse
|
||||
{
|
||||
$admin = $request->user();
|
||||
if (! $admin instanceof AdminUser) {
|
||||
return ApiResponse::error(trans('admin.unauthenticated'), ErrorCode::AdminUnauthenticated->value, null, 401);
|
||||
}
|
||||
|
||||
try {
|
||||
$updated = $this->service->reject($batch, $admin, $request->validated('remark') ?? null);
|
||||
} catch (\RuntimeException) {
|
||||
return ApiResponse::error(trans('api.client_error'), ErrorCode::ClientHttpError->value, null, 409);
|
||||
}
|
||||
|
||||
return ApiResponse::success([
|
||||
'id' => (int) $updated->id,
|
||||
'status' => $updated->status,
|
||||
'review_status' => $updated->review_status,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,11 @@ final class AdminSettlementBatchShowController extends Controller
|
||||
'result_batch_status' => $batch->resultBatch?->status,
|
||||
'settle_version' => (int) $batch->settle_version,
|
||||
'status' => $batch->status,
|
||||
'review_status' => $batch->review_status,
|
||||
'reviewed_by' => $batch->reviewed_by,
|
||||
'reviewed_at' => $batch->reviewed_at?->toIso8601String(),
|
||||
'review_remark' => $batch->review_remark,
|
||||
'paid_at' => $batch->paid_at?->toIso8601String(),
|
||||
'total_ticket_count' => (int) $batch->total_ticket_count,
|
||||
'total_win_count' => (int) $batch->total_win_count,
|
||||
'total_payout_amount' => (int) $batch->total_payout_amount,
|
||||
|
||||
Reference in New Issue
Block a user