logService = $logService; } /** * 创建车牌号码 * @param array $data * @return Model|Builder * @throws Exception */ public function createModel(array $data): Model|Builder { try { DB::beginTransaction(); if (ParkingLicensePlate::query()->where('number', $data['number']) ->exists() ) { throw new Exception(__('service.license_plate.number_exists')); } $model = ParkingLicensePlate::query()->create([ 'number' => $data['number'], 'space_type_id' => $data['space_type_id'], 'created_at' => get_datetime() ]); $this->logService->logCreated($model, '创建车牌号码'); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } /** * @param array $data * @param int $id * @return Model|Builder * @throws Exception */ public function updateModel(array $data, int $id): Model|Builder { try { DB::beginTransaction(); // 验证 $existsWhere = [ ['number', '=', $data['number']], ['id', '<>', $id] ]; if (ParkingLicensePlate::query()->where($existsWhere)->exists()) { throw new Exception(__('service.license_plate.number_exists')); } // 更新 $model = ParkingLicensePlate::query()->findOrFail($id); $oldValues = $model->toArray(); $model->update([ 'number' => $data['number'], 'updated_at' => get_datetime() ]); $this->logService->logUpdated($model, $oldValues, '更新车牌号码'); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } /** * @param $id * @return bool * @throws Exception */ public function deleteModel($id): bool { try { DB::beginTransaction(); $model = ParkingLicensePlate::query()->findOrFail($id); $this->logService->logDeleted($model, '删除车牌号码'); $model->delete(); DB::commit(); return true; } catch (Exception $e) { DB::rollBack(); throw $e; } } public function clearModel($space_type_id): bool { try { DB::beginTransaction(); $oldLicensePlate = ParkingLicensePlate::query()->where( 'space_type_id', $space_type_id ) ->select()->get()->toArray(); if (empty($oldLicensePlate)) { throw new Exception(__('service.license_plate.not_clear')); } $this->logService->logDeletedData( new ParkingLicensePlate(), '删除车牌号码', $oldLicensePlate ); ParkingLicensePlate::query()->where('space_type_id', $space_type_id) ->delete(); DB::commit(); return true; } catch (Exception $e) { DB::rollBack(); throw $e; } } }