From 770fd8950d92cdadf0cdfba49e52e81ff9019524 Mon Sep 17 00:00:00 2001 From: kang Date: Mon, 25 May 2026 16:43:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=E9=A2=91=E7=8E=87=E5=B9=B6=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 `lottery:draw-tick` 命令的调度频率从每分钟更新为每10秒,以提高抽奖数据处理的及时性。 - 在 `AdminSettlementBatchPayoutController` 中增强异常处理,提供更具体的错误信息,特别是针对未批准的结算批次。 - 在多语言文件中添加相应的错误信息翻译,确保用户友好的反馈。 --- README.md | 2 +- .../AdminSettlementBatchPayoutController.php | 10 ++++++++-- bootstrap/app.php | 3 ++- lang/en/api.php | 1 + lang/ne/api.php | 1 + lang/zh/api.php | 1 + 6 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9c30816..caeb72a 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ php artisan serve php artisan reverb:start ``` -**终端 3 — 任务调度(`draw.countdown` 每秒 + `lottery:draw-tick` 每分钟)** +**终端 3 — 任务调度(`draw.countdown` 每秒 + `lottery:draw-tick` 每 10 秒)** ```bash php artisan schedule:work diff --git a/app/Http/Controllers/Api/V1/Admin/Settlement/AdminSettlementBatchPayoutController.php b/app/Http/Controllers/Api/V1/Admin/Settlement/AdminSettlementBatchPayoutController.php index 83e71d0..5cc293e 100644 --- a/app/Http/Controllers/Api/V1/Admin/Settlement/AdminSettlementBatchPayoutController.php +++ b/app/Http/Controllers/Api/V1/Admin/Settlement/AdminSettlementBatchPayoutController.php @@ -17,8 +17,14 @@ final class AdminSettlementBatchPayoutController extends Controller { try { $updated = $this->service->payout($batch); - } catch (\RuntimeException) { - return ApiResponse::error(trans('api.client_error'), ErrorCode::ClientHttpError->value, null, 409); + } catch (\RuntimeException $e) { + $reason = $e->getMessage(); + $msg = match ($reason) { + 'settlement_not_approved' => trans('api.settlement_not_approved'), + default => trans('api.client_error'), + }; + + return ApiResponse::error($msg, ErrorCode::ClientHttpError->value, ['reason' => $reason], 409); } return ApiResponse::success([ diff --git a/bootstrap/app.php b/bootstrap/app.php index b688939..b2471fa 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -169,7 +169,8 @@ return Application::configure(basePath: dirname(__DIR__)) }); }) ->withSchedule(function (Schedule $schedule): void { - $schedule->command('lottery:draw-tick')->everyMinute(); + /** 开奖时刻后尽快跑 RNG/冷静期,避免大厅在 0:00 卡住最多 1 分钟 */ + $schedule->command('lottery:draw-tick')->everyTenSeconds(); $schedule->command('lottery:wallet-transfer-reconcile --lookback-hours=24 --stale-minutes=15 --limit=1000') ->everyTenMinutes() ->withoutOverlapping(); diff --git a/lang/en/api.php b/lang/en/api.php index 3848d0d..ecd90bc 100644 --- a/lang/en/api.php +++ b/lang/en/api.php @@ -3,6 +3,7 @@ return [ 'validation_failed' => 'The given data was invalid.', 'client_error' => 'This request could not be completed.', + 'settlement_not_approved' => 'Settlement batch is not approved for payout (both status and review_status must be approved).', 'not_found' => 'The requested resource was not found.', 'too_many_requests' => 'Too many requests. Please try again later.', 'server_error' => 'Something went wrong. Please try again later.', diff --git a/lang/ne/api.php b/lang/ne/api.php index b2caae9..3308792 100644 --- a/lang/ne/api.php +++ b/lang/ne/api.php @@ -3,6 +3,7 @@ return [ 'validation_failed' => 'दिइएको डाटा अमान्य छ।', 'client_error' => 'यो अनुरोध पूरा गर्न सकिएन।', + 'settlement_not_approved' => 'सेटलमेन्ट ब्याच पेमेन्टका लागि स्वीकृत छैन (status र review_status दुवै approved हुनुपर्छ)।', 'not_found' => 'अनुरोध गरिएको स्रोत फेला परेन।', 'too_many_requests' => 'धेरै अनुरोधहरू। कृपया पछि प्रयास गर्नुहोस्।', 'server_error' => 'केही गडबड भयो। कृपया पछि प्रयास गर्नुहोस्।', diff --git a/lang/zh/api.php b/lang/zh/api.php index 697dc8a..d0c583f 100644 --- a/lang/zh/api.php +++ b/lang/zh/api.php @@ -3,6 +3,7 @@ return [ 'validation_failed' => '请求参数校验未通过。', 'client_error' => '请求无法完成。', + 'settlement_not_approved' => '结算批次尚未审核通过,无法派彩(需 status 与 review_status 均为 approved)。', 'not_found' => '请求的资源不存在。', 'too_many_requests' => '请求过于频繁,请稍后再试。', 'server_error' => '服务暂时不可用,请稍后再试。',