SysDataScopeServiceImpl.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package com.ruoyi.system.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.convert.Convert;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.ruoyi.common.core.domain.entity.SysDept;
  6. import com.ruoyi.common.helper.DataBaseHelper;
  7. import com.ruoyi.common.utils.StreamUtils;
  8. import com.ruoyi.system.domain.SysRoleDept;
  9. import com.ruoyi.system.mapper.SysDeptMapper;
  10. import com.ruoyi.system.mapper.SysRoleDeptMapper;
  11. import com.ruoyi.system.service.ISysDataScopeService;
  12. import lombok.RequiredArgsConstructor;
  13. import org.springframework.stereotype.Service;
  14. import java.util.List;
  15. /**
  16. * 数据权限 实现
  17. * <p>
  18. * 注意: 此Service内不允许调用标注`数据权限`注解的方法
  19. * 例如: deptMapper.selectList 此 selectList 方法标注了`数据权限`注解 会出现循环解析的问题
  20. *
  21. * @author Lion Li
  22. */
  23. @RequiredArgsConstructor
  24. @Service("sdss")
  25. public class SysDataScopeServiceImpl implements ISysDataScopeService {
  26. private final SysRoleDeptMapper roleDeptMapper;
  27. private final SysDeptMapper deptMapper;
  28. @Override
  29. public String getRoleCustom(Long roleId) {
  30. List<SysRoleDept> list = roleDeptMapper.selectList(
  31. new LambdaQueryWrapper<SysRoleDept>()
  32. .select(SysRoleDept::getDeptId)
  33. .eq(SysRoleDept::getRoleId, roleId));
  34. if (CollUtil.isNotEmpty(list)) {
  35. return StreamUtils.join(list, rd -> Convert.toStr(rd.getDeptId()));
  36. }
  37. return null;
  38. }
  39. @Override
  40. public String getDeptAndChild(Long deptId) {
  41. List<SysDept> deptList = deptMapper.selectList(new LambdaQueryWrapper<SysDept>()
  42. .select(SysDept::getDeptId)
  43. .apply(DataBaseHelper.findInSet(deptId, "ancestors")));
  44. List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId);
  45. ids.add(deptId);
  46. List<SysDept> list = deptMapper.selectList(new LambdaQueryWrapper<SysDept>()
  47. .select(SysDept::getDeptId)
  48. .in(SysDept::getDeptId, ids));
  49. if (CollUtil.isNotEmpty(list)) {
  50. return StreamUtils.join(list, d -> Convert.toStr(d.getDeptId()));
  51. }
  52. return null;
  53. }
  54. }