RoleMenuServiceImpl.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package com.imed.costaccount.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.imed.costaccount.mapper.RoleMenuMapper;
  6. import com.imed.costaccount.model.Menu;
  7. import com.imed.costaccount.model.RoleMenu;
  8. import com.imed.costaccount.model.UserRole;
  9. import com.imed.costaccount.model.dto.RoleMenuDTO;
  10. import com.imed.costaccount.model.vo.CommonSelectVO;
  11. import com.imed.costaccount.model.vo.CommonVO;
  12. import com.imed.costaccount.model.vo.MenuVO;
  13. import com.imed.costaccount.service.MenuService;
  14. import com.imed.costaccount.service.RoleMenuService;
  15. import com.imed.costaccount.utils.BeanUtil;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Propagation;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import java.util.ArrayList;
  20. import java.util.Collection;
  21. import java.util.Collections;
  22. import java.util.List;
  23. import java.util.stream.Collectors;
  24. @Service("roleMenuService")
  25. public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements RoleMenuService {
  26. private final MenuService menuService;
  27. public RoleMenuServiceImpl(MenuService menuService) {
  28. this.menuService = menuService;
  29. }
  30. /**
  31. * 通过roleId 获取对应的菜单列表
  32. *
  33. * @param roleId
  34. * @param hospId
  35. * @return
  36. */
  37. @Override
  38. public List<CommonVO> getMenuByRoleId(Long roleId, Long hospId) {
  39. return baseMapper.getUsersByRoleId(roleId, hospId);
  40. }
  41. /**
  42. * 绑定角色和菜单关系时选择列表可回显
  43. *
  44. * @param roleId 角色id
  45. * @param hospId
  46. * @return CommonSelectVO
  47. */
  48. @Override
  49. public List<CommonSelectVO> roleMenuList(Long roleId, Long hospId) {
  50. List<Menu> list = menuService.list(
  51. new LambdaQueryWrapper<Menu>().eq(Menu::getHospId, hospId)
  52. );
  53. if (CollUtil.isEmpty(list)) {
  54. return Collections.emptyList();
  55. }
  56. List<CommonSelectVO> all = list.stream().map(i -> {
  57. CommonSelectVO commonSelectVO = new CommonSelectVO();
  58. commonSelectVO.setIsSelect(false);
  59. commonSelectVO.setParentId(i.getParentId());
  60. commonSelectVO.setId(i.getMenuId());
  61. commonSelectVO.setName(i.getName());
  62. return commonSelectVO;
  63. }).collect(Collectors.toList());
  64. List<RoleMenu> roleMenus = this.list(
  65. new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId)
  66. );
  67. for (CommonSelectVO commonSelectVO : all) {
  68. for (RoleMenu roleMenu : roleMenus) {
  69. if (roleMenu.getMenuId().equals(commonSelectVO.getId())) {
  70. commonSelectVO.setIsSelect(true);
  71. }
  72. }
  73. }
  74. List<CommonSelectVO> roots = all.stream().filter(i -> i.getParentId() == 0).collect(Collectors.toList());
  75. List<CommonSelectVO> vos = new ArrayList<>();
  76. for (CommonSelectVO root : roots) {
  77. vos.addAll(this.getMenuVO(root, all));
  78. }
  79. return vos;
  80. }
  81. private List<CommonSelectVO> getMenuVO(CommonSelectVO root, List<CommonSelectVO> all) {
  82. List<CommonSelectVO> list = new ArrayList<>();
  83. list.add(root);
  84. for (CommonSelectVO j : all) {
  85. if (j.getParentId().equals(root.getId())) {
  86. List<CommonSelectVO> children = root.getChildren();
  87. if (CollUtil.isEmpty(children)) {
  88. children = new ArrayList<>();
  89. }
  90. children.add(j);
  91. root.setChildren(children);
  92. this.getMenuVO(j, all);
  93. }
  94. }
  95. return list;
  96. }
  97. /**
  98. * 编辑角色和菜单关系
  99. *
  100. * @param roleMenuDTO {@link RoleMenuDTO}
  101. * @param hospId 医院id
  102. */
  103. @Override
  104. @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
  105. public void saveRoleMenu(RoleMenuDTO roleMenuDTO, Long hospId) {
  106. Long roleId = roleMenuDTO.getRoleId();
  107. this.removeById(roleId);
  108. List<Long> menuIds = roleMenuDTO.getMenuIds();
  109. if (CollUtil.isNotEmpty(menuIds)) {
  110. List<RoleMenu> roleMenus = menuIds.stream().map(i -> {
  111. RoleMenu roleMenu = new RoleMenu();
  112. roleMenu.setRoleId(roleId).setMenuId(i).setHospId(hospId);
  113. return roleMenu;
  114. }).collect(Collectors.toList());
  115. this.saveBatch(roleMenus);
  116. }
  117. }
  118. }