'automatic', 2 => 'manual' ]; protected string $menuTitle = 'gate_control'; public function getItem($item) { $typeArr = $this->getType(); $item['reserve_id'] = ''; if ($item['reservation_id']) { $item['reserve_id'] = ParkingReservation::query()->where( 'id', $item['reservation_id'] )->value( 'reserve_id' ); } $item['member_type'] = ParkingSpaceType::getName($item['member_type']); $item['license_plate'] = ParkingLicensePlate::getNumber( $item['license_plate_id'] ); $ParkingChannel = ParkingChannel::getFirst($item['channel_id']); $item['channel'] = ''; $item['parking'] = ''; if ($ParkingChannel) { $item['channel'] = $ParkingChannel['name']; $item['parking'] = Parking::getName($ParkingChannel['parking_id']); } $item['enter_type_str'] = $typeArr[$item['enter_type']] ?? ''; $item['leave_type_str'] = $typeArr[$item['leave_type']] ?? ''; $item['dwell_time'] = get_time_difference_str( $item['enter_at'], $item['leave_at'] ?: '' ); $item['enter_img'] = get_image_url($item['enter_img']); $item['leave_img'] = get_image_url($item['leave_img']); $item['admin_username'] = $item['admin_user_id'] ? AdminUsers::getUsername($item['admin_user_id']) : ''; unset($item['license_plate_id'], $item['channel_id'], $item['reservation_id'], $item['free_passage'], $item['admin_user_id']); return $item; } /** * @return array|string[] */ public function getType(): array { $typeArr = self::$typeArr; foreach ($typeArr as $key => $value) { $typeArr[$key] = __service($this->menuTitle . '.' . $value); } return $typeArr; } public function enterModel($data) { try { DB::beginTransaction(); $number = $data['number']; $enter_time = $data['enter_time']; $is_reservation = $data['is_reservation'] ?? 0; $date = date("Y-m-d", strtotime($enter_time)); $reservation_id = 0; $license_plate_id = ''; $member_type = 0; $customer_id = ''; $member_id = ''; $ParkingReservation = ParkingReservation::query()->where([ 'reserve_id' => $number, 'status' => 1, 'date' => $date ])->first(); if ($ParkingReservation) { $reservation_id = $ParkingReservation['id']; $license_plate_id = $ParkingReservation['license_plate_id']; $member_type = $ParkingReservation['member_type']; $customer_id = $ParkingReservation['customer_id']; $member_id = $ParkingReservation['member_id']; } $enter_img = $data['enter_img'] ?? ''; $channel_id = $data['channel_id']; if (!$license_plate_id) { $license_plate_id = (new ParkingLicensePlateService( $this->logService ))->createLicenseId($number); } $id = ParkingGateControl::query()->where( 'license_plate_id', $license_plate_id )->whereNull('leave_at')->value('id'); if ($id) { throw new Exception( __service($this->menuTitle . '.cat_exists') ); } $model = ParkingGateControl::query()->create([ 'license_plate_id' => $license_plate_id, 'channel_id' => $channel_id, 'enter_type' => 2, 'enter_img' => $enter_img, 'enter_at' => $enter_time, 'reservation_id' => $reservation_id, 'member_type' => $member_type, 'customer_id' => $customer_id, 'member_id' => $member_id, 'admin_user_id' => $data['admin_user_id'], 'created_at' => get_datetime() ]); $this->logService->logCreated($model, $this->menuTitle . '.create_enter'); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } public function leaveModel($data) { try { DB::beginTransaction(); $license_plate = $data['license_plate']; $leave_time = $data['leave_time']; $leave_img = $data['leave_img'] ?? ''; $free_passage = $data['free_passage'] ?? 0; $license_plate_id = (new ParkingLicensePlateService( $this->logService ))->createLicenseId($license_plate); $id = ParkingGateControl::query()->where( 'license_plate_id', $license_plate_id )->whereNull('leave_at')->value('id'); if (!$id) { throw new Exception( __service($this->menuTitle . '.cat_not_exists') ); } $model = ParkingGateControl::query()->findOrFail($id); $oldValue = $model->toArray(); $model->update([ 'enter_type' => 2, 'leave_img' => $leave_img, 'leave_at' => $leave_time, 'free_passage' => $free_passage, 'admin_user_id' => $data['admin_user_id'], 'updated_at' => get_datetime() ]); $this->logService->logUpdated($model, $oldValue, $this->menuTitle . '.update_leave'); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } }