| | |
| | | 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; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | * </p> |
| | | * |
| | | * @author moral |
| | | * @since 2021-03-09 |
| | | * @since 2021-04-13 |
| | | */ |
| | | @Service |
| | | public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> 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<SysDictData> 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<SysDictData> 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<java.lang.String , java.lang.Object> |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/4/16 |
| | | */ |
| | | @Override |
| | | public Map<String, Object> queryDataByTypeName(String typeName) { |
| | | Map<String, List<SysDictData>> datas = getAllDictData(); |
| | | //获取字典数据 |
| | | List<SysDictData> sysDictData = datas.get(typeName); |
| | | //将字典数据进行封装 Map key:dataKey value:dataValue |
| | | Map<String, Object> result = new HashMap<>(); |
| | | for (SysDictData data : sysDictData) { |
| | | result.put(data.getDataKey(), data.getDataValue()); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<SysDictData>> getAllDictData() { |
| | | Map<String, List<SysDictData>> datas = new HashMap<>(); |
| | | //从缓存中读取 |
| | | datas = (Map<String, List<SysDictData>>) redisTemplate.opsForValue().get(RedisConstants.DICT_DATA_KEY); |
| | | if (ObjectUtils.isEmpty(datas)) {//从数据库中读取 |
| | | datas = getDictDataFromDB(); |
| | | //插入缓存 |
| | | redisTemplate.opsForValue().set(RedisConstants.DICT_DATA_KEY, datas); |
| | | } |
| | | return datas; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @Description: 从数据库中根据字典类型读取字典数据,返回Map Key:类型名称 value:数据集合 |
| | | * @Param: [] |
| | | * @return: java.util.Map<java.lang.String , java.util.List < com.moral.api.entity.sysDictData>> |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/4/14 |
| | | */ |
| | | private Map<String, List<SysDictData>> getDictDataFromDB() { |
| | | Map<String, List<SysDictData>> result = new HashMap<>(); |
| | | List<SysDictType> types = sysDictTypeService.getAllDictType(); |
| | | for (SysDictType type : types) { |
| | | QueryWrapper<SysDictData> wrapper = new QueryWrapper<>(); |
| | | wrapper.eq("is_delete", Constants.NOT_DELETE); |
| | | wrapper.eq("dict_type_id", type.getId()); |
| | | List<SysDictData> datas = sysDictDataMapper.selectList(wrapper); |
| | | result.put(type.getName(), datas); |
| | | } |
| | | return result; |
| | | } |
| | | } |