From c7372b37a46056a2243f1272b6b65c64a4f7a8a1 Mon Sep 17 00:00:00 2001 From: Harry Yang Date: Wed, 4 Jan 2023 21:54:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E9=A1=B9=E7=9B=AE=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../palmte/work/model/ProjectRepository.java | 11 ------ .../work/model/process/QueryProject.java | 20 ++++++++++ .../work/service/ProjectProcessService.java | 37 ++++++++++++++++++- 3 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 src/main/java/cn/palmte/work/model/process/QueryProject.java diff --git a/src/main/java/cn/palmte/work/model/ProjectRepository.java b/src/main/java/cn/palmte/work/model/ProjectRepository.java index 55b55aa..1fbd56b 100644 --- a/src/main/java/cn/palmte/work/model/ProjectRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectRepository.java @@ -48,15 +48,4 @@ public interface ProjectRepository extends JpaRepository { nativeQuery = true) List findBudgetPassedProjects(@Param("q") String query); - /** - * 查询预算通过的项目 - */ - @Query(value = "select distinct p.* from project p left join project_process pp on p.id = pp.project_id " + - "where (p.`status` > 5 or (p.`status` = 5 and p.approve_status_budget = 2)) " + - " and (p.`project_no` like concat('%', :q, '%') or p.`name` like concat('%', :q, '%')) " + - " and (pp.process_type is null or (pp.process_type <> 'sale_contract' and " + - " (select pps.process_type from project_process pps where pps.id = pp.id) <> 'procurement_contract'))", - nativeQuery = true) - List findBudgetPassedProjectsForSaleContract(@Param("q") String query); - } diff --git a/src/main/java/cn/palmte/work/model/process/QueryProject.java b/src/main/java/cn/palmte/work/model/process/QueryProject.java new file mode 100644 index 0000000..6ad345f --- /dev/null +++ b/src/main/java/cn/palmte/work/model/process/QueryProject.java @@ -0,0 +1,20 @@ +package cn.palmte.work.model.process; + +import cn.palmte.work.model.enums.ProcessType; +import lombok.Data; + +/** + * @author Harry Yang + * @since 2.0 2023/1/4 21:12 + */ +@Data +public class QueryProject { + + private Integer id; + + private String name; + private String projectNo; + + private ProcessType processType; + +} diff --git a/src/main/java/cn/palmte/work/service/ProjectProcessService.java b/src/main/java/cn/palmte/work/service/ProjectProcessService.java index 8e6fcd5..b781155 100644 --- a/src/main/java/cn/palmte/work/service/ProjectProcessService.java +++ b/src/main/java/cn/palmte/work/service/ProjectProcessService.java @@ -2,6 +2,7 @@ package cn.palmte.work.service; import org.springframework.beans.BeanUtils; import org.springframework.jdbc.core.BatchPreparedStatementSetter; +import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -15,6 +16,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.function.Predicate; import java.util.stream.Collectors; import javax.persistence.EntityManager; @@ -39,6 +41,7 @@ import cn.palmte.work.model.process.BudgetPurchaseDetail; import cn.palmte.work.model.process.ProcurementContract; import cn.palmte.work.model.process.ProcurementDetail; import cn.palmte.work.model.process.ProjectProcess; +import cn.palmte.work.model.process.QueryProject; import cn.palmte.work.model.process.SaleContract; import cn.palmte.work.model.process.SupplierMaterial; import cn.palmte.work.model.process.form.SaleContractDetailForm; @@ -70,7 +73,39 @@ public class ProjectProcessService { projects = projectRepository.findBudgetPassedProjects(q); } else if (processType == ProcessType.sale_contract) { - projects = projectRepository.findBudgetPassedProjectsForSaleContract(q); + List queryProjects = jdbcTemplate.query("select distinct p.id, p.name, p.project_no projectNo, pp.process_type processType " + + " from project p left join project_process pp on p.id = pp.project_id " + + "where (p.`status` > 5 or (p.`status` = 5 and p.approve_status_budget = 2)) " + + " and (p.`project_no` like concat('%', ?, '%') or p.`name` like concat('%', ?, '%'))", + new Object[] { q, q }, + BeanPropertyRowMapper.newInstance(QueryProject.class)); + + projects = queryProjects.stream().filter(queryProject -> { + ProcessType processTypeToTest = queryProject.getProcessType(); + if (processTypeToTest == null) { + return true; + } + else { + // 如果已经存在销售合同,就排除 + if (processTypeToTest == ProcessType.sale_contract) { + return false; + } + else { + // 一个项目可能有采购合同,但是要去判断是不是存在销售合同,存在就排除 + Predicate predicate = query -> { + return Objects.equals(query.getId(), queryProject.getId()) + && query.getProcessType() == ProcessType.sale_contract; + }; + return queryProjects.stream().noneMatch(predicate); + } + } + }).map(queryProject -> { + Project project = new Project(); + project.setId(queryProject.getId()); + project.setName(queryProject.getName()); + project.setProjectNo(queryProject.getProjectNo()); + return project; + }).collect(Collectors.toList()); } return projectService.visibleProjects(projects, loginUser); }