package com.sinata.system.service.impl; import cn.idev.excel.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sinata.common.core.domain.entity.SysDictData; import com.sinata.common.core.domain.entity.SysDictType; import com.sinata.common.entity.PageDTO; import com.sinata.common.exception.ServiceException; import com.sinata.common.utils.BeanUtils; import com.sinata.common.utils.CollUtils; import com.sinata.common.utils.DictUtils; import com.sinata.system.domain.dto.SysDictDataDTO; import com.sinata.system.domain.query.KeyWordQuery; import com.sinata.system.domain.vo.SysDictDataVO; import com.sinata.system.mapper.SysDictDataMapper; import com.sinata.system.mapper.SysDictTypeMapper; import com.sinata.system.service.ISysDictDataService; import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * 字典 业务层处理 * * @author ruoyi */ @Service public class SysDictDataServiceImpl extends ServiceImpl implements ISysDictDataService { @Autowired private SysDictDataMapper dictDataMapper; @Autowired private SysDictTypeMapper dictTypeMapper; /** * 根据条件分页查询字典数据 * * @param dictData 字典数据信息 * @return 字典数据集合信息 */ @Override public List selectDictDataList(SysDictData dictData) { return dictDataMapper.selectDictDataList(dictData); } /** * 根据字典类型和字典键值查询字典数据信息 * * @param dictType 字典类型 * @param dictValue 字典键值 * @return 字典标签 */ @Override public String selectDictLabel(String dictType, String dictValue) { return dictDataMapper.selectDictLabel(dictType, dictValue); } /** * 根据字典数据ID查询信息 * * @param dictCode 字典数据ID * @return 字典数据 */ @Override public SysDictData selectDictDataById(Long dictCode) { return dictDataMapper.selectDictDataById(dictCode); } /** * 批量删除字典数据信息 * * @param dictCodes 需要删除的字典数据ID */ @Override public void deleteDictDataByIds(Long[] dictCodes) { for (Long dictCode : dictCodes) { SysDictData data = selectDictDataById(dictCode); dictDataMapper.deleteDictDataById(dictCode); List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); DictUtils.setDictCache(data.getDictType(), dictDatas); } } /** * 新增保存字典数据信息 * * @param data 字典数据信息 * @return 结果 */ @Override public int insertDictData(SysDictData data) { int row = dictDataMapper.insertDictData(data); if (row > 0) { List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); DictUtils.setDictCache(data.getDictType(), dictDatas); } return row; } /** * 修改保存字典数据信息 * * @param data 字典数据信息 * @return 结果 */ @Override public int updateDictData(SysDictData data) { int row = dictDataMapper.updateDictData(data); if (row > 0) { List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); DictUtils.setDictCache(data.getDictType(), dictDatas); } return row; } @Override public PageDTO pageList(KeyWordQuery query) { Page result = this.lambdaQuery() .like(StringUtils.isNotBlank(query.getKeyword()), SysDictData::getDictLabel, query.getKeyword()) .eq(StringUtils.isNotBlank(query.getDictType()), SysDictData::getDictType, query.getDictType()) .orderByAsc(SysDictData::getDictSort) .orderByDesc(SysDictData::getDictCode) .page(new Page<>(query.getPageCurr(), query.getPageSize())); List dictTypeList = result.getRecords().stream().map(SysDictData::getDictType).distinct().collect(Collectors.toList()); if (CollUtils.isNotEmpty(dictTypeList)) { PageDTO sysDictDataVOPageDTO = PageDTO.of(result, SysDictDataVO.class); List sysDictTypes = dictTypeMapper.selectList(new LambdaQueryWrapper().in(SysDictType::getDictType, dictTypeList)); sysDictDataVOPageDTO.getList().forEach(vo -> { sysDictTypes.forEach(sysDictType -> { if (sysDictType.getDictType().equals(vo.getDictType())) { vo.setDictTypeName(sysDictType.getDictName()); } }); }); return sysDictDataVOPageDTO; } return PageDTO.empty(result); } @Override public void save(SysDictDataDTO dto) { SysDictData sysDictData = BeanUtils.copyBean(dto, SysDictData.class); SysDictType sysDictType = dictTypeMapper.selectDictTypeByType(dto.getDictType()); if (Objects.isNull(sysDictType)) { throw new ServiceException("字典类型不存在"); } if (Objects.nonNull(sysDictData.getDictCode())) { baseMapper.updateById(sysDictData); } else { baseMapper.insert(sysDictData); } } @Override public List medicalWasteTypeList() { return getSysDictDataVOListByType("medical_waste_type", null); } @Override public List medicalWasteTypeListByDictCode(List wasteTypeCodeList) { return getSysDictDataVOListByType("medical_waste_type", wasteTypeCodeList); } @Nullable private List getSysDictDataVOListByType(String dictType, List dictCodeList) { List medicalWasteTypeList = lambdaQuery().eq(SysDictData::getDictType, dictType) .in(CollUtils.isNotEmpty(dictCodeList), SysDictData::getDictCode, dictCodeList) .orderByAsc(SysDictData::getDictSort) .orderByDesc(SysDictData::getDictCode).list(); return BeanUtils.copyToList(medicalWasteTypeList, SysDictDataVO.class); } /** * 器具类型列表 * * @return */ @Override public List equipmentTypeList() { return getSysDictDataVOListByType("protection_equipment_type", null); } /** * 规章制度类型列表 * * @return */ @Override public List regulationsTypeList() { return getSysDictDataVOListByType("protection_regulation_type", null); } /** * 作业类型 * * @return */ @Override public List workTypeList() { return getSysDictDataVOListByType("protective_work_type", null); } @Override public List institutionLevelList() { return getSysDictDataVOListByType("institution_level", null); } @Override public List institutionTypeList() { return getSysDictDataVOListByType("institution_type", null); } }