You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.8 KiB
55 lines
1.8 KiB
<?php
|
|
|
|
namespace App\Exports;
|
|
|
|
use App\Models\ParkingAccessRecord;
|
|
use App\Models\ParkingLicensePlate;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Maatwebsite\Excel\Concerns\FromArray;
|
|
use Maatwebsite\Excel\Concerns\WithHeadings;
|
|
|
|
class ParkingBehaviorExport implements FromArray, WithHeadings
|
|
{
|
|
public function array(): array
|
|
{
|
|
$data = [];
|
|
$index = 1;
|
|
$select = " SELECT DATE_FORMAT(FROM_UNIXTIME(enter_time), "
|
|
. "'%Y-%m-%d') AS time_period, `license_plate_id`, "
|
|
. "COUNT(license_plate_id) AS parking_frequency, SUM(COALESCE("
|
|
. "leave_time, UNIX_TIMESTAMP()) - enter_time) AS parking_duration";
|
|
$from = " FROM `parking_access_record` ";
|
|
$group = " GROUP BY DATE_FORMAT(FROM_UNIXTIME(enter_time),"
|
|
. " '%Y-%m-%d'), `license_plate_id`";
|
|
|
|
$items = DB::select($select . $from . $group);
|
|
foreach ($items as &$item) {
|
|
$license_plate = ParkingLicensePlate::getNumber(
|
|
$item->license_plate_id
|
|
);
|
|
$data[] = [
|
|
'id' => $index,
|
|
'time_period' => $item->time_period,
|
|
'license_plate' => $license_plate,
|
|
'parking_frequency' => $item->parking_frequency,
|
|
'parking_duration' => $item->parking_duration
|
|
];
|
|
$index += 1;
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function headings(): array
|
|
{
|
|
return [
|
|
__('exports.global.index'),
|
|
__('exports.parking_behavior.time_period'),
|
|
__('exports.parking_behavior.license_plate'),
|
|
__('exports.parking_behavior.parking_frequency'),
|
|
__('exports.parking_behavior.parking_duration')
|
|
];
|
|
}
|
|
}
|
|
|