include app()->getRootPath() . "/vendor/phpoffice/phpexcel/Classes/PHPExcel.php";
include app()->getRootPath() . "/vendor/phpoffice/phpexcel/Classes/PHPExcel/IOFactory.php";
$PHPExcel = new \PHPExcel();
$expTitle = '非现金订单列表';
//设置excel属性基本信息
$PHPExcel->getProperties()->setCreator("ces")
->setLastModifiedBy("ces")
->setTitle("崇朗科技")
->setSubject($expTitle)
->setDescription("")
->setKeywords($expTitle)
->setCategory("");
$PHPExcel->setActiveSheetIndex(0);
$PHPExcel->getActiveSheet()->setTitle("非现金订单列表");
//填入表头主标题
$PHPExcel->getActiveSheet()->setCellValue('A1', date('Y-m-d H:i:s').'非现金订单列表');
//合并表头单元格
$PHPExcel->getActiveSheet()->mergeCells('A1:T1');
//设置表头行高
$PHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(40);
$PHPExcel->getActiveSheet()->getRowDimension(2)->setRowHeight(30);
//设置表头字体
$PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setName('黑体');
$PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);
$PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
$PHPExcel->getActiveSheet()->getStyle('A2:T2')->getFont()->setName('黑体');
// $PHPExcel->getActiveSheet()->getStyle('A2:T2')->getFont()->setSize(14);
// $PHPExcel->getActiveSheet()->getStyle('A2:T2')->getFont()->setBold(true);
//设置单元格边框
$styleArray = [
'borders' => [
'allborders' => [
//'style' => PHPExcel_Style_Border::BORDER_THICK,//边框是粗的
'style' => \PHPExcel_Style_Border::BORDER_THIN,//细边框
//'color' => array('argb' => 'FFFF0000'),
],
],
];
$PHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('O')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('P')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('Q')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('R')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('S')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('T')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(18);
$PHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(18);
//表格标题
$PHPExcel->getActiveSheet()->setCellValue('A2', '订单编号');
$PHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
$PHPExcel->getActiveSheet()->setCellValue('B2', '交易单号');
$PHPExcel->getActiveSheet()->setCellValue('C2', '运营商');
$PHPExcel->getActiveSheet()->setCellValue('D2', '设备ID');
$PHPExcel->getActiveSheet()->setCellValue('E2', '设备编号');
$PHPExcel->getActiveSheet()->setCellValue('F2', '设备名称');
$PHPExcel->getActiveSheet()->setCellValue('G2', '货道号');
$PHPExcel->getActiveSheet()->setCellValue('H2', '商品名称');
$PHPExcel->getActiveSheet()->setCellValue('I2', '单价');
$PHPExcel->getActiveSheet()->setCellValue('J2', '数量');
$PHPExcel->getActiveSheet()->setCellValue('K2', '出货计数');
$PHPExcel->getActiveSheet()->setCellValue('L2', '出货状态');
$PHPExcel->getActiveSheet()->setCellValue('M2', '出货时间');
$PHPExcel->getActiveSheet()->setCellValue('N2', '订单金额(元)');
$PHPExcel->getActiveSheet()->setCellValue('O2', '退款金额(元)');
$PHPExcel->getActiveSheet()->setCellValue('P2', '提现状态');
$PHPExcel->getActiveSheet()->setCellValue('Q2', '支付方式');
$PHPExcel->getActiveSheet()->setCellValue('R2', '下单时间');
$PHPExcel->getActiveSheet()->setCellValue('S2', '支付时间');
$PHPExcel->getActiveSheet()->setCellValue('T2', '提现时间');
$hang = 3;
$sdetailModel = new Sdetail();
foreach ($list as $v){//循环订单
//获取对应订单商品列表
$sdetailList = $sdetailModel->where(['order_id'=>$v['id']])->select()->toArray();
$shuliang = 0;
$chanpin = $hang;
foreach ($sdetailList as $value){
$shuliang = $shuliang + 1;
//输出订单的商品,由于可能一个人购买多个商品,所以在这先输出了
$PHPExcel->getActiveSheet()->setCellValue('G' . $chanpin, $value['line_num']);
$PHPExcel->getActiveSheet()->setCellValue('H' . $chanpin, $value['product_name']);
$PHPExcel->getActiveSheet()->setCellValue('I' . $chanpin, $value['price'] / 100);
$PHPExcel->getActiveSheet()->setCellValue('J' . $chanpin, $value['nums']);
$PHPExcel->getActiveSheet()->setCellValue('K' . $chanpin, $value['out_nums']);
$PHPExcel->getActiveSheet()->setCellValue('L' . $chanpin, config('params.order')['out_status'][$value['out_status']]);
$PHPExcel->getActiveSheet()->setCellValue('M' . $chanpin, empty($value['out_time'])?'':date('Y-m-d H:i:s',$value['out_time']));
$chanpin = $chanpin + 1;
}
for ($kk = $hang; $kk < ($hang + $shuliang); $kk++) {
//合并单元格
$PHPExcel->getActiveSheet()->mergeCells('A' . $hang . ':A' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('B' . $hang . ':B' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('C' . $hang . ':C' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('D' . $hang . ':D' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('E' . $hang . ':E' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('F' . $hang . ':F' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('N' . $hang . ':N' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('O' . $hang . ':O' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('P' . $hang . ':P' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('Q' . $hang . ':Q' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('R' . $hang . ':R' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('S' . $hang . ':S' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('T' . $hang . ':T' . $kk);
}
$PHPExcel->getActiveSheet()->setCellValue('A' . ($hang), $v['order_code']." ");//加个空格,防止时间戳被转换
$PHPExcel->getActiveSheet()->setCellValue('B' . ($hang), $v['trade_code']." ");
$PHPExcel->getActiveSheet()->setCellValue('C' . ($hang), $v['user_name']." ");
$PHPExcel->getActiveSheet()->setCellValue('D' . ($hang), $v['machine_id']." ");
$PHPExcel->getActiveSheet()->setCellValue('E' . ($hang), $v['machine_number']." ");
$PHPExcel->getActiveSheet()->setCellValue('F' . ($hang), $v['machine_name']." ");
$PHPExcel->getActiveSheet()->setCellValue('N' . ($hang), $v['amount'].'元');
$PHPExcel->getActiveSheet()->setCellValue('O' . ($hang), $v['refund_amount'].'元');
$PHPExcel->getActiveSheet()->setCellValue('P' . ($hang), $v['trans_status']." ");
$PHPExcel->getActiveSheet()->setCellValue('Q' . ($hang), $v['order_type']." ");
$PHPExcel->getActiveSheet()->setCellValue('R' . ($hang), $v['create_time']." ");
$PHPExcel->getActiveSheet()->setCellValue('S' . ($hang), empty($v['pay_time'])?'':date('Y-m-d H:i:s',$v['pay_time'])." ");
$PHPExcel->getActiveSheet()->setCellValue('T' . ($hang), empty($v['trans_time'])?'':date('Y-m-d H:i:s',$v['trans_time'])." ");
$hang = $hang + $shuliang;
}
//设置单元格边框
$PHPExcel->getActiveSheet()->getStyle('A1:T'.$hang)->applyFromArray($styleArray);
//设置自动换行
$PHPExcel->getActiveSheet()->getStyle('A4:T'.$hang)->getAlignment()->setWrapText(true);
//设置字体大小
$PHPExcel->getActiveSheet()->getStyle('A4:T'.$hang)->getFont()->setSize(12);
//垂直居中
$PHPExcel->getActiveSheet()->getStyle('A1:T'.$hang)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
//水平居中
$PHPExcel->getActiveSheet()->getStyle('A1:T'.$hang)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
ob_end_clean(); //这一步非常关键,用来清除缓冲区防止导出的excel乱码
//生成excel文件
$objWriter = \PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel5');
$name = $expTitle . "_" . date('YmdHis');
$path = "/uploads/file/$name.xls";
//下载文件在浏览器窗口
$objWriter->save(app()->getRootPath() . "/public/$path");
if (file_exists(app()->getRootPath() . "/public/$path")) {
$exportLogModel = new \app\model\ExportLogModel();
$data = [];
$data['downloadFileName'] = $name; //导出文件名
$data['downloadUrls'] = $path; //导出地址
$data['functionType'] = 1; //所属功能(1:设备列表、2:设备续费、3:用户列表)
$data['functionTypeDesc'] = $expTitle; //所属功能(1:设备列表、2:设备续费、3:用户列表)
$data['user_id'] = app()->request->userId; //操作人
$data['execResult'] = 1; //导出状态(1:处理成功、2:处理失败、3:处理中、4:中断处理、5:处理超时、6:等待生成、7:重试)
$data['updateTime'] = time();
$exportLogModel->insert($data);
return json($result);
}
$result['code'] = 1;
$result['msg'] = '请重新尝试';
return json($result);