コード例 #1
0
ファイル: Question.php プロジェクト: eappl/prototype
 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;
     }
 }