feat: 为赔率项增加 dimension 字段并支持按维度配置佣金,调整后台配置导航权限
This commit is contained in:
@@ -30,6 +30,8 @@ final class OddsStandardScopes
|
||||
*
|
||||
* 仅对「该版本里已出现过的 (play_code, currency_code)」补全,避免给从未配置过的玩法凭空加行。
|
||||
* 若版本下无任何 odds_items,则用当前全部玩法 × 首个可下注币种补全。
|
||||
*
|
||||
* 佣金按维度(2D/3D/4D)配置:同一维度的所有玩法共享佣金率。
|
||||
*/
|
||||
public static function syncMissingForVersion(OddsVersion $version): void
|
||||
{
|
||||
@@ -54,26 +56,45 @@ final class OddsStandardScopes
|
||||
$pairs = PlayType::query()
|
||||
->orderBy('sort_order')
|
||||
->orderBy('play_code')
|
||||
->get(['play_code'])
|
||||
->get(['play_code', 'dimension'])
|
||||
->map(fn (PlayType $pt) => (object) [
|
||||
'play_code' => $pt->play_code,
|
||||
'dimension' => $pt->dimension,
|
||||
'currency_code' => $currencyCode,
|
||||
]);
|
||||
}
|
||||
|
||||
// 按维度分组,获取每个维度的佣金率
|
||||
$dimensionCommissions = [];
|
||||
foreach ($pairs as $pair) {
|
||||
$dimension = $pair->dimension ?? null;
|
||||
$currencyCode = strtoupper((string) $pair->currency_code);
|
||||
$key = $dimension.'|'.$currencyCode;
|
||||
|
||||
if (!isset($dimensionCommissions[$key])) {
|
||||
// 从现有记录中获取该维度的佣金率
|
||||
$anchor = OddsItem::query()
|
||||
->where('version_id', $vid)
|
||||
->where('currency_code', $currencyCode)
|
||||
->where('dimension', $dimension)
|
||||
->orderByDesc('id')
|
||||
->first();
|
||||
|
||||
$dimensionCommissions[$key] = [
|
||||
'rebate' => (float) ($anchor?->rebate_rate ?? 0),
|
||||
'commission' => (float) ($anchor?->commission_rate ?? 0),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($pairs as $pair) {
|
||||
$playCode = (string) $pair->play_code;
|
||||
$dimension = $pair->dimension ?? null;
|
||||
$currencyCode = strtoupper((string) $pair->currency_code);
|
||||
|
||||
$anchor = OddsItem::query()
|
||||
->where('version_id', $vid)
|
||||
->where('play_code', $playCode)
|
||||
->where('currency_code', $currencyCode)
|
||||
->orderByDesc('id')
|
||||
->first();
|
||||
|
||||
$rebate = (float) ($anchor?->rebate_rate ?? 0);
|
||||
$commission = (float) ($anchor?->commission_rate ?? 0);
|
||||
$key = $dimension.'|'.$currencyCode;
|
||||
|
||||
$rebate = $dimensionCommissions[$key]['rebate'] ?? 0;
|
||||
$commission = $dimensionCommissions[$key]['commission'] ?? 0;
|
||||
|
||||
foreach (self::PRESET_ODDS_BY_SCOPE as $scope => $oddsValue) {
|
||||
$exists = OddsItem::query()
|
||||
@@ -90,6 +111,7 @@ final class OddsStandardScopes
|
||||
'version_id' => $vid,
|
||||
'play_code' => $playCode,
|
||||
'prize_scope' => $scope,
|
||||
'dimension' => $dimension,
|
||||
'odds_value' => $oddsValue,
|
||||
'rebate_rate' => $rebate,
|
||||
'commission_rate' => $commission,
|
||||
|
||||
Reference in New Issue
Block a user