|
@@ -427,7 +427,7 @@ class Events
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 管理员
|
|
|
|
|
|
|
+ * 管理员登陆验证
|
|
|
* @param $client_id 服务ID
|
|
* @param $client_id 服务ID
|
|
|
* @param $message 数据
|
|
* @param $message 数据
|
|
|
*/
|
|
*/
|
|
@@ -496,9 +496,10 @@ class Events
|
|
|
Gateway::closeCurrentClient();
|
|
Gateway::closeCurrentClient();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
+ $last = self::UserHasOldTalk($uid);
|
|
|
|
|
|
|
|
$onlinekf = self::getOnlineKfData($group, 1);
|
|
$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::sendToClient($client_id, json_encode(['message_type' => 'notice', 'content' => '暂时没有客服上班,请稍后再咨询。'], 256));
|
|
|
//Gateway::closeClient($client_id);
|
|
//Gateway::closeClient($client_id);
|
|
|
return;
|
|
return;
|
|
@@ -535,7 +536,7 @@ class Events
|
|
|
$_SESSION['uid'] = $message['uid'];
|
|
$_SESSION['uid'] = $message['uid'];
|
|
|
|
|
|
|
|
// 尝试分配新会员进入服务
|
|
// 尝试分配新会员进入服务
|
|
|
- self::userOnlineTask($group, $uid);
|
|
|
|
|
|
|
+ self::userOnlineTask($group, $uid, $last, $client_id);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -574,6 +575,7 @@ class Events
|
|
|
{
|
|
{
|
|
|
$group = $_SESSION['group'];
|
|
$group = $_SESSION['group'];
|
|
|
$uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
|
|
$uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
|
|
|
|
|
+ self::$redis->hdel(self::KFINFOKEY, $uid);
|
|
|
$uinfo = json_decode($uinfo, true);
|
|
$uinfo = json_decode($uinfo, true);
|
|
|
if (empty($uinfo)) {
|
|
if (empty($uinfo)) {
|
|
|
echo "客服发生异常退出\n";
|
|
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::$db->update('ws_users')->cols(array('online_status' => 0, 'online_connectid' => ''))->where('id=' . $kfid)->query();
|
|
|
self::writeLogKfStatus($uid, 0);
|
|
self::writeLogKfStatus($uid, 0);
|
|
|
|
|
|
|
|
- self::$redis->hdel(self::KFINFOKEY, $uid);
|
|
|
|
|
-
|
|
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -625,7 +625,7 @@ class Events
|
|
|
self::$redis->hdel(self::USERINFOKEY, $uid);
|
|
self::$redis->hdel(self::USERINFOKEY, $uid);
|
|
|
|
|
|
|
|
|
|
|
|
|
- if (!empty($info['kfuid'])) {
|
|
|
|
|
|
|
+ /*if (!empty($info['kfuid'])) {
|
|
|
$kfinfo = self::$redis->hget(self::KFINFOKEY, $info['kfuid']);
|
|
$kfinfo = self::$redis->hget(self::KFINFOKEY, $info['kfuid']);
|
|
|
if (!empty($kfinfo)) {
|
|
if (!empty($kfinfo)) {
|
|
|
$kfinfoArr = json_decode($kfinfo, true);
|
|
$kfinfoArr = json_decode($kfinfo, true);
|
|
@@ -634,7 +634,7 @@ class Events
|
|
|
$kfinfoArr['task'] = count($kfinfoArr['user_info']);
|
|
$kfinfoArr['task'] = count($kfinfoArr['user_info']);
|
|
|
self::$redis->hset(self::KFINFOKEY, $info['kfuid'], json_encode($kfinfoArr, 256));
|
|
self::$redis->hset(self::KFINFOKEY, $info['kfuid'], json_encode($kfinfoArr, 256));
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ }*/
|
|
|
|
|
|
|
|
$chat_message = [
|
|
$chat_message = [
|
|
|
'message_type' => 'userClose',
|
|
'message_type' => 'userClose',
|
|
@@ -683,8 +683,11 @@ class Events
|
|
|
if (empty($data)) {
|
|
if (empty($data)) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
- // 获取当前工单数据.
|
|
|
|
|
|
|
+ // 获取当前客服.
|
|
|
$kfInfo = json_decode(self::$redis->HGET('KFINFO', 'KF' . $data['kf_id']), true);
|
|
$kfInfo = json_decode(self::$redis->HGET('KFINFO', 'KF' . $data['kf_id']), true);
|
|
|
|
|
+ if (empty($kfInfo)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
// 删除当前工单.
|
|
// 删除当前工单.
|
|
|
self::$redis->hdel('SERVICELOG', $servicelogId);
|
|
self::$redis->hdel('SERVICELOG', $servicelogId);
|
|
|
// 当前服务客服删除当前人员.
|
|
// 当前服务客服删除当前人员.
|
|
@@ -792,7 +795,7 @@ class Events
|
|
|
* @param $group
|
|
* @param $group
|
|
|
* @param $uid
|
|
* @param $uid
|
|
|
*/
|
|
*/
|
|
|
- private static function userOnlineTask($group = 0, $uid = 0)
|
|
|
|
|
|
|
+ private static function userOnlineTask($group = 0, $uid = 0, $last=[], $client_id='')
|
|
|
{
|
|
{
|
|
|
$allusergkarr = self::getUserListData();
|
|
$allusergkarr = self::getUserListData();
|
|
|
if (empty($allusergkarr)) {
|
|
if (empty($allusergkarr)) {
|
|
@@ -810,9 +813,47 @@ class Events
|
|
|
if ($group && $uid) {
|
|
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;
|
|
return;
|
|
|
} else {
|
|
} else {
|
|
|
//系统定时调用时,无组,无用户
|
|
//系统定时调用时,无组,无用户
|