class ActivationCodeService
{
/**
* 导出激活码
* @author YangYunHao
* @date 2021-02-24 14:56:16
* @param array $param:请求参数
*/
public static function exportCode(array $param)
{
set_time_limit(0);
$date = date('YmdHis');
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename={$date}.csv");
header('Cache-Control: max-age=0');
$where = [
'vac_vip_level' => $vipLevel,
'vac_status' => $param['activation_status'] ?? '',
];
$where = ToolUtil::dealNull($where);
$column = ['*'];
$counts = LiveVipActivationCode::getActivationCodeList($where)->count();
$limit = ceil($counts / 1000);
// 打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');
//添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。
fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));
$head = ['激活码', '生成时间', '激活状态', '激活时间', '激活用户', '激活账号', '激活码VIP等级', '激活渠道'];
fputcsv($fp, $head);
$i = 1;
$n = 1;
while ($n <= $limit) {
$offset = ($n - 1) * 1000;
$items = LiveVipActivationCode::getActivationCodeList($where, $column)->offset($offset)->limit(1000)->get()->toArray();
foreach ($items as $key => $val) {
$val['vac_status'] = static::ACT_STATUS[$val['vac_status']] ?? '无';
$val['vac_vip_level'] = static::VIP_LEVEL[$val['vac_vip_level']] ?? '无';
$val['vac_activation_time'] = empty($val['vac_activation_time']) ? '无' : $val['vac_activation_time'];
$val['u_nickname'] = empty($val['u_nickname']) ? '无' : $val['u_nickname'];
$val['u_phone'] = empty($val['u_phone']) ? '无' : $val['u_phone'];
fputcsv($fp, $val);
$i++;
}
if ($i > 20000) {
//读取一部分数据刷新下输出buffer
ob_flush();
flush();
$i = 0;
}
unset($items);
$n++;
}
}
}