Sfoglia il codice sorgente

'修改客服转接提示'

Ethan 6 anni fa
parent
commit
422911f57a
1 ha cambiato i file con 53 aggiunte e 12 eliminazioni
  1. 53 12
      vendor/GatewayWorker_windows/Applications/whisper/Events.php

+ 53 - 12
vendor/GatewayWorker_windows/Applications/whisper/Events.php

@@ -427,7 +427,7 @@ class Events
 
 
     /**
-     * 管理员
+     * 管理员登陆验证
      * @param $client_id 服务ID
      * @param $message 数据
      */
@@ -496,9 +496,10 @@ class Events
             Gateway::closeCurrentClient();
             return;
         }
+        $last = self::UserHasOldTalk($uid);
 
         $onlinekf = self::getOnlineKfData($group, 1);
-        if (empty($onlinekf)) {
+        if (empty($onlinekf)&&empty($last)) {
             Gateway::sendToClient($client_id, json_encode(['message_type' => 'notice', 'content' => '暂时没有客服上班,请稍后再咨询。'], 256));
             //Gateway::closeClient($client_id);
             return;
@@ -535,7 +536,7 @@ class Events
         $_SESSION['uid'] = $message['uid'];
 
         // 尝试分配新会员进入服务
-        self::userOnlineTask($group, $uid);
+        self::userOnlineTask($group, $uid, $last, $client_id);
     }
 
     /**
@@ -574,6 +575,7 @@ class Events
     {
         $group = $_SESSION['group'];
         $uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
+        self::$redis->hdel(self::KFINFOKEY, $uid);
         $uinfo = json_decode($uinfo, true);
         if (empty($uinfo)) {
             echo "客服发生异常退出\n";
@@ -602,8 +604,6 @@ class Events
         self::$db->update('ws_users')->cols(array('online_status' => 0, 'online_connectid' => ''))->where('id=' . $kfid)->query();
         self::writeLogKfStatus($uid, 0);
 
-        self::$redis->hdel(self::KFINFOKEY, $uid);
-
         return;
     }
 
@@ -625,7 +625,7 @@ class Events
         self::$redis->hdel(self::USERINFOKEY, $uid);
 
 
-        if (!empty($info['kfuid'])) {
+        /*if (!empty($info['kfuid'])) {
             $kfinfo = self::$redis->hget(self::KFINFOKEY, $info['kfuid']);
             if (!empty($kfinfo)) {
                 $kfinfoArr = json_decode($kfinfo, true);
@@ -634,7 +634,7 @@ class Events
                 $kfinfoArr['task'] = count($kfinfoArr['user_info']);
                 self::$redis->hset(self::KFINFOKEY, $info['kfuid'], json_encode($kfinfoArr, 256));
             }
-        }
+        }*/
 
         $chat_message = [
             'message_type' => 'userClose',
@@ -683,8 +683,11 @@ class Events
         if (empty($data)) {
             return;
         }
-        // 获取当前工单数据.
+        // 获取当前客服.
         $kfInfo = json_decode(self::$redis->HGET('KFINFO', 'KF' . $data['kf_id']), true);
+        if (empty($kfInfo)) {
+            return;
+        }
         // 删除当前工单.
         self::$redis->hdel('SERVICELOG', $servicelogId);
         // 当前服务客服删除当前人员.
@@ -792,7 +795,7 @@ class Events
      * @param $group
      * @param $uid
      */
-    private static function userOnlineTask($group = 0, $uid = 0)
+    private static function userOnlineTask($group = 0, $uid = 0, $last=[], $client_id='')
     {
         $allusergkarr = self::getUserListData();
         if (empty($allusergkarr)) {
@@ -810,9 +813,47 @@ class Events
         if ($group && $uid) {
             // 指定用指定组 [可能存在断线重连的情况] 如果存在旧的会话,直接连线客服和用户
             //否则按先到后到以及客服最大服务数限制
-            $last = self::UserHasOldTalk($uid);
-            if ($last) {print_r(time());
-                self::BeginTalk(self::getkfuid($last['kf_id']), $uid, $last['group_id'], $last['servicelog_id']);
+            if ($last) {
+                //self::BeginTalk(self::getkfuid($last['kf_id']), $uid, $last['group_id'], $last['servicelog_id']);
+                // 获取工单信息.
+                $data = json_decode(self::$redis->HGET('SERVICELOG', $last['servicelog_id']), true);
+                if (empty($data)) {
+                    foreach ($allusergkarr as $group => $gusersArr) {
+                        if (!isset($allkfgkarr[$group]) || count($allkfgkarr[$group]) <= 0) {
+                            //所属客服组无人在线
+                            continue;
+                        }
+                        $nowkfs = $allkfgkarr[$group];
+                        $count = count($nowkfs);
+                        $i = 0;
+
+                        foreach ($gusersArr as $user) {
+                            if ($nowkfs[$i]['task'] > $maxset) {
+                                break;
+                            }
+                            $nowkfs[$i]['task']++;
+
+                            self::BeginTalk($nowkfs[$i]['id'], $user['id'], $group, 0, $user);
+                            self::$redis->hdel(self::USERLIST, $user['id']);
+
+                            $i++;
+                            if ($i >= $count) {
+                                $i = 0;
+                            }
+                        }
+                    }
+                    return;
+                }
+                $data['client_id'] = $client_id;
+                // 保存修改后的工单信息.
+                self::$redis->HSET('SERVICELOG', $last['servicelog_id'], json_encode($data, 256));
+                $toOld_message = [
+                    'message_type' => 'toOld',
+                    'data' => [
+                        'content' => '接入至未结束的会话'
+                    ]
+                ];
+                Gateway::sendToCurrentClient(json_encode($toOld_message, 256));
                 return;
             } else {
                 //系统定时调用时,无组,无用户