|
|
@@ -4,6 +4,10 @@ namespace app\admin\controller;
|
|
|
|
|
|
|
|
|
use app\admin\model\Countmidtable;
|
|
|
+use app\admin\model\Users as Usersmodel;
|
|
|
+use app\admin\model\Groups as GroupsModel;
|
|
|
+use app\admin\model\Servicetimelog as ServicetimelogModel;
|
|
|
+use app\admin\model\Kfstatetimes as KfstatetimesModel;
|
|
|
|
|
|
/**
|
|
|
* 报表类
|
|
|
@@ -75,7 +79,7 @@ class Report extends Base
|
|
|
];
|
|
|
}
|
|
|
|
|
|
- $queueData =(new Countmidtable())->getQueryDay($timeInterval['days_list']);
|
|
|
+ $queueData = (new Countmidtable())->getQueryDay($timeInterval['days_list']);
|
|
|
|
|
|
|
|
|
$this->assign([
|
|
|
@@ -97,6 +101,89 @@ class Report extends Base
|
|
|
}//end index()
|
|
|
|
|
|
|
|
|
+ public function attendancereport()
|
|
|
+ {
|
|
|
+
|
|
|
+ $goups = (new GroupsModel)->where(['status' => 1])->select();
|
|
|
+
|
|
|
+ if (request()->isAjax()) {
|
|
|
+
|
|
|
+ $param = input('param.');
|
|
|
+ $limit = $param['pageSize'];
|
|
|
+ $offset = ($param['pageNumber'] - 1) * $limit;
|
|
|
+
|
|
|
+ $param = input('param.searchText');
|
|
|
+ if (empty($param)) {
|
|
|
+ $param = '0|0';
|
|
|
+ }
|
|
|
+ list($zone, $sgroup) = explode('|', $param);
|
|
|
+ if (empty($zone)) {
|
|
|
+ $zoneArray1 = [date("Y-m-d")];
|
|
|
+ } else {
|
|
|
+ $zonesarr = explode(',', $zone);
|
|
|
+ $dd = $this->Date_segmentation($zonesarr['0'], $zonesarr['1']);
|
|
|
+ $zoneArray1 = $dd['days_list'];
|
|
|
+ }
|
|
|
+ $zoneArray = array_map(function ($i) {
|
|
|
+ return "'$i'";
|
|
|
+ }, $zoneArray1);
|
|
|
+ $uidarr = (new Usersmodel())->getUidsBygid(intval($sgroup), 1, 1);
|
|
|
+
|
|
|
+ if (!$uidarr) {
|
|
|
+ return json(['rows' => [], 'total' => 0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ $model1 = new ServicetimelogModel();
|
|
|
+ $model2 = new KfstatetimesModel();
|
|
|
+ $ret1 = $model1->getDayData($zoneArray1, $uidarr['uids']);
|
|
|
+ $ret2 = $model2->getDayData($zoneArray1, $uidarr['uids']);
|
|
|
+ $retall = $this->reportDataFormat($ret1, $ret2, $uidarr['objs'], $zoneArray1, $limit, $offset);
|
|
|
+
|
|
|
+ return json($retall);
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->assign('groups', $goups);
|
|
|
+ return $this->fetch();
|
|
|
+ }
|
|
|
+
|
|
|
+ function reportDataFormat($onoffdata, $timesdata, $uobjarr, $dataArray, $limit, $offset)
|
|
|
+ {
|
|
|
+ $allData = [];
|
|
|
+ $all_last = [];
|
|
|
+ foreach ($dataArray as $day) {
|
|
|
+ foreach ($uobjarr as $uid => $user) {
|
|
|
+ $kfuid = 'KF' . $uid;
|
|
|
+ if (isset($onoffdata[$day][$kfuid])) {
|
|
|
+ $allData[$day][$kfuid] = ['of0' => $onoffdata[$day][$kfuid][0], 'of1' => $onoffdata[$day][$kfuid][1]];
|
|
|
+ } else {
|
|
|
+ $allData[$day][$kfuid] = ['of0' => '', 'of1' => ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isset($timesdata[$day][$kfuid])) {
|
|
|
+ $all_last[] = array_merge($timesdata[$day][$kfuid], $allData[$day][$kfuid], ['uname' => $uobjarr[$uid]->user_name, 'account' => $uobjarr[$uid]->user_account, 'day' => $day]);
|
|
|
+ } else {
|
|
|
+ $all_last[] = array_merge(['0' => 0, '1' => 0, '2' => 0, '3' => 0, 'all' => 0, 's1p' => 0, 'sp2' => 0, 'sp3' => 0], $allData[$day][$kfuid], ['uname' => $uobjarr[$uid]->user_name, 'account' => $uobjarr[$uid]->user_account, 'day' => $day]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $len = count($all_last);
|
|
|
+ $return = ['rows' => [], 'total' => $len];
|
|
|
+ if ($offset >= $len) {
|
|
|
+ return $return;
|
|
|
+ }
|
|
|
+ $begin = $offset;
|
|
|
+ $end = ($offset + $limit);
|
|
|
+ $end = ($end > $len) ? $len - 1 : $end;
|
|
|
+
|
|
|
+ for ($i = $begin; $i < $end; $i++) {
|
|
|
+ $return['rows'][] = $all_last[$i];
|
|
|
+ }
|
|
|
+
|
|
|
+ return $return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 时间分割
|
|
|
*
|
|
|
@@ -179,18 +266,22 @@ class Report extends Base
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+<<<<<<< HEAD
|
|
|
+=======
|
|
|
+
|
|
|
+>>>>>>> 485c080af6c3f51a2504227cde48148b3e60876e
|
|
|
// 工作报表
|
|
|
public function workreport()
|
|
|
{
|
|
|
- if(request()->isAjax()){
|
|
|
+ if (request()->isAjax()) {
|
|
|
|
|
|
- $param = input('param.');
|
|
|
- $limit = $param['pageSize'];
|
|
|
+ $param = input('param.');
|
|
|
+ $limit = $param['pageSize'];
|
|
|
$offset = ($param['pageNumber'] - 1) * $limit;
|
|
|
- $where = [];
|
|
|
+ $where = [];
|
|
|
//用户名称
|
|
|
if (empty($param['searchText']) === false) {
|
|
|
- $where['user_account|user_name|user_job_number'] = array('like','%'.$param['searchText'].'%');
|
|
|
+ $where['user_account|user_name|user_job_number'] = array('like', '%' . $param['searchText'] . '%');
|
|
|
}
|
|
|
if (empty($param['start']) === false && empty($param['end']) === false && $param['start'] <= $param['end']) {
|
|
|
$start = strtotime($param['start']);
|
|
|
@@ -198,63 +289,63 @@ class Report extends Base
|
|
|
}
|
|
|
$result = db('users')->limit($offset, $limit)->where($where)->select();
|
|
|
|
|
|
- foreach($result as $key=>$vo){
|
|
|
+ foreach ($result as $key => $vo) {
|
|
|
//客服工单数
|
|
|
- $result[$key]['service_num'] = db('service_log')->whereBetween('start_time', [$start, $end])->where('kf_id',$vo['id'])->count();
|
|
|
+ $result[$key]['service_num'] = db('service_log')->whereBetween('start_time', [$start, $end])->where('kf_id', $vo['id'])->count();
|
|
|
//客服发出消息数
|
|
|
- $result[$key]['send_words'] = db('chat_log')->whereBetween('time_line', [$start, $end])->where('from_id','KF'.$vo['id'])->count();
|
|
|
+ $result[$key]['send_words'] = db('chat_log')->whereBetween('time_line', [$start, $end])->where('from_id', 'KF' . $vo['id'])->count();
|
|
|
//接入转接量
|
|
|
- $result[$key]['transfer_in'] = db('serviceturn_log')->whereBetween('ctime', [date('Y-m-d',$start), date('Y-m-d',$end).' 23:59:59'])->where('stype','IN')->where('uid',$vo['id'])->count();
|
|
|
+ $result[$key]['transfer_in'] = db('serviceturn_log')->whereBetween('ctime', [date('Y-m-d', $start), date('Y-m-d', $end) . ' 23:59:59'])->where('stype', 'IN')->where('uid', $vo['id'])->count();
|
|
|
//客服收到消息数
|
|
|
- $result[$key]['receive_words'] = db('chat_log')->whereBetween('time_line', [$start, $end])->where('to_id','KF'.$vo['id'])->count();
|
|
|
+ $result[$key]['receive_words'] = db('chat_log')->whereBetween('time_line', [$start, $end])->where('to_id', 'KF' . $vo['id'])->count();
|
|
|
//客服回复工单数
|
|
|
- $a = db('service_log a')->join('alarm b', 'a.servicelog_id=b.servicelog_id')->where('a.kf_id',$vo['id'])->whereBetween('a.start_time', [$start, $end])->where('b.alarm_respond',2)->count();
|
|
|
+ $a = db('service_log a')->join('alarm b', 'a.servicelog_id=b.servicelog_id')->where('a.kf_id', $vo['id'])->whereBetween('a.start_time', [$start, $end])->where('b.alarm_respond', 2)->count();
|
|
|
//回复率
|
|
|
- if(!empty($result[$key]['service_num'])){
|
|
|
- $n = $a/$result[$key]['service_num']*100;
|
|
|
- $result[$key]['reply'] = round($n,2).'%';
|
|
|
+ if (!empty($result[$key]['service_num'])) {
|
|
|
+ $n = $a / $result[$key]['service_num'] * 100;
|
|
|
+ $result[$key]['reply'] = round($n, 2) . '%';
|
|
|
}
|
|
|
|
|
|
//答问比
|
|
|
- if($result[$key]['receive_words'] != 0){
|
|
|
- $num = $result[$key]['send_words']/$result[$key]['receive_words']*100;
|
|
|
- $result[$key]['answer_problem'] = round($num,2).'%';
|
|
|
+ if ($result[$key]['receive_words'] != 0) {
|
|
|
+ $num = $result[$key]['send_words'] / $result[$key]['receive_words'] * 100;
|
|
|
+ $result[$key]['answer_problem'] = round($num, 2) . '%';
|
|
|
}
|
|
|
//平均会话时长
|
|
|
- $result[$key]['conversation'] = round(db('service_log a')->join('alarm b', 'a.servicelog_id=b.servicelog_id')->whereBetween('a.start_time', [$start, $end])->where('a.kf_id',$vo['id'])->avg('b.alarm_cvtOvertime'));
|
|
|
- if($result[$key]['conversation'] >= 60){
|
|
|
- $result[$key]['conversation'] = floor($result[$key]['conversation']/60).'分'.($result[$key]['conversation']%60).'秒';
|
|
|
- }else{
|
|
|
- $result[$key]['conversation'] = $result[$key]['conversation'].'秒';
|
|
|
+ $result[$key]['conversation'] = round(db('service_log a')->join('alarm b', 'a.servicelog_id=b.servicelog_id')->whereBetween('a.start_time', [$start, $end])->where('a.kf_id', $vo['id'])->avg('b.alarm_cvtOvertime'));
|
|
|
+ if ($result[$key]['conversation'] >= 60) {
|
|
|
+ $result[$key]['conversation'] = floor($result[$key]['conversation'] / 60) . '分' . ($result[$key]['conversation'] % 60) . '秒';
|
|
|
+ } else {
|
|
|
+ $result[$key]['conversation'] = $result[$key]['conversation'] . '秒';
|
|
|
}
|
|
|
//平均响应时长
|
|
|
- $result[$key]['response'] = round(db('service_log a')->join('alarm b', 'a.servicelog_id=b.servicelog_id')->whereBetween('a.start_time', [$start, $end])->where('a.kf_id',$vo['id'])->avg('b.alarm_corresponding'));
|
|
|
- if($result[$key]['response'] >= 60){
|
|
|
- $result[$key]['response'] = floor($result[$key]['response']/60).'分'.($result[$key]['response']%60).'秒';
|
|
|
- }else{
|
|
|
- $result[$key]['response'] = $result[$key]['response'].'秒';
|
|
|
+ $result[$key]['response'] = round(db('service_log a')->join('alarm b', 'a.servicelog_id=b.servicelog_id')->whereBetween('a.start_time', [$start, $end])->where('a.kf_id', $vo['id'])->avg('b.alarm_corresponding'));
|
|
|
+ if ($result[$key]['response'] >= 60) {
|
|
|
+ $result[$key]['response'] = floor($result[$key]['response'] / 60) . '分' . ($result[$key]['response'] % 60) . '秒';
|
|
|
+ } else {
|
|
|
+ $result[$key]['response'] = $result[$key]['response'] . '秒';
|
|
|
}
|
|
|
//已评价的工单数
|
|
|
- $m = db('service_log')->whereBetween('start_time', [$start, $end])->where('kf_id',$vo['id'])->where('evaluate_id','<>',0)->count();
|
|
|
+ $m = db('service_log')->whereBetween('start_time', [$start, $end])->where('kf_id', $vo['id'])->where('evaluate_id', '<>', 0)->count();
|
|
|
//参评率
|
|
|
- if($result[$key]['service_num'] != 0){
|
|
|
- $result[$key]['appraise'] = $m/$result[$key]['service_num']*100;
|
|
|
- $result[$key]['appraise'] = round($num,2).'%';
|
|
|
+ if ($result[$key]['service_num'] != 0) {
|
|
|
+ $result[$key]['appraise'] = $m / $result[$key]['service_num'] * 100;
|
|
|
+ $result[$key]['appraise'] = round($num, 2) . '%';
|
|
|
}
|
|
|
//满意评价
|
|
|
- $result[$key]['pleased_num'] = db('service_log a')->join('evaluate b', 'a.evaluate_id=b.evaluate_id')->whereBetween('a.start_time', [$start, $end])->where('kf_id',$vo['id'])->where('evaluate_name','满意')->count();
|
|
|
+ $result[$key]['pleased_num'] = db('service_log a')->join('evaluate b', 'a.evaluate_id=b.evaluate_id')->whereBetween('a.start_time', [$start, $end])->where('kf_id', $vo['id'])->where('evaluate_name', '满意')->count();
|
|
|
//一般评价
|
|
|
- $result[$key]['commonly'] = db('service_log a')->join('evaluate b', 'a.evaluate_id=b.evaluate_id')->whereBetween('a.start_time', [$start, $end])->where('kf_id',$vo['id'])->where('evaluate_name','一般')->count();
|
|
|
+ $result[$key]['commonly'] = db('service_log a')->join('evaluate b', 'a.evaluate_id=b.evaluate_id')->whereBetween('a.start_time', [$start, $end])->where('kf_id', $vo['id'])->where('evaluate_name', '一般')->count();
|
|
|
//不满意评价
|
|
|
- $result[$key]['no_pleased'] = db('service_log a')->join('evaluate b', 'a.evaluate_id=b.evaluate_id')->whereBetween('a.start_time', [$start, $end])->where('kf_id',$vo['id'])->where('evaluate_name','不满意')->count();
|
|
|
+ $result[$key]['no_pleased'] = db('service_log a')->join('evaluate b', 'a.evaluate_id=b.evaluate_id')->whereBetween('a.start_time', [$start, $end])->where('kf_id', $vo['id'])->where('evaluate_name', '不满意')->count();
|
|
|
//相对满意度率
|
|
|
- if($m != 0){
|
|
|
- $result[$key]['pleased'] = $result[$key]['pleased_num']/$m*100;
|
|
|
- $result[$key]['pleased'] = round($result[$key]['pleased'],2).'%';
|
|
|
+ if ($m != 0) {
|
|
|
+ $result[$key]['pleased'] = $result[$key]['pleased_num'] / $m * 100;
|
|
|
+ $result[$key]['pleased'] = round($result[$key]['pleased'], 2) . '%';
|
|
|
}
|
|
|
|
|
|
//留言处理量
|
|
|
- $result[$key]['message'] = db('accountsmessage')->whereBetween('dealWith_time', [$start, $end])->where('user_id',$vo['id'])->count();
|
|
|
+ $result[$key]['message'] = db('accountsmessage')->whereBetween('dealWith_time', [$start, $end])->where('user_id', $vo['id'])->count();
|
|
|
|
|
|
|
|
|
// 生成操作按钮
|
|
|
@@ -269,12 +360,12 @@ class Report extends Base
|
|
|
}
|
|
|
//所有客服
|
|
|
$users = db('users')->select();
|
|
|
- if(!empty($users)){
|
|
|
+ if (!empty($users)) {
|
|
|
$option = '<option value="0">处理人</option>';
|
|
|
- for($i=0;$i<count($users);$i++){
|
|
|
- $option = $option.'<option value="'.$users[$i]['id'].'">'.$users[$i]['user_name'].'</option>';
|
|
|
+ for ($i = 0; $i < count($users); $i++) {
|
|
|
+ $option = $option . '<option value="' . $users[$i]['id'] . '">' . $users[$i]['user_name'] . '</option>';
|
|
|
}
|
|
|
- $useroption = '<select lay-verify="required" lay-filter="user_id">'.$option.'</select>';
|
|
|
+ $useroption = '<select lay-verify="required" lay-filter="user_id">' . $option . '</select>';
|
|
|
}
|
|
|
|
|
|
$this->assign([
|
|
|
@@ -283,6 +374,9 @@ class Report extends Base
|
|
|
|
|
|
return $this->fetch();
|
|
|
}
|
|
|
+<<<<<<< HEAD
|
|
|
|
|
|
+=======
|
|
|
+>>>>>>> 485c080af6c3f51a2504227cde48148b3e60876e
|
|
|
|
|
|
}//end class
|