123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Mead
- * Date: 2019/8/19
- * Time: 2:23 PM
- */
- namespace App\Http\Controllers\V1;
- use App\Handlers\ConvertHandler;
- use App\Http\Requests\AreaIdRequest;
- use App\Http\Requests\NearBySiteRequest;
- use App\Models\AreaSetting;
- use App\Models\Parking;
- use App\Repositories\AreaSettingRepository;
- use App\Repositories\ParkingRepository;
- use App\Transformers\ParkingTransformer;
- use Illuminate\Support\Facades\Redis;
- /**
- * 停车点模块
- * Class ParkingController
- * @package App\Http\Controllers\V1
- */
- class ParkingController extends BaseController
- {
- /**
- * 有区域id 获取区域停车点
- * @param AreaIdRequest $request
- * @param ParkingRepository $parkingRepository
- * @return \Dingo\Api\Http\Response
- * User: Mead
- */
- public function stopSite(AreaIdRequest $request, ParkingRepository $parkingRepository, AreaSettingRepository $areaSettingRepository)
- {
- try {
- $area_id = $request->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());
- }
- }
- }
|