diff --git a/src/main/java/cn/palmte/work/controller/backend/ProcessController.java b/src/main/java/cn/palmte/work/controller/backend/ProcessController.java index 7a6907b..7de6a57 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProcessController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProcessController.java @@ -10,6 +10,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.convert.QueryByExamplePredicateBuilder; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; @@ -41,6 +42,8 @@ import java.util.stream.Collectors; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; +import javax.persistence.criteria.Expression; +import javax.persistence.criteria.Predicate; import javax.validation.Valid; import javax.validation.constraints.NotNull; @@ -604,9 +607,24 @@ public class ProcessController { .withMatcher("applyPersonName", ExampleMatcher.GenericPropertyMatcher::contains); // 只展示自己创建的草稿 - // Admin admin = InterfaceUtil.getAdmin(); - // projectProcess.setApplyPersonId(admin.getId()); + Admin admin = InterfaceUtil.getAdmin(); + if (!isAdministrator(admin)) { + Integer loginUserId = admin.getId(); + if (forAudit) { + return repository.findAll((root, query, cb) -> { + Predicate predicate = QueryByExamplePredicateBuilder.getPredicate(root, cb, Example.of(projectProcess, exampleMatcher)); + // 添加新的条件 + Predicate equal = cb.equal(root.get("applyPersonId"), loginUserId); + Expression findInSet = cb.function("find_in_set", Integer.class, cb.literal(loginUserId), root.get("currentAuditId")); + return cb.and(predicate, cb.or(equal, cb.greaterThan(findInSet, 0))); + }, pageRequest); + } + else { + projectProcess.setApplyPersonId(loginUserId); + } + } + // 超级好管理员不需要 return repository.findAll(Example.of(projectProcess, exampleMatcher), pageRequest); } diff --git a/src/main/java/cn/palmte/work/model/process/ProjectProcessRepository.java b/src/main/java/cn/palmte/work/model/process/ProjectProcessRepository.java index 68ee777..a576a45 100644 --- a/src/main/java/cn/palmte/work/model/process/ProjectProcessRepository.java +++ b/src/main/java/cn/palmte/work/model/process/ProjectProcessRepository.java @@ -3,6 +3,7 @@ package cn.palmte.work.model.process; import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; import org.springframework.data.repository.PagingAndSortingRepository; /** @@ -12,4 +13,6 @@ import org.springframework.data.repository.PagingAndSortingRepository; public interface ProjectProcessRepository extends PagingAndSortingRepository { Page findAll(Example example, Pageable pageable); + + Page findAll(Specification spec, Pageable pageable); } diff --git a/src/main/resources/templates/admin/business/process-review.ftl b/src/main/resources/templates/admin/business/process-review.ftl index 73708ba..6537b31 100644 --- a/src/main/resources/templates/admin/business/process-review.ftl +++ b/src/main/resources/templates/admin/business/process-review.ftl @@ -267,7 +267,7 @@ }) const { size, current } = this.page - fetch("${base}/process/query?size=" + size + "&page=" + current, { + fetch("${base}/process/query?size=" + size + "&page=" + current + "&forAudit=true", { method: 'POST', // or 'PUT' headers: { 'Content-Type': 'application/json',