pagehelper分页问题

来源:5-12 mybatis三剑客之mybatis-pagehelper分页插件讲解

judyW

2019-01-03

,用pagehelper分页,分页查询出来的集合,需要再次进行筛选,还能继续使用分页功能。有没有什么解决方案。实际业务场景中貌似需要用到的还不少。

写回答

3回答

judyW

提问者

2019-01-03

通过群内小伙伴的帮助已经得到解决方案。先过滤在分页

1
3
Geely
回复
geelylucky
非常棒,lucky同学~~为你点赞!!
2019-01-14
共3条回复

judyW

提问者

2019-01-04

private boolean filterByRobotEndDate(DirectCustomerQueryVO query) {
    //根据服务周期最晚的坐席的结束时间过滤客户
    if (StringUtils.isNotBlank(query.getStartDate()) && StringUtils.isNotBlank(query.getEndDate())) {
        //1,根据条件查询出在时间段的机器id
        query.setEndDate(datePlusOneDay(query.getEndDate()));
        List<RobotPO> robotPOList = robotService.selectByTime(query.getStartDate(), query.getEndDate());
        //2,获取所有的客户id并去重
        List<Long> tenantIdList = robotPOList.stream().map(RobotPO::getTenantId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
        //3,踢出不符合条件的客户id(即在这个时间段的机器并非是服务最久的哪一个)
        Set<Long> tenantIdsByDate = Sets.newHashSet();
        //避免循环中操作数据库
        List<RobotTenantMaxEndTimeBO> tenantRobotMaxTime = robotService.getMaxEndTimeByTenantIds(tenantIdList);
        Map<Long, RobotTenantMaxEndTimeBO> robotTenantMaxEndTimeBOMap = MyCollectionUtils.listToMap(tenantRobotMaxTime, RobotTenantMaxEndTimeBO::getTenantId);
        tenantIdList.forEach(tenantId -> {
            RobotTenantMaxEndTimeBO robotTenantMaxEndTimeBO = robotTenantMaxEndTimeBOMap.get(tenantId);
            if (robotTenantMaxEndTimeBO != null) {
                LocalDate endTime = robotTenantMaxEndTimeBO.getEndTime();
                LocalDate startDateTime = MyDateUtils.toLocalDateYYYYMMdd(query.getStartDate()).minusDays(1);
                LocalDate endDateTime = MyDateUtils.toLocalDateYYYYMMdd(query.getEndDate());
                if (endTime != null) {
                    if (startDateTime.isBefore(endTime) && endDateTime.isAfter(endTime)) {
                        tenantIdsByDate.add(tenantId);
                    }
                }
            }
        });
        if (CollectionUtils.isEmpty(tenantIdsByDate)) {
            return true;
        }
        //4,根据客户id去查询
        query.setTenantIdsByDate(tenantIdsByDate);
    }
    return false;
}

优化后的代码

0
0

judyW

提问者

2019-01-04

//根据服务周期最晚的坐席的结束时间过滤客户
if (StringUtils.isNotBlank(query.getStartDate()) && StringUtils.isNotBlank(query.getEndDate())) {
    //1,根据条件查询出在时间段的机器id
    query.setEndDate(datePlusOneDay(query.getEndDate()));
    List<RobotPO> robotPOList = robotService.selectByTime(query.getStartDate(), query.getEndDate());
    //2,获取所有的客户id并去重
    List<Long> tenantIdList = robotPOList.stream().map(RobotPO::getTenantId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
    //3,踢出不符合条件的客户id(即在这个时间段的机器并非是服务最久的哪一个)
    Set<Long> tenantIdsByDate = Sets.newHashSet();
    tenantIdList.forEach(tenantId -> {
        LocalDate endTime = robotService.getMaxEndTime(tenantId);
        LocalDate startDateTime = MyDateUtils.toLocalDateYYYYMMdd(query.getStartDate()).minusDays(1);
        LocalDate endDateTime = MyDateUtils.toLocalDateYYYYMMdd(query.getEndDate());
        if (startDateTime.isBefore(endTime) && endDateTime.isAfter(endTime)) {
            tenantIdsByDate.add(tenantId);
        }
    });
    if (CollectionUtils.isEmpty(tenantIdsByDate)) {
        return SimplePageInfo.of(Collections.emptyList());
    }
    //4,根据客户id去查询
    query.setTenantIdsByDate(tenantIdsByDate);
}


0
0

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9476 学习 · 8804 问题

查看课程