Subpackage.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. /**
  3. * 分包控制器
  4. *
  5. * Created by PhpStorm.
  6. * User: Admin
  7. * Date: 2018/5/10
  8. * Time: 10:27
  9. */
  10. namespace app\mcpsapi\controller;
  11. use app\common\model\Game as GameModel;
  12. use app\common\logic\SubPackage as SubChannel;
  13. use think\Db;
  14. use think\Env;
  15. class SubPackage extends Guild
  16. {
  17. protected $gameIOS; // 特殊处理的 IOS游戏id 数组
  18. protected function _initialize()
  19. {
  20. parent::_initialize();
  21. // 特殊处理的 IOS游戏id 数组
  22. $this->gameIOS = config('gameIOS');
  23. $guildInfo = session('guild_info');
  24. $this->_level = $guildInfo['level'];
  25. }
  26. /**
  27. * 批量打包请求限制
  28. *
  29. * @param int $expire_time 过期时间
  30. *
  31. * @return boolean
  32. */
  33. private function checkBatchPackageLimit($expire_time){
  34. $redis = \think\Cache::store('default');
  35. $cache_key = 'guild_batch_package_limit_'.session('guild_info')['channel_id'];
  36. if($redis->has($cache_key)) {
  37. return true;
  38. }else{
  39. $redis->set($cache_key, 1, $expire_time);
  40. return false;
  41. }
  42. }
  43. /**
  44. * 获取子账号
  45. * @param [type] $channelId [description]
  46. */
  47. private function getChildAccount($channelId)
  48. {
  49. $parent_id = Db::name('nw_channel')->where(['id'=>$channelId])->value('parent_id');
  50. $in_path = ','.$parent_id.','.$channelId.',';
  51. $where = [];
  52. if ($this->_level == 3) {
  53. $where = ['id'=>$channelId];
  54. }else{
  55. $where = ['id_path'=>['LIKE', '%' . $in_path . '%'],'level'=>3];
  56. }
  57. $ChildAccount = Db::name('nw_channel')->where($where)->column('name','id');
  58. return $ChildAccount;
  59. }
  60. /**
  61. * 游戏打包
  62. * @return [type] [description]
  63. */
  64. public function package()
  65. {
  66. $gameId = input('gameIds'); //打包游戏组
  67. $package_type = input('package_type',0,'intval'); //包体类型
  68. $from = input('from'); //请求来源地
  69. $channelIds = input('channelIds','','trim');
  70. $channels = empty($channelIds) ? [] : explode(',', $channelIds);
  71. $childAccount = $this->getChildAccount($this->_channelId);//获取子账号列表 用于消息提示
  72. $sdk_channel_list = model('SdkGameList')->where(['gameid'=>$gameId])->column('channel_id');//白名单申请列表
  73. $gameName = '';
  74. $AccountStr = '';
  75. if (!$gameId) {
  76. return json(['data'=>[],'code'=>'10008','msg'=>'请选择要分包的游戏']);
  77. }else{
  78. $cooperation_status = Db::name('cy_game')->where(['id'=>$gameId])->value('cooperation_status');
  79. $game_kind = Db::name('cy_game')->where(['id'=>$gameId])->value('game_kind');
  80. if ($game_kind == 1) {
  81. return json(['data'=>[],'code'=>10008,'msg'=>'该游戏为混服游戏,无法在该端编辑']);
  82. }
  83. if($cooperation_status==0){
  84. return json(['data'=>[],'code'=>10008,'msg'=>'该游戏尚在对接中,不能进行分包']);
  85. }
  86. else if($cooperation_status==3){
  87. return json(['data'=>[],'code'=>10008,'msg'=>'该游戏已下架,不能再进行分包']);
  88. }
  89. $gameName = db::name('cy_game')->where(['id'=>$gameId])->value('name');
  90. }
  91. $msgList = [];
  92. if (count($channels)>0) {
  93. foreach ($channels as $key => $value) {
  94. if (!isset($childAccount[$value])) {
  95. $msgList[] = ['id'=>$value,'msg'=>'该渠道id不属于本账号的推广子渠道,请联系管理员','type'=>0];
  96. unset($channels[$key]);
  97. }elseif (isFrozenOption($value, $gameId)) {
  98. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>'该渠道禁止推广游戏,请联系管理员','type'=>0];
  99. unset($channels[$key]);
  100. }
  101. }
  102. }else{
  103. return json(['data'=>[],'code'=>10032,'msg'=>'未选择推广员']);
  104. }
  105. $subpackage = new \app\common\logic\SubPackage();
  106. $adminId = session('guild_info')['id'];
  107. $game_status = true;
  108. if (count($channels)>0) {
  109. foreach ($channels as $key => $value) {
  110. $gameFrozenInfo = Db::name('nw_game_frozen')->where(['game_id'=>$gameId])->find();
  111. if($gameFrozenInfo){
  112. //无该渠道、该游戏的冻结信息时,添加
  113. if(!Db::name('nw_channel_frozen')->where(['game_id'=>$gameId,'channel_id'=>$value])->find()){
  114. $frozenData['game_id'] = $gameId;
  115. $frozenData['channel_id'] = $value;
  116. $frozenData['subpackage'] = $gameFrozenInfo['subpackage'];
  117. $frozenData['grant_money'] = $gameFrozenInfo['grant_money'];
  118. $frozenData['consume'] = $gameFrozenInfo['consume'];
  119. $frozenData['member_login'] = $gameFrozenInfo['member_login'];
  120. $frozenData['register'] = $gameFrozenInfo['register'];
  121. $frozenData['create_time'] = NOW_TIMESTAMP;
  122. $frozenData['update_time'] = NOW_TIMESTAMP;
  123. Db::name('nw_channel_frozen')->insert($frozenData);
  124. //被禁止打包
  125. if($frozenData['subpackage']==1){
  126. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>'您的渠道已被禁止打包','type'=>0];
  127. continue;
  128. }
  129. }
  130. }
  131. if ($this->_allowSubpackage($gameId,$value)) {
  132. //游戏平台
  133. $platform = model('GameInfo')->where(['game_id'=>$gameId])->value('platform');
  134. $platform = ($platform==false) ? 0 : $platform;
  135. $result = $subpackage->index($value, $gameId, 'cps'.$adminId,$platform,$package_type);
  136. // 打包结果
  137. if (is_array($result) && $result['code'] == 0) {
  138. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>'打包请求提交成功','type'=>1];
  139. } else {
  140. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>$result['msg'],'type'=>0];
  141. }
  142. } else {//游戏白名单 并且渠道id没有在sdk里面的话 申请提交
  143. $cont = [];
  144. $game_status = false;
  145. $packagelModel = model('PackageApply');
  146. $cont['game_id'] = $gameId;
  147. $cont['channel_id'] = $value;
  148. $cont['applicant_id'] = $this->_adminId;
  149. $cont['create_time'] = NOW_TIMESTAMP;
  150. $cont['apply_time'] = NOW_TIMESTAMP;
  151. $cont['apply_status'] = 0;
  152. if ($packagelModel->where(['game_id'=>$gameId,'channel_id'=>$value])->find()) {
  153. $packagelModel->where(['game_id'=>$gameId,'channel_id'=>$value])->update($cont);
  154. }else{
  155. $packagelModel->insert($cont);
  156. }
  157. $AccountStr .= ','.$childAccount[intval($value)];
  158. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>'游戏白名单限制,已经提交至后台审核','type'=>0];
  159. }
  160. }
  161. }
  162. if (!$game_status) {
  163. $template = '有新的游戏接单申请:推广账号"'.$this->_channelName.'" 发起游戏的接单申请,推广员:"'.trim($AccountStr,',').'"申请接入白名单游戏:"'.$gameName.'",请及时安排处理,时间:'.date('Y-m-d H:i:s');
  164. $ddurl = Env::get('operat_url');
  165. curlDD($template, $ddurl,true);
  166. }
  167. return json(['data'=>$msgList,'code'=>20000,'msg'=>'获取打包结果成功']);
  168. }
  169. /**
  170. * 是否允许分包
  171. * @param $gameId
  172. * @return bool
  173. */
  174. public function _allowSubpackage($gameId,$channelId)
  175. {
  176. $res = false;
  177. $cooperation_status = model('Game')->where(['id' => $gameId])->value('cooperation_status');
  178. // $res = ($cooperation_status == 1 || $cooperation_status == 2);
  179. // 推广平台,白名单的游戏,渠道第一次不能自行分包,需要管理员给他们分,分完一次之后渠道就能在推广后台-我的游戏中,自行对这个白名单游戏进行分包。
  180. if($cooperation_status == 1){ //正常游戏
  181. $res = true;
  182. }
  183. else if($cooperation_status == 2){
  184. $result = model('SdkGameList')
  185. ->where(['gameid' => $gameId, 'channel_id' => $channelId])
  186. ->find();
  187. if (!empty($result)) {
  188. $res = true;
  189. }
  190. else{
  191. $res = false;
  192. }
  193. }
  194. return $res;
  195. }
  196. }