RoleServiceImpl.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package com.ruoyi.project.system.role.service;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import java.util.Set;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import com.ruoyi.common.constant.UserConstants;
  10. import com.ruoyi.common.support.Convert;
  11. import com.ruoyi.common.utils.StringUtils;
  12. import com.ruoyi.common.utils.security.ShiroUtils;
  13. import com.ruoyi.project.system.role.domain.Role;
  14. import com.ruoyi.project.system.role.domain.RoleMenu;
  15. import com.ruoyi.project.system.role.mapper.RoleMapper;
  16. import com.ruoyi.project.system.role.mapper.RoleMenuMapper;
  17. import com.ruoyi.project.system.user.mapper.UserRoleMapper;
  18. /**
  19. * 角色 业务层处理
  20. *
  21. * @author ruoyi
  22. */
  23. @Service
  24. public class RoleServiceImpl implements IRoleService
  25. {
  26. @Autowired
  27. private RoleMapper roleMapper;
  28. @Autowired
  29. private RoleMenuMapper roleMenuMapper;
  30. @Autowired
  31. private UserRoleMapper userRoleMapper;
  32. /**
  33. * 根据条件分页查询角色数据
  34. *
  35. * @param role 角色信息
  36. * @return 角色数据集合信息
  37. */
  38. @Override
  39. public List<Role> selectRoleList(Role role)
  40. {
  41. return roleMapper.selectRoleList(role);
  42. }
  43. /**
  44. * 根据用户ID查询权限
  45. *
  46. * @param userId 用户ID
  47. * @return 权限列表
  48. */
  49. @Override
  50. public Set<String> selectRoleKeys(Long userId)
  51. {
  52. List<Role> perms = roleMapper.selectRolesByUserId(userId);
  53. Set<String> permsSet = new HashSet<>();
  54. for (Role perm : perms)
  55. {
  56. if (StringUtils.isNotNull(perms))
  57. {
  58. permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
  59. }
  60. }
  61. return permsSet;
  62. }
  63. /**
  64. * 根据用户ID查询角色
  65. *
  66. * @param userId 用户ID
  67. * @return 角色列表
  68. */
  69. @Override
  70. public List<Role> selectRolesByUserId(Long userId)
  71. {
  72. List<Role> userRoles = roleMapper.selectRolesByUserId(userId);
  73. List<Role> roles = roleMapper.selectRolesAll();
  74. for (Role role : roles)
  75. {
  76. for (Role userRole : userRoles)
  77. {
  78. if (role.getRoleId() == userRole.getRoleId())
  79. {
  80. role.setFlag(true);
  81. break;
  82. }
  83. }
  84. }
  85. return roles;
  86. }
  87. /**
  88. * 查询所有角色
  89. *
  90. * @return 角色列表
  91. */
  92. @Override
  93. public List<Role> selectRoleAll()
  94. {
  95. return roleMapper.selectRolesAll();
  96. }
  97. /**
  98. * 通过角色ID查询角色
  99. *
  100. * @param roleId 角色ID
  101. * @return 角色对象信息
  102. */
  103. @Override
  104. public Role selectRoleById(Long roleId)
  105. {
  106. return roleMapper.selectRoleById(roleId);
  107. }
  108. /**
  109. * 通过角色ID删除角色
  110. *
  111. * @param roleId 角色ID
  112. * @return 结果
  113. */
  114. @Override
  115. public boolean deleteRoleById(Long roleId)
  116. {
  117. return roleMapper.deleteRoleById(roleId) > 0 ? true : false;
  118. }
  119. /**
  120. * 批量删除角色信息
  121. *
  122. * @param ids 需要删除的数据ID
  123. * @throws Exception
  124. */
  125. @Override
  126. public int deleteRoleByIds(String ids) throws Exception
  127. {
  128. Long[] roleIds = Convert.toLongArray(ids);
  129. for (Long roleId : roleIds)
  130. {
  131. Role role = selectRoleById(roleId);
  132. if (countUserRoleByRoleId(roleId) > 0)
  133. {
  134. throw new Exception(String.format("%1$s已分配,不能删除", role.getRoleName()));
  135. }
  136. }
  137. return roleMapper.deleteRoleByIds(roleIds);
  138. }
  139. /**
  140. * 新增保存角色信息
  141. *
  142. * @param role 角色信息
  143. * @return 结果
  144. */
  145. @Override
  146. public int insertRole(Role role)
  147. {
  148. role.setCreateBy(ShiroUtils.getLoginName());
  149. // 新增角色信息
  150. roleMapper.insertRole(role);
  151. ShiroUtils.clearCachedAuthorizationInfo();
  152. return insertRoleMenu(role);
  153. }
  154. /**
  155. * 修改保存角色信息
  156. *
  157. * @param role 角色信息
  158. * @return 结果
  159. */
  160. @Override
  161. public int updateRole(Role role)
  162. {
  163. role.setUpdateBy(ShiroUtils.getLoginName());
  164. // 修改角色信息
  165. roleMapper.updateRole(role);
  166. // 删除角色与菜单关联
  167. roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
  168. ShiroUtils.clearCachedAuthorizationInfo();
  169. return insertRoleMenu(role);
  170. }
  171. /**
  172. * 新增角色菜单信息
  173. *
  174. * @param role 角色对象
  175. */
  176. public int insertRoleMenu(Role role)
  177. {
  178. int rows = 1;
  179. // 新增用户与角色管理
  180. List<RoleMenu> list = new ArrayList<RoleMenu>();
  181. for (Long menuId : role.getMenuIds())
  182. {
  183. RoleMenu rm = new RoleMenu();
  184. rm.setRoleId(role.getRoleId());
  185. rm.setMenuId(menuId);
  186. list.add(rm);
  187. }
  188. if (list.size() > 0)
  189. {
  190. rows = roleMenuMapper.batchRoleMenu(list);
  191. }
  192. return rows;
  193. }
  194. /**
  195. * 校验角色名称是否唯一
  196. *
  197. * @param role 角色信息
  198. * @return 结果
  199. */
  200. @Override
  201. public String checkRoleNameUnique(Role role)
  202. {
  203. Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
  204. Role info = roleMapper.checkRoleNameUnique(role.getRoleName());
  205. if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
  206. {
  207. return UserConstants.ROLE_NAME_NOT_UNIQUE;
  208. }
  209. return UserConstants.ROLE_NAME_UNIQUE;
  210. }
  211. /**
  212. * 通过角色ID查询角色使用数量
  213. *
  214. * @param roleId 角色ID
  215. * @return 结果
  216. */
  217. @Override
  218. public int countUserRoleByRoleId(Long roleId)
  219. {
  220. return userRoleMapper.countUserRoleByRoleId(roleId);
  221. }
  222. }