<?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();
}

?>