Sort sort = new Sort(Sort.Direction.DESC, "startTime"); List<ForumApprove> list = forumApproveRepository.findAll(new Specification<ForumApprove>() { @Override public Predicate toPredicate(Root<ForumApprove> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) { List<Predicate> one = new ArrayList<>(); List<Predicate> two = new ArrayList<>(); List<Predicate> three = new ArrayList<>(); List<Predicate> four = new ArrayList<>(); //团队 if(fa.getType()==null){ log.debug("type为空"); } else if (fa.getType() == 4) { if(fa.getGroupBy()==null){ //个人 one.add(root.get(Constants.CREATED_BY).in(userDetails.getOpenId())); one.add(root.get(Constants.INITIATORID).isNull()); one.add(root.get(Constants.END_TIME).isNull()); two.add(root.get(Constants.APPROVERS).in(userDetails.getOpenId())); two.add(root.get(Constants.EXECUTOR_TYPE).in(2)); two.add(root.get(Constants.STATUS).in(0)); three.add(root.get(Constants.CREATED_BY).in(userDetails.getOpenId())); three.add(root.get(Constants.APPROVE_TYPE).in(4)); }else if(fa.getGroupBy()!=null){ one.add(root.get(Constants.GROUP_BY).in(fa.getGroupBy())); one.add(root.get(Constants.CREATED_BY).in(userDetails.getOpenId())); one.add(root.get(Constants.INITIATORID).isNull()); one.add(root.get(Constants.END_TIME).isNull()); two.add(root.get(Constants.APPROVERS).in(userDetails.getOpenId())); two.add(root.get(Constants.GROUP_BY).in(fa.getGroupBy())); two.add(root.get(Constants.EXECUTOR_TYPE).in(2)); two.add(root.get(Constants.STATUS).in(0)); three.add(root.get(Constants.GROUP_BY).in(fa.getGroupBy())); three.add(root.get(Constants.APPROVE_TYPE).in(4)); three.add(root.get(Constants.CREATED_BY).in(userDetails.getOpenId())); }else{ log.debug("输入错误"); } } else if (fa.getType() == 1) { if (fa.getGroupBy() != null) { one.add(cb.equal(root.get(Constants.GROUP_BY), fa.getGroupBy())); } if (fa.getStatus() == null) { throw new ServiceException(ErrorConstants.APPROVAL_FIND_CREATED_ERROR, Constants.APPROVAL_FIND_CREATED_ERROR); } else if (fa.getStatus() == 0) { one.add(root.get(Constants.CREATED_BY).in(userDetails.getOpenId())); one.add(root.get(Constants.INITIATORID).isNull()); one.add(root.get(Constants.END_TIME).isNull()); } else if (fa.getStatus() == 1) { one.add(root.get(Constants.CREATED_BY).in(userDetails.getOpenId())); one.add(root.get(Constants.INITIATORID).isNull()); one.add(root.get(Constants.END_TIME).isNotNull()); } else { throw new ServiceException(ErrorConstants.APPROVAL_FIND_CREATED_ERROR, Constants.APPROVAL_FIND_CREATED_ERROR); } //我申请的 } else if (fa.getType() == 2) { if (fa.getGroupBy() != null) { one.add(cb.equal(root.get(Constants.GROUP_BY), fa.getGroupBy())); } if (fa.getStatus() == null) { throw new ServiceException(ErrorConstants.APPROVAL_FIND_APPROVE_ERROR, Constants.APPROVAL_FIND_APPROVE_ERROR); } else if (fa.getStatus() == 0) { one.add(root.get(Constants.EXECUTOR_TYPE).in(2)); one.add(root.get(Constants.APPROVERS).in(userDetails.getOpenId())); one.add(root.get(Constants.STATUS).in(0)); one.add(root.get(Constants.EXECUTION_TIME).isNull()); } else if (fa.getStatus() == 1) { one.add(root.get(Constants.EXECUTOR_TYPE).in(2)); one.add(root.get(Constants.APPROVERS).in(userDetails.getOpenId())); one.add(root.get(Constants.STATUS).in(1, 2)); } else { throw new ServiceException(ErrorConstants.APPROVAL_FIND_APPROVE_ERROR, Constants.APPROVAL_FIND_APPROVE_ERROR); } //我审批的 } else if (fa.getType() == 3) { //抄送我的 if (fa.getGroupBy() != null) { one.add(cb.equal(root.get(Constants.GROUP_BY), fa.getGroupBy())); } if (fa.getStatus() == null) { throw new ServiceException(ErrorConstants.APPROVAL_FIND_COPY_ERROR, Constants.APPROVAL_FIND_COPY_ERROR); } else if (fa.getStatus() == 0) { //已完成的并且全部通过的审批单才会在抄送我的 one.add(root.get(Constants.EXECUTOR_TYPE).in(0)); one.add(root.get(Constants.APPROVERS).in(userDetails.getOpenId())); one.add(root.get(Constants.STATUS).in(0)); one.add(root.get("adopt").in(1)); } else if (fa.getStatus() == 1) { one.add(root.get(Constants.EXECUTOR_TYPE).in(0)); one.add(root.get(Constants.APPROVERS).in(userDetails.getOpenId())); one.add(root.get(Constants.STATUS).in(1)); } else { throw new ServiceException(ErrorConstants.APPROVAL_FIND_COPY_ERROR, Constants.APPROVAL_FIND_COPY_ERROR); } } else { throw new ServiceException(ErrorConstants.APPROVAL_FIND_TYPE_NOT_EXISTENT, Constants.APPROVAL_FIND_TYPE_NOT_EXISTENT); } four.add(root.get("tenantId").in(fa.getTenantId())); Predicate[] fours = new Predicate[four.size()]; Predicate[] first = new Predicate[one.size()]; Predicate[] second = new Predicate[two.size()]; Predicate[] third = new Predicate[three.size()]; if (second.length == 0) { return cb.and(cb.and(one.toArray(first)), cb.and(four.toArray(fours))); } else { return cb.or(cb.and(one.toArray(first)), cb.and(two.toArray(second)), cb.and(three.toArray(third))); } } }, sort);
SpringDataJpa的Specification查询
猜你喜欢
转载自blog.csdn.net/qq_39438729/article/details/79375302
今日推荐
周排行