123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- package com.iden.bms.service;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.collection.CollUtil;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.iden.common.entity.IdenRoleMenuRel;
- import com.iden.common.entity.IdenSysMenu;
- import com.iden.common.entity.IdenSysRole;
- import com.iden.common.enums.IsLeafEnum;
- import com.iden.common.exception.BDException;
- import com.iden.common.service.IdenRoleMenuRelService;
- import com.iden.common.service.IdenSysMenuService;
- import com.iden.common.service.IdenSysRoleService;
- import com.iden.common.util.MyBeanUtils;
- import com.iden.common.vo.SysMenuVO;
- import com.iden.common.vo.SysRoleVO;
- import com.iden.common.vo.PageReqVO;
- import com.iden.common.vo.UserLoginedConvertVO;
- import org.springframework.beans.BeanUtils;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- /**
- *
- * @author makejava
- * @since 2021-05-21 00:08:38
- */
- @Service
- public class SysRoleService {
- @Resource
- private IdenSysRoleService idenSysRoleService;
- @Resource
- private IdenRoleMenuRelService idenRoleMenuRelService;
- @Resource
- private IdenSysMenuService idenSysMenuService;
- /**
- * 查询角色列表
- * @return
- */
- public IPage<SysRoleVO> listSysRole(UserLoginedConvertVO loginUser, PageReqVO pageReqVo) {
- IPage<IdenSysRole> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
- QueryWrapper<IdenSysRole> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().orderByAsc(IdenSysRole::getCode);
- IPage<IdenSysRole> pageRes = this.idenSysRoleService.page(page, queryWrapper);
- IPage<SysRoleVO> results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal());
- if(CollUtil.isNotEmpty(pageRes.getRecords())){
- List<SysRoleVO> list = new ArrayList<>();
- pageRes.getRecords().forEach(item -> {
- SysRoleVO resVO = new SysRoleVO();
- BeanUtils.copyProperties(item,resVO);
- list.add(resVO);
- });
- results.setRecords(list);
- }
- return results;
- }
- /**
- * 删除角色
- * @param id
- * @return
- */
- public boolean deleteById(Long id){
- return this.idenSysRoleService.removeById(id);
- }
- /**
- * 详情
- * @param id
- * @return
- */
- public SysRoleVO getSysRoleById(Long id){
- IdenSysRole idenSysRole = this.idenSysRoleService.getById(id);
- if (idenSysRole!=null){
- SysRoleVO resVO = new SysRoleVO();
- BeanUtil.copyProperties(idenSysRole,resVO);
- return resVO;
- }
- return null;
- }
- /**
- * 保存角色
- * @param vo
- */
- @Transactional(rollbackFor = Exception.class)
- public int createSysRole(SysRoleVO vo, UserLoginedConvertVO loginUser){
- QueryWrapper<IdenSysRole> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(IdenSysRole::getName,vo.getName());
- if(idenSysRoleService.count(queryWrapper) > 0){
- return 1;
- }
- QueryWrapper<IdenSysRole> queryWrapper2 = new QueryWrapper<>();
- queryWrapper2.lambda().eq(IdenSysRole::getCode,vo.getCode());
- if(idenSysRoleService.count(queryWrapper2) > 0){
- return 2;
- }
- //保存角色
- IdenSysRole idenSysRole = new IdenSysRole();
- BeanUtil.copyProperties(vo,idenSysRole);
- idenSysRole.setCreateTime(new Date());
- this.idenSysRoleService.save(idenSysRole);
- return 0;
- }
- /**
- * 修改角色
- * @param vo
- */
- @Transactional(rollbackFor = Exception.class)
- public void updateSysRole(SysRoleVO vo){
- //保存角色
- IdenSysRole idenSysRole = new IdenSysRole();
- BeanUtil.copyProperties(vo,idenSysRole);
- idenSysRole.setModifyTime(new Date());
- this.idenSysRoleService.updateById(idenSysRole);
- }
- /**
- * 启用停用角色
- * @param vo
- */
- @Transactional(rollbackFor = Exception.class)
- public void invalidSysRole(SysRoleVO vo) throws BDException {
- IdenSysRole idenSysRole = new IdenSysRole();
- BeanUtil.copyProperties(vo, idenSysRole);
- if(!this.idenSysRoleService.updateById(idenSysRole)){
- throw new BDException("操作失败!");
- }
- }
- /**
- * 保存角色拥有的菜单
- * @param vo
- */
- @Transactional(rollbackFor = Exception.class)
- public void saveSysRoleMenu(UserLoginedConvertVO loginUser,SysRoleVO vo) throws BDException {
- List<Long> hasLeafSysMenuIdList = vo.getHasLeafSysMenuIdList();
- if(CollUtil.isEmpty(hasLeafSysMenuIdList) || vo.getId() == null){
- throw new BDException("参数不能是空的");
- }
- QueryWrapper<IdenRoleMenuRel> queryWrapper0 = new QueryWrapper<>();
- queryWrapper0.lambda().eq(IdenRoleMenuRel::getRoleId, vo.getId());
- //获取该角色拥有的所有菜单关系,包括非叶子菜单关系
- List<IdenRoleMenuRel> hasRoleMenuRelDb = idenRoleMenuRelService.list(queryWrapper0);
- if (CollUtil.isNotEmpty(hasRoleMenuRelDb)) {
- //删除数据库里的关系列表,包括非叶子菜单关系,重新添加关系
- for(IdenRoleMenuRel idenRoleMenuRel : hasRoleMenuRelDb){
- idenRoleMenuRelService.removeById(idenRoleMenuRel.getId());
- }
- }
- for(Long id : hasLeafSysMenuIdList) {
- IdenRoleMenuRel idenRoleMenuRel = new IdenRoleMenuRel();
- idenRoleMenuRel.setMenuId(id);
- idenRoleMenuRel.setRoleId(vo.getId());
- idenRoleMenuRelService.save(idenRoleMenuRel);
- //保存父菜单关系
- saveParentIdenRoleMenuRel(vo.getId(),id);
- }
- }
- private void saveParentIdenRoleMenuRel(Long roleId, Long leafMenuId) throws BDException{
- IdenSysMenu leafMenu = this.idenSysMenuService.getById(leafMenuId);
- Long pid = leafMenu.getPid();
- if( pid == -1L) {
- return;
- }
- IdenSysMenu leafMenuParent = this.idenSysMenuService.getById(leafMenuId);
- if (leafMenuParent == null){
- return;
- }
- IdenRoleMenuRel idenRoleMenuRel = new IdenRoleMenuRel();
- idenRoleMenuRel.setMenuId(pid);
- idenRoleMenuRel.setRoleId(roleId);
- idenRoleMenuRelService.save(idenRoleMenuRel);
- saveParentIdenRoleMenuRel(roleId,pid);
- }
- public List<SysMenuVO> listHasLeafMenu(UserLoginedConvertVO loginUser, Long id){
- QueryWrapper<IdenRoleMenuRel> queryWrapper0 = new QueryWrapper<>();
- queryWrapper0.lambda().eq(IdenRoleMenuRel::getRoleId, id);
- List<IdenRoleMenuRel> hasList = idenRoleMenuRelService.list(queryWrapper0);
- List<Long> hasMenuIds = new ArrayList<>();
- if(CollUtil.isNotEmpty(hasList)){
- hasList.forEach(item ->{
- hasMenuIds.add(item.getMenuId());
- } );
- }
- QueryWrapper<IdenSysMenu> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(IdenSysMenu::getIsLeaf, IsLeafEnum.YES.getValue()).in(IdenSysMenu::getId,hasMenuIds);
- List<IdenSysMenu> list = idenSysMenuService.list(queryWrapper);
- List<SysMenuVO> listSysMenuVO = new ArrayList<>();
- if (CollUtil.isNotEmpty(list)){
- list.forEach(item ->{
- SysMenuVO vo = new SysMenuVO();
- BeanUtil.copyProperties(item,vo);
- vo.setIsLeafName(IsLeafEnum.getValueToName(vo.getIsLeaf()));
- listSysMenuVO.add(vo);
- });
- }
- return listSysMenuVO;
- }
- public List<SysMenuVO> listNoHasLeafMenu(UserLoginedConvertVO loginUser,Long id){
- List<SysMenuVO> hasSysMenuVOList = listHasLeafMenu(loginUser,id);
- List<Long> hasMenuIds = new ArrayList<>();
- if(CollUtil.isNotEmpty(hasSysMenuVOList)){
- hasSysMenuVOList.forEach(item ->{
- hasMenuIds.add(item.getId());
- } );
- }
- QueryWrapper<IdenSysMenu> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(IdenSysMenu::getIsLeaf, IsLeafEnum.YES.getValue()).notIn(IdenSysMenu::getId,hasMenuIds);
- List<IdenSysMenu> list = idenSysMenuService.list(queryWrapper);
- List<SysMenuVO> listSysMenuVO = new ArrayList<>();
- if (CollUtil.isNotEmpty(list)){
- list.forEach(item ->{
- SysMenuVO vo = new SysMenuVO();
- BeanUtil.copyProperties(item,vo);
- vo.setIsLeafName(IsLeafEnum.getValueToName(vo.getIsLeaf()));
- listSysMenuVO.add(vo);
- });
- }
- return listSysMenuVO;
- }
- }
|