设备工单过滤数据权限

This commit is contained in:
2024-07-27 09:30:51 +08:00
parent 13204ae642
commit 98ce5a2c5a

View File

@@ -3,6 +3,7 @@ package cn.lihongjie.coal.deviceWorkOrder.service;
import cn.lihongjie.coal.base.dto.CommonQuery;
import cn.lihongjie.coal.base.dto.IdRequest;
import cn.lihongjie.coal.base.service.BaseService;
import cn.lihongjie.coal.common.Ctx;
import cn.lihongjie.coal.deviceWorkOrder.dto.CreateDeviceWorkOrderDto;
import cn.lihongjie.coal.deviceWorkOrder.dto.DeviceWorkOrderDto;
import cn.lihongjie.coal.deviceWorkOrder.dto.UpdateDeviceWorkOrderDto;
@@ -11,14 +12,19 @@ import cn.lihongjie.coal.deviceWorkOrder.mapper.DeviceWorkOrderMapper;
import cn.lihongjie.coal.deviceWorkOrder.repository.DeviceWorkOrderRepository;
import cn.lihongjie.coal.exception.BizException;
import jakarta.persistence.criteria.Join;
import jakarta.persistence.criteria.JoinType;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -78,14 +84,39 @@ public class DeviceWorkOrderService
}
public Page<DeviceWorkOrderDto> list(CommonQuery query) {
Specification specification = query.specification(conversionService);
if (!BooleanUtils.isTrue(Ctx.currentUser().getOrgAdmin())) {
//
specification =
specification.and(
(root, query1, cb) -> {
query1.distinct(true);
Join device = root.join("device", JoinType.LEFT);
Join category = device.join("category", JoinType.LEFT);
Join caUsers = category.join("users", JoinType.LEFT);
return cb.or(
// 没有绑定类目的设备
cb.isNull(category.get("id")),
// 类目没有配置管理员的设备
cb.isNull(caUsers.get("id")),
// 当前用户是类目管理员的设备
cb.equal(caUsers.get("id"), Ctx.currentUser().getId()));
});
}
Page<DeviceWorkOrderEntity> page =
repository.findAll(
query.specification(conversionService),
specification,
PageRequest.of(
query.getPageNo(),
query.getPageSize(),
Sort.by(query.getOrders())));
return page.map(this.mapper::toDto);
}