From 58ce8e320bbc1fa21bd1f876e4a7253425af25a0 Mon Sep 17 00:00:00 2001
From: Harry Yang <i.take.today@gmail.com>
Date: Tue, 3 Jan 2023 21:04:15 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=9C=A8=E5=AE=A1=E6=89=B9?=
 =?UTF-8?q?=E8=BF=87=E7=A8=8B=E4=B8=AD=EF=BC=8C=E5=8F=AA=E6=9C=89=E5=BD=93?=
 =?UTF-8?q?=E5=89=8D=E5=AE=A1=E6=A0=B8=E8=8A=82=E7=82=B9=E7=9A=84=E4=BA=BA?=
 =?UTF-8?q?=E3=80=81=E5=8F=91=E8=B5=B7=E4=BA=BA=E5=92=8Cadmin=E5=8F=AF?=
 =?UTF-8?q?=E8=A7=81=EF=BC=8C=E5=85=B6=E4=BB=96=E4=BA=BA=E4=B8=8D=E5=8F=AF?=
 =?UTF-8?q?=E8=A7=81=20=E7=9B=AE=E5=89=8D=E6=89=80=E6=9C=89=E4=BA=BA?=
 =?UTF-8?q?=E5=8F=AF=E8=A7=81=EF=BC=8C=E9=9C=80=E8=A6=81=E6=B7=BB=E5=8A=A0?=
 =?UTF-8?q?=E9=99=90=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../controller/backend/ProcessController.java | 22 +++++++++++++++++--
 .../process/ProjectProcessRepository.java     |  3 +++
 .../admin/business/process-review.ftl         |  2 +-
 3 files changed, 24 insertions(+), 3 deletions(-)

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<Integer> 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<ProjectProcess, Integer> {
 
   Page<ProjectProcess> findAll(Example<ProjectProcess> example, Pageable pageable);
+
+  Page<ProjectProcess> findAll(Specification<ProjectProcess> 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',