Spring-Data-Jpa 之时间段、某日期之前、生效、失效的涉及到时间的复杂查询

Spring-Data-Jpa 之时间段、某日期之前、生效、失效的涉及到时间的复杂查询


 

public static Specification<RechargeActivity> getSpecification(RechargeActivityReq req) {
    return (root, query, builder) -> {
        List<Predicate> predicates = new ArrayList<>();
        predicates.add(builder.equal(root.get("storeId"), req.getStoreId()));
        predicates.add(builder.equal(root.get("del"), false));
        if (StringUtils.isNotBlank(req.getActivityName())) {
            String keyword = req.getActivityName().trim() + "%";
            predicates.add(builder.like(root.get("activityName"), keyword));
        }

        if (req.getStatus() != null) {
            if (req.getStatus().equals(RechargeActivity.ACTIVITY_STATUS_PRE)) {
                //未生效。1.生效日期之前 2.状态为ENABLE(0)
                long now = System.currentTimeMillis();
                predicates.add(builder.greaterThan(root.get("enableTime"), now));
                predicates.add(builder.equal(root.get("activityStatus"), RechargeActivity.ACTIVITY_STATUS_ENABLE));
            } else if (req.getStatus().equals(RechargeActivity.ACTIVITY_STATUS_ENABLE)) {
                //生效中。1.生效日期之后 2.失效日期之前 3.状态为ENABLE(0)
                long now = System.currentTimeMillis();
                predicates.add(builder.lessThan(root.get("enableTime"), now));
                predicates.add(builder.greaterThan(root.get("disableTime"), now));
                predicates.add(builder.equal(root.get("activityStatus"), RechargeActivity.ACTIVITY_STATUS_ENABLE));
            } else if (req.getStatus().equals(RechargeActivity.ACTIVITY_STATUS_DISABLE)) {
                //已失效。1.失效日期之后
                long now = System.currentTimeMillis();
                predicates.add(builder.or(
                        builder.equal(root.get("activityStatus"), RechargeActivity.ACTIVITY_STATUS_DISABLE),
                        builder.and(builder.equal(root.get("activityStatus"), RechargeActivity.ACTIVITY_STATUS_ENABLE),
                                builder.lessThan(root.get("disableTime"), now)),
                        builder.and(builder.equal(root.get("activityStatus"), RechargeActivity.ACTIVITY_STATUS_PAUSE),
                                builder.lessThan(root.get("disableTime"), now))));
            } else if (req.getStatus().equals(RechargeActivity.ACTIVITY_STATUS_PAUSE)) {
                //已暂停。1.状态为PAUSE(2)
                predicates.add(builder.equal(root.get("activityStatus"), RechargeActivity.ACTIVITY_STATUS_PAUSE));
            }
        }

        Predicate[] p = new Predicate[predicates.size()];
        return builder.and(predicates.toArray(p));
    };
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值