RuoYiVue-Plus的多部门改造

开源项目官方地址:
https://plus-doc.dromara.org/#/ruoyi-vue-plus/home

场景

在我们的项目中,可能会涉及到多部门的情况。其实,在日常工作中,同一个人在多个部门任职也是比较正常的,所以准备着手改造这个项目中的用户和部门相关的内容,将它改成多部门的结构。

修改步骤

后端版本号:5.3.1

先确定好几个修改的地方:

  1. 部门相关代码和 SQL
  2. 用户相关代码和 SQL
  3. 登录和权限代码和 SQL
    4.前端显示修改

修改

  1. 先把所有表结构中的 create_dept 字段从 Long 改成JSON,用于存放数据的创建部门。
  2. 移除SysUser 相关表中的 deptId 字段,可以在 VO 对象中,增加 deptList用于显示
  3. 新增一张新的表,UserDept ,用于存放部门和用户关联表
  4. 修改所有自带 sql 中的查询用户部门的 sql,改成关联 UserDept
  5. 修改Sys'LoginService 中,登录成功,设置部门的部分代码
  6. 修改 BeseEntity 中的 createDept 的类型为 List
  7. 修改 DataScopeType 中的模板代码

    以部门及以下或本人数据为例
    旧代码
    DEPT_AND_CHILD_OR_SELF("6", " #{#deptName} IN ( #{@sdss.getDeptAndChild( #user.deptId )} ) OR #{#userName} = #{#user.userId} ", " 1 = 0 ");
    新代码:
    DEPT_AND_CHILD_OR_SELF("6", "  JSON_OVERLAPS(#{#deptName},JSON_ARRAY(#{@sdss.getDeptAndChildByUserId( #user.userId )})) OR #{#userName} = #{#user.userId} ", " 1 = 0 ");

    8.在SysDataScopeServiceImpl中,新建一个 getDeptAndChildByUserId 方法,用于获取某个用户的部门字符串

    /**
     * 通过用户,查询拼接所有子部门的字符串
     * @param userId
     * @return
     */
    @Override
    public String getDeptAndChildByUserId(Long userId) {
        Set<Long> ids = SpringUtils.getBean(ISysDeptService.class).getDeptAndChildByUserId(userId);
        if (CollUtil.isNotEmpty(ids)) {
            return StreamUtils.join(ids, Convert::toStr);
        }
    
        return "-1";
    }

站内相关文章:

Comment ()
如果您有不同的看法,或者疑问,欢迎指教