|
|
@@ -11,6 +11,8 @@ use app\admin\model\User;
|
|
|
use app\admin\model\UserView;
|
|
|
use app\admin\model\KefuTime;
|
|
|
use app\admin\model\OperationData;
|
|
|
+use app\admin\model\Department;
|
|
|
+use app\admin\model\Config;
|
|
|
use app\enterprise\model\{Message,Friend};
|
|
|
use Exception;
|
|
|
use think\facade\Db;
|
|
|
@@ -194,27 +196,31 @@ class Kefu extends BaseController
|
|
|
if ($user->service_status >= 1) {
|
|
|
return $this->error('用户已接线');
|
|
|
}
|
|
|
- $user->cs_uid = $this->admin_id;
|
|
|
+ $cs_uid = User::getCsId($this->admin_id);
|
|
|
+ $user->cs_uid = $cs_uid;
|
|
|
$user->service_status = 1;
|
|
|
$user->save();
|
|
|
|
|
|
$friend = Friend::where('create_user', $user_id)->order('create_time', 'desc')->find();
|
|
|
- $robot_id = $friend->friend_user_id;
|
|
|
- $friend->friend_user_id = $this->admin_id;
|
|
|
- $friend->save();
|
|
|
-
|
|
|
- Message::where(['from_user' => $user_id, 'to_user' => $robot_id])->update(['to_user' => $this->admin_id]);
|
|
|
- Message::where(['from_user' => $robot_id, 'to_user' => $user_id])->update(['from_user' => $this->admin_id]);
|
|
|
+ if ($friend) {
|
|
|
+ $robot_id = $friend->friend_user_id;
|
|
|
+ $friend->friend_user_id = $cs_uid;
|
|
|
+ $friend->save();
|
|
|
+
|
|
|
+ Message::where(['from_user' => $user_id, 'to_user' => $robot_id])->update(['to_user' => $cs_uid]);
|
|
|
+ Message::where(['from_user' => $robot_id, 'to_user' => $user_id])->update(['from_user' => $cs_uid]);
|
|
|
+ }
|
|
|
|
|
|
KefuWork::addNum($this->admin_id, 'chat_num');//客服接线次数更新
|
|
|
|
|
|
Db::commit();
|
|
|
//通知客服已接线
|
|
|
- //wsSendMsg($user_id,'isChat',['is_chat'=>1]);
|
|
|
+ wsSendMsg(0,'handleChat',['user_id'=>$user_id]);
|
|
|
} catch (\Exception $e) {
|
|
|
Db::rollback();
|
|
|
return $this->error($e->getMessage());
|
|
|
}
|
|
|
+ return $this->success([], '');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -225,33 +231,38 @@ class Kefu extends BaseController
|
|
|
try {
|
|
|
Db::startTrans();
|
|
|
$user_id = $this->request->param('user_id');
|
|
|
- $admin_id = $this->request->param('admin_id');
|
|
|
+ $cs_uid = $this->request->param('cs_uid');
|
|
|
|
|
|
$user = User::where('user_id', $user_id)->find();
|
|
|
if (!$user) {
|
|
|
return $this->error('用户不存在');
|
|
|
}
|
|
|
- $user->cs_uid = $admin_id;
|
|
|
+ $admin_id = User::getAdminId($cs_uid);
|
|
|
+ $user->cs_uid = $cs_uid;
|
|
|
$user->service_status = 1;
|
|
|
$user->save();
|
|
|
|
|
|
$friend = Friend::where('create_user', $user_id)->order('create_time', 'desc')->find();
|
|
|
- $old_admin_id = $friend->friend_user_id;
|
|
|
- $friend->friend_user_id = $admin_id;
|
|
|
- $friend->save();
|
|
|
+ if ($friend) {
|
|
|
+ $old_cs_uid = $friend->friend_user_id;
|
|
|
+ $friend->friend_user_id = $cs_uid;
|
|
|
+ $friend->save();
|
|
|
+
|
|
|
+ Message::where(['from_user' => $user_id, 'to_user' => $old_cs_uid])->update(['to_user' => $cs_uid]);
|
|
|
+ Message::where(['from_user' => $old_cs_uid, 'to_user' => $user_id])->update(['from_user' => $cs_uid]);
|
|
|
+ KefuTime::endData($old_cs_uid, 3); //结束接线时间
|
|
|
+ }
|
|
|
|
|
|
- Message::where(['from_user' => $user_id, 'to_user' => $old_admin_id])->update(['to_user' => $admin_id]);
|
|
|
- Message::where(['from_user' => $old_admin_id, 'to_user' => $user_id])->update(['from_user' => $admin_id]);
|
|
|
KefuWork::addNum($admin_id, 'chat_num');//客服接线次数更新
|
|
|
- KefuTime::endData($old_admin_id, 3); //结束接线时间
|
|
|
|
|
|
Db::commit();
|
|
|
//通知客服已接线
|
|
|
- //wsSendMsg($user_id,'isChat',['is_chat'=>1]);
|
|
|
+ wsSendMsg(0,'handleChat',['user_id'=>$user_id]);
|
|
|
} catch (\Exception $e) {
|
|
|
Db::rollback();
|
|
|
return $this->error($e->getMessage());
|
|
|
}
|
|
|
+ return $this->success([], '');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -259,7 +270,73 @@ class Kefu extends BaseController
|
|
|
*/
|
|
|
public function select()
|
|
|
{
|
|
|
-
|
|
|
+ $department_id = Admin::where('id', $this->admin_id)->value('department_id');
|
|
|
+ $parent_department_id = Department::where('id', $department_id)->value('parent_id');
|
|
|
+ $where[] = ['department_id', '=', $parent_department_id];
|
|
|
+
|
|
|
+ $list = Admin::alias('admin')->join('user', 'admin.id = user.uid', 'left')
|
|
|
+ ->where('user.role', '>', 0)
|
|
|
+ ->where('user.status', 1)
|
|
|
+ ->where('admin.department_id', $department_id)->whereOr(function ($query) use ($parent_department_id) {
|
|
|
+ if ($parent_department_id) {
|
|
|
+ $query->where('admin.department_id', $parent_department_id);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ ->where('admin.id','<>', $this->admin_id)
|
|
|
+ ->order('admin.department_id', 'asc')
|
|
|
+ ->order('user.is_online', 'desc')
|
|
|
+ ->field(['user.user_id','user.account','user.realname','user.avatar','user.is_online','admin.nickname','admin.username'])
|
|
|
+ ->select()
|
|
|
+ ->toArray();
|
|
|
+ return $this->success($list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 客服结束会话
|
|
|
+ */
|
|
|
+ public function finishedChat()
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ Db::startTrans();
|
|
|
+ $user_id = $this->request->param('user_id');
|
|
|
+
|
|
|
+ $user = User::where('user_id', $user_id)->find();
|
|
|
+ if (!$user) {
|
|
|
+ return $this->error('用户不存在');
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($user->service_status != 3) {
|
|
|
+ $user->service_status = 3;
|
|
|
+ $user->save();
|
|
|
+
|
|
|
+ KefuTime::endData($user->cs_uid, 3); //结束接线时间
|
|
|
+
|
|
|
+ Db::commit();
|
|
|
+ //通知客服已结束
|
|
|
+ wsSendMsg(0,'handleChat',['user_id'=>$user_id]);
|
|
|
+
|
|
|
+ //给用户发送客服评分的消息
|
|
|
+ $user_open_comment = Config::where('field', 'user_open_comment')->value('val');
|
|
|
+ if ($user_open_comment == 1 ) {
|
|
|
+ $param = [
|
|
|
+ 'id' => \utils\Str::getUuid(),
|
|
|
+ 'type' => 'text',
|
|
|
+ 'status' => 'going',
|
|
|
+ 'sendTime' => time() * 1000,
|
|
|
+ 'toContactId' => $user_id,
|
|
|
+ 'content' => Config::where('field','kefu_finished_chat')->value('val'),
|
|
|
+ 'file_id' => 0,
|
|
|
+ 'is_group' => 0,
|
|
|
+ 'user_id' => $user->cs_uid,
|
|
|
+ ];
|
|
|
+ Message::sendMsg($param, 0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Db::rollback();
|
|
|
+ return $this->error($e->getMessage());
|
|
|
+ }
|
|
|
+ return $this->success([], '');
|
|
|
}
|
|
|
|
|
|
}
|