package com.moral.api.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.moral.api.entity.SysDictData; import com.moral.api.entity.SysDictType; import com.moral.api.mapper.SysDictDataMapper; import com.moral.api.pojo.dto.sysDictData.SysDictDataDTO; import com.moral.api.pojo.form.sysDictData.SysDictDataDeleteForm; import com.moral.api.pojo.form.sysDictData.SysDictDataInsertForm; import com.moral.api.pojo.form.sysDictData.SysDictDataUpdateForm; import com.moral.api.service.SysDictDataService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.service.SysDictTypeService; import com.moral.api.util.CacheUtils; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.constant.ResponseCodeEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import java.util.HashMap; import java.util.List; import java.util.Map; /** *

* 字典表 服务实现类 *

* * @author moral * @since 2021-04-13 */ @Service public class SysDictDataServiceImpl extends ServiceImpl implements SysDictDataService { @Autowired SysDictTypeService sysDictTypeService; @Autowired SysDictDataMapper sysDictDataMapper; @Autowired RedisTemplate redisTemplate; @Override @Transactional public SysDictDataDTO deleteData(SysDictDataDeleteForm form) { //创建返回对象 SysDictDataDTO dto = new SysDictDataDTO(); //取参 Integer id = form.getId(); //判断是否存在 QueryWrapper existWrapper = new QueryWrapper(); existWrapper.eq("is_delete",Constants.NOT_DELETE); existWrapper.eq("id",id); SysDictData existData = sysDictDataMapper.selectOne(existWrapper); //执行删除 UpdateWrapper deleteWrapper = new UpdateWrapper(); deleteWrapper.set("is_delete",Constants.DELETE); deleteWrapper.eq("id",id); sysDictDataMapper.update(null,deleteWrapper); //删除缓存 CacheUtils.clearDictionariesCache(); //封装返回对象 dto.setSysDictData(existData); dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } @Override public SysDictDataDTO updateData(SysDictDataUpdateForm form) { SysDictDataDTO dto = new SysDictDataDTO(); //取参 SysDictData sysDictData = form.formConvertEntity(); //查询数据是否存在 QueryWrapper existWrapper = new QueryWrapper<>(); existWrapper.eq("is_delete", Constants.NOT_DELETE); existWrapper.eq("id", sysDictData.getId()); SysDictData existData = sysDictDataMapper.selectOne(existWrapper); //执行更新 sysDictDataMapper.updateById(sysDictData); //清除缓存 CacheUtils.clearDictionariesCache(); //封装返回结果 dto.setSysDictData(sysDictData); dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } /** * @Description: 根据字典类型id插入字典类型数据 * @Param: [form] * @return: com.moral.api.pojo.dto.sysDictData.SysDictDataDTO * @Author: 陈凯裕 * @Date: 2021/4/16 */ @Override public SysDictDataDTO insertData(SysDictDataInsertForm form) { SysDictDataDTO dto = new SysDictDataDTO(); //取参 SysDictData sysDictData = form.formConvertEntity(); //判断类型是否存在 SysDictType type = sysDictTypeService.getDictTypeById(sysDictData.getDictTypeId()); if (ObjectUtils.isEmpty(type)) { dto.setCode(ResponseCodeEnum.DICTTYPE_NOT_EXIST.getCode()); dto.setMsg(ResponseCodeEnum.DICTTYPE_NOT_EXIST.getMsg()); return dto; } //判断Key是否重复 String key = sysDictData.getDataKey(); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("is_delete", Constants.NOT_DELETE); wrapper.eq("dataKey", key); wrapper.eq("dict_type_id", type.getId()); SysDictData existKeyData = sysDictDataMapper.selectOne(wrapper); if (!ObjectUtils.isEmpty(existKeyData)) { dto.setCode(ResponseCodeEnum.DICTDATA_KEY_EXIST.getCode()); dto.setMsg(ResponseCodeEnum.DICTDATA_KEY_EXIST.getMsg()); return dto; } //执行插入 sysDictDataMapper.insert(sysDictData); //清除缓存 CacheUtils.clearDictionariesCache(); //封装返回结果 dto.setSysDictData(sysDictData); dto.setSysDictType(type); dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } /** * @Description: 根据类型名字查询对应字典的数据 * @Param: [typeName] * @return: java.util.Map * @Author: 陈凯裕 * @Date: 2021/4/16 */ @Override public Map queryDataByTypeName(String typeName) { Map> datas = getAllDictData(); //获取字典数据 List sysDictData = datas.get(typeName); //将字典数据进行封装 Map key:dataKey value:dataValue Map result = new HashMap<>(); for (SysDictData data : sysDictData) { result.put(data.getDataKey(), data.getDataValue()); } return result; } @Override public Map> getAllDictData() { Map> datas = new HashMap<>(); //从缓存中读取 datas = (Map>) redisTemplate.opsForValue().get(RedisConstants.DICT_DATA_KEY); if (ObjectUtils.isEmpty(datas)) {//从数据库中读取 datas = getDictDataFromDB(); //插入缓存 redisTemplate.opsForValue().set(RedisConstants.DICT_DATA_KEY, datas); } return datas; } @Override public Map getDictDatasByType(String type) { Map> allDictData = getAllDictData(); List sysDictDatas = allDictData.get(type); Map result = new HashMap<>(); for (SysDictData sysDictData : sysDictDatas) { result.put(sysDictData.getDataKey(),sysDictData); } return result; } /** * @Description: 从数据库中根据字典类型读取字典数据,返回Map Key:类型名称 value:数据集合 * @Param: [] * @return: java.util.Map> * @Author: 陈凯裕 * @Date: 2021/4/14 */ private Map> getDictDataFromDB() { Map> result = new HashMap<>(); List types = sysDictTypeService.getAllDictType(); for (SysDictType type : types) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("is_delete", Constants.NOT_DELETE); wrapper.eq("dict_type_id", type.getId()); List datas = sysDictDataMapper.selectList(wrapper); result.put(type.getName(), datas); } return result; } }