疯狂的狮子li
2021-05-28 d0b21665257834616240a85f90707651f9e03680
Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev

 Conflicts:
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
 ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
 ruoyi-ui/src/api/system/config.js
 ruoyi-ui/src/api/system/dict/type.js
 ruoyi-ui/src/views/system/config/index.vue
 ruoyi-ui/src/views/system/dict/index.vue
已修改16个文件
308 ■■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/api/system/config.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/api/system/dict/type.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/system/config/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/system/dict/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
@@ -20,7 +20,7 @@
/**
 * 参数配置 信息操作处理
 *
 *
 * @author ruoyi
 */
@RestController
@@ -110,18 +110,19 @@
    @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();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
@@ -21,7 +21,7 @@
/**
 * 数据字典信息
 *
 *
 * @author ruoyi
 */
@RestController
@@ -107,6 +107,7 @@
    @DeleteMapping("/{dictCodes}")
    public AjaxResult remove(@PathVariable Long[] dictCodes)
    {
        return toAjax(dictDataService.deleteDictDataByIds(dictCodes));
        dictDataService.deleteDictDataByIds(dictCodes);
        return success();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
@@ -19,7 +19,7 @@
/**
 * 数据字典信息
 *
 *
 * @author ruoyi
 */
@RestController
@@ -96,18 +96,19 @@
    @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();
    }
ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java
@@ -156,6 +156,16 @@
    }
    /**
     * 删除指定字典缓存
     *
     * @param key 字典键
     */
    public static void removeDictCache(String key)
    {
        SpringUtils.getBean(RedisCache.class).deleteObject(getCacheKey(key));
    }
    /**
     * 清空字典缓存
     */
    public static void clearDictCache()
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -68,6 +68,7 @@
    @Before("dataScopePointCut()")
    public void doBefore(JoinPoint point) throws Throwable
    {
        clearDataScope(point);
        handleDataScope(point);
    }
@@ -173,4 +174,17 @@
        }
        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, "");
        }
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
@@ -62,12 +62,22 @@
     * @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();
    /**
     * 校验参数键名是否唯一
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
@@ -47,7 +47,7 @@
     * @param dictCodes 需要删除的字典数据ID
     * @return 结果
     */
    public int deleteDictDataByIds(Long[] dictCodes);
    public void deleteDictDataByIds(Long[] dictCodes);
    /**
     * 新增保存字典数据信息
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
@@ -62,12 +62,22 @@
     * @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();
    /**
     * 新增保存字典类型信息
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
@@ -33,7 +33,10 @@
@Service
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements ISysConfigService {
    @Autowired
    @Autowired
    private SysConfigMapper configMapper;
    @Autowired
    private RedisCache redisCache;
    /**
@@ -41,10 +44,7 @@
     */
    @PostConstruct
    public void init() {
        List<SysConfig> configsList = baseMapper.selectList(new LambdaQueryWrapper<>());
        for (SysConfig config : configsList) {
            redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
        }
        loadingConfigCache();
    }
    @Override
