<?php /** * @author yusf * @copyright 2020 */ function exportedList(){ $ids=$_REQUEST['ids']; $sql_se=""; $sql = $_SESSION['callList_condition'] ; $order = $_SESSION['callList_order']; if(!empty($ids) && $ids != "" ){ $sql_se = " select * from ($sql) as t where call_uuid in (".$ids.") $order "; }else{ $sql_se = " select * from ($sql) as t $order "; } ob_end_clean(); ob_start(); header ( "Content-type:application/vnd.ms-excel" ); header ( "Content-Disposition:filename=" . iconv ( "UTF-8", "GB18030", "话单导出记录" ) . ".csv" ); //不段的刷新缓冲期,来实现大数据流的导出 $fp = fopen('php://output', 'a'); $title = array('caller_id_number' => "被叫号码", 'start_stamp' => "开始时间", 'end_stamp'=> "结束时间",'answer_stamp'=>"应答时间", 'billsec' => "接听时长",'app_billing_unit' => "计费单元",'billing_type'=>'计费类型','bill_num'=>'计费次数','bill_total'=>"费用",'hangup_cause'=>'挂机原因','call_key'=>"客户按键",'requests_text'=>"推送结果",'call_pbx_node'=>"呼叫节点"); // 输出Excel列名信息$head = array("电子邮件"); foreach ($title as $i => $v) { // CSV的Excel支持GBK编码,一定要转换,否则乱码 $head[$i] = iconv('utf-8', 'gbk', $v); } fputcsv($fp, $head); // 计数器 $cnt = 0; // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小 $limit = 1000; $db = DBHelper::loadDB(); $sum = $db->getOne("select count(1) as count from ($sql) as t "); $limit = 1000; if($sum) { $iEnd = ceil($sum / $limit); for ($i = 0; $i < $iEnd; $i++) { $dataList = $db->getAll($sql_se. " limit " . strval($i * $limit) . "," . $limit); foreach($dataList as $key=>$val){ $cnt++; if (3000 == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题 ob_flush(); flush(); $cnt = 0; } $row[]=@iconv('utf-8', 'gbk', $val['caller_id_number']); $row[]=@iconv('utf-8', 'gbk', $val['start_stamp']); $row[]=@iconv('utf-8', 'gbk', $val['end_stamp']); $row[]=@iconv('utf-8', 'gbk', $val['answer_stamp']); $row[]=$this->changeTimeType($val['billsec']); $row[]=@iconv('utf-8', 'gbk', $val['app_billing_unit']); if($val['billing_type']==1){ $row[]=@iconv('utf-8', 'gbk',"6秒计费"); }else if($val['billing_type']==2){ $row[]=@iconv('utf-8', 'gbk',"1分钟计费"); }else if($val['billing_type']==3){ $row[]=@iconv('utf-8', 'gbk',"18秒计费"); }else if($val['billing_type']==4){ $row[]=@iconv('utf-8', 'gbk',"12秒计费"); }else{ $row[]=""; } $row[]=@iconv('utf-8', 'gbk', $val['bill_num']); $row[]=@iconv('utf-8', 'gbk', $val['bill_total']); $h=""; if($val['hangup_cause']=="NORMAL_CLEARING"){ $h="正常挂断"; }else if($val['hangup_cause']=="CAlL_REJECTED"){ $h="用户拒绝"; }else if($val['hangup_cause']=="NO_ANSWER"){ $h="用户无应答"; }else if($val['hangup_cause']=="NO_USER_RESPONSE"){ $h="用户无响应"; }else if($val['hangup_cause']=="NONE"){ $h="正常挂断"; }else if($val['hangup_cause']=="NORMAL_TEMPORARY_FAILURE"){ $h="呼叫线路超时"; }else if($val['hangup_cause']=="NORMAL_UNSPECIFIED"){ $h="线路不通"; }else if($val['hangup_cause']=="RECOVERY_ON_TIMER_EXPIRE"){ $h="媒体超时"; }else if($val['hangup_cause']=="UNALLOCATED_NUMBER"){ $h="线路不通"; }else if($val['hangup_cause']=="USER_BUSY"){ $h="用户忙"; }else{ $h="呼叫未应答"; } $row[]=@iconv('utf-8', 'gbk', $h); $row[]=@iconv('utf-8', 'gbk', $val['call_key']); $row[]=@iconv('utf-8', 'gbk', $val['requests_text']); $row[]=@iconv('utf-8', 'gbk', $val['call_pbx_node']); fputcsv($fp, $row); unset($row); } } } exit(); } ?>
发表评论