ruoyi对数据二次处理后分页失效 |
您所在的位置:网站首页 › 分页失效 › ruoyi对数据二次处理后分页失效 |
业务场景
正常业务场景下,在service层只做一次查询就能满足需求,若需要分页,只需在Controller层添加继承BaseController,使用startPage()和getDataTable()即可。业务需求存在需要对查询的数据做二次处理。 问题描述业务需求存在需要对查询的数据做再加工处理,处理过后使用原来的分页时,分页就不对了,总条数total不对。 原因分析ruoyi使用的是PageHelper分页,查询数据返回的list在开始时使用的startPage(),这个list会存入线程中,使用getDataTable()时new PageInfo(list)时这里的list变成了处理过的listTemp,与线程中的list不同了。 解决方案 1.controler中处理⭐⭐⭐ public TableDataInfo list(BrhPurchaseOrderReportVo orderReportVo) { PageDomain pageDomain = TableSupport.buildPageRequest(); Integer pageNum = pageDomain.getPageNum(); Integer pageSize = pageDomain.getPageSize(); List list = new ArrayList(); //获取处理好的list集合 int num = list.size(); //处理list list = list.stream()..某些代码..collect(Collectors.toList()); TableDataInfo rspData = new TableDataInfo(); rspData.setCode(HttpStatus.SUCCESS); rspData.setRows(list); rspData.setTotal(num); return rspData; } 2.BaseController中处理⭐⭐⭐⭐⭐ public class BaseController { ...某些代码 /** * 响应请求分页数据 * 查询后重新处理list再返回时使用 * @param listVO 处理过的list * @param list 未处理的list * by wuhb */ @SuppressWarnings({ "rawtypes", "unchecked" }) protected TableDataInfo getDataTableNew(List listVO, List list) { TableDataInfo rspData = new TableDataInfo(); rspData.setCode(HttpStatus.SUCCESS); rspData.setMsg("查询成功"); rspData.setRows(listVO); rspData.setTotal(new PageInfo(list).getTotal()); return rspData; } ...某些代码 }使用 public TableDataInfo list(BrhPurchaseOrderReportVo orderReportVo) { startPage(); //未处理的list List list = purchaseOrderReportService.getMerInfoList(orderReportVo); //二次处理过的list List listVo = purchaseOrderReportService.getMerOrderReportList(orderReportVo,list); return getDataTableNew(listVo,list); } 总结ruoyi框架的分页针对一般查询足够了,但对于需要处理的查询结果需要稍微调整下。这里推荐第2个解决方案,对代码没有侵入性且复用性高,不用每个controler都写一遍。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |