WebChannelConfig.php 4.9 KB

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