diff --git a/app/Http/Controllers/Admin/ParkingSpaceCatMapController.php b/app/Http/Controllers/Admin/ParkingSpaceCatMapController.php new file mode 100644 index 0000000..1c72174 --- /dev/null +++ b/app/Http/Controllers/Admin/ParkingSpaceCatMapController.php @@ -0,0 +1,107 @@ + ParkingSpaceType::getData() + ]; + return $this->responseService->success($data); + } catch (Exception $e) { + $m_prefix = __('exception.exception_handler.resource'); + return $this->responseService->systemError( + $m_prefix . ':' . $e->getMessage() + ); + } + } + + public function floorOverview(Request $request): JsonResponse + { + try { + $floor_id = $request->input('floor_id'); + $where = ['floor_id' => $floor_id]; + $sum = ParkingSpace::query()->where($where)->count(); + $surplus = ParkingSpace::query()->where($where)->where('status', 0) + ->count(); + $under_repair = ParkingSpace::query()->where($where)->where( + 'status', + 2 + )->count(); + $occupancy_rate = get_ratio($sum, $surplus); + $data = [ + 'sum' => $sum, + 'surplus' => $surplus, + 'occupancy_rate' => $occupancy_rate, + 'under_repair' => $under_repair, + 'parking_space_details' => 45 + ]; + return $this->responseService->success($data); + } catch (Exception $e) { + $m_prefix = __('exception.exception_handler.resource'); + return $this->responseService->systemError( + $m_prefix . ':' . $e->getMessage() + ); + } + } + + public function map(Request $request): JsonResponse + { + try { + $floor_id = $request->input('floor_id'); + $parking_space_type = $request->input('parking_space_type'); + $floorData = AdminFloor::query()->where('id', $floor_id)->whereNull( + 'deleted_at' + )->first(); + if ($floorData) { + $floorData['pic_url'] = env('app_url') + . $floorData['image_url']; + unset($floorData['image_url']); + } + $model = ParkingElectronicMap::query()->where( + 'floor_id', + $floor_id + ); + if (isset($parking_space_type) && $parking_space_type) { + $type_arr = explode(',', $parking_space_type); + $space_ids = ParkingSpace::query()->whereIn( + 'space_type_id', + $type_arr + )->pluck('id'); + if ($space_ids) { + $model->whereIn('space_id', $space_ids); + } + } + $electronicMapData = $model->select()->get()->toArray(); + foreach ($electronicMapData as &$item) { + $item['parking_space_number'] = ParkingSpace::getNumber( + $item['space_id'] + ); + unset($item['space_id']); + } + $data = [ + 'floor_data' => $floorData, + 'electronic_map_data' => $electronicMapData + ]; + + return $this->responseService->success($data); + } catch (Exception $e) { + $m_prefix = __('exception.exception_handler.resource'); + return $this->responseService->systemError( + $m_prefix . ':' . $e->getMessage() + ); + } + } +} diff --git a/app/common.php b/app/common.php index 122f6ff..4c78628 100644 --- a/app/common.php +++ b/app/common.php @@ -61,3 +61,17 @@ if (!function_exists('get_select_data')) { return $newData; } } + +if (!function_exists('get_ratio')) { + function get_ratio($max, $min, $is_unit = true): string + { + $ratio = 0; + if ($max > 0 && $min > 0) { + $ratio = round(($min / $max) * 100, 2); + } + if ($is_unit) { + $ratio .= '%'; + } + return $ratio; + } +} diff --git a/routes/admin/api.php b/routes/admin/api.php index 8e56550..8fa20ad 100644 --- a/routes/admin/api.php +++ b/routes/admin/api.php @@ -19,6 +19,7 @@ use App\Http\Controllers\Admin\UploadController; use App\Http\Controllers\Admin\UserController; use Illuminate\Support\Facades\Route; use App\Http\Controllers\Admin\ParkingInformationController; +use App\Http\Controllers\Admin\ParkingSpaceCatMapController; Route::group(['prefix' => 'admin'], function () { @@ -35,6 +36,10 @@ Route::group(['prefix' => 'admin'], function () { // 首页 Route::get('/index', [IndexController::class, 'index']); Route::get('/menu', [IndexController::class, 'menu']); + // 车位地图 + Route::get('/parkingSpaceMap/search', [ParkingSpaceCatMapController::class, 'search']); + Route::get('/parkingSpaceMap/floorOverview', [ParkingSpaceCatMapController::class, 'floorOverview']); + Route::get('/parkingSpaceMap/map', [ParkingSpaceCatMapController::class, 'map']); // 车位预定列表 Route::get('/parkingReservation', [ParkingReservationController::class, 'index']); Route::get('/parkingReservation/search', [ParkingReservationController::class, 'search']);