list(1); } public function mix() { $this->list(2); } public function list($serverType) { // $serverType = I('server_type', 1); $promoteId = I('promote_id', 0); $promoteLevel = I('promote_level', 0); $loginPromote = $this->getLoginPromote(); $baseGameId = I('game_id', 0); $isMine = I('is_mine', 0); if ($promoteLevel != 0 && $promoteId == 0) { $this->assign('count', 0); $this->assign('pagination', ''); $this->assign('records', []); return $this->display('index'); } if ($promoteLevel == 0 && $promoteId == 0) { $promoteId = $loginPromote['id']; } $promoteService = new PromoteService(); $gameIds = $promoteService->getVisibleGameIds($loginPromote); if ($baseGameId > 0) { $baseGame = M('base_game', 'tab_')->where(['id' => $baseGameId])->find(); $gameIds = []; if ($baseGame['android_game_id'] > 0) { $gameIds[] = $baseGame['android_game_id']; } if ($baseGame['ios_game_id'] > 0) { $gameIds[] = $baseGame['ios_game_id']; } } $conditions = []; if ($isMine) { $applyGameIds = M('apply', 'tab_')->where(['offline_status' => 0, 'promote_id' => $promoteId])->getField('game_id', true); $gameIds = array_intersect($applyGameIds, $gameIds); if (count($gameIds) == 0) { $gameIds = [0]; } } $columns = ['id', 'icon', 'game_name', 'features', 'sdk_version', 'game_size', 'game_type_name']; $conditions = []; if ($isMine) { $conditions['offline_status'] = 0; } $conditions['server_type'] = $serverType; $conditions['id'] = ['in', $gameIds]; $query = M('game', 'tab_')->field($columns)->where($conditions)->order('relation_game_id desc'); list($games, $pagination, $count) = $this->paginate($query); $gameSources = []; if (count($games) > 0) { $gameIds = array_column($games, 'id'); $applys = M('apply', 'tab_')->field(['game_id', 'offline_status'])->where(['promote_id' => $promoteId, 'game_id' => ['in', $gameIds]])->select(); $applys = index_by_column('game_id', $applys); $gameSources = M('game_source', 'tab_')->field(['game_id', 'version'])->where(['game_id' => ['in', $gameIds]])->select(); $gameSources = index_by_column('game_id', $gameSources); } $records = []; foreach ($games as $game) { $gameId = $game['id']; $records[] = [ 'id' => $game['id'], 'offline_status' => isset($applys[$gameId]) ? $applys[$gameId]['offline_status'] : 1, 'icon' => $game['icon'], 'game_name' => $game['game_name'], 'features' => $game['features'], 'sdk_version' => $game['sdk_version'], 'version' => isset($gameSources[$gameId]) ? $gameSources[$gameId]['version'] : '--', 'game_size' => $game['game_size'], 'game_type_name' => $game['game_type_name'], ]; } $this->assign('serverType', $serverType); $this->assign('promoteId', $promoteId); $this->assign('count', $count); $this->assign('pagination', $pagination); $this->assign('records', $records); $this->display('index'); } public function apply() { $gameId = I('game_id', 0); $promoteId = I('promote_id', 0); $loginPromote = $this->getLoginPromote(); if ($gameId == 0) { return $this->ajaxReturn(['status' => 0, 'message' => '数据有误']); } $promoteService = new PromoteService(); if (!$promoteService->canPresidentApplyGame($loginPromote)) { return $this->ajaxReturn(['status' => 0, 'message' => '请联系市场专员开启']); } $promote = null; if ($promoteId != 0) { $promote = M('promote', 'tab_')->field(['id', 'chain', 'account'])->where(['id' => $promoteId])->find(); if (!$promote || strpos($promote['chain'], '/'. $loginPromote['id'] . '/') === false) { return $this->ajaxReturn(['status' => 0, 'message' => '推广员不存在']); } } else { $promote = $loginPromote; } $game = M('game', 'tab_')->field(['id', 'game_name', 'money', 'ratio', 'sdk_version'])->where(['id' => $gameId])->find(); if (!$game) { return $this->ajaxReturn(['status' => 0, 'message' => '游戏不存在']); } $apply = M('apply', 'tab_')->where(['game_id' => $gameId, 'promote_id' => $promote['id']])->find(); if ($apply && $apply['offline_status'] == 0) { return $this->ajaxReturn(['status' => 0, 'message' => '该游戏已添加']); } $data = []; $data['ratio'] = $game['ratio']; $data['money'] = $game['money']; $data['promote_account'] = $promote['account']; $data['apply_time'] = NOW_TIME; $data['offline_status'] = 0; $status = false; if (!$apply) { $data['sdk_version'] = $game['sdk_version']; $data['game_id'] = $game['id']; $data['game_name'] = $game['game_name']; $data['promote_id'] = $promote['id']; $data['status'] = C('SET_AUTO_PACK'); $status = M('apply', 'tab_')->add($data); } else { $status = M('apply', 'tab_')->where('id = ' . $apply['id'])->save($data); } if ($status) { // recordPromoteLogs('游戏管理', '添加游戏'); return $this->ajaxReturn(['status' => 1, 'message' => '添加成功']); } else { return $this->ajaxReturn(['status' => 0, 'message' => '系统异常']); } } public function batchApply() { $gameId = I('game_id', 0); $promoteIds = I('promote_ids', []); if ($gameId == 0) { return $this->ajaxReturn(['status' => 0, 'message' => '数据有误']); } if (count($promoteIds) == 0) { return $this->ajaxReturn(['status' => 0, 'message' => '请选择要添加游戏的下级人员']); } $loginPromote = $this->getLoginPromote(); $promoteService = new PromoteService(); if (!$promoteService->canPresidentApplyGame($loginPromote)) { return $this->ajaxReturn(['status' => 0, 'message' => '请联系市场专员开启']); } $game = M('game', 'tab_')->field(['id', 'game_name', 'money', 'ratio', 'sdk_version'])->where(['id' => $gameId])->find(); if (!$game) { return $this->ajaxReturn(['status' => 0, 'message' => '游戏不存在']); } $applys = M('apply', 'tab_')->where(['game_id' => $gameId, 'promote_id' => ['in', $promoteIds]])->select(); $appliedPromoteIds = array_column($applys, 'promote_id'); $newPromoteIds = array_diff($promoteIds, $appliedPromoteIds); // 添加申请表中还未含有记录的推广员 if (count($newPromoteIds) > 0) { $newApplys = []; foreach ($newPromoteIds as $promoteId) { $newApplys[] = [ 'ratio' => $game['ratio'], 'money' => $game['money'], 'promote_account' => $loginPromote['account'], 'apply_time' => NOW_TIME, 'offline_status' => 0, 'sdk_version' => $game['sdk_version'], 'game_id' => $game['id'], 'game_name' => $game['game_name'], 'promote_id' => $promoteId, 'status' => C('SET_AUTO_PACK'), ]; } M('apply', 'tab_')->addAll($newApplys); } // 更改表中含有记录的推广员申请状态 if (count($appliedPromoteIds) > 0) { $data = []; $data['ratio'] = $game['ratio']; $data['money'] = $game['money']; $data['promote_account'] = $loginPromote['account']; $data['apply_time'] = NOW_TIME; $data['offline_status'] = 0; M('apply', 'tab_')->where(['game_id' => $gameId, 'promote_id' => ['in', $appliedPromoteIds]])->save($data); } // recordPromoteLogs('游戏管理', '批量添加游戏'); return $this->ajaxReturn(['status' => 1, 'message' => '添加成功']); } public function offline() { $gameId = I('game_id', 0); $promoteId = I('promote_id', 0); $loginPromote = $this->getLoginPromote(); if ($gameId == 0) { return $this->ajaxReturn(['status' => 0, 'message' => '请选择游戏']); } $game = M('game', 'tab_')->field(['id'])->where(['id' => $gameId])->find(); if (!$game) { return $this->ajaxReturn(['status' => 0, 'message' => '游戏不存在']); } $promote = null; if ($promtoeId > 0) { $promote = M('promote', 'tab_')->where(['id' => $promoteId])->find(); if (!$promote) { return $this->ajaxReturn(['status' => 0, 'message' => '推广员不存在']); } } else { $promote = $loginPromote; } $applyService = new ApplyService(); $applyService->offlineGame($game, $promote); // recordPromoteLogs('游戏管理','下架游戏'); $this->ajaxReturn(['status' => true, 'msg' => '下架成功']); } public function getMineBaseGames() { $loginPromote = $this->getLoginPromote(); $promoteService = new PromoteService(); $gameIds = $promoteService->getVisibleGameIds($loginPromote); $conditions = []; if ($gameIds !== true) { $conditions = ['_logic' => 'or', 'android_game_id' => ['in', $gameIds], 'ios_game_id' => ['in', $gameIds]]; } else { $conditions = '1=1'; } $games = M('base_game', 'tab_')->where($conditions)->select(); return $this->ajaxReturn([ 'status' => true, 'message' => '获取成功', 'data' => [ 'games' => $games ] ]); } public function getUnApplyPromotes() { $gameId = I('game_id', 0); $level = I('level', 0); $loginPromote = $this->getLoginPromote(); $promoteService = new PromoteService(); $promotes = $promoteService->getAllChildren($loginPromote, $level, ['id', 'account', 'real_name']); $promoteIds = array_column($promotes, 'id'); $appliedPromoteIds = M('apply', 'tab_')->where(['offline_status' => 0, 'game_id' => $gameId, 'promote_id' => ['in', $promoteIds]])->getField('promote_id', true); $unApplyPromotes = []; foreach ($promotes as $promote) { if (!in_array($promote['id'], $appliedPromoteIds)) { $unApplyPromotes[] = $promote; } } return $this->ajaxReturn([ 'status' => true, 'message' => '获取成功', 'data' => [ 'promotes' => $unApplyPromotes ] ]); } public function jion_list($model = array(), $p, $map = array()) { $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 $name = $model['name']; $row = empty($model['list_row']) ? 15 : $model['list_row']; $data = M($name, 'tab_') /* 查询指定字段,不指定则查询所有字段 */ ->field(empty($fields) ? true : $fields) ->join($model['jion']) // 查询条件 ->where($map) /* 默认通过id逆序排列 */ ->order($model['need_pk'] ? 'id DESC' : '') /* 数据分页 */ ->page($page, $row) /* 执行查询 */ ->select(); /* 查询记录总数 */ $count = M($name, "tab_")->where($map)->count(); //分页 if ($count > $row) { $page = new \Think\Page($count, $row); $page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%'); $this->assign('_page', $page->show()); } $this->assign('list_data', $data); $this->meta_title = $model['title']; $this->display($model['tem_list']); } public function gameSpecialList() { $this->index(1); } public function gameList() { $this->index(2); } //首页 $type-查询的游戏平台类型 0-全部 10-安卓+ios 2-ios 1-安卓 public function t($serverType = 1) { $loginPromote = $this->getLoginPromote(); $promoteId = empty(I('promote_id')) ? $loginPromote['id'] : I('promote_id'); //搜索的渠道ID $promoteRole = empty(I('promote_role')) ? 1 : I('promote_role'); //渠道角色 $parentPromoteId = getParentPromoteId($promoteId); //上级渠道ID $grandPromoteId = getGrandPromoteId($promoteId); //本账号会长渠道ID $childGameAddPermission = getChildGameAddPermission($grandPromoteId); //游戏添加权限 $map['tab_game.online_status'] = 1;//开发者游戏上线状态 $map['tab_game.down_port'] = 1;//游戏端口 第三方接口不能申请 $map['tab_game.game_status'] = 1;//游戏状态 $map['tab_game.server_type'] = $serverType;//专服游戏 if (!empty(I('game_id'))) { $thisRelationGameName = M('Game', 'tab_')->where(array('id' => I('game_id')))->getField('relation_game_name'); $map['tab_game.relation_game_name'] = ['like', $thisRelationGameName]; } $type = I('get.type', 0); $group = ''; switch ($type) { case 1: case 2: $gameIdList = M('Game', 'tab_')->group('relation_game_id')->having('count(id) = 1')->getField('id', true); $map['tab_game.sdk_version'] = $type; $applyService = new ApplyService(); $tempIds = $applyService->getSociatyGameIds($loginPromote); $gameIdList = array_intersect($gameIdList, $tempIds); if (count($gameIdList) > 0) { $gameIds = implode(',', $gameIdList); $map['tab_game.id'] = ['in', $gameIds]; } else { $map = '1 = 2'; } break; case 10: $group = 'tab_game.relation_game_id'; if ($parentPromoteId > 0 && $childGameAddPermission == 0) { $gameRelationGameIdList = M('Game', 'tab_')->group('relation_game_id')->having('count(id) = 2')->getField('relation_game_id', true); if (count($gameRelationGameIdList) > 0) { $gameRelationGameIdList = implode(',', $gameRelationGameIdList); $where['tab_game.relation_game_id'] = ['in', $gameRelationGameIdList]; } else { $where = '1 = 2'; } } else { $gameIdList = M('Game', 'tab_')->group('relation_game_id')->having('count(id) = 2')->getField('id', true); $applyService = new ApplyService(); $tempIds = $applyService->getSociatyGameIds($loginPromote); $gameIdList = array_intersect($gameIdList, $tempIds); if (count($gameIdList) > 0) { $gameIds = implode(',', $gameIdList); $map['tab_game.id'] = ['in', $gameIds]; } else { $map = '1 = 2'; } } break; case 0: $applyService = new ApplyService(); $gameIdList = $applyService->getSociatyGameIds($loginPromote); if (count($gameIdList) > 0) { $gameIds = implode(',', $gameIdList); $map['tab_game.id'] = ['in', $gameIds]; } else { $map = '1 = 2'; } } $page = intval(I('get.p', 0)); $page = $page ? $page : 1; //默认显示第一页数据 if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } $join = ''; if ($parentPromoteId > 0 && $childGameAddPermission == 0) { $map['tab_apply.promote_id'] = $grandPromoteId; if (!empty($where)) { $map['_logic'] = 'and'; $map['_complex'] = $where; } $join = 'tab_apply on tab_game.id = tab_apply.game_id and tab_apply.offline_status = 0';//查询上级游戏 } $data = M('Game', 'tab_') ->field('tab_game.id,tab_game.icon,tab_game.game_name,tab_game.features,tab_game.sdk_version,tab_game.game_size,tab_game.game_type_name,tab_game.relation_game_name,ta_1.id as apply_id_1,ta_2.id as apply_id_2') ->join($join) ->join('left join tab_apply as ta_1 on tab_game.id = ta_1.game_id and ta_1.offline_status = 0 and ta_1.promote_id = ' . $promoteId)//查询是否拥有该游戏 ->join('left join tab_apply as ta_2 on tab_game.relation_game_id = ta_2.game_id and ta_2.offline_status = 0 and tab_game.id != tab_game.relation_game_id and ta_2.promote_id = ' . $promoteId)//查询是否拥有关联游戏 ->join('left join tab_game_source on tab_game.id = tab_game_source.game_id')//查询游戏版本 ->where($map) ->group($group) ->order('tab_game.sort desc,tab_game.id desc') // ->fetchSql(true) ->page($page, $row) ->select(); // var_dump($data); // die; /* 查询记录总数 */ $count = M("Game", "tab_") ->field('tab_game.id') ->join($join)//查询上级游戏 ->where($map) ->group($group) ->select(); $count = count($count); //分页 $parameter['p'] = I('get.p', 1); $parameter['row'] = I('get.row'); $parameter['type'] = $type; $parameter['promote_role'] = $promoteRole; empty(I('promote_id')) || $parameter['promote_id'] = I('promote_id'); $page = set_pagination($count, $row, $parameter); if ($page) { $this->assign('_page', $page); } $this->assign('list_data', $data); $this->assign("count", $count); $this->assign('loginPromote', $loginPromote); $this->assign("promoteId", $promoteId); $this->assign('promoteRole', $promoteRole); $this->assign('promoteData', getAllPromoteListByType($promoteRole)); $this->assign('type', $type); $this->assign('myGame', ($serverType == 1) ? 'specialMyGameList' : 'myGameList'); $this->assign('game', ($serverType == 1) ? 'gameSpecialList' : 'gameList'); $this->assign('position', ($serverType == 1) ? '专服管理' : '混服管理'); $this->meta_title = "申请游戏"; $this->display('index'); } //查看游戏资料专区 public function feature($p = 0, $type = 0) { $promoteId = empty(I('promote_id')) ? PID : I('promote_id');//搜索的渠道ID $promoteRole = empty(I('promote_role')) ? 1 : I('promote_role');//渠道角色 //$parentPromoteId = getParentPromoteId($promoteId);//上级渠道ID $thisParentPromoteId = getParentPromoteId(PID);//本账号上级渠道ID // $addPermission = 1;//是否有添加游戏权限 // if ($thisParentPromoteId == 0 && $promoteRole == 3) { // $addPermission = 0; // } $map['tab_game.online_status'] = 1;//开发者游戏上线状态 $map['tab_game.down_port'] = 1;//游戏端口 第三方接口不能申请 $map['tab_game.game_status'] = 1;//游戏状态 $map['tab_game.developers'] = 0; //平台游戏(官网游戏,非开发者游戏) $applyPromote = M('apply', 'tab_')->field('game_id')->where(['promote_id' => $promoteId])->select(); $noDeveloperGameArr = array(); foreach ($applyPromote as $key => $value) { $applyPromoteGameId = $value['game_id']; $gameInfo = M('Game', 'tab_') ->field('id,icon,game_name,features,sdk_version,game_size,game_type_name,relation_game_name,developers') ->where(['id' => $applyPromoteGameId])->select(); if ($gameInfo[0]['developers'] > 0) { unset($gameInfo[0]['developers']); $noDeveloperGameArr[] = $gameInfo[0]['id']; //非开发者游戏 } } $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } $map['_logic'] = 'and'; if (!empty(I('game_id'))) { $thisRelationGameName = M('Game', 'tab_')->where(array('id' => I('game_id')))->getField('relation_game_name'); $map['tab_game.relation_game_name'] = ['like', $thisRelationGameName]; $where['_complex'] = $map; // $where['tab_game.id'] = ['in',$noDeveloperGameArr]; // $where['_logic']='or'; } else { $where['_complex'] = $map; if (empty($noDeveloperGameArr)) { $where['tab_game.id'] = ['in', '-100']; } else { $where['tab_game.id'] = ['in', $noDeveloperGameArr]; } $where['_logic'] = 'or'; } $data = M('Game', 'tab_') ->field('tab_game.id,tab_game.icon,tab_game.game_name,tab_game.features,tab_game.sdk_version,tab_game.game_size,tab_game.game_type_name,tab_game.relation_game_name,ta_1.id as apply_id_1') ->join('left join tab_apply as ta_1 on tab_game.id = ta_1.game_id and ta_1.offline_status = 0 and ta_1.promote_id = ' . $promoteId)//查询是否拥有该游戏 ->where($where) ->order('tab_game.developers desc,tab_game.sort desc,tab_game.id desc') ->page($page, $row) ->select(); //$AllData = array_merge($noDeveloperGameArr,$data); /* 查询记录总数 */ $count = M("Game", "tab_") ->field('tab_game.id') ->where($map) ->select(); $count = count($count); //分页 $parameter['p'] = I('get.p', 1); $parameter['row'] = I('get.row'); $parameter['type'] = $type; $parameter['promote_role'] = $promoteRole; empty(I('promote_id')) || $parameter['promote_id'] = I('promote_id'); $page = set_pagination($count, $row, $parameter); if ($page) { $this->assign('_page', $page); } $this->assign('list_data', $data); $this->assign("count", $count); $this->assign("promoteId", $promoteId); // $this->assign('parentPromoteId', $parentPromoteId); $this->assign('thisParentPromoteId', $thisParentPromoteId); // $this->assign('promoteRole', $promoteRole); $this->assign('pID', PID); //$this->assign('promoteData', getAllPromoteListByType($promoteRole)); // $this->assign('addPermission', $addPermission); // $this->assign('type', $type); $this->meta_title = "申请游戏"; $this->display(); } //查看游戏详情 public function getDetail() { $id = I('id', 0); $gameData = []; if ($id > 0) { $map['tab_game.id'] = $id; $gameData = M('Game', 'tab_') ->join('left join tab_game_source on tab_game.id = tab_game_source.game_id') ->where($map) ->field('tab_game.*,tab_game_source.version,tab_game_source.create_time') ->find(); if (!empty($gameData['create_time'])) { $gameData['create_time'] = date('Y-m-d H:i:s', $gameData['create_time']); } $gameData['icon'] = __ROOT__ . get_cover($gameData['icon'], 'path'); $gameData['screenshot'] = explode(',', $gameData['screenshot']); foreach ($gameData['screenshot'] as $value) { $gameData['screenshot_url'][] = get_cover($value, 'path'); } } $this->ajaxReturn($gameData); } public function gapply() { $map1['relation_game_id'] = array('in', $_REQUEST['game_id']); $res = M('game', 'tab_')->field('id')->where($map1)->select(); $res = array_map('array_shift', $res); $_REQUEST['game_id'] = implode(',', $res); $model = new ApplyModel(); //D('Apply'); $map['game_id'] = array('in', $_REQUEST['game_id']); $map['promote_id'] = session("promote_auth.pid"); $c = $model->where($map)->select(); $_REQUEST['game_id'] = explode(',', $_REQUEST['game_id']); foreach ($c as $key => $value) { $va[] = $value['game_id']; } if (!empty($va)) { $game_id = array_diff($_REQUEST['game_id'], $va); } else { $game_id = $_REQUEST['game_id']; } if (empty($game_id)) { $this->ajaxReturn(array("status" => "0", "msg" => "游戏已申请过,请勿重复申请")); exit; } $_REQUEST['game_id'] = implode(',', $game_id); $data['game_id'] = array('in', $_REQUEST['game_id']); $data['promote_id'] = session("promote_auth.pid"); $data['promote_account'] = session("promote_auth.account"); $data['apply_time'] = NOW_TIME; $data['status'] = 0; $game = M('Game', 'tab_'); foreach ($game_id as $key => $value) { $data['game_id'] = $value; $gdata = $game->where(array('id' => $value))->find(); $data['game_name'] = get_game_name($value); $data['ratio'] = $gdata['ratio']; $data['money'] = $gdata['money']; $data['sdk_version'] = $gdata['sdk_version']; // $data['pattern']=current($pattern); // next($pattern); $res = $model->add($data); } if ($res) { $this->ajaxReturn(array("status" => "1", "msg" => "申请成功")); } else { $this->ajaxReturn(array("status" => "0", "msg" => "申请失败")); } } /** * 批量添加投放申请 * @author 鹿文学 */ public function batch_apply_game() { if (IS_POST) { $relation_game_ids = $_POST['game_id']; $platform_id = $_POST['platform_id']; $platform_name = $_POST['platform_name']; $remark = $_POST['remark']; $promote_id = is_login_promote(); if ($promote_id < 1) { $this->ajaxReturn(['status' => 0, 'msg' => '请登录后再操作'], 'json'); } if (empty($relation_game_ids)) { $this->ajaxReturn(['status' => 0, 'msg' => '你还没有选择任何内容!'], 'json'); } if ((!is_numeric($platform_id) || $platform_id < 1) && empty($platform_name)) { $this->ajaxReturn(['status' => 0, 'msg' => '投放平台不能为空'], 'json'); } $gamemodel = M('Game', 'tab_'); $game = $gamemodel->field('id,game_name,sdk_version,ratio,money')->where(['relation_game_id' => ['in', $relation_game_ids]])->select(); if (!is_array($game) || empty($game[0])) { $this->ajaxReturn(['status' => 0, 'msg' => '游戏不存在'], 'json'); } $game_id = array_column($game, 'id'); // 先查投放平台,如有渠道输入则先判断平台是否存在,不存在则添加,存在则获取信息;没有趣的输入,则判断选择平台是否存在,不存在返回 $platformmodel = M('launch_platform', 'tab_'); if ($platform_name) { $platform = $platformmodel->where(['name' => $platform_name])->find(); if (empty($platform)) { $platform_id = $platformmodel->add(['create_time' => time(), 'update_time' => time(), 'name' => $platform_name, 'promote_id' => $promote_id, 'promote_account' => get_promote_account($promote_id), 'mark' => 1]); } else { $platform_id = $platform['id']; } } else { $platform = $platformmodel->where(['id' => $platform_id])->find(); if (empty($platform)) { $this->ajaxReturn(['status' => 0, 'msg' => '投放平台选择有误,请重新选择'], 'json'); } } // 再查申请表,数据是否存在,存在则不予理会,不存在则添加 $applymodel = M('Apply', 'tab_'); $apply = $applymodel->field('id,game_id,status')->where(['promote_id' => $promote_id, 'game_id' => ['in', $game_id]])->select(); $exist = 1; if (empty($apply)) { $apply = $this->add_apply($applymodel, $game, $promote_id, $game_id); $exist = C('SET_AUTO_PACK'); } foreach ($apply as $k => $v) { foreach ($game as $m => $n) { if ($v['game_id'] == $n['id']) { unset($game[$m]); } } } if (!empty($game)) { $apply = $this->add_apply($applymodel, $game, $promote_id, $game_id); } $apply_ids = array_column($apply, 'id'); if ($platform_id > 0 && is_array($apply_ids)) { $launchmodel = M('apply_launch', 'tab_'); $launch = $launchmodel->field('platform_id,apply_id,max(position) as position')->where(['platform_id' => $platform_id, 'apply_id' => ['in', $apply_ids]])->group('platform_id,apply_id')->order('launch_time desc')->select(); if (empty($launch)) { foreach ($apply as $k => $v) { $data[] = array( 'platform_id' => $platform_id, 'apply_id' => $v['id'], 'launch_game_id' => $v['game_id'], 'launch_time' => time(), 'position' => 1, 'remark' => $remark, ); } } else { foreach ($apply as $k => $v) { $flag = true; foreach ($launch as $m => $n) { if ($n['apply_id'] == $v['id']) { if ($v['status'] == 1) { $data[$k] = array( 'platform_id' => $platform_id, 'apply_id' => $v['id'], 'launch_game_id' => $v['game_id'], 'launch_time' => time(), 'position' => $n['position'] > 0 ? (intval($n['position']) + 1) : 1, 'remark' => $remark, ); break; } else { $flag = false; } } } if (!$data[$k] && $flag) { $data[$k] = array( 'platform_id' => $platform_id, 'apply_id' => $v['id'], 'launch_game_id' => $v['game_id'], 'launch_time' => time(), 'position' => 1, 'remark' => $remark, ); } } } $res = $launchmodel->addAll($data); if ($res > 0) { $this->ajaxReturn(['status' => 1, 'msg' => '申请成功', 'exist' => $exist], 'json'); } else { $this->ajaxReturn(['status' => 0, 'msg' => '申请失败'], 'json'); } } else { $this->ajaxReturn(['status' => 0, 'msg' => '申请失败,请重新申请'], 'json'); } } else { $this->ajaxReturn(['status' => 0, 'msg' => '请求有误'], 'json'); } } /** * 批量添加申请并返回符合条件的申请信息 * @param object $applymodel 申请表模型对象 * @param array $game 游戏数组对象 * @param integer $promote_id 渠道编号 * @param array $game_id 要查找的游戏编号数组 * @param string $fields 查询字段 * @param array 根据条件获取的申请信息数组 * @author 鹿文学 */ private function add_apply($applymodel, $game, $promote_id, $game_id, $fields = 'id,game_id,status') { foreach ($game as $k => $v) { $data[] = array( 'game_id' => $v['id'], 'game_name' => $v['game_name'], 'promote_id' => $promote_id, 'promote_account' => session("promote_auth.account"), 'apply_time' => time(), 'status' => C('SET_AUTO_PACK'), 'dispose_time' => C('SET_AUTO_PACK') ? time() : '', 'sdk_version' => $v['sdk_version'], 'ratio' => $v['ratio'], 'money' => $v['money'], ); } $applymodel->addAll($data); $apply = $applymodel->field($fields)->where(['promote_id' => $promote_id, 'game_id' => ['in', $game_id]])->select(); return $apply; } public function specialMyGameList() { $this->my_game(1); } public function myGameList() { $this->my_game(2); } public function my_game($serverType = 1) { $loginPromote = $this->getLoginPromote(); //渠道可申请游戏 if (empty($_REQUEST['promote_id'])) { $promoteId = $loginPromote['id']; } else { $promoteId = $_REQUEST['promote_id']; } $applyService = new ApplyService(); $gameIdList = $applyService->getSociatyGameIds($loginPromote); $applyMap['promote_id'] = $promoteId; $applyMap['offline_status'] = 0; $applyMap['game_id'] = ['in', $gameIdList]; $gameIds = M('Apply', 'tab_')->where($applyMap)->getField('game_id', true); $gameIds = implode(',', $gameIds); if (empty($gameIds)) { $map['_string'] = '1 = 2'; } else { $map['tab_game.id'] = ['in', $gameIds]; } $map['tab_apply.promote_id'] = $promoteId; $map['tab_game.online_status'] = 1;//开发者游戏上线状态 $map['tab_game.down_port'] = 1;//游戏端口 第三方接口不能申请 $map['tab_game.game_status'] = 1;//游戏状态 $map['tab_game.server_type'] = $serverType;//游戏服务器类型 if ($_REQUEST['game_id'] != null) { $relationGameName = M('Game', 'tab_')->where(array('id' => $_REQUEST['game_id']))->getField('relation_game_name'); if ($relationGameName) { $map['tab_game.relation_game_name'] = ['like', $relationGameName]; } else { $map['tab_apply.game_id'] = $_REQUEST['game_id']; } } if ($_REQUEST['pattern'] != null) { $map['tab_apply.pattern'] = $_REQUEST['pattern']; } $page = intval(I('get.p', 0)); $page = $page ? $page : 1; //默认显示第一页数据 if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } $data = M("game", "tab_") /* 查询指定字段,不指定则查询所有字段 */ ->field("tab_game.id,tab_game.game_size,tab_game.game_name,tab_game.features,tab_game.money,tab_game.sdk_version,tab_game.ratio,tab_game.icon,tab_game.game_type_name,tab_game.recommend_status,promote_id,status,tab_apply.dow_status,tab_apply.plist_url,tab_apply.id as applyid,tab_apply.enable_status,tab_game.sort,tab_game.relation_game_id,tab_game.relation_game_name,tab_game.material_url,dispose_time,tab_apply.promote_money as applymoney,tab_apply.promote_ratio as applyratio,apply_time,tab_apply.status as applystatus,tab_game.and_dow_address,tab_game.ios_dow_address,tab_game.add_game_address,tab_game.ios_game_address") ->join("tab_apply ON tab_game.id = tab_apply.game_id and tab_apply.promote_id = " . $promoteId) // ->join("left join tab_game as tg ON (tab_game.id = tg.relation_game_id and tg.game_status = 1 and tab_game.id!=tab_game.relation_game_id) or (tab_game.id = tg.relation_game_id and tab_game.id!=tg.id and tg.game_status = 1) or (tab_game.id!=tab_game.relation_game_id and tab_game.relation_game_id=tg.id and tab_game.game_status=1)") // 查询条件 ->where($map) /* 默认通过id逆序排列 */ ->order("apply_time desc,id desc") /* 数据分页 */ ->page($page, $row) /* 执行查询 */ ->select(); /* 查询记录总数 */ $count = count(M("game", "tab_") /* 查询指定字段,不指定则查询所有字段 */ ->field("tab_game.*,tab_apply.promote_id,tab_apply.status") ->join("tab_apply ON tab_game.id = tab_apply.game_id and tab_apply.promote_id = " . $promoteId) // 查询条件 ->where($map) ->select()); //分页 $parameter = array( 'row' => I('get.row'), 'sdk_version' => I('request.sdk_version'), 'p' => I('p', 1), 'type' => I('request.type'), 'enable_status' => I('request.enable_status'), 'game_id' => I('request.game_id'), ); $page = set_pagination($count, $row, $parameter); if ($page) { $this->assign('_page', $page); } $promoteRole = empty(I('promote_role')) ? 1 : I('promote_role'); $url = "http://" . $_SERVER['HTTP_HOST'] . __ROOT__ . "/media.php/member/preg/pid/" . session("promote_auth.pid"); $this->assign("url", $url); $this->assign("count", $count); $this->assign("row", $row); $this->assign('loginPromote', $loginPromote); $this->assign('promoteId', $promoteId); $this->assign('promoteRole', $promoteRole); $this->assign('promoteData', getAllPromoteListByType($promoteRole)); $this->assign('list_data', $data); $this->assign('serverType', $serverType); $this->assign('myGame', ($serverType == 1) ? 'specialMyGameList' : 'myGameList'); $this->assign('game', ($serverType == 1) ? 'gameSpecialList' : 'gameList'); $this->assign('position', ($serverType == 1) ? '专服管理' : '混服管理'); $this->meta_title = "我的游戏"; $this->display('my_game'); } public function my_game_ch($type = -1, $p = 0) { //渠道可申请游戏 $game_ids = M('promote', 'tab_')->where(['id' => get_pid()])->getField('game_ids'); if (!empty($game_ids) || $game_ids === '0') { $game_ids = explode(',', $game_ids); $map['tab_game.id'] = ['in', $game_ids]; } $map['promote_id'] = session("promote_auth.pid"); $map['tab_game.game_status'] = 1;//游戏状态 if ($_REQUEST['game_id'] != null) { $map['tab_game.relation_game_id'] = $_REQUEST['game_id']; } $res = M('game', 'tab_')->where(['relation_game_id' => $_REQUEST['game_id']])->find(); if (empty($res) && $_REQUEST['game_id']) { $res_ = M('game', 'tab_')->find($_REQUEST['game_id']); $map['tab_game.relation_game_id'] = $res_['relation_game_id']; } $map['tab_apply.status'] = 0; $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 $row = 6; if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } $data = M("game", "tab_") /* 查询指定字段,不指定则查询所有字段 */ ->field("tab_game.id,tab_game.game_size,tab_game.game_name,tab_game.money,tab_game.sdk_version,tab_game.ratio,tab_game.icon,tab_game.game_type_name,tab_game.recommend_status,promote_id,status,tab_apply.dow_status,tab_apply.plist_url,tab_apply.id as applyid,enable_status,tab_game.sort,tab_game.relation_game_id,tab_game.relation_game_name,tab_game.material_url,tg.relation_game_id as trelation_game_id,tg.id as tid,tg.sdk_version as tsdk_version,tg.game_size as tgame_size,tg.money as tmoney,tg.ratio as tratio,tg.material_url as tmaterial_url,dispose_time,apply_time,tab_apply.promote_money as applymoney,tab_apply.promote_ratio as applyratio,tab_apply.status as applystatus") ->join("tab_apply ON tab_game.id = tab_apply.game_id and tab_apply.promote_id = " . session('promote_auth.pid')) ->join("left join tab_game as tg ON (tab_game.id = tg.relation_game_id and tg.game_status = 1 and tab_game.id!=tab_game.relation_game_id) or (tab_game.id = tg.relation_game_id and tab_game.id!=tg.id and tg.game_status = 1) or (tab_game.id!=tab_game.relation_game_id and tab_game.relation_game_id=tg.id and tab_game.game_status=1)") // 查询条件 ->where($map) /* 默认通过id逆序排列 */ ->order("id desc") ->group("relation_game_id") /* 数据分页 */ ->page($page, $row) /* 执行查询 */ ->select(); $applymodel = M('apply', 'tab_'); $launchmodel = M('apply_launch', 'tab_'); foreach ($data as $key => $value) { if ($value['sdk_version'] == 2 && $value['tsdk_version'] == 1) { $game_ios = get_game_info($value['id']); $game_and = get_game_info($value['tid']); $data[$key] = $game_and; $data[$key]['tid'] = $game_ios['id']; $data[$key]['tsdk_version'] = $game_ios['sdk_version']; $data[$key]['tgame_size'] = $game_ios['game_size']; $data[$key]['tmoney'] = $game_ios['money']; $data[$key]['tratio'] = $game_ios['ratio']; $data[$key]['dispose_time'] = $game_ios['dispose_time']; $data[$key]['tapplymoney'] = $apply_info['promote_money']; $data[$key]['tapplyratio'] = $apply_info['promote_ratio']; } } foreach ($data as $key => $value) { $apply = $applymodel->field('id,status')->where(['promote_id' => get_pid(), 'game_id' => $value['tid']])->find(); if ($value['applyid']) { $platform = $launchmodel->field('platform_id')->where(['apply_id' => $value['applyid']])->find(); $data[$key]['platform_id'] = $platform['platform_id']; } else { $data[$key]['applyid'] = 0; } if ($apply['id']) { $data[$key]['tapplyid'] = $apply['id']; $tplatform = $launchmodel->field('platform_id')->where(['apply_id' => $apply['id']])->find(); $data[$key]['tplatform_id'] = $tplatform['platform_id']; $data[$key]['tapplystatus'] = $apply['status']; } else { $data[$key]['tapplyid'] = 0; $data[$key]['tapplystatus'] = 0; } } /* 查询记录总数 */ $count = count(M("game", "tab_") /* 查询指定字段,不指定则查询所有字段 */ ->field("tab_game.*,tab_apply.promote_id,tab_apply.status") ->join("tab_apply ON tab_game.id = tab_apply.game_id and tab_apply.promote_id = " . session('promote_auth.pid')) // 查询条件 ->where($map) ->group("relation_game_id") ->select()); //分页 $parameter = array( 'row' => I('get.row'), 'sdk_version' => I('request.sdk_version'), 'p' => I('p', 1), 'type' => I('request.type'), 'enable_status' => I('request.enable_status'), 'game_id' => I('request.game_id'), ); $page = set_pagination($count, $row, $parameter); if ($page) { $this->assign('_page', $page); } $url = "http://" . $_SERVER['HTTP_HOST'] . __ROOT__ . "/media.php/member/preg/pid/" . session("promote_auth.pid"); $this->assign("url", $url); $this->assign("count", $count); $this->assign('model', $model); $this->assign('list_data', $data); $this->meta_title = "我的游戏"; $this->display(); } public function child_game($p = 0) { $loginPromote = $this->getLoginPromote(); if ($loginPromote['level'] > 3) { echo ''; exit; } if (!empty($_REQUEST['game_id'])) { $map['tab_apply.game_id'] = $_REQUEST['game_id']; } if (!empty($_REQUEST['promote_id'])) { $map['tab_apply.promote_id'] = $_REQUEST['promote_id']; } else { $sid = M('Promote', 'tab_')->field('id')->where(array('parent_id' => PID, 'status' => 1))->select(); if ($sid) { $map['tab_apply.promote_id'] = array('in', array_column($sid, 'id')); } else { $map['tab_apply.promote_id'] = -1; } } $map['tab_game.game_status'] = 1;//游戏状态 $start_time = strtotime(I('time_start')); $end_time = strtotime(I('time_end')); if (!empty($start_time) && !empty($end_time)) { $map['tab_apply.dispose_time'] = ['BETWEEN', [$start_time, $end_time + 24 * 60 * 60 - 1]]; unset($_REQUEST['time_start']); unset($_REQUEST['time_end']); } else if (!empty($start_time)) { $map['tab_apply.dispose_time'] = array('gt', $start_time); } else if (!empty($end_time)) { $map['tab_apply.dispose_time'] = array('lt', $end_time + 24 * 60 * 60 - 1); } $map['tab_apply.status'] = 1; $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } $data = M("game", "tab_") /* 查询指定字段,不指定则查询所有字段 */ ->field("tab_game.id,tab_game.game_size,tab_game.game_name,tab_game.money,tab_game.sdk_version,tab_game.ratio,tab_game.icon,tab_game.game_type_name,tab_game.recommend_status,promote_id,promote_account,status,tab_apply.dow_status,tab_apply.plist_url,tab_apply.id as applyid,enable_status,tab_game.sort,tab_game.relation_game_id,tab_game.relation_game_name,tab_game.material_url,tg.relation_game_id as trelation_game_id,tg.id as tid,tg.game_name as tgame_name,tg.sdk_version as tsdk_version,tg.game_size as tgame_size,tg.money as tmoney,tg.ratio as tratio,tg.material_url as tmaterial_url,dispose_time,apply_time,promote_account,tab_apply.promote_money as applymoney,tab_apply.promote_ratio as applyratio,tab_apply.status as applystatus") ->join("tab_apply ON tab_game.id = tab_apply.game_id ") ->join("left join tab_game as tg ON (tab_game.id = tg.relation_game_id and tg.game_status = 1 and tab_game.id!=tab_game.relation_game_id) or (tab_game.id = tg.relation_game_id and tab_game.id!=tg.id and tg.game_status = 1) or (tab_game.id!=tab_game.relation_game_id and tab_game.relation_game_id=tg.id and tab_game.game_status=1)") // 查询条件 ->where($map) /* 默认通过id逆序排列 */ ->order("id desc") ->group("tab_apply.promote_id,relation_game_id") /* 数据分页 */ ->page($page, $row) /* 执行查询 */ ->select(); $count = count(M("game", "tab_") /* 查询指定字段,不指定则查询所有字段 */ ->field("tab_game.*,tab_apply.promote_id,tab_apply.status") ->join("tab_apply ON tab_game.id = tab_apply.game_id ") // 查询条件 ->where($map) ->group("tab_apply.promote_id,relation_game_id") ->select()); $applymodel = M('apply', 'tab_'); $launchmodel = M('apply_launch', 'tab_'); foreach ($data as $key => $value) { if ($value['sdk_version'] == 2 && $value['tsdk_version'] == 1) { $game_ios = get_game_info($value['id']); $game_and = get_game_info($value['tid']); $apply_info = M('apply', 'tab_')->where(['game_id' => $value['id'], 'promote_account' => $value['promote_account']])->find(); $data[$key] = $game_and; $data[$key]['tid'] = $game_ios['id']; $data[$key]['tsdk_version'] = $game_ios['sdk_version']; $data[$key]['tgame_size'] = $game_ios['game_size']; $data[$key]['tmoney'] = $game_ios['money']; $data[$key]['tratio'] = $game_ios['ratio']; $data[$key]['applyid'] = $apply_info['id']; $data[$key]['enable_status'] = $apply_info['enable_status']; $data[$key]['promote_id'] = $apply_info['promote_id']; $data[$key]['promote_account'] = $apply_info['promote_account']; $data[$key]['applymoney'] = $apply_info['promote_money']; $data[$key]['tapplyratio'] = $apply_info['promote_ratio']; $data[$key]['tapply_time'] = $apply_info['apply_time']; $data[$key]['dispose_time'] = $apply_info['apply_time']; } } foreach ($data as $key => $value) { $apply = $applymodel->field('id,status')->where(['promote_id' => $value['promote_id'], 'game_id' => $value['tid']])->find(); if ($value['applyid']) { $data[$key]['launch_count'] = $launchmodel->where(['apply_id' => $value['applyid']])->count(); } else { $data[$key]['applyid'] = 0; } if ($apply['id']) { $data[$key]['tapplyid'] = $apply['id']; $data[$key]['tlaunch_count'] = $launchmodel->where(['apply_id' => $apply['id']])->count(); $data[$key]['tapplystatus'] = $apply['status']; } else { $data[$key]['tapplyid'] = 0; $data[$key]['tapplystatus'] = 0; } } //分页 $parameter = $_POST; $parameter['p'] = I('get.p', 1); $parameter['row'] = I('get.row'); $page = set_pagination($count, $row, $parameter); if ($page) { $this->assign('_page', $page); } $this->assign("count", $count); $this->assign('model', $model); $this->assign('list_data', $data); $this->meta_title = "子渠道游戏"; $this->display(); } public function changevalue() { if (IS_POST) { if (!is_numeric($_REQUEST['id']) || $_REQUEST['id'] <= 0) { echo json_encode(array('status' => 0, 'info' => '数据有误')); exit; } if (!is_numeric($_REQUEST['value']) || $_REQUEST['value'] < 0) { echo json_encode(array('status' => 0, 'info' => '数据有误')); exit; } $apply = M('apply', 'tab_'); if ($_REQUEST['type'] == 1) { $res = $apply->where(array('id' => $_REQUEST['id']))->setField(array('promote_money' => $_REQUEST['value'])); if ($res) { echo json_encode(array('status' => 1, 'info' => '注册单价修改成功')); exit; } else { echo json_encode(array('status' => 0, 'info' => '注册单价修改失败')); exit; } } elseif ($_REQUEST['type'] == 2) { $res = $apply->where(array('id' => $_REQUEST['id']))->setField(array('promote_ratio' => $_REQUEST['value'])); if ($res) { echo json_encode(array('status' => 1, 'info' => '分成比例修改成功')); exit; } else { echo json_encode(array('status' => 0, 'info' => '分成比例修改失败')); exit; } } else { echo json_encode(array('status' => 0, 'info' => '数据有误')); exit; } } else { echo json_encode(array('status' => 0, 'info' => '数据有误')); exit; } } public function apply_game() { if (IS_POST) { $relation_game_id = $_POST['game_id']; $sdk_version = $_POST['sdk_version']; $platform_id = $_POST['platform_id']; $platform_name = $_POST['platform_name']; $remark = $_POST['remark']; $promote_id = is_login_promote(); if ($promote_id < 1) { $this->ajaxReturn(['status' => 0, 'msg' => '请登录后再操作'], 'json'); } if (!is_numeric($relation_game_id) || $relation_game_id < 1) { $this->ajaxReturn(['status' => 0, 'msg' => '缺少游戏'], 'json'); } if (!is_numeric($sdk_version) || $sdk_version < 1 || $sdk_version > 2) { $this->ajaxReturn(['status' => 0, 'msg' => '缺少版本'], 'json'); } if ((!is_numeric($platform_id) || $platform_id < 1) && empty($platform_name)) { $this->ajaxReturn(['status' => 0, 'msg' => '投放平台不能为空'], 'json'); } $gamemodel = M('Game', 'tab_'); $game = $gamemodel->where(['relation_game_id' => $relation_game_id, 'sdk_version' => $sdk_version])->find(); if (!is_array($game)) { $this->ajaxReturn(['status' => 0, 'msg' => '此游戏不存在'], 'json'); } $game_id = $game['id']; // 先查投放平台,如有渠道输入则先判断平台是否存在,不存在则添加,存在则获取信息;没有趣的输入,则判断选择平台是否存在,不存在返回 $platformmodel = M('launch_platform', 'tab_'); if ($platform_name) { $platform = $platformmodel->where(['name' => $platform_name])->find(); if (empty($platform)) { $platform_id = $platformmodel->add(['create_time' => time(), 'update_time' => time(), 'name' => $platform_name, 'promote_id' => $promote_id, 'promote_account' => get_promote_account($promote_id), 'mark' => 1]); } else { $platform_id = $platform['id']; } } else { $platform = $platformmodel->where(['id' => $platform_id])->find(); if (empty($platform)) { $this->ajaxReturn(['status' => 0, 'msg' => '投放平台选择有误,请重新选择'], 'json'); } } // 再查申请表,数据是否存在,存在则不予理会,不存在则添加 $applymodel = M('Apply', 'tab_'); $apply = $applymodel->field('id')->where(['promote_id' => $promote_id, 'game_id' => $game_id])->find(); if (empty($apply)) { $data = array( 'game_id' => $game_id, 'game_name' => $game['game_name'], 'promote_id' => $promote_id, 'promote_account' => session("promote_auth.account"), 'apply_time' => time(), 'status' => C('SET_AUTO_PACK'), 'dispose_time' => C('SET_AUTO_PACK') ? time() : '', 'sdk_version' => $sdk_version, 'ratio' => $game['ratio'], 'money' => $game['money'], ); $exist = C('SET_AUTO_PACK'); $apply_id = $applymodel->add($data); } else { $apply_id = $apply['id']; $exist = 1; } if ($platform_id > 0 && $apply_id > 0) { $launchmodel = M('apply_launch', 'tab_'); $launch = $launchmodel->field('position')->where(['platform_id' => $platform_id, 'apply_id' => $apply_id])->order('launch_time desc')->find(); $data = array( 'platform_id' => $platform_id, 'apply_id' => $apply_id, 'launch_game_id' => $game_id, 'launch_time' => time(), 'position' => $launch['position'] > 0 ? (intval($launch['position']) + 1) : 1, 'remark' => $remark, ); $res = $launchmodel->add($data); if ($res > 0) { $this->ajaxReturn(['status' => 1, 'msg' => '申请成功', 'exist' => $exist], 'json'); } else { $this->ajaxReturn(['status' => 0, 'msg' => '申请失败'], 'json'); } } else { $this->ajaxReturn(['status' => 0, 'msg' => '申请失败,请重新申请'], 'json'); } } else { $this->ajaxReturn(['status' => 0, 'msg' => '请求有误'], 'json'); } } /* * APP申请 */ public function app_index() { $map['tab_app.type'] = 1; empty(I('version')) || $map['tab_app.version'] = I('version'); $promote_id = PID; $data = M('app', 'tab_') ->field('tab_app.*,p.status as apply_status,p.dow_url,p.enable_status,p.promote_id') ->join("left join tab_app_apply p on p.app_id = tab_app.id and p.promote_id = {$promote_id}") ->where($map) ->select(); $this->assign('data', $data); $this->meta_title = "APP申请"; $this->display(); } //app申请 public function apply_app($app_id) { $app = M('app', 'tab_')->find($app_id); $map['app_id'] = $app_id; $map['promote_id'] = PID; $data = M('app_apply', 'tab_')->where($map)->find(); if (!empty($data)) { $res['status'] = 2; $res['msg'] = '该渠道已经申请过此APP!'; } else { $data['promote_id'] = PID; $data['app_id'] = $app_id; $data['app_name'] = $app['name']; $data['app_version'] = $app['version']; $data['apply_time'] = time(); $data['status'] = 0; $result = M('app_apply', 'tab_')->add($data); if ($result !== false) { $res['status'] = 1; $res['msg'] = '申请成功'; } else { $res['status'] = 2; $res['msg'] = '申请失败'; } } $this->ajaxReturn($res); } //打包 public function allpackage($ids = null, $game_id = 0) { if (empty($ids)) { $gameData = M('Game', 'tab_')->find($game_id); $model = new ApplyModel(); //D('Apply'); $data['game_id'] = $_POST['game_id']; $data['game_name'] = get_game_name($game_id); $data['promote_id'] = session("promote_auth.pid"); $data['promote_account'] = session("promote_auth.account"); $data['apply_time'] = NOW_TIME; $data['status'] = 1; $data['enable_status'] = 2; $data['dispose_id'] = 0; $data['dispose_time'] = NOW_TIME; $data['sdk_version'] = $gameData['sdk_version']; $data['ratio'] = $gameData['ratio']; $data['money'] = $gameData['money']; $result = $model->add($data); if ($result > 0) { $this->success("已加入打包队列,刷新此页面可查看当前打包状态"); } else { $this->error('打包失败'); } } else { $map['id'] = $ids; $data = array('status' => 1, 'enable_status' => 2); M('apply', 'tab_')->where($map)->setField($data); $this->success("已加入打包队列,刷新此页面可查看当前打包状态"); exit; } } /** *APP打包 */ public function app_package($appid = null) { $appData = M('app', 'tab_')->find($appid); $map['app_id'] = $appid; $map['promote_id'] = PID; $ids = 0; $data = M('app_apply', 'tab_')->where($map)->find(); if (empty($data)) { $data['promote_id'] = PID; $data['app_id'] = $appid; $data['app_name'] = $appData['name']; $data['app_version'] = $appData['version']; $data['apply_time'] = time(); $data['status'] = 1; $data['enable_status'] = 1; $data['dispose_id'] = 0; $data['dispose_time'] = NOW_TIME; $result = M('app_apply', 'tab_')->add($data); $ids = $result; } else { $ids = $data['id']; } try { $apply_data = M('app_apply', 'tab_')->find($ids); #获取原包数据 $source_file = M('app', 'tab_')->find($apply_data['app_id']); if ($apply_data['app_version'] == 1) { $app_type = ".apk"; $url_ver = "META-INF/mch.properties"; } else { $app_type = ".ipa"; $url_ver = "Payload/XiGuMobileGame.app/_CodeSignature/mch.txt"; } $newname = "app_package" . $apply_data["app_id"] . "-" . $apply_data['promote_id'] . $app_type; $to = "./Uploads/GamePack/" . $newname; copy($source_file['file_url'], $to); #打包新路径 $zip = new \ZipArchive; $res = $zip->open($to, \ZipArchive::CREATE); if ($res == TRUE) { #打包数据 $pack_data = array( "promote_id" => $apply_data['promote_id'], "promote_account" => get_promote_name($apply_data["promote_id"]), ); $zip->addFromString($url_ver, json_encode($pack_data)); $zip->close(); if (get_tool_status("oss_storage") == 1) { $to = "http://" . C("oss_storage.bucket") . "." . C("oss_storage.domain") . "/GamePack/" . $newname; $to = str_replace('-internal', '', $to); $new_to = "./Uploads/GamePack/" . $newname; $updata['savename'] = $newname; $updata['path'] = $new_to; $this->upload_game_pak_oss($updata); @unlink($new_to); } elseif (get_tool_status("qiniu_storage") == 1) { $this->dleteQiNiuFile($newname); $url = $this->upQiNiuFile($newname, $to); @unlink($to); $to = "http://" . $url; } elseif (get_tool_status("cos_storage") == 1) { $cos = A('Cos'); $cos->cosupload("", "/App/" . $newname, 2); $cos_res = $cos->cosupload($to, "/App/" . $newname); if (strlen($cos_res) > 10) { @unlink($to); $to = $cos_res; } else { $this->error("Cos参数错误"); } } if ($apply_data['app_version'] == 2) { $plist_url = A('Plist')->create_plist_app('1', $apply_data['promote_id'], 'app', $to); $apply_data['plist_url'] = $plist_url; } $apply_data['dow_url'] = $to; $apply_data['enable_status'] = 1; $apply_data['status'] = 1; $res = M('app_apply', 'tab_')->save($apply_data); } else { $this->error('解压文件失败'); } $this->success('打包成功'); } catch (\Exception $e) { $this->error($e->getMessage()); } } public function promitionofregestion() { $map['relation_game_id'] = $_GET['gid']; $data = M('game', 'tab_')->field('id,sdk_version,icon,screenshot,relation_game_id,relation_game_name')->where($map)->select(); $this->assign('data', $data); $this->display(); } public function qrcode($url = '', $logo = '', $level = 3, $size = 4) { $url = base64_decode(base64_decode($url)); $logo = base64_decode(base64_decode($logo)); Vendor('phpqrcode.phpqrcode'); $errorCorrectionLevel = intval($level);//容错级别 $matrixPointSize = intval($size);//生成图片大小 //生成二维码图片 // echo $_SERVER['REQUEST_URI']; ob_clean(); echo \QRcode::png($url, false, $errorCorrectionLevel, $matrixPointSize, 2, false, $logo); } /** *上传到OSS */ public function upload_game_pak_oss($return_data = null) { /** * 根据Config配置,得到一个OssClient实例 */ try { Vendor('OSS.autoload'); $ossClient = new \OSS\OssClient(C("oss_storage.accesskeyid"), C("oss_storage.accesskeysecr"), C("oss_storage.domain")); } catch (OssException $e) { $this->error($e->getMessage()); } $bucket = C('oss_storage.bucket'); // if(preg_match('/.apk/',$return_data['savename']) ){ $oss_name = "GamePack"; // }else{ // $oss_name="IosGamePack"; // } $oss_file_path = $oss_name . "/" . $return_data["savename"]; $avatar = $return_data["path"]; try { $this->multiuploadFile($ossClient, $bucket, $oss_file_path, $avatar); return true; } catch (OssException $e) { /* 返回JSON数据 */ $this->error($e->getMessage()); } } public function multiuploadFile($ossClient, $bucket, $url, $file) { //$file = __FILE__; $options = array(); try { #初始化分片上传文件 $uploadId = $ossClient->initiateMultipartUpload($bucket, $url); //$ossClient->multiuploadFile($bucket, $url, $file, $options); } catch (OssException $e) { printf(__FUNCTION__ . ": initiateMultipartUpload FAILED\n"); printf($e->getMessage() . "\n"); return; } /* * step 2. 上传分片 */ $partSize = 5 * 1000 * 1024; $uploadFile = $file; $uploadFileSize = filesize($uploadFile); $pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize); $responseUploadPart = array(); $uploadPosition = 0; $isCheckMd5 = true; foreach ($pieces as $i => $piece) { $fromPos = $uploadPosition + (integer)$piece[$ossClient::OSS_SEEK_TO]; $toPos = (integer)$piece[$ossClient::OSS_LENGTH] + $fromPos - 1; $upOptions = array( $ossClient::OSS_FILE_UPLOAD => $uploadFile, $ossClient::OSS_PART_NUM => ($i + 1), $ossClient::OSS_SEEK_TO => $fromPos, $ossClient::OSS_LENGTH => $toPos - $fromPos + 1, $ossClient::OSS_CHECK_MD5 => $isCheckMd5, ); if ($isCheckMd5) { $contentMd5 = \OSS\Core\OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos); $upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5; } //2. 将每一分片上传到OSS try { $responseUploadPart[] = $ossClient->uploadPart($bucket, $url, $uploadId, $upOptions); } catch (OssException $e) { printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} FAILED\n"); printf($e->getMessage() . "\n"); return; } } $uploadParts = array(); foreach ($responseUploadPart as $i => $eTag) { $uploadParts[] = array( 'PartNumber' => ($i + 1), 'ETag' => $eTag, ); } /** * step 3. 完成上传 */ try { $ossClient->completeMultipartUpload($bucket, $url, $uploadId, $uploadParts); } catch (OssException $e) { printf(__FUNCTION__ . ": completeMultipartUpload FAILED\n"); printf($e->getMessage() . "\n"); return; } } /** * 投放平台列表 * @param integer $applyid 申请表编号 * @author 鹿文学 */ public function launch($applyid = 0, $p = 1) { if (is_numeric($applyid) && $applyid > 0) { $launchmodel = M('apply_launch', 'tab_'); $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 $map = ['apply_id' => $applyid]; $count = $launchmodel->alias('l') ->join('tab_apply as a on(a.id=l.apply_id) ') ->where($map)->count(); if ($count > 0) { if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } $list = $launchmodel->alias('l')->field('l.*,a.game_id,a.promote_id,a.promote_id,a.sdk_version,a.enable_status') ->join('tab_apply as a on(a.id=l.apply_id) ') ->where($map)->page($page, $row)->select(); $game = M('game', 'tab_')->where(['id' => $list[0]['launch_game_id']])->field('game_status,dow_status')->find(); if ($game['dow_status'] == 0 || $game['game_status'] == 0) { foreach ($list as $key => $v) { unset($list[$key]['launch_down_url']); unset($list[$key]['launch_plist_url']); } } $page = set_pagination($count, $row); if ($page) { $this->assign('_page', $page); } $this->assign('list_data', $list); $this->assign('is_launch', 1); } else { $list = M('apply', 'tab_')->where(['id' => $applyid])->find(); $game = M('game', 'tab_')->where(['id' => $list['game_id']])->field('game_status,dow_status')->find(); if ($game['dow_status'] == 0 || $game['game_status'] == 0) { unset($list['pack_url']); unset($list['plist_url']); } $this->assign('list_data', [$list]); $this->assign('is_launch', 0); } } $this->assign('relation_game_id', I('get.rgid', '')); $this->assign('notchild', stripos($_SERVER['HTTP_REFERER'], 'child_game') ? 0 : 1); $this->display(); } function getPromoteListByRole() { $promoteRole = I('promote_role'); $data = array(); switch ($promoteRole) { case 2: case 3: case 4: $data = getAllPromoteListByType($promoteRole); break; } $this->ajaxReturn($data); } public function getGameInfo() { $promote = $this->getLoginPromote(); $promoteService = new PromoteService(); if (!$promoteService->canPresidentApplyGame($promote)) { $this->ajaxReturn([ 'status' => 0, 'message' => '请联系市场专员开启', 'data' => [ ] ]); } $gameId = I('game_id'); $promoteType = I('promote_type'); $gameData = array(); if ($gameId > 0) { $map['id'] = $gameId; $gameData = M('Game', 'tab_') ->where($map) ->find(); } $gameData['sdk_name'] = getSDKTypeName($gameData['sdk_version']); $promotes = getAllPromoteListByType($promoteType); $newPromoteData = []; if (count($promotes) > 0) { $promoteIds = array_column($promotes, 'id'); $oldIds = M('apply', 'tab_')->where(['game_id' => $gameId, 'promote_id' => ['in', $promoteIds], 'offline_status' => 0])->getField('id', true); $newPromoteIds = array_diff($promoteIds, $oldIds); foreach ($promotes as $promote) { if (in_array($promote['id'], $newPromoteIds)) { $newPromoteData[] = $promote; } } } $data['game_data'] = $gameData; $data['promote_data'] = $newPromoteData; $this->ajaxReturn([ 'status' => 1, 'message' => '获取成功', 'data' => $data ]); } function addGameToPromote() { $loginPromote = $this->getLoginPromote(); $gameId = I('game_id'); $promoteIds = I('promote_ids'); if (empty($gameId)) { $data['status'] = -1; $data['msg'] = '游戏id错误'; $this->ajaxReturn($data); } if (empty($promoteIds)) { $data['status'] = -1; $data['msg'] = '未选择渠道'; $this->ajaxReturn($data); } $gameData = M('Game', 'tab_')->where(array('id' => $gameId))->find(); foreach ($promoteIds as $value) { $thisPromoteData = D('Promote')->where(array('id' => $value))->find(); if (empty($thisPromoteData) || !hasPromotePermission($loginPromote['id'], $value)) { $data['status'] = -1; $data['msg'] = '渠道权限异常'; $this->ajaxReturn($data); } $map['game_id'] = $gameId; $map['promote_id'] = $value; $applyData = M('apply', 'tab_')->field('id,offline_status')->where($map)->find(); $updateStatus = 0; if (!empty($applyData)) { if ($applyData['offline_status'] == 0) { continue; } else { $updateStatus = 1; } } $save['promote_account'] = $thisPromoteData['account']; $save['apply_time'] = NOW_TIME; $save['ratio'] = $gameData['ratio']; $save['money'] = $gameData['money']; $save['offline_status'] = 0; $gameSource = M('Game_source', 'tab_')->field('id,source_version')->where(['game_id' => $gameId])->find(); if (!file_exists(get_game_source_file_url($gameId)) || null == $gameSource) { $save['enable_status'] = -1; } else { $save['enable_status'] = 2; } if ($updateStatus == 0) { $save['sdk_version'] = $gameData['sdk_version']; $save['game_id'] = $gameId; $save['game_name'] = get_game_name($gameId); $save['promote_id'] = $value; $save['status'] = C('SET_AUTO_PACK'); $res = M('Apply', 'tab_')->add($save); } else { $res = M('Apply', 'tab_')->where('id = ' . $applyData['id'])->save($save); } if (!$res) { $this->ajaxReturn(array("status" => -1, "msg" => "添加失败", 'ret' => $res)); } } $this->ajaxReturn(array("status" => 0, "msg" => "添加成功")); } public function getEnableStatus() { $applyId = I('post.apply_id'); if (empty($applyId)) { $this->ajaxReturn(['status' => 0, 'msg' => '数据异常']); } $map['id'] = $applyId; $enableStatus = M('Apply', 'tab_')->where($map)->getField('enable_status'); $this->ajaxReturn(['status' => 1, 'data' => $enableStatus]); } public function backDetailData() { //返回详情数据 $result = ['code' => 10001, 'msg' => "该游戏信息不存在,请确认!", 'error' => 1, 'info' => '']; $id = $_POST['id']; if (empty($id)) { $this->ajaxReturn($result); } $gameInfo = M('Game', 'tab_')->where(['id' => $id])->getField('detail_content'); if (!$gameInfo) { $this->ajaxReturn($result); } else { $result['code'] = 10000; $result['msg'] = "获取信息成功"; $result['error'] = -1; $result['info'] = $gameInfo; $this->ajaxReturn($result); } } public function getDownloadUrl() { $gameId = I('game_id', 0); $promoteId = I('promote_id', 0); $promote = $this->getLoginPromote(); if ($promoteId == 0) { $promoteId = $promote['id']; } $apply = M('apply', 'tab_')->where(['promote_id' => $promoteId, 'game_id' => $gameId])->find(); $game = M('game', 'tab_')->field(['id', 'icon', 'apply_auth'])->where(['id' => $gameId])->find(); if ($apply == null) { $this->ajaxReturn([ 'status' => 0, 'message' => '游戏不存在', 'data' => [ ] ]); } $promoteService = new PromoteService(); if (!$promoteService->canPresidentApplyGame($promote)) { $this->ajaxReturn([ 'status' => 0, 'message' => '请联系市场专员开启', 'data' => [ ] ]); } $icon = Request::getHost() . '/' . get_cover($game['icon'], 'path'); $applyService = new ApplyService(); $result = $applyService->checkApplyStatus($apply); if (!$result['status']) { $this->ajaxReturn([ 'status' => 0, 'message' => $result['message'], 'data' => [ ] ]); } $url = $applyService->getDownloadUrl($apply); $this->ajaxReturn([ 'status' => 1, 'message' => '获取成功', 'data' => [ 'url' => $url, ] ]); } public function getLandingPageUrl() { $gameId = I('game_id', 0); $promoteId = I('promote_id', 0); $promote = $this->getLoginPromote(); if ($promoteId == 0) { $promoteId = $promote['id']; } $apply = M('apply', 'tab_')->where(['promote_id' => $promoteId, 'game_id' => $gameId])->find(); $game = M('game', 'tab_')->field(['icon', 'apply_auth', 'id'])->where(['id' => $gameId])->find(); if ($apply == null) { $this->ajaxReturn([ 'status' => 0, 'message' => '游戏不存在', 'data' => [ ] ]); } $promoteService = new PromoteService(); if (!$promoteService->canPresidentApplyGame($promote)) { $this->ajaxReturn([ 'status' => 0, 'message' => '请联系市场专员开启', 'data' => [ ] ]); } $icon = Request::getHost() . '/' . get_cover($game['icon'], 'path'); $applyService = new ApplyService(); $result = $applyService->checkApplyStatus($apply); if (!$result['status']) { $this->ajaxReturn([ 'status' => 0, 'message' => $result['message'], 'data' => [ ] ]); } $url = $applyService->getLandingPageUrl($apply); $this->ajaxReturn([ 'status' => 1, 'message' => '获取成功', 'data' => [ 'url' => $url, ] ]); } }