AgentCommission.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. // 文件路径: app/UserAgentCommission.php
  3. namespace App\Game;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Support\Facades\Cache;
  6. use Illuminate\Support\Facades\Redis;
  7. class AgentCommission extends Model
  8. {
  9. protected $table = 'webgame.AgentCommission';
  10. protected $fillable = ['Level', 'BRL', 'USD','MXN','RUB','EUR', 'Rate'];
  11. protected $connection='mysql';
  12. private static $_commissionData=null;
  13. // 缓存提成数据
  14. public static function cacheCommissionData()
  15. {
  16. self::$_commissionData = self::all()->keyBy('Level')->toArray();
  17. foreach (self::$_commissionData as $k => &$v) {
  18. $v['BRL'] = $v[env('CONFIG_24680_CURRENCY')];
  19. }
  20. Redis::set('UserAgentCommission', json_encode(self::$_commissionData));
  21. }
  22. // 获取缓存中的提成数据
  23. public static function getCommissionData()
  24. {
  25. if(self::$_commissionData)return self::$_commissionData;
  26. $commissionData = Redis::get('UserAgentCommission');
  27. if ($commissionData) {
  28. self::$_commissionData=json_decode($commissionData, true);
  29. return self::$_commissionData;
  30. } else {
  31. self::cacheCommissionData();
  32. return self::getCommissionData();
  33. }
  34. }
  35. // 根据业绩获取对应的 level 和 rate
  36. public static function getLevelAndRate($performance,$DefaultCurrency=null)
  37. {
  38. $commissionData = self::getCommissionData();
  39. if(!$DefaultCurrency)$DefaultCurrency=env('CONFIG_24680_CURRENCY');
  40. //判断是否存在于数据表中的货币
  41. if(!in_array($DefaultCurrency,array_keys($commissionData['1']))){
  42. $DefaultCurrency='USD';
  43. }
  44. $lastData=$commissionData[1];
  45. foreach ($commissionData as $data) {
  46. if ($performance < $data[$DefaultCurrency]) {
  47. return ['level' => $lastData['Level'], 'rate' => $lastData['Rate']];
  48. }
  49. $lastData=$data;
  50. }
  51. // 如果业绩超出表中最大值,返回最高级别
  52. return ['level' => end($commissionData)['Level'], 'rate' => end($commissionData)['Rate']];
  53. }
  54. // 监听模型的保存和删除事件
  55. protected static function boot()
  56. {
  57. parent::boot();
  58. static::saved(function ($model) {
  59. self::cacheCommissionData();
  60. });
  61. static::deleted(function ($model) {
  62. self::cacheCommissionData();
  63. });
  64. }
  65. }