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<Consultant> getFastQuerySpec(FastQueryConsultantParam param) {
|
return new Specification<Consultant>() {
|
@SuppressWarnings("FieldNameHidesFieldInSuperclass")
|
private static final long serialVersionUID = 6644524130903161741L;
|
|
@Override
|
public Predicate toPredicate(Root<Consultant> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
|
Set<Predicate> 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<Consultant> getStrictQuerySpec(StrictQueryConsultantParam param) {
|
// return new Specification<Consultant>() {
|
// @Override
|
// public Predicate toPredicate(Root<Consultant> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
|
// Set<Predicate> 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);
|
// }
|
// };
|
// }
|
}
|