コード例 #1
0
 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);
     }
     //如果有工单发出去,就删除这个工单
 }
コード例 #2
0
ファイル: WorkOrder.class.php プロジェクト: huangwei2wei/kfxt
 /**
  * 回复用户信息
  */
 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);
 }
コード例 #3
0
ファイル: AutoCount.class.php プロジェクト: huangwei2wei/kfxt
 /**
  * 房间计数
  * @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);
     }
 }
コード例 #4
0
ファイル: Group.class.php プロジェクト: huangwei2wei/kfxt
 /**
  * 房间初始化
  */
 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);
 }
コード例 #5
0
ファイル: Index.class.php プロジェクト: huangwei2wei/kfxt
 /**
  * 后台右边主页面显示
  */
 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();
 }
コード例 #6
0
ファイル: Master.class.php プロジェクト: huangwei2wei/kfxt
 /**
  * 对象管理页面
  */
 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();
 }
コード例 #7
0
ファイル: MyTask.class.php プロジェクト: huangwei2wei/kfxt
 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();
 }
コード例 #8
0
 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;
     	}
     	
     }
     
     #------循环分配工单------#
     */
 }
コード例 #9
0
 /**
  * 游戏内提问
  */
 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'])));
 }
コード例 #10
0
ファイル: Index.class.php プロジェクト: huangwei2wei/kfxt
 /**
  * 后台右边主页面显示
  */
 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();
 }
コード例 #11
0
ファイル: MyTask.class.php プロジェクト: huangwei2wei/kfxt
 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();
 }