搜索项目过滤优化
parent
264479a186
commit
c7372b37a4
|
@ -48,15 +48,4 @@ public interface ProjectRepository extends JpaRepository<Project,Integer> {
|
||||||
nativeQuery = true)
|
nativeQuery = true)
|
||||||
List<Project> findBudgetPassedProjects(@Param("q") String query);
|
List<Project> 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<Project> findBudgetPassedProjectsForSaleContract(@Param("q") String query);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package cn.palmte.work.model.process;
|
||||||
|
|
||||||
|
import cn.palmte.work.model.enums.ProcessType;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="https://github.com/TAKETODAY">Harry Yang</a>
|
||||||
|
* @since 2.0 2023/1/4 21:12
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class QueryProject {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private String projectNo;
|
||||||
|
|
||||||
|
private ProcessType processType;
|
||||||
|
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ package cn.palmte.work.service;
|
||||||
|
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
|
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
|
||||||
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
@ -15,6 +16,7 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
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.ProcurementContract;
|
||||||
import cn.palmte.work.model.process.ProcurementDetail;
|
import cn.palmte.work.model.process.ProcurementDetail;
|
||||||
import cn.palmte.work.model.process.ProjectProcess;
|
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.SaleContract;
|
||||||
import cn.palmte.work.model.process.SupplierMaterial;
|
import cn.palmte.work.model.process.SupplierMaterial;
|
||||||
import cn.palmte.work.model.process.form.SaleContractDetailForm;
|
import cn.palmte.work.model.process.form.SaleContractDetailForm;
|
||||||
|
@ -70,7 +73,39 @@ public class ProjectProcessService {
|
||||||
projects = projectRepository.findBudgetPassedProjects(q);
|
projects = projectRepository.findBudgetPassedProjects(q);
|
||||||
}
|
}
|
||||||
else if (processType == ProcessType.sale_contract) {
|
else if (processType == ProcessType.sale_contract) {
|
||||||
projects = projectRepository.findBudgetPassedProjectsForSaleContract(q);
|
List<QueryProject> 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<QueryProject> 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);
|
return projectService.visibleProjects(projects, loginUser);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue