导出多商品订单

发布时间 2023-06-21 17:13:01作者: 垖垏尐
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);