UserRoleServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package com.jzg.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import com.jzg.commons.annotation.IgnoreTenant;
  5. import com.jzg.commons.constants.SystemConstants;
  6. import com.jzg.commons.core.base.BaseController;
  7. import com.jzg.commons.core.base.HistoryDataService;
  8. import com.jzg.commons.entity.po.*;
  9. import com.jzg.commons.entity.vo.RolePermissionVo;
  10. import com.jzg.commons.entity.vo.SysRoleDataScopeVo;
  11. import com.jzg.commons.entity.vo.SysRoleVo;
  12. import com.jzg.commons.exception.SystemException;
  13. import com.jzg.commons.util.idgen.IdGenerate;
  14. import com.jzg.mapper.*;
  15. import com.jzg.service.SysSystemService;
  16. import com.jzg.service.UserRoleService;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.annotation.Transactional;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import java.util.Objects;
  23. import java.util.stream.Collectors;
  24. @Service
  25. public class UserRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements UserRoleService, HistoryDataService {
  26. @Autowired
  27. SysSystemService sysSystemService;
  28. @Autowired
  29. SysMenuMapper sysMenuMapper;
  30. @Autowired
  31. SysRolePermsMapper sysRolePermsMapper;
  32. @Autowired
  33. SysUserRoleMapper sysUserRoleMapper;
  34. @Autowired
  35. SysRoleDataScopeMapper sysRoleDataScopeMapper;
  36. @Autowired
  37. SysRoleDataScopeLinkMapper sysRoleDataScopeLinkMapper;
  38. @Autowired
  39. BaseController baseController;
  40. @IgnoreTenant
  41. @Override
  42. public List<RolePermissionVo> getAllRoleMenu() {
  43. List<RolePermissionVo> allRoleMenu = baseMapper.getAllRoleMenu();
  44. return allRoleMenu;
  45. }
  46. @Override
  47. public SysRoleVo roleGet(String roleId) {
  48. String userSystemCode = baseController.getUserSystemCode();
  49. SysRole sysRole = baseMapper.selectOne(new LambdaQueryWrapper<SysRole>()
  50. .eq(SysRole::getId,roleId)
  51. .eq(SysRole::getSystemCode,userSystemCode));
  52. if(Objects.isNull(sysRole)){
  53. throw new SystemException("角色不存在");
  54. }
  55. List<SysRolePerms> sysRolePerms = sysRolePermsMapper.getByRoleIdNew(roleId);
  56. SysRoleVo sysRoleVo = new SysRoleVo(sysRole,sysRolePerms);
  57. //获取角色数据权限
  58. SysRoleDataScope sysRoleDataScope = sysRoleDataScopeMapper.selectOne(new LambdaQueryWrapper<SysRoleDataScope>()
  59. .eq(SysRoleDataScope::getRoleId, roleId));
  60. if(!Objects.isNull(sysRoleDataScope)) {
  61. SysRoleDataScopeVo vo = new SysRoleDataScopeVo();
  62. vo.setDataMark(sysRoleDataScope.getDataMark());
  63. if (!sysRoleDataScope.equals("2")) {
  64. List<SysRoleDataScopeLink> sysRoleDataScopeLinks = sysRoleDataScopeLinkMapper.selectList(new LambdaQueryWrapper<SysRoleDataScopeLink>()
  65. .eq(SysRoleDataScopeLink::getRoleId, roleId));
  66. vo.setDeptIds(sysRoleDataScopeLinks.stream().map(x -> x.getDeptId()).collect(Collectors.toList()));
  67. }
  68. sysRoleVo.setDataScope(vo);
  69. }
  70. return sysRoleVo;
  71. }
  72. @Override
  73. public boolean isExist(String roleName) {
  74. return baseMapper.selectCount(new LambdaQueryWrapper<SysRole>()
  75. .eq(SysRole::getName,roleName)) > 0;
  76. }
  77. @Override
  78. public boolean isExist(String roleName, String id) {
  79. return baseMapper.selectCount(new LambdaQueryWrapper<SysRole>()
  80. .eq(SysRole::getName,roleName)
  81. .ne(SysRole::getId,id)) > 0;
  82. }
  83. @Transactional
  84. @Override
  85. public boolean roleAdd(SysRoleVo sysRoleVo) {
  86. sysRoleVo.setId(IdGenerate.nextId());
  87. SysRole sysRole = sysRoleVo.getSysRole();
  88. List<SysRolePerms> sysRolePermsList = new ArrayList<>();
  89. sysRoleVo.getPerms().forEach(item->{
  90. SysRolePerms perms = new SysRolePerms();
  91. perms.setId(IdGenerate.nextId());
  92. perms.setRoleId(sysRole.getId());
  93. perms.setPermsId(item.getId());
  94. perms.setPerms(item.getAuth());
  95. sysRolePermsList.add(perms);
  96. });
  97. SysRoleDataScope sysRoleDataScope = new SysRoleDataScope();
  98. sysRoleDataScope.setRoleId(sysRole.getId());
  99. if(Objects.nonNull(sysRoleVo.getDataScope())) {
  100. sysRoleDataScope.setDataMark(sysRoleVo.getDataScope().getDataMark());
  101. sysRoleDataScopeMapper.insert(sysRoleDataScope);
  102. if (sysRoleVo.getDataScope().getDataMark().equals("2") || sysRoleVo.getDataScope().getDataMark().equals("1")) {
  103. List<SysRoleDataScopeLink> sysRoleDataScopeLinks = new ArrayList<>();
  104. if (!Objects.isNull(sysRoleVo.getDataScope().getDeptIds())) {
  105. if (!sysRoleVo.getDataScope().getDeptIds().isEmpty()) {
  106. sysRoleVo.getDataScope().getDeptIds().forEach(item -> {
  107. SysRoleDataScopeLink sysRoleDataScopeLink = new SysRoleDataScopeLink();
  108. sysRoleDataScopeLink.setId(IdGenerate.nextId());
  109. sysRoleDataScopeLink.setRoleId(sysRole.getId());
  110. sysRoleDataScopeLink.setDeptId(item);
  111. sysRoleDataScopeLinks.add(sysRoleDataScopeLink);
  112. });
  113. }
  114. }
  115. sysRoleDataScopeLinkMapper.insert(sysRoleDataScopeLinks);
  116. }
  117. }
  118. if(sysRolePermsMapper.insert(sysRolePermsList).stream().count() > 0 && baseMapper.insert(sysRole) > 0){
  119. return true;
  120. }
  121. return false;
  122. }
  123. @Transactional
  124. @Override
  125. public boolean roleUpdate(SysRoleVo sysRoleVo) {
  126. SysRole sysRole = sysRoleVo.getSysRole();
  127. List<SysRolePerms> sysRolePermsList = new ArrayList<>();
  128. sysRoleVo.getPerms().forEach(item->{
  129. SysRolePerms perms = new SysRolePerms();
  130. perms.setId(IdGenerate.nextId());
  131. perms.setRoleId(sysRole.getId());
  132. perms.setPermsId(item.getId());
  133. perms.setPerms(item.getAuth());
  134. perms.setHalfChecked(item.getHalfChecked());
  135. sysRolePermsList.add(perms);
  136. });
  137. baseMapper.updateById(sysRole);
  138. sysRolePermsMapper.delete(new LambdaQueryWrapper<SysRolePerms>()
  139. .eq(SysRolePerms::getRoleId,sysRole.getId()));
  140. //更新用户数据权限
  141. sysRoleDataScopeMapper.delete(new LambdaQueryWrapper<SysRoleDataScope>()
  142. .eq(SysRoleDataScope::getRoleId,sysRole.getId()));
  143. sysRoleDataScopeLinkMapper.delete(new LambdaQueryWrapper<SysRoleDataScopeLink>()
  144. .eq(SysRoleDataScopeLink::getRoleId,sysRole.getId()));
  145. //保存角色数据权限 如果是平台则直接跳过
  146. if(!baseController.getUserSystemCode().equals(SystemConstants.SYSTEM_PLATFORM.getCode())) {
  147. SysRoleDataScope sysRoleDataScope = new SysRoleDataScope();
  148. sysRoleDataScope.setId(IdGenerate.nextId());
  149. sysRoleDataScope.setRoleId(sysRole.getId());
  150. sysRoleDataScope.setDataMark(sysRoleVo.getDataScope().getDataMark());
  151. sysRoleDataScopeMapper.insert(sysRoleDataScope);
  152. if (sysRoleDataScope.getDataMark().equals("2") || sysRoleDataScope.getDataMark().equals("1")) {
  153. List<SysRoleDataScopeLink> sysRoleDataScopeLinks = new ArrayList<>();
  154. if(!Objects.isNull(sysRoleVo.getDataScope().getDeptIds())) {
  155. if (!sysRoleVo.getDataScope().getDeptIds().isEmpty()) {
  156. sysRoleVo.getDataScope().getDeptIds().forEach(item -> {
  157. SysRoleDataScopeLink sysRoleDataScopeLink = new SysRoleDataScopeLink();
  158. sysRoleDataScopeLink.setId(IdGenerate.nextId());
  159. sysRoleDataScopeLink.setRoleId(sysRole.getId());
  160. sysRoleDataScopeLink.setDeptId(item);
  161. sysRoleDataScopeLinks.add(sysRoleDataScopeLink);
  162. });
  163. }
  164. }
  165. sysRoleDataScopeLinkMapper.insert(sysRoleDataScopeLinks);
  166. }else if (sysRoleDataScope.getDataMark().equals("3")){
  167. List<SysRoleDataScopeLink> sysRoleDataScopeLinks = new ArrayList<>();
  168. sysRoleVo.getDataScope().getDeptIds().forEach(item->{
  169. SysRoleDataScopeLink sysRoleDataScopeLink = new SysRoleDataScopeLink();
  170. sysRoleDataScopeLink.setId(IdGenerate.nextId());
  171. sysRoleDataScopeLink.setRoleId(sysRole.getId());
  172. sysRoleDataScopeLink.setDeptId(item);
  173. sysRoleDataScopeLinks.add(sysRoleDataScopeLink);
  174. });
  175. sysRoleDataScopeLinkMapper.insert(sysRoleDataScopeLinks);
  176. }
  177. }
  178. if(sysRolePermsMapper.insert(sysRolePermsList).stream().count() > 0 && baseMapper.updateById(sysRole) > 0){
  179. return true;
  180. }
  181. return false;
  182. }
  183. @Override
  184. public boolean roleDelete(SysRoleVo sysRoleVo) {
  185. if(baseMapper.selectCount(new LambdaQueryWrapper<SysRole>()
  186. .eq(SysRole::getId, sysRoleVo.getId())) == 0){
  187. throw new SystemException("角色信息不存在");
  188. }
  189. if(sysRolePermsMapper.delete(new LambdaQueryWrapper<SysRolePerms>()
  190. .eq(SysRolePerms::getRoleId, sysRoleVo.getId())) > 0 && baseMapper.deleteById(sysRoleVo.getId()) > 0){
  191. return true;
  192. }
  193. return false;
  194. }
  195. @Override
  196. public boolean roleDeleteValid(SysRoleVo sysRoleVo) {
  197. if(sysRoleVo.getId().equals("admin")){
  198. throw new SystemException("admin角色无法删除");
  199. }
  200. Long count = baseMapper.selectCount(new LambdaQueryWrapper<SysRole>()
  201. .eq(SysRole::getId, sysRoleVo.getId())
  202. );
  203. if(count <= 0){
  204. throw new SystemException("找不到该角色");
  205. }
  206. count = sysUserRoleMapper.selectCount(new LambdaQueryWrapper<SysUserRole>()
  207. .eq(SysUserRole::getRoleId, sysRoleVo.getId()));
  208. if(count > 0){
  209. return false;
  210. }
  211. return true;
  212. }
  213. @Override
  214. public Object getHistoryData(String id) {
  215. SysRole sysRole = baseMapper.selectById(id);
  216. return sysRole;
  217. }
  218. }