请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

pagehelper分页问题

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

正在回答 回答被采纳积分+3

3回答

提问者 judyW 2019-01-03 20:58:11

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

1 回复 有任何疑惑可以回复我~
  • 同学,你好,我是geely老师的助教。
    关于你这个问题,已经在群里和你讨论过了。
    1.首先根据前端传来的时间段查询出符合条件的机器ID。
    2.根据查询出来的机器ID获取对应的客户ID。
    3.需要再次判断这些客户ID是否符合前端所给的条件。剔除不符合条件的客户ID。
    4.根据客户ID做相应的分页查询。
    希望能帮助到你。
    回复 有任何疑惑可以回复我~ 2019-01-03 21:02:30
  • 提问者 judyW 回复 geelylucky #2
    非常感觉。完美契合业务场景。果然助教。点个赞!
    回复 有任何疑惑可以回复我~ 2019-01-03 21:04:10
  • Geely 回复 geelylucky #3
    非常棒,lucky同学~~为你点赞!!
    回复 有任何疑惑可以回复我~ 2019-01-14 11:43:28
提问者 judyW 2019-01-04 12:06:38
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 回复 有任何疑惑可以回复我~
提问者 judyW 2019-01-04 11:08:08
//根据服务周期最晚的坐席的结束时间过滤客户
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 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信