|
|
|
@ -2,15 +2,19 @@ |
|
|
|
|
|
|
|
namespace App\Http\Controllers\Admin; |
|
|
|
|
|
|
|
use App\Http\Controllers\Controller; |
|
|
|
use App\Models\AdminFloor; |
|
|
|
use App\Models\AdminFloorRegion; |
|
|
|
use App\Models\EventCalendar; |
|
|
|
use App\Models\Parking; |
|
|
|
use App\Models\ParkingChannel; |
|
|
|
use App\Models\ParkingLicensePlate; |
|
|
|
use App\Models\ParkingPattern; |
|
|
|
use App\Models\ParkingReservation; |
|
|
|
use App\Models\ParkingSpace; |
|
|
|
use App\Models\ParkingSpaceAttributes; |
|
|
|
use App\Models\ParkingSpaceType; |
|
|
|
use App\Services\ApiResponseService; |
|
|
|
use App\Services\ParkingAdminUserService; |
|
|
|
use App\Services\ParkingReservationService; |
|
|
|
use Exception; |
|
|
|
use Illuminate\Http\JsonResponse; |
|
|
|
@ -90,6 +94,7 @@ class ParkingReservationController extends BaseController |
|
|
|
if ($request->has('space_attr_id')) { |
|
|
|
$space_attr_id = $request->input('space_attr_id'); |
|
|
|
if (!empty($space_attr_id)) { |
|
|
|
$query->where('space_attr_id', $space_attr_id); |
|
|
|
} |
|
|
|
} |
|
|
|
if ($request->has('status')) { |
|
|
|
@ -98,20 +103,74 @@ class ParkingReservationController extends BaseController |
|
|
|
$query->where('status', $status); |
|
|
|
} |
|
|
|
} |
|
|
|
if ($request->has('parking_id')) { |
|
|
|
$parking_id = $request->input('parking_id'); |
|
|
|
if (!empty($parking_id)) { |
|
|
|
$query->where('parking_id', $parking_id); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if ($request->has('member_type')) { |
|
|
|
$member_type = $request->input('member_type'); |
|
|
|
if (!empty($member_type)) { |
|
|
|
$query->where('member_type', $member_type); |
|
|
|
} |
|
|
|
} |
|
|
|
if ($request->has('customer_id')) { |
|
|
|
$customer_id = $request->input('customer_id'); |
|
|
|
if (!empty($customer_id)) { |
|
|
|
$query->where('customer_id', $customer_id); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if ($request->has('member_id')) { |
|
|
|
$member_id = $request->input('member_id'); |
|
|
|
if (!empty($member_id)) { |
|
|
|
$query->where('member_id', $member_id); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if ($request->has('start_date')) { |
|
|
|
$start_date = $request->input('start_date'); |
|
|
|
if (!empty($start_date)) { |
|
|
|
$query->where('date', '>=', $start_date); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if ($request->has('end_date')) { |
|
|
|
$end_date = $request->input('end_date'); |
|
|
|
if (!empty($end_date)) { |
|
|
|
$query->where('date', '<=', $end_date); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if ($request->has('reserve_id')) { |
|
|
|
$reserve_id = $request->input('reserve_id'); |
|
|
|
if (!empty($reserve_id)) { |
|
|
|
$query->where('reserve_id', $reserve_id); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 分页 |
|
|
|
$page = $request->input('page', 1); |
|
|
|
$perPage = $request->input('per_page', 10); |
|
|
|
$memberTypeArr = ParkingAdminUserService::$memberType; |
|
|
|
|
|
|
|
$total = $query->count(); |
|
|
|
$items = $query->latest()->forPage($page, $perPage)->get()->each( |
|
|
|
function ($item) { |
|
|
|
function ($item) use ($memberTypeArr) { |
|
|
|
$item['member_type'] = $memberTypeArr[$item['member_type']] ?? ''; |
|
|
|
$item['channel'] = ParkingChannel::getName($item['channel_id']); |
|
|
|
$item['parking'] = Parking::getName($item['parking_id']); |
|
|
|
$item['status'] = $this->service->getStatusStr( |
|
|
|
$item['status'] |
|
|
|
); |
|
|
|
$item['space_type'] = ParkingSpaceType::getName( |
|
|
|
$item['space_type_id'] |
|
|
|
); |
|
|
|
$item['space_attr'] = ParkingSpaceAttributes::getAttr( |
|
|
|
$item['space_attr_id'] |
|
|
|
); |
|
|
|
$item['license_plate'] = ParkingLicensePlate::getNumber( |
|
|
|
$item['license_plate_id'] |
|
|
|
); |
|
|
|
@ -125,7 +184,10 @@ class ParkingReservationController extends BaseController |
|
|
|
$item['space_type_id'], |
|
|
|
$item['license_plate_id'], |
|
|
|
$item['floor_id'], |
|
|
|
$item['floor_region_id'] |
|
|
|
$item['floor_region_id'], |
|
|
|
$item['space_attr_id'], |
|
|
|
$item['channel_id'], |
|
|
|
$item['parking_id'] |
|
|
|
); |
|
|
|
return $item; |
|
|
|
} |
|
|
|
@ -155,7 +217,9 @@ class ParkingReservationController extends BaseController |
|
|
|
'space_attr_data' => ParkingSpaceAttributes::getData(), |
|
|
|
'status_data' => get_select_data( |
|
|
|
$this->service->getStatusArr() |
|
|
|
) |
|
|
|
), |
|
|
|
'parking_list' => Parking::getData(), |
|
|
|
'member_type' => get_select_data(ParkingAdminUserService::$memberType) |
|
|
|
]; |
|
|
|
return $this->responseService->success($data); |
|
|
|
} catch (Exception $e) { |
|
|
|
@ -166,6 +230,58 @@ class ParkingReservationController extends BaseController |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function show(Request $request): JsonResponse |
|
|
|
{ |
|
|
|
try { |
|
|
|
$id = $request->input('id', 0); |
|
|
|
$query = ParkingReservation::query(); |
|
|
|
$query->where('id', $id); |
|
|
|
$page = $request->input('page', 1); |
|
|
|
$perPage = $request->input('per_page', 10); |
|
|
|
$memberTypeArr = ParkingAdminUserService::$memberType; |
|
|
|
|
|
|
|
$total = $query->count(); |
|
|
|
$reservation_number = ''; |
|
|
|
$items = $query->latest()->forPage($page, $perPage)->get()->each( |
|
|
|
function ($item) use ($memberTypeArr, &$reservation_number) { |
|
|
|
$item['member_type'] = $memberTypeArr[$item['member_type']] ?? ''; |
|
|
|
$item['license_plate'] = ParkingLicensePlate::getNumber( |
|
|
|
$item['license_plate_id'] |
|
|
|
); |
|
|
|
$item['is_driver'] = $this->service->getIsDriver( |
|
|
|
$item['is_driver'] |
|
|
|
); |
|
|
|
$item['order_number'] = $item['reserve_id']; |
|
|
|
$reservation_number = $item['reserve_id']; |
|
|
|
unset( |
|
|
|
$item['space_type_id'], |
|
|
|
$item['license_plate_id'], |
|
|
|
$item['floor_id'], |
|
|
|
$item['floor_region_id'], |
|
|
|
$item['space_attr_id'], |
|
|
|
$item['channel_id'], |
|
|
|
$item['parking_id'], |
|
|
|
$item['status'] |
|
|
|
); |
|
|
|
return $item; |
|
|
|
} |
|
|
|
); |
|
|
|
|
|
|
|
return $this->responseService->success([ |
|
|
|
'items' => $items, |
|
|
|
'total' => $total, |
|
|
|
'page' => $page, |
|
|
|
'per_page' => $perPage, |
|
|
|
'last_page' => ceil($total / $perPage), |
|
|
|
'reservation_number' => $reservation_number |
|
|
|
]); |
|
|
|
} catch (Exception $e) { |
|
|
|
return $this->responseService->systemError( |
|
|
|
__('exception.get_data_failed') . ':' . $e->getMessage() |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function statistics(Request $request): JsonResponse |
|
|
|
{ |
|
|
|
try { |
|
|
|
@ -204,4 +320,50 @@ class ParkingReservationController extends BaseController |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getDateStatistics(Request $request): JsonResponse |
|
|
|
{ |
|
|
|
try { |
|
|
|
$param = $request->all(); |
|
|
|
$date = $param['date'] ?? date("Y-m-d", time()); |
|
|
|
|
|
|
|
$query = ParkingReservation::query(); |
|
|
|
$query->where('date', $date); |
|
|
|
if (isset($param['parking_id'])) { |
|
|
|
$query->where('parking_id', $param['parking_id']); |
|
|
|
} |
|
|
|
$total = $query->count(); |
|
|
|
|
|
|
|
$w = date('w', strtotime($date)); |
|
|
|
$week_str = __service("reservation.week{$w}"); |
|
|
|
|
|
|
|
$patternId = EventCalendar::getDatePatternId($date); |
|
|
|
$space_set_name = ''; |
|
|
|
if ($patternId) { |
|
|
|
$space_set_name = ParkingPattern::getName($patternId); |
|
|
|
} |
|
|
|
$space_type_ids = $query->pluck('space_type_id')->toArray(); |
|
|
|
$member_type_list = []; |
|
|
|
if ($space_type_ids) { |
|
|
|
$member_type_list = ParkingSpaceType::getData(); |
|
|
|
$counts = array_count_values((array)$space_type_ids); |
|
|
|
foreach ($member_type_list as &$item) { |
|
|
|
$item['count'] = $counts[$item['id']] ?? 0; |
|
|
|
unset($item['id']); |
|
|
|
} |
|
|
|
} |
|
|
|
$data = [ |
|
|
|
'date_str' => $date, |
|
|
|
'space_set_name' => $space_set_name, |
|
|
|
'total' => $total, |
|
|
|
'week_str' => $week_str, |
|
|
|
'member_type_list' => $member_type_list |
|
|
|
]; |
|
|
|
return $this->responseService->success($data); |
|
|
|
} catch (Exception $e) { |
|
|
|
$m_prefix = __('exception.exception_handler.resource'); |
|
|
|
return $this->responseService->systemError( |
|
|
|
$m_prefix . ':' . $e->getMessage() |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|