Subpackage.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  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\guildapi\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. $parent = input('parent', '', 'trim');
  71. if($parent){
  72. $this->_channelId = $parent;
  73. }
  74. return $this->dopackage($gameId,$package_type,$channelIds);
  75. }
  76. public function dopackage($gameId,$package_type,$channelIds){
  77. $channels = empty($channelIds) ? [] : explode(',', $channelIds);
  78. $childAccount = $this->getChildAccount($this->_channelId);//获取子账号列表 用于消息提示
  79. $sdk_channel_list = model('SdkGameList')->where(['gameid'=>$gameId])->column('channel_id');//白名单申请列表
  80. $gameName = '';
  81. $AccountStr = '';
  82. if (!$gameId) {
  83. return json(['data'=>[],'code'=>'10008','msg'=>'请选择要分包的游戏']);
  84. }else{
  85. $cooperation_status = Db::name('cy_game')->where(['id'=>$gameId])->value('cooperation_status');
  86. $game_kind = Db::name('cy_game')->where(['id'=>$gameId])->value('game_kind');
  87. if ($game_kind == 2) {
  88. return json(['data'=>[],'code'=>10008,'msg'=>'该游戏为混服游戏,无法在该端编辑']);
  89. }
  90. if($cooperation_status==0){
  91. return json(['data'=>[],'code'=>10008,'msg'=>'该游戏尚在对接中,不能进行分包']);
  92. }
  93. else if($cooperation_status==3){
  94. return json(['data'=>[],'code'=>10008,'msg'=>'该游戏已下架,不能再进行分包']);
  95. }
  96. $gameName = db::name('cy_game')->where(['id'=>$gameId])->value('name');
  97. }
  98. $msgList = [];
  99. if (count($channels)>0) {
  100. foreach ($channels as $key => $value) {
  101. if (!isset($childAccount[$value])) {
  102. $msgList[] = ['id'=>$value,'msg'=>'该渠道id不属于本账号的推广子渠道,请联系管理员','type'=>0];
  103. unset($channels[$key]);
  104. }elseif (isFrozenOption($value, $gameId)) {
  105. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>'该渠道禁止推广游戏,请联系管理员','type'=>0];
  106. unset($channels[$key]);
  107. }
  108. }
  109. }else{
  110. return json(['data'=>[],'code'=>10032,'msg'=>'未选择推广员']);
  111. }
  112. $subpackage = new \app\common\logic\SubPackage();
  113. $adminId = session('guild_info')['id'];
  114. $game_status = true;
  115. if (count($channels)>0) {
  116. foreach ($channels as $key => $value) {
  117. $gameFrozenInfo = Db::name('nw_game_frozen')->where(['game_id'=>$gameId])->find();
  118. if($gameFrozenInfo){
  119. //无该渠道、该游戏的冻结信息时,添加
  120. if(!Db::name('nw_channel_frozen')->where(['game_id'=>$gameId,'channel_id'=>$value])->find()){
  121. $frozenData['game_id'] = $gameId;
  122. $frozenData['channel_id'] = $value;
  123. $frozenData['subpackage'] = $gameFrozenInfo['subpackage'];
  124. $frozenData['grant_money'] = $gameFrozenInfo['grant_money'];
  125. $frozenData['consume'] = $gameFrozenInfo['consume'];
  126. $frozenData['member_login'] = $gameFrozenInfo['member_login'];
  127. $frozenData['register'] = $gameFrozenInfo['register'];
  128. $frozenData['create_time'] = NOW_TIMESTAMP;
  129. $frozenData['update_time'] = NOW_TIMESTAMP;
  130. Db::name('nw_channel_frozen')->insert($frozenData);
  131. //被禁止打包
  132. if($frozenData['subpackage']==1){
  133. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>'您的渠道已被禁止打包','type'=>0];
  134. continue;
  135. }
  136. }
  137. }
  138. if ($this->_allowSubpackage($gameId,$value)) {
  139. $game_status = false;
  140. $cont = [];
  141. $packagelModel = model('PackageApply');
  142. $cont['game_id'] = $gameId;
  143. $cont['channel_id'] = $value;
  144. $cont['applicant_id'] = $this->_adminId;
  145. $cont['create_time'] = NOW_TIMESTAMP;
  146. $cont['apply_time'] = NOW_TIMESTAMP;
  147. $cont['apply_status'] = 1;
  148. if ($packagelModel->where(['game_id'=>$gameId,'channel_id'=>$value])->find()) {
  149. $packagelModel->where(['game_id'=>$gameId,'channel_id'=>$value])->update($cont);
  150. }else{
  151. $packagelModel->insert($cont);
  152. }
  153. $AccountStr .= ','.$childAccount[intval($value)];
  154. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>'已经提交至后台审核,请耐心等待!','type'=>0];
  155. // ## 游戏分包申请时,直接通过申请,并开始分包
  156. // 游戏平台
  157. $platform = model('GameInfo')->where(['game_id'=>$gameId])->value('platform');
  158. $platform = ($platform==false) ? 0 : $platform;
  159. $result = $subpackage->index($value, $gameId, 'cps'.$adminId,$platform,$package_type);
  160. // 打包结果
  161. if (is_array($result) && $result['code'] == 0) {
  162. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>'打包请求提交成功','type'=>1];
  163. } else {
  164. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>$result['msg'],'type'=>0];
  165. }
  166. } else {//游戏白名单 并且渠道id没有在sdk里面的话 申请提交
  167. $game_status = false;
  168. $cont = [];
  169. $packagelModel = model('PackageApply');
  170. $cont['game_id'] = $gameId;
  171. $cont['channel_id'] = $value;
  172. $cont['applicant_id'] = $this->_adminId;
  173. $cont['create_time'] = NOW_TIMESTAMP;
  174. $cont['apply_time'] = NOW_TIMESTAMP;
  175. $cont['apply_status'] = 0;
  176. if ($packagelModel->where(['game_id'=>$gameId,'channel_id'=>$value])->find()) {
  177. $packagelModel->where(['game_id'=>$gameId,'channel_id'=>$value])->update($cont);
  178. }else{
  179. $packagelModel->insert($cont);
  180. }
  181. $AccountStr .= ','.$childAccount[intval($value)];
  182. $msgList[] = ['id'=>$childAccount[intval($value)],'msg'=>'游戏白名单限制,已经提交至后台审核','type'=>0];
  183. }
  184. }
  185. }
  186. if (!$game_status) {
  187. $template = '有新的游戏接单申请:推广账号"'.$this->_channelName.'" 发起游戏的接单申请,推广员:"'.trim($AccountStr,',').'"申请接入白名单游戏:"'.$gameName.'",请及时安排处理,时间:'.date('Y-m-d H:i:s');
  188. $ddurl = Env::get('operat_url');
  189. curlDD($template, $ddurl,true);
  190. }
  191. return json(['data'=>$msgList,'code'=>20000,'msg'=>'获取打包结果成功']);
  192. }
  193. /**
  194. * 是否允许分包
  195. * @param $gameId
  196. * @return bool
  197. */
  198. public function _allowSubpackage($gameId,$channelId)
  199. {
  200. $res = false;
  201. $cooperation_status = model('Game')->where(['id' => $gameId])->value('cooperation_status');
  202. // $res = ($cooperation_status == 1 || $cooperation_status == 2);
  203. // 推广平台,白名单的游戏,渠道第一次不能自行分包,需要管理员给他们分,分完一次之后渠道就能在推广后台-我的游戏中,自行对这个白名单游戏进行分包。
  204. if($cooperation_status == 1){ //正常游戏
  205. $res = true;
  206. }
  207. else if($cooperation_status == 2){
  208. $result = model('SdkGameList')
  209. ->where(['gameid' => $gameId, 'channel_id' => $channelId])
  210. ->find();
  211. if (!empty($result)) {
  212. $res = true;
  213. }
  214. else{
  215. $res = false;
  216. }
  217. }
  218. return $res;
  219. }
  220. }