Selaa lähdekoodia

Merge branch 'master' of http://git.bocai108.com:10180/Ethan/Customer-Service

Jonlin 6 vuotta sitten
vanhempi
commit
0b09d3e62f
1 muutettua tiedostoa jossa 102 lisäystä ja 5 poistoa
  1. 102 5
      vendor/GatewayWorker_windows/Applications/whisper/Events.php

+ 102 - 5
vendor/GatewayWorker_windows/Applications/whisper/Events.php

@@ -361,18 +361,114 @@ class Events
                     self::serverClose($client['0']);
                 }
                 break;
+            case 'changeOtherhKeFu';
+                self::changeOtherhKeFu($client_id, $message);
+                break;
             // default:
             //    Gateway::closeClient($client_id);
         }
 
     }
 
+
+    //客户工单内部组转接
+    public static function changeOtherhKeFu($client_id, $message)
+    {
+        $groupid = isset($message['group']) ? intval($message['group']) : 0;
+        $toukfid = isset($message['toukfuid']) ? intval($message['toukfuid']) : 0;
+        $fromkfuid = isset($message['fromkfuid']) ? $message['fromkfuid'] : 0;
+        $uid = isset($message['uid']) ? $message['uid'] : 0;
+        $word = isset($message['word']) ? $message['word'] : '';
+        if (empty($groupid) || empty($toukfid) || empty($fromkfuid) || empty($uid) || empty($word) || ($toukfid == $fromkfuid)) {
+            return false;
+        }
+        if (!Gateway::isUidOnline($toukfid) || !Gateway::isUidOnline($uid)) {
+            return false;
+        }
+
+        $tokfidclientid =  Gateway::getClientIdByUid($toukfid);
+        $tokfidclientid = $tokfidclientid['0'];
+        $uidclientid = Gateway::getClientIdByUid($uid);
+        $uidclientid = $uidclientid['0'];
+
+        $kfList = $kfList_new = self::$global->kfList;
+        $userToKf = $userToKf_new = self::$global->userToKf;
+
+        if (!isset($kfList[$groupid]) || !isset($kfList[$groupid][$toukfid]) || !isset($kfList[$groupid][$fromkfuid])) {
+            return false;
+        }
+        foreach ($kfList[$groupid] as $key => $val) {
+            if ($key == $fromkfuid) {
+                $kfList_new[$groupid][$fromkfuid]['task']--;
+                foreach ($kfList[$groupid][$key]['user_info'] as $skey => $sval) {
+                    if ($sval == $uidclientid) {
+                        unset($kfList_new[$groupid][$key]['user_info'][$skey]);
+                    }
+                }
+            }
+
+            if ($key == $toukfid) {
+                $kfList_new[$groupid][$toukfid]['task']++;
+                array_push($kfList_new[$groupid][$key]['user_info'], $uidclientid);
+            }
+        }
+        do {
+        } while (!self::$global->cas('kfList', $kfList, $kfList_new));
+
+        if (isset($userToKf[$uid])) {
+            $userToKf_new[$uid]['1'] = $toukfid;
+        }
+        do {
+        } while (!self::$global->cas('userToKf', $userToKf, $userToKf_new));
+
+
+        /////////取消原有会话,开启新会话
+        $histarttimelimit = time() - 3600*24 ;
+        $bindval = ['user_id'=>$uid,'kf_id'=>intval(trim($toukfid,'KF')),'histime'=>$histarttimelimit] ;
+        $oldlog = self::$db->select('*')->from('ws_service_log')->where('user_id= :user_id and  client_id=:client_id and kf_id=:kf_id and  status=2 and  start_time>=:histime ' )->bindValues($bindval)->row();
+        if (!$oldlog){            return false;        }
+        self::$db->update('ws_service_log')->cols(['status'=>2,'endtime'=>time()])->where('servicelog_id='.$oldlog['servicelog_id'])->query();
+        unset($oldlog['servicelog_id']);
+        $oldlog = array_merge($oldlog,['kf_id'=>intval(trim($toukfid,'KF')),'start_time'=>time(),'end_time'=>0,'status'=>1,'evaluate_id'=>0]);
+        $new_id = self::$db->insert('ws_service_log')->cols($oldlog)->query();
+        if (!$new_id){
+            return false;
+        }
+
+        ///通知消息发送--------------
+        // 通知会员发送信息绑定客服的id
+        $noticeUser = [
+            'message_type' => 'connect',
+            'data' => [
+                'kf_id' => $toukfid,
+                'kf_name' => Gateway::getSession($toukfid)['name'],
+            ]
+        ];
+        Gateway::sendToClient($uidclientid, json_encode($noticeUser, 256));
+        unset($noticeUser);
+
+        // 通知客服端绑定会员的信息
+        $noticeKf = [
+            'message_type' => 'connect',
+            'data' => [
+                'user_info' => $uidclientid
+            ]
+        ];
+        Gateway::sendToClient($tokfidclientid, json_encode($noticeKf, 256));
+        unset($noticeKf);
+        //回转接人,转接成功
+        Gateway::sendToCurrentClient(json_encode(['message_type'=>'trunconnect','data'=>['status'=>1],256]));
+
+        return ;
+    }
+
     //客服接入sock,及初始化
-    public static  function  Kfinit($client_id, $message){
+    public static function Kfinit($client_id, $message)
+    {
         $kfList = self::$global->kfList;
 
         //客服登陆验证 不符合的直接断掉
-        $logcheck = true ;     //开发时使用
+        $logcheck = true;     //开发时使用
         //$logcheck = self::KfloginChedk($client_id, $message);
         if (!$logcheck) {
             Gateway::closeCurrentClient();
@@ -408,6 +504,7 @@ class Events
         $_SESSION['group'] = $message['group'];
         $_SESSION['iskefu'] = 1;
         $_SESSION['uid'] = $message['uid'];
+        $_SESSION['name'] = $message['name'];
 
         // TODO 尝试拉取用户来服务 [二期规划]
 
@@ -426,7 +523,7 @@ class Events
         $kfid = intval(substr($uid, 2));
         $ret = self::$db->select('*')->from('ws_users')->where('id= :id and  token=:token and  expire_time>=:expire_time')->bindValues(array('id' => $kfid, 'token' => $token, 'expire_time' => $expire_time_vali))->row();
         if ($ret) {
-            self::$db->update('ws_users')->cols(array('online_status'=>1,'online_connectid'=>$client))->where('id='.$kfid)->query();
+            self::$db->update('ws_users')->cols(array('online_status' => 1, 'online_connectid' => $client))->where('id=' . $kfid)->query();
             return $ret;
         }
         return false;
@@ -546,8 +643,8 @@ class Events
         }
         unset($kefuinfo_old_new[$group][$uid]);
 
-        $kfid = intval(substr($uid,2));
-        self::$db->update('ws_users')->cols(array('online_status'=>0,'online_connectid'=>''))->where('id='.$kfid)->query();
+        $kfid = intval(substr($uid, 2));
+        self::$db->update('ws_users')->cols(array('online_status' => 0, 'online_connectid' => ''))->where('id=' . $kfid)->query();
 
         do {
         } while (!self::$global->cas('kfList', $kefuinfo_old, $kefuinfo_old_new));