pagehelper分页问题
来源:5-12 mybatis三剑客之mybatis-pagehelper分页插件讲解
judyW
2019-01-03
,用pagehelper分页,分页查询出来的集合,需要再次进行筛选,还能继续使用分页功能。有没有什么解决方案。实际业务场景中貌似需要用到的还不少。
写回答
3回答
-
judyW
提问者
2019-01-03
通过群内小伙伴的帮助已经得到解决方案。先过滤在分页
132019-01-14 -
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; }
优化后的代码
00 -
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); }
00
相似问题