get('area_id', false); if ($areaSettingRepository->byAreaIdGetIsWholeAreaHuanche($area_id) === AreaSetting::WHOLE_AREA_HUANCHE_NO) { $parking = $parkingRepository->byAreaIdGetAllStopSites($area_id); } else { $parking = $parkingRepository->byAreaIdGetBanStopSites($area_id); } return $this->response->collection($parking, ParkingTransformer::class); } catch (\Exception $exception) { return $this->errorNoValidation($exception->getMessage()); } } /** * 有区域id 获取区域禁停区 * @param AreaIdRequest $request * @param ParkingRepository $parkingRepository * @return \Dingo\Api\Http\Response * User: Mead */ public function banStopSite(AreaIdRequest $request, ParkingRepository $parkingRepository) { try { $area_id = $request->get('area_id', false); $parking = $parkingRepository->byAreaIdGetBanStopSites($area_id); return $this->response->collection($parking, ParkingTransformer::class); } catch (\Exception $exception) { return $this->errorNoValidation($exception->getMessage()); } } /** * 获取附近停车区 * @param NearBySiteRequest $request * @param Parking $parking * User: Mead */ public function nearbySite(NearBySiteRequest $request, Parking $parking, AreaSettingRepository $areaSettingRepository) { try { $lng = $request->get('lng'); $lat = $request->get('lat'); $location_lat = $request->get('location_lat'); $location_lng = $request->get('location_lng'); $area_id = $request->get('area_id'); if ($areaSettingRepository->byAreaIdGetIsWholeAreaHuanche($area_id) === AreaSetting::WHOLE_AREA_HUANCHE_OK) { return $this->errorNoValidation('该运营区域内都可以停车(除禁停区内)!'); } $options = ['SORT' => 'ASC', 'WITHDIST' => true, 'WITHCOORD' => true]; $redis = Redis::connection(); $stop_bike_stations = $redis->georadius(Parking::REDIS_STOP_BIKE_SITE_TAG . "_{$area_id}", $lng, $lat, 1, 'km', $options); $ids = array_column($stop_bike_stations, 0); $stop_bike_names = $parking->whereIn('id', $ids)->get(['id', 'name', 'description', 'parking_centre as centre', 'parking_fence as fence', 'parking_radius as radius', 'type'])->mapWithKeys(function ($item) { $item['centre'] = js2php($item['centre']); $item['fence'] = js2php($item['fence']); return [$item['id'] => $item]; })->toArray(); $return_stop_bikes = []; foreach ($stop_bike_stations as $bike_station) { $item = $stop_bike_names[$bike_station[0]]; $item['location_distance'] = format_mileage(bcdiv((new ConvertHandler())->distance($location_lat, $location_lng, $bike_station[2][1], $bike_station[2][0]), 1000, 2)); $item['distance'] = format_mileage($bike_station[1]); $return_stop_bikes[] = $item; } return $this->response->array($return_stop_bikes); } catch (\Exception $exception) { return $this->errorException($exception->getMessage()); } } }