This commit is contained in:
2023-06-05 16:01:00 +08:00
parent 951a08a0a1
commit f2457ff1d8
20 changed files with 156 additions and 100 deletions

View File

@ -50,7 +50,7 @@ public class SysDictDataController {
@GetMapping(value = "/type/{dictType}")
public AjaxResult dictType(@PathVariable String dictType) {
return AjaxResult.success(sysDictDataService.selectByDictType(dictType));
return AjaxResult.success(sysDictDataService.selectFromCache(dictType));
}
@PreAuthorize("hasAuthority('system:dict:add')")

View File

@ -38,6 +38,7 @@ public interface SysDictDataService extends SysDictApiService {
* 批量删除字典数据信息
*
* @param ids 需要删除的字典数据ID
* @return 结果
*/
int deleteByIds(List<String> ids);
@ -74,6 +75,14 @@ public interface SysDictDataService extends SysDictApiService {
*/
List<SysDictData> selectList(SysDictDataParam param);
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
List<SysDictData> selectByDictType(String dictType);
/**
* 重置字典缓存数据
*/

View File

@ -111,11 +111,7 @@ public class SysConfigServiceImpl implements SysConfigService {
@Override
public String selectConfigByKey(String configKey) {
configKey = ConfigConstant.SYS_CONFIG_KEY_PREFIX + configKey;
if (redisService.hasKey(configKey)) {
return redisService.getObject(configKey, String.class);
}
return null;
return redisService.getObject(ConfigConstant.SYS_CONFIG_KEY_PREFIX + configKey, String.class);
}
private QueryWrapper<SysConfig> param2Wrapper(SysConfigParam param) {

View File

@ -1,15 +1,18 @@
package com.qiaoba.module.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qiaoba.api.system.entity.SysDictData;
import com.qiaoba.api.system.entity.param.SysDictDataParam;
import com.qiaoba.auth.utils.SecurityUtil;
import com.qiaoba.common.base.constants.BaseConstant;
import com.qiaoba.common.base.constants.DictConstant;
import com.qiaoba.common.base.exceptions.ServiceException;
import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.TableDataInfo;
import com.qiaoba.common.redis.constants.CacheConstant;
import com.qiaoba.common.redis.service.RedisService;
import com.qiaoba.module.system.mapper.SysDictDataMapper;
import com.qiaoba.module.system.service.SysDictDataService;
import lombok.RequiredArgsConstructor;
@ -18,11 +21,19 @@ import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* 字典类型数据管理 服务层实现
*
* @author ailanyin
* @version 1.0
* @since 2022-09-22 04:20:28
*/
@Service
@RequiredArgsConstructor
public class SysDictDataServiceImpl implements SysDictDataService {
private final SysDictDataMapper sysDictDataMapper;
private final RedisService redisService;
@Override
public String selectDictLabel(String dictType, String dictValue) {
@ -41,7 +52,12 @@ public class SysDictDataServiceImpl implements SysDictDataService {
@Override
public int deleteByIds(List<String> ids) {
return sysDictDataMapper.deleteBatchIds(ids);
SysDictData sysDictData = selectById(ids.get(0));
int result = sysDictDataMapper.deleteBatchIds(ids);
if (result > BaseConstant.HANDLE_ERROR) {
cacheDictData(sysDictData.getDictType());
}
return result;
}
@Override
@ -49,7 +65,11 @@ public class SysDictDataServiceImpl implements SysDictDataService {
checkAllowAddOrUpdate(sysDictData);
sysDictData.setCreateTime(new Date());
sysDictData.setCreateUser(SecurityUtil.getLoginUsername());
return sysDictDataMapper.insert(sysDictData);
int result = sysDictDataMapper.insert(sysDictData);
if (result > BaseConstant.HANDLE_ERROR) {
cacheDictData(sysDictData.getDictType());
}
return result;
}
@Override
@ -57,7 +77,11 @@ public class SysDictDataServiceImpl implements SysDictDataService {
checkAllowAddOrUpdate(sysDictData);
sysDictData.setUpdateTime(new Date());
sysDictData.setUpdateUser(SecurityUtil.getLoginUsername());
return sysDictDataMapper.updateById(sysDictData);
int result = sysDictDataMapper.updateById(sysDictData);
if (result > BaseConstant.HANDLE_ERROR) {
cacheDictData(sysDictData.getDictType());
}
return result;
}
@Override
@ -72,7 +96,11 @@ public class SysDictDataServiceImpl implements SysDictDataService {
@Override
public void resetDictCache() {
redisService.del(redisService.getKeys(DictConstant.SYS_DICT_KEY + "*"));
Map<String, List<SysDictData>> dictDataMap = selectList(new SysDictDataParam()).stream().collect(Collectors.groupingBy(SysDictData::getDictType));
for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet()) {
redisService.set(DictConstant.SYS_DICT_KEY + entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList()));
}
}
@Override
@ -100,4 +128,18 @@ public class SysDictDataServiceImpl implements SysDictDataService {
throw new ServiceException("数据键值已存在");
}
}
private void cacheDictData(String dictType) {
List<SysDictData> dictData = selectByDictType(dictType);
if (CollUtil.isNotEmpty(dictData)) {
redisService.set(DictConstant.SYS_DICT_KEY + dictType, dictData.stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList()));
} else {
redisService.del(DictConstant.SYS_DICT_KEY + dictType);
}
}
@Override
public List<SysDictData> selectFromCache(String dictType) {
return redisService.getObjectList(DictConstant.SYS_DICT_KEY + dictType, SysDictData.class);
}
}

View File

@ -2,26 +2,20 @@ package com.qiaoba.module.system.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qiaoba.api.system.entity.SysDictData;
import com.qiaoba.api.system.entity.SysDictType;
import com.qiaoba.api.system.entity.param.SysDictDataParam;
import com.qiaoba.api.system.entity.param.SysDictTypeParam;
import com.qiaoba.auth.utils.SecurityUtil;
import com.qiaoba.common.base.exceptions.ServiceException;
import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.TableDataInfo;
import com.qiaoba.common.redis.constants.CacheConstant;
import com.qiaoba.common.redis.service.RedisService;
import com.qiaoba.module.system.mapper.SysDictTypeMapper;
import com.qiaoba.module.system.service.SysDictTypeService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 字典类型管理 服务层实现

View File

@ -42,12 +42,8 @@ public class SysUserDetailsServiceImpl implements UserDetailsService, SysUserDet
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
if (redisService.hasKey(SecurityConstant.USER_DETAILS_REDIS_KEY + username)) {
SecurityUser user = redisService.getObject(SecurityConstant.USER_DETAILS_REDIS_KEY + username, SecurityUser.class);
return new LoginUser(user.getDeviceSn(), user.getUserId(), user.getDeptId(), user.getUsername(), user.getNickname(), user.getRoles(), user.getRoleKeys(), user.getPermissions());
}
return null;
SecurityUser user = redisService.getObject(SecurityConstant.USER_DETAILS_REDIS_KEY + username, SecurityUser.class);
return Objects.isNull(user) ? null : new LoginUser(user.getDeviceSn(), user.getUserId(), user.getDeptId(), user.getUsername(), user.getNickname(), user.getRoles(), user.getRoleKeys(), user.getPermissions());
}