SettingGroupService.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace App\Services;
  3. use App\Models\SettingGroup;
  4. use Illuminate\Support\Facades\DB;
  5. use Illuminate\Support\Facades\Log;
  6. use Slowlyo\OwlAdmin\Services\AdminService;
  7. /**
  8. * 设置分组管理
  9. *
  10. * @method SettingGroup getModel()
  11. * @method SettingGroup|\Illuminate\Database\Query\Builder query()
  12. */
  13. class SettingGroupService extends AdminService
  14. {
  15. protected string $modelName = SettingGroup::class;
  16. /**
  17. * 获取设置分组列表
  18. *
  19. * @return mixed
  20. */
  21. public function getList(array $params = [])
  22. {
  23. try {
  24. $query = $this->query();
  25. // 添加搜索条件
  26. if (! empty($params['keyword'])) {
  27. $query->where(function ($q) use ($params) {
  28. $q->where('name', 'like', "%{$params['keyword']}%")
  29. ->orWhere('code', 'like', "%{$params['keyword']}%");
  30. });
  31. }
  32. // 排序
  33. $query->orderBy('sort', 'asc')->orderBy('id', 'desc');
  34. return $query->paginate($params['perPage'] ?? 20);
  35. } catch (\Exception $e) {
  36. Log::error('获取设置分组列表失败', ['error' => $e->getMessage()]);
  37. throw $e;
  38. }
  39. }
  40. /**
  41. * 创建设置分组
  42. *
  43. * @return mixed
  44. */
  45. public function createGroup(array $data)
  46. {
  47. try {
  48. return DB::transaction(function () use ($data) {
  49. // 检查code是否已存在
  50. abort_if(
  51. $this->query()->where('code', $data['code'])->exists(),
  52. 422,
  53. '分组代码已存在'
  54. );
  55. return $this->getModel()::create($data);
  56. });
  57. } catch (\Exception $e) {
  58. Log::error('创建设置分组失败', ['error' => $e->getMessage(), 'data' => $data]);
  59. throw $e;
  60. }
  61. }
  62. /**
  63. * 更新设置分组
  64. *
  65. * @param int $id
  66. * @return mixed
  67. */
  68. public function updateGroup($id, array $data)
  69. {
  70. try {
  71. return DB::transaction(function () use ($id, $data) {
  72. $group = $this->query()->findOrFail($id);
  73. // 检查code是否已存在(排除自身)
  74. abort_if(
  75. $this->query()->where('code', $data['code'])->where('id', '!=', $id)->exists(),
  76. 422,
  77. '分组代码已存在'
  78. );
  79. return $group->update($data);
  80. });
  81. } catch (\Exception $e) {
  82. Log::error('更新设置分组失败', ['error' => $e->getMessage(), 'id' => $id, 'data' => $data]);
  83. throw $e;
  84. }
  85. }
  86. /**
  87. * 删除设置分组
  88. *
  89. * @param int $id
  90. * @return mixed
  91. */
  92. public function deleteGroup($id)
  93. {
  94. try {
  95. return DB::transaction(function () use ($id) {
  96. return $this->query()->findOrFail($id)->delete();
  97. });
  98. } catch (\Exception $e) {
  99. Log::error('删除设置分组失败', ['error' => $e->getMessage(), 'id' => $id]);
  100. throw $e;
  101. }
  102. }
  103. /**
  104. * 获取设置分组详情
  105. *
  106. * @param int $id
  107. * @return mixed
  108. */
  109. public function groupDetail($id)
  110. {
  111. try {
  112. return $this->query()->findOrFail($id);
  113. } catch (\Exception $e) {
  114. Log::error('获取设置分组详情失败', ['error' => $e->getMessage(), 'id' => $id]);
  115. throw $e;
  116. }
  117. }
  118. }