DownloadErrorController.class.php 5.68 KB
<?php
/**
 * 圆圈付费导出错误信息
 * @author: 蔡建华
 */

namespace Apicp\Controller\ImportUser;

use Com\Cache;
use Com\PythonExcel;

class DownloadErrorController extends AbstractController
{

    const MAX_ROWS = 1000; // 最多允许上传1000条数据


    protected $_require_login = false;

    /**
     * DownloadError
     *
     * @author
     * @desc 导出错误信息
     *
     * @param string cache_sign:true 缓存标识
     *
     * @return  void
     */
    public function Index_get()
    {

        // 缓存标识
        $cache_sign = I('get.cache_sign');

        // 临时文件存放目录
        $save_path = APP_PATH . 'Data';

        if (!is_dir($save_path)) {
            mkdir($save_path, 0777);
        }

        if (empty($cache_sign)) {
            // 模板下载
            // 缓存标识为空
            $file_name = '导入人员信息模板.xls';

            Vendor('PHPExcel.PHPExcel');
            $excel = new \PHPExcel();
            // 设置sheet标题
            $excel->getActiveSheet()->setTitle('data');
            //设置第一行数据
            $excel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);
            $excel->getActiveSheet()->setCellValue('A1',
                "填写说明:\n 1,此表格表头不允许删除,系统将从第3行开始匹配人员;\n 2,系统将按照“姓名、手机号或邮箱”(三者必填其一)进行人员匹配,当有人员重名时,请务必填写手机号和邮箱,以免匹配错误。");
            $excel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $excel->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
            // 合并单元格
            $excel->getActiveSheet()->mergeCells('A1:I1');
            // 设置行高
            $excel->getActiveSheet()->getRowDimension('1')->setRowHeight(60);
            // 设置背景
            $excel->getActiveSheet()->getStyle('A1:I1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
            $excel->getActiveSheet()->getStyle('A1:I1')->getFill()->getStartColor()->setARGB('FFFACD');
            $excel->getActiveSheet()->getStyle('A1')->getFont()->getColor()->setARGB(\PHPExcel_Style_Color::COLOR_WHITE);
            // 设置表头
            $excel->getActiveSheet()->setCellValue('A2', "姓名");
            $excel->getActiveSheet()->setCellValue('B2', "手机号");
            $excel->getActiveSheet()->setCellValue('C2', "邮箱");
            // 设置表头背景颜色
            $excel->getActiveSheet()->getStyle('A2:I1')->getFont()->getColor()->setARGB('333333');
            //输出到浏览器
            header("Pragma: public");
            header("Expires: 0");
            header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
            header("Content-Type:application/force-download");
            header("Content-Type:application/vnd.ms-execl");
            header("Content-Type:application/download");
            header('Content-Type:application/octet-stream');
            $write = new \PHPExcel_Writer_Excel5($excel);
            ob_end_clean();//清除缓冲区,避免乱码
            $encoded_filename = urlencode($file_name);
            $encoded_filename = str_replace("+", "%20", $encoded_filename);
            $ua = $_SERVER["HTTP_USER_AGENT"];
            if (preg_match("/MSIE/", $ua)) {
                header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
            } else {
                if (preg_match("/Firefox/", $ua)) {
                    header('Content-Disposition: attachment; filename*="utf8\'\'' . $file_name . '"');
                } else {
                    header('Content-Disposition: attachment; filename="' . $file_name . '"');
                }
            }
            header("Content-Transfer-Encoding:binary");
            $write->save('php://output');
            exit;
        } else {
            // 错误数据下载
            $cache =& Cache::instance();

            // 防止缓存不存在时出错
            $error_list = [];
            try {
                $error_list = $cache->get('Common.Import_User_' . $cache_sign);
            } catch (\Think\Exception $e) {
                \Think\Log::record($e);
            } catch (\Exception $e) {
                \Think\Log::record($e);
            }

            // Excel 表头字段
            $title = [''];

            $rows = [];
            // 错误数据处理
            foreach ($error_list as $v) {
                $value = [
                    $v['username'],
                    $v['mobile'],
                    $v['memEmail'],
                    $v['error'],
                ];
                $rows[] = $value;
            }
            array_unshift($rows, ['姓名', '手机号', '邮箱', '失败原因']);

            $file_name = '导入失败人员信息_' . NOW_TIME.'.xls';
        }
        // 生成Excel 下载
        $real_path = $save_path . D_S . $file_name;
        $ret = PythonExcel::instance()->write($real_path, $title, $rows);
        if ($ret) {
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename=' . $file_name);
            header('Content-Transfer-Encoding: binary');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
            header('Content-Length: ' . filesize($real_path));
            readfile($real_path);
        }

        // 删除临时文件
        unlink($real_path);
        return true;
    }

}