@Override
public Page<ParkVisit> list(String day,
String visitStratTime,
String visitEndTime, Integer parkId, String checkStatus,
String parkName, Integer id, String visitorUserName,String userName
) throws Exception {
Page<ParkVisit> parkVisits = null;
try {
parkVisits = parkVisitDao.findAll(new Specification<ParkVisit>() {
@Override
public Predicate toPredicate(Root<ParkVisit> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb){
List<Predicate> predicateList = new ArrayList<>();
List<Predicate> orList = new ArrayList<>();
if (StringUtil.isNotEmpty(visitStratTime)) {
predicateList.add(cb.greaterThanOrEqualTo(root.get("visitTime").as(String.class), visitStratTime));
}
if (StringUtil.isNotEmpty(visitEndTime)) {
predicateList.add(cb.lessThanOrEqualTo(root.get("visitTime").as(String.class).as(String.class), visitEndTime));
}
if (parkId != null) {
predicateList.add(cb.equal(root.get("parkId").as(String.class), parkId));
}
if ("5".equals(checkStatus) || "8".equals(checkStatus)) {
predicateList.add(
cb.or(
cb.equal(root.get("checkStatus"), "5"),
cb.equal(root.get("checkStatus"), "8")
)
);
int i = checkStatus.indexOf(",");
if (i <= 0) { //单状态
predicateList.add(cb.equal(root.get("checkStatus")
.as(String.class), checkStatus));
} else {
//多状态 zgState="审核,未审核,待审核"
String[] split = zgState.split(",");
Expression<String> states = root.<String>get("checkStatus");
predicateList.add(states.in(split)); // 往in中添加所有状态
}
List<Predicate> listOr = new ArrayList<Predicate>();
if (StringUtil.isNoEmpty(userName)) {
String[] split = userName.split(",");
if (split.length <= 1) {
predicateList.add(criteriaBuilder.like(root.get(userName), "%" + userName + "%"));
} else {
Predicate userName2 = null;
for (String item : split) {
userName2 = criteriaBuilder.like(root.get("userName").as(String.class), "%" + item + "%");
listOr.add(criteriaBuilder.or(userName2));
}
}
}
Predicate[] arrayOr = new Predicate[listOr.size()];
Predicate or = cb.or(listOr.toArray(arrayOr));
Predicate[] pre = new Predicate[predicateList.size()];
Predicate and = cb.and(predicateList.toArray(pre));
if (listOr.size() > 0) return criteriaQuery.where(and, or).getRestriction();
else return criteriaQuery.where(and).getRestriction();
/*
Predicate[] pre = new Predicate[predicateList.size()];
criteriaQuery.where(predicateList.toArray(pre));
return cb.and(predicateList.toArray(pre));
List<Order> orderList = new ArrayList();
orderList.add(cb.desc(root.get("sort")));
cb.orderBy(orderList);
return cb.and(predicateList.toArray(pre));*/
}
});
}catch(Exception e){
log.error("ParkVisitServiceImpl list Error:" + e);
throw e;
}
return parkVisits;
}
}
spring boot jpa 中 Specification的操作
最新推荐文章于 2023-09-01 17:27:28 发布