diff --git a/README.md b/README.md
index 796d57fb..2a58722a 100644
--- a/README.md
+++ b/README.md
@@ -79,6 +79,11 @@
关于vue与boot整合部署
* [前端静态资源如何整合到后端访问](https://doc.ruoyi.vip/ruoyi-vue/other/faq.html#前端静态资源如何整合到后端访问)
+关于修改包名
+* 将文件夹全部修改为 com.xxx
+* 使用IDEA全局替换 com.ruoyi 替换为 com.xxx
+* 严禁手动修改
+
## 内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
@@ -100,6 +105,47 @@
17. 在线构建器:拖动表单元素生成相应的HTML代码。
18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
+## 演示图例
+
+
+
## 在线体验
- admin/admin123
diff --git a/pom.xml b/pom.xml
index a197fd39..6d52bf68 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
RuoYi-Vue-Plus后台管理系统
- 2.2.0
+ 2.2.1
2.3.11.RELEASE
UTF-8
UTF-8
@@ -248,6 +248,14 @@
+
+ local
+
+
+ local
+ debug
+
+
dev
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
index d26de0ad..c8e91919 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
@@ -20,7 +20,7 @@ import java.util.List;
/**
* 参数配置 信息操作处理
- *
+ *
* @author ruoyi
*/
@RestController
@@ -110,18 +110,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/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
index 157030fb..a272a6e9 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
@@ -21,7 +21,7 @@ import java.util.List;
/**
* 数据字典信息
- *
+ *
* @author ruoyi
*/
@RestController
@@ -107,6 +107,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/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
index 306b6f2b..e2e06253 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
@@ -19,7 +19,7 @@ import java.util.List;
/**
* 数据字典信息
- *
+ *
* @author ruoyi
*/
@RestController
@@ -96,18 +96,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/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 3a2a03d6..06456dd8 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -1,7 +1,3 @@
----
-server:
- port: 8081
----
# 数据源配置
spring:
datasource:
@@ -10,9 +6,9 @@ spring:
druid:
# 主库数据源
master:
- url: jdbc:mysql://39.101.143.184:3306/ruoyi-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
- username: ruoyi-vue
- password: ryvue
+ url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+ username: root
+ password: root
# 从库数据源
slave:
# 从数据源开关/默认关闭
@@ -62,13 +58,13 @@ spring:
# redis 配置
redis:
# 地址
- host: 39.101.143.184
+ host: localhost
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
- password: ryvue
+ password:
# 连接超时时间
timeout: 10s
lettuce:
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java
index 45addb3c..7da0c669 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java
@@ -155,6 +155,16 @@ public class DictUtils
return StrUtil.strip(propertyString.toString(), null, separator);
}
+ /**
+ * 删除指定字典缓存
+ *
+ * @param key 字典键
+ */
+ public static void removeDictCache(String key)
+ {
+ SpringUtils.getBean(RedisCache.class).deleteObject(getCacheKey(key));
+ }
+
/**
* 清空字典缓存
*/
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
index 4d2f9bbd..0a766e53 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -68,6 +68,7 @@ public class DataScopeAspect
@Before("dataScopePointCut()")
public void doBefore(JoinPoint point) throws Throwable
{
+ clearDataScope(point);
handleDataScope(point);
}
@@ -144,18 +145,8 @@ public class DataScopeAspect
if (StrUtil.isNotBlank(sqlString.toString()))
{
- Object params = joinPoint.getArgs()[0];
- if (Validator.isNotNull(params))
- {
- try {
- Method getParams = params.getClass().getDeclaredMethod("getParams", null);
- Map invoke = (Map) getParams.invoke(params, null);
- invoke.put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
+ putDataScope(joinPoint, sqlString.substring(4));
+ }
}
/**
@@ -173,4 +164,30 @@ public class DataScopeAspect
}
return null;
}
+
+ /**
+ * 拼接权限sql前先清空params.dataScope参数防止注入
+ */
+ private void clearDataScope(final JoinPoint joinPoint)
+ {
+ Object params = joinPoint.getArgs()[0];
+ if (Validator.isNotNull(params))
+ {
+ putDataScope(joinPoint, "");
+ }
+ }
+
+ private static void putDataScope(JoinPoint joinPoint, String sql) {
+ Object params = joinPoint.getArgs()[0];
+ if (Validator.isNotNull(params))
+ {
+ try {
+ Method getParams = params.getClass().getDeclaredMethod("getParams", null);
+ Map invoke = (Map) getParams.invoke(params, null);
+ invoke.put(DATA_SCOPE, sql);
+ } catch (Exception e) {
+ // 方法未找到 不处理
+ }
+ }
+ }
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
index 7f09d7c7..3d8971d6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
@@ -1,8 +1,11 @@
package com.ruoyi.system.mapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.page.BaseMapperPlus;
+import java.util.List;
+
/**
* 字典表 数据层
*
@@ -10,4 +13,11 @@ import com.ruoyi.common.core.page.BaseMapperPlus;
*/
public interface SysDictDataMapper extends BaseMapperPlus {
+ default List selectDictDataByType(String dictType) {
+ return selectList(
+ new LambdaQueryWrapper()
+ .eq(SysDictData::getStatus, "0")
+ .eq(SysDictData::getDictType, dictType)
+ .orderByAsc(SysDictData::getDictSort));
+ }
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
index 83846275..569ecf96 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
@@ -62,12 +62,22 @@ public interface ISysConfigService extends IServicePlus {
* @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/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
index 7cf20f02..5a19aa79 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
@@ -47,7 +47,7 @@ public interface ISysDictDataService extends IServicePlus {
* @param dictCodes 需要删除的字典数据ID
* @return 结果
*/
- public int deleteDictDataByIds(Long[] dictCodes);
+ public void deleteDictDataByIds(Long[] dictCodes);
/**
* 新增保存字典数据信息
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
index 87b3c884..a806cbd6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
@@ -62,12 +62,22 @@ public interface ISysDictTypeService extends IServicePlus {
* @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/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
index fbf6ec81..2376d8b5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
@@ -20,7 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
-import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -33,175 +32,191 @@ import java.util.Map;
@Service
public class SysConfigServiceImpl extends ServiceImpl implements ISysConfigService {
- @Autowired
- private RedisCache redisCache;
+ @Autowired
+ private SysConfigMapper configMapper;
- /**
- * 项目启动时,初始化参数到缓存
- */
- @PostConstruct
- public void init() {
- List configsList = baseMapper.selectList(new LambdaQueryWrapper<>());
- for (SysConfig config : configsList) {
- redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
- }
- }
+ @Autowired
+ private RedisCache redisCache;
- @Override
- public TableDataInfo selectPageConfigList(SysConfig config) {
- Map params = config.getParams();
- LambdaQueryWrapper lqw = new LambdaQueryWrapper()
- .like(StrUtil.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName())
- .eq(StrUtil.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType())
- .like(StrUtil.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey())
- .apply(Validator.isNotEmpty(params.get("beginTime")),
- "date_format(create_time,'%y%m%d') >= date_format(#{0},'%y%m%d')",
- params.get("beginTime"))
- .apply(Validator.isNotEmpty(params.get("endTime")),
- "date_format(create_time,'%y%m%d') <= date_format(#{0},'%y%m%d')",
- params.get("endTime"));
- return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
- }
+ /**
+ * 项目启动时,初始化参数到缓存
+ */
+ @PostConstruct
+ public void init() {
+ loadingConfigCache();
+ }
- /**
- * 查询参数配置信息
- *
- * @param configId 参数配置ID
- * @return 参数配置信息
- */
- @Override
- @DataSource(DataSourceType.MASTER)
- public SysConfig selectConfigById(Long configId) {
- return baseMapper.selectById(configId);
- }
+ @Override
+ public TableDataInfo selectPageConfigList(SysConfig config) {
+ Map params = config.getParams();
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper()
+ .like(StrUtil.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName())
+ .eq(StrUtil.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType())
+ .like(StrUtil.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey())
+ .apply(Validator.isNotEmpty(params.get("beginTime")),
+ "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
+ params.get("beginTime"))
+ .apply(Validator.isNotEmpty(params.get("endTime")),
+ "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
+ params.get("endTime"));
+ return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
+ }
- /**
- * 根据键名查询参数配置信息
- *
- * @param configKey 参数key
- * @return 参数键值
- */
- @Override
- public String selectConfigByKey(String configKey) {
- String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey)));
- if (Validator.isNotEmpty(configValue)) {
- return configValue;
- }
- SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper()
- .eq(SysConfig::getConfigKey, configKey));
- if (Validator.isNotNull(retConfig)) {
- redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
- return retConfig.getConfigValue();
- }
- return StrUtil.EMPTY;
- }
+ /**
+ * 查询参数配置信息
+ *
+ * @param configId 参数配置ID
+ * @return 参数配置信息
+ */
+ @Override
+ @DataSource(DataSourceType.MASTER)
+ public SysConfig selectConfigById(Long configId) {
+ return baseMapper.selectById(configId);
+ }
- /**
- * 查询参数配置列表
- *
- * @param config 参数配置信息
- * @return 参数配置集合
- */
- @Override
- public List selectConfigList(SysConfig config) {
- Map params = config.getParams();
- LambdaQueryWrapper lqw = new LambdaQueryWrapper()
- .like(StrUtil.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName())
- .eq(StrUtil.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType())
- .like(StrUtil.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey())
- .apply(Validator.isNotEmpty(params.get("beginTime")),
- "date_format(create_time,'%y%m%d') >= date_format(#{0},'%y%m%d')",
- params.get("beginTime"))
- .apply(Validator.isNotEmpty(params.get("endTime")),
- "date_format(create_time,'%y%m%d') >= date_format(#{0},'%y%m%d')",
- params.get("endTime"));
- return baseMapper.selectList(lqw);
- }
+ /**
+ * 根据键名查询参数配置信息
+ *
+ * @param configKey 参数key
+ * @return 参数键值
+ */
+ @Override
+ public String selectConfigByKey(String configKey) {
+ String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey)));
+ if (Validator.isNotEmpty(configValue)) {
+ return configValue;
+ }
+ SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper()
+ .eq(SysConfig::getConfigKey, configKey));
+ if (Validator.isNotNull(retConfig)) {
+ redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
+ return retConfig.getConfigValue();
+ }
+ return StrUtil.EMPTY;
+ }
- /**
- * 新增参数配置
- *
- * @param config 参数配置信息
- * @return 结果
- */
- @Override
- public int insertConfig(SysConfig config) {
- int row = baseMapper.insert(config);
- if (row > 0) {
- redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
- }
- return row;
- }
+ /**
+ * 查询参数配置列表
+ *
+ * @param config 参数配置信息
+ * @return 参数配置集合
+ */
+ @Override
+ public List selectConfigList(SysConfig config) {
+ Map params = config.getParams();
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper()
+ .like(StrUtil.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName())
+ .eq(StrUtil.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType())
+ .like(StrUtil.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey())
+ .apply(Validator.isNotEmpty(params.get("beginTime")),
+ "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
+ params.get("beginTime"))
+ .apply(Validator.isNotEmpty(params.get("endTime")),
+ "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
+ params.get("endTime"));
+ return baseMapper.selectList(lqw);
+ }
- /**
- * 修改参数配置
- *
- * @param config 参数配置信息
- * @return 结果
- */
- @Override
- public int updateConfig(SysConfig config) {
- int row = baseMapper.updateById(config);
- if (row > 0) {
- redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
- }
- return row;
- }
+ /**
+ * 新增参数配置
+ *
+ * @param config 参数配置信息
+ * @return 结果
+ */
+ @Override
+ public int insertConfig(SysConfig config) {
+ int row = baseMapper.insert(config);
+ if (row > 0) {
+ redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+ }
+ return row;
+ }
- /**
- * 批量删除参数信息
- *
- * @param configIds 需要删除的参数ID
- * @return 结果
- */
- @Override
- public int deleteConfigByIds(Long[] configIds) {
- for (Long configId : configIds) {
- SysConfig config = selectConfigById(configId);
- if (StrUtil.equals(UserConstants.YES, config.getConfigType())) {
- throw new CustomException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
- }
- }
- int count = baseMapper.deleteBatchIds(Arrays.asList(configIds));
- if (count > 0) {
- Collection keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
- redisCache.deleteObject(keys);
- }
- return count;
- }
+ /**
+ * 修改参数配置
+ *
+ * @param config 参数配置信息
+ * @return 结果
+ */
+ @Override
+ public int updateConfig(SysConfig config) {
+ int row = baseMapper.updateById(config);
+ if (row > 0) {
+ redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+ }
+ return row;
+ }
- /**
- * 清空缓存数据
- */
- @Override
- public void clearCache() {
- Collection keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
- redisCache.deleteObject(keys);
- }
+ /**
+ * 批量删除参数信息
+ *
+ * @param configIds 需要删除的参数ID
+ * @return 结果
+ */
+ @Override
+ public void deleteConfigByIds(Long[] configIds) {
+ for (Long configId : configIds) {
+ SysConfig config = selectConfigById(configId);
+ if (StrUtil.equals(UserConstants.YES, config.getConfigType())) {
+ throw new CustomException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
+ }
+ configMapper.deleteById(configId);
+ redisCache.deleteObject(getCacheKey(config.getConfigKey()));
+ }
+ }
- /**
- * 校验参数键名是否唯一
- *
- * @param config 参数配置信息
- * @return 结果
- */
- @Override
- public String checkConfigKeyUnique(SysConfig config) {
- Long configId = Validator.isNull(config.getConfigId()) ? -1L : config.getConfigId();
- SysConfig info = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysConfig::getConfigKey, config.getConfigKey()));
- if (Validator.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) {
- return UserConstants.NOT_UNIQUE;
- }
- return UserConstants.UNIQUE;
- }
+ /**
+ * 加载参数缓存数据
+ */
+ @Override
+ public void loadingConfigCache() {
+ List configsList = selectConfigList(new SysConfig());
+ for (SysConfig config : configsList) {
+ redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+ }
+ }
- /**
- * 设置cache key
- *
- * @param configKey 参数键
- * @return 缓存键key
- */
- private String getCacheKey(String configKey) {
- return Constants.SYS_CONFIG_KEY + configKey;
- }
+ /**
+ * 清空参数缓存数据
+ */
+ @Override
+ public void clearConfigCache() {
+ Collection keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
+ redisCache.deleteObject(keys);
+ }
+
+ /**
+ * 重置参数缓存数据
+ */
+ @Override
+ public void resetConfigCache() {
+ clearConfigCache();
+ loadingConfigCache();
+ }
+
+ /**
+ * 校验参数键名是否唯一
+ *
+ * @param config 参数配置信息
+ * @return 结果
+ */
+ @Override
+ public String checkConfigKeyUnique(SysConfig config) {
+ Long configId = Validator.isNull(config.getConfigId()) ? -1L : config.getConfigId();
+ SysConfig info = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysConfig::getConfigKey, config.getConfigKey()));
+ if (Validator.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) {
+ return UserConstants.NOT_UNIQUE;
+ }
+ return UserConstants.UNIQUE;
+ }
+
+ /**
+ * 设置cache key
+ *
+ * @param configKey 参数键
+ * @return 缓存键key
+ */
+ private String getCacheKey(String configKey) {
+ return Constants.SYS_CONFIG_KEY + configKey;
+ }
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
index faae4aab..70385659 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
@@ -11,7 +11,6 @@ import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.service.ISysDictDataService;
import org.springframework.stereotype.Service;
-import java.util.Arrays;
import java.util.List;
/**
@@ -22,100 +21,103 @@ import java.util.List;
@Service
public class SysDictDataServiceImpl extends ServiceImpl implements ISysDictDataService {
- @Override
- public TableDataInfo selectPageDictDataList(SysDictData dictData) {
- LambdaQueryWrapper lqw = new LambdaQueryWrapper()
- .eq(StrUtil.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType())
- .like(StrUtil.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel())
- .eq(StrUtil.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus())
- .orderByAsc(SysDictData::getDictSort);
- return PageUtils.buildDataInfo(page(PageUtils.buildPage(),lqw));
- }
+ @Override
+ public TableDataInfo selectPageDictDataList(SysDictData dictData) {
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper()
+ .eq(StrUtil.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType())
+ .like(StrUtil.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel())
+ .eq(StrUtil.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus())
+ .orderByAsc(SysDictData::getDictSort);
+ return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
+ }
- /**
- * 根据条件分页查询字典数据
- *
- * @param dictData 字典数据信息
- * @return 字典数据集合信息
- */
- @Override
- public List selectDictDataList(SysDictData dictData) {
- return list(new LambdaQueryWrapper()
- .eq(StrUtil.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType())
- .like(StrUtil.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel())
- .eq(StrUtil.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus())
- .orderByAsc(SysDictData::getDictSort));
- }
+ /**
+ * 根据条件分页查询字典数据
+ *
+ * @param dictData 字典数据信息
+ * @return 字典数据集合信息
+ */
+ @Override
+ public List selectDictDataList(SysDictData dictData) {
+ return list(new LambdaQueryWrapper()
+ .eq(StrUtil.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType())
+ .like(StrUtil.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel())
+ .eq(StrUtil.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus())
+ .orderByAsc(SysDictData::getDictSort));
+ }
- /**
- * 根据字典类型和字典键值查询字典数据信息
- *
- * @param dictType 字典类型
- * @param dictValue 字典键值
- * @return 字典标签
- */
- @Override
- public String selectDictLabel(String dictType, String dictValue) {
- return getOne(new LambdaQueryWrapper()
- .select(SysDictData::getDictLabel)
- .eq(SysDictData::getDictType, dictType)
- .eq(SysDictData::getDictValue, dictValue))
- .getDictLabel();
- }
+ /**
+ * 根据字典类型和字典键值查询字典数据信息
+ *
+ * @param dictType 字典类型
+ * @param dictValue 字典键值
+ * @return 字典标签
+ */
+ @Override
+ public String selectDictLabel(String dictType, String dictValue) {
+ return getOne(new LambdaQueryWrapper()
+ .select(SysDictData::getDictLabel)
+ .eq(SysDictData::getDictType, dictType)
+ .eq(SysDictData::getDictValue, dictValue))
+ .getDictLabel();
+ }
- /**
- * 根据字典数据ID查询信息
- *
- * @param dictCode 字典数据ID
- * @return 字典数据
- */
- @Override
- public SysDictData selectDictDataById(Long dictCode) {
- return getById(dictCode);
- }
+ /**
+ * 根据字典数据ID查询信息
+ *
+ * @param dictCode 字典数据ID
+ * @return 字典数据
+ */
+ @Override
+ public SysDictData selectDictDataById(Long dictCode) {
+ return getById(dictCode);
+ }
- /**
- * 批量删除字典数据信息
- *
- * @param dictCodes 需要删除的字典数据ID
- * @return 结果
- */
- @Override
- public int deleteDictDataByIds(Long[] dictCodes) {
- int row = baseMapper.deleteBatchIds(Arrays.asList(dictCodes));
- if (row > 0) {
- DictUtils.clearDictCache();
- }
- return row;
- }
+ /**
+ * 批量删除字典数据信息
+ *
+ * @param dictCodes 需要删除的字典数据ID
+ * @return 结果
+ */
+ @Override
+ public void deleteDictDataByIds(Long[] dictCodes) {
+ for (Long dictCode : dictCodes) {
+ SysDictData data = selectDictDataById(dictCode);
+ baseMapper.deleteById(dictCode);
+ List dictDatas = baseMapper.selectDictDataByType(data.getDictType());
+ DictUtils.setDictCache(data.getDictType(), dictDatas);
+ }
+ }
- /**
- * 新增保存字典数据信息
- *
- * @param dictData 字典数据信息
- * @return 结果
- */
- @Override
- public int insertDictData(SysDictData dictData) {
- int row = baseMapper.insert(dictData);
- if (row > 0) {
- DictUtils.clearDictCache();
- }
- return row;
- }
+ /**
+ * 新增保存字典数据信息
+ *
+ * @param data 字典数据信息
+ * @return 结果
+ */
+ @Override
+ public int insertDictData(SysDictData data) {
+ int row = baseMapper.insert(data);
+ if (row > 0) {
+ List dictDatas = baseMapper.selectDictDataByType(data.getDictType());
+ DictUtils.setDictCache(data.getDictType(), dictDatas);
+ }
+ return row;
+ }
- /**
- * 修改保存字典数据信息
- *
- * @param dictData 字典数据信息
- * @return 结果
- */
- @Override
- public int updateDictData(SysDictData dictData) {
- int row = baseMapper.updateById(dictData);
- if (row > 0) {
- DictUtils.clearDictCache();
- }
- return row;
- }
+ /**
+ * 修改保存字典数据信息
+ *
+ * @param data 字典数据信息
+ * @return 结果
+ */
+ @Override
+ public int updateDictData(SysDictData data) {
+ int row = baseMapper.updateById(data);
+ if (row > 0) {
+ List dictDatas = baseMapper.selectDictDataByType(data.getDictType());
+ DictUtils.setDictCache(data.getDictType(), dictDatas);
+ }
+ return row;
+ }
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
index 87acff4f..79a4036e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
@@ -21,7 +21,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
-import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -33,197 +32,208 @@ import java.util.Map;
@Service
public class SysDictTypeServiceImpl extends ServiceImpl implements ISysDictTypeService {
- @Autowired
- private SysDictDataMapper dictDataMapper;
+ @Autowired
+ private SysDictTypeMapper dictTypeMapper;
- /**
- * 项目启动时,初始化字典到缓存
- */
- @PostConstruct
- public void init() {
- List dictTypeList = list();
- for (SysDictType dictType : dictTypeList) {
- List dictDatas = dictDataMapper.selectList(
- new LambdaQueryWrapper()
- .eq(SysDictData::getStatus, 0)
- .eq(SysDictData::getDictType, dictType.getDictType())
- .orderByAsc(SysDictData::getDictSort));
- DictUtils.setDictCache(dictType.getDictType(), dictDatas);
- }
- }
+ @Autowired
+ private SysDictDataMapper dictDataMapper;
- @Override
- public TableDataInfo selectPageDictTypeList(SysDictType dictType) {
- Map params = dictType.getParams();
- LambdaQueryWrapper lqw = new LambdaQueryWrapper()
- .like(StrUtil.isNotBlank(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName())
- .eq(StrUtil.isNotBlank(dictType.getStatus()), SysDictType::getStatus, dictType.getStatus())
- .like(StrUtil.isNotBlank(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType())
- .apply(Validator.isNotEmpty(params.get("beginTime")),
- "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
- params.get("beginTime"))
- .apply(Validator.isNotEmpty(params.get("endTime")),
- "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
- params.get("endTime"));
- return PageUtils.buildDataInfo(page(PageUtils.buildPage(),lqw));
- }
+ /**
+ * 项目启动时,初始化字典到缓存
+ */
+ @PostConstruct
+ public void init() {
+ loadingDictCache();
+ }
- /**
- * 根据条件分页查询字典类型
- *
- * @param dictType 字典类型信息
- * @return 字典类型集合信息
- */
- @Override
- public List selectDictTypeList(SysDictType dictType) {
- Map params = dictType.getParams();
- return list(new LambdaQueryWrapper()
- .like(StrUtil.isNotBlank(dictType.getDictName()),SysDictType::getDictName, dictType.getDictName())
- .eq(StrUtil.isNotBlank(dictType.getStatus()),SysDictType::getStatus, dictType.getStatus())
- .like(StrUtil.isNotBlank(dictType.getDictType()),SysDictType::getDictType, dictType.getDictType())
- .apply(Validator.isNotEmpty(params.get("beginTime")),
- "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
- params.get("beginTime"))
- .apply(Validator.isNotEmpty(params.get("endTime")),
- "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
- params.get("endTime")));
- }
+ @Override
+ public TableDataInfo selectPageDictTypeList(SysDictType dictType) {
+ Map params = dictType.getParams();
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper()
+ .like(StrUtil.isNotBlank(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName())
+ .eq(StrUtil.isNotBlank(dictType.getStatus()), SysDictType::getStatus, dictType.getStatus())
+ .like(StrUtil.isNotBlank(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType())
+ .apply(Validator.isNotEmpty(params.get("beginTime")),
+ "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
+ params.get("beginTime"))
+ .apply(Validator.isNotEmpty(params.get("endTime")),
+ "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
+ params.get("endTime"));
+ return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
+ }
- /**
- * 根据所有字典类型
- *
- * @return 字典类型集合信息
- */
- @Override
- public List selectDictTypeAll() {
- return list();
- }
+ /**
+ * 根据条件分页查询字典类型
+ *
+ * @param dictType 字典类型信息
+ * @return 字典类型集合信息
+ */
+ @Override
+ public List selectDictTypeList(SysDictType dictType) {
+ Map params = dictType.getParams();
+ return list(new LambdaQueryWrapper()
+ .like(StrUtil.isNotBlank(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName())
+ .eq(StrUtil.isNotBlank(dictType.getStatus()), SysDictType::getStatus, dictType.getStatus())
+ .like(StrUtil.isNotBlank(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType())
+ .apply(Validator.isNotEmpty(params.get("beginTime")),
+ "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
+ params.get("beginTime"))
+ .apply(Validator.isNotEmpty(params.get("endTime")),
+ "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
+ params.get("endTime")));
+ }
- /**
- * 根据字典类型查询字典数据
- *
- * @param dictType 字典类型
- * @return 字典数据集合信息
- */
- @Override
- public List selectDictDataByType(String dictType) {
- List dictDatas = DictUtils.getDictCache(dictType);
- if (CollUtil.isNotEmpty(dictDatas)) {
- return dictDatas;
- }
- dictDatas = dictDataMapper.selectList(new LambdaQueryWrapper()
- .eq(SysDictData::getStatus, 0)
- .eq(SysDictData::getDictType, dictType)
- .orderByAsc(SysDictData::getDictSort));
- if (CollUtil.isNotEmpty(dictDatas)) {
- DictUtils.setDictCache(dictType, dictDatas);
- return dictDatas;
- }
- return null;
- }
+ /**
+ * 根据所有字典类型
+ *
+ * @return 字典类型集合信息
+ */
+ @Override
+ public List selectDictTypeAll() {
+ return list();
+ }
- /**
- * 根据字典类型ID查询信息
- *
- * @param dictId 字典类型ID
- * @return 字典类型
- */
- @Override
- public SysDictType selectDictTypeById(Long dictId) {
- return getById(dictId);
- }
+ /**
+ * 根据字典类型查询字典数据
+ *
+ * @param dictType 字典类型
+ * @return 字典数据集合信息
+ */
+ @Override
+ public List selectDictDataByType(String dictType) {
+ List dictDatas = DictUtils.getDictCache(dictType);
+ if (CollUtil.isNotEmpty(dictDatas)) {
+ return dictDatas;
+ }
+ dictDatas = dictDataMapper.selectDictDataByType(dictType);
+ if (CollUtil.isNotEmpty(dictDatas)) {
+ DictUtils.setDictCache(dictType, dictDatas);
+ return dictDatas;
+ }
+ return null;
+ }
- /**
- * 根据字典类型查询信息
- *
- * @param dictType 字典类型
- * @return 字典类型
- */
- @Override
- public SysDictType selectDictTypeByType(String dictType) {
- return getOne(new LambdaQueryWrapper().eq(SysDictType::getDictType, dictType));
- }
+ /**
+ * 根据字典类型ID查询信息
+ *
+ * @param dictId 字典类型ID
+ * @return 字典类型
+ */
+ @Override
+ public SysDictType selectDictTypeById(Long dictId) {
+ return getById(dictId);
+ }
- /**
- * 批量删除字典类型信息
- *
- * @param dictIds 需要删除的字典ID
- * @return 结果
- */
- @Override
- public int deleteDictTypeByIds(Long[] dictIds) {
- for (Long dictId : dictIds) {
- SysDictType dictType = selectDictTypeById(dictId);
- if (dictDataMapper.selectCount(new LambdaQueryWrapper()
- .eq(SysDictData::getDictType, dictType.getDictType())) > 0) {
- throw new CustomException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
- }
- }
- int count = baseMapper.deleteBatchIds(Arrays.asList(dictIds));
- if (count > 0) {
- DictUtils.clearDictCache();
- }
- return count;
- }
+ /**
+ * 根据字典类型查询信息
+ *
+ * @param dictType 字典类型
+ * @return 字典类型
+ */
+ @Override
+ public SysDictType selectDictTypeByType(String dictType) {
+ return getOne(new LambdaQueryWrapper().eq(SysDictType::getDictType, dictType));
+ }
- /**
- * 清空缓存数据
- */
- @Override
- public void clearCache() {
- DictUtils.clearDictCache();
- }
+ /**
+ * 批量删除字典类型信息
+ *
+ * @param dictIds 需要删除的字典ID
+ * @return 结果
+ */
+ @Override
+ public void deleteDictTypeByIds(Long[] dictIds) {
+ for (Long dictId : dictIds) {
+ SysDictType dictType = selectDictTypeById(dictId);
+ if (dictDataMapper.selectCount(new LambdaQueryWrapper()
+ .eq(SysDictData::getDictType, dictType.getDictType())) > 0) {
+ throw new CustomException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
+ }
+ dictTypeMapper.deleteById(dictId);
+ DictUtils.removeDictCache(dictType.getDictType());
+ }
+ }
- /**
- * 新增保存字典类型信息
- *
- * @param dictType 字典类型信息
- * @return 结果
- */
- @Override
- public int insertDictType(SysDictType dictType) {
- int row = baseMapper.insert(dictType);
- if (row > 0) {
- DictUtils.clearDictCache();
- }
- return row;
- }
+ /**
+ * 加载字典缓存数据
+ */
+ @Override
+ public void loadingDictCache() {
+ List dictTypeList = list();
+ for (SysDictType dictType : dictTypeList) {
+ List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType());
+ DictUtils.setDictCache(dictType.getDictType(), dictDatas);
+ }
+ }
- /**
- * 修改保存字典类型信息
- *
- * @param dictType 字典类型信息
- * @return 结果
- */
- @Override
- @Transactional
- public int updateDictType(SysDictType dictType) {
- SysDictType oldDict = getById(dictType.getDictId());
- dictDataMapper.update(null, new LambdaUpdateWrapper()
- .set(SysDictData::getDictType, dictType.getDictType())
- .eq(SysDictData::getDictType, oldDict.getDictType()));
- int row = baseMapper.updateById(dictType);
- if (row > 0) {
- DictUtils.clearDictCache();
- }
- return row;
- }
+ /**
+ * 清空字典缓存数据
+ */
+ @Override
+ public void clearDictCache() {
+ DictUtils.clearDictCache();
+ }
- /**
- * 校验字典类型称是否唯一
- *
- * @param dict 字典类型
- * @return 结果
- */
- @Override
- public String checkDictTypeUnique(SysDictType dict) {
- Long dictId = Validator.isNull(dict.getDictId()) ? -1L : dict.getDictId();
- SysDictType dictType = getOne(new LambdaQueryWrapper()
- .eq(SysDictType::getDictType, dict.getDictType())
- .last("limit 1"));
- if (Validator.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) {
- return UserConstants.NOT_UNIQUE;
- }
- return UserConstants.UNIQUE;
- }
+ /**
+ * 重置字典缓存数据
+ */
+ @Override
+ public void resetDictCache() {
+ clearDictCache();
+ loadingDictCache();
+ }
+
+ /**
+ * 新增保存字典类型信息
+ *
+ * @param dict 字典类型信息
+ * @return 结果
+ */
+ @Override
+ public int insertDictType(SysDictType dict) {
+ int row = baseMapper.insert(dict);
+ if (row > 0) {
+ DictUtils.setDictCache(dict.getDictType(), null);
+ }
+ return row;
+ }
+
+ /**
+ * 修改保存字典类型信息
+ *
+ * @param dict 字典类型信息
+ * @return 结果
+ */
+ @Override
+ @Transactional
+ public int updateDictType(SysDictType dict) {
+ SysDictType oldDict = getById(dict.getDictId());
+ dictDataMapper.update(null, new LambdaUpdateWrapper()
+ .set(SysDictData::getDictType, dict.getDictType())
+ .eq(SysDictData::getDictType, oldDict.getDictType()));
+ int row = baseMapper.updateById(dict);
+ if (row > 0) {
+ List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
+ DictUtils.setDictCache(dict.getDictType(), dictDatas);
+ }
+ return row;
+ }
+
+ /**
+ * 校验字典类型称是否唯一
+ *
+ * @param dict 字典类型
+ * @return 结果
+ */
+ @Override
+ public String checkDictTypeUnique(SysDictType dict) {
+ Long dictId = Validator.isNull(dict.getDictId()) ? -1L : dict.getDictId();
+ SysDictType dictType = getOne(new LambdaQueryWrapper()
+ .eq(SysDictType::getDictType, dict.getDictType())
+ .last("limit 1"));
+ if (Validator.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) {
+ return UserConstants.NOT_UNIQUE;
+ }
+ return UserConstants.UNIQUE;
+ }
}
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index 0f996710..21f68541 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -40,7 +40,9 @@
AND status = #{status}
- ${params.dataScope}
+
+ AND ( ${params.dataScope} )
+
order by d.parent_id, d.order_num
@@ -49,11 +51,10 @@
from sys_dept d
left join sys_role_dept rd on d.dept_id = rd.dept_id
where rd.role_id = #{roleId}
-
- and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id =
- rd.dept_id and rd.role_id = #{roleId})
-
+
+ and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = #{roleId})
+
order by d.parent_id, d.order_num
-
\ No newline at end of file
+
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
index 2e7162f3..1a542f83 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -58,7 +58,9 @@
and date_format(r.create_time,'%y%m%d') <= date_format(#{role.params.endTime},'%y%m%d')
- ${role.params.dataScope}
+
+ AND ( ${role.params.dataScope} )
+
order by r.role_sort
@@ -81,7 +83,9 @@
and date_format(r.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d')
- ${params.dataScope}
+
+ AND ( ${params.dataScope} )
+
order by r.role_sort
@@ -103,4 +107,4 @@
WHERE r.del_flag = '0' and u.user_name = #{userName}
-
\ No newline at end of file
+
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 1135dee9..df59332b 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -106,7 +106,9 @@
ancestors) ))
- ${user.params.dataScope}
+
+ AND ( ${user.params.dataScope} )
+
-
\ No newline at end of file
+
diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json
index 4bdce363..e951b8d6 100644
--- a/ruoyi-ui/package.json
+++ b/ruoyi-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "ruoyi-vue-plus",
- "version": "2.2.0",
+ "version": "2.2.1",
"description": "RuoYi-Vue-Plus后台管理系统",
"author": "LionLi",
"license": "MIT",
diff --git a/ruoyi-ui/src/api/system/config.js b/ruoyi-ui/src/api/system/config.js
index aff093d4..4c5cb6b8 100644
--- a/ruoyi-ui/src/api/system/config.js
+++ b/ruoyi-ui/src/api/system/config.js
@@ -51,10 +51,10 @@ export function delConfig(configId) {
})
}
-// 清理参数缓存
-export function clearCache() {
+// 刷新参数缓存
+export function refreshCache() {
return request({
- url: '/system/config/clearCache',
+ url: '/system/config/refreshCache',
method: 'delete'
})
}
diff --git a/ruoyi-ui/src/api/system/dict/type.js b/ruoyi-ui/src/api/system/dict/type.js
index 37034d2f..2f0532da 100644
--- a/ruoyi-ui/src/api/system/dict/type.js
+++ b/ruoyi-ui/src/api/system/dict/type.js
@@ -43,10 +43,10 @@ export function delType(dictId) {
})
}
-// 清理参数缓存
-export function clearCache() {
+// 刷新字典缓存
+export function refreshCache() {
return request({
- url: '/system/dict/type/clearCache',
+ url: '/system/dict/type/refreshCache',
method: 'delete'
})
}
diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue
index 9e07ee96..8dc50600 100644
--- a/ruoyi-ui/src/views/index.vue
+++ b/ruoyi-ui/src/views/index.vue
@@ -80,6 +80,17 @@
更新日志
+
+
+ - add 增加 security 权限框架 @Async 异步注解配置
+ - update 优化数据权限sql 解决MP apply注入附带 AND 语法问题
+ - update 优化dataScope参数防止注入
+ - update 优化参数&字典缓存操作
+ - update 增加修改包名文档
+ - update 文档增加演示图例
+ - fix 修复部门类sql符号错误
+
+
- 同步升级 RuoYi-Vue 3.5.0
@@ -180,7 +191,7 @@ export default {
data() {
return {
// 版本号
- version: "2.2.0",
+ version: "2.2.1",
};
},
methods: {
diff --git a/ruoyi-ui/src/views/system/config/index.vue b/ruoyi-ui/src/views/system/config/index.vue
index 5198b003..4d6f7ae6 100644
--- a/ruoyi-ui/src/views/system/config/index.vue
+++ b/ruoyi-ui/src/views/system/config/index.vue
@@ -99,9 +99,9 @@
plain
icon="el-icon-refresh"
size="mini"
- @click="handleClearCache"
+ @click="handleRefreshCache"
v-hasPermi="['system:config:remove']"
- >清理缓存
+ >刷新缓存
@@ -181,7 +181,7 @@