| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <?php
- namespace App\Module\UrsPromotion\Services;
- use App\Module\UrsPromotion\Logics\UrsTransferFeeLogic;
- use App\Module\UrsPromotion\Dtos\UrsTransferFeeConfigDto;
- use Illuminate\Support\Facades\Log;
- /**
- * URS转账手续费服务
- *
- * 对外提供URS推广模块的转入/转出手续费相关服务接口
- */
- class UrsTransferFeeService
- {
- /**
- * 根据用户ID获取最优手续费率
- *
- * @param int $userId 农场用户ID
- * @param string $transferType 转账类型:'in'转入,'out'转出
- * @return float 手续费率
- */
- public static function getBestFeeRateForUser(int $userId, string $transferType = 'out'): float
- {
- try {
- $logic = new UrsTransferFeeLogic();
- return $logic->getBestFeeRateForUser($userId, $transferType);
- } catch (\Exception $e) {
- Log::error('URS转账手续费率获取失败', [
- 'user_id' => $userId,
- 'transfer_type' => $transferType,
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ]);
- // 返回默认费率(转入通常免费,转出5%)
- return $transferType === 'in' ? 0.0 : 0.05;
- }
- }
- /**
- * 根据房屋等级和达人等级计算最优手续费率
- *
- * @param int $houseLevel 房屋等级
- * @param int $talentLevel 达人等级
- * @param string $transferType 转账类型:'in'转入,'out'转出
- * @return float 手续费率
- */
- public static function calculateBestFeeRate(int $houseLevel, int $talentLevel, string $transferType = 'out'): float
- {
- try {
- $logic = new UrsTransferFeeLogic();
- return $logic->calculateBestFeeRate($houseLevel, $talentLevel, $transferType);
- } catch (\Exception $e) {
- Log::error('URS转账手续费率计算失败', [
- 'house_level' => $houseLevel,
- 'talent_level' => $talentLevel,
- 'transfer_type' => $transferType,
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ]);
- // 返回默认费率(转入通常免费,转出5%)
- return $transferType === 'in' ? 0.0 : 0.05;
- }
- }
- /**
- * 获取所有手续费配置
- *
- * @return array<UrsTransferFeeConfigDto>
- */
- public static function getAllConfigs(): array
- {
- try {
- $logic = new UrsTransferFeeLogic();
- return $logic->getAllConfigs();
- } catch (\Exception $e) {
- Log::error('获取URS转出手续费配置失败', [
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ]);
- return [];
- }
- }
- /**
- * 清除用户手续费率缓存
- *
- * @param int $userId 农场用户ID
- * @return void
- */
- public static function clearUserFeeRateCache(int $userId): void
- {
- try {
- $logic = new UrsTransferFeeLogic();
- $logic->clearUserFeeRateCache($userId);
- Log::info('URS转出手续费率缓存已清除', [
- 'user_id' => $userId
- ]);
- } catch (\Exception $e) {
- Log::error('清除URS转出手续费率缓存失败', [
- 'user_id' => $userId,
- 'error' => $e->getMessage()
- ]);
- }
- }
- /**
- * 清除所有手续费率缓存
- *
- * @return void
- */
- public static function clearAllFeeRateCache(): void
- {
- try {
- $logic = new UrsTransferFeeLogic();
- $logic->clearAllFeeRateCache();
- Log::info('所有URS转出手续费率缓存已清除');
- } catch (\Exception $e) {
- Log::error('清除所有URS转出手续费率缓存失败', [
- 'error' => $e->getMessage()
- ]);
- }
- }
- /**
- * 获取用户的手续费优惠信息
- *
- * @param int $userId 农场用户ID
- * @return array 包含手续费率、优惠信息等
- */
- public static function getUserFeeInfo(int $userId): array
- {
- try {
- $logic = new UrsTransferFeeLogic();
- // 获取用户的最优手续费率
- $feeRate = $logic->getBestFeeRateForUser($userId);
- // 获取默认费率用于比较
- $defaultRate = 0.05; // 5%
- // 计算优惠幅度
- $discountAmount = $defaultRate - $feeRate;
- $discountPercentage = $defaultRate > 0 ? ($discountAmount / $defaultRate) * 100 : 0;
- return [
- 'fee_rate' => $feeRate,
- 'fee_rate_percentage' => number_format($feeRate * 100, 2) . '%',
- 'default_rate' => $defaultRate,
- 'default_rate_percentage' => number_format($defaultRate * 100, 2) . '%',
- 'discount_amount' => $discountAmount,
- 'discount_percentage' => number_format($discountPercentage, 2) . '%',
- 'has_discount' => $feeRate < $defaultRate,
- ];
- } catch (\Exception $e) {
- Log::error('获取用户手续费优惠信息失败', [
- 'user_id' => $userId,
- 'error' => $e->getMessage()
- ]);
- // 返回默认信息
- return [
- 'fee_rate' => 0.05,
- 'fee_rate_percentage' => '5.00%',
- 'default_rate' => 0.05,
- 'default_rate_percentage' => '5.00%',
- 'discount_amount' => 0,
- 'discount_percentage' => '0.00%',
- 'has_discount' => false,
- ];
- }
- }
- }
|