Files
lotteryLaravel/app/Services/Player/PlayerRebateProfileService.php
kang a44679665d feat: 增强代理和玩家管理功能
- 在多个控制器中更新权限检查逻辑,确保管理员能够更灵活地管理代理和玩家。
- 在 AdminPlayerStoreController 中引入对玩家创建能力的验证,确保只有具备相应权限的管理员能够创建玩家。
- 更新请求验证逻辑,新增 credit_limit、rebate_rate 和 extra_rebate_rate 字段,以支持更细粒度的玩家管理。
- 在 AgentNodeProfileController 中添加对父代理能力授予的验证,确保子代理的权限在父代理范围内。
- 引入 AgentProfileFieldRules 以简化代理资料更新请求的规则定义,提升代码复用性。
2026-06-04 18:00:50 +08:00

66 lines
2.2 KiB
PHP

<?php
namespace App\Services\Player;
use App\Models\AgentNode;
use App\Services\Agent\RebateLimitValidator;
use Illuminate\Support\Facades\DB;
final class PlayerRebateProfileService
{
public function __construct(
private readonly RebateLimitValidator $rebateLimitValidator,
) {}
/**
* @param list<array{game_type: string, rebate_rate?: float, extra_rebate_rate?: float, inherit_from_agent?: bool}> $profiles
*/
public function syncProfiles(int $playerId, AgentNode $agent, array $profiles): void
{
if ($profiles === []) {
return;
}
$now = now();
foreach ($profiles as $row) {
$gameType = trim((string) ($row['game_type'] ?? '*')) ?: '*';
$inherit = (bool) ($row['inherit_from_agent'] ?? false);
$rebateRate = (float) ($row['rebate_rate'] ?? 0);
$extraRate = (float) ($row['extra_rebate_rate'] ?? 0);
if (! $inherit) {
$this->rebateLimitValidator->assertPlayerRebateWithinAgent($agent, $rebateRate, $extraRate);
}
DB::table('player_rebate_profiles')->updateOrInsert(
['player_id' => $playerId, 'game_type' => $gameType],
[
'inherit_from_agent' => $inherit,
'rebate_rate' => $inherit ? 0 : $rebateRate,
'extra_rebate_rate' => $inherit ? 0 : $extraRate,
'updated_at' => $now,
'created_at' => $now,
],
);
}
}
/**
* @return list<array{game_type: string, rebate_rate: float, extra_rebate_rate: float, inherit_from_agent: bool}>
*/
public function listForPlayer(int $playerId): array
{
return DB::table('player_rebate_profiles')
->where('player_id', $playerId)
->orderBy('game_type')
->get()
->map(static fn (object $row): array => [
'game_type' => (string) $row->game_type,
'rebate_rate' => (float) $row->rebate_rate,
'extra_rebate_rate' => (float) $row->extra_rebate_rate,
'inherit_from_agent' => (bool) $row->inherit_from_agent,
])
->all();
}
}