public function sendOrder() { $this->_modelAutoOrderQueue = $this->_getGlobalData('Model_AutoOrderQueue', 'object'); $this->_workOrder = $this->_modelAutoOrderQueue->findAll(); $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); $sendOrder = array(); $updateUser = array(); foreach ($this->_workOrder as $workOrder) { $roomClass = $this->_utilRooms->getRoom($workOrder['room_id']); $userClasses = $roomClass->findOnlineUser(); //查找房间内所有在线的用户 if (!$userClasses) { continue; } //如果没有用户对象,就跳过 $userClass = $this->_findMinUser($userClasses, $workOrder); //找到工单数最少的那个用户 if ($userClass === false) { continue; } //如果没有找到对象就跳过 array_push($sendOrder, $workOrder['Id']); //压入数组.表示此ID的工单已经发送出去了. $this->updateWorkOrderOwner($userClass, $workOrder); } if (count($sendOrder)) { $this->_clearSendOrder($sendOrder); } //如果有工单发出去,就删除这个工单 }
/** * 回复用户信息 */ public function actionReply() { $this->_utilRbac = $this->_getGlobalData('Util_Rbac', 'object'); $userClass = $this->_utilRbac->getUserClass(); $timeout = intval(strtotime($_POST['create_time'])) + intval($_POST['timeout']); if (CURRENT_TIME > $timeout && $_POST['cur_status'] == 1) { //如果当前时间大于超时时间,并且当前工单为未处理状态,就说明回复时间已经过了,那么就超时 $isTimeout = '1'; } else { $isTimeout = '0'; } $replyContent = $_POST['reply']; if ($_POST['lock']) { $replyContent = '<em>[该消息未发送到游戏服务器]</em> ' . $replyContent; } //如果为不发送消息将自动在前面加上 $addQaArr = array('is_timeout' => $isTimeout, 'work_order_id' => $_POST['Id'], 'content' => $replyContent, 'qa' => 1, 'reply_name' => $userClass['_userName'], 'create_time' => CURRENT_TIME, 'game_type_id' => $_POST['game_type_id'], 'operator_id' => $_POST['operator_id']); if ($isTimeout) { $addQaArr['last_reply_time'] = $timeout; } //如果超时的话,将记录最后超时的时间 if ($_POST['source'] == 2 && !$_POST['lock']) { //如果工单来源为2并且lock为不锁定,那么就要发送webservice $gameServerList = $this->_getGlobalData('gameser_list'); $gameServerUrl = $gameServerList[$_POST['game_server_id']]['send_msg_url']; //获取url地址 if (!$gameServerUrl) { $this->_utilMsg->showMsg('发送消息给游戏服务端失败', -2); } $isOk = $this->_sendMsg(array('work_order_id' => $_POST['Id'], 'service_id' => $userClass['_serviceId'] ? $userClass['_serviceId'] : '001', 'content' => $replyContent, 'server_url' => $gameServerUrl, 'status' => $_POST['status'])); if ($isOk !== true) { $this->_utilMsg->showMsg($isOk, -2); } } $this->_modelWorkOrderQa->add($addQaArr); #------改变房间工单,用户回复数------# $userClass->setUpdateInfo(1); $userClass->addToReplyNum(1); if ($_POST['owner_user_id'] == $userClass['_id'] && $_POST['cur_status'] == 1) { $userClass->setIncompleteOrderNum(-1); } //用户完成一个工单 if ($_POST['cur_status'] == 1) { //如果为未回复将房间未完成工单数减1 $roomClass = $this->_utilRooms->getRoom($_POST['room_id']); if (is_object($roomClass)) { $roomClass->completeOrder(1); //完成一个工单数 $roomClass->setUpdateInfo(1); } } #------改变房间工单,用户回复数------# $workOrderUpdateArr = array('status' => $_POST['status'], 'answer_num' => 'answer_num+1', 'owner_user_id' => $userClass['_id']); //变为待处理,提问数+1 $this->_modelWorkOrder->update($workOrderUpdateArr, "Id={$_POST['Id']}"); $this->_utilMsg->showMsg(false); }
/** * 房间计数 * @param $expire 默认600秒 */ public function roomCount($expire = 600) { $roomCount = $this->get(COUNT_ROOM); if (!$roomCount) { $this->_modelWorkOrder = $this->_getGlobalData('Model_WorkOrder', 'object'); $roomCount = $this->_modelWorkOrder->select("SELECT room_id,COUNT(Id) AS room_count FROM {$this->_modelWorkOrder->tName()} WHERE `status`=1 GROUP BY room_id"); $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); foreach ($roomCount as $value) { $roomClass = $this->_utilRooms->getRoom($value['room_id']); if (!is_object($roomClass)) { continue; } //防止没有房间的 $roomClass->setupIncompleteOrder($value['room_count']); $roomClass->setUpdateInfo(1); $roomClass = null; unset($roomClass); } $this->set(COUNT_ROOM, $roomCount, $expire); } }
/** * 房间初始化 */ private function _initialize() { $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); $roomClass = $this->_utilRooms->getRoom($_GET['Id']); $roomClass->setUpdateInfo(1); $roomClass['_entrance'] = false; $roomClass['_exit'] = false; $roomClass['_userClassList'] = array(); $roomClass['_roomStartEndTime'] = array(); $roomClass['_orderNum'] = array(); $this->_utilMsg->showMsg(false); }
/** * 后台右边主页面显示 */ public function actionRight() { $this->_utilMsg->createNavBar(); $gameTypeList = $this->_getGlobalData('game_type'); $gameTypeList = Model::getTtwoArrConvertOneArr($gameTypeList, 'Id', 'name'); $operatorList = $this->_getGlobalData('operator_list'); $operatorList = Model::getTtwoArrConvertOneArr($operatorList, 'Id', 'operator_name'); $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); $userClass = $this->_utilRbac->getUserClass(); $orgList = $this->_getGlobalData('org'); $orgList = Model::getTtwoArrConvertOneArr($orgList, 'Id', 'name'); $departmentList = $this->_getGlobalData('department'); $departmentList = Model::getTtwoArrConvertOneArr($departmentList, 'Id', 'name'); $userClass['word_department'] = $departmentList[$userClass['_departmentId']]; $this->_modelRoles = $this->_getGlobalData('Model_Roles', 'object'); if (count($userClass['_roles'])) { $rolesArr = array(); foreach ($userClass['_roles'] as $roles) { $rolesArr[] = $this->_modelRoles->findByRoleToName($roles); } $userClass['word_roles'] = implode(',', $rolesArr); } $userClass['word_vip'] = implode(',', $userClass['_orderVipLevel']); $userClass['word_org'] = $orgList[$userClass['_orgId']]; $userOeratorIds = array(); $userClass['bulletin_list'] = $userClass->getMail(array(1, 15), array('type' => 1)); //公告 $userClass['bulletin_list'] = $userClass['bulletin_list']['data']; $userClass['work_list'] = $userClass->getMail(array(1, 15), array('type' => 2)); //工作交接 $userClass['work_list'] = $userClass['work_list']['data']; foreach ($userClass['_operatorIds'] as $list) { $str = "{$operatorList[$list['operator_id']]}[{$gameTypeList[$list['game_type_id']]}]"; array_push($userOeratorIds, $str); } if ($userClass['_roomId']) { $roomClass = $this->_utilRooms->getRoom($userClass['_roomId']); $this->_view->assign('roomClass', $roomClass); } $this->_view->assign('userOeratorIds', $userOeratorIds); $this->_view->assign('userClass', $userClass); $this->_view->display(); }
/** * 对象管理页面 */ private function _orderIndex() { $this->_utilWorkOrder = $this->_getGlobalData('Util_WorkOrder', 'object'); $this->_modelAutoOrderQueue = $this->_getGlobalData('Model_AutoOrderQueue', 'object'); $this->_modelRooms = $this->_getGlobalData('Model_Rooms', 'object'); $this->_utilOnline = $this->_getGlobalData('Util_Online', 'object'); $onlineUsers = $this->_utilOnline->getOnlineUser(); $users = $this->_getGlobalData('user_index'); foreach ($onlineUsers as &$user) { $user = $users[$user]; } $objectOrderManage = $this->_utilWorkOrder->getOrderManage(); $dataList = $this->_modelAutoOrderQueue->findAll(); if ($dataList) { $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); $roomList = $this->_modelRooms->findAll(); $roomList = Model::getTtwoArrConvertOneArr($roomList, 'Id', 'name'); $gameTypes = $this->_getGlobalData('game_type'); $operators = $this->_getGlobalData('operator_list'); foreach ($dataList as &$list) { $roomClass = $this->_utilRooms->getRoom($list['room_id']); $roomUsers = $roomClass->findAllUser(); if (count($roomUsers)) { $list['add_users'] = $roomUsers; } $list['game_type_id'] = $gameTypes[$list['game_type_id']]['name']; $list['operator_id'] = $operators[$list['operator_id']]['operator_name']; $list['room_id'] = $roomList[$list['room_id']]; $list['create_time'] = date('Y-m-d H:i:s', $list['create_time']); $list['order_detail'] = Tools::url('WorkOrder', 'Detail', array('Id' => $list['work_order_id'])); } $this->_view->assign('dataList', $dataList); } $this->_view->assign('onlineUsers', $onlineUsers); $this->_view->assign('orderNum', $objectOrderManage['_orderNum']); $this->_view->assign('dataList', $dataList); $this->_view->set_tpl(array('body' => 'Master/OrderIndex.html')); $this->_view->display(); }
private function _index() { #------初始化------# $this->_loadCore('Help_Page'); $this->_modelWorkOrder = $this->_getGlobalData('Model_WorkOrder', 'object'); $this->_modelSysconfig = $this->_getGlobalData('Model_Sysconfig', 'object'); $this->_modelQuestionType = $this->_getGlobalData('Model_QuestionType', 'object'); $this->_utilRbac = $this->_getGlobalData('Util_Rbac', 'object'); $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); $this->_utilOnline = $this->_getGlobalData('Util_Online', 'object'); $workOrderStatusArr = $this->_modelSysconfig->getValueToCache('workorder_status'); $verifyStatusArr = $this->_getGlobalData('verify_status'); //bug 状态 $gameTypeArr = Model::getTtwoArrConvertOneArr($this->_modelSysconfig->getValueToCache('game_type'), 'Id', 'name'); $operatorList = $this->_getGlobalData('operator_list'); $operatorList = Model::getTtwoArrConvertOneArr($operatorList, 'Id', 'operator_name'); $evArr = $this->_modelWorkOrder->getEvArr(); //获取评价数组 $badEvArr = $this->_getGlobalData('player_evaluation'); $badEvArr = $badEvArr[3]['Description']; //差评数组 #------初始化------# $userClass = $this->_utilRbac->getUserClass(); $roomId = $userClass['_roomId']; if ($roomId) { $roomClass = $this->_utilRooms->getRoom($roomId); $this->_view->assign('roomClass', $roomClass); } $userGameTypes = $userClass->getUserGameTypeIds(); //获取用户能控制的游戏ids $userOperatorIds = $userClass->getUserOperatorIds(); //获取用户能控制的运营商ids if (!count($userGameTypes) && !count($userOperatorIds)) { $this->_utilMsg->showMsg(Tools::getLang('SET_OPERATOR_ERROR', __CLASS__), -1, Tools::url('Group', 'Room')); } //如果用户没有权限将退出 $questionTypes = $this->_getGlobalData('question_types'); $questionSelect = array(); foreach ($questionTypes as $question) { if (in_array($question['game_type_id'], $userGameTypes)) { $questionSelect[$question['Id']] = '<b>[' . $gameTypeArr[$question['game_type_id']] . ']</b>' . $question['title']; } } $questionSelect[''] = Tools::getLang('ALL', 'Common'); $this->_view->assign('questionSelect', $questionSelect); $questionTypes = Model::getTtwoArrConvertOneArr($questionTypes, 'Id', 'title'); $onlineUsers = $this->_utilOnline->getOnlineUser('user_id'); //在线用户,一维数组,value值为user_id #------分页生成sql------# $this->_loadCore('Help_SqlSearch'); $helpSqlSearch = new Help_SqlSearch(); $helpSqlSearch->set_tableName($this->_modelWorkOrder->tName()); if (!$_GET['view_type']) { $_GET['view_type'] = 1; } $this->_view->assign('selectedViewType', $_GET['view_type']); if ($_GET['view_type'] == 1) { $helpSqlSearch->set_conditions("owner_user_id={$userClass['_id']}"); } else { if (count($userGameTypes) == 1) { $gameTypeId = reset($userGameTypes); $helpSqlSearch->set_conditions("game_type = {$gameTypeId}"); //只能处理的所有工单 } else { $helpSqlSearch->set_conditions("game_type in (" . implode(',', $userGameTypes) . ")"); //只能处理的所有工单 } if (count($userOperatorIds) == 1) { $operatorId = reset($userOperatorIds); $helpSqlSearch->set_conditions("operator_id = {$operatorId}"); } else { $helpSqlSearch->set_conditions("operator_id in (" . implode(',', $userOperatorIds) . ")"); } } if ($_GET['Id']) { $helpSqlSearch->set_conditions('Id=' . intval($_GET['Id'])); $this->_view->assign('selectedId', $_GET['Id']); } if ($_GET['question_type']) { $helpSqlSearch->set_conditions("question_type={$_GET['question_type']}"); $this->_view->assign('selectedQuestion', $_GET['question_type']); } if ($_GET['vip_level'] != '') { //如果设置了vip等级,将显示等级 $helpSqlSearch->set_conditions("vip_level={$_GET['vip_level']}"); $this->_view->assign('selectedVipLevel', $_GET['vip_level']); } if ($_GET['evaluation_status'] != '') { $helpSqlSearch->set_conditions("evaluation_status={$_GET['evaluation_status']}"); $this->_view->assign('selectedEv', $_GET['evaluation_status']); if ($_GET['evaluation_status'] == 3) { //如果为差评 $this->_view->assign('badev_display', true); } } if ($_GET['evaluation_desc'] != '') { $helpSqlSearch->set_conditions("evaluation_desc={$_GET['evaluation_desc']}"); $this->_view->assign('selectedBadEv', $_GET['evaluation_desc']); } if ($_GET['is_verify'] != '') { $helpSqlSearch->set_conditions("is_verify={$_GET['is_verify']}"); $this->_view->assign('selectedIsVerify', $_GET['is_verify']); } if ($_GET['order_status']) { $helpSqlSearch->set_conditions("status={$_GET['order_status']}"); $this->_view->assign('selectedOrderStatus', $_GET['order_status']); $helpSqlSearch->set_orderBy('create_time desc'); } else { $helpSqlSearch->set_orderBy('status asc,create_time desc'); } if ($_GET['user_nickname']) { $helpSqlSearch->set_conditions("user_nickname='{$_GET['user_nickname']}'"); $this->_view->assign('selectedUserNickname', $_GET['user_nickname']); $_GET['user_nickname'] = urlencode($_GET['user_nickname']); } if ($_GET['user_account']) { $helpSqlSearch->set_conditions("user_account='{$_GET['user_account']}'"); $this->_view->assign('selectedUserAccount', $_GET['user_account']); $_GET['user_account'] = urlencode($_GET['user_account']); } if ($_GET['title']) { $helpSqlSearch->set_conditions("title like '%{$_GET['title']}%'"); $this->_view->assign('selectedTitle', $_GET['title']); $_GET['title'] = urlencode($_GET['title']); } $helpSqlSearch->setPageLimit($_GET['page'], PAGE_SIZE); $sql = $helpSqlSearch->createSql(); $conditions = $helpSqlSearch->get_conditions(); $helpPage = new Help_Page(array('total' => $this->_modelWorkOrder->findCount($conditions), 'perpage' => PAGE_SIZE)); #------分页生成sql------# $dataList = $this->_modelWorkOrder->select($sql); #------载入缓存------# $workOrderSourceArr = $this->_modelSysconfig->getValueToCache('workorder_source'); $vipLevel = Tools::getLang('VIP_LEVEL', 'Common'); $users = $this->_getGlobalData('user'); $serverList = $this->_getGlobalData('gameser_list'); #------载入缓存------# if ($dataList) { Tools::import('Util_FontColor'); $timeInterval = array(); //定时器计时 foreach ($dataList as &$list) { $list['url_dialog'] = Tools::url(CONTROL, 'OrderDialog', array('Id' => $list['Id'])); $list['word_game_type'] = Util_FontColor::getGameTypeColor($list['game_type'], $gameTypeArr[$list['game_type']]); $list['word_source'] = Util_FontColor::getWorkOrderSource($list['source'], $workOrderSourceArr[$list['source']]); $list['word_status'] = Util_FontColor::getWorkOrderStatus($list['status'], $workOrderStatusArr[$list['status']]); $list['word_status'] .= $list['is_verify'] ? Tools::getLang('VERIFY_STATUS', 'Common') : ''; $list['word_operator_id'] = $operatorList[$list['operator_id']]; $list['word_question_type'] = $questionTypes[$list['question_type']] ? $questionTypes[$list['question_type']] : ' '; $list['url_detail'] = Tools::url('WorkOrder', 'Detail', array('Id' => $list['Id'])); $list['word_owner_user_id'] = $users[$list['owner_user_id']]['nick_name']; $list['word_game_server_id'] = $serverList[$list['game_server_id']]['server_name']; $list['word_ev'] = Util_FontColor::getPlayerEvaluation($list['evaluation_status'], $evArr[$list['evaluation_status']]); //提问类型 if ($list['evaluation_status'] == 3) { $list['word_ev_desc'] = $badEvArr[$list['evaluation_desc']]; } if ($list['status'] == 1) { $isTimeout = Tools::isTimeOut($list['create_time'], $list['timeout']); if ($isTimeout === true) { //已超时 $list['time_out_true'] = true; } else { //未超时 $list['lost_time'] = Tools::getTimeFormat($isTimeout); $timeInterval[$list['Id']]['div'] = $list['Id']; $timeInterval[$list['Id']]['time'] = $isTimeout; } } if ($serverList[$list['game_server_id']]['time_zone'] != 0) { $list['create_time'] = date('Y-m-d H:i:s', $list['create_time'] + $serverList[$list['game_server_id']]['time_zone'] * 3600); } else { $list['create_time'] = date('Y-m-d H:i:s', $list['create_time']); } if ($list['word_owner_user_id']) { $list['word_owner_user_id'] .= in_array($list['owner_user_id'], $onlineUsers) ? Util_FontColor::getOnline(1) : Util_FontColor::getOnline(0); } $verifyInfo = $this->_modelWorkOrder->select('select status from ' . DB_PREFIX . 'verify ' . 'where work_order_id =' . $list['Id'], 1); $verifyStatus = $verifyInfo['status']; $list['word_verify_status'] = $verifyStatusArr[$verifyStatus]; } $this->_view->assign('dataList', $dataList); } $evArr[''] = Tools::getLang('ALL', 'Common'); $badEvArr[''] = Tools::getLang('ALL', 'Common'); $this->_view->assign('verify', $this->_modelWorkOrder->getVerify()); $this->_view->assign('badEvArr', $badEvArr); $this->_view->assign('evArr', $evArr); $this->_view->assign('timeInterval', json_encode($timeInterval)); $userOperator = $userClass['_operatorIds']; foreach ($userOperator as &$value) { $value['word_operator_id'] = $operatorList[$value['operator_id']]; $value['word_game_type_id'] = $gameTypeArr[$value['game_type_id']]; } $this->_view->assign('lastYmd', date('Ymd', strtotime('-1 day'))); $this->_view->assign('viewType', Tools::getLang('VIEW_TYPE', __CLASS__)); $this->_view->assign('userClass', $userClass); $this->_view->assign('userOperator', $userOperator); $this->_view->assign('vipLevel', $vipLevel); $workOrderStatusArr[''] = Tools::getLang('ALL', 'Common'); $this->_view->assign('workOrderStatusArr', $workOrderStatusArr); $this->_view->assign('js', $this->_view->get_curJs()); $this->_view->assign('pageBox', $helpPage->show()); $this->_utilMsg->createNavBar(); $this->_view->display(); }
public function sendOrder() { $num = count($this->_workOrder); for ($i = 0; $i < $num; $i++) { $curWorkOrder = array_shift($this->_workOrder); $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); $roomClass = $this->_utilRooms->getRoom($curWorkOrder['room_id']); //获取此工单所属的房间 $userClasses = $roomClass->findOnlineUser(); //获取房间内在线用户 if (!$userClasses) { break; } //如果没有用户将退出 $minUserClass = null; //最少工单的那个用户对象 $minOrderNum = null; //最少工单数 foreach ($userClasses as $userClass) { if ($userClass->checkCurOperLv(array($curWorkOrder['game_type_id'], $curWorkOrder['operator_id'], $curWorkOrder['vip_level']))) { //查看用户是否有足够的权力处理此工单 if ($minOrderNum === null) { //如果是第一次 $minOrderNum = $userClass->getOrderNum(); //获取此用户的工单数 $minUserClass = $userClass; //记住这个最少数的用户对象. } else { if ($userClass->getOrderNum() < $minOrderNum) { //如果当前对象的工单数小于之前最小的工单数,那么就将最小对象给他 $minOrderNum = $userClass->getOrderNum(); $minUserClass = $userClass; } } } } if ($minUserClass === null) { //如果未找合适的对象将 array_push($this->_workOrder, $curWorkOrder); //将此工单压入到最后 } else { //如果找到此对象的话. $this->_updateWorkOrderOwner($minUserClass, $curWorkOrder); $this->_isUpdate = 1; } } /* /** * 发送工单,逻辑如下: * 首先找到正在处理工单的房间.然后循环未分配的工单. * 先找到符合这个工单的用户,然后判断此用户的优先级别是否为1,如果不为1的话,那就么就找到为1级优先的最少的那个用户 * 查看这个优先级为1级的和工单数最少的这个用户的工单数量是大于5,如果工单数最少的那个人比1级优先级的那个用户还要少5个. * 就要把工单分配给最少的那个用户,不然就还是分配给1级优先级的那个用户 #------查找目前处于工作状态的房间------# $this->_utilRomeoms=$this->_getGlobalData('Util_Rooms','object'); $roomClasses=$this->_utilRooms->findAllRooms(); $curWorkClass=null; foreach ($roomClasses as $roomClass){ list($startTime,$endTime)=$roomClass->getRoomTime(); if (CURRENT_TIME>$startTi && CURRENT_TIME<$endTime){//如果此房间处于正在工作时间内 $curWorkClass=$roomClass; break; } } #------查找目前处于工作状态的房间------# $i=1; #------循环分配工单------# $this->_isUpdate=1; $retryNum=0; //重试次数 while (count($this->_workOrder)){ $curWorkOrder=array_shift($this->_workOrder); //推出一个工单 $orderGameType=$curWorkOrder['game_type']; $orderOperatorId=$curWorkOrder['operator_id']; $userClass=$curWorkClass->findMinOrderNumToUser(array($orderGameType,$orderOperatorId)); //返回当前可分配工单最少数的那个用户 if (!is_object($userClass)){//如果找不到最少工单那个用户就continue; array_push($this->_workOrder,$curWorkOrder);//将这个找不到的工单排到最后 if ($retryNum>count($this->_workOrder)){//如果重试次数大于总的未分配工单数的话就表示退出,表示这些工单没有一个能发出去的. return false; } $retryNum++; continue; } $retryNum=0;//如果找到了就将重试次数变为0 if (!$userClass->checkCurOperLv(array($orderGameType,$orderOperatorId,$i))){//如果这个工单数最少的这个用户不是属于当前级别的 $minNum=$userClass->getOrderNum(); //获取这个用户当天的工单量 while (true){ $firstLvUserClass=$curWorkClass->findOperMinOrderUser(array($orderGameType,$orderOperatorId,$i)); if (is_object($firstLvUserClass)){ break; } if (!is_object($firstLvUserClass) || $i>3){//如果找到了,或是等级大于3了就退出了 $i++; continue; } } if (is_object($firstLvUserClass)){ //如果找到了这个用户的话 $firstLvNum=$firstLvUserClass->getOrderNum(); if ($firstLvNum-$minNum>5){ //如果这个运营商等级为1级的用户的工单数量减去最少用户的工单数还大于5的话就表示相差5个工单了,那么就要把这个工单分配给工单最少的那个用户 $this->_updateWorkOrderOwner($userClass,$curWorkOrder); continue; }else { $this->_updateWorkOrderOwner($firstLvUserClass,$curWorkOrder); continue; } } }else { $this->_updateWorkOrderOwner($userClass,$curWorkOrder); continue; } } #------循环分配工单------# */ }
/** * 游戏内提问 */ private function _saveSource2() { $orderArr = array(); $orderArr['game_type'] = $_POST['game_id']; $orderArr['user_account'] = $_POST['user_account']; $orderArr['user_nickname'] = $_POST['user_nickname']; $orderArr['money'] = $_POST['money_total']; $orderArr['source'] = $_POST['source']; //工单来源 $orderArr['title'] = $_POST['title']; $orderArr['question_type'] = $_POST['question_type']; $orderArr['question_num'] = 1; $orderArr['create_time'] = CURRENT_TIME; if ($_FILES['image']) { $updateInfo = $this->_upload(); } //如果有上传图片就上传文件 $serverMarking = $_POST['server_marking']; $gameServerList = $this->_modelGameSerList->findByMarking($_POST['game_id'], $serverMarking); if (!$gameServerList) { //未找到服务器 $this->_returnAjaxJson(array('status' => 0, 'info' => 'game server non-existent', 'data' => null)); } $this->_modelGameOperator = $this->_getGlobalData('Model_GameOperator', 'object'); $gameOperatorIndex = $this->_modelGameOperator->findByGidOId($_POST['game_id'], $gameServerList['operator_id']); //找到此运营商的详细 资料. if (!$gameOperatorIndex) { //未找到游戏与运营商的索引 $this->_returnAjaxJson(array('status' => 0, 'info' => 'game server non-existent', 'data' => null)); } $orderArr['vip_level'] = $this->_modelGameOperator->getVipLevel($gameOperatorIndex['vip_setup']['vip_pay'], $_POST['money_total']); $orderArr['timeout'] = $this->_modelGameOperator->getTimeOut($gameOperatorIndex['vip_setup']['vip_timeout'], $orderArr['vip_level']); $orderArr['timeout'] *= 60; //换成秒 $orderArr['operator_id'] = $gameServerList['operator_id']; $orderArr['game_server_id'] = $gameServerList['Id']; if ($gameServerList['room_id']) { $orderArr['room_id'] = $gameServerList['room_id']; } if (!$this->_modelWorkOrder->add($orderArr)) { //创建表单失败 $this->_returnAjaxJson(array('status' => 0, 'info' => 'Failure to create order', 'data' => null)); } #------为房间工单数加1------# if ($orderArr['room_id']) { $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); $roomCLass = $this->_utilRooms->getRoom($orderArr['room_id']); $roomCLass->addOrderNum(1); $roomCLass->setUpdateInfo(1); $roomCLass = null; } #------为房间工单数加1------# $workOrderId = $this->_modelWorkOrder->returnLastInsertId(); //获取工单id #------增加新的工单到队列------# if ($orderArr['room_id']) { $addOrder = array('Id' => $workOrderId, 'vip_level' => $orderArr['vip_level'], 'room_id' => $orderArr['room_id'], 'game_type_id' => $orderArr['game_type'], 'operator_id' => $orderArr['operator_id']); $this->_utilWorkOrder = $this->_getGlobalData('Util_WorkOrder', 'object'); $orderManageClass = $this->_utilWorkOrder->getOrderManage(); $orderManageClass->addOrder($addOrder); $orderManageClass->setUpdateInfo(1); $orderManageClass = null; } #------增加新的工单到队列------# $orderDetail = array(); $orderDetail['form_detail'] = array(); $orderDetail['user_data'] = array('user_id' => $_POST['user_id'], 'user_account' => $_POST['user_account'], 'user_nickname' => $_POST['user_nickname'], 'money_total' => $_POST['money_total'], 'money_month' => $_POST['money_month'], 'register_date' => $_POST['register_date'], 'ip' => $_POST['ip']); $orderDetail = serialize($orderDetail); $this->_modelWorkOrderDetail = $this->_getGlobalData('Model_WorkOrderDetail', 'object'); $this->_modelWorkOrderDetail->add(array('work_order_id' => $workOrderId, 'content' => $orderDetail)); #-----插入对话表------# $this->_modelWorkOrderQa = $this->_getGlobalData('Model_WorkOrderQa', 'object'); $content = $_POST['content']; if ($updateInfo['web_path']) { $content .= "<br>玩家截图:<br> <img src='{$updateInfo['web_path']}' />"; } $orderDialog = array('game_type_id' => $_POST['game_id'], 'operator_id' => $orderArr['operator_id'], 'work_order_id' => $workOrderId, 'qa' => '0', 'content' => $content, 'create_time' => CURRENT_TIME); $this->_modelWorkOrderQa->add($orderDialog); // if (!Tools::isUtf8($content))echo 'is not utf8'; #-----插入对话表------# $this->_returnAjaxJson(array('status' => 1, 'info' => null, 'data' => array('order_id' => $workOrderId, 'image_path' => $updateInfo['web_path']))); }
/** * 后台右边主页面显示 */ public function actionRight() { $this->_utilMsg->createNavBar(); $gameTypeList = $this->_getGlobalData('game_type'); $gameTypeList = Model::getTtwoArrConvertOneArr($gameTypeList, 'Id', 'name'); $operatorList = $this->_getGlobalData('operator_list'); $operatorList = Model::getTtwoArrConvertOneArr($operatorList, 'Id', 'operator_name'); $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); $userClass = $this->_utilRbac->getUserClass(); $orgList = $this->_getGlobalData('org'); $orgList = Model::getTtwoArrConvertOneArr($orgList, 'Id', 'name'); $departmentList = $this->_getGlobalData('department'); $departmentList = Model::getTtwoArrConvertOneArr($departmentList, 'Id', 'name'); $userClass['word_department'] = $departmentList[$userClass['_departmentId']]; $this->_modelRoles = $this->_getGlobalData('Model_Roles', 'object'); if ($userClass['_roles']) { $rolesArr = array(); foreach ($userClass['_roles'] as $roles) { $rolesArr[] = $this->_modelRoles->findByRoleToName($roles); } $userClass['word_roles'] = implode(',', $rolesArr); } $userClass['word_vip'] = implode(',', $userClass['_orderVipLevel']); $userClass['word_org'] = $orgList[$userClass['_orgId']]; $userOeratorIds = array(); $userClass['bulletin_list'] = $userClass->getMail(array(1, 15), array('type' => 1)); //公告 $userClass['bulletin_list'] = $userClass['bulletin_list']['data']; $userClass['work_list'] = $userClass->getMail(array(1, 15), array('type' => 2)); //工作交接 $userClass['work_list'] = $userClass['work_list']['data']; foreach ($userClass['_operatorIds'] as $list) { $str = "{$operatorList[$list['operator_id']]}[{$gameTypeList[$list['game_type_id']]}]"; array_push($userOeratorIds, $str); } if ($userClass['_roomId']) { $roomClass = $this->_utilRooms->getRoom($userClass['_roomId']); $this->_view->assign('roomClass', $roomClass); $displaycontent = "已经登录房间[" . $roomClass['_roomName'] . "] [<a href=" . Tools::url('Group', 'Room', array('doaction' => 'outRoom')) . "><font style='color:red;'>退出房间</font></a>] "; } else { $displaycontent = '<font color="#999999">您还未登录房间</font>[<a href="' . Tools::url('Group', 'Room') . '">房间列表</a>]'; } $displaycontent .= ' [<a href="' . Tools::url('MyTask', 'Index') . '">我的工单列表</a>]'; $tmpLang = $this->_getGlobalData('lang'); $lang = array(); foreach ($tmpLang as $key => $value) { $lang[$key]['lang'] = $value; $lang[$key]['url_lang'] = Tools::url(CONTROL, 'ChangeLang', array('lang' => $key)); } $this->_view->assign('curLangId', LANG_ID); $this->_view->assign('lang', $lang); $this->_view->assign('userOeratorIds', $userOeratorIds); $this->_view->assign('userClass', $userClass); //将错误日志显示给管理员 $Permission_IndexErrorLog = $this->_utilRbac->checkAct('Index_ErrorLog'); //审核权限 // if(in_array($userClass['_userName'],explode(',',MasterAccount) )){ if ($Permission_IndexErrorLog === 1) { $this->_view->assign('showErrorLogFiles', true); $this->_view->assign('errorLogFiles', $this->_errorLogFiles()); } else { $this->_view->assign('showErrorLogFiles', false); } $this->_view->assign('displaycontent', $displaycontent); $this->_view->display(); }
public function actionIndex() { #------初始化------# $this->_loadCore('Help_Page'); $this->_modelWorkOrder = $this->_getGlobalData('Model_WorkOrder', 'object'); $this->_modelSysconfig = $this->_getGlobalData('Model_Sysconfig', 'object'); $this->_modelQuestionType = $this->_getGlobalData('Model_QuestionType', 'object'); $this->_utilRbac = $this->_getGlobalData('Util_Rbac', 'object'); $this->_utilRooms = $this->_getGlobalData('Util_Rooms', 'object'); $this->_utilOnline = $this->_getGlobalData('Util_Online', 'object'); $workOrderStatusArr = $this->_modelSysconfig->getValueToCache('workorder_status'); $gameTypeArr = Model::getTtwoArrConvertOneArr($this->_modelSysconfig->getValueToCache('game_type'), 'Id', 'name'); $operatorList = $this->_getGlobalData('operator_list'); $operatorList = Model::getTtwoArrConvertOneArr($operatorList, 'Id', 'operator_name'); #------初始化------# $userClass = $this->_utilRbac->getUserClass(); $roomId = $userClass['_roomId']; if ($roomId) { // $this->_utilMsg->showMsg('请先加入房间',-1,Tools::url('Group','Index')); $roomClass = $this->_utilRooms->getRoom($roomId); $this->_view->assign('roomClass', $roomClass); } $userGameTypes = $userClass->getUserGameTypeIds(); //获取用户能控制的游戏ids $userOperatorIds = $userClass->getUserOperatorIds(); //获取用户能控制的运营商ids if (!count($userGameTypes) && !count($userOperatorIds)) { $this->_utilMsg->showMsg('请先设置用户运营商权限', -1, Tools::url('Group', 'Room')); } //如果用户没有权限将退出 $onlineUsers = $this->_utilOnline->getOnlineUser('user_id'); //在线用户,一维数组,value值为user_id #------分页生成sql------# $this->_loadCore('Help_SqlSearch'); $helpSqlSearch = new Help_SqlSearch(); $helpSqlSearch->set_tableName($this->_modelWorkOrder->tName()); // $helpSqlSearch->set_conditions("room_id={$roomId}"); //只显示房间内的 if ($_GET['Id']) { $helpSqlSearch->set_conditions("Id={$_GET['Id']}"); $this->_view->assign('selectedId', $_GET['Id']); } if ($_GET['vip_level'] != '') { //如果设置了vip等级,将显示等级 $helpSqlSearch->set_conditions("vip_level={$_GET['vip_level']}"); $this->_view->assign('selectedVipLevel', $_GET['vip_level']); } if ($_GET['order_status']) { $helpSqlSearch->set_conditions("status={$_GET['order_status']}"); $this->_view->assign('selectedOrderStatus', $_GET['order_status']); $helpSqlSearch->set_orderBy('create_time desc'); } else { $helpSqlSearch->set_orderBy('status asc,create_time desc'); } $helpSqlSearch->set_conditions("owner_user_id={$userClass['_id']}"); if ($_GET['user_nickname']) { $helpSqlSearch->set_conditions("user_nickname='{$_GET['user_nickname']}'"); $this->_view->assign('selectedUserNickname', $_GET['user_nickname']); $_GET['user_nickname'] = urlencode($_GET['user_nickname']); } if ($_GET['user_account']) { $helpSqlSearch->set_conditions("user_account='{$_GET['user_account']}'"); $this->_view->assign('selectedUserAccount', $_GET['user_account']); $_GET['user_account'] = urlencode($_GET['user_account']); } if ($_GET['title']) { $helpSqlSearch->set_conditions("title like '%{$_GET['title']}%'"); $this->_view->assign('selectedTitle', $_GET['title']); $_GET['title'] = urlencode($_GET['title']); } $helpSqlSearch->setPageLimit($_GET['page'], PAGE_SIZE); $sql = $helpSqlSearch->createSql(); $conditions = $helpSqlSearch->get_conditions(); $helpPage = new Help_Page(array('total' => $this->_modelWorkOrder->findCount($conditions), 'perpage' => PAGE_SIZE)); #------分页生成sql------# $dataList = $this->_modelWorkOrder->select($sql); #------载入缓存------# $workOrderSourceArr = $this->_modelSysconfig->getValueToCache('workorder_source'); $vipLevel = array('0' => '普通', '1' => '一级', '2' => '二级', '3' => '三级', '4' => '四级', '5' => '五级', '6' => '六级', '' => '所有'); $users = $this->_getGlobalData('user'); $serverList = $this->_getGlobalData('gameser_list'); $serverList = Model::getTtwoArrConvertOneArr($serverList, 'Id', 'server_name'); #------载入缓存------# if ($dataList) { Tools::import('Util_FontColor'); foreach ($dataList as &$list) { $list['url_dialog'] = Tools::url(CONTROL, 'OrderDialog', array('Id' => $list['Id'])); $list['word_game_type'] = Util_FontColor::getGameTypeColor($list['game_type'], $gameTypeArr[$list['game_type']]); $list['word_source'] = Util_FontColor::getWorkOrderSource($list['source'], $workOrderSourceArr[$list['source']]); $list['word_status'] = Util_FontColor::getWorkOrderStatus($list['status'], $workOrderStatusArr[$list['status']]); $list['word_operator_id'] = $operatorList[$list['operator_id']]; $questionArr = $this->_modelQuestionType->findById($list['question_type']); $list['word_question_type'] = $questionArr['title'] ? $questionArr['title'] : '游戏提问'; $list['url_detail'] = Tools::url('WorkOrder', 'Detail', array('Id' => $list['Id'])); $list['word_owner_user_id'] = $users[$list['owner_user_id']]['nick_name']; $list['word_game_server_id'] = $serverList[$list['game_server_id']]; if ($list['status'] == 1) { $isTimeout = Tools::isTimeOut($list['create_time'], $list['timeout']); if ($isTimeout === true) { //已超时 $list['time_out_true'] = true; } else { //未超时 $list['lost_time'] = Tools::getTimeFormat($isTimeout); } } $list['create_time'] = date('Y-m-d H:i:s', $list['create_time']); if ($list['word_owner_user_id']) { $list['word_owner_user_id'] .= in_array($list['owner_user_id'], $onlineUsers) ? Util_FontColor::getOnline(1) : Util_FontColor::getOnline(0); } } $this->_view->assign('dataList', $dataList); } $userOperator = $userClass['_operatorIds']; foreach ($userOperator as &$value) { $value['word_operator_id'] = $operatorList[$value['operator_id']]; $value['word_game_type_id'] = $gameTypeArr[$value['game_type_id']]; } $this->_view->assign('userClass', $userClass); $this->_view->assign('userOperator', $userOperator); $this->_view->assign('vipLevel', $vipLevel); $workOrderStatusArr[''] = '所有'; $this->_view->assign('workOrderStatusArr', $workOrderStatusArr); $this->_view->assign('js', $this->_view->get_curJs()); $this->_view->assign('pageBox', $helpPage->show()); $this->_utilMsg->createNavBar(); $this->_view->display(); }