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

北斗神拳1984
2018-09-21
我发现目前的代码无法更新子部门下还有子部门的问题,目前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
112018-09-22
相似问题