需求:
一次性解决问题率 = 一次解决的对话量/接入量
一次解决的对话量:客户在接入人工客服对话结束后24小时(暂定)内未再次请求人工服务的对话
由于条件还要加上日期间隔,所以从mysql查询结果到PHP处理。
例如:每隔2天内,用户请求对话结束时间到下次发起时间的间隔超过24小时,即为一次性解决对话量。然后再除以接入量,就是一次性解决问题率。
首先给出sql语句,间隔查询参考mysql日期间隔查询
– 间隔两天的记录
select
floor( (2 - to_days(FROM_UNIXTIME(1470022740)) % 2 + to_days(FROM_UNIXTIME(createTime)) )/2 ) as sortId ,
createUserId,
createTime,
endTime
FROMthink_kf_chat_im_group
WHEREendTime
<> 0
ANDcreateTime
BETWEEN 1470022740 AND 1470886740
and kfUserId <> 0
order BY sortId,createUserId;
结果如下
下面把这些记录到php通过数组来处理
/**
* 一次性问题解决率,用户对话结束后,24小时内不在有新的对话出现
* @param $array array
* return array
*/
private function oneTimesQuesRate($array){
$len = count($array);
$arr = [];
$sortId = [];
$sortArr = [];
$id = [];
$count = [];
$total = [];
//遍历获取同一个sortId
foreach($array as $v){
$sortId[] = $v['sortid'];
}
//取唯一sortId
$unique_sortId = array_unique($sortId);
//循环取出值
foreach($unique_sortId as $v){
$id[] = $v;
}
//循环取出间隔自定义时间内和24小时内不在发起的对话记录
for($i = 0; $i < $len; $i++){
for($j = $i+1; $j < $len; $j++){
foreach($id as $v){
if($v == $array[$i]['sortid']){
if($array[$i]['createuserid'] == $array[$j]['createuserid']){
if($array[$i]['endtime'] + 86400 <= $array[$j]['createtime']){
// $num++;
$sortArr[] = $v;
}
}
}
}
//每次对比后跳出循环
break;
}
//获取每条的用户ID
$arr[$array[$i]['sortid']][] = $array[$i]['createuserid'];
}
//循环每个sortId,去重获取总数
foreach($arr as $k=>$v){
$count[$k] = count(array_unique($v));
}
//取相同值得总数
$num = array_count_values($sortArr);
//合并两个数组的值
foreach($count as $k=>$v){
foreach($num as $k1=>$v1){
if($k == $k1){
$total[$k] = $v + $v1;
}else{
$total[$k] = $v;
}
}
}
return $total;
}</pre>
然后用这个结果来除以接入量,也就是下面的sql语句,当然这个sql查询到的结果也需要通过php来处理。也可以把上面的结果插入到数据库的临时表,通过sql来相除。多种方式可以实现。
– 获取每隔2天的接入量
SELECT
floor( (2 - to_days(FROM_UNIXTIME(1470022740)) % 2 + to_days(FROM_UNIXTIME(createTime)) )/2 ) as sortId,
min(date_format(from_unixtime(createTime),’%y-%m-%d’)) as mtime,
count(kfUserId) as c
FROMthink_kf_chat_im_group
WHEREendTime
<> 0
ANDcreateTime
BETWEEN 1470022740
AND 1470886740
and kfUserId <> 0
GROUP BY sortId;
结果如下:
/**
* @param $arr1 array 总接入量
* @param $arr array 处理过的接入量
* @return array 返回百分比
*/
private function processData($arr1,$arr){
$result = [];
foreach($arr1 as $k1=>$v1){
foreach($arr as $k=>$v){
if($v1['sortid'] == $k){
$result[$k1]['mtime'] = $v1['mtime'];
$result[$k1]['c'] = floor($v/$v1['c']*100);
}
}
}
return $result;
}</pre>
通过highcharts绘画出图形