@@ -155,31 +155,51 @@
     * @return 结果
     */
    @Override
    public int deleteConfigByIds(Long[] configIds) {
    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.deleteConfigById(configId);
            redisCache.deleteObject(getCacheKey(config.getConfigKey()));
        }
        int count = baseMapper.deleteBatchIds(Arrays.asList(configIds));
        if (count > 0) {
            Collection<String> keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
            redisCache.deleteObject(keys);
        }
        return count;
    }
    /**
     * 清空缓存数据
     * 加载参数缓存数据
     */
    @Override
    public void clearCache() {
    public void loadingConfigCache()
    {
        List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig());
        for (SysConfig config : configsList)
        {
            redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
        }
    }
    /**
     * 清空参数缓存数据
     */
    @Override
    public void clearConfigCache()
    {
        Collection<String> keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
        redisCache.deleteObject(keys);
    }
    /**
     * 重置参数缓存数据
     */
    @Override
    public void resetConfigCache()
    {
        clearConfigCache();
        loadingConfigCache();
    }
    /**
     * 校验参数键名是否唯一
     *
     * @param config 参数配置信息
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
@@ -22,6 +22,9 @@
@Service
public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> implements ISysDictDataService {
    @Autowired
    private SysDictDataMapper dictDataMapper;
    @Override
    public TableDataInfo<SysDictData> selectPageDictDataList(SysDictData dictData) {
        LambdaQueryWrapper<SysDictData> lqw = new LambdaQueryWrapper<SysDictData>()
@@ -81,25 +84,31 @@
     * @return 结果
     */
    @Override
    public int deleteDictDataByIds(Long[] dictCodes) {
        int row = baseMapper.deleteBatchIds(Arrays.asList(dictCodes));
        if (row > 0) {
            DictUtils.clearDictCache();
    public void deleteDictDataByIds(Long[] dictCodes)
    {
        for (Long dictCode : dictCodes)
        {
            SysDictData data = selectDictDataById(dictCode);
            dictDataMapper.deleteDictDataById(dictCode);
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
        return row;
    }
    /**
     * 新增保存字典数据信息
     *
     * @param dictData 字典数据信息
     * @param data 字典数据信息
     * @return 结果
     */
    @Override
    public int insertDictData(SysDictData dictData) {
        int row = baseMapper.insert(dictData);
        if (row > 0) {
            DictUtils.clearDictCache();
    public int insertDictData(SysDictData data)
    {
        int row = baseMapper.insert(data);
        if (row > 0)
        {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
        return row;
    }
@@ -107,14 +116,17 @@
    /**
     * 修改保存字典数据信息
     *
     * @param dictData 字典数据信息
     * @param data 字典数据信息
     * @return 结果
     */
    @Override
    public int updateDictData(SysDictData dictData) {
        int row = baseMapper.updateById(dictData);
        if (row > 0) {
            DictUtils.clearDictCache();
    public int updateDictData(SysDictData data)
    {
        int row = baseMapper.updateById(data);
        if (row > 0)
        {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
        return row;
    }
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
@@ -33,6 +33,9 @@
@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements ISysDictTypeService {
    @Autowired
    private SysDictTypeMapper dictTypeMapper;
    @Autowired
    private SysDictDataMapper dictDataMapper;
@@ -41,15 +44,7 @@
     */
    @PostConstruct
    public void init() {
        List<SysDictType> dictTypeList = list();
        for (SysDictType dictType : dictTypeList) {
            List<SysDictData> dictDatas = dictDataMapper.selectList(
                    new LambdaQueryWrapper<SysDictData>()
                            .eq(SysDictData::getStatus, 0)
                            .eq(SysDictData::getDictType, dictType.getDictType())
                            .orderByAsc(SysDictData::getDictSort));
            DictUtils.setDictCache(dictType.getDictType(), dictDatas);
        }
        loadingDictCache();
    }
    @Override
@@ -151,60 +146,81 @@
     * @return 结果
     */
    @Override
    public int deleteDictTypeByIds(Long[] dictIds) {
    public void deleteDictTypeByIds(Long[] dictIds) {
        for (Long dictId : dictIds) {
            SysDictType dictType = selectDictTypeById(dictId);
            if (dictDataMapper.selectCount(new LambdaQueryWrapper<SysDictData>()
                    .eq(SysDictData::getDictType, dictType.getDictType())) > 0) {
                throw new CustomException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
            }
            dictTypeMapper.deleteDictTypeById(dictId);
            DictUtils.removeDictCache(dictType.getDictType());
        }
        int count = baseMapper.deleteBatchIds(Arrays.asList(dictIds));
        if (count > 0) {
            DictUtils.clearDictCache();
        }
        return count;
    }
    /**
     * 清空缓存数据
     * 加载字典缓存数据
     */
    @Override
    public void clearCache() {
    public void loadingDictCache()
    {
        List<SysDictType> dictTypeList = dictTypeMapper.selectDictTypeAll();
        for (SysDictType dictType : dictTypeList)
        {
            List<SysDictData> 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) {
        int row = baseMapper.insert(dictType);
    public int insertDictType(SysDictType dict) {
        int row = baseMapper.insert(dict);
        if (row > 0) {
            DictUtils.clearDictCache();
            DictUtils.setDictCache(dict.getDictType(), null);
        }
        return row;
    }
    /**
     * 修改保存字典类型信息
     *
     * @param dictType 字典类型信息
     * @param dict 字典类型信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateDictType(SysDictType dictType) {
        SysDictType oldDict = getById(dictType.getDictId());
        dictDataMapper.update(null, new LambdaUpdateWrapper<SysDictData>()
                .set(SysDictData::getDictType, dictType.getDictType())
                .eq(SysDictData::getDictType, oldDict.getDictType()));
        int row = baseMapper.updateById(dictType);
        if (row > 0) {
            DictUtils.clearDictCache();
    public int updateDictType(SysDictType dict)
    {
        SysDictType oldDict = getById(dict.getDictId());
        dictDataMapper.update(null, new LambdaUpdateWrapper<SysDictData>()
            .set(SysDictData::getDictType, dict.getDictType())
            .eq(SysDictData::getDictType, oldDict.getDictType()));
        int row = baseMapper.updateById(dict);
        if (row > 0)
        {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
            DictUtils.setDictCache(dict.getDictType(), dictDatas);
        }
        return row;
    }
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -49,11 +49,10 @@
        from sys_dept d
        left join sys_role_dept rd on d.dept_id = rd.dept_id
        where rd.role_id = #{roleId}
        <if test="deptCheckStrictly">
            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})
        </if>
            <if test="deptCheckStrictly">
                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})
            </if>
        order by d.parent_id, d.order_num
    </select>
</mapper>
</mapper>
ruoyi-ui/src/api/system/config.js
@@ -51,10 +51,10 @@
  })
}
// 清理参数缓存
export function clearCache() {
// 刷新参数缓存
export function refreshCache() {
  return request({
    url: '/system/config/clearCache',
    url: '/system/config/refreshCache',
    method: 'delete'
  })
}
ruoyi-ui/src/api/system/dict/type.js
@@ -43,10 +43,10 @@
  })
}
// 清理参数缓存
export function clearCache() {
// 刷新字典缓存
export function refreshCache() {
  return request({
    url: '/system/dict/type/clearCache',
    url: '/system/dict/type/refreshCache',
    method: 'delete'
  })
}
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']"
        >清理缓存</el-button>
        >刷新缓存</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
@@ -181,7 +181,7 @@
</template>
<script>
import { listConfig, getConfig, delConfig, addConfig, updateConfig, exportConfig, clearCache } from "@/api/system/config";
import { listConfig, getConfig, delConfig, addConfig, updateConfig, exportConfig, refreshCache } from "@/api/system/config";
export default {
  name: "Config",
@@ -355,10 +355,10 @@
          this.exportLoading = false;
        })
    },
    /** 清理缓存按钮操作 */
    handleClearCache() {
      clearCache().then(response => {
        this.msgSuccess("清理成功");
    /** 刷新缓存按钮操作 */
    handleRefreshCache() {
      refreshCache().then(() => {
        this.msgSuccess("刷新成功");
      });
    }
  }
ruoyi-ui/src/views/system/dict/index.vue
@@ -105,9 +105,9 @@
          plain
          icon="el-icon-refresh"
          size="mini"
          @click="handleClearCache"
          @click="handleRefreshCache"
          v-hasPermi="['system:dict:remove']"
        >清理缓存</el-button>
        >刷新缓存</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
@@ -189,7 +189,7 @@
</template>
<script>
import { listType, getType, delType, addType, updateType, exportType, clearCache } from "@/api/system/dict/type";
import { listType, getType, delType, addType, updateType, exportType, refreshCache } from "@/api/system/dict/type";
export default {
  name: "Dict",
@@ -359,10 +359,10 @@
          this.exportLoading = false;
        })
    },
    /** 清理缓存按钮操作 */
    handleClearCache() {
      clearCache().then(response => {
        this.msgSuccess("清理成功");
    /** 刷新缓存按钮操作 */
    handleRefreshCache() {
      refreshCache().then(() => {
        this.msgSuccess("刷新成功");
      });
    }
  }