300, 230 => 300, ]; public function index() { $createTimeStart = I('create_time_start', ''); $createTimeEnd = I('create_time_end', ''); $gameId = I('game_id', 0); $serverId = I('server_id', ''); $account = I('account'); $roleName = I('role_name'); $loginPromote = $this->getLoginPromote(); $conditions = []; $subConditions = [ '_string' => '1=1' ]; $promoteService = new PromoteService(); $visibleGameIds = $promoteService->getVisibleGameIds($loginPromote); $strCondition = 'game_id in (0)'; if (count($visibleGameIds) > 0) { $strCondition = 'game_id in (' . implode(',', $visibleGameIds) . ')'; } /** * @todo 仅有游戏猫 */ $strCondition .= ' and game_id in (229, 230)'; if ($createTimeStart) { $strCondition .= ' and create_time >=' . strtotime($createTimeStart . ' 00:00:00'); } if ($createTimeEnd) { $strCondition .= ' and create_time <=' . strtotime($createTimeEnd . ' 23:59:59'); } $subSql = M('testing_user', 'tab_')->field(['user_id'])->where($subConditions)->select(false); $strCondition .= ' and user_id in (' . $subSql . ')'; $strCondition .= ' and promote_id in (' . $promoteService->subInSql($loginPromote) . ')'; if ($account) { $user = M('user', 'tab_')->field(['id'])->where('account like "' . $account . '%"')->find(); if ($user) { $conditions['user_id'] = $user['id']; } else { $strCondition .= ' and 1<>1'; } } if ($gameId) { $conditions['game_id'] = $gameId; } if ($serverId) { $conditions['server_id'] = $serverId; } if ($roleName) { $conditions['role_name'] = ['like', $roleName . '%']; } $conditions['_string'] = $strCondition; $query = M('user_play_info', 'tab_')->where($conditions)->order('create_time desc'); list($roles, $pagination, $count) = $this->paginate($query); $bindingOrWhere = []; foreach ($roles as $role) { $bindingOrWhere[] = '(role_id="' . $role['role_id'] . '" and game_id=' . $role['game_id'] . ')'; } $userIds = array_unique(array_column($roles, 'user_id')); $users = []; $bindings = []; $bindingRoles = []; $applyRecords = []; if (count($roles) > 0) { $users = M('user', 'tab_')->field(['id', 'phone', 'lock_status'])->where(['id' => ['in', $userIds]])->select(); $users = index_by_column('id', $users); $bindingRows = M('testing_binding', 'tab_')->where(['_string' => implode(' or ', $bindingOrWhere)])->select(); $bindingRoleIds = []; foreach ($bindingRows as $bindingRow) { $bindings[$this->getGameRoleId($bindingRow['game_id'], $bindingRow['role_id'])] = $bindingRow; $bindingRoleIds[] = $this->getGameRoleId($bindingRow['game_id'], $bindingRow['bind_role_id']); } if (count($bindings) > 0) { $bindingRoles = M('user_play_info', 'tab_') ->field(['id', 'role_id', 'role_name', 'user_account', 'game_id', 'game_role_id']) ->where(['game_role_id' => ['in', $bindingRoleIds]]) ->select(); $bindingRoles = index_by_column('game_role_id', $bindingRoles); } $verifyItems = M('testing_resource_batch', 'tab_') ->field('sum(apply_amount) amount, game_id, role_id') ->where([ 'verify_status' => 0, '_string' => implode(' or ', $bindingOrWhere) ]) ->group('game_id,role_id')->select(); $verifyRecords = []; foreach ($verifyItems as $item) { $verifyRecords[$this->getGameRoleId($item['game_id'], $item['role_id'])] = $item['amount'] ; } $provideItems = M('testing_resource_batch', 'tab_') ->field('sum(provide_amount) amount, game_id, role_id') ->where([ 'verify_status' => 1, '_string' => implode(' or ', $bindingOrWhere) ]) ->group('game_id,role_id')->select(); $provideRecords = []; foreach ($provideItems as $item) { $provideRecords[$this->getGameRoleId($item['game_id'], $item['role_id'])] = $item['amount'] ; } $todayProvideItems = M('testing_resource_batch', 'tab_') ->field('sum(provide_amount) amount, game_id, role_id') ->where([ 'verify_status' => 1, '_string' => implode(' or ', $bindingOrWhere), 'provide_time' => ['egt', strtotime(date('Y-m-d 00:00:00'))], 'provide_time' => ['elt', strtotime(date('Y-m-d 23:59:59'))], ]) ->group('game_id,role_id')->select(); $todayProvideRecords = []; foreach ($todayProvideItems as $item) { $todayProvideRecords[$this->getGameRoleId($item['game_id'], $item['role_id'])] = $item['amount'] ; } $applyItems = M('testing_resource_batch', 'tab_') ->field('sum(apply_amount) amount, game_id, role_id') ->where([ '_string' => implode(' or ', $bindingOrWhere), ]) ->group('game_id,role_id')->select(); $applyRecords = []; foreach ($applyItems as $item) { $applyRecords[$this->getGameRoleId($item['game_id'], $item['role_id'])] = $item['amount'] ; } } $spendItems = []; if (count($bindingRoles) > 0) { $spendOrWhere = []; foreach ($bindingRoles as $bindingRole) { $spendOrWhere[] = '(game_player_id="' . $bindingRole['role_id'] . '" and game_id=' . $bindingRole['game_id'] . ')'; } $spendCondition = [ 'pay_status' => 1, '_string' => '(' . implode(' or ', $spendOrWhere) . ')', ]; $spendList = M('spend', 'tab_')->field('sum(pay_amount) amount, game_id, game_player_id')->where($spendCondition)->group('game_id,game_player_id')->select(); foreach ($spendList as $item) { $spendItems[$this->getGameRoleId($item['game_id'], $item['game_player_id'])] = $item['amount']; } } $records = []; foreach ($roles as $role) { $user = $users[$role['user_id']] ?? null; $binding = $bindings[$role['game_role_id']] ?? null; $bindingRole = null; if ($binding) { $bindGameRoleId = $this->getGameRoleId($binding['game_id'], $binding['bind_role_id']); $bindingRole = $bindingRoles[$bindGameRoleId] ? $bindingRoles[$bindGameRoleId] : null; } $records[] = [ 'id' => $role['id'], 'game_name' => $role['game_name'], 'server_name' => $role['server_name'], 'server_id' => $role['server_id'], 'role_id' => $role['role_id'], 'user_account' => $role['user_account'], 'user_phone' => $user ? $user['phone'] : '', 'role_name' => $role['role_name'], 'bind_user_account' => $bindingRole ? $bindingRole['user_account'] : '', 'bind_role_name' => $bindingRole ? $bindingRole['role_name'] : '', 'base_quota' => $this->gameBaseQuota[$role['game_id']] ?? 0, 'other_quota' => $role['testing_other_quota'], 'quota' => $bindingRole && isset($spendItems[$bindingRole['game_role_id']]) ? $spendItems[$bindingRole['game_role_id']] : 0, 'verify_amount' => $verifyRecords[$role['game_role_id']] ?? 0, 'provide_amount' => $provideRecords[$role['game_role_id']] ?? 0, 'today_amount' => $todayProvideRecords[$role['game_role_id']] ?? 0, 'apply_amount' => $applyRecords[$role['game_role_id']] ?? 0, 'status' => $user && $user['lock_status'] == 1 ? '正常' : '锁定', 'create_time' => date('Y-m-d H:i:s', $role['create_time']) ]; } $this->assign('games', $this->getGames()); $this->assign('servers', $this->getServersByGameId($gameId)); $this->assign('count', $count); $this->assign('pagination', $pagination); $this->assign('records', $records); $this->display(); } private function getGameRoleId($gameId, $roleId) { return $gameId . '#' . $roleId; } public function addTestingUsers() { $loginPromote = $this->getLoginPromote(); $accountsStr = trim(I('accounts', ''), ','); if ($accountsStr == '') { return $this->ajaxReturn(['status' => 0, 'message' => '请输入测试资源账号']); } $accounts = explode(',', $accountsStr); $accounts = array_unique($accounts); $existAccounts = M('testing_user', 'tab_')->where(['user_account' => ['in', $accounts]])->getField('user_account', true); $existAccounts = $existAccounts ?? []; $existCount = count($existAccounts); $newAccounts = array_diff($accounts, $existAccounts); $errorCount = 0; $successCount = 0; if (count($newAccounts)) { $promoteService = new PromoteService(); $strCondition = 'promote_id in (' . $promoteService->subInSql($loginPromote) . ')'; $users = M('user', 'tab_')->field(['id', 'account'])->where(['account' => ['in', $newAccounts], '_string' => $strCondition])->select(); $errorAccounts = array_diff($newAccounts, array_column($users, 'account')); $errorCount = count($errorAccounts); foreach ($users as $user) { if (in_array($user['account'], $errorAccounts)) { continue; } $data = [ 'user_id' => $user['id'], 'user_account' => $user['account'], 'status' => 1, 'create_time' => time(), 'update_time' => time(), ]; M('testing_user', 'tab_')->add($data); $successCount ++; } } return $this->ajaxReturn(['status' => 1, 'message' => '请求成功', 'data' => [ 'errorCount' => $errorCount, 'successCount' => $successCount, 'existCount' => $existCount, ]]); } public function batches() { $gameId = I('game_id', 0); $serverId = I('server_id', ''); $createTimeStart = I('create_time_start', ''); $createTimeEnd = I('create_time_end', ''); $verifyStatus = I('verify_status', -1); $provideStatus = I('provide_status', -1); $account = I('account'); $loginPromote = $this->getLoginPromote(); $promoteService = new PromoteService(); $subSql = M('user', 'tab_') ->where('id=tab_testing_resource_batch.user_id and promote_id in (' . $promoteService->subInSql($loginPromote) . ')') ->select(false); $conditions = [ '_string' => 'exists (' . $subSql . ')' ]; if ($createTimeStart) { $conditions['_string'] .= ' and create_time >=' . strtotime($createTimeStart . ' 00:00:00'); } if ($createTimeEnd) { $conditions['_string'] .= ' and create_time <=' . strtotime($createTimeEnd . ' 23:59:59'); } if ($verifyStatus != -1) { $conditions['verify_status'] = $verifyStatus; } if ($provideStatus != -1) { $conditions['provide_status'] = $provideStatus; } if ($gameId) { $conditions['game_id'] = $gameId; } if ($serverId) { $conditions['server_id'] = $serverId; } if ($account) { $user = M('user', 'tab_')->field(['id'])->where('account like "' . $account . '%"')->find(); if ($user) { $conditions['user_id'] = $user['id']; } else { $conditions['_string'] .= ' and 1<>1'; } } $query = M('testing_resource_batch', 'tab_')->where($conditions)->order('create_time desc'); list($batches, $pagination, $count) = $this->paginate($query); $roles = []; $applyPromotes = []; $users = []; $promotes = []; if (count($batches) > 0) { $gameRoleIds = []; foreach ($batches as $batch) { $gameRoleIds[] = $this->getGameRoleId($batch['game_id'], $batch['role_id']); } $roles = M('user_play_info', 'tab_') ->field(['id', 'game_name', 'server_name', 'role_name', 'game_role_id', 'user_account']) ->where(['game_role_id' => ['in', $gameRoleIds]]) ->select(); $roles = index_by_column('game_role_id', $roles); $users = M('user', 'tab_')->field(['id', 'account', 'phone', 'promote_id'])->where(['id' => ['in', array_column($batches, 'user_id')]])->select(); $users = index_by_column('id', $users); $applyPromotes = M('promote', 'tab_')->field(['id', 'account'])->where(['id' => ['in', array_column($batches, 'apply_promote_id')]])->select(); $applyPromotes = index_by_column('id', $applyPromotes); if (count($users) > 0) { $promotes = M('promote', 'tab_')->field(['id', 'account'])->where(['id' => ['in', array_column($users, 'promote_id')]])->select(); $promotes = index_by_column('id', $promotes); } } $testingResourceService = new TestingResourceService(); $records = []; foreach ($batches as $batch) { $roleKey = $this->getGameRoleId($batch['game_id'], $batch['role_id']); $role = isset($roles[$roleKey]) ? $roles[$roleKey] : null; $user = $users[$batch['user_id']] ?? null; $applyPromote = $applyPromotes[$batch['apply_promote_id']] ?? null; $promote = $user && isset($promotes[$user['promote_id']]) ? $promotes[$user['promote_id']] : null; $records[] = [ 'id' => $batch['id'], 'batch_no' => substr($batch['batch_no'], 14), 'create_time' => date('Y-m-d H:i:s', $batch['create_time']), 'game_name' => $role ? $role['game_name'] : '--', 'server_name' => $role ? $role['server_name'] : '--', 'role_name' => $role ? $role['role_name'] : '--', 'user_account' => $role ?$role['user_account'] : '--', 'user_phone' => $user ? $user['phone'] : '', 'apply_promote_account' => $applyPromote ? $applyPromote['account'] : '', 'promote_account' => $promote['account'], // 'history_provide_amount' => 0.00, 'apply_amount' => $batch['apply_amount'], 'provide_amount' => $batch['provide_amount'], 'verify_status' => $batch['verify_status'], 'verify_status_text' => $testingResourceService->getVerifyStatusText($batch['verify_status']), 'verify_time' => $batch['verify_time'] == 0 ? '--' : date('Y-m-d H:i:s', $batch['verify_time']), 'provide_status' => $batch['provide_status'], 'provide_status_text' => $testingResourceService->getProvideStatusText($batch['provide_status']), 'provide_time' => $batch['provide_time'] == 0 ? '--' : date('Y-m-d H:i:s', $batch['provide_time']), 'content' => $content, ]; } $this->assign('verifyStatusList', TestingResourceService::$verifyStatusList); $this->assign('provideStatusList', TestingResourceService::$provideStatusList); $this->assign('servers', $this->getServersByGameId($gameId)); $this->assign('games', $this->getGames()); $this->assign('count', $count); $this->assign('pagination', $pagination); $this->assign('records', $records); $this->display(); } public function orders() { $id = I('id', 0); $batch = M('testing_resource_batch', 'tab_')->where(['id' => $id])->find(); $role = M('user_play_info', 'tab_') ->field(['id', 'game_name', 'server_name', 'role_name', 'game_role_id', 'user_account']) ->where(['game_id' => $batch['game_id'], 'role_id' => $batch['role_id']]) ->find(); $applyPromote = M('promote', 'tab_')->field(['id', 'account'])->where(['id' => $batch['apply_promote_id']])->find(); $promote = M('promote', 'tab_')->field(['id', 'account'])->where(['id' => $role['apply_promote_id']])->find(); $query = M('testing_resource_order', 'tab_')->where(['batch_id' => $id])->order('id desc'); list($orders, $pagination, $count) = $this->paginate($query); $testingResourceService = new TestingResourceService(); foreach ($orders as $order) { $records[] = [ 'id' => $order['id'], 'create_time' => $batch['create_time'] == 0 ? '--' : date('Y-m-d H:i:s', $batch['create_time']), 'game_name' => $role['game_name'], 'user_account' => $role['user_account'], 'server_name' => $role['server_name'], 'role_name' => $role['role_name'], 'apply_promote_account' => $applyPromote ? $applyPromote['account'] : '', 'promote_account' => $promote['account'], 'ref_name' => $order['ref_name'], 'ref_amount' => $order['ref_amount'], 'num' => $order['num'], 'amount' => $order['num'] * $order['ref_amount'], 'remark' => $order['remark'], 'provide_status' => $order['provide_status'], 'provide_status_text' => $testingResourceService->getProvideStatusText($order['provide_status']), ]; } $this->assign('count', $count); $this->assign('pagination', $pagination); $this->assign('records', $records); $this->display(); } private function getRemainQuota($role, $bindRole = null) { $totalQuota = $role['testing_other_quota'] + ($this->gameBaseQuota[$role['game_id']] ?? 0); if (!is_null($bindRole)) { $totalQuota += M('spend', 'tab_') ->where(['game_id' => $role['game_id'], 'game_player_id' => $bindRole['role_id'], 'pay_status' => 1]) ->group('game_id,game_player_id') ->sum('pay_amount'); } $providedQuota = M('testing_resource_batch', 'tab_') ->where(['provide_status' => [in, [1, 2]], 'game_id' => $role['game_id'], 'role_id' => $role['role_id']]) ->sum('provide_amount'); $providingQuota = M('testing_resource_batch', 'tab_') ->where(['verify_status' => [in, [0, 1]], 'provide_status' => 0, 'game_id' => $role['game_id'], 'role_id' => $role['role_id']]) ->sum('apply_amount'); return round(floatval($totalQuota) - floatval($providedQuota) - floatval($providingQuota), 2); } public function apply() { $id = I('id', 0); $role = null; if ($id != 0) { $role = M('user_play_info', 'tab_') ->field(['id', 'role_id', 'user_id', 'game_id', 'server_id', 'user_account', 'role_name', 'testing_other_quota']) ->where(['id' => $id]) ->find(); } $servers = []; $bindingRole = null; if ($role) { $servers = M('server', 'tab_')->field('id,server_name,server_id')->where(['game_id' => $role['game_id']])->order('server_id asc')->select(); $binding = M('testing_binding', 'tab_')->where(['game_id' => $role['game_id'], 'role_id' => $role['role_id']])->find(); if ($binding) { $bindingRole = M('user_play_info', 'tab_') ->field(['id', 'role_id', 'user_id', 'game_id', 'server_id', 'user_account', 'role_name']) ->where(['game_id' => $binding['game_id'], 'role_id' => $binding['bind_role_id']]) ->find(); } } /** * @todo 目前固定游戏猫 */ $games = M('game', 'tab_')->field(['id' , 'game_name'])->where(['id' => ['in', [229, 230]]])->select(); $this->assign('games', $games); $this->assign('servers', $servers); $this->assign('bindingRole', $bindingRole); $this->assign('role', $role); $this->assign('quota', $this->getRemainQuota($role, $bindingRole)); $this->display(); } public function doApply() { $gameId = I('game_id', 0); $roleId = I('role_id', ''); $serverId = I('server_id', 0); $userAccount = I('user_account', ''); $records = I('records', []); $loginPromote = $this->getLoginPromote(); if ($loginPromote['level'] > 2) { return $this->ajaxReturn(['status' => 0, 'message' => '权限不足']); } $resources = []; /** * @todo 目前仅限游戏猫 */ if ($gameId == 229) { $resources = $this->getGameCatResources('android'); } elseif ($gameId == 230) { $resources = $this->getGameCatResources('ios'); } else { return $this->ajaxReturn(['status' => 0, 'message' => '该游戏不可申请资源']); } $binding = M('testing_binding', 'tab_')->where(['game_id' => $gameId, 'role_id' => $roleId])->find(); /* if (is_null($binding)) { return $this->ajaxReturn(['status' => 0, 'message' => '该角色未绑定玩家角色']); } */ $user = M('user', 'tab_')->field(['id', 'promote_id'])->where(['account' => $userAccount])->find(); if (is_null($user)) { return $this->ajaxReturn(['status' => 0, 'message' => '玩家账号不存在']); } $testingUser = M('testing_user', 'tab_')->where(['user_id' => $user['id']])->find(); if (is_null($testingUser)) { return $this->ajaxReturn(['status' => 0, 'message' => '测试账号不存在']); } $server = M('server', 'tab_')->field(['id', 'server_name', 'server_id'])->where(['id' => $serverId])->find(); if (is_null($server)) { return $this->ajaxReturn(['status' => 0, 'message' => '区服不存在']); } $promoteService = new PromoteService(); $role = M('user_play_info', 'tab_') ->field(['id', 'role_id', 'promote_id', 'game_id', 'testing_other_quota']) ->where(['user_id' => $user['id'], 'game_id' => $gameId, 'server_id' => $server['server_id'], 'role_id' => $roleId]) ->find(); if (is_null($role)) { return $this->ajaxReturn(['status' => 0, 'message' => '角色不存在']); } $otherRoleBatch = M('testing_resource_batch', 'tab_') ->where([ 'user_id' => $user['id'], 'game_id' => $gameId, 'server_id' => $server['server_id'], 'role_id' => ['neq', $roleId], 'verify_status' => ['in', [0, 1]], ]) ->find(); if ($otherRoleBatch) { return $this->ajaxReturn(['status' => 0, 'message' => '每个账号同区服只能申请一个角色']); } $testPromote = M('promote', 'tab_')->field(['id', 'chain'])->where(['id' => $role['promote_id']])->find(); if (is_null($testPromote) || !$promoteService->isSubOrSelf($testPromote, $loginPromote)) { return $this->ajaxReturn(['status' => 0, 'message' => '测试角色所属推广员异常']); } $bindingRole = null; if ($binding) { $bindingRole = M('user_play_info', 'tab_') ->field(['id', 'role_id', 'user_id', 'promote_id', 'game_id']) ->where(['game_id' => $gameId, 'role_id' => $binding['bind_role_id']]) ->find(); if (is_null($bindingRole)) { return $this->ajaxReturn(['status' => 0, 'message' => '绑定玩家角色不存在']); } $bindPromote = M('promote', 'tab_')->field(['id', 'chain'])->where(['id' => $bindingRole['promote_id']])->find(); if (is_null($bindPromote) || !$promoteService->isSubOrSelf($bindPromote, $loginPromote)) { return $this->ajaxReturn(['status' => 0, 'message' => '绑定角色所属推广员异常']); } /* if ($testPromote['id'] != $bindPromote['id']) { return $this->ajaxReturn(['status' => 0, 'message' => '测试账号与玩家账号所属推广员不同']); } */ } $amount = 0; foreach ($records as $key => $record) { if (isset($resources[$record['resource_id']])) { $value = $resources[$record['resource_id']]['amount']; $records[$key]['value'] = $value; $records[$key]['resource_name'] = $resources[$record['resource_id']]['name']; $amount += $record['num'] * $value; } else { return $this->ajaxReturn(['status' => 0, 'message' => '含有资源内容不存在']); } /** * @todo 游戏猫只能每个资源数量只能为1 */ if ($record['num'] != 1) { return $this->ajaxReturn(['status' => 0, 'message' => '该游戏每次申请单项资源数量只能为1']); } } $remainQuota = $this->getRemainQuota($role, $bindingRole); if ($amount > $remainQuota) { return $this->ajaxReturn(['status' => 0, 'message' => '额度不足']); } $batchNo = date('YmdHis') . substr(md5($loginPromote['id'] . strval(microtime(true)) . rand(0, 9999)), 8, 16); try { $model = new Model(); $model->startTrans(); $batch = [ 'batch_no' => $batchNo, 'user_id' => $testingUser['user_id'], 'game_id' => $gameId, 'role_id' => $roleId, 'server_id' => $serverId, 'apply_promote_id' => $loginPromote['id'], 'apply_amount' => $amount, 'provide_status' => 0, 'verify_status' => 0, 'create_time' => time(), 'update_time' => time(), ]; $batchId = M('testing_resource_batch', 'tab_')->add($batch); $i = 1; foreach ($records as $record) { $orderNo = $batchNo . '_' . $i; $order = [ 'batch_id' => $batchId, 'order_no' => $orderNo, 'ref_id' => $record['resource_id'], 'ref_name' => $record['resource_name'], 'ref_amount' => $record['value'], 'num' => $record['num'], 'amount' => $record['num'] * $record['value'], 'remark' => $record['remark'], ]; M('testing_resource_order', 'tab_')->add($order); } $model->commit(); return $this->ajaxReturn(['status' => 1, 'message' => '申请成功,等待审核']); } catch (\Exception $e) { $model->rollback(); return $this->ajaxReturn(['status' => 0, 'message' => '系统异常' . $e->getMessage()]); } } public function bindRole() { $gameId = I('game_id', 0); $testingRoleId = I('testing_role_id', ''); $bindRoleId = I('bind_role_id', ''); $loginPromote = $this->getLoginPromote(); $testingGameRoleId = $this->getGameRoleId($gameId, $testingRoleId); $bindGameRoleId = $this->getGameRoleId($gameId, $bindRoleId); $testingRole = M('user_play_info', 'tab_') ->field(['id', 'role_id', 'user_id', 'game_id', 'promote_id']) ->where(['game_role_id' => $testingGameRoleId]) ->find(); if (is_null($testingRole)) { return $this->ajaxReturn(['status' => 0, 'message' => '测试账号角色不存在']); } $testingUser = M('testing_user', 'tab_')->where(['user_id' => $testingRole['user_id']])->find(); if (is_null($testingUser)) { return $this->ajaxReturn(['status' => 0, 'message' => '测试账号不存在']); } $promoteService = new PromoteService(); $testPromote = M('promote', 'tab_')->field(['id', 'chain'])->where(['id' => $testingRole['promote_id']])->find(); if (is_null($testPromote) || !$promoteService->isSubOrSelf($testPromote, $loginPromote)) { return $this->ajaxReturn(['status' => 0, 'message' => '测试角色所属推广员异常']); } $bindRole = M('user_play_info', 'tab_') ->field(['id', 'role_id', 'user_id', 'promote_id']) ->where(['game_role_id' => $bindGameRoleId]) ->find(); if (is_null($bindRole)) { return $this->ajaxReturn(['status' => 0, 'message' => '玩家角色不存在']); } $bindPromote = M('promote', 'tab_')->field(['id', 'chain'])->where(['id' => $bindRole['promote_id']])->find(); if (is_null($bindPromote) || !$promoteService->isSubOrSelf($bindPromote, $loginPromote)) { return $this->ajaxReturn(['status' => 0, 'message' => '玩家账号所属推广员异常']); } /* if ($testPromote['id'] != $bindPromote['id']) { return $this->ajaxReturn(['status' => 0, 'message' => '玩家账号与测试账号非同一推广员']); } */ $bindIsTesting = M('testing_user', 'tab_')->where(['user_id' => $bindRole['user_id']])->find(); if ($bindIsTesting) { return $this->ajaxReturn(['status' => 0, 'message' => '该玩家账号为测试账号,无法绑定']); } $existBind = M('testing_binding', 'tab_')->field(['id'])->where(['game_id' => $gameId, 'bind_role_id' => $bindRoleId])->find(); if ($existBind) { return $this->ajaxReturn(['status' => 0, 'message' => '该玩家角色已被绑定']); } $testExistBind = M('testing_binding', 'tab_')->field(['id'])->where(['game_id' => $gameId, 'role_id' => $testingRoleId])->find(); if ($testExistBind) { return $this->ajaxReturn(['status' => 0, 'message' => '该测试账号角色已绑定有角色']); } M('testing_binding', 'tab_')->add([ 'game_id' => $testingRole['game_id'], 'user_id' => $testingRole['user_id'], 'role_id' => $testingRole['role_id'], 'bind_user_id' => $bindRole['user_id'], 'bind_role_id' => $bindRole['role_id'], 'create_time' => time(), 'update_time' => time() ]); return $this->ajaxReturn(['status' => 1, 'message' => '绑定成功']); } private function getGames() { $map = [ 'id' => ['in', [229, 230]] ]; $loginPromote = $this->getLoginPromote(); $promoteService = new PromoteService(); $visibleGameIds = $promoteService->getVisibleGameIds($loginPromote); $map['_string'] = 'id in (0)'; if (count($visibleGameIds) > 0) { $map['_string'] = 'id in (' . implode(',', $visibleGameIds) . ')'; } return M('game', 'tab_')->field('id,game_name')->where($map)->select(); } private function getServersByGameId($gameId = 0) { if ($gameId == 0) { return []; } $map = []; $map['game_id'] = $gameId; return M('server', 'tab_') ->field('id,server_name,server_id') ->where($map) ->order('server_id asc') ->select(); } public function getServers() { $gameId = I('game_id', 0); $servers = $this->getServersByGameId($gameId); return $this->ajaxReturn(['status' => 1, 'message' => '获取成功', 'data' => ['servers' => $servers]]); } public function getResourceTypes() { $gameId = I('game_id', 0); $resourceTypes = []; /** * @todo 目前固定游戏猫 */ if ($gameId == 229) { $resourceTypes[] = ['id' => 1, 'name' => '通用']; } elseif ($gameId == 230) { $resourceTypes[] = ['id' => 2, 'name' => '通用']; } return $this->ajaxReturn(['status' => 1, 'message' => '获取成功', 'data' => ['resourceTypes' => $resourceTypes]]); } public function getResources() { $typeId = I('type_id', 0); $resources = []; /** * @todo 目前固定游戏猫资源类型ID */ if ($typeId == 2) { $resources = $this->getGameCatResources('ios'); } elseif ($typeId == 1) { $resources = $this->getGameCatResources('andriod'); } return $this->ajaxReturn(['status' => 1, 'message' => '获取成功', 'data' => ['resources' => $resources]]); } public function getUserRoles() { $gameId = I('game_id', 0); $serverId = I('server_id', 0); $userAccount = I('user_account', ''); $server = M('server', 'tab_')->field(['id', 'server_name', 'server_id'])->where(['id' => $serverId])->find(); if (is_null($server)) { return $this->ajaxReturn(['status' => 0, 'message' => '区服不存在']); } $user = M('user', 'tab_')->field(['id', 'promote_id'])->where(['account' => $userAccount])->find(); if (is_null($user)) { return $this->ajaxReturn(['status' => 0, 'message' => '账号不存在']); } $testingUser = M('testing_user', 'tab_')->where(['user_account' => $userAccount])->find(); $isTestingAccount = is_null($testingUser) ? false : true; $roles = M('user_play_info', 'tab_') ->field(['id', 'role_id', 'role_name']) ->where(['user_account' => $userAccount, 'game_id' => $gameId, 'server_id' => $server['server_id']]) ->select(); return $this->ajaxReturn(['status' => 1, 'message' => '获取成功', 'data' => ['roles' => $roles, 'is_testing_account' => $isTestingAccount]]); } private function getGameCatResources($deviceType) { $resources = []; $gameCatClient = new GameCatClient(); $result = $gameCatClient->api('get-pay-type', ['device_type' => $deviceType]); if ($result['state'] == 1) { $items = $result['data']; foreach ($items as $item) { $resources[$item['supportItem']] = [ 'ref_id' => $item['supportItem'], 'name' => $item['content'], 'amount' => $item['amount'], ]; } } return $resources; } }