批量更新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回答
-
你好,这里要解决个别特殊的数据场景,比如1.2.10.11和1.2.100.101,这样两个level,他们都可以匹配到1.2.1和1.2.10的,这里要增加些判断保证取出的数据是真正满足要求的
012020-10-18
相似问题