1. <?php
  2.  
  3. /**
  4.  * @author yusf
  5.  * @copyright 2020
  6.  */
  7. function exportedList(){
  8.         
  9.         $ids=$_REQUEST['ids'];        
  10.         $sql_se="";
  11.         $sql   =  $_SESSION['callList_condition'] ;
  12.         $order =  $_SESSION['callList_order']; 
  13.         
  14.         if(!empty($ids) && $ids != "" ){
  15.             $sql_se = " select * from ($sql) as t where call_uuid in (".$ids.")  $order  "; 
  16.         }else{
  17.             $sql_se = " select * from ($sql) as t  $order  "; 
  18.         }
  19.         
  20.         ob_end_clean();
  21.         ob_start();
  22.         header ( "Content-type:application/vnd.ms-excel" );
  23.         header ( "Content-Disposition:filename=" . iconv ( "UTF-8", "GB18030", "话单导出记录" ) . ".csv" );
  24.           //不段的刷新缓冲期,来实现大数据流的导出
  25.         $fp = fopen('php://output', 'a');
  26.         
  27.         $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'=>"呼叫节点");
  28.         
  29.         // 输出Excel列名信息$head = array("电子邮件");
  30.         foreach ($title as $i => $v) {
  31.             // CSV的Excel支持GBK编码,一定要转换,否则乱码
  32.             $head[$i] = iconv('utf-8', 'gbk', $v);
  33.         }
  34.         
  35.         fputcsv($fp, $head);
  36.         
  37.         // 计数器
  38.         $cnt = 0;
  39.         // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
  40.         $limit = 1000;
  41.  
  42.         $db = DBHelper::loadDB();
  43.         $sum = $db->getOne("select count(1) as count from ($sql) as t ");
  44.         
  45.         $limit = 1000;
  46.         
  47.         
  48.         
  49.         if($sum) {
  50.             $iEnd = ceil($sum / $limit);
  51.             
  52.             for ($i = 0; $i < $iEnd; $i++) {
  53.                 
  54.                 $dataList = $db->getAll($sql_se. " limit " . strval($i * $limit) . "," . $limit);
  55.                 
  56.                 foreach($dataList as $key=>$val){
  57.                     
  58.                     $cnt++;
  59.                     if (3000 == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
  60.                         ob_flush();
  61.                         flush();
  62.                         $cnt = 0;
  63.                     }
  64.                     
  65.                     
  66.                     $row[]=@iconv('utf-8', 'gbk', $val['caller_id_number']);
  67.                     
  68.                     $row[]=@iconv('utf-8', 'gbk', $val['start_stamp']);
  69.                     
  70.                     $row[]=@iconv('utf-8', 'gbk', $val['end_stamp']);
  71.                     
  72.                     $row[]=@iconv('utf-8', 'gbk', $val['answer_stamp']);
  73.                     
  74.                     $row[]=$this->changeTimeType($val['billsec']);
  75.                     
  76.                     $row[]=@iconv('utf-8', 'gbk', $val['app_billing_unit']);
  77.                     
  78.                     if($val['billing_type']==1){
  79.                         $row[]=@iconv('utf-8', 'gbk',"6秒计费");
  80.                     }else if($val['billing_type']==2){
  81.                         $row[]=@iconv('utf-8', 'gbk',"1分钟计费");
  82.                     }else if($val['billing_type']==3){
  83.                         $row[]=@iconv('utf-8', 'gbk',"18秒计费");
  84.                     }else if($val['billing_type']==4){
  85.                         $row[]=@iconv('utf-8', 'gbk',"12秒计费");
  86.                     }else{
  87.                         $row[]="";
  88.                     }
  89.                     
  90.                     $row[]=@iconv('utf-8', 'gbk', $val['bill_num']);
  91.                     
  92.                     $row[]=@iconv('utf-8', 'gbk', $val['bill_total']);
  93.                     
  94.                     $h="";
  95.                     if($val['hangup_cause']=="NORMAL_CLEARING"){
  96.                        $h="正常挂断"; 
  97.                     }else if($val['hangup_cause']=="CAlL_REJECTED"){
  98.                         $h="用户拒绝";
  99.                     }else if($val['hangup_cause']=="NO_ANSWER"){
  100.                         $h="用户无应答";
  101.                     }else if($val['hangup_cause']=="NO_USER_RESPONSE"){
  102.                         $h="用户无响应";
  103.                     }else if($val['hangup_cause']=="NONE"){
  104.                         $h="正常挂断";
  105.                     }else if($val['hangup_cause']=="NORMAL_TEMPORARY_FAILURE"){
  106.                         $h="呼叫线路超时";
  107.                     }else if($val['hangup_cause']=="NORMAL_UNSPECIFIED"){
  108.                         $h="线路不通";
  109.                     }else if($val['hangup_cause']=="RECOVERY_ON_TIMER_EXPIRE"){
  110.                         $h="媒体超时";
  111.                     }else if($val['hangup_cause']=="UNALLOCATED_NUMBER"){
  112.                         $h="线路不通";
  113.                     }else if($val['hangup_cause']=="USER_BUSY"){
  114.                         $h="用户忙";
  115.                     }else{
  116.                         $h="呼叫未应答";
  117.                     }
  118.                     $row[]=@iconv('utf-8', 'gbk', $h);
  119.                     
  120.                     
  121.                     $row[]=@iconv('utf-8', 'gbk', $val['call_key']);
  122.                     $row[]=@iconv('utf-8', 'gbk', $val['requests_text']);
  123.                     $row[]=@iconv('utf-8', 'gbk', $val['call_pbx_node']);
  124.                     
  125.                     fputcsv($fp, $row);
  126.                     unset($row);
  127.                     
  128.                 }
  129.                 
  130.             }
  131.             
  132.         }
  133.         exit();
  134. }
  135.  
  136. ?>