您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

CompanySettingsService.php 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Services;
  3. use App\Enums\Setting\DateFormat;
  4. use App\Enums\Setting\WeekStart;
  5. use App\Models\Company;
  6. use Illuminate\Support\Facades\Cache;
  7. class CompanySettingsService
  8. {
  9. public static function getSettings(int $companyId): array
  10. {
  11. $cacheKey = "company_settings_{$companyId}";
  12. return Cache::rememberForever($cacheKey, function () use ($companyId) {
  13. $company = Company::with(['locale'])->find($companyId);
  14. if (! $company) {
  15. return self::getDefaultSettings();
  16. }
  17. return [
  18. 'default_language' => $company->locale->language ?? config('transmatic.source_locale'),
  19. 'default_timezone' => $company->locale->timezone ?? config('app.timezone'),
  20. 'default_currency' => $company->currency_code ?? 'USD',
  21. 'default_date_format' => $company->locale->date_format->value ?? DateFormat::DEFAULT,
  22. 'default_week_start' => $company->locale->week_start->value ?? WeekStart::DEFAULT,
  23. ];
  24. });
  25. }
  26. public static function invalidateSettings(int $companyId): void
  27. {
  28. $cacheKey = "company_settings_{$companyId}";
  29. Cache::forget($cacheKey);
  30. }
  31. public static function getDefaultSettings(): array
  32. {
  33. return [
  34. 'default_language' => config('transmatic.source_locale'),
  35. 'default_timezone' => config('app.timezone'),
  36. 'default_currency' => 'USD',
  37. 'default_date_format' => DateFormat::DEFAULT,
  38. 'default_week_start' => WeekStart::DEFAULT,
  39. ];
  40. }
  41. public static function getSpecificSetting(int $companyId, string $key, $default = null)
  42. {
  43. $settings = self::getSettings($companyId);
  44. return $settings[$key] ?? $default;
  45. }
  46. public static function getDefaultLanguage(int $companyId): string
  47. {
  48. return self::getSpecificSetting($companyId, 'default_language', config('transmatic.source_locale'));
  49. }
  50. public static function getDefaultTimezone(int $companyId): string
  51. {
  52. return self::getSpecificSetting($companyId, 'default_timezone', config('app.timezone'));
  53. }
  54. public static function getDefaultCurrency(int $companyId): string
  55. {
  56. return self::getSpecificSetting($companyId, 'default_currency', 'USD');
  57. }
  58. public static function getDefaultDateFormat(int $companyId): string
  59. {
  60. return self::getSpecificSetting($companyId, 'default_date_format', DateFormat::DEFAULT);
  61. }
  62. public static function getDefaultWeekStart(int $companyId): string
  63. {
  64. return self::getSpecificSetting($companyId, 'default_week_start', WeekStart::DEFAULT);
  65. }
  66. }