package com.pollex.pam.service; import com.pollex.pam.domain.Consultant; import com.pollex.pam.service.dto.FastQueryConsultantParam; import org.apache.commons.lang3.StringUtils; import org.springframework.data.jpa.domain.Specification; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.util.HashSet; import java.util.Set; public class ConsultantQuerySpec { private ConsultantQuerySpec() { } public static Specification getFastQuerySpec(FastQueryConsultantParam param) { return new Specification() { @SuppressWarnings("FieldNameHidesFieldInSuperclass") private static final long serialVersionUID = 6644524130903161741L; @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { Set set = new HashSet<>(); if(!StringUtils.isEmpty(param.getCommunicationStyle())) { set.add(criteriaBuilder.like(root.get("concept"), "%" + param.getCommunicationStyle())); } set.add(criteriaBuilder.equal(root.get("gender"), param.getGender())); set.add(criteriaBuilder.between(root.get("avgScore"), param.getAvgScore().intValue() - 1, param.getAvgScore().intValue() + 1)); Predicate[] predicates = new Predicate[set.size()]; predicates = set.toArray(predicates); return criteriaBuilder.or(predicates); } }; } // public static Specification getStrictQuerySpec(StrictQueryConsultantParam param) { // return new Specification() { // @Override // public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { // Set set = new HashSet<>(); // // set.add(criteriaBuilder.equal(root.get("gender"), param.getGender())); // set.add(criteriaBuilder.between(root.get("avgScore"), param.getAvgScore().intValue() - 1, param.getAvgScore().intValue() + 1)); // set.add(criteriaBuilder.like(root.get("serve_area"),"%"+param.getArea()+"%")); // set.add(root.get("").in(param.getRequirements())) // // Predicate[] predicates = new Predicate[set.size()]; // predicates = set.toArray(predicates); // return criteriaBuilder.or(predicates); // } // }; // } }