From b10654376d94749a0aa9f342ecfe8db51f2af144 Mon Sep 17 00:00:00 2001 From: Harry Yang Date: Thu, 5 Jan 2023 20:58:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AE=B0=E5=BD=95=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E8=AE=B0=E5=BD=95=20=E5=9C=A8=E5=B7=B2=E5=8A=9E?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E9=9C=80=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/backend/ProcessController.java | 41 ++++++++++++++++-- .../work/model/process/ProjectProcess.java | 3 ++ src/main/resources/sql/2.0.sql | 43 ++++++++++--------- .../admin/business/process-review.ftl | 6 ++- 4 files changed, 68 insertions(+), 25 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 6276c1b..f6d945d 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProcessController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProcessController.java @@ -31,6 +31,7 @@ import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; @@ -101,7 +102,6 @@ import lombok.RequiredArgsConstructor; public class ProcessController { static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private final DeptRepository deptRepository; private final ProjectRepository projectRepository; private final ProjectBudgetService projectBudgetService; @@ -177,6 +177,10 @@ public class ProcessController { */ @GetMapping("/review") public String review(Model model) { + Admin admin = getLoginUser(); + // 超级管理员,只有查看权限,不能编辑和删除除非是自己的 + model.addAttribute("adminId", admin.getId()); + model.addAttribute("isAdmin", isAdministrator(admin)); model.addAttribute("processTypes", ProcessType.values()); return "/admin/business/process-review"; } @@ -673,7 +677,22 @@ public class ProcessController { }, pageRequest); } else { - projectProcess.setApplyPersonId(loginUserId); + // 已办流程 + return repository.findAll((root, query, cb) -> { + Predicate predicate = QueryByExamplePredicateBuilder.getPredicate(root, cb, Example.of(projectProcess, exampleMatcher)); + // 添加新的条件 + Predicate applyPersonId = cb.equal(root.get("applyPersonId"), loginUserId); + + // 待自己审的 + Expression findInSet = cb.function("find_in_set", Integer.class, cb.literal(loginUserId), root.get("currentAuditId")); + Expression reviewedIdFindInSet = cb.function("find_in_set", Integer.class, cb.literal(loginUserId), root.get("reviewedId")); + + Predicate or = cb.or(applyPersonId, + cb.greaterThan(reviewedIdFindInSet, 0), + cb.greaterThan(findInSet, 0)); + + return cb.and(predicate, or); + }, pageRequest); } } @@ -702,11 +721,27 @@ public class ProcessController { } @ResponseBody + @Transactional @PostMapping("/audit") public void audit(@RequestBody @Valid AuditForm form) { - ProjectProcess process = repository.findOne(form.processId); + ProjectProcess process = obtainProjectProcess(form.processId); ActApproveTypeEnum approveType = form.processStatus == ProcessStatus.audit_passed ? ActApproveTypeEnum.APPROVAL_PASSED : ActApproveTypeEnum.APPROVAL_UN_PASS; + + Admin admin = getLoginUser(); + String reviewedId = process.getReviewedId(); + + ArrayList reviewed = new ArrayList<>(); + if (reviewedId != null) { + String[] split = reviewedId.split(","); + Collections.addAll(reviewed, split); + } + reviewed.add(String.valueOf(admin.getId())); + reviewedId = String.join(",", reviewed); + process.setReviewedId(reviewedId); + entityManager.merge(process); +// jdbcTemplate.update("update project_process set reviewed_id =? where id=?", reviewed, process.getId()); + switch (process.getProcessType()) { case procurement_contract: projectInstanceService.completeTaskByProjectId(process.getId(), ActProjectTypeEnum.BUSINESS_PURCHASE, approveType, form.auditOpinion); diff --git a/src/main/java/cn/palmte/work/model/process/ProjectProcess.java b/src/main/java/cn/palmte/work/model/process/ProjectProcess.java index 8ad8030..85534f4 100644 --- a/src/main/java/cn/palmte/work/model/process/ProjectProcess.java +++ b/src/main/java/cn/palmte/work/model/process/ProjectProcess.java @@ -96,6 +96,9 @@ public class ProjectProcess implements Serializable { // 当前审核人ID private String currentAuditId; + // 当前审核人ID (逗号分割) find_in_set + private String reviewedId; + // 最后更新时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/src/main/resources/sql/2.0.sql b/src/main/resources/sql/2.0.sql index 1444a65..e5735e1 100644 --- a/src/main/resources/sql/2.0.sql +++ b/src/main/resources/sql/2.0.sql @@ -4,27 +4,28 @@ create table project_process ( id int auto_increment primary key comment 'ID', - apply_date date null comment '申请时间', - apply_dept varchar(255) null comment '申请部门(逗号分割)', - apply_dept_id varchar(255) null comment '申请部门ID(逗号分割)', - apply_dept_leader_id int null comment '申请部门领导ID', - apply_dept_leader_name varchar(255) null comment '申请人领导', - apply_person_name varchar(255) null comment '申请人姓名', - apply_person_id int null comment '申请人ID', - contract_name varchar(255) null comment '合同名称', - contract_no varchar(255) null comment '合同编号', - project_id int null comment '项目ID', - project_no varchar(255) null comment '项目编号', - project_title varchar(255) null comment '标题', - seal_types varchar(255) null comment '印章类型', - `status` varchar(255) null comment '流程状态', - tax_rate varchar(255) null comment '税率', - process_type varchar(255) null comment '流程类型', - remark text null comment '备注', - attachment_uri text null comment '附件 JSON Array', + apply_date date null comment '申请时间', + apply_dept varchar(255) null comment '申请部门(逗号分割)', + apply_dept_id varchar(255) null comment '申请部门ID(逗号分割)', + apply_dept_leader_id int null comment '申请部门领导ID', + apply_dept_leader_name varchar(255) null comment '申请人领导', + apply_person_name varchar(255) null comment '申请人姓名', + apply_person_id int null comment '申请人ID', + contract_name varchar(255) null comment '合同名称', + contract_no varchar(255) null comment '合同编号', + project_id int null comment '项目ID', + project_no varchar(255) null comment '项目编号', + project_title varchar(255) null comment '标题', + seal_types varchar(255) null comment '印章类型', + `status` varchar(255) null comment '流程状态', + tax_rate varchar(255) null comment '税率', + process_type varchar(255) null comment '流程类型', + remark text null comment '备注', + attachment_uri text null comment '附件 JSON Array', - current_audit varchar(255) null comment '当前审核人', - current_audit_id varchar(255) null comment '当前审核人ID逗号分割', + reviewed_id varchar(1024) null comment '审核过的人的ID', + current_audit varchar(255) null comment '当前审核人', + current_audit_id varchar(255) null comment '当前审核人ID逗号分割', create_at datetime default CURRENT_TIMESTAMP comment '创建时间', last_update_at datetime default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP comment '最后更新时间' @@ -32,7 +33,7 @@ create table project_process ) comment '项目对应的流程'; alter table project_process - add apply_dept_leader_id int null comment '申请部门领导ID'; + add reviewed_id varchar(1024) null comment '审核过的人的ID'; # 采购合同 create table procurement_contract diff --git a/src/main/resources/templates/admin/business/process-review.ftl b/src/main/resources/templates/admin/business/process-review.ftl index d786812..856631f 100644 --- a/src/main/resources/templates/admin/business/process-review.ftl +++ b/src/main/resources/templates/admin/business/process-review.ftl @@ -114,7 +114,11 @@