function ApplyToOperator($QuestionId, $OperatorName, $force = false) { //获取咨询、建议的分类ID $oCategory = new Kubao_Category(); $oOperator = new Kubao_Operator(); $Category_Ask = $oCategory->getCategoryByQuestionType('ask'); $Category_Suggest = $oCategory->getCategoryByQuestionType('suggest'); //获取问题 $QuestionInfo = $this->getQuestion($QuestionId); //问题存在 if ($QuestionInfo['id']) { //问题 尚未分单 且 尚未被撤销 且 接手客服为空 且 为非协助状态 且 问题分类在指定列表中 if ($QuestionInfo['is_hawb'] == 0 && $QuestionInfo['revocation'] == 0 && $QuestionInfo['js_kf'] == "" && $QuestionInfo['help_status'] == 0 && in_array($QuestionInfo['cid'], array(0, $Category_Ask['id'], $Category_Suggest['id']))) { $this->db->begin(); $updateArr = array("is_hawb" => 1, "js_kf" => $OperatorName, "receive_time" => time()); $UpdateQuestion = $this->updateQuestion($QuestionInfo['id'], $updateArr); //如果更新成功 if ($UpdateQuestion) { $OperatorInfo = $oOperator->getOperatorByName($OperatorName, "login_name,pid,ishandle,isonjob,isbusy"); //如果客服存在 且 (是强制分单 或 客服非忙碌) 且 客服可以接单 且 客服在班 if ($OperatorInfo['login_name'] != '' && ($force == true || $OperatorInfo['isbusy'] == 0) && $OperatorInfo['ishandle'] == 1 && $OperatorInfo['isonjob'] == 1) { //如果强制分单,则将当前单量置为负值 if ($force == true) { $OperatorAccepted['num'] = -1; $OperatorAccepted['num_add'] = -1; } else { //检查客服已分配单量 $OperatorAccepted = $oOperator->getOperatorAccecpted($OperatorName, "num,num_add"); } //获取分单数量限制 $PostLimit = $oOperator->getPost($OperatorInfo['pid'], "question_limit,question_limit_add"); //首问 if ($QuestionInfo['pid'] == 0) { //首问单量小于首问最大单量 if (intval($OperatorAccepted['num']) < $PostLimit['question_limit']) { //更新首问数量 $UpdateAcceptedNum = $oOperator->UpdateOperatorAccecpted($OperatorName, 1, 0); } else { //单量不足,回滚 $this->db->rollback(); return false; } } else { //追问单量小于追问最大单量 if (intval($OperatorAccepted['num_add']) < $PostLimit['question_limit_add']) { //更新追问数量 $UpdateAcceptedNum = $oOperator->UpdateOperatorAccecpted($OperatorName, 1, 1); } else { //单量不足,回滚 $this->db->rollback(); return false; } } if ($UpdateAcceptedNum) { //更新成功,提交 $this->db->commit(); return true; } else { // 更新失败,回滚 $this->db->rollback(); return false; } } else { //客服不在班或不存在 $this->db->rollback(); return false; } } else { //更新失败 $this->db->rollback(); return false; } } else { return false; } } else { //无此问题 return false; } }