1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- /**
- * @Name
- * @Description
- * @Author 刘学玺
- * @Date 2024/8/27 10:52
- */
- namespace App\Http\Services\Backend\Server\System;
- use App\Http\Services\Service;
- use App\Models\System\DictData;
- use App\Models\System\DictType;
- use Symfony\Component\HttpFoundation\Response;
- class DictDataService extends Service
- {
- protected array $selectColumn = ['id', 'label', 'value', 'sort', 'dict_type as dictType', 'status', 'color_type as colorType', 'css_class as cssClass', 'remark'];
- protected array $selectAppendColumn = ['created_at as createTime'];
- public function getDictDataList($params)
- {
- $dictData = DictData::query();
- !empty($params['label']) && $dictData->whereLike('label', $params['label']);
- isset($params['status']) && filled($params['status']) && $dictData->where('status', $params['status']);
- $dictDataPage = $dictData->where('dict_type', $params['dictType'])->paginate($params['pageSize'], [...$this->selectColumn, ...$this->selectAppendColumn], 'page', $params['pageNo']);
- return ['list' => $dictDataPage->items(), 'total' => $dictDataPage->total()];
- }
- public function createDictData($data)
- {
- // 校验字典类型有效
- $this->validateDictTypeExists($data['dictType']);
- // 校验字典数据的值的唯一性
- $this->validateDictDataValueUnique($data['dictType'], $data['value']);
- // 插入字典类型
- $dictData = self::toModel($data, DictData::class);
- return $dictData->create($dictData->getAttributes())->id;
- }
- public function getDictData(int $id)
- {
- return DictData::query()->select($this->selectColumn)->find($id);
- }
- public function updateDictData(array $data, int $id)
- {
- // 校验字典类型有效
- $this->validateDictTypeExists($data['dictType']);
- // 校验字典数据的值的唯一性
- $this->validateDictDataValueUnique($data['dictType'], $data['value'], $id);
- // 修改字典数据
- $dictData = self::toModel([...$data, 'id' => $id], DictData::class);
- $dictData->update($dictData->getAttributes());
- }
- public function deleteDictData(int $id)
- {
- $dictData = DictData::query()->find($id);
- is_null($dictData) && self::error('DICT_DATA_NOT_EXISTS', Response::HTTP_UNPROCESSABLE_ENTITY);
- return $dictData->delete();
- }
- protected function validateDictTypeExists($dictType)
- {
- $isExists = DictType::query()->where('type', $dictType)->exists();
- !$isExists && self::error('DICT_TYPE_NOT_EXISTS', Response::HTTP_UNPROCESSABLE_ENTITY);
- }
- protected function validateDictDataValueUnique(string $type, string $value, int $id = null)
- {
- $dictDataId = DictData::query()->where(['dict_type' => $type, 'value' => $value])->value('id');
- !empty($dictDataId) && $dictDataId !== $id && self::error('DICT_DATA_DUPLICATE', Response::HTTP_UNPROCESSABLE_ENTITY);
- }
- }
|