Эх сурвалжийг харах

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

xiang 6 жил өмнө
parent
commit
e6eab00735

+ 9 - 0
application/redis.php

@@ -7,9 +7,18 @@
  */
 
 return [
+    //'host' => 'ky.281570.com',
+    //'port' => 12379,
+    
     'host' => '172.17.0.2',
     'port' => 6379,
+
     'passwd' => 'aqm1728',
+    'password' => 'aqm1728',
+
     'db' => 1,
+    'select' => 1,
+
     'overtime' => 1,
+    'timeout' => 1,
 ];

+ 87 - 77
application/service/controller/History.php

@@ -1,4 +1,5 @@
 <?php
+
 namespace app\service\controller;
 
 use think\cache\driver\Redis;
@@ -20,24 +21,28 @@ class History extends Common
     {
         // 验证token.
         $tokenStatus = $this->verifyToken();
-        $code        = -2;
-        $msg         = '错误';
+        $code = -2;
+        $msg = '错误';
         if ($tokenStatus === false) {
             $msg = 'token错误';
             return json(['code' => $code, 'data' => [], 'msg' => $msg]);
         }
+        $redisconfig = require(APP_PATH . DS . 'redis.php');
 
         try {
             // 获取用户信息.
+
             $getUserInfo = $this->getUserInfo();
             if ($getUserInfo['user_overview'] != 1) {
                 $msg = '您没有权限查看';
                 return json(['code' => 1, 'data' => [], 'msg' => $msg]);
             }
 
-            $groups     = model('Groups')->selectGroups();
-            $redis      = new Redis;
-            $kefuInfo   = $redis->handler()->hGetall('KFINFO');
+
+            $groups = model('Groups')->selectGroups();
+            $redis = new Redis($redisconfig);
+
+            $kefuInfo = $redis->handler()->hGetall('KFINFO');
             $servicelog = $redis->handler()->hGetall('SERVICELOG');
             // 获取所有用户ID.
             $userIds = [];
@@ -50,13 +55,13 @@ class History extends Common
                 'nick_name',
             ];
             $getAccountsWhere['id'] = ['in', $userIds];
-            $getAllAccounts     = model('Accounts')->selectAccounts($getAccountsField, $getAccountsWhere);
+            $getAllAccounts = model('Accounts')->selectAccounts($getAccountsField, $getAccountsWhere);
 
             foreach ($groups as $k => $v) {
-                $data[$k]           = (object) [
-                    'label' => $v['name'].'-组',
+                $data[$k] = (object)[
+                    'label' => $v['name'] . '-组',
                 ];
-                $n                  = 0;
+                $n = 0;
                 $data[$k]->children = [];
                 foreach ($kefuInfo as $va) {
                     $kefuInfoData = json_decode($va, true);
@@ -64,18 +69,18 @@ class History extends Common
                         $KFstatus = $kefuInfoData['status'] == 1 ? '(在线)'
                             : ($kefuInfoData['status'] == 2 ? '(隐身)'
                                 : ($kefuInfoData['status'] == 3 ? '(休息)' : '(未知)'));
-                        $data[$k]->children[$n] = (object) [
-                            'label' => $kefuInfoData['name'].$KFstatus.'-客服',
+                        $data[$k]->children[$n] = (object)[
+                            'label' => $kefuInfoData['name'] . $KFstatus . '-客服',
                         ];
                         $data[$k]->children[$n]->children = [];
                         foreach ($servicelog as $val) {
                             $servicelogData = json_decode($val, true);
-                            if (('KF'.$servicelogData['kf_id']) == $kefuInfoData['id']) {
+                            if (('KF' . $servicelogData['kf_id']) == $kefuInfoData['id']) {
                                 $found_key = array_search($servicelogData['user_id'], array_column($getAllAccounts, 'id'));
                                 $label = $getAllAccounts[$found_key]['nick_name'] ?? $servicelogData['user_name'];
-                                $data[$k]->children[$n]->children[] = (object) [
-                                    'label'         => $label.'-会话',
-                                    'user_id'         => $servicelogData['user_id'],
+                                $data[$k]->children[$n]->children[] = (object)[
+                                    'label' => $label . '-会话',
+                                    'user_id' => $servicelogData['user_id'],
                                     'servicelog_id' => $servicelogData['servicelog_id'],
                                 ];
                             }
@@ -89,7 +94,7 @@ class History extends Common
 
             return json(['code' => 1, 'data' => $data, 'msg' => '成功', 'serverList' => array_keys($servicelog)]);
         } catch (\Exception $e) {
-            return json(['code' => $code, 'data' => [], 'msg' => $msg]);
+            return json(['code' => $code, 'data' => [$e->getMessage()], 'msg' => $msg]);
         }//end try
 
     }//end allConversation()
@@ -105,8 +110,8 @@ class History extends Common
     {
         // 验证token.
         $tokenStatus = $this->verifyToken();
-        $code        = -2;
-        $msg         = '错误';
+        $code = -2;
+        $msg = '错误';
         if ($tokenStatus === false) {
             $msg = 'token错误';
             return json(['code' => $code, 'data' => [], 'msg' => $msg]);
@@ -114,7 +119,7 @@ class History extends Common
 
         try {
             // 获取用户信息.
-            $getUserInfo     = $this->getUserInfo();
+            $getUserInfo = $this->getUserInfo();
             $serviceLogField = [
                 'user_id',
                 'user_name',
@@ -133,18 +138,18 @@ class History extends Common
             ];
             // 关联信息.
             $serviceLogJoin['groups b'] = 'a.group_id = b.id';
-            $serviceLogWhere['kf_id']   = $getUserInfo->id;
+            $serviceLogWhere['kf_id'] = $getUserInfo->id;
             // 分页.
             $currentPage = input('post.currentPage', '1');
-            $pageSize    = input('post.pageSize', '10');
-            $start       = input('post.start');
-            $end         = input('post.end');
-            $userName    = input('post.user_name');
-            $startTime   = strtotime(date('Y-m-d').'-6 day');
-            $endTime     = strtotime(date('Y-m-d').'+1 day');
-            if (strlen($start) && strlen($end) ) {
+            $pageSize = input('post.pageSize', '10');
+            $start = input('post.start');
+            $end = input('post.end');
+            $userName = input('post.user_name');
+            $startTime = strtotime(date('Y-m-d') . '-6 day');
+            $endTime = strtotime(date('Y-m-d') . '+1 day');
+            if (strlen($start) && strlen($end)) {
                 $startTime = strtotime($start);
-                $endTime   = strtotime($end.'+1 day');
+                $endTime = strtotime($end . '+1 day');
             }
 
             if (strlen($userName)) {
@@ -160,7 +165,7 @@ class History extends Common
             ];
             $offset = (($currentPage - 1) * $pageSize);
             // 获取用户信息.
-            $serviceLog      = model('ServiceLog')->selectServiceLog(
+            $serviceLog = model('ServiceLog')->selectServiceLog(
                 $serviceLogField,
                 $offset,
                 $pageSize,
@@ -168,7 +173,7 @@ class History extends Common
                 $serviceLogJoin
             );
             $countServiceLog = model('ServiceLog')->countServiceLog($serviceLogWhere);
-            $evaluate        = model('Evaluate')->getEvaluate();
+            $evaluate = model('Evaluate')->getEvaluate();
             foreach ($serviceLog as $k => $v) {
                 foreach ($evaluate as $va) {
                     if ($v->evaluate_id == $va->evaluate_id) {
@@ -177,11 +182,11 @@ class History extends Common
                 }
             }
 
-            $result['total']       = $countServiceLog;
-            $result['countPage']   = (ceil(($result['total']) / $pageSize));
+            $result['total'] = $countServiceLog;
+            $result['countPage'] = (ceil(($result['total']) / $pageSize));
             $result['currentPage'] = $currentPage;
-            $result['list']        = $serviceLog;
-            $result['pageSize']    = $pageSize;
+            $result['list'] = $serviceLog;
+            $result['pageSize'] = $pageSize;
 
             return json(['code' => 1, 'data' => $result, 'msg' => '成功']);
         } catch (\Exception $e) {
@@ -201,8 +206,8 @@ class History extends Common
     {
         // 验证token.
         $tokenStatus = $this->verifyToken();
-        $code        = -2;
-        $msg         = '错误';
+        $code = -2;
+        $msg = '错误';
         if ($tokenStatus === false) {
             $msg = 'token错误';
             return json(['code' => $code, 'data' => [], 'msg' => $msg]);
@@ -216,13 +221,13 @@ class History extends Common
             $chatLogWhere['servicelog_id'] = $servicelogId;
             // 分页.
             $currentPage = input('get.currentPage', '1');
-            $pageSize    = input('get.pageSize', '10');
-            $offset      = (($currentPage - 1) * $pageSize);
+            $pageSize = input('get.pageSize', '10');
+            $offset = (($currentPage - 1) * $pageSize);
             // 获取用户信息.
-            $chatLog      = model('ChatLog')->selectChatLog($chatLogField, $offset, $pageSize, $chatLogWhere);
+            $chatLog = model('ChatLog')->selectChatLog($chatLogField, $offset, $pageSize, $chatLogWhere);
             $countChatLog = model('ChatLog')->countChatLog($chatLogWhere);
             // 查询报警信息.
-            $alarmField                    = [
+            $alarmField = [
                 'evaluate_id',
                 'alarm_corresponding',
                 'alarm_cvtOvertime',
@@ -253,31 +258,31 @@ class History extends Common
                 }
             }
 
-            $service_log = db('service_log')->where('servicelog_id',$servicelogId)->find();
+            $service_log = db('service_log')->where('servicelog_id', $servicelogId)->find();
             $account = db('accounts')
                 ->alias('a')
                 ->join('accountslabel b', 'a.label_id = b.id')
                 ->field('a.id,account_name,nick_name,account_email,account_phone,address,remark,name as label')
-                ->where('a.id',$service_log['user_id'])
+                ->where('a.id', $service_log['user_id'])
                 ->find();
             $account['user_ip'] = $service_log['user_ip'];
             $account['system'] = $service_log['system'];
             $account['browse'] = $service_log['browse'];
 
 
-            $result['total']       = $countChatLog;
-            $result['countPage']   = (ceil(($result['total']) / $pageSize));
+            $result['total'] = $countChatLog;
+            $result['countPage'] = (ceil(($result['total']) / $pageSize));
             $result['currentPage'] = $currentPage;
-            $result['list']        = $chatLog;
-            $result['pageSize']    = $pageSize;
-            $result['account']    = $account;
-            $result['alarm']       = [
-                'evaluate_id'      => $alarm['evaluate_id'],
+            $result['list'] = $chatLog;
+            $result['pageSize'] = $pageSize;
+            $result['account'] = $account;
+            $result['alarm'] = [
+                'evaluate_id' => $alarm['evaluate_id'],
                 'verifyReturnTime' => $verifyReturnTime,
-                'cvtOvertime'      => $cvtOvertime,
-                'serverSensitive'  => $alarm['alarm_serverSensitive'] ? 1 : 2,
-                'userSensitive'    => $alarm['alarm_userSensitive'] ? 1 : 2,
-                'respond'          => $alarm['alarm_respond'],
+                'cvtOvertime' => $cvtOvertime,
+                'serverSensitive' => $alarm['alarm_serverSensitive'] ? 1 : 2,
+                'userSensitive' => $alarm['alarm_userSensitive'] ? 1 : 2,
+                'respond' => $alarm['alarm_respond'],
             ];
 
             return json(['code' => 1, 'data' => $result, 'msg' => '成功']);
@@ -298,8 +303,8 @@ class History extends Common
     {
         // 验证token.
         $tokenStatus = $this->verifyToken();
-        $code        = -2;
-        $msg         = '错误';
+        $code = -2;
+        $msg = '错误';
         if ($tokenStatus === false) {
             $msg = 'token错误';
             return json(['code' => $code, 'data' => [], 'msg' => $msg]);
@@ -313,40 +318,40 @@ class History extends Common
             $chatLogWhere['servicelog_id'] = $servicelogId;
             if (strlen(input('get.lastTime'))) {
                 $lastTime = input('get.lastTime');
-                $chatLogWhere['time_line']  = array('gt', $lastTime);
+                $chatLogWhere['time_line'] = array('gt', $lastTime);
             }
             // 分页.
             $currentPage = 1;
-            $pageSize    = 999999;
-            $offset      = (($currentPage - 1) * $pageSize);
-            $chatLog      = model('ChatLog')->selectChatLog($chatLogField, $offset, $pageSize, $chatLogWhere);
+            $pageSize = 999999;
+            $offset = (($currentPage - 1) * $pageSize);
+            $chatLog = model('ChatLog')->selectChatLog($chatLogField, $offset, $pageSize, $chatLogWhere);
 
-            $service_log = db('service_log')->where('servicelog_id',$servicelogId)->find();
+            $service_log = db('service_log')->where('servicelog_id', $servicelogId)->find();
             $account = db('accounts')
                 ->alias('a')
                 ->join('accountslabel b', 'a.label_id = b.id')
                 ->field('a.id,account_name,nick_name,account_email,account_phone,address,remark,name as label')
-                ->where('a.id',$service_log['user_id'])
+                ->where('a.id', $service_log['user_id'])
                 ->find();
             $account['user_ip'] = $service_log['user_ip'];
             $account['system'] = $service_log['system'];
             $account['browse'] = $service_log['browse'];
             // 获取用户信息.
-            $usersField   = [
+            $usersField = [
                 'a.id',
                 'user_name',
                 'user_avatar',
                 'b.name',
             ];
             // 关联信息.
-            $join['groups b']    = 'a.group_id = b.id';
+            $join['groups b'] = 'a.group_id = b.id';
             $usersWhere['a.id'] = $service_log['kf_id'];
             // 获取用户信息.
             $serverInfo = model('users')->findInfo($usersField, $usersWhere, $join);
 
 
-            $result['list']        = $chatLog;
-            $result['account']    = $account;
+            $result['list'] = $chatLog;
+            $result['account'] = $account;
             $result['serverName'] = $serverInfo['user_name'];
             $result['groupName'] = $serverInfo['name'];
 
@@ -368,8 +373,8 @@ class History extends Common
     {
         // 验证token.
         $tokenStatus = $this->verifyToken();
-        $code        = -2;
-        $msg         = '错误';
+        $code = -2;
+        $msg = '错误';
         if ($tokenStatus === false) {
             $msg = 'token错误';
             return json(['code' => $code, 'data' => [], 'msg' => $msg]);
@@ -377,30 +382,35 @@ class History extends Common
 
         try {
             // 获取用户ID.
-            $accountId    = input('get.account_id');
+            $accountId = input('get.account_id');
+            $accountId_user = input('get.account_user_id');
+            $conversationId = intval(input('get.conversationId', 0));
+
+
             $chatLogField = ['*'];
             // 关联信息.
-            $chatLogWhere['from_id'] = $accountId;
-            $chatLogWhereOr['to_id'] = $accountId;
+            $chatLogWhere = "from_id='$accountId' and to_id='$accountId_user' and servicelog_id!=$conversationId ";
+            $chatLogWhereOr = "from_id='$accountId_user' and to_id='$accountId' and servicelog_id!=$conversationId ";
             // 分页.
             $currentPage = input('get.currentPage', '1');
-            $pageSize    = input('get.pageSize', '10');
-            $offset      = (($currentPage - 1) * $pageSize);
+            $pageSize = input('get.pageSize', '10');
+            $offset = (($currentPage - 1) * $pageSize);
             // 获取用户信息.
-            $chatLog      = model('ChatLog')->userChatLog(
+            $chatLog = model('ChatLog')->userChatLog(
                 $chatLogField,
                 $chatLogWhere,
                 $chatLogWhereOr,
                 $offset,
                 $pageSize
             );
+
             $countChatLog = model('ChatLog')->userChatLogCount($chatLogWhere, $chatLogWhereOr);
 
-            $result['total']       = $countChatLog;
-            $result['countPage']   = (ceil(($result['total']) / $pageSize));
+            $result['total'] = $countChatLog;
+            $result['countPage'] = (ceil(($result['total']) / $pageSize));
             $result['currentPage'] = $currentPage;
-            $result['list']        = $chatLog;
-            $result['pageSize']    = $pageSize;
+            $result['list'] = $chatLog;
+            $result['pageSize'] = $pageSize;
 
             return json(['code' => 1, 'data' => $result, 'msg' => '成功']);
         } catch (\Exception $e) {

+ 271 - 128
vendor/GatewayWorker_linux/GatewayWorker/Applications/whisper/Events.php

@@ -151,6 +151,10 @@ class Events
                     $token = $message['token'];
                     self::adminInit($client_id, $token);
                     break;
+                //客服主动关闭
+                case  'kfzdclose':
+                    self::kfzdclose($client_id, $message['data']);
+                    break;
                 // 客服初始化
                 case 'init':
                     $data = $message['data'];
@@ -233,8 +237,16 @@ class Events
         return true;
     }
 
-    //客服获取自己的用户列表
-    public static function kfusersmaps($kfuid, $clientid)
+    //客服主动关闭
+    public static function kfzdclose($client_id, $datas)
+    {
+        Gateway::closeClient($client_id);
+        return;
+    }
+
+//客服获取自己的用户列表
+    public
+    static function kfusersmaps($kfuid, $clientid)
     {
         $kfuid = self::getkfuid($kfuid);
         if (empty($kfuid)) {
@@ -258,8 +270,9 @@ class Events
         return true;
     }
 
-    //客服信息更新
-    public static function kfupdateinfo($client_id, $message)
+//客服信息更新
+    public
+    static function kfupdateinfo($client_id, $message)
     {
         $kfid = intval(self::getkfid($message['kfuid']));
         $kfuid = self::getkfuid($kfid);
@@ -286,8 +299,9 @@ class Events
 
     }
 
-    //将某个客服踢下线 (只能是管理员连上来的socket才可以操作)
-    public static function tickkf($client_id, $messag)
+//将某个客服踢下线 (只能是管理员连上来的socket才可以操作)
+    public
+    static function tickkf($client_id, $messag)
     {
 
         $kfuid = self::getkfuid($messag['kfuid']);
@@ -308,13 +322,14 @@ class Events
     }
 
 
-    //看一个连接是否来自管理员的
-    public static function isAdmin($client_id)
+//看一个连接是否来自管理员的
+    public
+    static function isAdmin($client_id)
     {
         return self::$redis->sismember(self::ADMINLIST, $client_id);
     }
 
-    //更新用户缓存信息
+//更新用户缓存信息
 //    public static function prohibitServer($serviceLogId)
 //    {
 //        $data = json_decode(self::$redis->HGET('SERVICELOG', $serviceLogId), true);
@@ -331,15 +346,17 @@ class Events
 //        }
 //    }
 
-    //更新用户缓存信息
-    public static function updateusercache($client_id, $dataArray)
+//更新用户缓存信息
+    public
+    static function updateusercache($client_id, $dataArray)
     {
         $uid = intval($dataArray['userid']);
         self::getUserInfoCache($uid, 180, 0);
     }
 
-    //加入工单群组(未完)
-    public static function joinServiceGroup($client_id, $message)
+//加入工单群组(未完)
+    public
+    static function joinServiceGroup($client_id, $message)
     {
         $uid = $message['uid'];
         $serviceLogId = $message['conversationId'];
@@ -358,14 +375,16 @@ class Events
         Gateway::joinGroup($client_id, $serviceLogId);
     }
 
-    //强制更新缓存信息
-    public static function updatecache($client_id, $dataArray)
+//强制更新缓存信息
+    public
+    static function updatecache($client_id, $dataArray)
     {
         self::upsystemconfig();
     }
 
-    //用户取消排队
-    public static function cancelqueue($messageArray)
+//用户取消排队
+    public
+    static function cancelqueue($messageArray)
     {
         $uid = intval($messageArray['uid']);
         if (empty($uid)) {
@@ -387,8 +406,9 @@ class Events
         return;
     }
 
-    // 弹出评价.
-    public static function getEvaluate($message)
+// 弹出评价.
+    public
+    static function getEvaluate($message)
     {
         // 获取当前会话工单.
         $data = json_decode(self::$redis->HGET('SERVICELOG', $message['conversationId']), true);
@@ -404,8 +424,9 @@ class Events
         Gateway::sendToClient($data['client_id'], json_encode($chat_message, 256));
     }
 
-    //客服聊天
-    public static function chatMessage($message)
+//客服聊天
+    public
+    static function chatMessage($message)
     {
         // 获取当前会话工单.
         $data = json_decode(self::$redis->HGET('SERVICELOG', $message['conversationId']), true);
@@ -471,16 +492,18 @@ class Events
         self::$db->insert('ws_chat_log')->cols($insertChatData)->query();
     }
 
-    //得到一个用户详细信息
-    public static function kfgetuserinfo($clientid, $id)
+//得到一个用户详细信息
+    public
+    static function kfgetuserinfo($clientid, $id)
     {
         $ret = self::$db->select('*')->from('ws_account')->where('id=:id')->bindValues(['id' => $id])->row();
         Gateway::sendToClient($clientid, json_encode(['message_type' => 'userdetailinfo', 'data' => $ret]));
         return;
     }
 
-    //获取在线客服列表
-    public static function getkfonlines()
+//获取在线客服列表
+    public
+    static function getkfonlines()
     {
         $return = [
             'message_type' => 'onlinekfs',
@@ -514,7 +537,8 @@ class Events
     }
 
 
-    public static function KFStatusCg($client_id, $message)
+    public
+    static function KFStatusCg($client_id, $message)
     {
         if (!isset($_SESSION['iskefu']) || $_SESSION['iskefu'] != 1) {
             return;
@@ -546,15 +570,17 @@ class Events
         return;
     }
 
-    //获取某个用户全部信息
-    public static function getClientIndo($id)
+//获取某个用户全部信息
+    public
+    static function getClientIndo($id)
     {
         $ret = self::$db->from('ws_accounts')->select("*")->where(['id' => $id])->row();
         return $ret;
     }
 
-    //客服接入sock,及初始化
-    public static function Kfinit($client_id, $message)
+//客服接入sock,及初始化
+    public
+    static function Kfinit($client_id, $message)
     {
         $uid = self::getPars($message, 'uid');
         $group = intval(self::getPars($message, 'group', 0));
@@ -623,6 +649,7 @@ class Events
                 'task' => 0,
                 'intime' => time(),
                 'signature' => $kfinfo['signature'],
+                'kf_token' => $kfinfo['token'],
                 'status' => 2, // 1为在线(接收分配、接收消息)2为隐身(不接收分配、只接收消息)3、休息
                 'user_info' => [],  //在会话的用户cid  key为clientid ,值为工单号               ///////弃用 改为hash数据了
             ];
@@ -637,6 +664,7 @@ class Events
         $_SESSION['uid'] = $message['uid'];
         $_SESSION['name'] = $message['name'];
         $_SESSION['client_id'] = $client_id;
+        $_SESSION['kf_token'] = $kfinfo['token'];
 
         Gateway::joinGroup($client_id, 'group_' . $message['group']);
 
@@ -657,8 +685,9 @@ class Events
     }
 
 
-    //连接信息里保存用户,以便观察
-    private static function updateWebsockName($client_id, $uid)
+//连接信息里保存用户,以便观察
+    private
+    static function updateWebsockName($client_id, $uid)
     {
         $info = json_decode(self::$redis->hget(self::WEBSOCKALLUSER, $client_id), true);
         if ($info) {
@@ -668,8 +697,9 @@ class Events
         return true;
     }
 
-    //客服掉线后 历史聊天记录
-    private static function SendKFHistoryRecord($client_id, $userId)
+//客服掉线后 历史聊天记录
+    private
+    static function SendKFHistoryRecord($client_id, $userId)
     {
         $flag = self::$redis->hget(self::KFRELONINFLAG, $userId);
         if (!empty($flag)) {
@@ -679,8 +709,9 @@ class Events
         return;
     }
 
-    //客服上线重新处理下旧的没完成的工单信息
-    private static function kfonlilneRework($clientid, $kfuid)
+//客服上线重新处理下旧的没完成的工单信息
+    private
+    static function kfonlilneRework($clientid, $kfuid)
     {
         $oldService = self::$redis->hgetall(self::getKfServiceKey($kfuid));
 
@@ -703,7 +734,8 @@ class Events
      * @param $client_id 服务ID
      * @param $message 数据
      */
-    public static function adminInit($client_id, $token)
+    public
+    static function adminInit($client_id, $token)
     {
         // 查询token是否存在.
         $systemConfigData = self::$db->query("SELECT `id` FROM `ws_admins` where `token`= '$token'");
@@ -720,8 +752,9 @@ class Events
         }
     }
 
-    //客服登陆验证
-    public static function KfloginCheck($client, $messageArray)
+//客服登陆验证
+    public
+    static function KfloginCheck($client, $messageArray)
     {
         $uid = isset($messageArray['uid']) ? $messageArray['uid'] : '';
         $token = isset($messageArray['token']) ? $messageArray['token'] : '';
@@ -739,7 +772,8 @@ class Events
         return false;
     }
 
-    public static function getUserIPinfo($ip)
+    public
+    static function getUserIPinfo($ip)
     {
         $url = 'http://www.ip168.com/chxip/doGetIp.do?keyword=' . $ip;
         $ret = file_get_contents($url);
@@ -764,8 +798,9 @@ class Events
         return $defret;
     }
 
-    //用户发送邦定用户事件
-    public static function userInitEnt($client_id, $message)
+//用户发送邦定用户事件
+    public
+    static function userInitEnt($client_id, $message)
     {
         $uid = intval($message['uid']);
         $group = intval($message['group']);
@@ -876,7 +911,8 @@ class Events
      * tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
      * 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
      */
-    public static function onClose($client_id)
+    public
+    static function onClose($client_id)
     {
         self::$redis->hdel(self::WEBSOCKALLUSER, $client_id);
         $isKefuoff = isset($_SESSION['iskefu']) ? $_SESSION['iskefu'] : 0;
@@ -901,8 +937,9 @@ class Events
     }
 
 
-    //客服掉线处理 第二版  系统调用,不能手动调用
-    public static function serviceOfflineV2($client_id, $uid)
+//客服掉线处理 第二版  系统调用,不能手动调用
+    public
+    static function serviceOfflineV2($client_id, $uid)
     {
         $group = $_SESSION['group'];
         $uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
@@ -926,8 +963,9 @@ class Events
     }
 
 
-    //客服下线了  系统调用,不能手动调用
-    public static function serviceOffline($client_id, $uid)
+//客服下线了  系统调用,不能手动调用
+    public
+    static function serviceOffline($client_id, $uid)
     {
         $group = $_SESSION['group'];
         $uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
@@ -965,8 +1003,9 @@ class Events
         return true;
     }
 
-    //用户下线了          系统调用,不能手动调用
-    public static function guestOffline($client_id, $uid)
+//用户下线了          系统调用,不能手动调用
+    public
+    static function guestOffline($client_id, $uid)
     {
         self::$redis->hset('loginTmp:' . $uid, 'uid', time());
         self::$redis->expire('loginTmp:' . $uid, 3);
@@ -1022,7 +1061,8 @@ class Events
      *
      * tips: 未有$client_id的关闭
      */
-    public static function closeUser($servicelog_id, $userId, $kf_id, $groupId)
+    public
+    static function closeUser($servicelog_id, $userId, $kf_id, $groupId)
     {
 
     }
@@ -1035,7 +1075,8 @@ class Events
      * tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
      * 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
      */
-    public static function serverClose($servicelogId, $closeBy = 0)
+    public
+    static function serverClose($servicelogId, $closeBy = 0)
     {
         // 获取当前工单数据.
         $data = json_decode(self::$redis->HGET('SERVICELOG', $servicelogId), true);
@@ -1108,7 +1149,8 @@ class Events
      * tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
      * 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
      */
-    public static function insertServerLog($servicelogId, $closeBy = 0)
+    public
+    static function insertServerLog($servicelogId, $closeBy = 0)
     {
         // 获取当前工单数据.
         $data = json_decode(self::$redis->HGET('SERVICELOG', $servicelogId), true);
@@ -1143,7 +1185,8 @@ class Events
      * 有人退出
      * @param $group
      */
-    private static function userOfflineTask($group)
+    private
+    static function userOfflineTask($group)
     {
 
     }
@@ -1154,7 +1197,8 @@ class Events
      * @param $group
      * @param $uid
      */
-    private static function userOnlineTask($group = 0, $uid = 0, $last = [], $client_id = '')
+    private
+    static function userOnlineTask($group = 0, $uid = 0, $last = [], $client_id = '')
     {
 
         if ($group && $uid) {
@@ -1239,8 +1283,9 @@ class Events
         return;
     }
 
-    //踢掉某个组没有客服的用户
-    private static function Kf_user_click($kfArrays, $userLIsts)
+//踢掉某个组没有客服的用户
+    private
+    static function Kf_user_click($kfArrays, $userLIsts)
     {
         foreach ($userLIsts as $group => $groupusers) {
             $haskf = isset($kfArrays[$group]) ? 1 : 0;
@@ -1254,8 +1299,9 @@ class Events
         return true;
     }
 
-    //开启一个会话
-    private static function BeginTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false, $isChangeKF = 0, $oldChatLog = [])
+//开启一个会话
+    private
+    static function BeginTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false, $isChangeKF = 0, $oldChatLog = [])
     {
 
         $serviceid = intval($serviceid);
@@ -1370,8 +1416,9 @@ class Events
         return;
     }
 
-    //连接至上一个会话
-    private static function BeginOldTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false)
+//连接至上一个会话
+    private
+    static function BeginOldTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false)
     {
 
         $serviceid = intval($serviceid);
@@ -1461,8 +1508,9 @@ class Events
         return;
     }
 
-    //获取工单最后20条聊天记录
-    private static function getServerChagLog($sericeId, $limit = 20)
+//获取工单最后20条聊天记录
+    private
+    static function getServerChagLog($sericeId, $limit = 20)
     {
         $ret = self::$db->select('id,from_id,from_name,to_id,to_name,content,time_line')->from('ws_chat_log')->where('servicelog_id=:sid')->bindValues(array('sid' => $sericeId))->orderByDESC(['id'])->limit($limit)->query();
         if ($ret) {
@@ -1475,8 +1523,9 @@ class Events
         return [];
     }
 
-    //用户排队数据  按组
-    private static function getUserListData()
+//用户排队数据  按组
+    private
+    static function getUserListData()
     {
         $alluser = self::$redis->hgetall(self::USERLIST);
         if (empty($alluser)) {
@@ -1506,8 +1555,9 @@ class Events
         return $allusergkarr;
     }
 
-    //找到可以接工单的客服 按组
-    private static function getWorkKfData()
+//找到可以接工单的客服 按组
+    private
+    static function getWorkKfData()
     {
         $allkfs = self::$redis->hgetall(self::KFINFOKEY);
         if (empty($allkfs)) {
@@ -1544,8 +1594,9 @@ class Events
     }
 
 
-    //找到用户是否有一条未关闭的会话
-    private static function UserHasOldTalk($uid, $database = 0)
+//找到用户是否有一条未关闭的会话
+    private
+    static function UserHasOldTalk($uid, $database = 0)
     {
         if ($database) {
             $uid = intval($uid);
@@ -1568,8 +1619,9 @@ class Events
     }
 
 
-    //今天排序累加
-    private static function todayqueuelength()
+//今天排序累加
+    private
+    static function todayqueuelength()
     {
         $dtype = 'user.queue.day.length';
         $today = date("Y-m-d");
@@ -1586,8 +1638,9 @@ class Events
         }
     }
 
-    //客服工单转单
-    private static function servicetrutoother($type, $owen, $otherkfid, $serverid, $clientuid)
+//客服工单转单
+    private
+    static function servicetrutoother($type, $owen, $otherkfid, $serverid, $clientuid)
     {
         $owen = intval(substr($owen, 2));
         $otherkfid = intval(substr($otherkfid, 2));
@@ -1609,7 +1662,8 @@ class Events
      * @param $group
      * @param $total
      */
-    private static function assignmentTask($kfList, $userList, $group, $total, $uid = 0)
+    private
+    static function assignmentTask($kfList, $userList, $group, $total, $uid = 0)
     {
 
     }
@@ -1618,7 +1672,8 @@ class Events
      * 获取最大的服务人数
      * @return int
      */
-    private static function getMaxServiceNum()
+    private
+    static function getMaxServiceNum()
     {
         $maxNumber = self::$db->query('select `max_service` from `ws_kf_config` where `id` = 1');
         if (!empty($maxNumber)) {
@@ -1634,7 +1689,8 @@ class Events
      * 将内存中的数据写入统计表
      * @param int $flag
      */
-    private static function writeLog($flag = 1)
+    private
+    static function writeLog($flag = 1)
     {
         // 上午 8点 到 22 点开始统计
         if (date('H') < 8 || date('H') > 22) {
@@ -1685,7 +1741,8 @@ class Events
      * @param $client_id 服务ID
      * @param $message 数据
      */
-    private static function toRobot($client_id, $message)
+    private
+    static function toRobot($client_id, $message)
     {
         $groups_id = $message['data']['groups_id'];
         $robot_name = $message['data']['robot_name'];
@@ -1709,7 +1766,8 @@ class Events
      * @param $client_id 服务ID
      * @param $message 数据
      */
-    private static function evaluate($message)
+    private
+    static function evaluate($message)
     {
         // 获取当前会话工单.
         $data = json_decode(self::$redis->HGET('SERVICELOG', $message['conversationId']), true);
@@ -1730,8 +1788,9 @@ class Events
     }
 
 
-    //获取系统配置
-    private static function upsystemconfig()
+//获取系统配置
+    private
+    static function upsystemconfig()
     {
         $allcont = [];
 
@@ -1791,7 +1850,8 @@ class Events
      * @param $client_id 服务ID
      * @param $message 数据
      */
-    private static function overTime()
+    private
+    static function overTime()
     {
         // 查询对话时效设置.
         $systemConfigData = self::$db->query("SELECT `systemconfig_data`,`systemconfig_enName`,`systemconfig_content` FROM `ws_systemconfig`");
@@ -1857,7 +1917,8 @@ class Events
      * 系统监控
      * @param $message 数据
      */
-    private static function systemMonitoring($adminList)
+    private
+    static function systemMonitoring($adminList)
     {
         // 查询正进行的工单.
         $serviceLog = self::$redis->hGetall('SERVICELOG');
@@ -1929,8 +1990,9 @@ class Events
         }
     }
 
-    //客户工单内部组转接
-    public static function changeOtherhKeFu($client_id, $smessage)
+//客户工单内部组转接
+    public
+    static function changeOtherhKeFu($client_id, $smessage)
     {
         $message = $smessage['data'];
 
@@ -1999,8 +2061,9 @@ class Events
     }
 
 
-    //客服在线状态写组
-    private static function writeLogKfStatus($kf, $status, $flag = 1)
+//客服在线状态写组
+    private
+    static function writeLogKfStatus($kf, $status, $flag = 1)
     {
         if ($flag == 1) {
             $status = intval($status);
@@ -2018,7 +2081,8 @@ class Events
     }
 
 
-    public static function resetServiceLog($kfid = 0)
+    public
+    static function resetServiceLog($kfid = 0)
     {
         $t = time() - 24 * 3600 * 7;
         $now = time();
@@ -2043,7 +2107,8 @@ class Events
 
     }
 
-    public static function onWorkerStop($businessWorker)
+    public
+    static function onWorkerStop($businessWorker)
     {
         if ($businessWorker->id == 1) {
             self::resetServiceLog();
@@ -2051,20 +2116,23 @@ class Events
     }
 
 
-    //用户下线通知
-    private static function userCloseNotice($client_id, $cuid, $group)
+//用户下线通知
+    private
+    static function userCloseNotice($client_id, $cuid, $group)
     {
 
 
     }
 
-    //踢掉同一用户的旧用户
-    private static function tickOlduser($uid)
+//踢掉同一用户的旧用户
+    private
+    static function tickOlduser($uid)
     {
 
     }
 
-    private static function DebugOut($msg, $title = '', $type = 'info')
+    private
+    static function DebugOut($msg, $title = '', $type = 'info')
     {
         $config = self::$global->systemconfig;
         if (!isset($config['isdebug']) || empty($config['isdebug']['systemconfig_data'])) {
@@ -2078,8 +2146,9 @@ class Events
     }
 
 
-    //定时器相关
-    private static function TimerThing($worker)
+//定时器相关
+    private
+    static function TimerThing($worker)
     {
 
         // 当天的累积接入值
@@ -2226,19 +2295,22 @@ class Events
 
     }
 
-    //调试使用
-    public static function mydebug($client_id, $message)
+//调试使用
+    public
+    static function mydebug($client_id, $message)
     {
 
     }
 
-    public static function MySendMsg($clientId, $msg)
+    public
+    static function MySendMsg($clientId, $msg)
     {
         Gateway::sendToClient($clientId, $msg);
     }
 
-    //得到客服的UID字符值
-    public static function getkfuid($uid)
+//得到客服的UID字符值
+    public
+    static function getkfuid($uid)
     {
         if (substr($uid, 0, 2) == 'KF') {
             return $uid;
@@ -2247,8 +2319,9 @@ class Events
         }
     }
 
-    //得到客服的ID整数值
-    public static function getkfid($id)
+//得到客服的ID整数值
+    public
+    static function getkfid($id)
     {
         if (strtolower(substr($id, 0, 2)) == 'kf') {
             return intval(substr($id, 2));
@@ -2256,8 +2329,9 @@ class Events
         return intval($id);
     }
 
-    //从数组中获取参数
-    public static function getPars($array, $key, $default = '')
+//从数组中获取参数
+    public
+    static function getPars($array, $key, $default = '')
     {
         if (isset($array[$key])) {
             return $array[$key];
@@ -2265,8 +2339,9 @@ class Events
         return $default;
     }
 
-    //获取在线客服信息
-    public static function getOnlineKfData($group = 0, $status = 0)
+//获取在线客服信息
+    public
+    static function getOnlineKfData($group = 0, $status = 0)
     {
         $all = self::$redis->hgetall(self::KFINFOKEY);
         if (!$all) {
@@ -2290,8 +2365,9 @@ class Events
         return $return;
     }
 
-    //找到在排队的用户按时间先后顺序
-    public static function getUselistData($group)
+//找到在排队的用户按时间先后顺序
+    public
+    static function getUselistData($group)
     {
         $all = self::$redis->hgetall(self::USERLIST);
         if (!$all) {
@@ -2313,8 +2389,9 @@ class Events
         return $return;
     }
 
-    //对客服的用户user_info数组进行加减操作  $clientid用户连接号    opt=1添加 0删除   $serverid服务工单号
-    public static function ArrayDataopt($array, $clientid, $opt, $serverid = 0)
+//对客服的用户user_info数组进行加减操作  $clientid用户连接号    opt=1添加 0删除   $serverid服务工单号
+    public
+    static function ArrayDataopt($array, $clientid, $opt, $serverid = 0)
     {
         if (!is_array($array)) {
             return [];
@@ -2331,30 +2408,34 @@ class Events
         }
     }
 
-    //用户重要性标签
-    private static function getUserLabAll($client_id, $message)
+//用户重要性标签
+    private
+    static function getUserLabAll($client_id, $message)
     {
         $data = self::$global->accountslabel;
         Gateway::sendToCurrentClient(json_encode(['message_type' => 'userlabeall', 'data' => $data], 256));
     }
 
-    //调试使用
-    public static function debug($dataArray)
+//调试使用
+    public
+    static function debug($dataArray)
     {
 
 
     }
 
 
-    //客服的工单hash健名
-    public static function getKfServiceKey($kfuid)
+//客服的工单hash健名
+    public
+    static function getKfServiceKey($kfuid)
     {
         return self::KFSERVICES . ':' . $kfuid;
     }
 
 
-    //获取客服所有连接信息及工单信息
-    public static function getKfTasks($kfuid)
+//获取客服所有连接信息及工单信息
+    public
+    static function getKfTasks($kfuid)
     {
         $all = self::$redis->hgetall(self::getKfServiceKey($kfuid));
         if (empty($all)) {
@@ -2363,8 +2444,9 @@ class Events
         return $all;
     }
 
-    //设置或删除客服的连接  opt==0删除 1添加
-    public static function setKfTasks($kfuid, $clientid, $opt = 0, $serviceid = 0)
+//设置或删除客服的连接  opt==0删除 1添加
+    public
+    static function setKfTasks($kfuid, $clientid, $opt = 0, $serviceid = 0)
     {
         $k = self::getKfServiceKey($kfuid);
         if ($opt == 0) {
@@ -2374,8 +2456,9 @@ class Events
         self::$redis->hset($k, $clientid, $serviceid);
     }
 
-    //有旧单时,更新连接ID
-    public static function updteKfTasksByservicd($kfuid, $serciceid, $newclientid, $opt = 1)
+//有旧单时,更新连接ID
+    public
+    static function updteKfTasksByservicd($kfuid, $serciceid, $newclientid, $opt = 1)
     {
         $tkey = self::getKfServiceKey($kfuid);
         $all = self::getKfTasks($kfuid);
@@ -2408,8 +2491,9 @@ class Events
 
     }
 
-    //客服用户映射哈希表
-    public static function addKfUsermap($kfuid, $userid = 0, $opt = 1)
+//客服用户映射哈希表
+    public
+    static function addKfUsermap($kfuid, $userid = 0, $opt = 1)
     {
         $kfuid = self::getkfuid($kfuid);
         $uid = intval($userid);
@@ -2421,14 +2505,15 @@ class Events
             if ($userid) {
                 $ret = self::$redis->hdel($key, $uid);
             } else {
-                $ret = self::del($key);
+                $ret = self::$redis->del($key);
             }
         }
         return $ret;
     }
 
-    //缓存获取用户信息
-    public static function getUserInfoCache($uid, $cacheTime = 180, $fcache = 1)
+//缓存获取用户信息
+    public
+    static function getUserInfoCache($uid, $cacheTime = 180, $fcache = 1)
     {
         $uid = intval($uid);
         $key = 'TmpUserInfo:' . $uid;
@@ -2446,8 +2531,9 @@ class Events
         return $date;
     }
 
-    //检查一个新人是否需要排队
-    public static function HasInqueue($group)
+//检查一个新人是否需要排队
+    public
+    static function HasInqueue($group)
     {
         $group = intval($group);
         $allserveric = self::$redis->hgetall(self::SERVICELOG);
@@ -2476,5 +2562,62 @@ class Events
         return false;
     }
 
+
+//公共请求接口
+    public
+    static function getApiData($url, $paras, $api_token, $user_token = '')
+    {
+        if (empty($user_token)) {
+            if (isset($_SESSION['kf_token'])) {
+                $user_token = $_SESSION['kf_token'];
+            } else {
+                return ['code' => 0, 'msg' => 'token empty error', 'data' => []];
+            }
+        }
+
+        $ret = self::request_post($url, $paras, $api_token, $user_token);
+        if ($ret) {
+            $ret = json_decode($ret, true);
+            return $ret;
+        } else {
+            return ['code' => 0, 'msg' => 'api ret error', 'data' => []];
+        }
+    }
+
+//api token 生成
+    public
+    static function apiTokenMake($action, $controller = 'ext', $module = 'service')
+    {
+        return md5(strtolower($action . 'Customer-Service' . $controller . $module));
+    }
+
+    public
+    static function request_post($url = '', $param = '', $apitoken = '', $usetoken = '')
+    {
+        if (empty($url)) {
+            return false;
+        }
+
+        $headers = array(
+            'apiToken' => $apitoken,
+            'userToken' => $usetoken,
+        );
+
+        $postUrl = $url;
+        $curlPost = $param;
+        $ch = curl_init();//初始化curl
+        curl_setopt($ch, CURLOPT_URL, $postUrl);//抓取指定网页
+        curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
+        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
+        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
+        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
+        $data = curl_exec($ch);//运行curl
+        curl_close($ch);
+
+        return $data;
+    }
+
 }
 

+ 234 - 126
vendor/GatewayWorker_windows/Applications/whisper/Events.php

@@ -151,6 +151,10 @@ class Events
                     $token = $message['token'];
                     self::adminInit($client_id, $token);
                     break;
+                //客服主动关闭
+                case  'kfzdclose':
+                    self::kfzdclose($client_id, $message['data']);
+                    break;
                 // 客服初始化
                 case 'init':
                     $data = $message['data'];
@@ -233,7 +237,14 @@ class Events
         return true;
     }
 
-    //客服获取自己的用户列表
+    //客服主动关闭
+    public static function kfzdclose($client_id, $datas)
+    {
+        Gateway::closeClient($client_id);
+        return;
+    }
+
+//客服获取自己的用户列表
     public static function kfusersmaps($kfuid, $clientid)
     {
         $kfuid = self::getkfuid($kfuid);
@@ -258,7 +269,7 @@ class Events
         return true;
     }
 
-    //客服信息更新
+//客服信息更新
     public static function kfupdateinfo($client_id, $message)
     {
         $kfid = intval(self::getkfid($message['kfuid']));
@@ -286,7 +297,7 @@ class Events
 
     }
 
-    //将某个客服踢下线 (只能是管理员连上来的socket才可以操作)
+//将某个客服踢下线 (只能是管理员连上来的socket才可以操作)
     public static function tickkf($client_id, $messag)
     {
 
@@ -308,13 +319,13 @@ class Events
     }
 
 
-    //看一个连接是否来自管理员的
+//看一个连接是否来自管理员的
     public static function isAdmin($client_id)
     {
         return self::$redis->sismember(self::ADMINLIST, $client_id);
     }
 
-    //更新用户缓存信息
+//更新用户缓存信息
 //    public static function prohibitServer($serviceLogId)
 //    {
 //        $data = json_decode(self::$redis->HGET('SERVICELOG', $serviceLogId), true);
@@ -331,14 +342,14 @@ class Events
 //        }
 //    }
 
-    //更新用户缓存信息
+//更新用户缓存信息
     public static function updateusercache($client_id, $dataArray)
     {
         $uid = intval($dataArray['userid']);
         self::getUserInfoCache($uid, 180, 0);
     }
 
-    //加入工单群组(未完)
+//加入工单群组(未完)
     public static function joinServiceGroup($client_id, $message)
     {
         $uid = $message['uid'];
@@ -358,13 +369,13 @@ class Events
         Gateway::joinGroup($client_id, $serviceLogId);
     }
 
-    //强制更新缓存信息
+//强制更新缓存信息
     public static function updatecache($client_id, $dataArray)
     {
         self::upsystemconfig();
     }
 
-    //用户取消排队
+//用户取消排队
     public static function cancelqueue($messageArray)
     {
         $uid = intval($messageArray['uid']);
@@ -387,7 +398,7 @@ class Events
         return;
     }
 
-    // 弹出评价.
+// 弹出评价.
     public static function getEvaluate($message)
     {
         // 获取当前会话工单.
@@ -404,7 +415,7 @@ class Events
         Gateway::sendToClient($data['client_id'], json_encode($chat_message, 256));
     }
 
-    //客服聊天
+//客服聊天
     public static function chatMessage($message)
     {
         // 获取当前会话工单.
@@ -471,16 +482,18 @@ class Events
         self::$db->insert('ws_chat_log')->cols($insertChatData)->query();
     }
 
-    //得到一个用户详细信息
-    public static function kfgetuserinfo($clientid, $id)
+//得到一个用户详细信息
+    public
+    static function kfgetuserinfo($clientid, $id)
     {
         $ret = self::$db->select('*')->from('ws_account')->where('id=:id')->bindValues(['id' => $id])->row();
         Gateway::sendToClient($clientid, json_encode(['message_type' => 'userdetailinfo', 'data' => $ret]));
         return;
     }
 
-    //获取在线客服列表
-    public static function getkfonlines()
+//获取在线客服列表
+    public
+    static function getkfonlines()
     {
         $return = [
             'message_type' => 'onlinekfs',
@@ -514,7 +527,8 @@ class Events
     }
 
 
-    public static function KFStatusCg($client_id, $message)
+    public
+    static function KFStatusCg($client_id, $message)
     {
         if (!isset($_SESSION['iskefu']) || $_SESSION['iskefu'] != 1) {
             return;
@@ -546,15 +560,17 @@ class Events
         return;
     }
 
-    //获取某个用户全部信息
-    public static function getClientIndo($id)
+//获取某个用户全部信息
+    public
+    static function getClientIndo($id)
     {
         $ret = self::$db->from('ws_accounts')->select("*")->where(['id' => $id])->row();
         return $ret;
     }
 
-    //客服接入sock,及初始化
-    public static function Kfinit($client_id, $message)
+//客服接入sock,及初始化
+    public
+    static function Kfinit($client_id, $message)
     {
         $uid = self::getPars($message, 'uid');
         $group = intval(self::getPars($message, 'group', 0));
@@ -659,8 +675,9 @@ class Events
     }
 
 
-    //连接信息里保存用户,以便观察
-    private static function updateWebsockName($client_id, $uid)
+//连接信息里保存用户,以便观察
+    private
+    static function updateWebsockName($client_id, $uid)
     {
         $info = json_decode(self::$redis->hget(self::WEBSOCKALLUSER, $client_id), true);
         if ($info) {
@@ -670,8 +687,9 @@ class Events
         return true;
     }
 
-    //客服掉线后 历史聊天记录
-    private static function SendKFHistoryRecord($client_id, $userId)
+//客服掉线后 历史聊天记录
+    private
+    static function SendKFHistoryRecord($client_id, $userId)
     {
         $flag = self::$redis->hget(self::KFRELONINFLAG, $userId);
         if (!empty($flag)) {
@@ -681,8 +699,9 @@ class Events
         return;
     }
 
-    //客服上线重新处理下旧的没完成的工单信息
-    private static function kfonlilneRework($clientid, $kfuid)
+//客服上线重新处理下旧的没完成的工单信息
+    private
+    static function kfonlilneRework($clientid, $kfuid)
     {
         $oldService = self::$redis->hgetall(self::getKfServiceKey($kfuid));
 
@@ -705,7 +724,8 @@ class Events
      * @param $client_id 服务ID
      * @param $message 数据
      */
-    public static function adminInit($client_id, $token)
+    public
+    static function adminInit($client_id, $token)
     {
         // 查询token是否存在.
         $systemConfigData = self::$db->query("SELECT `id` FROM `ws_admins` where `token`= '$token'");
@@ -722,8 +742,9 @@ class Events
         }
     }
 
-    //客服登陆验证
-    public static function KfloginCheck($client, $messageArray)
+//客服登陆验证
+    public
+    static function KfloginCheck($client, $messageArray)
     {
         $uid = isset($messageArray['uid']) ? $messageArray['uid'] : '';
         $token = isset($messageArray['token']) ? $messageArray['token'] : '';
@@ -741,7 +762,8 @@ class Events
         return false;
     }
 
-    public static function getUserIPinfo($ip)
+    public
+    static function getUserIPinfo($ip)
     {
         $url = 'http://www.ip168.com/chxip/doGetIp.do?keyword=' . $ip;
         $ret = file_get_contents($url);
@@ -766,8 +788,9 @@ class Events
         return $defret;
     }
 
-    //用户发送邦定用户事件
-    public static function userInitEnt($client_id, $message)
+//用户发送邦定用户事件
+    public
+    static function userInitEnt($client_id, $message)
     {
         $uid = intval($message['uid']);
         $group = intval($message['group']);
@@ -878,7 +901,8 @@ class Events
      * tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
      * 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
      */
-    public static function onClose($client_id)
+    public
+    static function onClose($client_id)
     {
         self::$redis->hdel(self::WEBSOCKALLUSER, $client_id);
         $isKefuoff = isset($_SESSION['iskefu']) ? $_SESSION['iskefu'] : 0;
@@ -903,8 +927,9 @@ class Events
     }
 
 
-    //客服掉线处理 第二版  系统调用,不能手动调用
-    public static function serviceOfflineV2($client_id, $uid)
+//客服掉线处理 第二版  系统调用,不能手动调用
+    public
+    static function serviceOfflineV2($client_id, $uid)
     {
         $group = $_SESSION['group'];
         $uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
@@ -928,8 +953,9 @@ class Events
     }
 
 
-    //客服下线了  系统调用,不能手动调用
-    public static function serviceOffline($client_id, $uid)
+//客服下线了  系统调用,不能手动调用
+    public
+    static function serviceOffline($client_id, $uid)
     {
         $group = $_SESSION['group'];
         $uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
@@ -967,8 +993,9 @@ class Events
         return true;
     }
 
-    //用户下线了          系统调用,不能手动调用
-    public static function guestOffline($client_id, $uid)
+//用户下线了          系统调用,不能手动调用
+    public
+    static function guestOffline($client_id, $uid)
     {
         self::$redis->hset('loginTmp:' . $uid, 'uid', time());
         self::$redis->expire('loginTmp:' . $uid, 3);
@@ -1024,7 +1051,8 @@ class Events
      *
      * tips: 未有$client_id的关闭
      */
-    public static function closeUser($servicelog_id, $userId, $kf_id, $groupId)
+    public
+    static function closeUser($servicelog_id, $userId, $kf_id, $groupId)
     {
 
     }
@@ -1037,7 +1065,8 @@ class Events
      * tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
      * 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
      */
-    public static function serverClose($servicelogId, $closeBy = 0)
+    public
+    static function serverClose($servicelogId, $closeBy = 0)
     {
         // 获取当前工单数据.
         $data = json_decode(self::$redis->HGET('SERVICELOG', $servicelogId), true);
@@ -1110,7 +1139,8 @@ class Events
      * tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
      * 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
      */
-    public static function insertServerLog($servicelogId, $closeBy = 0)
+    public
+    static function insertServerLog($servicelogId, $closeBy = 0)
     {
         // 获取当前工单数据.
         $data = json_decode(self::$redis->HGET('SERVICELOG', $servicelogId), true);
@@ -1145,7 +1175,8 @@ class Events
      * 有人退出
      * @param $group
      */
-    private static function userOfflineTask($group)
+    private
+    static function userOfflineTask($group)
     {
 
     }
@@ -1156,7 +1187,8 @@ class Events
      * @param $group
      * @param $uid
      */
-    private static function userOnlineTask($group = 0, $uid = 0, $last = [], $client_id = '')
+    private
+    static function userOnlineTask($group = 0, $uid = 0, $last = [], $client_id = '')
     {
 
         if ($group && $uid) {
@@ -1241,8 +1273,9 @@ class Events
         return;
     }
 
-    //踢掉某个组没有客服的用户
-    private static function Kf_user_click($kfArrays, $userLIsts)
+//踢掉某个组没有客服的用户
+    private
+    static function Kf_user_click($kfArrays, $userLIsts)
     {
         foreach ($userLIsts as $group => $groupusers) {
             $haskf = isset($kfArrays[$group]) ? 1 : 0;
@@ -1256,8 +1289,9 @@ class Events
         return true;
     }
 
-    //开启一个会话
-    private static function BeginTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false, $isChangeKF = 0, $oldChatLog = [])
+//开启一个会话
+    private
+    static function BeginTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false, $isChangeKF = 0, $oldChatLog = [])
     {
 
         $serviceid = intval($serviceid);
@@ -1372,8 +1406,9 @@ class Events
         return;
     }
 
-    //连接至上一个会话
-    private static function BeginOldTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false)
+//连接至上一个会话
+    private
+    static function BeginOldTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false)
     {
 
         $serviceid = intval($serviceid);
@@ -1463,8 +1498,9 @@ class Events
         return;
     }
 
-    //获取工单最后20条聊天记录
-    private static function getServerChagLog($sericeId, $limit = 20)
+//获取工单最后20条聊天记录
+    private
+    static function getServerChagLog($sericeId, $limit = 20)
     {
         $ret = self::$db->select('id,from_id,from_name,to_id,to_name,content,time_line')->from('ws_chat_log')->where('servicelog_id=:sid')->bindValues(array('sid' => $sericeId))->orderByDESC(['id'])->limit($limit)->query();
         if ($ret) {
@@ -1477,8 +1513,9 @@ class Events
         return [];
     }
 
-    //用户排队数据  按组
-    private static function getUserListData()
+//用户排队数据  按组
+    private
+    static function getUserListData()
     {
         $alluser = self::$redis->hgetall(self::USERLIST);
         if (empty($alluser)) {
@@ -1508,8 +1545,9 @@ class Events
         return $allusergkarr;
     }
 
-    //找到可以接工单的客服 按组
-    private static function getWorkKfData()
+//找到可以接工单的客服 按组
+    private
+    static function getWorkKfData()
     {
         $allkfs = self::$redis->hgetall(self::KFINFOKEY);
         if (empty($allkfs)) {
@@ -1546,8 +1584,9 @@ class Events
     }
 
 
-    //找到用户是否有一条未关闭的会话
-    private static function UserHasOldTalk($uid, $database = 0)
+//找到用户是否有一条未关闭的会话
+    private
+    static function UserHasOldTalk($uid, $database = 0)
     {
         if ($database) {
             $uid = intval($uid);
@@ -1570,8 +1609,9 @@ class Events
     }
 
 
-    //今天排序累加
-    private static function todayqueuelength()
+//今天排序累加
+    private
+    static function todayqueuelength()
     {
         $dtype = 'user.queue.day.length';
         $today = date("Y-m-d");
@@ -1588,8 +1628,9 @@ class Events
         }
     }
 
-    //客服工单转单
-    private static function servicetrutoother($type, $owen, $otherkfid, $serverid, $clientuid)
+//客服工单转单
+    private
+    static function servicetrutoother($type, $owen, $otherkfid, $serverid, $clientuid)
     {
         $owen = intval(substr($owen, 2));
         $otherkfid = intval(substr($otherkfid, 2));
@@ -1611,7 +1652,8 @@ class Events
      * @param $group
      * @param $total
      */
-    private static function assignmentTask($kfList, $userList, $group, $total, $uid = 0)
+    private
+    static function assignmentTask($kfList, $userList, $group, $total, $uid = 0)
     {
 
     }
@@ -1620,7 +1662,8 @@ class Events
      * 获取最大的服务人数
      * @return int
      */
-    private static function getMaxServiceNum()
+    private
+    static function getMaxServiceNum()
     {
         $maxNumber = self::$db->query('select `max_service` from `ws_kf_config` where `id` = 1');
         if (!empty($maxNumber)) {
@@ -1636,7 +1679,8 @@ class Events
      * 将内存中的数据写入统计表
      * @param int $flag
      */
-    private static function writeLog($flag = 1)
+    private
+    static function writeLog($flag = 1)
     {
         // 上午 8点 到 22 点开始统计
         if (date('H') < 8 || date('H') > 22) {
@@ -1687,7 +1731,8 @@ class Events
      * @param $client_id 服务ID
      * @param $message 数据
      */
-    private static function toRobot($client_id, $message)
+    private
+    static function toRobot($client_id, $message)
     {
         $groups_id = $message['data']['groups_id'];
         $robot_name = $message['data']['robot_name'];
@@ -1711,7 +1756,8 @@ class Events
      * @param $client_id 服务ID
      * @param $message 数据
      */
-    private static function evaluate($message)
+    private
+    static function evaluate($message)
     {
         // 获取当前会话工单.
         $data = json_decode(self::$redis->HGET('SERVICELOG', $message['conversationId']), true);
@@ -1732,8 +1778,9 @@ class Events
     }
 
 
-    //获取系统配置
-    private static function upsystemconfig()
+//获取系统配置
+    private
+    static function upsystemconfig()
     {
         $allcont = [];
 
@@ -1793,7 +1840,8 @@ class Events
      * @param $client_id 服务ID
      * @param $message 数据
      */
-    private static function overTime()
+    private
+    static function overTime()
     {
         // 查询对话时效设置.
         $systemConfigData = self::$db->query("SELECT `systemconfig_data`,`systemconfig_enName`,`systemconfig_content` FROM `ws_systemconfig`");
@@ -1859,7 +1907,8 @@ class Events
      * 系统监控
      * @param $message 数据
      */
-    private static function systemMonitoring($adminList)
+    private
+    static function systemMonitoring($adminList)
     {
         // 查询正进行的工单.
         $serviceLog = self::$redis->hGetall('SERVICELOG');
@@ -1931,8 +1980,9 @@ class Events
         }
     }
 
-    //客户工单内部组转接
-    public static function changeOtherhKeFu($client_id, $smessage)
+//客户工单内部组转接
+    public
+    static function changeOtherhKeFu($client_id, $smessage)
     {
         $message = $smessage['data'];
 
@@ -2001,8 +2051,9 @@ class Events
     }
 
 
-    //客服在线状态写组
-    private static function writeLogKfStatus($kf, $status, $flag = 1)
+//客服在线状态写组
+    private
+    static function writeLogKfStatus($kf, $status, $flag = 1)
     {
         if ($flag == 1) {
             $status = intval($status);
@@ -2020,7 +2071,8 @@ class Events
     }
 
 
-    public static function resetServiceLog($kfid = 0)
+    public
+    static function resetServiceLog($kfid = 0)
     {
         $t = time() - 24 * 3600 * 7;
         $now = time();
@@ -2045,7 +2097,8 @@ class Events
 
     }
 
-    public static function onWorkerStop($businessWorker)
+    public
+    static function onWorkerStop($businessWorker)
     {
         if ($businessWorker->id == 1) {
             self::resetServiceLog();
@@ -2053,20 +2106,23 @@ class Events
     }
 
 
-    //用户下线通知
-    private static function userCloseNotice($client_id, $cuid, $group)
+//用户下线通知
+    private
+    static function userCloseNotice($client_id, $cuid, $group)
     {
 
 
     }
 
-    //踢掉同一用户的旧用户
-    private static function tickOlduser($uid)
+//踢掉同一用户的旧用户
+    private
+    static function tickOlduser($uid)
     {
 
     }
 
-    private static function DebugOut($msg, $title = '', $type = 'info')
+    private
+    static function DebugOut($msg, $title = '', $type = 'info')
     {
         $config = self::$global->systemconfig;
         if (!isset($config['isdebug']) || empty($config['isdebug']['systemconfig_data'])) {
@@ -2080,8 +2136,9 @@ class Events
     }
 
 
-    //定时器相关
-    private static function TimerThing($worker)
+//定时器相关
+    private
+    static function TimerThing($worker)
     {
 
         // 当天的累积接入值
@@ -2228,19 +2285,22 @@ class Events
 
     }
 
-    //调试使用
-    public static function mydebug($client_id, $message)
+//调试使用
+    public
+    static function mydebug($client_id, $message)
     {
 
     }
 
-    public static function MySendMsg($clientId, $msg)
+    public
+    static function MySendMsg($clientId, $msg)
     {
         Gateway::sendToClient($clientId, $msg);
     }
 
-    //得到客服的UID字符值
-    public static function getkfuid($uid)
+//得到客服的UID字符值
+    public
+    static function getkfuid($uid)
     {
         if (substr($uid, 0, 2) == 'KF') {
             return $uid;
@@ -2249,8 +2309,9 @@ class Events
         }
     }
 
-    //得到客服的ID整数值
-    public static function getkfid($id)
+//得到客服的ID整数值
+    public
+    static function getkfid($id)
     {
         if (strtolower(substr($id, 0, 2)) == 'kf') {
             return intval(substr($id, 2));
@@ -2258,8 +2319,9 @@ class Events
         return intval($id);
     }
 
-    //从数组中获取参数
-    public static function getPars($array, $key, $default = '')
+//从数组中获取参数
+    public
+    static function getPars($array, $key, $default = '')
     {
         if (isset($array[$key])) {
             return $array[$key];
@@ -2267,8 +2329,9 @@ class Events
         return $default;
     }
 
-    //获取在线客服信息
-    public static function getOnlineKfData($group = 0, $status = 0)
+//获取在线客服信息
+    public
+    static function getOnlineKfData($group = 0, $status = 0)
     {
         $all = self::$redis->hgetall(self::KFINFOKEY);
         if (!$all) {
@@ -2292,8 +2355,9 @@ class Events
         return $return;
     }
 
-    //找到在排队的用户按时间先后顺序
-    public static function getUselistData($group)
+//找到在排队的用户按时间先后顺序
+    public
+    static function getUselistData($group)
     {
         $all = self::$redis->hgetall(self::USERLIST);
         if (!$all) {
@@ -2315,8 +2379,9 @@ class Events
         return $return;
     }
 
-    //对客服的用户user_info数组进行加减操作  $clientid用户连接号    opt=1添加 0删除   $serverid服务工单号
-    public static function ArrayDataopt($array, $clientid, $opt, $serverid = 0)
+//对客服的用户user_info数组进行加减操作  $clientid用户连接号    opt=1添加 0删除   $serverid服务工单号
+    public
+    static function ArrayDataopt($array, $clientid, $opt, $serverid = 0)
     {
         if (!is_array($array)) {
             return [];
@@ -2333,30 +2398,34 @@ class Events
         }
     }
 
-    //用户重要性标签
-    private static function getUserLabAll($client_id, $message)
+//用户重要性标签
+    private
+    static function getUserLabAll($client_id, $message)
     {
         $data = self::$global->accountslabel;
         Gateway::sendToCurrentClient(json_encode(['message_type' => 'userlabeall', 'data' => $data], 256));
     }
 
-    //调试使用
-    public static function debug($dataArray)
+//调试使用
+    public
+    static function debug($dataArray)
     {
 
 
     }
 
 
-    //客服的工单hash健名
-    public static function getKfServiceKey($kfuid)
+//客服的工单hash健名
+    public
+    static function getKfServiceKey($kfuid)
     {
         return self::KFSERVICES . ':' . $kfuid;
     }
 
 
-    //获取客服所有连接信息及工单信息
-    public static function getKfTasks($kfuid)
+//获取客服所有连接信息及工单信息
+    public
+    static function getKfTasks($kfuid)
     {
         $all = self::$redis->hgetall(self::getKfServiceKey($kfuid));
         if (empty($all)) {
@@ -2365,8 +2434,9 @@ class Events
         return $all;
     }
 
-    //设置或删除客服的连接  opt==0删除 1添加
-    public static function setKfTasks($kfuid, $clientid, $opt = 0, $serviceid = 0)
+//设置或删除客服的连接  opt==0删除 1添加
+    public
+    static function setKfTasks($kfuid, $clientid, $opt = 0, $serviceid = 0)
     {
         $k = self::getKfServiceKey($kfuid);
         if ($opt == 0) {
@@ -2376,8 +2446,9 @@ class Events
         self::$redis->hset($k, $clientid, $serviceid);
     }
 
-    //有旧单时,更新连接ID
-    public static function updteKfTasksByservicd($kfuid, $serciceid, $newclientid, $opt = 1)
+//有旧单时,更新连接ID
+    public
+    static function updteKfTasksByservicd($kfuid, $serciceid, $newclientid, $opt = 1)
     {
         $tkey = self::getKfServiceKey($kfuid);
         $all = self::getKfTasks($kfuid);
@@ -2410,8 +2481,9 @@ class Events
 
     }
 
-    //客服用户映射哈希表
-    public static function addKfUsermap($kfuid, $userid = 0, $opt = 1)
+//客服用户映射哈希表
+    public
+    static function addKfUsermap($kfuid, $userid = 0, $opt = 1)
     {
         $kfuid = self::getkfuid($kfuid);
         $uid = intval($userid);
@@ -2423,14 +2495,15 @@ class Events
             if ($userid) {
                 $ret = self::$redis->hdel($key, $uid);
             } else {
-                $ret = self::del($key);
+                $ret = self::$redis->del($key);
             }
         }
         return $ret;
     }
 
-    //缓存获取用户信息
-    public static function getUserInfoCache($uid, $cacheTime = 180, $fcache = 1)
+//缓存获取用户信息
+    public
+    static function getUserInfoCache($uid, $cacheTime = 180, $fcache = 1)
     {
         $uid = intval($uid);
         $key = 'TmpUserInfo:' . $uid;
@@ -2448,8 +2521,9 @@ class Events
         return $date;
     }
 
-    //检查一个新人是否需要排队
-    public static function HasInqueue($group)
+//检查一个新人是否需要排队
+    public
+    static function HasInqueue($group)
     {
         $group = intval($group);
         $allserveric = self::$redis->hgetall(self::SERVICELOG);
@@ -2479,27 +2553,61 @@ class Events
     }
 
 
-    //公共请求接口
-    public static function getApiData($url, $paras, $api_token, $user_token)
+//公共请求接口
+    public
+    static function getApiData($url, $paras, $api_token, $user_token = '')
     {
         if (empty($user_token)) {
             if (isset($_SESSION['kf_token'])) {
                 $user_token = $_SESSION['kf_token'];
             } else {
-                return ['status' => 0, 'msg' => 'token empty error', 'data' => []];
+                return ['code' => 0, 'msg' => 'token empty error', 'data' => []];
             }
         }
 
-        
-
-
+        $ret = self::request_post($url, $paras, $api_token, $user_token);
+        if ($ret) {
+            $ret = json_decode($ret, true);
+            return $ret;
+        } else {
+            return ['code' => 0, 'msg' => 'api ret error', 'data' => []];
+        }
     }
 
-    //api token 生成
-    public static function apiTokenMake($module, $controller, $action)
+//api token 生成
+    public
+    static function apiTokenMake($action, $controller = 'ext', $module = 'service')
     {
         return md5(strtolower($action . 'Customer-Service' . $controller . $module));
     }
 
+    public
+    static function request_post($url = '', $param = '', $apitoken = '', $usetoken = '')
+    {
+        if (empty($url)) {
+            return false;
+        }
+
+        $headers = array(
+            'apiToken' => $apitoken,
+            'userToken' => $usetoken,
+        );
+
+        $postUrl = $url;
+        $curlPost = $param;
+        $ch = curl_init();//初始化curl
+        curl_setopt($ch, CURLOPT_URL, $postUrl);//抓取指定网页
+        curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
+        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
+        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
+        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
+        $data = curl_exec($ch);//运行curl
+        curl_close($ch);
+
+        return $data;
+    }
+
 }