package cn.besteam.modules.system.biz; import cn.besteam.common.constant.CannotDeleteRoleEnum; import cn.besteam.common.constant.ErrorCode; import cn.besteam.common.exception.BusinessException; import cn.besteam.modules.shiro.authc.util.EnvUtils; import cn.besteam.modules.system.entity.*; import cn.besteam.modules.system.mapper.SysRoleMapper; import cn.besteam.modules.system.service.*; import cn.besteam.modules.system.vo.BatchReqVO; import cn.besteam.modules.system.vo.SysRoleVO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * @author ltri * @date 2020/1/7 2:30 PM */ @Service public class SysRoleBiz { @Autowired private ISysRoleService roleService; @Autowired private ISysUserRoleService userRoleService; @Autowired private SysRoleMapper roleMapper; @Autowired private ISysRolePermissionService rolePermissionService; @Autowired private ISysUserService sysUserService; @Autowired private ISysPermissionService sysPermissionService; /** * 列表查询 * * @param keyword * @param type * @return */ public List listRole(String keyword, Integer type) { SysUserRole sysUserRole = userRoleService.getOne(new QueryWrapper().lambda().eq(SysUserRole::getUserId, EnvUtils.getUser().getId())); if (sysUserRole == null) { return new ArrayList<>(); } SysPermission sysPermission = null; if(type!=null) { if (type.equals(1) || type.equals(-1)) { sysPermission = sysPermissionService.getOne(new QueryWrapper().lambda().eq(SysPermission::getPerms, "role:operate:list")); } else { sysPermission = sysPermissionService.getOne(new QueryWrapper().lambda().eq(SysPermission::getPerms, "role:user:list")); } if (sysPermission == null) { return new ArrayList<>(); } SysRolePermission rolePermission = rolePermissionService.getOne(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, sysUserRole.getRoleId()).eq(SysRolePermission::getPermissionId, sysPermission.getId())); if (type.equals(1) || type.equals(2)) { if (rolePermission == null) { return new ArrayList<>(); } } } List sysRoleList = roleMapper.listRole(keyword, type); //获取角色id集合 List roleIds = sysRoleList.stream().map(SysRoleVO::getId).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(roleIds)) { //获取存在角色关联的set Set set = userRoleService.list(Wrappers.lambdaQuery().in(SysUserRole::getRoleId, roleIds)).stream().map(SysUserRole::getRoleId).collect(Collectors.toSet()); //返回删除标识符 sysRoleList.forEach(sysRoleVO -> { sysRoleVO.setDelFlag(set.contains(sysRoleVO.getId()) ? 0 : 1); }); } return sysRoleList; } /** * 角色管理-新增/编辑 * * @param dto */ @Transactional(rollbackFor = Exception.class) public void saveOrUpdate(SysRole dto) { List roleTypeList = userRoleService.getRoleTypeList(EnvUtils.getUser().getId()); if (CollectionUtils.isEmpty(roleTypeList)) { throw new BusinessException(ErrorCode.ERR_500, "无操作权限"); } if (!roleTypeList.contains(dto.getType())) { throw new BusinessException(ErrorCode.ERR_500, "无操作权限"); } //新增 if (dto.getId() == null || dto.getId() <= 0) { if (StringUtils.isNotBlank(dto.getRoleName())) { int count = roleService.count(Wrappers.lambdaQuery().eq(SysRole::getRoleName, dto.getRoleName())); if (count > 0) { throw new BusinessException(ErrorCode.ERR_500, "角色名称重复,请重新输入"); } } SysRole sysRole = new SysRole(); BeanUtils.copyProperties(dto, sysRole); roleService.save(sysRole); // SysRolePermission sysRolePermission = new SysRolePermission(sysRole.getId(), 6); rolePermissionService.save(sysRolePermission); } else { SysRole sysRole = roleService.getById(dto.getId()); if (sysRole == null) { throw new BusinessException(ErrorCode.ROLE_NOT_FOUND); } SysRole sysRole1 = roleService.getOne(new QueryWrapper().lambda().eq(SysRole::getRoleName, dto.getRoleName())); if (sysRole1 != null && !sysRole.getId().equals(sysRole1.getId())) { throw new BusinessException(ErrorCode.ERR_500, "角色名称重复,请重新输入"); } if (CannotDeleteRoleEnum.SET.contains(dto.getRoleName())) { throw new BusinessException(ErrorCode.ROLE_CAN_NOT_EDIT); } BeanUtils.copyProperties(dto, sysRole); roleService.updateById(sysRole); } } /** * 通过id删除 * * @param id * @return */ @Transactional(rollbackFor = Exception.class) public boolean deleteRole(String id) { SysRole sysRole = roleService.getById(id); if (sysRole == null) { throw new BusinessException(ErrorCode.ROLE_NOT_FOUND); } if (CannotDeleteRoleEnum.SET.contains(sysRole.getRoleName())) { throw new BusinessException(ErrorCode.ROLE_CAN_NOT_DELETE); } int count = userRoleService.count(Wrappers.lambdaQuery().eq(SysUserRole::getRoleId, id)); if (count > 0) { throw new BusinessException(ErrorCode.ROLE_CAN_NOT_DELETE); } //删除角色和权限关联 rolePermissionService.remove(Wrappers.lambdaQuery().eq(SysRolePermission::getRoleId, id)); //删除角色 return roleService.removeById(id); } /** * 批量删除 * * @param vo * @return */ @Transactional(rollbackFor = Exception.class) public boolean batchDelete(BatchReqVO vo) { if (StringUtils.isEmpty(vo.getIds())) { throw new BusinessException(ErrorCode.SYSTEM_REQUEST_PARAM_ERROR); } List deleteIds = Arrays.asList(vo.getIds().split(",")); List list = roleService.list(Wrappers.lambdaQuery().in(SysRole::getId, deleteIds)); list.forEach(sysRole -> { if (CannotDeleteRoleEnum.SET.contains(sysRole.getRoleName())) { throw new BusinessException(ErrorCode.ROLE_CAN_NOT_DELETE); } }); deleteIds.forEach(i -> { int count = userRoleService.count(Wrappers.lambdaQuery().eq(SysUserRole::getRoleId, i)); if (count > 0) { throw new BusinessException(ErrorCode.ROLE_CAN_NOT_DELETE); } }); //删除角色和权限关联 rolePermissionService.remove(Wrappers.lambdaQuery().in(SysRolePermission::getRoleId, deleteIds)); //删除角色 return roleService.remove(Wrappers.lambdaQuery().in(SysRole::getId, deleteIds)); } public Integer countUserByRole(Integer roleId) { Integer count = 0; List list = userRoleService.list(new QueryWrapper().lambda().eq(SysUserRole::getRoleId, roleId)); for (SysUserRole sysUserRole : list) { SysUser sysUser = sysUserService.getById(sysUserRole.getUserId()); if (sysUser != null && sysUser.getDelFlag().equals("0")) { count++; } } return count; } }