fix: 修复并发竞态与幂等性缺陷并优化子树查询
Some checks failed
lotterLaravel CI / test (push) Has been cancelled

- 扩大玩家ID随机数位宽降低碰撞概率
- 授信额度变更加 lockForUpdate 防并发下调
- 结算冲正与入账利用唯一索引实现幂等闸门
- 失败登录计数加锁防丢失
- 代理子树查询改用子查询替代全表 pluck
- 修复返点默认值百分比单位转换
- 测试中全量 fake 广播事件防 CI 500
This commit is contained in:
2026-06-18 09:38:24 +08:00
parent 2e0b257160
commit 6b2ea39ea1
13 changed files with 400 additions and 135 deletions

View File

@@ -30,7 +30,18 @@ final class CreditAmountScale
public static function majorToMinor(int $major, string $currencyCode): int
{
$major = max(0, $major);
// 负值防御:所有调用方都应在传入前 max(0, ...) 兜底available credit / balance / 等),
// 此处 double-check 是兜底而非业务逻辑。若发生负数通常意味着上游计算 bug
// 记录 warning 让 production 暴露问题而不被静默吞掉。
if ($major < 0) {
\Illuminate\Support\Facades\Log::warning('CreditAmountScale::majorToMinor received negative value', [
'major' => $major,
'currency_code' => $currencyCode,
'trace' => debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 4),
]);
return 0;
}
return $major * self::minorUnitFactor($currencyCode);
}