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.
91 lines
2.9 KiB
91 lines
2.9 KiB
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\AdminFloor;
|
|
use App\Models\ParkingSpace;
|
|
use App\Models\ParkingSpaceAttributes;
|
|
use App\Models\ParkingSpaceType;
|
|
use App\Models\ParkingUtilizationRate;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
class UtilizationRateService extends BaseService
|
|
{
|
|
protected string $menuTitle = 'utilization_rate';
|
|
|
|
public function getItem($item)
|
|
{
|
|
$item['floor'] = '';
|
|
$item['number'] = '';
|
|
$item['space_type'] = '';
|
|
$item['space_attr'] = '';
|
|
$parkingSpace = ParkingSpace::query()->find(
|
|
$item['space_id']
|
|
);
|
|
if ($parkingSpace) {
|
|
$item['floor'] = AdminFloor::getName(
|
|
$parkingSpace['floor_id']
|
|
);
|
|
$item['number'] = $parkingSpace['number'];
|
|
$item['space_type'] = ParkingSpaceType::getName(
|
|
$parkingSpace['space_type_id']
|
|
);
|
|
$item['space_attr'] = ParkingSpaceAttributes::getAttr(
|
|
$parkingSpace['space_attr_id']
|
|
);
|
|
}
|
|
$item['rate'] = rtrim($item['rate'], ' ') . '%';
|
|
$format = $item['date_type'] == 1 ? 'Y/m/d H:i' : 'Y/m/d';
|
|
$item['start_time'] = date($format, strtotime($item['start_time']));
|
|
$item['end_time'] = date($format, strtotime($item['end_time']));
|
|
unset($item['space_id'], $item['date_type']);
|
|
return $item;
|
|
}
|
|
|
|
/**
|
|
* @param $parents
|
|
* @return Builder
|
|
*/
|
|
public function searchQuery($parents): Builder
|
|
{
|
|
$query = ParkingUtilizationRate::query();
|
|
$start_time = $parents['start_time'] ??
|
|
get_datetime('date') . ' 00:00:00';
|
|
$ent_time = $parents['end_time'] ??
|
|
get_datetime('date') . ' 23:59:59';
|
|
|
|
$start_date = get_datetime('date', strtotime($start_time));
|
|
$end_date = get_datetime('date', strtotime($ent_time));
|
|
$date_type = $start_date == $end_date ? 1 : 2;
|
|
|
|
$query->where('date_type', $date_type);
|
|
$query->where('start_time', '>=', $start_time);
|
|
$query->where('end_time', '<', $ent_time);
|
|
|
|
$spaceIdsWhere = [];
|
|
if (isset($parents['floor_id']) && $parents['floor_id']) {
|
|
$spaceIdsWhere['floor_id'] = $parents['floor_id'];
|
|
}
|
|
if (isset($parents['number']) && $parents['number']) {
|
|
$spaceIdsWhere['number'] = $parents['number'];
|
|
}
|
|
|
|
if (isset($parents['parking_space_type'])
|
|
&& $parents['parking_space_type']
|
|
) {
|
|
$spaceIdsWhere['space_type_id'] = $parents['parking_space_type'];
|
|
}
|
|
|
|
if ($spaceIdsWhere) {
|
|
$spaceIds = ParkingSpace::query()->where($spaceIdsWhere)->pluck(
|
|
'id'
|
|
);
|
|
if ($spaceIds) {
|
|
$query->whereIn('space_id', $spaceIds);
|
|
} else {
|
|
$query->where('id', 0);
|
|
}
|
|
}
|
|
return $query;
|
|
}
|
|
}
|
|
|