|
|
@@ -1,6 +1,8 @@
|
|
|
<?php
|
|
|
namespace app\admin\controller;
|
|
|
|
|
|
+use app\admin\model\Office;
|
|
|
+
|
|
|
/**
|
|
|
* 管理系统系统设置类
|
|
|
*/
|
|
|
@@ -154,6 +156,8 @@ class System extends Base
|
|
|
// 历史会话记录
|
|
|
public function wordsLog()
|
|
|
{
|
|
|
+ $toExcel = input('param.toExcel', 0);
|
|
|
+
|
|
|
if(request()->isAjax()){
|
|
|
|
|
|
$param = input('param.');
|
|
|
@@ -297,6 +301,15 @@ class System extends Base
|
|
|
$return['total'] = $countTmp->count(); //总数据
|
|
|
$return['rows'] = $result;
|
|
|
|
|
|
+ if (!$toExcel) {
|
|
|
+ return json($return);
|
|
|
+ } else {
|
|
|
+ $head = ['工单id', '访客进线时间', '接待客服', '所在组', '访客账号', '开始时间', '结束时间', '会话时长', '响应时长', '关闭原因', '满意度'];
|
|
|
+ $key = ['servicelog_id', 'intime', 'kefu_name', 'group_name', 'user_name', 'start_time', 'end_time', 'conversation', 'response', 'servicelog_close_type', 'evaluate_name'];
|
|
|
+ (new Office())->outdata('工作报表数据导出', $result, $head, $key);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
return json($return);
|
|
|
|
|
|
}
|
|
|
@@ -433,4 +446,112 @@ class System extends Base
|
|
|
return $key;
|
|
|
}
|
|
|
|
|
|
+ public function toexcel()
|
|
|
+ {
|
|
|
+ $result = db('service_log')->order('start_time', 'desc')->select();
|
|
|
+
|
|
|
+ //所有客服
|
|
|
+ $users = db('users')->select();
|
|
|
+ //所有客服组
|
|
|
+ $groups = db('groups')->select();
|
|
|
+ //满意度
|
|
|
+ $evaluate = db('evaluate')->select();
|
|
|
+ //$alarm报警信息
|
|
|
+ $alarm = db('alarm')->select();
|
|
|
+ foreach($result as $key=>$vo){
|
|
|
+ if($result[$key]['intime'] != 0){
|
|
|
+ $result[$key]['intime'] = date('Y-m-d H:i:s', $vo['intime']);
|
|
|
+ }else{
|
|
|
+ $result[$key]['intime'] = '-';
|
|
|
+ }
|
|
|
+ if($result[$key]['start_time'] != 0){
|
|
|
+ $result[$key]['start_time'] = date('Y-m-d H:i:s', $vo['start_time']);
|
|
|
+ }else{
|
|
|
+ $result[$key]['start_time'] = '-';
|
|
|
+ }
|
|
|
+ if($result[$key]['end_time'] != 0){
|
|
|
+ $result[$key]['end_time'] = date('Y-m-d H:i:s', $vo['end_time']);
|
|
|
+ }else{
|
|
|
+ $result[$key]['end_time'] = '-';
|
|
|
+ }
|
|
|
+ //客服名称
|
|
|
+ for($i=0;$i<count($users);$i++){
|
|
|
+ if($result[$key]['kf_id'] == $users[$i]['id']){
|
|
|
+ $result[$key]['kefu_name'] = $users[$i]['user_name'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //满意度
|
|
|
+ $result[$key]['evaluate_name'] = '';
|
|
|
+ for($j=0;$j<count($evaluate);$j++){
|
|
|
+ if($result[$key]['evaluate_id'] == $evaluate[$j]['evaluate_id']){
|
|
|
+ $result[$key]['evaluate_name'] = $evaluate[$j]['evaluate_name'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //客服所在组
|
|
|
+ for($a=0;$a<count($groups);$a++){
|
|
|
+ if($result[$key]['group_id'] == $groups[$a]['id']){
|
|
|
+ $result[$key]['group_name'] = $groups[$a]['name'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //会话时长/响应时长
|
|
|
+ $result[$key]['conversation'] = '';
|
|
|
+ $result[$key]['response'] = '';
|
|
|
+ for($b=0;$b<count($alarm);$b++){
|
|
|
+ if($result[$key]['servicelog_id'] == $alarm[$b]['servicelog_id']){
|
|
|
+ //会话时长
|
|
|
+ $conversation_min = intval($alarm[$b]['alarm_cvtOvertime']/60);
|
|
|
+ $conversation_s = $alarm[$b]['alarm_cvtOvertime']%60;
|
|
|
+ $result[$key]['conversation'] = $conversation_min.'分'.$conversation_s.'秒';
|
|
|
+ //响应时长
|
|
|
+ $response_min = intval($alarm[$b]['alarm_corresponding']/60);
|
|
|
+ $response_s = $alarm[$b]['alarm_corresponding']%60;
|
|
|
+ $result[$key]['response'] = $response_min.'分'.$response_s.'秒';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if($vo['servicelog_close_type'] == 0){
|
|
|
+ $result[$key]['servicelog_close_type'] = '未知';
|
|
|
+ }
|
|
|
+ if($vo['servicelog_close_type'] == 1){
|
|
|
+ $result[$key]['servicelog_close_type'] = '访客静默';
|
|
|
+ }
|
|
|
+ if($vo['servicelog_close_type'] == 2){
|
|
|
+ $result[$key]['servicelog_close_type'] = '会话超时';
|
|
|
+ }
|
|
|
+ if($vo['servicelog_close_type'] == 3){
|
|
|
+ $result[$key]['servicelog_close_type'] = '客服关闭';
|
|
|
+ }
|
|
|
+ if($vo['servicelog_close_type'] == 4){
|
|
|
+ $result[$key]['servicelog_close_type'] = '客服掉线';
|
|
|
+ }
|
|
|
+ if($vo['servicelog_close_type'] == 5){
|
|
|
+ $result[$key]['servicelog_close_type'] = '转接';
|
|
|
+ }
|
|
|
+
|
|
|
+ //工单聊天详情
|
|
|
+ $chat_log = db('chat_log')->where('servicelog_id',$vo['servicelog_id'])->order('time_line', 'desc')->select();
|
|
|
+ $result[$key]['detail'] = '';
|
|
|
+ for($c=0;$c<count($chat_log);$c++){
|
|
|
+ $content = json_decode($chat_log[$c]['content'], true);
|
|
|
+ $chat_log[$c]['time_line'] = date('Y-m-d H:i:s',$chat_log[$c]['time_line']);
|
|
|
+ $result[$key]['detail'] = $result[$key]['detail'].$chat_log[$c]['time_line'];
|
|
|
+ if(!empty($content['text'])){
|
|
|
+ $content['content'] = $content['text'];
|
|
|
+ }
|
|
|
+ if(!empty($content['img'])){
|
|
|
+ $content['content'] = '<img width="100%" src="'.$content['img'].'"/>';
|
|
|
+ }
|
|
|
+ $result[$key]['detail'] = $result[$key]['detail'].$content['content'];
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ $head = ['工单id', '访客进线时间', '接待客服', '所在组', '访客账号', '开始时间', '结束时间', '会话时长', '响应时长', '关闭原因', '满意度','聊天详情'];
|
|
|
+ $key = ['servicelog_id', 'intime', 'kefu_name', 'group_name', 'user_name', 'start_time', 'end_time', 'conversation', 'response', 'servicelog_close_type', 'evaluate_name','detail'];
|
|
|
+ (new Office())->outdata('工单数据导出', $result, $head, $key);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
}
|