SysDeptDataImpl.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package cc.iotkit.data.service;
  2. import cc.iotkit.common.constant.GlobalConstants;
  3. import cc.iotkit.common.constant.UserConstants;
  4. import cc.iotkit.common.redis.utils.RedisUtils;
  5. import cc.iotkit.common.satoken.utils.LoginHelper;
  6. import cc.iotkit.common.tenant.helper.TenantHelper;
  7. import cc.iotkit.common.utils.MapstructUtils;
  8. import cc.iotkit.common.utils.StringUtils;
  9. import cc.iotkit.data.dao.IJPACommData;
  10. import cc.iotkit.data.dao.SysDeptRepository;
  11. import cc.iotkit.data.model.TbSysDept;
  12. import cc.iotkit.data.system.ISysDeptData;
  13. import cc.iotkit.data.util.PredicateBuilder;
  14. import cc.iotkit.model.system.SysDept;
  15. import cn.hutool.core.collection.CollectionUtil;
  16. import cn.hutool.core.util.ObjectUtil;
  17. import com.querydsl.jpa.impl.JPAQueryFactory;
  18. import lombok.RequiredArgsConstructor;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.context.annotation.Primary;
  21. import org.springframework.data.jpa.repository.JpaRepository;
  22. import org.springframework.stereotype.Service;
  23. import java.util.ArrayList;
  24. import java.util.Arrays;
  25. import java.util.Collections;
  26. import java.util.List;
  27. import java.util.stream.Collectors;
  28. import java.util.stream.StreamSupport;
  29. import static cc.iotkit.data.model.QTbSysDept.tbSysDept;
  30. import static cc.iotkit.data.model.QTbSysRoleDept.tbSysRoleDept;
  31. /**
  32. * @Author:tfd
  33. * @Date:2023/5/30 13:43
  34. */
  35. @Primary
  36. @Service
  37. @RequiredArgsConstructor
  38. public class SysDeptDataImpl implements ISysDeptData, IJPACommData<SysDept, Long> {
  39. @Autowired
  40. private SysDeptRepository deptRepository;
  41. private final JPAQueryFactory jpaQueryFactory;
  42. @Override
  43. public JpaRepository getBaseRepository() {
  44. return deptRepository;
  45. }
  46. @Override
  47. public Class getJpaRepositoryClass() {
  48. return TbSysDept.class;
  49. }
  50. @Override
  51. public Class getTClass() {
  52. return SysDept.class;
  53. }
  54. @Override
  55. public List<SysDept> findDepts(SysDept dept) {
  56. PredicateBuilder predicateBuilder = PredicateBuilder.instance()
  57. .and(ObjectUtil.isNotNull(dept.getId()), () -> tbSysDept.id.eq(dept.getId()))
  58. .and(ObjectUtil.isNotNull(dept.getParentId()), () -> tbSysDept.parentId.eq(dept.getParentId()))
  59. .and(StringUtils.isNotEmpty(dept.getDeptName()), () -> tbSysDept.deptName.like("%"+dept.getDeptName()+"%"))
  60. .and(StringUtils.isNotEmpty(dept.getTenantId()), () -> tbSysDept.tenantId.eq(dept.getTenantId()))
  61. .and(StringUtils.isNotEmpty(dept.getStatus()), () -> tbSysDept.status.eq(dept.getStatus()));
  62. checkDataPermission(predicateBuilder, TenantHelper.getTenantId());
  63. return MapstructUtils.convert(StreamSupport.stream(deptRepository.findAll(predicateBuilder.build()).spliterator(), false).collect(Collectors.toList()), SysDept.class);
  64. }
  65. @Override
  66. public List<SysDept> findByRoleId(Long roleId) {
  67. List<TbSysDept> list = jpaQueryFactory.select(tbSysDept).from(tbSysDept).leftJoin(tbSysRoleDept).on(tbSysDept.id.eq(tbSysRoleDept.deptId))
  68. .where(tbSysRoleDept.roleId.eq(roleId)).orderBy(tbSysDept.parentId.desc(), tbSysDept.orderNum.desc()).fetch();
  69. return MapstructUtils.convert(list, SysDept.class);
  70. }
  71. @Override
  72. public long countByParentId(Long parentId) {
  73. return jpaQueryFactory.select(tbSysDept.id.count()).from(tbSysDept).where(tbSysDept.parentId.eq(parentId)).fetchOne();
  74. }
  75. @Override
  76. public List<SysDept> findByDeptId(Long deptId) {
  77. return MapstructUtils.convert(deptRepository.findAll().stream().filter(o -> o.getAncestors() != null && o.getAncestors().contains(deptId.toString()))
  78. .collect(Collectors.toList()), SysDept.class);
  79. }
  80. @Override
  81. public boolean checkDeptNameUnique(String deptName, Long parentId, Long deptId) {
  82. PredicateBuilder predicateBuilder = PredicateBuilder.instance().and(tbSysDept.deptName.eq(deptName))
  83. .and(tbSysDept.parentId.eq(parentId));
  84. if (ObjectUtil.isNotNull(deptId)) {
  85. predicateBuilder.and(tbSysDept.id.ne(deptId));
  86. }
  87. Long count = jpaQueryFactory.select(tbSysDept.id.count())
  88. .from(tbSysDept)
  89. .where(predicateBuilder.build())
  90. .fetchOne();
  91. return count == 0;
  92. }
  93. @Override
  94. public long selectNormalChildrenDeptById(Long deptId) {
  95. PredicateBuilder predicateBuilder = PredicateBuilder.instance().and(tbSysDept.status.eq(UserConstants.DEPT_NORMAL));
  96. return jpaQueryFactory.select(tbSysDept.ancestors).where(predicateBuilder.build()).fetch().stream().filter(o -> o.indexOf(deptId.toString()) != -1).count();
  97. }
  98. private void checkDataPermission(PredicateBuilder predicateBuilder, String tenantId){
  99. // Long deptId = LoginHelper.getDeptId();
  100. // List<Long> deptList = new ArrayList<>();
  101. // if(ObjectUtil.isNotNull(deptId)){
  102. // String ChildDept = RedisUtils.getCacheObject(GlobalConstants.DEPT_CHILD_PREFIX+tenantId+":"+LoginHelper.getDeptId());
  103. // if(StringUtils.isNotEmpty(ChildDept)){
  104. // deptList= Arrays.stream(StringUtils.split(ChildDept,",")).map(Long::parseLong).collect(Collectors.toList());
  105. // deptList.add(LoginHelper.getDeptId());
  106. // }else{
  107. // deptList = Collections.singletonList(LoginHelper.getDeptId());
  108. // }
  109. // }
  110. List<Long> finalDeptList = PredicateBuilder.queryCacheChildDeptIds(tenantId);
  111. predicateBuilder.and(CollectionUtil.isNotEmpty(finalDeptList),()->tbSysDept.id.in(finalDeptList));
  112. }
  113. @Override
  114. public List<SysDept> findAllDeptsByTenant(String tenantId) {
  115. List<TbSysDept> list = deptRepository.findAllDeptsByTenant(tenantId);
  116. // PredicateBuilder predicateBuilder = PredicateBuilder.instance()
  117. // .and(StringUtils.isNotEmpty(tenantId), () -> tbSysDept.tenantId.eq(tenantId));
  118. // List<TbSysDept> list = jpaQueryFactory.select(tbSysDept).from(tbSysDept).where(tbSysDept.tenantId.eq(tenantId)).fetch();
  119. return MapstructUtils.convert(list, SysDept.class);
  120. }
  121. }