采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
,用pagehelper分页,分页查询出来的集合,需要再次进行筛选,还能继续使用分页功能。有没有什么解决方案。实际业务场景中貌似需要用到的还不少。
通过群内小伙伴的帮助已经得到解决方案。先过滤在分页
同学,你好,我是geely老师的助教。 关于你这个问题,已经在群里和你讨论过了。 1.首先根据前端传来的时间段查询出符合条件的机器ID。 2.根据查询出来的机器ID获取对应的客户ID。 3.需要再次判断这些客户ID是否符合前端所给的条件。剔除不符合条件的客户ID。 4.根据客户ID做相应的分页查询。 希望能帮助到你。
非常感觉。完美契合业务场景。果然助教。点个赞!
非常棒,lucky同学~~为你点赞!!
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; }
优化后的代码
//根据服务周期最晚的坐席的结束时间过滤客户 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); }
登录后可查看更多问答,登录/注册
前后端分离,数据库接口设计,架构设计,功能开发,上线运维
10.2k 10
1.9k 22
1.4k 21
2.2k 21
2.0k 18