package org.dromara.system.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.redis.utils.CacheUtils; import org.dromara.system.domain.SysDictData; import org.dromara.system.domain.bo.SysDictDataBo; import org.dromara.system.domain.vo.SysDictDataVo; import org.dromara.system.mapper.SysDictDataMapper; import org.dromara.system.service.ISysDictDataService; import org.springframework.cache.annotation.CachePut; import org.springframework.stereotype.Service; import java.util.List; /** * 字典 业务层处理 * * @author Lion Li */ @RequiredArgsConstructor @Service public class SysDictDataServiceImpl implements ISysDictDataService { private final SysDictDataMapper baseMapper; /** * 分页查询字典数据列表 * * @param dictData 查询条件 * @param pageQuery 分页参数 * @return 字典数据分页列表 */ @Override public TableDataInfo selectPageDictDataList(SysDictDataBo dictData, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(dictData); Page page = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(page); } /** * 根据条件分页查询字典数据 * * @param dictData 字典数据信息 * @return 字典数据集合信息 */ @Override public List selectDictDataList(SysDictDataBo dictData) { LambdaQueryWrapper lqw = buildQueryWrapper(dictData); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper buildQueryWrapper(SysDictDataBo bo) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getDictSort() != null, SysDictData::getDictSort, bo.getDictSort()); lqw.like(StringUtils.isNotBlank(bo.getDictLabel()), SysDictData::getDictLabel, bo.getDictLabel()); lqw.eq(StringUtils.isNotBlank(bo.getDictType()), SysDictData::getDictType, bo.getDictType()); lqw.orderByAsc(SysDictData::getDictSort, SysDictData::getDictCode); return lqw; } /** * 根据字典类型和字典键值查询字典数据信息 * * @param dictType 字典类型 * @param dictValue 字典键值 * @return 字典标签 */ @Override public String selectDictLabel(String dictType, String dictValue) { return baseMapper.selectOne(new LambdaQueryWrapper() .select(SysDictData::getDictLabel) .eq(SysDictData::getDictType, dictType) .eq(SysDictData::getDictValue, dictValue)) .getDictLabel(); } /** * 根据字典数据ID查询信息 * * @param dictCode 字典数据ID * @return 字典数据 */ @Override public SysDictDataVo selectDictDataById(Long dictCode) { return baseMapper.selectVoById(dictCode); } /** * 批量删除字典数据信息 * * @param dictCodes 需要删除的字典数据ID */ @Override public void deleteDictDataByIds(List dictCodes) { List list = baseMapper.selectByIds(dictCodes); baseMapper.deleteByIds(dictCodes); list.forEach(x -> CacheUtils.evict(CacheNames.SYS_DICT, x.getDictType())); } /** * 新增保存字典数据信息 * * @param bo 字典数据信息 * @return 结果 */ @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#bo.dictType") @Override public List insertDictData(SysDictDataBo bo) { SysDictData data = MapstructUtils.convert(bo, SysDictData.class); int row = baseMapper.insert(data); if (row > 0) { return baseMapper.selectDictDataByType(data.getDictType()); } throw new ServiceException("操作失败"); } /** * 修改保存字典数据信息 * * @param bo 字典数据信息 * @return 结果 */ @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#bo.dictType") @Override public List updateDictData(SysDictDataBo bo) { SysDictData data = MapstructUtils.convert(bo, SysDictData.class); int row = baseMapper.updateById(data); if (row > 0) { return baseMapper.selectDictDataByType(data.getDictType()); } throw new ServiceException("操作失败"); } /** * 校验字典键值是否唯一 * * @param dict 字典数据 * @return 结果 */ @Override public boolean checkDictDataUnique(SysDictDataBo dict) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysDictData::getDictType, dict.getDictType()) .eq(SysDictData::getDictValue, dict.getDictValue()) .ne(ObjectUtil.isNotNull(dict.getDictCode()), SysDictData::getDictCode, dict.getDictCode())); return !exist; } }