vali 6 年之前
父节点
当前提交
f228015ca3
共有 1 个文件被更改,包括 54 次插入1 次删除
  1. 54 1
      vendor/GatewayWorker_windows/Applications/whisper/Events.php

+ 54 - 1
vendor/GatewayWorker_windows/Applications/whisper/Events.php

@@ -342,6 +342,12 @@ class Events
 
         self::writeLogKfStatus($userId, $status);
         Gateway::sendToCurrentClient(json_encode(['message_type' => 'cgstatus', 'data' => ['new_status' => $status, 'old_status' => $oldstatus]]));
+
+        if ($status == 1) {
+            self::kfonlilneRework($client_id, $userId);
+        }
+
+
         return;
     }
 
@@ -417,6 +423,8 @@ class Events
         $_SESSION['iskefu'] = 1;
         $_SESSION['uid'] = $message['uid'];
         $_SESSION['name'] = $message['name'];
+        $_SESSION['client_id'] = $client_id;
+
         Gateway::joinGroup($client_id, 'group_' . $message['group']);
 
         $chat_message = [
@@ -429,6 +437,27 @@ class Events
         return;
     }
 
+    //客服上线重新处理下旧的没完成的工单信息
+    private static function kfonlilneRework($clientid, $kfuid)
+    {
+        $oldService = self::$redis->hgetall(self::getKfServiceKey($kfuid));
+        if ($oldService) {
+            foreach ($oldService as $tmpcie => $tmpsid) {
+                $tmpserver = json_decode(self::$redis->hget(self::SERVICELOG, $tmpsid), true);
+                if (!$tmpserver) {
+                    continue;
+                }
+                $useronline = Gateway::isUidOnline($tmpserver['user_id']);
+                if (!$useronline) {
+                    continue;
+                }
+                $tmpserver['kf_client_id'] = $clientid;
+                self::$redis->hset(self::SERVICELOG, $tmpsid, json_encode($tmpserver), 256);
+                self::userOnlineTask($tmpserver['group_id'], $tmpserver['user_id'], $tmpserver, 0);
+            }
+        }
+        return;
+    }
 
     /**
      * 管理员登陆验证
@@ -593,13 +622,37 @@ class Events
         }
 
         if ($isKefuoff) {
-            self::serviceOffline($client_id, $uid);
+            self::serviceOfflineV2($client_id, $uid);
         } else {
             self::guestOffline($client_id, $uid);
         }
         return true;
     }
 
+
+    //客服掉线处理 第二版  系统调用,不能手动调用
+    public static function serviceOfflineV2($client_id, $uid)
+    {
+        $group = $_SESSION['group'];
+        $uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
+        self::$redis->hdel(self::KFINFOKEY, $uid);
+        $uinfo = json_decode($uinfo, true);
+        if (empty($uinfo) || empty($group)) {
+            echo "客服发生异常退出\n";
+            return;
+        }
+        $user_info = self::$redis->hgetall(self::getKfServiceKey($uid));
+        if (!empty($user_info)) {
+            foreach ($user_info as $val => $serverid) {
+                self::MySendMsg($val, json_encode(['message_type' => 'serviceoffline', 'msg' => '客户人员下线!'], 256));
+            }
+        }
+        echo "客服退出: " . $uid . "\n";
+        self::writeLogKfStatus($uid, 0);
+        return;
+    }
+
+
     //客服下线了  系统调用,不能手动调用
     public static function serviceOffline($client_id, $uid)
     {