请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

部门管理更新level问题?

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

正在回答

1回答

你好,这个的代码我后期调整了一下,核心思想没变,最新代码可参考: 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 回复 有任何疑惑可以回复我~
  • 提问者 北斗神拳1984 #1
    非常感谢!理解了,测试也没问题了
    回复 有任何疑惑可以回复我~ 2018-09-22 09:50:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信