<?php
namespace app\admin\controller;
use think\Db;
//導出管理
class Daochu extends Common
{
//第二種報表
public function exporttwo(){
// 引入類庫
$parking_length=$_GET['parking_length'];
$rank=$_GET['rank'];
$rank_arr=$this->time_differ($rank);
// 檔案名和檔案類型
$fileName = "導出時長超過x小時的車輛彙總".date("Y-m-d H:i:s");
$fileType = "xlsx";
// 模拟擷取資料
//$data = self::getData();
$obj =new \PHPExcel();
// 以下内容是excel檔案的資訊描述資訊
$obj->getProperties()->setCreator(''); //設定建立者
$obj->getProperties()->setLastModifiedBy(''); //設定修改者
$obj->getProperties()->setTitle(''); //設定标題
$obj->getProperties()->setSubject(''); //設定主題
$obj->getProperties()->setDescription(''); //設定描述
$obj->getProperties()->setKeywords('');//設定關鍵詞
$obj->getProperties()->setCategory('');//設定類型
$data=Db::table("parking_record")->field("license_go_in,time_go_in,time_go_out,owner,parking_length")->select();
//echo Db::table("parking_record")->getLastSql();die;
//print_r($data);die;
// 設定目前sheet
$obj->setActiveSheetIndex(0);
// 設定目前sheet的名稱
$obj->getActiveSheet()->setTitle("導出時長超過x小時的車輛彙總");
// 列标
$list = ['A', 'B', 'C','D','E','F','G','H','I'];
// 填充第一行資料
$obj->getActiveSheet()
->setCellValue($list[0] . '1', '序号') //序号加1
->setCellValue($list[1] . '1', '車牌号')
->setCellValue($list[2] . '1', '入場時間')
->setCellValue($list[3] . '1', '出場時間')
->setCellValue($list[4] . '1', '停車時長')
->setCellValue($list[5] . '1', '部門') //去基表裡面查
->setCellValue($list[6] . '1', '車位名稱')//去基表裡面查
->setCellValue($list[7] . '1', '車主姓名')
->setCellValue($list[8] . '1', '異常原因');
// 填充第n(n>=2, n∈N*)行資料
$length = count($data);
for ($i = 0; $i < $length; $i++) {
//$obj->getActiveSheet()->setCellValue($list[0] . ($i + 2), '20190101', \PHPExcel_Cell_DataType::TYPE_STRING);//将其設定為文本格式
$obj->getActiveSheet()->setCellValue($list[0] . ($i + 2), ($i+1), \PHPExcel_Cell_DataType::TYPE_STRING);
$obj->getActiveSheet()->setCellValue($list[1] . ($i + 2), $data[$i]['license_go_in']);
$obj->getActiveSheet()->setCellValue($list[2] . ($i + 2), $data[$i]['time_go_in']);
$obj->getActiveSheet()->setCellValue($list[3] . ($i + 2), $data[$i]['time_go_out']);
$obj->getActiveSheet()->setCellValue($list[4] . ($i + 2), round($data[$i]['parking_length']/3600,2));
//去基表裡面查詢
$one=Db::table("parking_place_detail")->where(['car_number'=>$data[$i]['license_go_in']])->find();
if(empty($one)){
$partment="暫無";
$car_parking="暫無車位名稱";
}else{
$partment=$one['department_name'];
$car_parking=$one['parking_group'];
}
$obj->getActiveSheet()->setCellValue($list[5] . ($i + 2), $partment);
$obj->getActiveSheet()->setCellValue($list[6] . ($i + 2), $car_parking);
$obj->getActiveSheet()->setCellValue($list[7] . ($i + 2), $data[$i]['owner']);
$obj->getActiveSheet()->setCellValue($list[8] . ($i + 2), '停車時長超過'.$parking_length.'小時');
}
// 設定加粗和左對齊
foreach ($list as $col) {
// 設定第一行加粗
$obj->getActiveSheet()->getStyle($col . '1')->getFont()->setBold(true);
// 設定第1-n行,左對齊
for ($i = 1; $i <= $length + 1; $i++) {
$obj->getActiveSheet()->getStyle($col . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
}
// 設定列寬
$obj->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$obj->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$obj->getActiveSheet()->getColumnDimension('C')->setWidth(20);
$obj->getActiveSheet()->getColumnDimension('D')->setWidth(20);
$obj->getActiveSheet()->getColumnDimension('E')->setWidth(20);
$obj->getActiveSheet()->getColumnDimension('F')->setWidth(20);
$obj->getActiveSheet()->getColumnDimension('G')->setWidth(20);
$obj->getActiveSheet()->getColumnDimension('H')->setWidth(15);
$obj->getActiveSheet()->getColumnDimension('I')->setWidth(15);
// 導出
ob_clean();
if ($fileType == 'xls') {
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $fileName . '.xls');
header('Cache-Control: max-age=1');
$objWriter = new \PHPExcel_Writer_Excel5($obj);
$objWriter->save('php://output');
exit;
} elseif ($fileType == 'xlsx') {
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $fileName . '.xlsx');
header('Cache-Control: max-age=1');
$objWriter = \PHPExcel_IOFactory::createWriter($obj, 'Excel2007');
$objWriter->save('php://output');
exit;
}
}
//時間區間變成兩個時間差
public function time_differ($rank){
//$rank="2020-05-01 - 2020-05-30";
$rank_arr=explode(' ',$rank);
$return_arr['start_time']=$rank_arr[0];
$return_arr['end_time']=$rank_arr[2];
return $return_arr;
}
}