批量更新level的判断

来源:7-3 更新部门接口开发

TimelessPast

2020-10-15

    public void updateWithChild(SysDept before, SysDept after) {

        String newLevelPrefix = after.getLevel();//更新后的层级前缀
        String oldLevelPrefix = before.getLevel();//更新前的层级前缀

        //如果更新前后层级前缀不相等,需要更新子部门。否则不更新子部门
        if (!newLevelPrefix.equals(oldLevelPrefix)) {
            //获取更新前其下一级部门准确的层级全称  如其下一级部门层级为0.1
            String curLevel = before.getLevel() + "." + before.getId();
            //获取其下一级部门及下一级部门的子部门及子部门的子集(获取到底)  获取层级为0.1*  如0.1、0.1.3...层级的部门
            List<SysDept> deptList = sysDeptMapper.getChildDeptListByLevel(curLevel + "%");
            //判断该部门的所有子部门(获取到底),不为空则遍历该集合,重新赋值level
            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);
                    }
                }
                //重新赋值level后  执行批量更新
                sysDeptMapper.batchUpdateLevel(deptList);
            }
        }
        //调用持久层接口,传入更新后的部门,执行更新
        sysDeptMapper.updateByPrimaryKey(after);
    }

老师 请问:
最内层的if这段,我不理解 如果满足if (level.equals(curLevel) || level.indexOf(curLevel + “.”) == 0) ,为什么需要满足这个条件。
执行下面
level = newLevelPrefix + level.substring(oldLevelPrefix.length());
level为什么是这样拼接的 ,能以更新前后的SysDept对象level的前缀 及其更新后所有子集的level 举个例子吗,谢谢老师

写回答

1回答

Jimin

2020-10-18

你好,这里要解决个别特殊的数据场景,比如1.2.10.11和1.2.100.101,这样两个level,他们都可以匹配到1.2.1和1.2.10的,这里要增加些判断保证取出的数据是真正满足要求的

0
1
TimelessPast
非常感谢!
2020-10-18
共1条回复

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

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

2261 学习 · 1347 问题

查看课程