| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- package cc.iotkit.data.service;
- import cc.iotkit.common.constant.GlobalConstants;
- import cc.iotkit.common.constant.UserConstants;
- import cc.iotkit.common.redis.utils.RedisUtils;
- import cc.iotkit.common.satoken.utils.LoginHelper;
- import cc.iotkit.common.tenant.helper.TenantHelper;
- import cc.iotkit.common.utils.MapstructUtils;
- import cc.iotkit.common.utils.StringUtils;
- import cc.iotkit.data.dao.IJPACommData;
- import cc.iotkit.data.dao.SysDeptRepository;
- import cc.iotkit.data.model.TbSysDept;
- import cc.iotkit.data.system.ISysDeptData;
- import cc.iotkit.data.util.PredicateBuilder;
- import cc.iotkit.model.system.SysDept;
- import cn.hutool.core.collection.CollectionUtil;
- import cn.hutool.core.util.ObjectUtil;
- import com.querydsl.jpa.impl.JPAQueryFactory;
- import lombok.RequiredArgsConstructor;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Primary;
- import org.springframework.data.jpa.repository.JpaRepository;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.List;
- import java.util.stream.Collectors;
- import java.util.stream.StreamSupport;
- import static cc.iotkit.data.model.QTbSysDept.tbSysDept;
- import static cc.iotkit.data.model.QTbSysRoleDept.tbSysRoleDept;
- /**
- * @Author:tfd
- * @Date:2023/5/30 13:43
- */
- @Primary
- @Service
- @RequiredArgsConstructor
- public class SysDeptDataImpl implements ISysDeptData, IJPACommData<SysDept, Long> {
- @Autowired
- private SysDeptRepository deptRepository;
- private final JPAQueryFactory jpaQueryFactory;
- @Override
- public JpaRepository getBaseRepository() {
- return deptRepository;
- }
- @Override
- public Class getJpaRepositoryClass() {
- return TbSysDept.class;
- }
- @Override
- public Class getTClass() {
- return SysDept.class;
- }
- @Override
- public List<SysDept> findDepts(SysDept dept) {
- PredicateBuilder predicateBuilder = PredicateBuilder.instance()
- .and(ObjectUtil.isNotNull(dept.getId()), () -> tbSysDept.id.eq(dept.getId()))
- .and(ObjectUtil.isNotNull(dept.getParentId()), () -> tbSysDept.parentId.eq(dept.getParentId()))
- .and(StringUtils.isNotEmpty(dept.getDeptName()), () -> tbSysDept.deptName.like("%"+dept.getDeptName()+"%"))
- .and(StringUtils.isNotEmpty(dept.getTenantId()), () -> tbSysDept.tenantId.eq(dept.getTenantId()))
- .and(StringUtils.isNotEmpty(dept.getStatus()), () -> tbSysDept.status.eq(dept.getStatus()));
- checkDataPermission(predicateBuilder, TenantHelper.getTenantId());
- return MapstructUtils.convert(StreamSupport.stream(deptRepository.findAll(predicateBuilder.build()).spliterator(), false).collect(Collectors.toList()), SysDept.class);
- }
- @Override
- public List<SysDept> findByRoleId(Long roleId) {
- List<TbSysDept> list = jpaQueryFactory.select(tbSysDept).from(tbSysDept).leftJoin(tbSysRoleDept).on(tbSysDept.id.eq(tbSysRoleDept.deptId))
- .where(tbSysRoleDept.roleId.eq(roleId)).orderBy(tbSysDept.parentId.desc(), tbSysDept.orderNum.desc()).fetch();
- return MapstructUtils.convert(list, SysDept.class);
- }
- @Override
- public long countByParentId(Long parentId) {
- return jpaQueryFactory.select(tbSysDept.id.count()).from(tbSysDept).where(tbSysDept.parentId.eq(parentId)).fetchOne();
- }
- @Override
- public List<SysDept> findByDeptId(Long deptId) {
- return MapstructUtils.convert(deptRepository.findAll().stream().filter(o -> o.getAncestors() != null && o.getAncestors().contains(deptId.toString()))
- .collect(Collectors.toList()), SysDept.class);
- }
- @Override
- public boolean checkDeptNameUnique(String deptName, Long parentId, Long deptId) {
- PredicateBuilder predicateBuilder = PredicateBuilder.instance().and(tbSysDept.deptName.eq(deptName))
- .and(tbSysDept.parentId.eq(parentId));
- if (ObjectUtil.isNotNull(deptId)) {
- predicateBuilder.and(tbSysDept.id.ne(deptId));
- }
- Long count = jpaQueryFactory.select(tbSysDept.id.count())
- .from(tbSysDept)
- .where(predicateBuilder.build())
- .fetchOne();
- return count == 0;
- }
- @Override
- public long selectNormalChildrenDeptById(Long deptId) {
- PredicateBuilder predicateBuilder = PredicateBuilder.instance().and(tbSysDept.status.eq(UserConstants.DEPT_NORMAL));
- return jpaQueryFactory.select(tbSysDept.ancestors).where(predicateBuilder.build()).fetch().stream().filter(o -> o.indexOf(deptId.toString()) != -1).count();
- }
- private void checkDataPermission(PredicateBuilder predicateBuilder, String tenantId){
- // Long deptId = LoginHelper.getDeptId();
- // List<Long> deptList = new ArrayList<>();
- // if(ObjectUtil.isNotNull(deptId)){
- // String ChildDept = RedisUtils.getCacheObject(GlobalConstants.DEPT_CHILD_PREFIX+tenantId+":"+LoginHelper.getDeptId());
- // if(StringUtils.isNotEmpty(ChildDept)){
- // deptList= Arrays.stream(StringUtils.split(ChildDept,",")).map(Long::parseLong).collect(Collectors.toList());
- // deptList.add(LoginHelper.getDeptId());
- // }else{
- // deptList = Collections.singletonList(LoginHelper.getDeptId());
- // }
- // }
- List<Long> finalDeptList = PredicateBuilder.queryCacheChildDeptIds(tenantId);
- predicateBuilder.and(CollectionUtil.isNotEmpty(finalDeptList),()->tbSysDept.id.in(finalDeptList));
- }
- @Override
- public List<SysDept> findAllDeptsByTenant(String tenantId) {
- List<TbSysDept> list = deptRepository.findAllDeptsByTenant(tenantId);
- // PredicateBuilder predicateBuilder = PredicateBuilder.instance()
- // .and(StringUtils.isNotEmpty(tenantId), () -> tbSysDept.tenantId.eq(tenantId));
- // List<TbSysDept> list = jpaQueryFactory.select(tbSysDept).from(tbSysDept).where(tbSysDept.tenantId.eq(tenantId)).fetch();
- return MapstructUtils.convert(list, SysDept.class);
- }
- }
|