'entrance', 2 => 'export' ]; public static array $positionArr = [ 1 => 'on-site', 2 => 'off-site' ]; /** * @return array|string[] */ public static function getType(): array { $typeArr = self::$typeArr; foreach ($typeArr as $key => $value) { $typeArr[$key] = __('service.channel_management.' . $value); } return $typeArr; } /** * @return array|string[] */ public static function getPosition(): array { $positionArr = self::$positionArr; foreach ($positionArr as $key => $value) { $positionArr[$key] = __('service.channel_management.' . $value); } return $positionArr; } /** * @param array $data * @throws Exception */ public function createModel(array $data) { try { DB::beginTransaction(); $existsWhere = [ ['name', '=', $data['name']], ['parking_id', '=', $data['parking_id']], ['guard_booth_id', '=', $data['guard_booth_id']] ]; if (ParkingChannel::query()->where($existsWhere)->exists()) { throw new Exception(__('service.channel_management.name_exists')); } $model = ParkingChannel::query()->create([ 'name' => $data['name'], 'type' => $data['type'], 'position' => $data['position'], 'parking_id' => $data['parking_id'], 'guard_booth_id' => $data['guard_booth_id'], 'third_party_channel' => $data['third_party_channel'] ?? '', 'created_at' => get_datetime() ]); $this->logService->logCreated($model, 'channel_management.create'); AdminTranslationService::saveTranslation( $data['name'], $data['en_name'] ?? '', $data['tw_name'] ?? '', $model->id, 6 ); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } /** * @param array $data * @param int $id * @throws Exception */ public function updateModel(array $data, int $id) { try { DB::beginTransaction(); // 验证 $existsWhere = [ ['name', '=', $data['name']], ['parking_id', '=', $data['parking_id']], ['guard_booth_id', '=', $data['guard_booth_id']], ['id', '<>', $id] ]; if (ParkingChannel::query()->where($existsWhere)->exists()) { throw new Exception(__('service.channel_management.name_exists')); } // 更新 $model = ParkingChannel::query()->findOrFail($id); $oldValues = $model->toArray(); $model->update([ 'name' => $data['name'], 'type' => $data['type'], 'position' => $data['position'], 'parking_id' => $data['parking_id'], 'guard_booth_id' => $data['guard_booth_id'], 'third_party_channel' => $data['third_party_channel'] ?? '', 'updated_at' => get_datetime() ]); $this->logService->logUpdated( $model, $oldValues, 'channel_management.update' ); AdminTranslationService::saveTranslation( $data['name'], $data['en_name'] ?? '', $data['tw_name'] ?? '', $id, 6 ); 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 = ParkingChannel::query()->findOrFail($id); $this->logService->logDeleted($model, 'channel_management.delete'); $model->delete(); AdminTranslationService::syncDelete($id, 6); DB::commit(); return true; } catch (Exception $e) { DB::rollBack(); throw $e; } } }