Game.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. namespace app\common\model;
  3. use think\Cache;
  4. use think\Db;
  5. use think\Config;
  6. /**
  7. * 游戏表
  8. * @author Administrator
  9. */
  10. class Game extends \think\Model
  11. {
  12. protected $pk = 'id';
  13. protected $table = 'cy_game';
  14. protected $dateFormat = false; //时间戳格式不自动转换
  15. const CACHE_KEY = "clearable_game_list";
  16. protected $resultSetType = 'collection';
  17. protected static function init()
  18. {
  19. Game::afterInsert(function () {
  20. Cache::clear(self::CACHE_KEY);
  21. });
  22. Game::afterUpdate(function () {
  23. Cache::clear(self::CACHE_KEY);
  24. });
  25. Game::afterWrite(function () {
  26. Cache::clear(self::CACHE_KEY);
  27. });
  28. }
  29. public function getAllByCondition($field = 'id,name', $condition = [],$order='id desc',$type = 'all')
  30. {
  31. $prefix = 'clearable_game_list';
  32. // $condition['isdelete'] = 0;
  33. $cacheKey = $prefix . md5(json_encode($condition) . $field.$order.$type);
  34. $list = Cache::get($cacheKey);
  35. if (empty($list)) {
  36. if ($type == 'self') {
  37. $list = Db::table($this->table)->field($field)->where($condition)->where("is_default = 0")->order($order)->select();
  38. }else{
  39. $list = Db::table($this->table)->field($field)->where($condition)->order($order)->select();
  40. }
  41. if (!empty($list)) {
  42. Cache::tag('clearable_game_list')->set($cacheKey, $list, 300);
  43. }
  44. }
  45. return $list;
  46. }
  47. // 获取非外部游戏列表 考虑到游戏管理更新后的及时性 不做缓存
  48. public function getSelfAllByCondition($field = 'id,name', $condition = [],$order='id desc')
  49. {
  50. // $prefix = 'self_game_list';
  51. $condition['isdelete'] = 0;
  52. $condition['is_default'] = 0;
  53. // $cacheKey = $prefix . md5(json_encode($condition) . $field.$order);
  54. // $list = Cache::get($cacheKey);
  55. // if (empty($list)) {
  56. $list = Db::table($this->table)->field($field)->where($condition)->whereor('is_default','null')->order($order)->select();
  57. // if (!empty($list)) {
  58. // Cache::tag('self_game_list')->set($cacheKey, $list, 3600 * 24);
  59. // }
  60. // }
  61. return $list;
  62. }
  63. public function getInitial($id)
  64. {
  65. $info = $this->field('initial')->find($id);
  66. if (!empty($info)) {
  67. return $info['initial'];
  68. }
  69. return $info;
  70. }
  71. public function getName($id)
  72. {
  73. return $this->where('id', $id)->value('name');
  74. }
  75. public function getOriginName($id)
  76. {
  77. return $this->where('id', $id)->value('origin_name');
  78. }
  79. public function getApkInfo($apk_url,$pinyin,$type='',$platform=0) {
  80. $auth = md5($pinyin.'_app_info');
  81. $cacheKey = Config::get('DATA_CACHE_PREFIX').':'.$auth;
  82. $apk_info = Cache::get($cacheKey);
  83. if ( empty($apk_info) ) {
  84. $pinyin = urlencode($pinyin);
  85. if($platform == 1){
  86. $api_url = Config::get('WEILONG_WEBSITE')['DOWNLOAD'].'/getIosPackageInfo.php';
  87. }
  88. else{
  89. $api_url = Config::get('WEILONG_WEBSITE')['DOWNLOAD'].'/getPackageInfo.php';
  90. }
  91. $apk_info = __getUrlContent($api_url,array('pinyin'=>$pinyin,'auth'=>$auth));
  92. $apk_info = json_decode($apk_info, true);
  93. if ( empty($apk_info['error']) ) {
  94. Cache::set($cacheKey, json_encode($apk_info), 300);
  95. }
  96. } else {
  97. $apk_info = json_decode($apk_info, true);
  98. }
  99. if ( empty($apk_info['error']) && $type ) {
  100. if($apk_info['size'] >= 1024*1024*1024){
  101. $apk_info['size'] = round($apk_info['size']/pow(1024, 3), 2).'GB';
  102. }
  103. else if($apk_info['size'] >= 1024*1024){
  104. $apk_info['size'] = round($apk_info['size']/pow(1024, 2), 2).'MB';
  105. }
  106. else{
  107. $apk_info['size'] = '';
  108. }
  109. $apk_info['version'] = isset($apk_info['version'])&&$apk_info['version'] ? 'V'.$apk_info['version'] : '';
  110. $apk_info['updtime'] = isset($apk_info['updtime'])&&$apk_info['updtime'] ? date('Y-m-d', $apk_info['updtime']) : '';
  111. return $apk_info[$type];
  112. }
  113. return '';
  114. }
  115. /**
  116. * 获取已接单游戏id
  117. */
  118. public function getTakingGame($channelId){
  119. $account_level = Db::name('nw_channel')->where(['id' => $channelId])->value('level');
  120. switch ($account_level) {
  121. case '1'://B账号
  122. $list = model('SdkGameList')->alias('sdk')
  123. ->join('cy_game game', 'game.id = sdk.gameid AND game.cooperation_status != 3 AND (game.is_default = 0)')
  124. ->join('nw_channel channel', 'sdk.channel_id = channel.id', 'left')
  125. ->join('nw_channel p_channel', 'channel.parent_id = p_channel.id AND p_channel.level = 2', 'left')
  126. ->where(['channel.id_path' => ['LIKE', '%,' . $channelId . ',%']])->column('game.id');
  127. break;
  128. case '2'://B-
  129. $list = model('SdkGameList')->alias('sdk')
  130. ->join('cy_game game', 'game.id = sdk.gameid AND game.cooperation_status != 3 AND (game.is_default = 0)')
  131. ->join('nw_channel channel', 'sdk.channel_id = channel.id', 'left')
  132. ->where(['channel.id_path' => ['LIKE', '%,' . $channelId . ',%']])->column('game.id');
  133. break;
  134. case '3'://C
  135. $list = model('SdkGameList')->alias('sdk')
  136. ->join('cy_game game', 'game.id = sdk.gameid AND game.cooperation_status != 3 AND (game.is_default = 0)')
  137. ->join('nw_channel channel', 'sdk.channel_id = channel.id', 'left')
  138. ->field(['game.id'])->where('channel.id = '.$channelId)->column('game.id');
  139. break;
  140. default:
  141. $list = [-1];//不存在接单游戏
  142. break;
  143. }
  144. return $list;
  145. }
  146. /**
  147. * 获取可自由支付的游戏
  148. */
  149. public function getGameListPay(){
  150. return $this->where('free_pay', 2)->field('id,name,name as text')->select();
  151. }
  152. public function getGameInfoList(){
  153. return $this->alias('a')->join('cy_gameinfo b', 'a.id=b.game_id')
  154. ->cache('v2:order:gameInfo', 180)->column('a.name,b.mobileicon,a.nickname', 'a.id');
  155. }
  156. /**
  157. * 获取上线游戏ID集合
  158. *
  159. * @param $launchStatus string 上线状态: 1-上线, 2-未上线
  160. *
  161. * @return array|false|string
  162. */
  163. public function getNormalByIds($launchStatus = 1)
  164. {
  165. // 'normal_by_ids',
  166. $where = ['cooperation_status' => 1];
  167. if($launchStatus != 1){
  168. $where = ['cooperation_status' => ['<>', 1]];
  169. }
  170. return $this->where($where)->cache(180)->column('id');
  171. }
  172. }