logService->menuTitle = 'cat_list'; } /** * 返回翻译后的状态 * @param $status * @return string */ public function getStatusStr($status): string { $value = $this->statusArr[$status] ?? ''; if ($value) { return __('service.parking_space.' . $value); } return $value; } public function getRecognition($recognition): string { if ($recognition) { return __('service.parking_space.' . $recognition); } return '-'; } public function getOperationType($operation_type): string { $value = $this->operationType[$operation_type] ?? ''; if ($value) { return __('service.parking_space.' . $value); } return '-'; } public function getStatusArr(): array { $arr = []; foreach ($this->statusArr as $key => $value) { $arr[$key] = __('service.parking_space.' . $value); } return $arr; } public function optionItems($item) { $item['floor'] = AdminFloor::getName($item['floor_id']); $item['space_attr'] = ParkingSpaceAttributes::getAttr( $item['space_attr_id'] ); $item['space_type'] = ParkingSpaceType::getName( $item['space_type_id'] ); $license_plate = ParkingLicensePlate::getNumber( $item['license_plate_id'] ); $item['license_plate'] = $license_plate ?: '-'; $item['berthing_time'] = is_null($item['berthing_time']) ? '-' : $item['berthing_time']; $item['recognition'] = $this->getRecognition( $item['recognition'] ); $item['status'] = $this->getStatusStr( $item['status'] ); $item['operation_type'] = $this->getOperationType( $item['operation_type'] ); unset( $item['floor_id'], $item['space_attr_id'], $item['space_type_id'], $item['license_plate_id'] ); return $item; } /** * 更新车位数据 * @param array $data * @param string $key * @return Builder * @throws Exception */ public function updateData( array $data, string $key = 'space_type_id' ): Builder { try { DB::beginTransaction(); $ids = $data['space_ids']; $data_id = $data[$key]; $model = ParkingSpace::query()->whereIn('id', $ids)->select(); $oldValues = $model->get()->toArray(); $updateData = [ $key => $data_id, 'updated_at' => get_datetime() ]; $model->update($updateData); $str = $key == 'space_type_id' ? 'space_type.update' : 'space_attributes.update'; $newValue = $oldValues; $newValue[$key] = $data_id; $newValue['updated_at'] = $updateData['updated_at']; $this->logService->logUpdatedData( new ParkingSpace(), $oldValues, $str, $newValue ); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } /** * @param $data * @return Builder|Model * @throws Exception */ public function createModel($data): Builder|Model { try { DB::beginTransaction(); if (ParkingSpace::query()->where('number', $data['number']) ->exists() ) { throw new Exception(__('service.parking_space.number_exists')); } $model = $this->create($data); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } public function create($data): Builder|Model { $model = ParkingSpace::query()->create([ 'floor_id' => $data['floor_id'], 'number' => $data['number'], 'space_attr_id' => $data['space_attr_id'], 'license_plate_id' => $data['license_plate_id'] ?? 0, 'status' => $data['status'] ?? 0, 'space_type_id' => $data['space_type_id'] ?? 0, 'operation_type' => $data['operation_type'] ?? 0, 'created_at' => get_datetime() ]); $this->logService->logCreated($model, 'parking_space.create'); return $model; } // 更新车位属性 public function updateAttr($id, $space_attr_id) { $model = ParkingSpace::query()->findOrFail($id); $oldValues = $model->toArray(); if ($space_attr_id != $oldValues['space_attr_id']) { $model->update([ 'space_attr_id' => $space_attr_id, 'updated_at' => get_datetime() ]); $this->logService->logUpdated( $model, $oldValues, 'space_attributes.update' ); } } // 获取车位列表 public static function getSelectList($floor_id): array { $columns = ['id as parking_space_id', 'number as parking_space_number']; return ParkingSpace::query()->where('floor_id', $floor_id)->select( $columns )->get()->toArray(); } }