来源三处的数据组合后,手动进行分页

📅 2026/6/30 12:30:13
来源三处的数据组合后,手动进行分页
背景业务中需要将来源三处的数据先进行各自的数据逻辑处理再把数据整合到一起手动分页后返回给前端在数据量小的情况下可以做到几秒就能查出但是如果其中一处的数据达到上万加上数据处理就会使前端接收接口返回值超时。方法针对三部分数据我们采取手动分页分开处理先查询每部分有多少数据根据数据有无判定是否执行该部分数据的处理逻辑首先处理第一部分数据有数据则进行判定三种情况1-数据满足分页要求即分页的pagenum和pagesize在第一部分数据中即可找到则直接返回不进行后续两部分数据的查询2-数据满足部分分页要求即第pagenum页的pagesize数量的数据空位在第一部分数据有一些另一些空位需要拿第二部分数据填充所以进行一、二查询不进行三3-一满足部分分页二满足部分分页剩下的需要在三中进行数据获取这时候一二三都进行查询以上查询都不是查询全部而且根据pagenum和pagesize查询对应页码和数量数据这样做大大提高了查询效率在我们业务逻辑上将接口查询效率从查询超时优化到10秒内返回参数业务数据量大分页方法Intcount1selectCountPart1();Intcount2selectCountPart2();Intcount3selectCountPart3();//计算totalinttotalcount1count2count3;//获取页码页数intpageNumStringUtil.isNotEmptyOrNull(requestDTO.getPageNum())requestDTO.getPageNum()!0?requestDTO.getPageNum():1;intpageSizeStringUtil.isNotEmptyOrNull(requestDTO.getPageSize())requestDTO.getPageSize()!0?requestDTO.getPageSize():10;//开始位置和结束位置Integerstart(pageNum-1)*pageSize;IntegerendpageNum*pageSize;// 如果总数比开始小if(totalstart){returnresponseDTO;}/** * 判断查询位置在哪里 */if(startcount1){//第一部分数据查询selectPageInfo1(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,roleInventoryId,roleInventoryName,userName,start,end);if((endcount1)){if(count20){intpage2EndpageNum*pageSize-count1;intpage2Startpage2End-(pageSize-list.size());//第二部分数据查询selectPageInfo2(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,userListAll,userName,page2Start,page2End);}//结尾在3位置需要查询3位置的数据if(end(count1count2)){if(count30){intpage3EndpageNum*pageSize-count1-count2;intpage3Startpage3End-(pageSize-list.size());//查询累计历史的数据selectPageInfo3(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,roleInventoryId,roleInventoryName,userName,page3Start,page3End);}}}}elseif(start(count1count2)){if(count20){intpage2EndpageNum*pageSize-count1;intpage2Startpage2End-(pageSize-list.size());selectPageInfo2(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,userListAll,userName,page2Start,page2End);}//结尾在3位置需要查询3位置的数据if(end(count1count2)){if(count30){intpage3EndpageNum*pageSize-count1-count2;intpage3Startpage3End-(pageSize-list.size());//查询累计历史的数据selectPageInfo3(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,roleInventoryId,roleInventoryName,userName,page3Start,page3End);}}}else{if(count30){intpage3EndpageNum*pageSize-count1-count2;intpage3Startpage3End-(pageSize-list.size());//查询累计历史的数据selectPageInfo3(list,startOfDayStr,endOfDayStr,startOfToday,endOfToday,sdfDay,city,county,countyName,roleInventoryId,roleInventoryName,userName,page3Start,page3End);}}