部门管理更新level问题?

来源:7-9 部门列表交互功能开发(新增部门,删除部门,更新部门)-3

北斗神拳1984

2018-09-21

我发现目前的代码无法更新子部门下还有子部门的问题,目前List deptList = sysDeptMapper.getChildDeptListByLevel(before.getLevel()+ “.” + before.getId());只能查询出该部门直接的子部门,如果子部门还有子部门的情况的却查询不出来,应该如何处理呢?
之前 like #{level} || ‘.%’,也是无法匹配的,还是只能匹配出like #{level}

写回答

1回答

Jimin

2018-09-22

你好,这个的代码我后期调整了一下,核心思想没变,最新代码可参考: https://git.imooc.com/coding-149/coding-149/src/master/src/main/java/com/mmall/service/SysDeptService.java

这个办法具体被调整为:

public void updateWithChild(SysDept before, SysDept after) {

    String newLevelPrefix = after.getLevel();

    String oldLevelPrefix = before.getLevel();

    if (!after.getLevel().equals(before.getLevel())) {

        String curLevel = before.getLevel() + "." + before.getId();

        List<SysDept> deptList = sysDeptMapper.getChildDeptListByLevel(curLevel + "%");

        if (CollectionUtils.isNotEmpty(deptList)) {

            for (SysDept dept : deptList) {

                String level = dept.getLevel();

                if (level.equals(curLevel) || level.indexOf(curLevel + ".") == 0) {

                    // getChildAclModuleListByLevel可能会取出多余的内容,因此需要加个判断

                    // 比如0.1* 可能取出0.1、0.1.3、0.11、0.11.3,而期望取出  0.1、0.1.3, 因此呢需要判断等于0.1或者以0.1.为前缀才满足条件

                    level = newLevelPrefix + level.substring(oldLevelPrefix.length());

                    dept.setLevel(level);

                }

            }

            sysDeptMapper.batchUpdateLevel(deptList);

        }

    }

    sysDeptMapper.updateByPrimaryKey(after);

}

sql调整为:

<select id="getChildDeptListByLevel" resultMap="BaseResultMap">

select

<include refid="Base_Column_List" />

from sys_dept

WHERE level like #{level}

</select>

#{level}这里改为在java代码里拼好。

核心思想保持不变,具体参考:

https://www.imooc.com/article/21103

1
1
北斗神拳1984
非常感谢!理解了,测试也没问题了
2018-09-22
共1条回复

Java开发企业级权限管理系统

源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术

2261 学习 · 1347 问题

查看课程