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) { $str = $recognition >= $this->recognition ? 'high' : 'land'; return __('service.parking_space.' . $str); } 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 getStatusArrKey(): array { return array_keys($this->statusArr); } 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->createData($data); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } public function createData($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(); } // 更新状态和车牌 public function updateStatus($id, $status, $license_plate) { try { DB::beginTransaction(); $model = ParkingSpace::query()->findOrFail($id); $oldValues = $model->toArray(); $update = [ 'status' => $status, 'updated_at' => get_datetime() ]; if (!empty($license_plate) && $status == 1) { $number_id = ParkingLicensePlate::getValueId($license_plate); if (!$number_id) { $licensePlateService = new ParkingLicensePlateService($this->logService); $create = [ 'number' => $license_plate, 'space_type_id' => $oldValues['space_type_id'] ]; $licensePlateModel = $licensePlateService->createData($create); $number_id = $licensePlateModel->id; } if ($number_id) { $update['license_plate_id'] = $number_id; $update['berthing_time'] = get_datetime(); $update['recognition'] = 'high'; } } else if (!$status) { $update['license_plate_id'] = 0; $update['berthing_time'] = null; $update['recognition'] = ''; } $model->update($update); $this->logService->logUpdated( $model, $oldValues, 'space_attributes.update' ); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } }