', 0)->count(); //当前客服在线人数 $data['handling_count'] = User::where('service_status',2)->count(); //当前客服接线中的总数 $data['today_handling_count'] = KefuTime::where('type', 3)->where('created_at', '>=', date('Y-m-d'))->count(); //今日客服接线总数 return $this->success($data); } /** * @api {get} /today 今日在线客服列表 */ public function today() { try { $params = $this->request->param(); $page = $params['page'] ?? 1; $limit = $params['limit'] ?? 15; $query = Admin::alias('admin')->join('kefu_work', 'kefu_work.admin_id = admin.id', 'left') ->where('kefu_work.created_at', '>=', date('Y-m-d 00:00:00')); if (isset($params['is_online'])) { $query->where('is_online', $params['is_online']); } $count = $query->count(); $list = $query->field(['admin.*', 'kefu_work.chat_num','kefu_work.transfer_num','kefu_work.intervention_num','kefu_work.completed_num']) ->order('admin.id', 'asc') ->limit($limit) ->page($page) ->select(); foreach ($list as &$value) { $value['chat_num'] = intval($value['chat_num']); $value['transfer_num'] = intval($value['transfer_num']); $value['intervention_num'] = intval($value['intervention_num']); $value['completed_num'] = intval($value['completed_num']); $value['inprocess'] = User::where('cs_uid',$value['id'])->where('service_status',2)->count();//进行中 $value['unprocessed'] = User::where('cs_uid',$value['id'])->where('service_status',1)->count();//待处理 } } catch (Exception $e) { return $this->error($e->getMessage()); } return $this->success(['count' => $count, 'list' => $list]); } /** * @api {get} /list 客服数据展板列表 */ public function list() { try { $params = $this->request->param(); $page = $params['page'] ?? 1; $limit = $params['limit'] ?? 15; $order_field = $params['field'] ?? 'kefu_work.id'; $order = $params['order'] ?? 'desc'; $query = KefuWork::alias('kefu_work') ->join('admin', 'kefu_work.admin_id = admin.id', 'left') ->join('user', 'kefu_work.admin_id = user.uid', 'left') ->where('user.from', 0); if (isset($params['is_online'])) { $query->where('user.is_online', $params['is_online']); } if (!empty($params['start_time'])) { $query->where('kefu_work.created_at', '>=', $params['start_time'].'00:00:00'); } if (!empty($params['end_time'])) { $query->where('kefu_work.created_at', '<=', $params['end_time'].'23:59:59'); } $count = $query->count(); $list = $query->field(['admin.username','admin.nickname','user.is_online', 'kefu_work.*']) ->order($order_field, $order) ->limit($limit) ->page($page) ->select(); foreach ($list as &$value) { $value['avg_time'] = $value['service_time'] && $value['chat_num'] ? intval($value['service_time'] / $value['chat_num']) : 0; //客服平均服务时间 } } catch (Exception $e) { return $this->error($e->getMessage()); } return $this->success(['count' => $count, 'list' => $list]); } /** * @api {get} /chat 总接线数据 */ public function chat() { try { $params = $this->request->param(); $start_time = empty($params['start_time']) ? date('Y-m-d') : $params['start_time']; $end_time = empty($params['end_time']) ? date('Y-m-d') : $params['end_time']; $list = OperationData::where('type', 1) ->where('date', '>=', $start_time) ->where('date', '<=', $end_time) ->limit(100) ->field(['num','date']) ->select(); if ($start_time == date('Y-m-d') || $end_time == date('Y-m-d')) { $list[] = [ 'num' => KefuTime::where('type', 3) ->where('created_at', '>=', date('Y-m-d 00:00:00')) ->where('created_at', '<=', date('Y-m-d 23:59:59')) ->count(), 'date' => date('Y-m-d'), ]; } } catch (Exception $e) { return $this->error($e->getMessage()); } return $this->success(['count' => count($list), 'list' => $list]); } //客服签到 public function sign() { try { $admin_id = $this->admin_id; KefuWork::addNum($admin_id, 'sign_num');//客服签到次数更新 $sign = Sign::where('admin_id', $admin_id)->where('created_at', '>=', date('Y-m-d'))->order('id', 'desc')->find(); if ($sign && $sign->time == 0) { $sign->time = time() - strtotime($sign->created_at); $sign->updated_at = date('Y-m-d H:i:s'); $sign->save(); } //签到记录 Sign::create([ 'admin_id' => $admin_id, ]); } catch (\Exception $e) { return $this->error($e->getMessage()); } //通知客服已签到 $user_id = User::getCsId($admin_id); wsSendMsg($user_id,'sign',['is_sign'=>0]); //上线通知 wsSendMsg(0,'isOnline',['id'=>$user_id, 'is_online'=>1]); return $this->success([], '签到成功'); } }