WebChannelConfig.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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', 0b1);
  7. define('SPECIAL_MODE_ZERO_MONEY', 0b10); //注册不送钱
  8. define('SPECIAL_DISABLE_PROMOTE_INSTALL', 0b100); //提示安装
  9. //define('SPECIAL_MODE_ENABLE_INSURE_SCORE', 0b1000); //直接启用第二货币 GameScoreInfo InsureScore
  10. define('SPECIAL_MODE_REG_TO_REALMONEY', 0b10000); //默认注册送的钱是真钱不是第二货币
  11. define('SPECIAL_MODE_MAIL_BONUS', 0b100000); //MAIL验证送钱
  12. define('SPECIAL_MODE_FIRSTPAY_OFF30', 0b1000000); //首冲打开30%bonus
  13. define('SPECIAL_MODE_DEBUG_EVENT', 0b10000000); //是否开启事件日志上保
  14. define('SPECIAL_MODE_REGION_UNIQUE', 0b100000000); //是否开启区域独立模式
  15. define('SPECIAL_MODE_FB_JUMP_LATER', 0b1000000000); //fb内浏览器弹出时机靠后
  16. define('SPECIAL_MODE_FB_JUMP_LATER2', 0b10000000000); //fb内浏览器弹出时机靠后
  17. define('SPECIAL_MODE_JUMP_APK1', 0b100000000000); //安卓包开启无脑跳转引导
  18. define('SPECIAL_MODE_JUMP_APK2', 0b1000000000000); //安卓包开启付费后引导跳转
  19. class WebChannelConfig extends Model
  20. {
  21. protected $table = 'webgame.WebChannelConfig';
  22. protected $primaryKey = 'ID';
  23. public $incrementing = true;
  24. protected $keyType = 'int';
  25. protected $connection = 'mysql';
  26. protected $fillable = [
  27. 'Channel', 'PackageName', 'RegionID', 'Remarks', 'StateNo','SpecialMode', 'PlatformName', 'PlatformID', 'PlatformToken', 'LoginOpen','RegOpen','BonusArr','ShadowChannel','LightApk','FullApk'
  28. ];
  29. private static $key='web_channel_config:';
  30. public $timestamps = false;
  31. protected $shadow_channel=0;
  32. public function SHADOW_CHANNEL()
  33. {
  34. if($this->shadow_channel)return $this->shadow_channel;
  35. $this->shadow_channel=$this->Channel;
  36. if(!empty($this->ShadowChannel)){
  37. $channels=explode('|',$this->ShadowChannel);
  38. $allRate=0;
  39. $rates=[];
  40. foreach ($channels as $channel){
  41. $channel=explode('%',$channel);
  42. $allRate+=$channel[0];
  43. $rates[$allRate]=$channel[1];
  44. }
  45. $rand=mt_rand(0, 100);
  46. foreach($rates as $rate=>$channel){
  47. if($rand<$rate){
  48. $this->shadow_channel=$channel;
  49. return $channel;
  50. }
  51. }
  52. }
  53. return $this->shadow_channel;
  54. }
  55. public function BONUS_PWA()
  56. {
  57. return explode('|',$this->BonusArr)[3]??00;
  58. }
  59. public function BONUS_VERIFY_PHONE()
  60. {
  61. return explode('|',$this->BonusArr)[1]??00;
  62. }
  63. public function BONUS_REG()
  64. {
  65. return explode('|',$this->BonusArr)[0]??00;
  66. }
  67. public function BONUS_VERIFY_EMAIL()
  68. {
  69. return explode('|',$this->BonusArr)[2]??00;
  70. }
  71. public function isRealMoneyReg()
  72. {
  73. return ($this->SpecialMode&SPECIAL_MODE_REG_TO_REALMONEY)==SPECIAL_MODE_REG_TO_REALMONEY;
  74. }
  75. public static function GuestOpen($config)
  76. {
  77. return ($config->SpecialMode&SPECIAL_MODE_GUEST)==SPECIAL_MODE_GUEST;
  78. }
  79. public function isDisablePromote()
  80. {
  81. return ($this->SpecialMode&SPECIAL_DISABLE_PROMOTE_INSTALL)==SPECIAL_DISABLE_PROMOTE_INSTALL;
  82. }
  83. public function isDebugEvent()
  84. {
  85. return ($this->SpecialMode&SPECIAL_MODE_DEBUG_EVENT)==SPECIAL_MODE_DEBUG_EVENT;
  86. }
  87. public function isFbJumpLater(){
  88. if(($this->SpecialMode&SPECIAL_MODE_FB_JUMP_LATER2)==SPECIAL_MODE_FB_JUMP_LATER2)return 2;
  89. if(($this->SpecialMode&SPECIAL_MODE_FB_JUMP_LATER)==SPECIAL_MODE_FB_JUMP_LATER)return 1;
  90. return 0;
  91. }
  92. public function isApkJump(){
  93. if(($this->SpecialMode&SPECIAL_MODE_JUMP_APK2)==SPECIAL_MODE_JUMP_APK2)return 2;
  94. if(($this->SpecialMode&SPECIAL_MODE_JUMP_APK1)==SPECIAL_MODE_JUMP_APK1)return 1;
  95. return 0;
  96. }
  97. public function isRegionUnique()
  98. {
  99. if(($this->SpecialMode&SPECIAL_MODE_REGION_UNIQUE)==SPECIAL_MODE_REGION_UNIQUE&&!empty($this->RegionID)){
  100. return $this->RegionID;
  101. }else{
  102. $region_config=RouteService::getRegionConfig();
  103. if($region_config&&$region_config->isAllChannelsUnique()){
  104. return $region_config->RegionID;
  105. }
  106. return "";
  107. }
  108. }
  109. public function isGuestOpen()
  110. {
  111. return ($this->SpecialMode&SPECIAL_MODE_GUEST)==SPECIAL_MODE_GUEST;
  112. }
  113. public function isRegZeroMoneyOpen()
  114. {
  115. return ($this->SpecialMode&SPECIAL_MODE_ZERO_MONEY)==SPECIAL_MODE_ZERO_MONEY;
  116. }
  117. // 获取特定 Channel 的记录
  118. public static function getByChannel($channel)
  119. {
  120. $cacheKey = self::$key . $channel;
  121. $cachedConfig = Redis::get($cacheKey);
  122. if ($cachedConfig) {
  123. return new self(json_decode($cachedConfig,true));
  124. }
  125. $config = self::where('Channel', $channel)->first();
  126. if ($config) {
  127. Redis::setex($cacheKey, 300, $config->toJson());
  128. }
  129. return $config;
  130. }
  131. // 清除缓存
  132. public static function clearCache($channel)
  133. {
  134. $cacheKey = self::$key . $channel;
  135. Redis::del($cacheKey);
  136. }
  137. // 监听模型事件
  138. protected static function boot()
  139. {
  140. parent::boot();
  141. static::saved(function ($model) {
  142. self::clearCache($model->Channel);
  143. });
  144. static::deleted(function ($model) {
  145. self::clearCache($model->Channel);
  146. });
  147. }
  148. }