bug源代码
/**
* 查询用户列表
*
* @param user 用户
* @param page 页
* @param size 大小
* @since 2025/04/14 11:53:25
*/
@PostMapping("/getUser")
public IWMSResponse<?> getUser(@RequestBody SjUser user, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "20") Integer size) {
Page<SjUser> userPage = userMapper.selectPage(new Page<>(page, size), Wrappers.<SjUser>lambdaQuery()
.eq(user.getSys() != null, SjUser::getSys, user.getSys())
.like(user.getName() != null, SjUser::getName, user.getName())
.like(user.getMobile() != null, SjUser::getMobile, user.getMobile())
.like(user.getCode() != null, SjUser::getCode, user.getCode())
.orderByDesc(SjUser::getCreatedTime)
);
// ——————————注入关联组织————————
// 查询用户关联组织
List<String> codes = userPage.getRecords().stream().map(SjUser::getCode).collect(Collectors.toList());
List<SjUserOrg> userOrgList = userOrgMapper.selectList(Wrappers.<SjUserOrg>lambdaQuery()
.in(SjUserOrg::getUserCode, codes)
);
if (userOrgList.isEmpty()) return IWMSResponse.ok(userPage);
// 查询组织
List<String> orgCodes = userOrgList.stream().map(SjUserOrg::getOrgCode).distinct().collect(Collectors.toList());
List<SjOrg> orgList = orgMapper.selectList(Wrappers.<SjOrg>lambdaQuery()
.like(user.getSys() != null, SjOrg::getSys, user.getSys())
.in(SjOrg::getCode, orgCodes)
);
userPage.getRecords().forEach(_user -> {
List<String> userOrgCodes = userOrgList.stream().filter(x -> _user.getCode().equals(x.getUserCode())).map(SjUserOrg::getOrgCode).collect(Collectors.toList());
List<SjOrg> _userOrgList = orgList.stream().filter(org -> userOrgCodes.contains(org.getCode())).collect(Collectors.toList());
_user.setOrgList(_userOrgList);
});
// ——————————注入关联角色————————
// 查询用户关联组织的关联角色
List<String> userCodes = userPage.getRecords().stream().map(SjUser::getCode).collect(Collectors.toList());
List<SjUserRole> userRoleList = userRoleMapper.selectList(Wrappers.<SjUserRole>lambdaQuery()
.in(SjUserRole::getUserCode, userCodes)
);
if (userRoleList.isEmpty()) return IWMSResponse.ok(userPage);
// 查询角色
List<String> roleUuids = userRoleList.stream().map(SjUserRole::getRoleUuid).distinct().collect(Collectors.toList());
List<SjRole> roleList = roleMapper.selectList(Wrappers.<SjRole>lambdaQuery().in(SjRole::getUuid, roleUuids));
for (SjUser _user : userPage.getRecords()) {
List<SjOrg> _orgList = _user.getOrgList();
if (_orgList != null) {
// 拿到属于该用户的全部角色uuid
List<String> userRoleUuids = userRoleList.stream()
.filter(x -> _user.getCode().equals(x.getUserCode()))
.map(SjUserRole::getRoleUuid)
.collect(Collectors.toList());
// 遍历用户组织,拿到属于对应组织的全部角色
for (SjOrg org : _orgList) {
List<SjRole> _userRoleList = roleList.stream()
.filter(role -> userRoleUuids.contains(role.getUuid()))
.filter(role -> org.getCode().equals(role.getOrgCode()))
.collect(Collectors.toList());
org.setRoles(_userRoleList); // 设置对应角色列表
}
}
}
return IWMSResponse.ok(userPage);
}
用户->多组织->多角色
用户->多组织->多角色
因为在组织筛选stream拿到同样的组织都是设置给不同的用户,现实逻辑上这实际上没什么问题,但是代码上还要考虑的是因为给用户的组织是引用同一个变量的,所以在不同的用户角色赋值会导致一起变化,所以解决也非常简单就是在stream筛选后再map new一个新的变量就好了。。。。
bug 出现我还一直以为是角色的问题 真的没想到是组织的问题
修复后
@PostMapping("/getUser")
public IWMSResponse<?> getUser(@RequestBody SjUser user, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "20") Integer size) {
Page<SjUser> userPage = userMapper.selectPage(new Page<>(page, size), Wrappers.<SjUser>lambdaQuery()
.eq(user.getSys() != null, SjUser::getSys, user.getSys())
.like(user.getName() != null, SjUser::getName, user.getName())
.like(user.getMobile() != null, SjUser::getMobile, user.getMobile())
.like(user.getCode() != null, SjUser::getCode, user.getCode())
.orderByDesc(SjUser::getCreatedTime)
);
// ——————————注入关联组织————————
// 查询用户关联组织
List<String> codes = userPage.getRecords().stream().map(SjUser::getCode).collect(Collectors.toList());
List<SjUserOrg> userOrgList = userOrgMapper.selectList(Wrappers.<SjUserOrg>lambdaQuery()
.in(SjUserOrg::getUserCode, codes)
);
if (userOrgList.isEmpty()) return IWMSResponse.ok(userPage);
// 查询组织
List<String> orgCodes = userOrgList.stream().map(SjUserOrg::getOrgCode).distinct().collect(Collectors.toList());
List<SjOrg> orgList = orgMapper.selectList(Wrappers.<SjOrg>lambdaQuery()
.like(user.getSys() != null, SjOrg::getSys, user.getSys())
.in(SjOrg::getCode, orgCodes)
);
userPage.getRecords().forEach(_user -> {
List<String> userOrgCodes = userOrgList.stream().filter(x -> _user.getCode().equals(x.getUserCode())).map(SjUserOrg::getOrgCode).collect(Collectors.toList());
List<SjOrg> _userOrgList = orgList.stream()
.filter(org -> userOrgCodes.contains(org.getCode()))
.map(SjOrg::new) // 深拷贝,不然会设置角色的时候出现错误
.collect(Collectors.toList());
_user.setOrgList(_userOrgList);
});
// ——————————注入关联角色————————
// 查询用户关联组织的关联角色
List<String> userCodes = userPage.getRecords().stream().map(SjUser::getCode).collect(Collectors.toList());
List<SjUserRole> userRoleList = userRoleMapper.selectList(Wrappers.<SjUserRole>lambdaQuery()
.in(SjUserRole::getUserCode, userCodes)
);
if (userRoleList.isEmpty()) return IWMSResponse.ok(userPage);
// 查询角色
List<String> roleUuids = userRoleList.stream().map(SjUserRole::getRoleUuid).distinct().collect(Collectors.toList());
List<SjRole> roleList = roleMapper.selectList(Wrappers.<SjRole>lambdaQuery().in(SjRole::getUuid, roleUuids));
for (SjUser _user : userPage.getRecords()) {
List<SjOrg> _orgList = _user.getOrgList();
if (_orgList != null) {
// 拿到属于该用户的全部角色uuid
List<String> userRoleUuids = userRoleList.stream()
.filter(x -> _user.getCode().equals(x.getUserCode()))
.map(SjUserRole::getRoleUuid)
.collect(Collectors.toList());
// 遍历用户组织,拿到属于对应组织的全部角色
for (SjOrg org : _orgList) {
List<SjRole> _userRoleList = roleList.stream()
.filter(role -> userRoleUuids.contains(role.getUuid()))
.filter(role -> org.getCode().equals(role.getOrgCode()))
.collect(Collectors.toList());
org.setRoles(_userRoleList); // 设置对应角色列表
}
}
}
return IWMSResponse.ok(userPage);
}