diff --git a/src/main/java/com/ruoyi/common/utils/DictUtils.java b/src/main/java/com/ruoyi/common/utils/DictUtils.java index e3d3612..5241520 100644 --- a/src/main/java/com/ruoyi/common/utils/DictUtils.java +++ b/src/main/java/com/ruoyi/common/utils/DictUtils.java @@ -151,6 +151,16 @@ public class DictUtils return StringUtils.stripEnd(propertyString.toString(), separator); } + /** + * 删除指定字典缓存 + * + * @param key 字典键 + */ + public static void removeDictCache(String key) + { + SpringUtils.getBean(RedisCache.class).deleteObject(getCacheKey(key)); + } + /** * 清空字典缓存 */ diff --git a/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java index 1b5a857..da76f0e 100644 --- a/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java +++ b/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java @@ -66,6 +66,7 @@ public class DataScopeAspect @Before("dataScopePointCut()") public void doBefore(JoinPoint point) throws Throwable { + clearDataScope(point); handleDataScope(point); } @@ -166,4 +167,17 @@ public class DataScopeAspect } return null; } + + /** + * 拼接权限sql前先清空params.dataScope参数防止注入 + */ + private void clearDataScope(final JoinPoint joinPoint) + { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) + { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, ""); + } + } } diff --git a/src/main/java/com/ruoyi/project/system/controller/SysConfigController.java b/src/main/java/com/ruoyi/project/system/controller/SysConfigController.java index 9a832cb..d9c0122 100644 --- a/src/main/java/com/ruoyi/project/system/controller/SysConfigController.java +++ b/src/main/java/com/ruoyi/project/system/controller/SysConfigController.java @@ -116,18 +116,19 @@ public class SysConfigController extends BaseController @DeleteMapping("/{configIds}") public AjaxResult remove(@PathVariable Long[] configIds) { - return toAjax(configService.deleteConfigByIds(configIds)); + configService.deleteConfigByIds(configIds); + return success(); } /** - * 清空缓存 + * 刷新参数缓存 */ @PreAuthorize("@ss.hasPermi('system:config:remove')") @Log(title = "参数管理", businessType = BusinessType.CLEAN) - @DeleteMapping("/clearCache") - public AjaxResult clearCache() + @DeleteMapping("/refreshCache") + public AjaxResult refreshCache() { - configService.clearCache(); + configService.resetConfigCache(); return AjaxResult.success(); } } diff --git a/src/main/java/com/ruoyi/project/system/controller/SysDictDataController.java b/src/main/java/com/ruoyi/project/system/controller/SysDictDataController.java index 83e8366..e04d937 100644 --- a/src/main/java/com/ruoyi/project/system/controller/SysDictDataController.java +++ b/src/main/java/com/ruoyi/project/system/controller/SysDictDataController.java @@ -115,6 +115,7 @@ public class SysDictDataController extends BaseController @DeleteMapping("/{dictCodes}") public AjaxResult remove(@PathVariable Long[] dictCodes) { - return toAjax(dictDataService.deleteDictDataByIds(dictCodes)); + dictDataService.deleteDictDataByIds(dictCodes); + return success(); } } diff --git a/src/main/java/com/ruoyi/project/system/controller/SysDictTypeController.java b/src/main/java/com/ruoyi/project/system/controller/SysDictTypeController.java index 816d543..bac24e2 100644 --- a/src/main/java/com/ruoyi/project/system/controller/SysDictTypeController.java +++ b/src/main/java/com/ruoyi/project/system/controller/SysDictTypeController.java @@ -104,18 +104,19 @@ public class SysDictTypeController extends BaseController @DeleteMapping("/{dictIds}") public AjaxResult remove(@PathVariable Long[] dictIds) { - return toAjax(dictTypeService.deleteDictTypeByIds(dictIds)); + dictTypeService.deleteDictTypeByIds(dictIds); + return success(); } /** - * 清空缓存 + * 刷新字典缓存 */ @PreAuthorize("@ss.hasPermi('system:dict:remove')") @Log(title = "字典类型", businessType = BusinessType.CLEAN) - @DeleteMapping("/clearCache") - public AjaxResult clearCache() + @DeleteMapping("/refreshCache") + public AjaxResult refreshCache() { - dictTypeService.clearCache(); + dictTypeService.resetDictCache(); return AjaxResult.success(); } diff --git a/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java b/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java index 4d95ee7..0e58b60 100644 --- a/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java +++ b/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java @@ -56,12 +56,22 @@ public interface ISysConfigService * @param configIds 需要删除的参数ID * @return 结果 */ - public int deleteConfigByIds(Long[] configIds); + public void deleteConfigByIds(Long[] configIds); /** - * 清空缓存数据 + * 加载参数缓存数据 */ - public void clearCache(); + public void loadingConfigCache(); + + /** + * 清空参数缓存数据 + */ + public void clearConfigCache(); + + /** + * 重置参数缓存数据 + */ + public void resetConfigCache(); /** * 校验参数键名是否唯一 diff --git a/src/main/java/com/ruoyi/project/system/service/ISysDictDataService.java b/src/main/java/com/ruoyi/project/system/service/ISysDictDataService.java index 65693d1..94aaf29 100644 --- a/src/main/java/com/ruoyi/project/system/service/ISysDictDataService.java +++ b/src/main/java/com/ruoyi/project/system/service/ISysDictDataService.java @@ -41,7 +41,7 @@ public interface ISysDictDataService * @param dictCodes 需要删除的字典数据ID * @return 结果 */ - public int deleteDictDataByIds(Long[] dictCodes); + public void deleteDictDataByIds(Long[] dictCodes); /** * 新增保存字典数据信息 diff --git a/src/main/java/com/ruoyi/project/system/service/ISysDictTypeService.java b/src/main/java/com/ruoyi/project/system/service/ISysDictTypeService.java index c6708d3..6483c55 100644 --- a/src/main/java/com/ruoyi/project/system/service/ISysDictTypeService.java +++ b/src/main/java/com/ruoyi/project/system/service/ISysDictTypeService.java @@ -56,12 +56,22 @@ public interface ISysDictTypeService * @param dictIds 需要删除的字典ID * @return 结果 */ - public int deleteDictTypeByIds(Long[] dictIds); + public void deleteDictTypeByIds(Long[] dictIds); /** - * 清空缓存数据 + * 加载字典缓存数据 */ - public void clearCache(); + public void loadingDictCache(); + + /** + * 清空字典缓存数据 + */ + public void clearDictCache(); + + /** + * 重置字典缓存数据 + */ + public void resetDictCache(); /** * 新增保存字典类型信息 diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java index 1ee1de6..1769405 100644 --- a/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java @@ -35,11 +35,7 @@ public class SysConfigServiceImpl implements ISysConfigService @PostConstruct public void init() { - List configsList = configMapper.selectConfigList(new SysConfig()); - for (SysConfig config : configsList) - { - redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); - } + loadingConfigCache(); } /** @@ -134,7 +130,7 @@ public class SysConfigServiceImpl implements ISysConfigService * @return 结果 */ @Override - public int deleteConfigByIds(Long[] configIds) + public void deleteConfigByIds(Long[] configIds) { for (Long configId : configIds) { @@ -143,26 +139,44 @@ public class SysConfigServiceImpl implements ISysConfigService { throw new CustomException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey())); } + configMapper.deleteConfigById(configId); + redisCache.deleteObject(getCacheKey(config.getConfigKey())); } - int count = configMapper.deleteConfigByIds(configIds); - if (count > 0) - { - Collection keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*"); - redisCache.deleteObject(keys); - } - return count; } /** - * 清空缓存数据 + * 加载参数缓存数据 */ @Override - public void clearCache() + public void loadingConfigCache() + { + List configsList = configMapper.selectConfigList(new SysConfig()); + for (SysConfig config : configsList) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + + /** + * 清空参数缓存数据 + */ + @Override + public void clearConfigCache() { Collection keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*"); redisCache.deleteObject(keys); } + /** + * 重置参数缓存数据 + */ + @Override + public void resetConfigCache() + { + clearConfigCache(); + loadingConfigCache(); + } + /** * 校验参数键名是否唯一 * diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysDictDataServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysDictDataServiceImpl.java index 065a2ce..3620a2a 100644 --- a/src/main/java/com/ruoyi/project/system/service/impl/SysDictDataServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/service/impl/SysDictDataServiceImpl.java @@ -63,29 +63,31 @@ public class SysDictDataServiceImpl implements ISysDictDataService * @return 结果 */ @Override - public int deleteDictDataByIds(Long[] dictCodes) + public void deleteDictDataByIds(Long[] dictCodes) { - int row = dictDataMapper.deleteDictDataByIds(dictCodes); - if (row > 0) + for (Long dictCode : dictCodes) { - DictUtils.clearDictCache(); + SysDictData data = selectDictDataById(dictCode); + dictDataMapper.deleteDictDataById(dictCode); + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); } - return row; } /** * 新增保存字典数据信息 * - * @param dictData 字典数据信息 + * @param data 字典数据信息 * @return 结果 */ @Override - public int insertDictData(SysDictData dictData) + public int insertDictData(SysDictData data) { - int row = dictDataMapper.insertDictData(dictData); + int row = dictDataMapper.insertDictData(data); if (row > 0) { - DictUtils.clearDictCache(); + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); } return row; } @@ -93,16 +95,17 @@ public class SysDictDataServiceImpl implements ISysDictDataService /** * 修改保存字典数据信息 * - * @param dictData 字典数据信息 + * @param data 字典数据信息 * @return 结果 */ @Override - public int updateDictData(SysDictData dictData) + public int updateDictData(SysDictData data) { - int row = dictDataMapper.updateDictData(dictData); + int row = dictDataMapper.updateDictData(data); if (row > 0) { - DictUtils.clearDictCache(); + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); } return row; } diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysDictTypeServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysDictTypeServiceImpl.java index 84e686a..ed7674a 100644 --- a/src/main/java/com/ruoyi/project/system/service/impl/SysDictTypeServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/service/impl/SysDictTypeServiceImpl.java @@ -35,12 +35,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService @PostConstruct public void init() { - List dictTypeList = dictTypeMapper.selectDictTypeAll(); - for (SysDictType dictType : dictTypeList) - { - List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); - DictUtils.setDictCache(dictType.getDictType(), dictDatas); - } + loadingDictCache(); } /** @@ -120,7 +115,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService * @return 结果 */ @Override - public int deleteDictTypeByIds(Long[] dictIds) + public void deleteDictTypeByIds(Long[] dictIds) { for (Long dictId : dictIds) { @@ -129,37 +124,54 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { throw new CustomException(String.format("%1$s已分配,不能删除", dictType.getDictName())); } + dictTypeMapper.deleteDictTypeById(dictId); + DictUtils.removeDictCache(dictType.getDictType()); } - int count = dictTypeMapper.deleteDictTypeByIds(dictIds); - if (count > 0) - { - DictUtils.clearDictCache(); - } - return count; } /** - * 清空缓存数据 + * 加载字典缓存数据 */ - @Override - public void clearCache() + public void loadingDictCache() + { + List dictTypeList = dictTypeMapper.selectDictTypeAll(); + for (SysDictType dictType : dictTypeList) + { + List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); + DictUtils.setDictCache(dictType.getDictType(), dictDatas); + } + } + + /** + * 清空字典缓存数据 + */ + public void clearDictCache() { DictUtils.clearDictCache(); } + /** + * 重置字典缓存数据 + */ + public void resetDictCache() + { + clearDictCache(); + loadingDictCache(); + } + /** * 新增保存字典类型信息 * - * @param dictType 字典类型信息 + * @param dict 字典类型信息 * @return 结果 */ @Override - public int insertDictType(SysDictType dictType) + public int insertDictType(SysDictType dict) { - int row = dictTypeMapper.insertDictType(dictType); + int row = dictTypeMapper.insertDictType(dict); if (row > 0) { - DictUtils.clearDictCache(); + DictUtils.setDictCache(dict.getDictType(), null); } return row; } @@ -167,19 +179,20 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService /** * 修改保存字典类型信息 * - * @param dictType 字典类型信息 + * @param dict 字典类型信息 * @return 结果 */ @Override @Transactional - public int updateDictType(SysDictType dictType) + public int updateDictType(SysDictType dict) { - SysDictType oldDict = dictTypeMapper.selectDictTypeById(dictType.getDictId()); - dictDataMapper.updateDictDataType(oldDict.getDictType(), dictType.getDictType()); - int row = dictTypeMapper.updateDictType(dictType); + SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId()); + dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType()); + int row = dictTypeMapper.updateDictType(dict); if (row > 0) { - DictUtils.clearDictCache(); + List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); + DictUtils.setDictCache(dict.getDictType(), dictDatas); } return row; } diff --git a/src/main/resources/mybatis/system/SysDeptMapper.xml b/src/main/resources/mybatis/system/SysDeptMapper.xml index a32ea58..6ad7e71 100644 --- a/src/main/resources/mybatis/system/SysDeptMapper.xml +++ b/src/main/resources/mybatis/system/SysDeptMapper.xml @@ -150,7 +150,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_by = #{updateBy}, update_time = sysdate - where dept_id in (${ancestors}) + where FIND_IN_SET(#{deptId}, ancestors) ]]> 0