service = $service; } /** * @param Request $request * @return JsonResponse */ public function index(Request $request): JsonResponse { try { $query = ParkingGateControl::query(); if ($request->has('license_plate')) { $license_plate = $request->input('license_plate'); if ($license_plate) { $license_plate_id = ParkingLicensePlate::getValueId( $license_plate ); if ($license_plate_id) { $query->where('license_plate_id', $license_plate_id); } else { $query->where('id', 0); } } } if ($request->has('member_type')) { $member_type = $request->input('member_type'); if ($member_type) { $query->where('member_type', $member_type); } } if ($request->has('enter_at')) { $enter_at = $request->input('enter_at'); if ($enter_at) { $query->where('enter_at', '>=', $enter_at); } } if ($request->has('leave_at')) { $leave_at = $request->input('leave_at'); if ($leave_at) { $query->where('leave_at', '<=', $leave_at); } } if ($request->has('customer_id')) { $customer_id = $request->input('customer_id'); if ($customer_id) { $query->where('customer_id', $customer_id); } } if ($request->has('member_id')) { $member_id = $request->input('member_id'); if ($member_id) { $query->where('member_id', $member_id); } } // 分页 $page = $request->input('page', 1); $perPage = $request->input('per_page', 10); $total = $query->count(); $items = $query->latest()->forPage($page, $perPage)->get()->each( function ($item) { return $this->service->getItem($item); } ); return $this->responseService->success([ 'items' => $items, 'total' => $total, 'page' => $page, 'per_page' => $perPage, 'last_page' => ceil($total / $perPage), ]); } catch (Exception $e) { $m_prefix = __('exception.exception_handler.resource'); return $this->responseService->systemError( $m_prefix . ':' . $e->getMessage() ); } } /** * 列表搜索数据 * @return JsonResponse */ public function search(): JsonResponse { try { $data = [ 'member_type_list' => 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 show(string $id): JsonResponse { try { $data = ParkingGateControl::query()->find($id); return $this->responseService->success( $this->service->getItem($data) ); } catch (Exception $e) { return $this->responseService->systemError( __('exception.get_data_failed') . ':' . $e->getMessage() ); } } public function getNumber(Request $request): JsonResponse { try { $data = $request->all(); $rules = [ 'number' => 'required' ]; $messages = [ 'number.required' => __validation( 'gate_control.n_empty' ) ]; $this->validateData($data, $rules, $messages); $is_reservation = false; $exists = ParkingReservation::query()->where([ 'reserve_id' => $data['number'], 'status' => 1, 'date' => date('Y-m-d', time()) ])->exists(); if ($exists) { $is_reservation = true; } if (!$is_reservation) { $license_plate_id = (new ParkingLicensePlateService( new OperationLogService() ))->createLicenseId($data['number']); $exists = ParkingReservation::query()->where([ 'license_plate_id' => $license_plate_id, 'status' => 1, 'date' => date('Y-m-d', time()) ])->exists(); if ($exists) { $is_reservation = true; } } if (!$is_reservation) { throw new CustomException( __service( 'gate_control.not_reservation' ) ); } return $this->responseService->success( [], __service( 'gate_control.yes_reservation' ) ); } catch (CustomException $e) { throw $e; } catch (Exception $e) { return $this->responseService->systemError( __('exception.get_data_failed') . ':' . $e->getMessage() ); } } public function getScreenshot() { try { throw new CustomException(__service('gate_control.get_error')); return $this->responseService->success( [ 'screenshot_url' => 'aa.jpeg' ] ); } catch (CustomException $e) { throw $e; } catch (Exception $e) { return $this->responseService->systemError( __('exception.get_data_failed') . ':' . $e->getMessage() ); } } protected function validateData($data, $rules, $messages) { $validator = Validator::make($data, $rules, $messages); if ($validator->fails()) { throw new ValidationException($validator); } } public function enter(Request $request): JsonResponse { try { $data = $request->all(); $rules = [ 'number' => 'required', 'enter_time' => 'required', 'channel_id' => 'required' ]; $messages = [ 'number.required' => __validation( 'gate_control.n_empty' ), 'enter_time.required' => __validation( 'gate_control.et_empty' ), 'channel_id.required' => __validation( 'gate_control.c_empty' ) ]; $this->validateData($data, $rules, $messages); $this->service->enterModel($data); return $this->responseService->success( null, __('admin.operation_successful') ); } catch (ValidationException|CustomException $e) { throw $e; } catch (Exception $e) { return $this->responseService->systemError( __('admin.operation_failed') . ':' . $e->getMessage() ); } } public function leave(Request $request): JsonResponse { try { $data = $request->all(); $rules = [ 'license_plate' => 'required', 'leave_time' => 'required', 'channel_id' => 'required' ]; $messages = [ 'license_plate.required' => __validation( 'gate_control.lp_empty' ), 'leave_time.required' => __validation( 'gate_control.lt_empty' ), 'channel_id.required' => __validation( 'gate_control.c_empty' ) ]; $this->validateData($data, $rules, $messages); $this->service->leaveModel($data); return $this->responseService->success( null, __('admin.operation_successful') ); } catch (ValidationException|CustomException $e) { throw $e; } catch (Exception $e) { return $this->responseService->systemError( __('admin.operation_failed') . ':' . $e->getMessage() ); } } }