|
|
@@ -14,6 +14,7 @@ import cn.tr.module.sys.user.enums.RoleEnum;
|
|
|
import cn.tr.module.sys.user.po.SysRolePO;
|
|
|
import cn.tr.module.sys.user.repository.SysRoleRepository;
|
|
|
import cn.tr.module.sys.user.service.ISysMenuService;
|
|
|
+import cn.tr.module.sys.user.service.ISysRoleMenuService;
|
|
|
import cn.tr.module.sys.user.service.ISysRoleService;
|
|
|
import cn.tr.module.sys.user.service.ISysUserRoleService;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
@@ -36,51 +37,19 @@ public class SysRoleServiceImpl implements ISysRoleService {
|
|
|
@Autowired
|
|
|
private SysRoleRepository roleRepository;
|
|
|
|
|
|
- @Autowired
|
|
|
- @Lazy
|
|
|
- private ISysMenuService menuService;
|
|
|
@Autowired
|
|
|
@Lazy
|
|
|
private ISysUserRoleService userRoleService;
|
|
|
|
|
|
- @Autowired
|
|
|
- @Lazy
|
|
|
- private ISysTenantService tenantService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- @Lazy
|
|
|
- private ISysRoleService self;
|
|
|
@Override
|
|
|
public List<SysRoleDTO> selectSysRoleList(SysRoleQueryDTO query) {
|
|
|
return SysRoleMapper.INSTANCE.toSysRoleDTOList(roleRepository.selectList(new LambdaQueryWrapper<SysRolePO>()
|
|
|
.like(StrUtil.isNotEmpty(query.getRoleCode()),SysRolePO::getCode,query.getRoleCode())
|
|
|
.like(StrUtil.isNotEmpty(query.getRoleName()),SysRolePO::getName,query.getRoleName())
|
|
|
- .like(ObjectUtil.isNotNull(query.getDisable()),SysRolePO::getDisable,query.getDisable())
|
|
|
+ .eq(ObjectUtil.isNotNull(query.getDisable()),SysRolePO::getDisable,query.getDisable())
|
|
|
));
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public Set<SysMenuDTO> findUserMenus(String userId){
|
|
|
- List<SysRoleDTO> roles = self.findAllRolesByUserId(userId);
|
|
|
- //判断是否存在管理员账户
|
|
|
- if (CollectionUtil.isEmpty(roles)) {
|
|
|
- return new HashSet<>();
|
|
|
- }
|
|
|
- for (SysRoleDTO role : roles) {
|
|
|
- if(StrUtil.equals(role.getType(),RoleEnum.sys.name())){
|
|
|
- return tenantService.currentTenantMenus();
|
|
|
- }
|
|
|
- }
|
|
|
- return roles.stream()
|
|
|
- .filter(Objects::nonNull)
|
|
|
- .filter(role->Boolean.FALSE.equals(role.getDisable()))
|
|
|
- .map(SysRoleDTO::getId)
|
|
|
- .map(menuService::findAllMenuByRoleId)
|
|
|
- .flatMap(Collection::stream)
|
|
|
- .filter(Objects::nonNull)
|
|
|
- .collect(Collectors.toSet());
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public Collection<SysRoleDTO> findAllSysRoles() {
|
|
|
return SysRoleMapper.INSTANCE.toSysRoleDTOList( roleRepository.selectList(new LambdaQueryWrapper<SysRolePO>()
|
|
|
@@ -98,8 +67,8 @@ public class SysRoleServiceImpl implements ISysRoleService {
|
|
|
public boolean updateSysRoleById(SysRoleDTO source) {
|
|
|
SysRolePO po = SysRoleMapper.INSTANCE.toSysRolePO(source);
|
|
|
validateRoleSource(po);
|
|
|
- Set<String> userIds = userRoleService.findUserByRoleId(source.getId());
|
|
|
- userIds.parallelStream().forEach(self::delUserRoleCache);
|
|
|
+ Set<String> userIds = userRoleService.findUserByRoleId(Collections.singleton(source.getId()));
|
|
|
+ userIds.parallelStream().forEach(userRoleService::delUserRoleCache);
|
|
|
return roleRepository.updateById(po)!=0;
|
|
|
}
|
|
|
|
|
|
@@ -114,26 +83,18 @@ public class SysRoleServiceImpl implements ISysRoleService {
|
|
|
@Override
|
|
|
public int deleteSysRoleByIds(Collection<String> ids) {
|
|
|
List<SysRolePO> roles = roleRepository.selectBatchIds(ids);
|
|
|
- Optional<SysRolePO> adminRole = roles.stream()
|
|
|
- .filter(po->StrUtil.equals(po.getType(), RoleEnum.sys.name()))
|
|
|
- .findFirst();
|
|
|
- if(adminRole.isPresent()){
|
|
|
- throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"无法对系统角色进行操作");
|
|
|
- }
|
|
|
for (SysRolePO role : roles) {
|
|
|
- Set<String> userIds = userRoleService.findUserByRoleId(role.getId());
|
|
|
- if(CollectionUtil.isNotEmpty(userIds)){
|
|
|
- throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("角色编码{%s}已被使用,无法删除",role.getCode()));
|
|
|
+ if (StrUtil.equals(role.getType(), RoleEnum.sys.name())) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"无法对系统角色进行操作");
|
|
|
}
|
|
|
}
|
|
|
+ Set<String> userIds = userRoleService.findUserByRoleId(ids);
|
|
|
+ if(CollectionUtil.isNotEmpty(userIds)){
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所选角色已与用户关联,无法删除");
|
|
|
+ }
|
|
|
return roleRepository.deleteBatchIds(ids);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public List<SysRoleDTO> findAllRolesByUserId(String userId) {
|
|
|
- return SysRoleMapper.INSTANCE.toSysRoleDTOList(roleRepository.findAllRoleByUserId(userId));
|
|
|
- }
|
|
|
-
|
|
|
private void validateRoleSource(SysRolePO source){
|
|
|
SysRolePO role = roleRepository.selectOne(new LambdaQueryWrapper<SysRolePO>()
|
|
|
.eq(SysRolePO::getCode, source.getCode())
|