部门更新bug,如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public void update(DeptParam param) { BeanValidator.check(param); if (checkExist(param.getParentId(), param.getName(), param.getId())) { throw new ParamException( "同一层级下存在相同名称的部门" ); } SysDept before = sysDeptMapper.selectByPrimaryKey(param.getId()); Preconditions.checkNotNull(before, "待更新的部门不存在" ); if (checkExist(param.getParentId(), param.getName(), param.getId())) { throw new ParamException( "同一层级下存在相同名称的部门" ); } SysDept after = SysDept.builder().id(param.getId()).name(param.getName()).parentId(param.getParentId()) .seq(param.getSeq()).remark(param.getRemark()).build(); after.setLevel(LevelUtil.calculateLevel(getLevel(param.getParentId()), param.getParentId())); after.setOperator(RequestHolder.getCurrentUser().getUsername()); after.setOperateIp(IpUtil.getRemoteIp(RequestHolder.getCurrentRequest())); after.setOperateTime( new Date()); updateWithChild(before, after); } private boolean checkExist(Integer parentId, String deptName, Integer deptId) { return sysDeptMapper.countByNameAndParentId(parentId, deptName, deptId) > 0 ; } |
老师,我认为您的代码存在bug,当部门名称和parentId都不变的时候,在执行到checkExist时,返回肯定为真,这样就会抛出“同一层级下存在相同名称的部门”异常。