feat: 增强奖池与钱包管理功能

更新 AdminJackpotPoolUpdateController 校验规则,禁止传入 current_amount。
优化 AdminRiskPoolManualStatusController:更新奖池状态后同步 Redis 状态。
在 TransferOrderReconcileController 中新增 completeCredit 方法,用于处理卡住的转账订单对账。
调整 TransferOrderListController:优化转账订单处理条件。
在 TicketItemsIndexController 中实现支持时区的日期筛选,提升日期处理准确性。
扩展 JackpotPool 模型,新增 adjustments 关联关系。
改进票据与钱包相关服务中的错误处理和事务管理。
This commit is contained in:
2026-05-26 14:58:41 +08:00
parent 48349e3302
commit c8c90e3e94
45 changed files with 1877 additions and 104 deletions

View File

@@ -172,6 +172,28 @@ final class RiskPoolService
}
}
/** 后台改池或释池后,将 Redis 风控快照与 DB 对齐。 */
public function syncRedisStateFromPool(RiskPool $pool): void
{
if (! $this->shouldUseRedisAtomicLocks()) {
return;
}
$total = (int) $pool->total_cap_amount;
$locked = (int) $pool->locked_amount;
$remaining = max(0, $total - $locked);
Redis::eval(
$this->overwriteStateLua(),
1,
$this->redisPoolKey((int) $pool->draw_id, (string) $pool->normalized_number),
$total,
$locked,
$remaining,
(int) $pool->version,
);
}
private function shouldUseRedisAtomicLocks(): bool
{
if (App::environment('testing')) {
@@ -196,6 +218,14 @@ return 1
LUA;
}
private function overwriteStateLua(): string
{
return <<<'LUA'
redis.call('HMSET', KEYS[1], 'total', ARGV[1], 'locked', ARGV[2], 'remaining', ARGV[3], 'version', ARGV[4])
return 1
LUA;
}
private function acquireLua(): string
{
return <<<'LUA'