public function ProcessComplainDetail($Complain) { $oMenCache = new Base_Cache_Memcache("Complaint"); $Setting = $oMenCache->get('setting'); $oCategory = new Kubao_Category(); $oOperator = new Kubao_Operator(); $oQtype = new Kubao_Qtype(); $QuestionDetail = $this->GetQuestionDetail($Complain['QuestionId']); //获取到问题详情 if ($QuestionDetail['QuestionId'] > 0) { //如果问题尚未被转换分类 if ($QuestionDetail['Transformed'] != 1) { //如果问题被设置为隐藏 if ($QuestionDetail['Hidden'] == 1) { return $QuestionDetail; } else { $QuestionType = "complain"; //获取问题分类内容 $CategoryInfo = $oCategory->getCategoryByQuestionType($QuestionType); $QuestionDetail['CategoryName'] = $CategoryInfo['id'] ? $CategoryInfo['name'] : "未设置分类"; $QuestionDetail['QuestionType'] = ucfirst($QuestionType); $QuestionDetail['PageTitle'] = $QuestionDetail['CategoryName'] . "详情"; //获取问题主分类内容 $QtypeInfo = $oQtype->getQtypeById($QuestionDetail['QtypeId'], 'id,name'); $QuestionDetail['QtypeName'] = $QtypeInfo['id'] ? $QtypeInfo['name'] : "未设置分类"; //如果回答中包含客服账号 if ($QuestionDetail['Answer']['OperatorName']) { $List = 'id,photo,login_name,cno,QQ,mobile,weixin,weixinPicUrl,tel,name'; $M = $oMenCache->get('OperatorInfo_' . $QuestionDetail['Answer']['OperatorName'] . "_" . md5($List)); if ($M) { $OperatorInfo = json_decode($M, true); //如果获取到的客服信息不合法 if (!$OperatorInfo['login_name']) { //从主站获取客服信息 $OperatorInfo = $oOperator->getOperatorFromVadmin($QuestionDetail['Answer']['OperatorName'], $List); $OperatorInfo = $oOperator->processOperatorInfo($OperatorInfo); } } else { //从主站获取客服信息 $OperatorInfo = $oOperator->getOperatorFromVadmin($QuestionDetail['Answer']['OperatorName'], $List); //如果没有从主站获取到客服信息 if ($OperatorInfo['login_name']) { //格式化显示信息 $OperatorInfo = $oOperator->processOperatorInfo($OperatorInfo); $oMenCache->set('OperatorInfo_' . $QuestionDetail['Answer']['OperatorName'] . "_" . md5($List), json_encode($OperatorInfo), 60); } } //如果获取到的客服信息合法 if ($OperatorInfo['OperatorName']) { $oMenCache->set('OperatorInfo_' . $QuestionDetail['Answer']['OperatorName'] . "_" . md5($List), json_encode($OperatorInfo), 60); $QuestionDetail['Answer']['OperatorInfo'] = $OperatorInfo; } else { unset($QuestionDetail['Answer']['OperatorInfo']); } } //如果包含接单客服账号 if ($QuestionDetail['AcceptOperatorName']) { $List = 'id,photo,login_name,cno,QQ,mobile,weixin,weixinPicUrl,tel,name'; //$M = $oMenCache -> get('OperatorInfo_'.$QuestionDetail['AcceptOperatorName']."_".md5($List)); if ($M) { $OperatorInfo = json_decode($M, true); //如果获取到的客服信息不合法 if (!$OperatorInfo['login_name']) { //从主站获取客服信息 $OperatorInfo = $oOperator->getOperatorFromVadmin($QuestionDetail['AcceptOperatorName'], $List); $OperatorInfo = $oOperator->processOperatorInfo($OperatorInfo); } } else { //从主站获取客服信息 $OperatorInfo = $oOperator->getOperatorFromVadmin($QuestionDetail['AcceptOperatorName'], $List); //如果没有从本地获取到客服信息 if ($OperatorInfo['login_name']) { //格式化显示信息 $OperatorInfo = $oOperator->processOperatorInfo($OperatorInfo); } } //如果获取到的客服信息合法 if ($OperatorInfo['OperatorName']) { $oMenCache->set('OperatorInfo_' . $QuestionDetail['AcceptOperatorName'] . "_" . md5($List), json_encode($OperatorInfo), 60); $QuestionDetail['AcceptOperatorInfo'] = $OperatorInfo; } else { unset($QuestionDetail['AcceptOperatorInfo']); } } //如果问题状态为 已同步至投诉 并且 状态不是已撤销 并且 问题状态未初始创建 或者 开关允许任何状态撤销 if ($QuestionDetail['Sync'] == 1 && $QuestionDetail['QuestionStauts'] != 5 && $QuestionDetail['QuestionStatus'] != 5 && ($QuestionDetail['QuestionStauts'] == 0 || $QuestionDetail['QuestionStatus'] == 0 || $Setting['complainSwitch'])) { //允许问题撤销 $QuestionDetail['Revoke'] = 1; } unset($QuestionDetail['CatagoryId'], $QuestionDetail['QtypeId']); return $QuestionDetail; } } else { //如果问题被转换为咨询/建议 if (in_array($QuestionDetail['QuestionType'], array('ask', 'suggest'))) { return $QuestionDetail; } else { return false; } } } else { return false; } }
function ApplyCancel($QuestionId) { $oOperator = new Kubao_Operator(); //事务开启 $this->db->begin(); //获取问题 $QuestionInfo = $this->getQuestion($QuestionId, "id,status,js_kf,pid"); //问题存在 if ($QuestionInfo['id']) { //如果已经被接手 if ($QuestionInfo['js_kf'] != '') { //如果尚未被回答或尚未完结 if ($QuestionInfo['status'] < 2) { //标识未被分单 $updateArr = array("is_hawb" => 0, "js_kf" => "", "receive_time" => 0); $UpdateQuestion = $this->updateQuestion($QuestionInfo['id'], $updateArr); //减去单量 if ($QuestionInfo['pid'] == 0) { //更新首问数量 $UpdateAcceptedNum = $oOperator->UpdateOperatorAccecpted($QuestionInfo['js_kf'], -1, 0); } else { //更新追问数量 $UpdateAcceptedNum = $oOperator->UpdateOperatorAccecpted($QuestionInfo['js_kf'], -1, 1); } if ($UpdateQuestion && $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; $this->db->rollback(); } }