feat(tests): 添加结算相关功能的测试用例,增强代码覆盖率
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
lotterLaravel E2E / e2e-api (push) Has been cancelled

This commit is contained in:
2026-06-30 11:41:49 +08:00
parent c83343e989
commit 200269196e
7 changed files with 508 additions and 31 deletions

View File

@@ -3,11 +3,14 @@
namespace App\Services\Draw;
use App\Models\Draw;
use App\Models\Player;
use App\Models\TicketItem;
use App\Models\TicketOrder;
use App\Models\WalletTxn;
use App\Services\Player\PlayerCreditService;
use App\Services\Ticket\RiskPoolService;
use App\Services\Ticket\TicketWalletService;
use App\Support\PlayerFundingMode;
/**
* 取消期号前:退本、释池,避免已扣款注单悬空。
@@ -17,6 +20,7 @@ final class DrawCancelBetRefundService
public function __construct(
private readonly RiskPoolService $riskPool,
private readonly TicketWalletService $ticketWallet,
private readonly PlayerCreditService $playerCreditService,
) {}
public function refundOpenBetsForDraw(Draw $draw): void
@@ -76,18 +80,27 @@ final class DrawCancelBetRefundService
])->save();
}
$hasPostedDeduct = WalletTxn::query()
->where('biz_type', 'bet_deduct')
->where('biz_no', $lockedOrder->order_no)
->where('status', 'posted')
->exists();
$player = Player::query()->whereKey($lockedOrder->player_id)->first();
if ($hasPostedDeduct) {
$this->ticketWallet->reverseBetDeduct($lockedOrder);
if ($player !== null && PlayerFundingMode::usesCredit($player)) {
$holdAmount = (int) $lockedOrder->total_actual_deduct;
if ($holdAmount > 0) {
$this->playerCreditService->reverseBetHold($player, $holdAmount, (int) $lockedOrder->id);
}
} else {
$hasPostedDeduct = WalletTxn::query()
->where('biz_type', 'bet_deduct')
->where('biz_no', $lockedOrder->order_no)
->where('status', 'posted')
->exists();
if ($hasPostedDeduct) {
$this->ticketWallet->reverseBetDeduct($lockedOrder);
}
$this->ticketWallet->releaseReservedBetDeduct($lockedOrder, 'draw_cancelled_release');
}
$this->ticketWallet->releaseReservedBetDeduct($lockedOrder, 'draw_cancelled_release');
$lockedOrder->forceFill(['status' => 'refunded'])->save();
}
}