SysRoleService.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package com.iden.bms.service;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.iden.common.entity.IdenRoleMenuRel;
  8. import com.iden.common.entity.IdenSysMenu;
  9. import com.iden.common.entity.IdenSysRole;
  10. import com.iden.common.enums.IsLeafEnum;
  11. import com.iden.common.exception.BDException;
  12. import com.iden.common.service.IdenRoleMenuRelService;
  13. import com.iden.common.service.IdenSysMenuService;
  14. import com.iden.common.service.IdenSysRoleService;
  15. import com.iden.common.util.MyBeanUtils;
  16. import com.iden.common.vo.SysMenuVO;
  17. import com.iden.common.vo.SysRoleVO;
  18. import com.iden.common.vo.PageReqVO;
  19. import com.iden.common.vo.UserLoginedConvertVO;
  20. import org.springframework.beans.BeanUtils;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import javax.annotation.Resource;
  24. import java.util.ArrayList;
  25. import java.util.Date;
  26. import java.util.List;
  27. /**
  28. *
  29. * @author makejava
  30. * @since 2021-05-21 00:08:38
  31. */
  32. @Service
  33. public class SysRoleService {
  34. @Resource
  35. private IdenSysRoleService idenSysRoleService;
  36. @Resource
  37. private IdenRoleMenuRelService idenRoleMenuRelService;
  38. @Resource
  39. private IdenSysMenuService idenSysMenuService;
  40. /**
  41. * 查询角色列表
  42. * @return
  43. */
  44. public IPage<SysRoleVO> listSysRole(UserLoginedConvertVO loginUser, PageReqVO pageReqVo) {
  45. IPage<IdenSysRole> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
  46. QueryWrapper<IdenSysRole> queryWrapper = new QueryWrapper<>();
  47. queryWrapper.lambda().orderByAsc(IdenSysRole::getCode);
  48. IPage<IdenSysRole> pageRes = this.idenSysRoleService.page(page, queryWrapper);
  49. IPage<SysRoleVO> results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal());
  50. if(CollUtil.isNotEmpty(pageRes.getRecords())){
  51. List<SysRoleVO> list = new ArrayList<>();
  52. pageRes.getRecords().forEach(item -> {
  53. SysRoleVO resVO = new SysRoleVO();
  54. BeanUtils.copyProperties(item,resVO);
  55. list.add(resVO);
  56. });
  57. results.setRecords(list);
  58. }
  59. return results;
  60. }
  61. /**
  62. * 删除角色
  63. * @param id
  64. * @return
  65. */
  66. public boolean deleteById(Long id){
  67. return this.idenSysRoleService.removeById(id);
  68. }
  69. /**
  70. * 详情
  71. * @param id
  72. * @return
  73. */
  74. public SysRoleVO getSysRoleById(Long id){
  75. IdenSysRole idenSysRole = this.idenSysRoleService.getById(id);
  76. if (idenSysRole!=null){
  77. SysRoleVO resVO = new SysRoleVO();
  78. BeanUtil.copyProperties(idenSysRole,resVO);
  79. return resVO;
  80. }
  81. return null;
  82. }
  83. /**
  84. * 保存角色
  85. * @param vo
  86. */
  87. @Transactional(rollbackFor = Exception.class)
  88. public int createSysRole(SysRoleVO vo, UserLoginedConvertVO loginUser){
  89. QueryWrapper<IdenSysRole> queryWrapper = new QueryWrapper<>();
  90. queryWrapper.lambda().eq(IdenSysRole::getName,vo.getName());
  91. if(idenSysRoleService.count(queryWrapper) > 0){
  92. return 1;
  93. }
  94. QueryWrapper<IdenSysRole> queryWrapper2 = new QueryWrapper<>();
  95. queryWrapper2.lambda().eq(IdenSysRole::getCode,vo.getCode());
  96. if(idenSysRoleService.count(queryWrapper2) > 0){
  97. return 2;
  98. }
  99. //保存角色
  100. IdenSysRole idenSysRole = new IdenSysRole();
  101. BeanUtil.copyProperties(vo,idenSysRole);
  102. idenSysRole.setCreateTime(new Date());
  103. this.idenSysRoleService.save(idenSysRole);
  104. return 0;
  105. }
  106. /**
  107. * 修改角色
  108. * @param vo
  109. */
  110. @Transactional(rollbackFor = Exception.class)
  111. public void updateSysRole(SysRoleVO vo){
  112. //保存角色
  113. IdenSysRole idenSysRole = new IdenSysRole();
  114. BeanUtil.copyProperties(vo,idenSysRole);
  115. idenSysRole.setModifyTime(new Date());
  116. this.idenSysRoleService.updateById(idenSysRole);
  117. }
  118. /**
  119. * 启用停用角色
  120. * @param vo
  121. */
  122. @Transactional(rollbackFor = Exception.class)
  123. public void invalidSysRole(SysRoleVO vo) throws BDException {
  124. IdenSysRole idenSysRole = new IdenSysRole();
  125. BeanUtil.copyProperties(vo, idenSysRole);
  126. if(!this.idenSysRoleService.updateById(idenSysRole)){
  127. throw new BDException("操作失败!");
  128. }
  129. }
  130. /**
  131. * 保存角色拥有的菜单
  132. * @param vo
  133. */
  134. @Transactional(rollbackFor = Exception.class)
  135. public void saveSysRoleMenu(UserLoginedConvertVO loginUser,SysRoleVO vo) throws BDException {
  136. List<Long> hasLeafSysMenuIdList = vo.getHasLeafSysMenuIdList();
  137. if(CollUtil.isEmpty(hasLeafSysMenuIdList) || vo.getId() == null){
  138. throw new BDException("参数不能是空的");
  139. }
  140. QueryWrapper<IdenRoleMenuRel> queryWrapper0 = new QueryWrapper<>();
  141. queryWrapper0.lambda().eq(IdenRoleMenuRel::getRoleId, vo.getId());
  142. //获取该角色拥有的所有菜单关系,包括非叶子菜单关系
  143. List<IdenRoleMenuRel> hasRoleMenuRelDb = idenRoleMenuRelService.list(queryWrapper0);
  144. if (CollUtil.isNotEmpty(hasRoleMenuRelDb)) {
  145. //删除数据库里的关系列表,包括非叶子菜单关系,重新添加关系
  146. for(IdenRoleMenuRel idenRoleMenuRel : hasRoleMenuRelDb){
  147. idenRoleMenuRelService.removeById(idenRoleMenuRel.getId());
  148. }
  149. }
  150. for(Long id : hasLeafSysMenuIdList) {
  151. IdenRoleMenuRel idenRoleMenuRel = new IdenRoleMenuRel();
  152. idenRoleMenuRel.setMenuId(id);
  153. idenRoleMenuRel.setRoleId(vo.getId());
  154. idenRoleMenuRelService.save(idenRoleMenuRel);
  155. //保存父菜单关系
  156. saveParentIdenRoleMenuRel(vo.getId(),id);
  157. }
  158. }
  159. private void saveParentIdenRoleMenuRel(Long roleId, Long leafMenuId) throws BDException{
  160. IdenSysMenu leafMenu = this.idenSysMenuService.getById(leafMenuId);
  161. Long pid = leafMenu.getPid();
  162. if( pid == -1L) {
  163. return;
  164. }
  165. IdenSysMenu leafMenuParent = this.idenSysMenuService.getById(leafMenuId);
  166. if (leafMenuParent == null){
  167. return;
  168. }
  169. IdenRoleMenuRel idenRoleMenuRel = new IdenRoleMenuRel();
  170. idenRoleMenuRel.setMenuId(pid);
  171. idenRoleMenuRel.setRoleId(roleId);
  172. idenRoleMenuRelService.save(idenRoleMenuRel);
  173. saveParentIdenRoleMenuRel(roleId,pid);
  174. }
  175. public List<SysMenuVO> listHasLeafMenu(UserLoginedConvertVO loginUser, Long id){
  176. QueryWrapper<IdenRoleMenuRel> queryWrapper0 = new QueryWrapper<>();
  177. queryWrapper0.lambda().eq(IdenRoleMenuRel::getRoleId, id);
  178. List<IdenRoleMenuRel> hasList = idenRoleMenuRelService.list(queryWrapper0);
  179. List<Long> hasMenuIds = new ArrayList<>();
  180. if(CollUtil.isNotEmpty(hasList)){
  181. hasList.forEach(item ->{
  182. hasMenuIds.add(item.getMenuId());
  183. } );
  184. }
  185. QueryWrapper<IdenSysMenu> queryWrapper = new QueryWrapper<>();
  186. queryWrapper.lambda().eq(IdenSysMenu::getIsLeaf, IsLeafEnum.YES.getValue()).in(IdenSysMenu::getId,hasMenuIds);
  187. List<IdenSysMenu> list = idenSysMenuService.list(queryWrapper);
  188. List<SysMenuVO> listSysMenuVO = new ArrayList<>();
  189. if (CollUtil.isNotEmpty(list)){
  190. list.forEach(item ->{
  191. SysMenuVO vo = new SysMenuVO();
  192. BeanUtil.copyProperties(item,vo);
  193. vo.setIsLeafName(IsLeafEnum.getValueToName(vo.getIsLeaf()));
  194. listSysMenuVO.add(vo);
  195. });
  196. }
  197. return listSysMenuVO;
  198. }
  199. public List<SysMenuVO> listNoHasLeafMenu(UserLoginedConvertVO loginUser,Long id){
  200. List<SysMenuVO> hasSysMenuVOList = listHasLeafMenu(loginUser,id);
  201. List<Long> hasMenuIds = new ArrayList<>();
  202. if(CollUtil.isNotEmpty(hasSysMenuVOList)){
  203. hasSysMenuVOList.forEach(item ->{
  204. hasMenuIds.add(item.getId());
  205. } );
  206. }
  207. QueryWrapper<IdenSysMenu> queryWrapper = new QueryWrapper<>();
  208. queryWrapper.lambda().eq(IdenSysMenu::getIsLeaf, IsLeafEnum.YES.getValue()).notIn(IdenSysMenu::getId,hasMenuIds);
  209. List<IdenSysMenu> list = idenSysMenuService.list(queryWrapper);
  210. List<SysMenuVO> listSysMenuVO = new ArrayList<>();
  211. if (CollUtil.isNotEmpty(list)){
  212. list.forEach(item ->{
  213. SysMenuVO vo = new SysMenuVO();
  214. BeanUtil.copyProperties(item,vo);
  215. vo.setIsLeafName(IsLeafEnum.getValueToName(vo.getIsLeaf()));
  216. listSysMenuVO.add(vo);
  217. });
  218. }
  219. return listSysMenuVO;
  220. }
  221. }