DictDataService.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. /**
  3. * @Name
  4. * @Description
  5. * @Author 刘学玺
  6. * @Date 2024/8/27 10:52
  7. */
  8. namespace App\Http\Services\Backend\Server\System;
  9. use App\Http\Services\Service;
  10. use App\Models\System\DictData;
  11. use App\Models\System\DictType;
  12. use Symfony\Component\HttpFoundation\Response;
  13. class DictDataService extends Service
  14. {
  15. protected array $selectColumn = ['id', 'label', 'value', 'sort', 'dict_type as dictType', 'status', 'color_type as colorType', 'css_class as cssClass', 'remark'];
  16. protected array $selectAppendColumn = ['created_at as createTime'];
  17. public function getDictDataList($params)
  18. {
  19. $dictData = DictData::query();
  20. !empty($params['label']) && $dictData->whereLike('label', $params['label']);
  21. isset($params['status']) && filled($params['status']) && $dictData->where('status', $params['status']);
  22. $dictDataPage = $dictData->where('dict_type', $params['dictType'])->paginate($params['pageSize'], [...$this->selectColumn, ...$this->selectAppendColumn], 'page', $params['pageNo']);
  23. return ['list' => $dictDataPage->items(), 'total' => $dictDataPage->total()];
  24. }
  25. public function createDictData($data)
  26. {
  27. // 校验字典类型有效
  28. $this->validateDictTypeExists($data['dictType']);
  29. // 校验字典数据的值的唯一性
  30. $this->validateDictDataValueUnique($data['dictType'], $data['value']);
  31. // 插入字典类型
  32. $dictData = self::toModel($data, DictData::class);
  33. return $dictData->create($dictData->getAttributes())->id;
  34. }
  35. public function getDictData(int $id)
  36. {
  37. return DictData::query()->select($this->selectColumn)->find($id);
  38. }
  39. public function updateDictData(array $data, int $id)
  40. {
  41. // 校验字典类型有效
  42. $this->validateDictTypeExists($data['dictType']);
  43. // 校验字典数据的值的唯一性
  44. $this->validateDictDataValueUnique($data['dictType'], $data['value'], $id);
  45. // 修改字典数据
  46. $dictData = self::toModel([...$data, 'id' => $id], DictData::class);
  47. $dictData->update($dictData->getAttributes());
  48. }
  49. public function deleteDictData(int $id)
  50. {
  51. $dictData = DictData::query()->find($id);
  52. is_null($dictData) && self::error('DICT_DATA_NOT_EXISTS', Response::HTTP_UNPROCESSABLE_ENTITY);
  53. return $dictData->delete();
  54. }
  55. protected function validateDictTypeExists($dictType)
  56. {
  57. $isExists = DictType::query()->where('type', $dictType)->exists();
  58. !$isExists && self::error('DICT_TYPE_NOT_EXISTS', Response::HTTP_UNPROCESSABLE_ENTITY);
  59. }
  60. protected function validateDictDataValueUnique(string $type, string $value, int $id = null)
  61. {
  62. $dictDataId = DictData::query()->where(['dict_type' => $type, 'value' => $value])->value('id');
  63. !empty($dictDataId) && $dictDataId !== $id && self::error('DICT_DATA_DUPLICATE', Response::HTTP_UNPROCESSABLE_ENTITY);
  64. }
  65. }