vali 6 éve
szülő
commit
059696ca3a

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

@@ -39,6 +39,7 @@ class Events
     public static $redis = null;
     public static $logic = null;
 
+    const  KFSERVICES = 'KFSERVICES';          //KFSERVICES:KF10 1213131=>22这样的 客服工单hash表 健为连接号,值为工单号
     const  KFINFOKEY = 'KFINFO';              //客服信息hash表
     const  USERINFOKEY = 'USERINFO';          //用户信息hash表
     const  USERLIST = 'USERLIST';             //用户排队表
@@ -186,6 +187,9 @@ class Events
                 case 'getEvaluate';
                     self::getEvaluate($message['data']);
                     break;
+                case 'debug':
+                    self::debug($message['data']);
+                    break;
             }
         }
         return true;
@@ -581,7 +585,8 @@ class Events
             echo "客服发生异常退出\n";
             return;
         }
-        $user_info = $uinfo['user_info'];
+        //$user_info = $uinfo['user_info'];
+        $user_info = self::$redis->hgetall(self::getKfServiceKey($uid));
         $kfid = self::getkfid($uid);
         $now = time();
         $starttime = $now - 86400 * 7;
@@ -691,12 +696,13 @@ class Events
         // 删除当前工单.
         self::$redis->hdel('SERVICELOG', $servicelogId);
         // 当前服务客服删除当前人员.
-        $kfUserList = self::ArrayDataopt($kfInfo['user_info'], $data['client_id'], 0);
+        //$kfUserList = self::ArrayDataopt($kfInfo['user_info'], $data['client_id'], 0);
+        self::$redis->hdel(self::getKfServiceKey($kfInfo['id']), $data['client_id']);
         // 删除当前人员信息.
         self::$redis->hdel('USERINFO', $data['user_id']);
         // 当前客服所接待人员.
-        $kfInfo['user_info'] = $kfUserList;
-        $kfInfo['task'] = count($kfUserList);
+        //$kfInfo['user_info'] = $kfUserList;
+        //$kfInfo['task'] = count($kfUserList);
         // 存入客服信息.
         self::$redis->HSET('KFINFO', 'KF' . $data['kf_id'], json_encode($kfInfo, 256));
         // 发送消息给用户.
@@ -807,8 +813,7 @@ class Events
             return;
         }
 
-        $maxset = (self::$global->systemconfig)['KFMaxServices'] ?? 5;
-        $maxset = intval($maxset);
+        $maxset = intval((self::$global->systemconfig)['KFMaxServices']);
 
         if ($group && $uid) {
             // 指定用指定组 [可能存在断线重连的情况] 如果存在旧的会话,直接连线客服和用户
@@ -853,7 +858,7 @@ class Events
             }
         }
         return;
-        
+
     }
 
     //开启一个会话
@@ -904,10 +909,7 @@ class Events
 
         $redisData = array_merge($server, $armarr, ['kf_client_id' => $kfinfo['client_id'], 'server_name' => $kfinfo['name']]);
         self::$redis->hset(self::SERVICELOG, $serviceid, json_encode($redisData, 256));
-
-        $kfinfo['user_info'] = array_merge($kfinfo['user_info'], [$userInfo['client_id'] => $serviceid]);
-        $kfinfo['task'] = count($kfinfo['user_info']);
-        self::$redis->hset(self::KFINFOKEY, $kfuid, json_encode($kfinfo, 256));
+        self::setKfTasks($kfuid, $userInfo['client_id'], 1, $serviceid);
 
         $userInfo['serverid'] = $serviceid;
         $userInfo['kfuid'] = $kfuid;
@@ -925,7 +927,6 @@ class Events
         ];
         self::MySendMsg($userInfo['client_id'], json_encode($noticeUser, 256));
 
-
         $sayHello = (self::$global->replay)['2'];
         if (!empty($sayHello) && 1 == $sayHello['status']) {
             $chat_message = [
@@ -988,7 +989,8 @@ class Events
         self::$redis->hset(self::USERINFOKEY, $uid, json_encode($userInfo, 256));
         // 更改客服连接信息.
         $kfinfo = json_decode(self::$redis->hget(self::KFINFOKEY, $kfuid), true);
-        $kfUsers = json_decode($kfinfo['user_info'], true);
+        //$kfUsers = json_decode($kfinfo['user_info'], true);
+        $kfUsers = self::$redis->hgetall(self::getKfServiceKey($kfuid));
         foreach ($kfUsers as $key => $value) {
             if ($value == $uid) {
                 // 删除之前的当前用户连接
@@ -1074,6 +1076,8 @@ class Events
             $now = json_decode($val, true);
             if ($now && $now['status'] == 1) {
                 //客分组后的数组
+                $tmp = self::getKfTasks($now['id']);
+                $now['task'] = $tmp ? count($tmp) : 0;
                 $allkfgkarr[$now['group']][] = $now;
             }
         }
@@ -1766,6 +1770,42 @@ class Events
         }
     }
 
+    //调试使用
+    public static function debug($dataArray)
+    {
+
+
+    }
+
+
+    //客服的工单hash健名
+    public static function getKfServiceKey($kfuid)
+    {
+        return self::KFSERVICES . ':' . $kfuid;
+    }
+
+
+    //获取客服所有连接信息及工单信息
+    public static function getKfTasks($kfuid)
+    {
+        $all = self::$redis->hgetall(self::getKfServiceKey($kfuid));
+        if (empty($r)) {
+            return false;
+        }
+        return $all;
+    }
+
+    //设置或删除客服的连接  opt==0删除 1添加
+    public static function setKfTasks($kfuid, $clientid, $opt = 0, $serviceid = 0)
+    {
+        $k = self::getKfServiceKey($kfuid);
+        if ($opt == 0) {
+            self::$redis->hdel($k, $clientid);
+            return;
+        }
+        self::$redis->hset($k, $clientid, $serviceid);
+    }
+
 
 }
 

+ 4 - 0
vendor/GatewayWorker_windows/Applications/whisper/start_gateway.php

@@ -35,9 +35,13 @@ $gateway->startPort = 2900;
 // 服务注册地址
 $gateway->registerAddress = '127.0.0.1:1238';
 
+
 // 心跳间隔
 $gateway->pingInterval = 5;
 $gateway->pingNotResponseLimit = 2;
+$tmpPath = isset($_SERVER['TEMP']) ? $_SERVER['TEMP'] : '/tmp';
+Worker::$logFile = $tmpPath . '/workerman.log';
+Worker::$stdoutFile = $tmpPath . '/stdout.log';
 // 心跳数据
 //$gateway->pingData = '{"message_type":"ping"}';