소스 검색

客服在线状态写表

vali 6 년 전
부모
커밋
a9928657c1
1개의 변경된 파일35개의 추가작업 그리고 3개의 파일을 삭제
  1. 35 3
      vendor/GatewayWorker_windows/Applications/whisper/Events.php

+ 35 - 3
vendor/GatewayWorker_windows/Applications/whisper/Events.php

@@ -80,6 +80,8 @@ class Events
 
         // 定时统计数据
         if (0 === $worker->id) {
+            self::writeLogKfStatus(0, 0, 0);
+
             // 1分钟统计一次实时数据
             Timer::add(60 * 1, function () {
                 self::writeLog(1);
@@ -210,7 +212,7 @@ class Events
                     $data = $message['data'];
                     self::userInitEnt($client_id, $data);
                     break;
-                // 聊天
+                //在线客服信息
                 case 'getkfonlines':
                     Gateway::sendToCurrentClient(json_encode(self::getkfonlines(), 256));
                     break;
@@ -375,6 +377,8 @@ class Events
                         }
                     }
                     self::$global->kfList = $kfList;
+                    self::writeLogKfStatus($userId, $status);
+
                     break;
                 case 'changeOtherhKeFu';
                     self::changeOtherhKeFu($client_id, $message);
@@ -413,7 +417,7 @@ class Events
         foreach ($kfs as $gruop => $fs) {
             foreach ($fs as $kfid => $kfdata) {
                 if ($kfdata['status'] == 1) {
-                    $ret[$gruop][] = ['id' => $kfid, 'name' => $kfdata['name'], 'job_member' => $kfdata['job_name'], 'avatar' => $kfdata['avatar'],'signature'=>$kfdata['signature']];
+                    $ret[$gruop][] = ['id' => $kfid, 'name' => $kfdata['name'], 'job_member' => $kfdata['job_name'], 'avatar' => $kfdata['avatar'], 'signature' => $kfdata['signature']];
                 }
             }
         }
@@ -452,6 +456,11 @@ class Events
         if (!isset($kfList[$groupid]) || !isset($kfList[$groupid][$toukfid]) || !isset($kfList[$groupid][$fromkfuid])) {
             return false;
         }
+        if ($kfList[$groupid][$toukfid]['status'] != 1) {
+            return false;
+        }
+
+
         foreach ($kfList[$groupid] as $key => $val) {
             if ($key == $fromkfuid) {
                 $kfList_new[$groupid][$fromkfuid]['task']--;
@@ -546,7 +555,7 @@ class Events
                     'avatar' => $kfinfo['user_avatar'],
                     'client_id' => $client_id,
                     'task' => 0,
-                    'signature'=>$kfinfo['signature'],
+                    'signature' => $kfinfo['signature'],
                     'status' => 2,// 1为在线(接收分配、接收消息)2为隐身(不接收分配、只接收消息)
                     'user_info' => []
                 ];
@@ -568,6 +577,8 @@ class Events
         $_SESSION['uid'] = $message['uid'];
         $_SESSION['name'] = $message['name'];
 
+        self::writeLogKfStatus($message['uid'], 2);
+
         // TODO 尝试拉取用户来服务 [二期规划]
 
     }
@@ -712,6 +723,9 @@ class Events
 
         do {
         } while (!self::$global->cas('kfList', $kefuinfo_old, $kefuinfo_old_new));
+
+        self::writeLogKfStatus($uid, 0);
+
         return;
     }
 
@@ -1509,6 +1523,24 @@ class Events
     }
 
 
+    //客服在线状态写组
+    private static function writeLogKfStatus($kf, $status, $flag = 1)
+    {
+        if ($flag == 1) {
+            $status = intval($status);
+            if ($status == 0) {
+                self::$db->delete('ws_kfonline')->where("uid='$kf'")->query();
+            } else {
+                $now = date('Y-m-d H:i;s');
+                $sql = "insert into ws_kfonline(uid,status,uptime) values('$kf',$status,'$now') ON DUPLICATE KEY UPDATE status=$status,uptime='$now' ";
+                self::$db->query($sql);
+            }
+        } else {
+            self::$db->query("delete from ws_kfonline ");
+        }
+    }
+
+
     //踢掉同一用户的旧用户
     private static function tickOlduser($uid)
     {