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.SysDictTypeMapper; import com.moral.api.pojo.dto.sysDictType.SysDictTypeDTO; import com.moral.api.pojo.dto.sysDictType.SysDictTypeQueryDTO; import com.moral.api.pojo.form.sysDictType.SysDictTypeDeleteForm; import com.moral.api.pojo.form.sysDictType.SysDictTypeInsertForm; import com.moral.api.pojo.form.sysDictType.SysDictTypeUpdateForm; import com.moral.api.service.SysDictDataService; import com.moral.api.service.SysDictTypeService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.util.CacheUtils; import com.moral.api.util.LogUtils; 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 org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; import java.util.Map; /** *

* 字典表 服务实现类 *

* * @author moral * @since 2021-03-09 */ @Service public class SysDictTypeServiceImpl extends ServiceImpl implements SysDictTypeService { @Autowired SysDictTypeMapper sysDictTypeMapper; @Autowired SysDictDataService sysDictDataService; @Autowired RedisTemplate redisTemplate; @Override @Transactional public SysDictTypeDTO deleteType(SysDictTypeDeleteForm form) { //创建返回对象 SysDictTypeDTO dto = new SysDictTypeDTO(); //获取Id Integer typeId = form.getId(); //查询要删除的type用于插入日志 QueryWrapper existWrapper = new QueryWrapper<>(); existWrapper.eq("is_delete",Constants.NOT_DELETE); existWrapper.eq("id",typeId); SysDictType type = sysDictTypeMapper.selectOne(existWrapper); if(ObjectUtils.isEmpty(type)){ dto.setCode(ResponseCodeEnum.DICTTYPE_NOT_EXIST.getCode()); dto.setMsg(ResponseCodeEnum.DICTTYPE_NOT_EXIST.getMsg()); return dto; } //执行逻辑删除 UpdateWrapper deleteTypeWrapper = new UpdateWrapper(); deleteTypeWrapper.eq("id",typeId); deleteTypeWrapper.set("is_delete",Constants.DELETE); sysDictTypeMapper.update(null,deleteTypeWrapper); //逻辑删除类型对应的数据 UpdateWrapper deleteDataWrapper = new UpdateWrapper(); deleteDataWrapper.eq("dict_type_id",typeId); deleteDataWrapper.set("is_delete",Constants.DELETE); sysDictDataService.update(null,deleteDataWrapper); //插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); LogUtils.saveOperationForManage(request,"删除字典类型:"+type.getName(),Constants.DELETE_OPERATE_TYPE); //刷新缓存数据 refreshCache(); //封装返回数据 dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } @Override @Transactional public SysDictTypeDTO updateType(SysDictTypeUpdateForm form) { //创建返回对象 SysDictTypeDTO dto = new SysDictTypeDTO(); //获取实体 SysDictType type = form.formConvertEntity(); //查询type用于插入日志 QueryWrapper existNameWrapper = new QueryWrapper<>(); existNameWrapper.eq("id",type.getId()); existNameWrapper.eq("is_delete",Constants.NOT_DELETE); SysDictType existType = sysDictTypeMapper.selectOne(existNameWrapper); if(ObjectUtils.isEmpty(existType)){ dto.setCode(ResponseCodeEnum.DICTTYPE_NOT_EXIST.getCode()); dto.setMsg(ResponseCodeEnum.DICTTYPE_NOT_EXIST.getMsg()); return dto; } //执行更新 sysDictTypeMapper.updateById(type); //获取更新后的对象 SysDictType sysDictType = sysDictTypeMapper.selectById(type.getId()); //刷新缓存 refreshCache(); //封装返回对象 dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } @Override @Transactional public SysDictTypeDTO insertType(SysDictTypeInsertForm form) { //创建返回对象 SysDictTypeDTO dto = new SysDictTypeDTO(); //获取要插入的实体 SysDictType sysDictType = form.formConvertEntity(); //判断name是否已经存在 QueryWrapper existNameWrapper = new QueryWrapper<>(); existNameWrapper.eq("name",sysDictType.getName()); existNameWrapper.eq("is_delete",Constants.NOT_DELETE); SysDictType existType = sysDictTypeMapper.selectOne(existNameWrapper); if(!ObjectUtils.isEmpty(existType)){ dto.setCode(ResponseCodeEnum.DICTTYPE_EXIST.getCode()); dto.setMsg(ResponseCodeEnum.DICTTYPE_EXIST.getMsg()); return dto; } //插入类型 sysDictTypeMapper.insert(sysDictType); //插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); LogUtils.saveOperationForManage(request,"添加字典类型:"+sysDictType.getName(),Constants.INSERT_OPERATE_TYPE); //刷新缓存 refreshCache(); //封装返回对象 dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } /** * @Description: 获取所有字典类型和字典数据 * @Param: [] * @return: com.moral.api.pojo.dto.sysDictType.SysDictTypeQueryDTO * @Author: 陈凯裕 * @Date: 2021/4/15 */ @Override public SysDictTypeQueryDTO queryTypeAndDatas() { //创建返回对象 SysDictTypeQueryDTO queryDTO = new SysDictTypeQueryDTO(); List dtos = new ArrayList<>(); //获取所有类型 List types = getAllDictType(); //获取所有数据 Map> datas = sysDictDataService.getAllDictData(); for (SysDictType type : types) { SysDictTypeDTO dto = new SysDictTypeDTO(); List typeDatas = (List) datas.get(type.getName()); dto.setSysDictType(type); dto.setSysDictDatas(typeDatas); dtos.add(dto); } //封装返回数据 queryDTO.setSysDictTypeDTOS(dtos); queryDTO.setCode(ResponseCodeEnum.SUCCESS.getCode()); queryDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return queryDTO; } /** * @Description: 获取所有字典类型,没有字典数据 * @Param: [] * @return: java.util.List * @Author: 陈凯裕 * @Date: 2021/4/15 */ @Override public List getAllDictType() { //从缓存中取出 List types = (List) redisTemplate.opsForValue().get(RedisConstants.DICT_TYPE_KEY); if(ObjectUtils.isEmpty(types)){//从数据库取出并且插入缓存 types = getAllDictTypeFromDB(); redisTemplate.opsForValue().set(RedisConstants.DICT_TYPE_KEY,types); } return types; } @Override public SysDictType getDictTypeById(Integer id) { QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("is_delete",Constants.NOT_DELETE); wrapper.eq("id",id); return sysDictTypeMapper.selectOne(wrapper); } private List getAllDictTypeFromDB() { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("is_delete", Constants.NOT_DELETE); List sysDictTypes = sysDictTypeMapper.selectList(wrapper); return sysDictTypes; } @Override public void refreshCache(){ redisTemplate.delete(RedisConstants.DICT_TYPE_KEY); List types = getAllDictTypeFromDB(); redisTemplate.opsForValue().set(RedisConstants.DICT_TYPE_KEY,types); } }