SpringBoot JPA使用Specification多条件查询

public Specification<SwindleAccountEntity> exportSwindleAccountSpecification(ExportSwindleAccountRequest request) {
        return (root, criteriaQuery, criteriaBuilder) -> {
            List<Predicate> predicateList = new ArrayList<>();

            // 一级分行
            String firstBranch = request.getFirstBranch();
            if (StringUtils.isNotBlank(firstBranch)) {
                predicateList.add(criteriaBuilder.equal(root.get("firstBranch"), firstBranch));
            }
            // 使用in
predicate = criteriaBuilder.and(predicate,criteriaBuilder.and(root.get("customerBranch").in(branchList)));
            // 开户网点
            String openAccountSite = request.getOpenAccountSite();
            if (StringUtils.isNotBlank(openAccountSite)) {
                predicateList.add(criteriaBuilder.equal(root.get("openAccountSite"), openAccountSite));
            }
            // 状态
            SwindleAccountStatus swindleAccountStatus = request.getSwindleAccountStatus();
            if (swindleAccountStatus != null) {
                predicateList.add(criteriaBuilder.equal(root.get("swindleAccountStatus"), swindleAccountStatus));
            }
            // 录入时间起始日期
            ZonedDateTime zonedDateTime = request.getStartInputTime();
            if (zonedDateTime != null) {
                LocalDateTime startInputTime = zonedDateTime.toLocalDateTime();
                predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("createDatetime").as(LocalDateTime.class), startInputTime));
            }
            // 录入时间结束日期
            ZonedDateTime zonedDateEndTime = request.getEndInputTime();
            if (zonedDateEndTime != null) {
                LocalDateTime endInputTime = zonedDateEndTime.toLocalDateTime();
                predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("createDatetime").as(LocalDateTime.class), endInputTime));
            }
            // 网点开户起始日期
            LocalDate startOpenAccountDate = request.getStartOpenAccountDate();
            if (startOpenAccountDate != null) {
                predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("openAccountDate").as(LocalDate.class), startOpenAccountDate));
            }
            // 网点开户结束日期
            LocalDate endOpenAccountDate = request.getEndOpenAccountDate();
            if (endOpenAccountDate != null) {
                predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("openAccountDate").as(LocalDate.class), endOpenAccountDate));
            }
            
            /** * order By */
            Order createDateOrder = criteriaBuilder.desc(root.get("createDatetime"));
            return criteriaQuery.orderBy(createDateOrder).where(predicateList.toArray(new Predicate[predicateList.size()])).getRestriction();

        };
    }

 

public Specification<SwindleAccountEntity> getSwindleAccountSpecification(QuerySwindleAccountRequest request) {
        return (root, criteriaQuery, criteriaBuilder) -> {
            // 增加筛选条件
            Predicate predicate = criteriaBuilder.conjunction();
            // 一级分行
            String firstBranch = request.getFirstBranch();
            if (StringUtils.isNotBlank(firstBranch)) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("firstBranch"), firstBranch));
            }
            // 开户网点
            String openAccountSite = request.getOpenAccountSite();
            if (StringUtils.isNotBlank(openAccountSite)) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("openAccountSite"), openAccountSite));
            }
            // 状态
            SwindleAccountStatus swindleAccountStatus = request.getSwindleAccountStatus();
            if (swindleAccountStatus != null) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("swindleAccountStatus"), swindleAccountStatus));
            }
            // 录入时间起始日期
            ZonedDateTime zonedDateTime = request.getStartInputTime();
            if (zonedDateTime != null) {
                LocalDateTime startInputTime = zonedDateTime.toLocalDateTime();
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.greaterThanOrEqualTo(root.get("createDatetime").as(LocalDateTime.class), startInputTime));
            }
            // 录入时间结束日期
            ZonedDateTime zonedDateEndTime = request.getEndInputTime();
            if (zonedDateEndTime != null) {
                LocalDateTime endInputTime = zonedDateEndTime.toLocalDateTime();
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.lessThanOrEqualTo(root.get("createDatetime").as(LocalDateTime.class), endInputTime));
            }
            // 网点开户起始日期
            LocalDate startOpenAccountDate = request.getStartOpenAccountDate();
            if (startOpenAccountDate != null) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.greaterThanOrEqualTo(root.get("openAccountDate").as(LocalDate.class), startOpenAccountDate));
            }
            // 网点开户结束日期
            LocalDate endOpenAccountDate = request.getEndOpenAccountDate();
            if (endOpenAccountDate != null) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.lessThanOrEqualTo(root.get("openAccountDate").as(LocalDate.class), endOpenAccountDate));
            }
            return predicate;
        };
    }

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值