<?php
namespace Home\Controller;
use OT\DataDictionary;
use Admin\Model\ApplyModel;
use Think\Model;
use Base\Facade\Request;
use Base\Service\ApplyService;
use Base\Service\PromoteService;
/**
* 前台首页控制器
* 主要获取首页聚合数据
*/
class GameController extends BaseController
{
public function index()
{
$this->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'];
}
$promote = $loginPromote;
if ($promoteId > 0) {
$promote = M('promote', 'tab_')->where(['id' => $promoteId])->find();
}
$promoteService = new PromoteService();
$gameIds = $promoteService->getVisibleGameIds($promote);
if ($baseGameId > 0) {
$baseGame = M('base_game', 'tab_')->where(['id' => $baseGameId])->find();
$searchGameIds = [];
if ($baseGame['android_game_id'] > 0) {
$searchGameIds[] = $baseGame['android_game_id'];
}
if ($baseGame['ios_game_id'] > 0) {
$searchGameIds[] = $baseGame['ios_game_id'];
}
$gameIds = array_intersect($searchGameIds, $gameIds);
}
$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;
$data['enable_status'] = 2;
$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,
'enable_status' => 2,
'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;
$data['enable_status'] = 2;
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 '< script > window . location . go ( - 1 ) ; < / script > ';
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,
]
]);
}
}