您的位置:首页 > 科技 > 能源 > 湖南郴州市房价_昌大建设地址_河南智能seo快速排名软件_baidu百度

湖南郴州市房价_昌大建设地址_河南智能seo快速排名软件_baidu百度

2025/4/21 22:43:06 来源:https://blog.csdn.net/weixin_46665865/article/details/147275928  浏览:    关键词:湖南郴州市房价_昌大建设地址_河南智能seo快速排名软件_baidu百度
湖南郴州市房价_昌大建设地址_河南智能seo快速排名软件_baidu百度

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) {// 拿到属于该用户的全部角色uuidList<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) {// 拿到属于该用户的全部角色uuidList<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);}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com