WebChannelConfig.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace App\Game;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Support\Facades\Redis;
  5. define('SPECIAL_MODE_GUEST', 1);
  6. define('SPECIAL_MODE_ZERO_MONEY', 2);//注册不送钱
  7. define('SPECIAL_DISABLE_PROMOTE_INSTALL', 4);//提示安装
  8. define('SPECIAL_MODE_PWA_BONUS', 8);//安装app送钱
  9. define('SPECIAL_MODE_SMS_BONUS', 16);//手机验证送钱
  10. define('SPECIAL_MODE_MAIL_BONUS', 32);//MAIL验证送钱
  11. define('SPECIAL_MODE_FIRSTPAY_OFF30', 64);//首冲打开30%bonus
  12. define('SPECIAL_MODE_DEBUG_EVENT', 128);//是否开启事件日志上保
  13. define('SPECIAL_MODE_REGION_UNIQUE', 256);//是否开启区域独立模式
  14. class WebChannelConfig extends Model
  15. {
  16. protected $table = 'webgame.WebChannelConfig';
  17. protected $primaryKey = 'ID';
  18. public $incrementing = true;
  19. protected $keyType = 'int';
  20. protected $connection = 'mysql';
  21. protected $fillable = [
  22. 'Channel', 'PackageName', 'RegionID', 'Remarks', 'StateNo','SpecialMode', 'PlatformName', 'PlatformID','LoginOpen','RegOpen','BonusArr','ShadowChannel','LightApk','FullApk'
  23. ];
  24. private static $key='web_channel_config:';
  25. public $timestamps = false;
  26. protected $shadow_channel=0;
  27. public function SHADOW_CHANNEL()
  28. {
  29. if($this->shadow_channel)return $this->shadow_channel;
  30. $this->shadow_channel=$this->Channel;
  31. if(!empty($this->ShadowChannel)){
  32. $channels=explode('|',$this->ShadowChannel);
  33. $allRate=0;
  34. $rates=[];
  35. foreach ($channels as $channel){
  36. $channel=explode('%',$channel);
  37. $allRate+=$channel[0];
  38. $rates[$allRate]=$channel[1];
  39. }
  40. $rand=mt_rand(0, 100);
  41. foreach($rates as $rate=>$channel){
  42. if($rand<$rate){
  43. $this->shadow_channel=$channel;
  44. return $channel;
  45. }
  46. }
  47. }
  48. return $this->shadow_channel;
  49. }
  50. public function BONUS_PWA()
  51. {
  52. return explode('|',$this->BonusArr)[3]??00;
  53. }
  54. public function BONUS_VERIFY_PHONE()
  55. {
  56. return explode('|',$this->BonusArr)[1]??00;
  57. }
  58. public function BONUS_REG()
  59. {
  60. return explode('|',$this->BonusArr)[0]??00;
  61. }
  62. public function BONUS_VERIFY_EMAIL()
  63. {
  64. return explode('|',$this->BonusArr)[2]??00;
  65. }
  66. public static function GuestOpen($config)
  67. {
  68. return ($config->SpecialMode&SPECIAL_MODE_GUEST)==SPECIAL_MODE_GUEST;
  69. }
  70. public function isFistPay30()
  71. {
  72. return ($this->SpecialMode&SPECIAL_MODE_SMS_BONUS)==SPECIAL_MODE_SMS_BONUS;
  73. }
  74. public function isSmsBonus()
  75. {
  76. return ($this->SpecialMode&SPECIAL_MODE_SMS_BONUS)==SPECIAL_MODE_SMS_BONUS;
  77. }
  78. public function isDisablePromote()
  79. {
  80. return ($this->SpecialMode&SPECIAL_DISABLE_PROMOTE_INSTALL)==SPECIAL_DISABLE_PROMOTE_INSTALL;
  81. }
  82. public function isPwaBonus()
  83. {
  84. return ($this->SpecialMode&SPECIAL_MODE_PWA_BONUS)==SPECIAL_MODE_PWA_BONUS;
  85. }
  86. public function isDebugEvent()
  87. {
  88. return ($this->SpecialMode&SPECIAL_MODE_DEBUG_EVENT)==SPECIAL_MODE_DEBUG_EVENT;
  89. }
  90. public function isRegionUnique()
  91. {
  92. if(($this->SpecialMode&SPECIAL_MODE_REGION_UNIQUE)==SPECIAL_MODE_REGION_UNIQUE&&!empty($this->RegionID)){
  93. return $this->RegionID;
  94. }else{
  95. return "";
  96. }
  97. }
  98. public function isGuestOpen()
  99. {
  100. return ($this->SpecialMode&SPECIAL_MODE_GUEST)==SPECIAL_MODE_GUEST;
  101. }
  102. public function isRegZeroMoneyOpen()
  103. {
  104. return ($this->SpecialMode&SPECIAL_MODE_ZERO_MONEY)==SPECIAL_MODE_ZERO_MONEY;
  105. }
  106. // 获取特定 Channel 的记录
  107. public static function getByChannel($channel)
  108. {
  109. $cacheKey = self::$key . $channel;
  110. $cachedConfig = Redis::get($cacheKey);
  111. if ($cachedConfig) {
  112. return new self(json_decode($cachedConfig,true));
  113. }
  114. $config = self::where('Channel', $channel)->first();
  115. if ($config) {
  116. Redis::setex($cacheKey, 300, $config->toJson());
  117. }
  118. return $config;
  119. }
  120. // 清除缓存
  121. public static function clearCache($channel)
  122. {
  123. $cacheKey = self::$key . $channel;
  124. Redis::del($cacheKey);
  125. }
  126. // 监听模型事件
  127. protected static function boot()
  128. {
  129. parent::boot();
  130. static::saved(function ($model) {
  131. self::clearCache($model->Channel);
  132. });
  133. static::deleted(function ($model) {
  134. self::clearCache($model->Channel);
  135. });
  136. }
  137. }